From 5c8017e0880cc5f71854ebb71a38b944e58260b1 Mon Sep 17 00:00:00 2001 From: Tasuku Suzuki Date: Wed, 26 May 2010 03:32:11 +0900 Subject: Fix QT_NO_TEXTDATE --- src/declarative/qml/qdeclarativecompiler.cpp | 4 ++++ src/declarative/qml/qdeclarativeengine.cpp | 4 ++++ src/declarative/qml/qdeclarativeengine_p.h | 3 ++- src/declarative/qml/qdeclarativestringconverters.cpp | 4 ++++ src/declarative/qml/qdeclarativestringconverters_p.h | 2 ++ 5 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/declarative/qml/qdeclarativecompiler.cpp b/src/declarative/qml/qdeclarativecompiler.cpp index b5bf972..b74d640 100644 --- a/src/declarative/qml/qdeclarativecompiler.cpp +++ b/src/declarative/qml/qdeclarativecompiler.cpp @@ -240,6 +240,7 @@ bool QDeclarativeCompiler::testLiteralAssignment(const QMetaProperty &prop, if (!ok) COMPILE_EXCEPTION(v, tr("Invalid property assignment: color expected")); } break; +#ifndef QT_NO_TEXTDATE case QVariant::Date: { bool ok; @@ -261,6 +262,7 @@ bool QDeclarativeCompiler::testLiteralAssignment(const QMetaProperty &prop, if (!ok) COMPILE_EXCEPTION(v, tr("Invalid property assignment: datetime expected")); } break; +#endif // QT_NO_TEXTDATE case QVariant::Point: case QVariant::PointF: { @@ -414,6 +416,7 @@ void QDeclarativeCompiler::genLiteralAssignment(const QMetaProperty &prop, instr.storeColor.value = c.rgba(); } break; +#ifndef QT_NO_TEXTDATE case QVariant::Date: { QDate d = QDeclarativeStringConverters::dateFromString(string); @@ -447,6 +450,7 @@ void QDeclarativeCompiler::genLiteralAssignment(const QMetaProperty &prop, instr.storeDateTime.valueIndex = index; } break; +#endif // QT_NO_TEXTDATE case QVariant::Point: case QVariant::PointF: { diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index 0a75532..452ed3d 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -225,10 +225,12 @@ QDeclarativeScriptEngine::QDeclarativeScriptEngine(QDeclarativeEnginePrivate *pr qtObject.setProperty(QLatin1String("tint"), newFunction(QDeclarativeEnginePrivate::tint, 2)); } +#ifndef QT_NO_TEXTDATE //date/time formatting qtObject.setProperty(QLatin1String("formatDate"),newFunction(QDeclarativeEnginePrivate::formatDate, 2)); qtObject.setProperty(QLatin1String("formatTime"),newFunction(QDeclarativeEnginePrivate::formatTime, 2)); qtObject.setProperty(QLatin1String("formatDateTime"),newFunction(QDeclarativeEnginePrivate::formatDateTime, 2)); +#endif //misc methods qtObject.setProperty(QLatin1String("openUrlExternally"),newFunction(QDeclarativeEnginePrivate::desktopOpenUrl, 1)); @@ -1092,6 +1094,7 @@ QScriptValue QDeclarativeEnginePrivate::vector(QScriptContext *ctxt, QScriptEngi return QDeclarativeEnginePrivate::get(engine)->scriptValueFromVariant(qVariantFromValue(QVector3D(x, y, z))); } +#ifndef QT_NO_TEXTDATE QScriptValue QDeclarativeEnginePrivate::formatDate(QScriptContext*ctxt, QScriptEngine*engine) { int argCount = ctxt->argumentCount(); @@ -1154,6 +1157,7 @@ QScriptValue QDeclarativeEnginePrivate::formatDateTime(QScriptContext*ctxt, QScr } return engine->newVariant(qVariantFromValue(date.toString(enumFormat))); } +#endif // QT_NO_TEXTDATE QScriptValue QDeclarativeEnginePrivate::rgba(QScriptContext *ctxt, QScriptEngine *engine) { diff --git a/src/declarative/qml/qdeclarativeengine_p.h b/src/declarative/qml/qdeclarativeengine_p.h index 0b1c17d..296885f 100644 --- a/src/declarative/qml/qdeclarativeengine_p.h +++ b/src/declarative/qml/qdeclarativeengine_p.h @@ -302,10 +302,11 @@ public: static QScriptValue consoleLog(QScriptContext*, QScriptEngine*); static QScriptValue quit(QScriptContext*, QScriptEngine*); +#ifndef QT_NO_TEXTDATE static QScriptValue formatDate(QScriptContext*, QScriptEngine*); static QScriptValue formatTime(QScriptContext*, QScriptEngine*); static QScriptValue formatDateTime(QScriptContext*, QScriptEngine*); - +#endif static QScriptEngine *getScriptEngine(QDeclarativeEngine *e) { return &e->d_func()->scriptEngine; } static QDeclarativeEngine *getEngine(QScriptEngine *e) { return static_cast(e)->p->q_func(); } static QDeclarativeEnginePrivate *get(QDeclarativeEngine *e) { return e->d_func(); } diff --git a/src/declarative/qml/qdeclarativestringconverters.cpp b/src/declarative/qml/qdeclarativestringconverters.cpp index bbcc00b..8bd2cf1 100644 --- a/src/declarative/qml/qdeclarativestringconverters.cpp +++ b/src/declarative/qml/qdeclarativestringconverters.cpp @@ -106,12 +106,14 @@ QVariant QDeclarativeStringConverters::variantFromString(const QString &s, int p return QVariant(uint(qRound(s.toDouble(ok)))); case QMetaType::QColor: return QVariant::fromValue(colorFromString(s, ok)); +#ifndef QT_NO_TEXTDATE case QMetaType::QDate: return QVariant::fromValue(dateFromString(s, ok)); case QMetaType::QTime: return QVariant::fromValue(timeFromString(s, ok)); case QMetaType::QDateTime: return QVariant::fromValue(dateTimeFromString(s, ok)); +#endif // QT_NO_TEXTDATE case QMetaType::QPointF: return QVariant::fromValue(pointFFromString(s, ok)); case QMetaType::QPoint: @@ -150,6 +152,7 @@ QColor QDeclarativeStringConverters::colorFromString(const QString &s, bool *ok) } } +#ifndef QT_NO_TEXTDATE QDate QDeclarativeStringConverters::dateFromString(const QString &s, bool *ok) { QDate d = QDate::fromString(s, Qt::ISODate); @@ -170,6 +173,7 @@ QDateTime QDeclarativeStringConverters::dateTimeFromString(const QString &s, boo if (ok) *ok = d.isValid(); return d; } +#endif // QT_NO_TEXTDATE //expects input of "x,y" QPointF QDeclarativeStringConverters::pointFFromString(const QString &s, bool *ok) diff --git a/src/declarative/qml/qdeclarativestringconverters_p.h b/src/declarative/qml/qdeclarativestringconverters_p.h index 97f72fc..842d1b3 100644 --- a/src/declarative/qml/qdeclarativestringconverters_p.h +++ b/src/declarative/qml/qdeclarativestringconverters_p.h @@ -73,9 +73,11 @@ namespace QDeclarativeStringConverters QVariant Q_DECLARATIVE_EXPORT variantFromString(const QString &, int preferredType, bool *ok = 0); QColor Q_DECLARATIVE_EXPORT colorFromString(const QString &, bool *ok = 0); +#ifndef QT_NO_TEXTDATE QDate Q_DECLARATIVE_EXPORT dateFromString(const QString &, bool *ok = 0); QTime Q_DECLARATIVE_EXPORT timeFromString(const QString &, bool *ok = 0); QDateTime Q_DECLARATIVE_EXPORT dateTimeFromString(const QString &, bool *ok = 0); +#endif QPointF Q_DECLARATIVE_EXPORT pointFFromString(const QString &, bool *ok = 0); QSizeF Q_DECLARATIVE_EXPORT sizeFFromString(const QString &, bool *ok = 0); QRectF Q_DECLARATIVE_EXPORT rectFFromString(const QString &, bool *ok = 0); -- cgit v0.12 From ad8047dbca22e2c3c8af3ec60ba97939abf91315 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Wed, 26 May 2010 16:38:41 +0200 Subject: Doc: Corrected the documentation about the compression threshold. Reviewed-by: Trust Me --- doc/src/development/rcc.qdoc | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/doc/src/development/rcc.qdoc b/doc/src/development/rcc.qdoc index 1541e11..999408b 100644 --- a/doc/src/development/rcc.qdoc +++ b/doc/src/development/rcc.qdoc @@ -60,28 +60,30 @@ \row \o \c{-o} \o \c{file} \o Write output to \c{file} rather than to stdout. \row \o \c{-name} \o \c{name} \o Create an external initialization - function with \c{name}. - - \row \o \c{-threshold} \o \c{level} \o Specifies a threshold \c{level} (in - bytes) to use when deciding whether - to compress a file. If the file is - smaller than the threshold \c{level}, - it is not compressed. The default - threshold level is 70 bytes. - + function with \c{name}. + + \row \o \c{-threshold} \o \c{level} \o Specifies a threshold \c{level} (as a + percentage) to use when deciding whether to compress + a file. If the reduction in the file size is greater than + the threshold \c{level}, it is compressed; otherwise, + the uncompressed data is stored instead. The default + threshold level is 70%, meaning that compressed files + which are 30% or less of their original size are + stored as compressed data. + \row \o \c{-compress} \o \c{level} \o Compress input files to the given - compression \c{level}, which is an - integer in the range 1 to 9. Level 1 - does the least compression but is - fastest. Level 9 does the most - compression but is slowest. To turn - off compression, use \c{-no-compress}. - The default value for \c{level} is -1, - which means use zlib's default - compression level. + compression \c{level}, which is an + integer in the range 1 to 9. Level 1 + does the least compression but is + fastest. Level 9 does the most + compression but is slowest. To turn + off compression, use \c{-no-compress}. + The default value for \c{level} is -1, + which means use zlib's default + compression level. \row \o \c{-root} \o \c{path} \o Prefix the resource access path with \c{path}. - The default is no prefix. + The default is no prefix. \row \o \c{-no-compress} \o \o Disable compression. -- cgit v0.12 From a0b725d916ec794c1a0f02b37525a15ad27d145d Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Mon, 31 May 2010 15:38:45 +1000 Subject: Repaint all text when Ctrl+A is pressed in TextEdit QTextControl::updateRequest() with empty rect means update all. Task-number: QTBUG-11013 --- src/declarative/graphicsitems/qdeclarativetextedit.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index 167db77..f02b7d1 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -1066,9 +1066,14 @@ void QDeclarativeTextEdit::drawContents(QPainter *painter, const QRect &bounds) void QDeclarativeTextEdit::updateImgCache(const QRectF &rf) { Q_D(const QDeclarativeTextEdit); - QRect r = rf.toRect(); - if (r != QRect(0,0,INT_MAX,INT_MAX)) // Don't translate "everything" - r = r.translated(0,d->yoff); + QRect r; + if (!rf.isValid()) { + r = QRect(0,0,INT_MAX,INT_MAX); + } else { + r = rf.toRect(); + if (r != QRect(0,0,INT_MAX,INT_MAX)) // Don't translate "everything" + r = r.translated(0,d->yoff); + } dirtyCache(r); emit update(); } -- cgit v0.12 From b8b1e9784583e3b5960b1966328299f8a1bec440 Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Mon, 31 May 2010 15:45:01 +1000 Subject: Simplify selection setting. Make TextInput more like TextEdit. By making selectionStart/End read-only, and adding adding select(). Task-number: QTBUG-11056 --- .../modelviews/webview/content/FieldText.qml | 2 - examples/declarative/text/edit/edit.qml | 16 ++--- .../graphicsitems/qdeclarativetextedit.cpp | 68 ++++++++++++---------- .../graphicsitems/qdeclarativetextedit_p.h | 8 +-- .../graphicsitems/qdeclarativetextinput.cpp | 54 +++++++++++------ .../graphicsitems/qdeclarativetextinput_p.h | 16 ++--- .../tst_qdeclarativetextedit.cpp | 39 ++++--------- .../tst_qdeclarativetextinput.cpp | 55 ++++++----------- .../qdeclarativetextedit/MultilineEdit.qml | 3 +- .../qmlvisual/qdeclarativetextinput/LineEdit.qml | 3 +- 10 files changed, 125 insertions(+), 139 deletions(-) diff --git a/examples/declarative/modelviews/webview/content/FieldText.qml b/examples/declarative/modelviews/webview/content/FieldText.qml index c9adde5..17fa4cd 100644 --- a/examples/declarative/modelviews/webview/content/FieldText.qml +++ b/examples/declarative/modelviews/webview/content/FieldText.qml @@ -161,8 +161,6 @@ Item { color: "black" readOnly: false focus: true - selectionStart: 0 - selectionEnd: -1 } PropertyChanges { target: editRegion diff --git a/examples/declarative/text/edit/edit.qml b/examples/declarative/text/edit/edit.qml index 2774739..0be42e9 100644 --- a/examples/declarative/text/edit/edit.qml +++ b/examples/declarative/text/edit/edit.qml @@ -157,14 +157,16 @@ Rectangle { if (editor.state == "selection" && drag != "") { if (drag == "start") { var pos = edit.positionAt(mouse.x+x+startHandle.width/2,mouse.y+y); - if (edit.selectionEnd < pos) - edit.selectionEnd = pos; - edit.selectionStart = pos; + var e = edit.selectionEnd; + if (e < pos) + e = pos; + edit.select(pos,e); } else if (drag == "end") { var pos = edit.positionAt(mouse.x+x-endHandle.width/2,mouse.y+y); - if (edit.selectionStart > pos) - edit.selectionStart = pos; - edit.selectionEnd = pos; + var s = edit.selectionStart; + if (s > pos) + s = pos; + edit.select(s,pos); } } } @@ -226,7 +228,7 @@ Rectangle { height: 16 Text { anchors.centerIn: parent; text: "Deselect" } MouseArea { anchors.fill: parent; - onClicked: { edit.cursorPosition = edit.selectionEnd; edit.selectionStart = edit.selectionEnd; editor.state = "" } } + onClicked: { edit.cursorPosition = edit.selectionEnd; edit.select(edit.cursorPosition,edit.cursorPosition); editor.state = "" } } } } } diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index f8876f2..935b431 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -717,12 +717,9 @@ void QDeclarativeTextEdit::loadCursorDelegate() \qmlproperty int TextEdit::selectionStart The cursor position before the first character in the current selection. - Setting this and selectionEnd allows you to specify a selection in the - text edit. - Note that if selectionStart == selectionEnd then there is no current - selection. If you attempt to set selectionStart to a value outside of - the current text, selectionStart will not be changed. + This property is read-only. To change the selection, use select(start,end), + selectAll(), or selectWord(). \sa selectionEnd, cursorPosition, selectedText */ @@ -732,25 +729,13 @@ int QDeclarativeTextEdit::selectionStart() const return d->control->textCursor().selectionStart(); } -void QDeclarativeTextEdit::setSelectionStart(int s) -{ - Q_D(QDeclarativeTextEdit); - if(d->lastSelectionStart == s || s < 0 || s > text().length()) - return; - d->lastSelectionStart = s; - d->updateSelection();// Will emit the relevant signals -} - /*! \qmlproperty int TextEdit::selectionEnd The cursor position after the last character in the current selection. - Setting this and selectionStart allows you to specify a selection in the - text edit. - Note that if selectionStart == selectionEnd then there is no current - selection. If you attempt to set selectionEnd to a value outside of - the current text, selectionEnd will not be changed. + This property is read-only. To change the selection, use select(start,end), + selectAll(), or selectWord(). \sa selectionStart, cursorPosition, selectedText */ @@ -760,15 +745,6 @@ int QDeclarativeTextEdit::selectionEnd() const return d->control->textCursor().selectionEnd(); } -void QDeclarativeTextEdit::setSelectionEnd(int s) -{ - Q_D(QDeclarativeTextEdit); - if(d->lastSelectionEnd == s || s < 0 || s > text().length()) - return; - d->lastSelectionEnd = s; - d->updateSelection();// Will emit the relevant signals -} - /*! \qmlproperty string TextEdit::selectedText @@ -1018,6 +994,8 @@ void QDeclarativeTextEditPrivate::focusChanged(bool hasFocus) } /*! + \qmlmethod void TextEdit::selectAll() + Causes all text to be selected. */ void QDeclarativeTextEdit::selectAll() @@ -1027,6 +1005,8 @@ void QDeclarativeTextEdit::selectAll() } /*! + \qmlmethod void TextEdit::selectWord() + Causes the word closest to the current cursor position to be selected. */ void QDeclarativeTextEdit::selectWord() @@ -1038,6 +1018,35 @@ void QDeclarativeTextEdit::selectWord() } /*! + \qmlmethod void TextEdit::select(start,end) + + Causes the text from \a start to \a end to be selected. + + If either start or end is out of range, the selection is not changed. + + After calling this, selectionStart will become the lesser + and selectionEnd will become the greater (regardless of the order passed + to this method). + + \sa selectionStart, selectionEnd +*/ +void QDeclarativeTextEdit::select(int start, int end) +{ + Q_D(QDeclarativeTextEdit); + if (start < 0 || end < 0 || start > d->text.length() || end > d->text.length()) + return; + QTextCursor cursor = d->control->textCursor(); + cursor.beginEditBlock(); + cursor.setPosition(start, QTextCursor::MoveAnchor); + cursor.setPosition(end, QTextCursor::KeepAnchor); + cursor.endEditBlock(); + d->control->setTextCursor(cursor); + + // QTBUG-11100 + updateSelectionMarkers(); +} + +/*! \qmlmethod TextEdit::cut() Moves the currently selected text to the system clipboard. @@ -1254,7 +1263,6 @@ void QDeclarativeTextEditPrivate::updateSelection() QTextCursor cursor = control->textCursor(); bool startChange = (lastSelectionStart != cursor.selectionStart()); bool endChange = (lastSelectionEnd != cursor.selectionEnd()); - //### Is it worth calculating a more minimal set of movements? cursor.beginEditBlock(); cursor.setPosition(lastSelectionStart, QTextCursor::MoveAnchor); cursor.setPosition(lastSelectionEnd, QTextCursor::KeepAnchor); @@ -1264,8 +1272,6 @@ void QDeclarativeTextEditPrivate::updateSelection() q->selectionStartChanged(); if(endChange) q->selectionEndChanged(); - startChange = (lastSelectionStart != control->textCursor().selectionStart()); - endChange = (lastSelectionEnd != control->textCursor().selectionEnd()); } void QDeclarativeTextEdit::updateSelectionMarkers() diff --git a/src/declarative/graphicsitems/qdeclarativetextedit_p.h b/src/declarative/graphicsitems/qdeclarativetextedit_p.h index a83b3db..3abfc35 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextedit_p.h @@ -82,8 +82,8 @@ class Q_DECLARATIVE_EXPORT QDeclarativeTextEdit : public QDeclarativePaintedItem Q_PROPERTY(int cursorPosition READ cursorPosition WRITE setCursorPosition NOTIFY cursorPositionChanged) Q_PROPERTY(QRect cursorRectangle READ cursorRectangle NOTIFY cursorRectangleChanged) Q_PROPERTY(QDeclarativeComponent* cursorDelegate READ cursorDelegate WRITE setCursorDelegate NOTIFY cursorDelegateChanged) - Q_PROPERTY(int selectionStart READ selectionStart WRITE setSelectionStart NOTIFY selectionStartChanged) - Q_PROPERTY(int selectionEnd READ selectionEnd WRITE setSelectionEnd NOTIFY selectionEndChanged) + Q_PROPERTY(int selectionStart READ selectionStart NOTIFY selectionStartChanged) + Q_PROPERTY(int selectionEnd READ selectionEnd NOTIFY selectionEndChanged) Q_PROPERTY(QString selectedText READ selectedText NOTIFY selectionChanged) Q_PROPERTY(bool focusOnPress READ focusOnPress WRITE setFocusOnPress NOTIFY focusOnPressChanged) Q_PROPERTY(bool showInputPanelOnFocus READ showInputPanelOnFocus WRITE setShowInputPanelOnFocus NOTIFY showInputPanelOnFocusChanged) @@ -160,10 +160,7 @@ public: void setCursorDelegate(QDeclarativeComponent*); int selectionStart() const; - void setSelectionStart(int); - int selectionEnd() const; - void setSelectionEnd(int); QString selectedText() const; @@ -230,6 +227,7 @@ Q_SIGNALS: public Q_SLOTS: void selectAll(); void selectWord(); + void select(int start, int end); void cut(); void copy(); void paste(); diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index 9a6a070..25a2b49 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -46,6 +46,7 @@ #include #include +#include #include #include #include @@ -429,10 +430,12 @@ void QDeclarativeTextInput::setCursorPosition(int cp) Returns a Rect which encompasses the cursor, but which may be larger than is required. Ignores custom cursor delegates. */ -QRect QDeclarativeTextInput::cursorRect() const +QRect QDeclarativeTextInput::cursorRectangle() const { Q_D(const QDeclarativeTextInput); - return d->control->cursorRect(); + QRect r = d->control->cursorRect(); + r.setHeight(r.height()-1); // Make consistent with TextEdit (QLineControl inexplicably adds 1) + return r; } /*! @@ -454,15 +457,6 @@ int QDeclarativeTextInput::selectionStart() const return d->lastSelectionStart; } -void QDeclarativeTextInput::setSelectionStart(int s) -{ - Q_D(QDeclarativeTextInput); - if(d->lastSelectionStart == s || s < 0 || s > text().length()) - return; - d->lastSelectionStart = s; - d->control->setSelection(s, d->lastSelectionEnd - s); -} - /*! \qmlproperty int TextInput::selectionEnd @@ -482,13 +476,12 @@ int QDeclarativeTextInput::selectionEnd() const return d->lastSelectionEnd; } -void QDeclarativeTextInput::setSelectionEnd(int s) +void QDeclarativeTextInput::select(int start, int end) { Q_D(QDeclarativeTextInput); - if(d->lastSelectionEnd == s || s < 0 || s > text().length()) + if (start < 0 || end < 0 || start > d->control->text().length() || end > d->control->text().length()) return; - d->lastSelectionEnd = s; - d->control->setSelection(d->lastSelectionStart, s - d->lastSelectionStart); + d->control->setSelection(start, end-start); } /*! @@ -833,6 +826,19 @@ void QDeclarativeTextInput::moveCursor() } /*! + \qmlmethod rect TextInput::positionToRectangle(int x) +*/ +QRectF QDeclarativeTextInput::positionToRectangle(int x) const +{ + Q_D(const QDeclarativeTextInput); + QFontMetrics fm = QFontMetrics(d->font); + return QRectF(d->control->cursorToX(x)-d->hscroll, + 0.0, + d->control->cursorWidth(), + cursorRectangle().height()); +} + +/*! \qmlmethod int TextInput::positionAt(int x) This function returns the character position at @@ -843,7 +849,7 @@ void QDeclarativeTextInput::moveCursor() This means that for all x values before the first character this function returns 0, and for all x values after the last character this function returns text.length. */ -int QDeclarativeTextInput::positionAt(int x) +int QDeclarativeTextInput::positionAt(int x) const { Q_D(const QDeclarativeTextInput); return d->control->xToPos(x - d->hscroll); @@ -1019,7 +1025,6 @@ void QDeclarativeTextInput::drawContents(QPainter *p, const QRect &r) d->hscroll -= minLB; offset = QPoint(d->hscroll, 0); } - d->control->draw(p, offset, r, flags); p->restore(); @@ -1057,12 +1062,27 @@ QVariant QDeclarativeTextInput::inputMethodQuery(Qt::InputMethodQuery property) } } +/*! + \qmlmethod void TextInput::selectAll() + + Causes all text to be selected. +*/ void QDeclarativeTextInput::selectAll() { Q_D(QDeclarativeTextInput); d->control->setSelection(0, d->control->text().length()); } +/*! + \qmlmethod void TextInput::selectWord() + + Causes the word closest to the current cursor position to be selected. +*/ +void QDeclarativeTextInput::selectWord() +{ + Q_D(QDeclarativeTextInput); + d->control->selectWordAtPos(d->control->cursor()); +} /*! \qmlproperty bool TextInput::smooth diff --git a/src/declarative/graphicsitems/qdeclarativetextinput_p.h b/src/declarative/graphicsitems/qdeclarativetextinput_p.h index 6bb94c2..0b7ddd5 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextinput_p.h @@ -72,10 +72,10 @@ class Q_DECLARATIVE_EXPORT QDeclarativeTextInput : public QDeclarativePaintedIte Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly NOTIFY readOnlyChanged) Q_PROPERTY(bool cursorVisible READ isCursorVisible WRITE setCursorVisible NOTIFY cursorVisibleChanged) Q_PROPERTY(int cursorPosition READ cursorPosition WRITE setCursorPosition NOTIFY cursorPositionChanged) - Q_PROPERTY(QRect cursorRect READ cursorRect NOTIFY cursorPositionChanged) + Q_PROPERTY(QRect cursorRectangle READ cursorRectangle NOTIFY cursorPositionChanged) Q_PROPERTY(QDeclarativeComponent *cursorDelegate READ cursorDelegate WRITE setCursorDelegate NOTIFY cursorDelegateChanged) - Q_PROPERTY(int selectionStart READ selectionStart WRITE setSelectionStart NOTIFY selectionStartChanged) - Q_PROPERTY(int selectionEnd READ selectionEnd WRITE setSelectionEnd NOTIFY selectionEndChanged) + Q_PROPERTY(int selectionStart READ selectionStart NOTIFY selectionStartChanged) + Q_PROPERTY(int selectionEnd READ selectionEnd NOTIFY selectionEndChanged) Q_PROPERTY(QString selectedText READ selectedText NOTIFY selectedTextChanged) Q_PROPERTY(int maximumLength READ maxLength WRITE setMaxLength NOTIFY maximumLengthChanged) @@ -110,7 +110,8 @@ public: }; //Auxilliary functions needed to control the TextInput from QML - Q_INVOKABLE int positionAt(int x); + Q_INVOKABLE int positionAt(int x) const; + Q_INVOKABLE QRectF positionToRectangle(int x) const; Q_INVOKABLE void moveCursorSelection(int pos); Q_INVOKABLE void openSoftwareInputPanel(); @@ -143,13 +144,10 @@ public: int cursorPosition() const; void setCursorPosition(int cp); - QRect cursorRect() const; + QRect cursorRectangle() const; int selectionStart() const; - void setSelectionStart(int); - int selectionEnd() const; - void setSelectionEnd(int); QString selectedText() const; @@ -231,6 +229,8 @@ protected: public Q_SLOTS: void selectAll(); + void selectWord(); + void select(int start, int end); private Q_SLOTS: void updateSize(bool needsRedraw = true); diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp index d3e3c3a..47c5b63 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -551,11 +551,11 @@ void tst_qdeclarativetextedit::selection() //Test selection for(int i=0; i<= testStr.size(); i++) { - textEditObject->setSelectionEnd(i); + textEditObject->select(0,i); QCOMPARE(testStr.mid(0,i), textEditObject->selectedText()); } for(int i=0; i<= testStr.size(); i++) { - textEditObject->setSelectionStart(i); + textEditObject->select(i,testStr.size()); QCOMPARE(testStr.mid(i,testStr.size()-i), textEditObject->selectedText()); } @@ -565,43 +565,26 @@ void tst_qdeclarativetextedit::selection() QVERIFY(textEditObject->selectionEnd() == 0); QVERIFY(textEditObject->selectedText().isNull()); - for(int i=0; i< testStr.size(); i++) { - textEditObject->setSelectionStart(i); - QCOMPARE(textEditObject->selectionEnd(), i); - QCOMPARE(testStr.mid(i,0), textEditObject->selectedText()); - textEditObject->setSelectionEnd(i+1); - QCOMPARE(textEditObject->selectionStart(), i); - QCOMPARE(testStr.mid(i,1), textEditObject->selectedText()); - } - - for(int i= testStr.size() - 1; i>0; i--) { - textEditObject->setSelectionEnd(i); - QCOMPARE(testStr.mid(i,0), textEditObject->selectedText()); - textEditObject->setSelectionStart(i-1); - QCOMPARE(testStr.mid(i-1,1), textEditObject->selectedText()); - } - //Test Error Ignoring behaviour textEditObject->setCursorPosition(0); QVERIFY(textEditObject->selectedText().isNull()); - textEditObject->setSelectionStart(-10); + textEditObject->select(-10,0); QVERIFY(textEditObject->selectedText().isNull()); - textEditObject->setSelectionStart(100); + textEditObject->select(100,101); QVERIFY(textEditObject->selectedText().isNull()); - textEditObject->setSelectionEnd(-10); + textEditObject->select(0,-10); QVERIFY(textEditObject->selectedText().isNull()); - textEditObject->setSelectionEnd(100); + textEditObject->select(0,100); QVERIFY(textEditObject->selectedText().isNull()); - textEditObject->setSelectionStart(0); - textEditObject->setSelectionEnd(10); + textEditObject->select(0,10); QVERIFY(textEditObject->selectedText().size() == 10); - textEditObject->setSelectionStart(-10); + textEditObject->select(-10,0); QVERIFY(textEditObject->selectedText().size() == 10); - textEditObject->setSelectionStart(100); + textEditObject->select(100,101); QVERIFY(textEditObject->selectedText().size() == 10); - textEditObject->setSelectionEnd(-10); + textEditObject->select(0,-10); QVERIFY(textEditObject->selectedText().size() == 10); - textEditObject->setSelectionEnd(100); + textEditObject->select(0,100); QVERIFY(textEditObject->selectedText().size() == 10); } diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index c01cfa5..54bb9c1 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -322,11 +322,11 @@ void tst_qdeclarativetextinput::selection() //Test selection for(int i=0; i<= testStr.size(); i++) { - textinputObject->setSelectionEnd(i); + textinputObject->select(0,i); QCOMPARE(testStr.mid(0,i), textinputObject->selectedText()); } for(int i=0; i<= testStr.size(); i++) { - textinputObject->setSelectionStart(i); + textinputObject->select(i,testStr.size()); QCOMPARE(testStr.mid(i,testStr.size()-i), textinputObject->selectedText()); } @@ -336,43 +336,26 @@ void tst_qdeclarativetextinput::selection() QVERIFY(textinputObject->selectionEnd() == 0); QVERIFY(textinputObject->selectedText().isNull()); - for(int i=0; i< testStr.size(); i++) { - textinputObject->setSelectionStart(i); - QCOMPARE(textinputObject->selectionEnd(), i); - QCOMPARE(testStr.mid(i,0), textinputObject->selectedText()); - textinputObject->setSelectionEnd(i+1); - QCOMPARE(textinputObject->selectionStart(), i); - QCOMPARE(testStr.mid(i,1), textinputObject->selectedText()); - } - - for(int i= testStr.size() - 1; i>0; i--) { - textinputObject->setSelectionEnd(i); - QCOMPARE(testStr.mid(i,0), textinputObject->selectedText()); - textinputObject->setSelectionStart(i-1); - QCOMPARE(testStr.mid(i-1,1), textinputObject->selectedText()); - } - //Test Error Ignoring behaviour textinputObject->setCursorPosition(0); QVERIFY(textinputObject->selectedText().isNull()); - textinputObject->setSelectionStart(-10); + textinputObject->select(-10,0); QVERIFY(textinputObject->selectedText().isNull()); - textinputObject->setSelectionStart(100); + textinputObject->select(100,110); QVERIFY(textinputObject->selectedText().isNull()); - textinputObject->setSelectionEnd(-10); + textinputObject->select(0,-10); QVERIFY(textinputObject->selectedText().isNull()); - textinputObject->setSelectionEnd(100); + textinputObject->select(0,100); QVERIFY(textinputObject->selectedText().isNull()); - textinputObject->setSelectionStart(0); - textinputObject->setSelectionEnd(10); + textinputObject->select(0,10); QVERIFY(textinputObject->selectedText().size() == 10); - textinputObject->setSelectionStart(-10); + textinputObject->select(-10,10); QVERIFY(textinputObject->selectedText().size() == 10); - textinputObject->setSelectionStart(100); + textinputObject->select(100,101); QVERIFY(textinputObject->selectedText().size() == 10); - textinputObject->setSelectionEnd(-10); + textinputObject->select(0,-10); QVERIFY(textinputObject->selectedText().size() == 10); - textinputObject->setSelectionEnd(100); + textinputObject->select(0,100); QVERIFY(textinputObject->selectedText().size() == 10); delete textinputObject; @@ -565,8 +548,7 @@ void tst_qdeclarativetextinput::navigation() QVERIFY(input->hasFocus() == true); //QT-2944: If text is selected, ensure we deselect upon cursor motion input->setCursorPosition(input->text().length()); - input->setSelectionStart(0); - input->setSelectionEnd(input->text().length()); + input->select(0,input->text().length()); QVERIFY(input->selectionStart() != input->selectionEnd()); simulateKey(canvas, Qt::Key_Right); QVERIFY(input->selectionStart() == input->selectionEnd()); @@ -603,13 +585,13 @@ 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 cursorRect is just a 10xHeight area centered on cursor position - QCOMPARE(textInputObject->cursorRect().x() + 5, qRound(delegateObject->x())); - QCOMPARE(textInputObject->cursorRect().y(), qRound(delegateObject->y())); + //+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().y(), qRound(delegateObject->y())); } textInputObject->setCursorPosition(0); - QCOMPARE(textInputObject->cursorRect().x()+5, qRound(delegateObject->x())); - QCOMPARE(textInputObject->cursorRect().y(), qRound(delegateObject->y())); + QCOMPARE(textInputObject->cursorRectangle().x()+5, qRound(delegateObject->x())); + QCOMPARE(textInputObject->cursorRectangle().y(), qRound(delegateObject->y())); //Test Delegate gets deleted textInputObject->setCursorDelegate(0); QVERIFY(!textInputObject->findChild("cursorInstance")); @@ -881,8 +863,7 @@ void tst_qdeclarativetextinput::focusOutClearSelection() view.show(); QApplication::setActiveWindow(&view); QTest::qWaitForWindowShown(&view); - input.setSelectionStart(2); - input.setSelectionEnd(5); + input.select(2,5); //The selection should work QTRY_COMPARE(input.selectedText(), QLatin1String("llo")); input2.setFocus(true); diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/MultilineEdit.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/MultilineEdit.qml index 0273282..53538cb 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/MultilineEdit.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/MultilineEdit.qml @@ -65,8 +65,7 @@ Item { onReleased: { } onDoubleClicked: { - textEdit.selectionStart=0; - textEdit.selectionEnd=textEdit.text.length; + textEdit.selectAll() } z: textEdit.z + 1 } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/LineEdit.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/LineEdit.qml index cc0ad3c..69f57c6 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/LineEdit.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/LineEdit.qml @@ -58,8 +58,7 @@ Item { onReleased: { } onDoubleClicked: { - textInp.selectionStart=0; - textInp.selectionEnd=textInp.text.length; + textInp.selectAll() } z: textInp.z + 1 } -- cgit v0.12 From e5cc765d2fa1ff68f1592ad475d6b8f4e5a6f667 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Mon, 31 May 2010 14:45:43 +1000 Subject: Document issues with rectangle border width of 1 where clipping is used --- doc/src/declarative/pics/rect-border-width.png | Bin 0 -> 356 bytes doc/src/snippets/declarative/rect-border-width.qml | 19 +++++++++++++++++++ .../graphicsitems/qdeclarativerectangle.cpp | 16 ++++++++++++++-- 3 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 doc/src/declarative/pics/rect-border-width.png create mode 100644 doc/src/snippets/declarative/rect-border-width.qml diff --git a/doc/src/declarative/pics/rect-border-width.png b/doc/src/declarative/pics/rect-border-width.png new file mode 100644 index 0000000..c3c6c2c Binary files /dev/null and b/doc/src/declarative/pics/rect-border-width.png differ diff --git a/doc/src/snippets/declarative/rect-border-width.qml b/doc/src/snippets/declarative/rect-border-width.qml new file mode 100644 index 0000000..27a241d --- /dev/null +++ b/doc/src/snippets/declarative/rect-border-width.qml @@ -0,0 +1,19 @@ +import Qt 4.7 + +//![0] +Rectangle { + width: 100; height: 100 + color: "yellow" + + Rectangle { + anchor.fill: parent + anchors.margins: 10 + clip: true + + Rectangle { + anchors.fill: parent + border.width: 1 + } + } +} +//![0] diff --git a/src/declarative/graphicsitems/qdeclarativerectangle.cpp b/src/declarative/graphicsitems/qdeclarativerectangle.cpp index 301ca00..de3dbcd 100644 --- a/src/declarative/graphicsitems/qdeclarativerectangle.cpp +++ b/src/declarative/graphicsitems/qdeclarativerectangle.cpp @@ -202,8 +202,20 @@ void QDeclarativeRectangle::doUpdate() A width of 1 creates a thin line. For no line, use a width of 0 or a transparent color. - To keep the border smooth (rather than blurry), odd widths cause the rectangle to be painted at - a half-pixel offset; + If \c border.width is an odd number, the rectangle is painted at a half-pixel offset to retain + border smoothness. Also, the border is rendered evenly on either side of the + rectangle's boundaries, and the spare pixel is rendered to the right and below the + rectangle (as documented for QRect rendering). This can cause unintended effects if + \c border.width is 1 and the rectangle is \l{clip}{clipped} by a parent item: + + \table + \row + \o \snippet doc/src/snippets/declarative/rect-border-width.qml 0 + \o \image rect-border-width.png + \endtable + + Here, the innermost rectangle's border is clipped on the bottom and right edges by its + parent. To avoid this, the border width can be set to two instead of one. */ QDeclarativePen *QDeclarativeRectangle::border() { -- cgit v0.12 From 4759e47a2444d481156ad1a789e5affbc92e1b58 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Mon, 31 May 2010 16:59:48 +1000 Subject: Various doc fixes and improvements --- doc/src/declarative/basictypes.qdoc | 67 +++++++++++++++++---- doc/src/declarative/globalobject.qdoc | 2 +- doc/src/declarative/pics/repeater-modeldata.png | Bin 0 -> 2600 bytes doc/src/declarative/qml-intro.qdoc | 26 ++++---- .../snippets/declarative/repeater-modeldata.qml | 52 ++++++++++++++++ examples/declarative/sqllocalstorage/hello.qml | 2 +- .../tutorials/extending/chapter1-basics/app.qml | 1 + .../tutorials/extending/chapter2-methods/app.qml | 1 + .../tutorials/extending/chapter3-bindings/app.qml | 1 + .../extending/chapter4-customPropertyTypes/app.qml | 1 + .../graphicsitems/qdeclarativerepeater.cpp | 14 +++-- src/declarative/qml/qdeclarativeengine.cpp | 34 ++++++++--- 12 files changed, 159 insertions(+), 42 deletions(-) create mode 100644 doc/src/declarative/pics/repeater-modeldata.png create mode 100644 doc/src/snippets/declarative/repeater-modeldata.qml diff --git a/doc/src/declarative/basictypes.qdoc b/doc/src/declarative/basictypes.qdoc index 8db1c35..43ae214 100644 --- a/doc/src/declarative/basictypes.qdoc +++ b/doc/src/declarative/basictypes.qdoc @@ -46,9 +46,9 @@ QML has a set of primitive types, as listed below, that are used throughout the \l {QML Elements}. - The simpler types in this list can also be used for defining a new - \c property in a component. See \l{Extending types from QML} for the - list of types that can be used for custom properties. + Some of these types can also be used for defining + \c property values in QML. See \l{Extending types from QML} for the + list of types that can be used for \c property values. \annotatedlist qmlbasictypes */ @@ -171,6 +171,13 @@ Rectangle { color: "#800000FF" } \endqml + Or with the \l{Qt::rgba()}{Qt.rgba()}, \l{Qt::hsla()}{Qt.hsla()}, \l{Qt::darker()}{Qt.darker()}, + \l{Qt::lighter()}{Qt.lighter()} or \l{Qt::tint()}{Qt.tint()} functions: + + \qml + Rectangle { color: Qt.rgba(255, 0, 0, 1) } + \endqml + \sa {QML Basic Types} */ @@ -184,9 +191,17 @@ Example: \qml - Widget { pos: "0,20" } + MyItem { position: "0,20" } \endqml + Or with the \l{Qt::point()}{Qt.point()} function: + + \qml + MyItem { position: Qt.point(0, 20) } + \endqml + + A point object has \c x and \c y attributes that contain the \c x and \c y values. + \sa {QML Basic Types} */ @@ -200,9 +215,17 @@ Example: \qml - Widget { size: "150x50" } + LayoutItem { preferredSize: "150x50" } + \endqml + + Or with the \l{Qt::size()}{Qt.size()} function: + + \qml + MyItem { position: Qt.size(150, 50) } \endqml + A size object has \c width and \c height attributes that contain the \c width and \c height values. + \sa {QML Basic Types} */ @@ -216,9 +239,18 @@ Example: \qml - Widget { geometry: "50,50,100x100" } + MyItem { geometry: "50,50,100x100" } \endqml + Or with the \l{Qt::rect()}{Qt.rect()} function: + + \qml + MyItem { position: Qt.rect(50, 50, 100, 100) } + \endqml + + A rect object has \c x, \c, y, \c width and \c height attributes that contain the + \c x, \c y, \c width and \c height values. + \sa {QML Basic Types} */ @@ -232,9 +264,12 @@ Example: \qml - DatePicker { minDate: "2000-01-01"; maxDate: "2020-12-31" } + MyDatePicker { minDate: "2000-01-01"; maxDate: "2020-12-31" } \endqml + To read a date value returned from a C++ extension class, use + \l{Qt::formatDate()}{Qt.formatDate()} and \l{Qt::formatDateTime()}{Qt.formatDateTime()}. + \sa {QML Basic Types} */ @@ -248,9 +283,12 @@ Example: \qml - TimePicker { time: "14:22:15" } + MyTimePicker { time: "14:22:15" } \endqml + To read a time value returned from a C++ extension class, use + \l{Qt::formatTime()}{Qt.formatTime()} and \l{Qt::formatDateTime()}{Qt.formatDateTime()}. + \sa {QML Basic Types} */ @@ -297,9 +335,9 @@ Actions are used like this: \qml - MouseArea { onClicked: MyItem.myaction.trigger() } - State { name: "enabled"; when: MyItem.myaction.enabled == true } - Text { text: MyItem.someaction.text } + MouseArea { onClicked: myaction.trigger() } + State { name: "enabled"; when: myaction.enabled == true } + Text { text: someaction.text } \endqml \sa {QML Basic Types} @@ -327,7 +365,7 @@ ] } \endqml - \c Child1, \c Child2 and \c Child3 will all be added to the children list + \c child1, \c child2 and \c child3 will all be added to the children list in the order in which they appear. \sa {QML Basic Types} @@ -345,7 +383,7 @@ Rotation { angle: 60; axis: "0,1,0" } \endqml - or with the \c{Qt.vector3d()} helper function: + or with the \c{Qt.vector3d()} function: \qml Rotation { angle: 60; axis: Qt.vector3d(0, 1, 0) } @@ -357,5 +395,8 @@ Rotation { angle: 60; axis.x: 0; axis.y: 1; axis.z: 0 } \endqml + A vector3d object has \c x, \c, y, and \c z attributes that contain the + \c x, \c y, \c z values. + \sa {QML Basic Types} */ diff --git a/doc/src/declarative/globalobject.qdoc b/doc/src/declarative/globalobject.qdoc index 7d4f9b9..3121e95 100644 --- a/doc/src/declarative/globalobject.qdoc +++ b/doc/src/declarative/globalobject.qdoc @@ -49,7 +49,7 @@ Contains all the properties of the JavaScript global object, plus: \section1 Qt Object -The \l{qml-qt.html}{Qt object} provides useful enums and functions from Qt, for use in all QML +The \l{Qt}{Qt object} provides useful enums and functions from Qt, for use in all QML files. \section1 XMLHttpRequest diff --git a/doc/src/declarative/pics/repeater-modeldata.png b/doc/src/declarative/pics/repeater-modeldata.png new file mode 100644 index 0000000..817f35b Binary files /dev/null and b/doc/src/declarative/pics/repeater-modeldata.png differ diff --git a/doc/src/declarative/qml-intro.qdoc b/doc/src/declarative/qml-intro.qdoc index 64a4949..848e094 100644 --- a/doc/src/declarative/qml-intro.qdoc +++ b/doc/src/declarative/qml-intro.qdoc @@ -864,49 +864,49 @@ paused, and reaching the end of the media. They allow the developer to connect, some QML that will handle this event. -\section1 Analyzing An Example: Dial +\section1 Analyzing An Example: Dial Control -In the Qt \e {examples/declarative/toys} folder you will find a folder -\e {dial} which contains the \e dial example. +In the Qt \e {examples/declarative/ui-components} folder you will find a folder +\e {dialcontrol} which contains the \e dialcontrol example. \image qml-dial.png "QML Dial example with Slider" In essence this small application has a sliding bar that you can slide using a mouse, and a graphical dial that responds to the position of the slider. -The code for the example is in two parts: Dial.qml and dial-example.qml. +The code for the example is in two parts: Dial.qml and dialcontrol.qml. -\e {Dial.qml} can be found in the \e content sub-directory. It defines a Dial +\e {Dial.qml} can be found in the \e content sub-directory. It defines a \c Dial component similar to an odometer. Eventually, the example will hook up a slider component so that moving the slider will change the position of a needle on the dial. -The code for the Dial, identified by the name of the file, contains four images +The code for the \c Dial, identified by the name of the file, contains four images in overlapping order: the background (numbers and divisions), the shadow of the needle, the needle itself, and finally the 'glass' overlay (containing transparent layers). -The needle_shadow.png image has a Rotation assigned to the \e transform +The \c needle_shadow.png image has a \l Rotation assigned to the \e transform attribute of the \l Image. The rotation is set to match the angle of the needle image angle value \e {needleRotation.angle}. Both the needle and the needle_shadow have the same default \e x and \e y values but the rotation origin for the needle is slightly different so that a shadow will be evident as the needle moves. -\snippet ../../examples/declarative/toys/dial/content/Dial.qml needle_shadow +\snippet ../../examples/declarative/ui-components/dialcontrol/content/Dial.qml needle_shadow And the needle -\snippet ../../examples/declarative/toys/dial/content/Dial.qml needle +\snippet ../../examples/declarative/ui-components/dialcontrol/content/Dial.qml needle The final image is the overlay which simply has a position defined. -\snippet ../../examples/declarative/toys/dial/content/Dial.qml overlay +\snippet ../../examples/declarative/ui-components/dialcontrol/content/Dial.qml overlay -\e {dial-example.qml} in the \e {examples/declarative/toys/dial} directory is the +\e {dialcontrol.qml} in the \e {examples/declarative/ui-components/dialcontrol} directory is the main file of the example. It defines the visual environment that the Dial will fit into. Because the \e Dial component and the images live in the \e -content sub-directory we will have to import this into \e dial-example. So the +content sub-directory we will have to import this into \e dialcontrol.qml. So the start of the file looks like \code @@ -919,7 +919,7 @@ a gray color. Inside this rectangle is our component \e Dial and a \l Rectangle. Inside the rectangle called 'container' is another rectangle with the interesting name 'slider'. -\snippet ../../examples/declarative/toys/dial/dial-example.qml 0 +\snippet ../../examples/declarative/ui-components/dialcontrol/dialcontrol.qml 0 The Dial component, named 'dial, is \e anchored to the center of the main rectangle. The \c value attribute of 'dial' is set to a value based on the diff --git a/doc/src/snippets/declarative/repeater-modeldata.qml b/doc/src/snippets/declarative/repeater-modeldata.qml new file mode 100644 index 0000000..3b4cc6d --- /dev/null +++ b/doc/src/snippets/declarative/repeater-modeldata.qml @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2010 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$ +** +****************************************************************************/ + +import Qt 4.7 + +//! [0] +Column { + Repeater { + model: ["apples", "oranges", "pears"] + Text { text: "Data: " + modelData } + } +} +//! [0] + diff --git a/examples/declarative/sqllocalstorage/hello.qml b/examples/declarative/sqllocalstorage/hello.qml index 0913d42..421a74c 100644 --- a/examples/declarative/sqllocalstorage/hello.qml +++ b/examples/declarative/sqllocalstorage/hello.qml @@ -68,4 +68,4 @@ Text { Component.onCompleted: findGreetings() } - +//![0] diff --git a/examples/declarative/tutorials/extending/chapter1-basics/app.qml b/examples/declarative/tutorials/extending/chapter1-basics/app.qml index 7de32f2..9af155c 100644 --- a/examples/declarative/tutorials/extending/chapter1-basics/app.qml +++ b/examples/declarative/tutorials/extending/chapter1-basics/app.qml @@ -55,3 +55,4 @@ Rectangle { text: aMusician.name + " plays the " + aMusician.instrument } } +//![0] diff --git a/examples/declarative/tutorials/extending/chapter2-methods/app.qml b/examples/declarative/tutorials/extending/chapter2-methods/app.qml index 495413f..02d33c2 100644 --- a/examples/declarative/tutorials/extending/chapter2-methods/app.qml +++ b/examples/declarative/tutorials/extending/chapter2-methods/app.qml @@ -57,3 +57,4 @@ Rectangle { onClicked: aMusician.perform() } } +//![0] diff --git a/examples/declarative/tutorials/extending/chapter3-bindings/app.qml b/examples/declarative/tutorials/extending/chapter3-bindings/app.qml index 46408cb..8bf6ecf 100644 --- a/examples/declarative/tutorials/extending/chapter3-bindings/app.qml +++ b/examples/declarative/tutorials/extending/chapter3-bindings/app.qml @@ -69,3 +69,4 @@ Rectangle { } } } +//![0] diff --git a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/app.qml b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/app.qml index 09662d6..d76f801 100644 --- a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/app.qml +++ b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/app.qml @@ -51,3 +51,4 @@ Item { Component.onCompleted: console.log("Reddy plays the " + reddy.instrument.type) } +//![0] diff --git a/src/declarative/graphicsitems/qdeclarativerepeater.cpp b/src/declarative/graphicsitems/qdeclarativerepeater.cpp index 04076f8..691cfa2 100644 --- a/src/declarative/graphicsitems/qdeclarativerepeater.cpp +++ b/src/declarative/graphicsitems/qdeclarativerepeater.cpp @@ -80,14 +80,20 @@ QDeclarativeRepeaterPrivate::~QDeclarativeRepeaterPrivate() The index is always exposed as an accessible \c index property. In the case of an object or string list, the data element (of type string or object) is available as the \c modelData property. In the case of a Qt model, - all roles are available as named properties just like in the view classes. The - following example shows how to use the index property inside the instantiated - items. + all roles are available as named properties just like in the view classes. - \snippet doc/src/snippets/declarative/repeater-index.qml 0 + The following example shows how to use the \c index property inside the instantiated + items: + \snippet doc/src/snippets/declarative/repeater-index.qml 0 \image repeater-index.png + The repeater could also use the \c modelData property to reference the data for a + particular index: + + \snippet doc/src/snippets/declarative/repeater-modeldata.qml 0 + \image repeater-modeldata.png + Items instantiated by the Repeater are inserted, in order, as children of the Repeater's parent. The insertion starts immediately after the repeater's position in its parent stacking list. This is to allow diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index 8679e76..d8c842b 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -155,14 +155,26 @@ void QDeclarativeEnginePrivate::defineModule() \qmlclass Qt QDeclarativeEnginePrivate \brief The QML global Qt object provides useful enums and functions from Qt. -The Qt object provides useful enums and functions from Qt, for use in all QML files. +The \c Qt object provides useful enums and functions from Qt, for use in all QML files. + +The \c Qt object is not a QML element; it cannot be instantiated. It is a global object +with enums and functions. To use it, call the members of the global \c Qt object directly. +For example: + +\qml +import Qt 4.7 + +Text { + color: Qt.rgba(255, 0, 0, 1) + text: Qt.md5("hello, world") +} +\endqml -You do not create instances of this type, but instead use the members of the global "Qt" object. \section1 Enums The Qt object contains all enums in the Qt namespace. For example, you can -access the AlignLeft member of the Qt::AlignmentFlag enum with \c Qt.AlignLeft. +access the \c AlignLeft member of the \c Qt::AlignmentFlag enum with \c Qt.AlignLeft. For a full list of enums, see the \l{Qt Namespace} documentation. @@ -172,7 +184,7 @@ data types. This is primarily useful when setting the properties of an item when the property has one of the following types: \list -\o \c color - use \l{Qt::rgba()}{Qt.rgba()}, \l{Qt::darker()}{Qt.darker()}, \l{Qt::lighter()}{Qt.lighter()} or \l{Qt::tint()}{Qt.tint()} +\o \c color - use \l{Qt::rgba()}{Qt.rgba()}, \l{Qt::hsla()}{Qt.hsla()}, \l{Qt::darker()}{Qt.darker()}, \l{Qt::lighter()}{Qt.lighter()} or \l{Qt::tint()}{Qt.tint()} \o \c rect - use \l{Qt::rect()}{Qt.rect()} \o \c point - use \l{Qt::point()}{Qt.point()} \o \c size - use \l{Qt::size()}{Qt.size()} @@ -200,8 +212,8 @@ items from files or strings. See \l{Dynamic Object Management} for an overview of their use. \list - \o \l{Qt::createComponent}{object Qt.createComponent(url)} - \o \l{Qt::createQmlObject}{object Qt.createQmlObject(string qml, object parent, string filepath)} + \o \l{Qt::createComponent()}{object Qt.createComponent(url)} + \o \l{Qt::createQmlObject()}{object Qt.createQmlObject(string qml, object parent, string filepath)} \endlist */ @@ -1034,7 +1046,7 @@ QString QDeclarativeEnginePrivate::urlToLocalFileOrQrc(const QUrl& url) /*! \qmlmethod object Qt::createComponent(url) -Returns a \l Component object created from the QML file at the specified \a url, +Returns a \l Component object created using the QML file at the specified \a url, or \c null if there was an error in creating the component. Call \l {Component::createObject()}{Component.createObject()} on the returned @@ -1360,7 +1372,7 @@ QScriptValue QDeclarativeEnginePrivate::formatDateTime(QScriptContext*ctxt, QScr /*! \qmlmethod color Qt::rgba(real red, real green, real blue, real alpha) -Returns a Color with the specified \c red, \c green, \c blue and \c alpha components. +Returns a color with the specified \c red, \c green, \c blue and \c alpha components. All components should be in the range 0-1 inclusive. */ QScriptValue QDeclarativeEnginePrivate::rgba(QScriptContext *ctxt, QScriptEngine *engine) @@ -1388,7 +1400,7 @@ QScriptValue QDeclarativeEnginePrivate::rgba(QScriptContext *ctxt, QScriptEngine /*! \qmlmethod color Qt::hsla(real hue, real saturation, real lightness, real alpha) -Returns a Color with the specified \c hue, \c saturation, \c lightness and \c alpha components. +Returns a color with the specified \c hue, \c saturation, \c lightness and \c alpha components. All components should be in the range 0-1 inclusive. */ QScriptValue QDeclarativeEnginePrivate::hsla(QScriptContext *ctxt, QScriptEngine *engine) @@ -1416,7 +1428,9 @@ QScriptValue QDeclarativeEnginePrivate::hsla(QScriptContext *ctxt, QScriptEngine /*! \qmlmethod rect Qt::rect(int x, int y, int width, int height) -Returns a Rect with the top-left corner at \c x, \c y and the specified \c width and \c height. +Returns a \c rect with the top-left corner at \c x, \c y and the specified \c width and \c height. + +The returned object has \c x, \c y, \c width and \c height attributes with the given values. */ QScriptValue QDeclarativeEnginePrivate::rect(QScriptContext *ctxt, QScriptEngine *engine) { -- cgit v0.12 From 90abe364b7e9b0aa201a3e0ed0b043643519e21b Mon Sep 17 00:00:00 2001 From: Andreas Aardal Hanssen Date: Wed, 26 May 2010 13:09:49 +0200 Subject: Make test work with shadow builds again. Broken by 0cdf33e9acb00b8f3654e8268253a3fb7c5db92c, which assumes the binary and sources are in the same directory. The fix reverts the code back to how it was in 4.5 (where it still works with shadow builds). Reviewed-by: Denis Dzyubenko --- tests/auto/qtipc/qsharedmemory/tst_qsharedmemory.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/auto/qtipc/qsharedmemory/tst_qsharedmemory.cpp b/tests/auto/qtipc/qsharedmemory/tst_qsharedmemory.cpp index dac631b..1f65ae7 100644 --- a/tests/auto/qtipc/qsharedmemory/tst_qsharedmemory.cpp +++ b/tests/auto/qtipc/qsharedmemory/tst_qsharedmemory.cpp @@ -56,7 +56,7 @@ #elif defined(Q_OS_WINCE) #define LACKEYDIR SRCDIR #else -#define LACKEYDIR SRCDIR "../lackey" +#define LACKEYDIR "../lackey" #endif Q_DECLARE_METATYPE(QSharedMemory::SharedMemoryError) @@ -421,7 +421,7 @@ void tst_QSharedMemory::readOnly() QString program = LACKEYDIR "/lackey"; QStringList arguments; rememberKey("readonly_segfault"); - arguments << LACKEYDIR "/scripts/readonly_segfault.js"; + arguments << SRCDIR "../lackey/scripts/readonly_segfault.js"; // ### on windows disable the popup somehow QProcess p; @@ -734,7 +734,7 @@ void tst_QSharedMemory::simpleProcessProducerConsumer() rememberKey("market"); - QStringList arguments = QStringList() << LACKEYDIR "/scripts/producer.js"; + QStringList arguments = QStringList() << SRCDIR "../lackey/scripts/producer.js"; QProcess producer; producer.setProcessChannelMode(QProcess::ForwardedChannels); producer.start( LACKEYDIR "/lackey", arguments); @@ -744,7 +744,7 @@ void tst_QSharedMemory::simpleProcessProducerConsumer() QList consumers; unsigned int failedProcesses = 0; for (int i = 0; i < processes; ++i) { - QStringList arguments = QStringList() << LACKEYDIR "/scripts/consumer.js"; + QStringList arguments = QStringList() << SRCDIR "../lackey/scripts/consumer.js"; QProcess *p = new QProcess; p->setProcessChannelMode(QProcess::ForwardedChannels); #ifdef Q_OS_WINCE -- cgit v0.12 From 9b4ff3deb28b3d642dc4480207f2f23841cf26e9 Mon Sep 17 00:00:00 2001 From: Mirko Damiani Date: Mon, 8 Feb 2010 16:09:24 +0100 Subject: Added native key support to QSharedMemory API. Methods setNativeKey() and nativeKey() were added to QSharedMemory API. Shared memory's native key is returned by nativeKey() and it is set with either setKey() or setNativeKey(). setKey() leads to a native key that is platform independent while setNativeKey() directly sets the native key without any mangling. When using setNativeKey(), key() returns a null string and shared memory's system semaphore is not set. This means that is up to the user to define a such protection mechanism (i.e. lock() can't be used on native keys). QSharedMemory tests were updated. Merge-request: 1497 Reviewed-by: Benjamin Poulain Reviewed-by: Andreas Aardal Hanssen --- src/corelib/kernel/qsharedmemory.cpp | 120 +++++++++++++++------ src/corelib/kernel/qsharedmemory.h | 2 + src/corelib/kernel/qsharedmemory_p.h | 1 + src/corelib/kernel/qsharedmemory_symbian.cpp | 11 +- src/corelib/kernel/qsharedmemory_unix.cpp | 15 ++- src/corelib/kernel/qsharedmemory_win.cpp | 13 +-- .../auto/qtipc/qsharedmemory/tst_qsharedmemory.cpp | 26 +++-- 7 files changed, 123 insertions(+), 65 deletions(-) diff --git a/src/corelib/kernel/qsharedmemory.cpp b/src/corelib/kernel/qsharedmemory.cpp index fe93ebc..d5f4052 100644 --- a/src/corelib/kernel/qsharedmemory.cpp +++ b/src/corelib/kernel/qsharedmemory.cpp @@ -142,9 +142,12 @@ QSharedMemoryPrivate::makePlatformSafeKey(const QString &key, remain. Do not mix using QtSharedMemory and QSharedMemory. Port everything to QSharedMemory. - \warning QSharedMemory changes the key in a Qt-specific way. - It is therefore currently not possible to use the shared memory of - non-Qt applications with QSharedMemory. + \warning QSharedMemory changes the key in a Qt-specific way, unless otherwise + specified. Interoperation with non-Qt applications is achieved by first creating + a default shared memory with QSharedMemory() and then setting a native key with + setNativeKey(). When using native keys, shared memory is not protected against + multiple accesses on it (e.g. unable to lock()) and a user-defined mechanism + should be used to achieve a such protection. */ /*! @@ -153,8 +156,8 @@ QSharedMemoryPrivate::makePlatformSafeKey(const QString &key, Constructs a shared memory object with the given \a parent. The shared memory object's key is not set by the constructor, so the shared memory object does not have an underlying shared memory - segment attached. The key must be set with setKey() before create() - or attach() can be used. + segment attached. The key must be set with setKey() or setNativeKey() + before create() or attach() can be used. \sa setKey() */ @@ -191,24 +194,52 @@ QSharedMemory::~QSharedMemory() } /*! - Sets a new \a key for this shared memory object. If \a key and the - current key are the same, the function returns without doing - anything. If the shared memory object is attached to an underlying - shared memory segment, it will \l {detach()} {detach} from it before - setting the new key. This function does not do an attach(). - - \sa key() isAttached() - */ + Sets a new \a key for this shared memory object. + The \a key is first converted to a unicode string accepted by all supported platforms, + (see nativeKey()). If \a key and the current key are the same, the function returns + without doing anything. If the shared memory object is attached to an underlying + shared memory segment, it will \l {detach()} {detach} from it before setting the new key. + This function does not do an attach(). + + \sa key() nativeKey() isAttached() +*/ void QSharedMemory::setKey(const QString &key) { Q_D(QSharedMemory); - if (key == d->key) + if (key == d->key && d->makePlatformSafeKey(key) == d->nativeKey) return; if (isAttached()) detach(); d->cleanHandle(); d->key = key; + d->nativeKey = d->makePlatformSafeKey(key); +} + +/*! + \since 4.7 + Sets a new native \a key for this shared memory object. + The specified \a key is used as-is, without any conversion. The \a key has to be + in a valid format for the current operating system (e.g. under Unix a valid \a key + corresponds to a filename). Be aware that the application might not be portable. + This function returns without doing anything if the \a key equals the current + native key. If the shared memory object is attached to an underlying shared memory + segment, it will \l {detach()} {detach} from it before setting the new key. + This function does not do an attach(). + + \sa nativeKey() key() isAttached() +*/ +void QSharedMemory::setNativeKey(const QString &key) +{ + Q_D(QSharedMemory); + if (key == d->nativeKey && d->key.isNull()) + return; + + if (isAttached()) + detach(); + d->cleanHandle(); + d->key = QString(); + d->nativeKey = key; } bool QSharedMemoryPrivate::initKey() @@ -251,13 +282,14 @@ bool QSharedMemoryPrivate::initKey() } /*! - Returns the key assigned to this shared memory. The key is the - identifier used by the operating system to identify the shared - memory segment. When QSharedMemory is used for interprocess - communication, the key is how each process attaches to the shared - memory segment through which the IPC occurs. - - \sa setKey() + Returns the key assigned with setKey() to this shared memory. + The key is the identifier used by Qt applications to identify the shared + memory segment. The actual native key used by the operating system is returned + by nativeKey(). A null string is returned if the key was specified using setNativeKey(). + When QSharedMemory is used for interprocess communication, the key is how each + process attaches to the shared memory segment through which the IPC occurs. + + \sa setKey() setNativeKey() */ QString QSharedMemory::key() const { @@ -266,13 +298,31 @@ QString QSharedMemory::key() const } /*! - Creates a shared memory segment of \a size bytes with the key passed - to the constructor or set with setKey(), attaches to the new shared - memory segment with the given access \a mode, and returns \tt true. - If a shared memory segment identified by the key already exists, the - attach operation is not performed, and \tt false is returned. When - the return value is \tt false, call error() to determine which error - occurred. + \since 4.7 + Returns the native key assigned with setKey() or setNativeKey() to this shared memory. + The native key is the identifier used by the operating system to identify the + shared memory segment. When using setKey(), the native key is obtained by + converting the specified key into a format accepted by all supported platforms. + When using setNativeKey(), the native key actually corresponds to the specified key + without any conversion. When QSharedMemory is used for interprocess communication, + the key is how each process attaches to the shared memory segment through which + the IPC occurs. + + \sa setKey() setNativeKey() +*/ +QString QSharedMemory::nativeKey() const +{ + Q_D(const QSharedMemory); + return d->nativeKey; +} + +/*! + Creates a shared memory segment of \a size bytes with the key passed to the + constructor, set with setKey() or set with setNativeKey(), then attaches to + the new shared memory segment with the given access \a mode and returns + \tt true. If a shared memory segment identified by the key already exists, + the attach operation is not performed and \tt false is returned. When the + return value is \tt false, call error() to determine which error occurred. \sa error() */ @@ -294,7 +344,7 @@ bool QSharedMemory::create(int size, AccessMode mode) QString function = QLatin1String("QSharedMemory::create"); #ifndef QT_NO_SYSTEMSEMAPHORE QSharedMemoryLocker lock(this); - if (!d->tryLocker(&lock, function)) + if (!d->key.isNull() && !d->tryLocker(&lock, function)) return false; #endif @@ -338,7 +388,7 @@ int QSharedMemory::size() const /*! Attempts to attach the process to the shared memory segment identified by the key that was passed to the constructor or to a - call to setKey(). The access \a mode is \l {QSharedMemory::} + call to setKey() or setNativeKey(). The access \a mode is \l {QSharedMemory::} {ReadWrite} by default. It can also be \l {QSharedMemory::} {ReadOnly}. Returns true if the attach operation is successful. If false is returned, call error() to determine which error occurred. @@ -355,7 +405,7 @@ bool QSharedMemory::attach(AccessMode mode) return false; #ifndef QT_NO_SYSTEMSEMAPHORE QSharedMemoryLocker lock(this); - if (!d->tryLocker(&lock, QLatin1String("QSharedMemory::attach"))) + if (!d->key.isNull() && !d->tryLocker(&lock, QLatin1String("QSharedMemory::attach"))) return false; #endif @@ -395,7 +445,7 @@ bool QSharedMemory::detach() #ifndef QT_NO_SYSTEMSEMAPHORE QSharedMemoryLocker lock(this); - if (!d->tryLocker(&lock, QLatin1String("QSharedMemory::detach"))) + if (!d->key.isNull() && !d->tryLocker(&lock, QLatin1String("QSharedMemory::detach"))) return false; #endif @@ -451,9 +501,9 @@ const void *QSharedMemory::data() const by this process and returns true. If another process has locked the segment, this function blocks until the lock is released. Then it acquires the lock and returns true. If this function returns false, - it means either that you have ignored a false return from create() - or attach(), or that QSystemSemaphore::acquire() failed due to an - unknown system error. + it means that you have ignored a false return from create() or attach(), + that you have set the key with setNativeKey() or that + QSystemSemaphore::acquire() failed due to an unknown system error. \sa unlock(), data(), QSystemSemaphore::acquire() */ diff --git a/src/corelib/kernel/qsharedmemory.h b/src/corelib/kernel/qsharedmemory.h index fba939c..5673f43 100644 --- a/src/corelib/kernel/qsharedmemory.h +++ b/src/corelib/kernel/qsharedmemory.h @@ -85,6 +85,8 @@ public: void setKey(const QString &key); QString key() const; + void setNativeKey(const QString &key); + QString nativeKey() const; bool create(int size, AccessMode mode = ReadWrite); int size() const; diff --git a/src/corelib/kernel/qsharedmemory_p.h b/src/corelib/kernel/qsharedmemory_p.h index a52f8b3..632a6e9 100644 --- a/src/corelib/kernel/qsharedmemory_p.h +++ b/src/corelib/kernel/qsharedmemory_p.h @@ -122,6 +122,7 @@ public: void *memory; int size; QString key; + QString nativeKey; QSharedMemory::SharedMemoryError error; QString errorString; #ifndef QT_NO_SYSTEMSEMAPHORE diff --git a/src/corelib/kernel/qsharedmemory_symbian.cpp b/src/corelib/kernel/qsharedmemory_symbian.cpp index 9b84eb56..091c2b5 100644 --- a/src/corelib/kernel/qsharedmemory_symbian.cpp +++ b/src/corelib/kernel/qsharedmemory_symbian.cpp @@ -107,16 +107,14 @@ bool QSharedMemoryPrivate::cleanHandle() bool QSharedMemoryPrivate::create(int size) { - // Get a windows acceptable key - QString safeKey = makePlatformSafeKey(key); QString function = QLatin1String("QSharedMemory::create"); - if (safeKey.isEmpty()) { + if (nativeKey.isEmpty()) { error = QSharedMemory::KeyError; errorString = QSharedMemory::tr("%1: key error").arg(function); return false; } - TPtrC ptr(qt_QString2TPtrC(safeKey)); + TPtrC ptr(qt_QString2TPtrC(nativeKey)); TInt err = chunk.CreateGlobal(ptr, size, size); @@ -136,14 +134,13 @@ bool QSharedMemoryPrivate::attach(QSharedMemory::AccessMode /* mode */) // Grab a pointer to the memory block if (!chunk.Handle()) { QString function = QLatin1String("QSharedMemory::handle"); - QString safeKey = makePlatformSafeKey(key); - if (safeKey.isEmpty()) { + if (nativeKey.isEmpty()) { error = QSharedMemory::KeyError; errorString = QSharedMemory::tr("%1: unable to make key").arg(function); return false; } - TPtrC ptr(qt_QString2TPtrC(safeKey)); + TPtrC ptr(qt_QString2TPtrC(nativeKey)); TInt err = KErrNoMemory; diff --git a/src/corelib/kernel/qsharedmemory_unix.cpp b/src/corelib/kernel/qsharedmemory_unix.cpp index a5f79c2..064979b 100644 --- a/src/corelib/kernel/qsharedmemory_unix.cpp +++ b/src/corelib/kernel/qsharedmemory_unix.cpp @@ -116,21 +116,20 @@ key_t QSharedMemoryPrivate::handle() return unix_key; // don't allow making handles on empty keys - if (key.isEmpty()) { + if (nativeKey.isEmpty()) { errorString = QSharedMemory::tr("%1: key is empty").arg(QLatin1String("QSharedMemory::handle:")); error = QSharedMemory::KeyError; return 0; } // ftok requires that an actual file exists somewhere - QString fileName = makePlatformSafeKey(key); - if (!QFile::exists(fileName)) { + if (!QFile::exists(nativeKey)) { errorString = QSharedMemory::tr("%1: UNIX key file doesn't exist").arg(QLatin1String("QSharedMemory::handle:")); error = QSharedMemory::NotFound; return 0; } - unix_key = ftok(QFile::encodeName(fileName).constData(), 'Q'); + unix_key = ftok(QFile::encodeName(nativeKey).constData(), 'Q'); if (-1 == unix_key) { errorString = QSharedMemory::tr("%1: ftok failed").arg(QLatin1String("QSharedMemory::handle:")); error = QSharedMemory::KeyError; @@ -181,7 +180,7 @@ bool QSharedMemoryPrivate::create(int size) { // build file if needed bool createdFile = false; - int built = createUnixKeyFile(makePlatformSafeKey(key)); + int built = createUnixKeyFile(nativeKey); if (built == -1) { errorString = QSharedMemory::tr("%1: unable to make key").arg(QLatin1String("QSharedMemory::handle:")); error = QSharedMemory::KeyError; @@ -194,7 +193,7 @@ bool QSharedMemoryPrivate::create(int size) // get handle if (!handle()) { if (createdFile) - QFile::remove(makePlatformSafeKey(key)); + QFile::remove(nativeKey); return false; } @@ -210,7 +209,7 @@ bool QSharedMemoryPrivate::create(int size) setErrorString(function); } if (createdFile && error != QSharedMemory::AlreadyExists) - QFile::remove(makePlatformSafeKey(key)); + QFile::remove(nativeKey); return false; } @@ -295,7 +294,7 @@ bool QSharedMemoryPrivate::detach() } // remove file - if (!QFile::remove(makePlatformSafeKey(key))) + if (!QFile::remove(nativeKey)) return false; } return true; diff --git a/src/corelib/kernel/qsharedmemory_win.cpp b/src/corelib/kernel/qsharedmemory_win.cpp index 0f5fdc7..0cdb123 100644 --- a/src/corelib/kernel/qsharedmemory_win.cpp +++ b/src/corelib/kernel/qsharedmemory_win.cpp @@ -99,18 +99,17 @@ HANDLE QSharedMemoryPrivate::handle() { if (!hand) { QString function = QLatin1String("QSharedMemory::handle"); - QString safeKey = makePlatformSafeKey(key); - if (safeKey.isEmpty()) { + if (nativeKey.isEmpty()) { error = QSharedMemory::KeyError; errorString = QSharedMemory::tr("%1: unable to make key").arg(function); return false; } #ifndef Q_OS_WINCE - hand = OpenFileMapping(FILE_MAP_ALL_ACCESS, false, (wchar_t*)safeKey.utf16()); + hand = OpenFileMapping(FILE_MAP_ALL_ACCESS, false, (wchar_t*)nativeKey.utf16()); #else // This works for opening a mapping too, but always opens it with read/write access in // attach as it seems. - hand = CreateFileMapping(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, 0, (wchar_t*)safeKey.utf16()); + hand = CreateFileMapping(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, 0, (wchar_t*)nativeKey.utf16()); #endif if (!hand) { setErrorString(function); @@ -133,17 +132,15 @@ bool QSharedMemoryPrivate::cleanHandle() bool QSharedMemoryPrivate::create(int size) { - // Get a windows acceptable key - QString safeKey = makePlatformSafeKey(key); QString function = QLatin1String("QSharedMemory::create"); - if (safeKey.isEmpty()) { + if (nativeKey.isEmpty()) { error = QSharedMemory::KeyError; errorString = QSharedMemory::tr("%1: key error").arg(function); return false; } // Create the file mapping. - hand = CreateFileMapping(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, size, (wchar_t*)safeKey.utf16()); + hand = CreateFileMapping(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, size, (wchar_t*)nativeKey.utf16()); setErrorString(function); // hand is valid when it already exists unlike unix so explicitly check diff --git a/tests/auto/qtipc/qsharedmemory/tst_qsharedmemory.cpp b/tests/auto/qtipc/qsharedmemory/tst_qsharedmemory.cpp index 1f65ae7..dc071ab 100644 --- a/tests/auto/qtipc/qsharedmemory/tst_qsharedmemory.cpp +++ b/tests/auto/qtipc/qsharedmemory/tst_qsharedmemory.cpp @@ -225,11 +225,17 @@ void tst_QSharedMemory::key_data() { QTest::addColumn("constructorKey"); QTest::addColumn("setKey"); - - QTest::newRow("null, null") << QString() << QString(); - QTest::newRow("null, one") << QString() << QString("one"); - QTest::newRow("one, two") << QString("one") << QString("two"); - QTest::newRow("invalid") << QString("o/e") << QString("t/o"); + QTest::addColumn("setNativeKey"); + + QTest::newRow("null, null, null") << QString() << QString() << QString(); + QTest::newRow("one, null, null") << QString("one") << QString() << QString(); + QTest::newRow("null, one, null") << QString() << QString("one") << QString(); + QTest::newRow("null, null, one") << QString() << QString() << QString("one"); + QTest::newRow("one, two, null") << QString("one") << QString("two") << QString(); + QTest::newRow("one, null, two") << QString("one") << QString() << QString("two"); + QTest::newRow("null, one, two") << QString() << QString("one") << QString("two"); + QTest::newRow("one, two, three") << QString("one") << QString("two") << QString("three"); + QTest::newRow("invalid") << QString("o/e") << QString("t/o") << QString("|x"); } /*! @@ -239,11 +245,17 @@ void tst_QSharedMemory::key() { QFETCH(QString, constructorKey); QFETCH(QString, setKey); + QFETCH(QString, setNativeKey); QSharedMemory sm(constructorKey); QCOMPARE(sm.key(), constructorKey); + QCOMPARE(sm.nativeKey().isEmpty(), constructorKey.isEmpty()); sm.setKey(setKey); QCOMPARE(sm.key(), setKey); + QCOMPARE(sm.nativeKey().isEmpty(), setKey.isEmpty()); + sm.setNativeKey(setNativeKey); + QVERIFY(sm.key().isNull()); + QCOMPARE(sm.nativeKey(), setNativeKey); QCOMPARE(sm.isAttached(), false); QCOMPARE(sm.error(), QSharedMemory::NoError); @@ -262,7 +274,7 @@ void tst_QSharedMemory::create_data() QTest::addColumn("error"); QTest::newRow("null key") << QString() << 1024 - << false << QSharedMemory::LockError; + << false << QSharedMemory::KeyError; QTest::newRow("-1 size") << QString("negsize") << -1 << false << QSharedMemory::InvalidSize; QTest::newRow("nor size") << QString("norsize") << 1024 @@ -302,7 +314,7 @@ void tst_QSharedMemory::attach_data() QTest::addColumn("exists"); QTest::addColumn("error"); - QTest::newRow("null key") << QString() << false << QSharedMemory::LockError; + QTest::newRow("null key") << QString() << false << QSharedMemory::KeyError; QTest::newRow("doesn't exists") << QString("doesntexists") << false << QSharedMemory::NotFound; QTest::newRow("already exists") << QString(EXISTING_SHARE) << true << QSharedMemory::NoError; } -- cgit v0.12 From 26f3dbf0e20dbaf131bbbb35440b1ecb40b3f405 Mon Sep 17 00:00:00 2001 From: Andreas Aardal Hanssen Date: Wed, 26 May 2010 14:00:15 +0200 Subject: Improved documentation for QSharedMemory's key/setKey functions. --- src/corelib/kernel/qsharedmemory.cpp | 64 +++++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/src/corelib/kernel/qsharedmemory.cpp b/src/corelib/kernel/qsharedmemory.cpp index d5f4052..0782ffe 100644 --- a/src/corelib/kernel/qsharedmemory.cpp +++ b/src/corelib/kernel/qsharedmemory.cpp @@ -194,11 +194,15 @@ QSharedMemory::~QSharedMemory() } /*! - Sets a new \a key for this shared memory object. - The \a key is first converted to a unicode string accepted by all supported platforms, - (see nativeKey()). If \a key and the current key are the same, the function returns - without doing anything. If the shared memory object is attached to an underlying - shared memory segment, it will \l {detach()} {detach} from it before setting the new key. + Sets the platform independent \a key for this shared memory object. If \a key + is the same as the current key, the function returns without doing anything. + + You can call key() to retrieve the platform independent key. Internally, + QSharedMemory converts this key into a platform specific key. If you instead + call nativeKey(), you will get the platform specific, converted key. + + If the shared memory object is attached to an underlying shared memory + segment, it will \l {detach()} {detach} from it before setting the new key. This function does not do an attach(). \sa key() nativeKey() isAttached() @@ -217,16 +221,22 @@ void QSharedMemory::setKey(const QString &key) } /*! - \since 4.7 - Sets a new native \a key for this shared memory object. - The specified \a key is used as-is, without any conversion. The \a key has to be - in a valid format for the current operating system (e.g. under Unix a valid \a key - corresponds to a filename). Be aware that the application might not be portable. - This function returns without doing anything if the \a key equals the current - native key. If the shared memory object is attached to an underlying shared memory + \since 4.8 + + Sets the native, platform specific, \a key for this shared memory object. If + \a key is the same as the current native key, the function returns without + doing anything. If all you want is to assign a key to a segment, you should + call setKey() instead. + + You can call nativeKey() to retrieve the native key. If a native key has been + assigned, calling key() will return a null string. + + If the shared memory object is attached to an underlying shared memory segment, it will \l {detach()} {detach} from it before setting the new key. This function does not do an attach(). + The application will not be portable if you set a native key. + \sa nativeKey() key() isAttached() */ void QSharedMemory::setNativeKey(const QString &key) @@ -282,12 +292,13 @@ bool QSharedMemoryPrivate::initKey() } /*! - Returns the key assigned with setKey() to this shared memory. - The key is the identifier used by Qt applications to identify the shared - memory segment. The actual native key used by the operating system is returned - by nativeKey(). A null string is returned if the key was specified using setNativeKey(). - When QSharedMemory is used for interprocess communication, the key is how each - process attaches to the shared memory segment through which the IPC occurs. + Returns the key assigned with setKey() to this shared memory, or a null key + if no key has been assigned, or if the segment is using a nativeKey(). The + key is the identifier used by Qt applications to identify the shared memory + segment. + + You can find the native, platform specific, key used by the operating system + by calling nativeKey(). \sa setKey() setNativeKey() */ @@ -298,15 +309,14 @@ QString QSharedMemory::key() const } /*! - \since 4.7 - Returns the native key assigned with setKey() or setNativeKey() to this shared memory. - The native key is the identifier used by the operating system to identify the - shared memory segment. When using setKey(), the native key is obtained by - converting the specified key into a format accepted by all supported platforms. - When using setNativeKey(), the native key actually corresponds to the specified key - without any conversion. When QSharedMemory is used for interprocess communication, - the key is how each process attaches to the shared memory segment through which - the IPC occurs. + \since 4.8 + + Returns the native, platform specific, key for this shared memory object. The + native key is the identifier used by the operating system to identify the + shared memory segment. + + You can use the native key to access shared memory segments that have not + been created by Qt, or to grant shared memory access to non-Qt applications. \sa setKey() setNativeKey() */ -- cgit v0.12 From fe08f4841cd9928e7c9ad0b797ede13f473b51b7 Mon Sep 17 00:00:00 2001 From: Robin Burchell Date: Mon, 31 May 2010 09:21:04 +0200 Subject: Fix a simple mistake in QXmlStreamReader::atEnd() docs. Merge-request: 655 Reviewed-by: Andreas Aardal Hanssen --- src/corelib/xml/qxmlstream.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/xml/qxmlstream.cpp b/src/corelib/xml/qxmlstream.cpp index ae12007..853f311 100644 --- a/src/corelib/xml/qxmlstream.cpp +++ b/src/corelib/xml/qxmlstream.cpp @@ -560,7 +560,7 @@ void QXmlStreamReader::clear() chunk of XML can be added with addData(), if the XML is being read from a QByteArray, or by waiting for more data to arrive if the XML is being read from a QIODevice. Either way, atEnd() will - return false once more adata is available. + return false once more data is available. \sa hasError(), error(), device(), QIODevice::atEnd() */ -- cgit v0.12 From 8c8f7639c1643473c5c10d4c5b9d3016c9cf070d Mon Sep 17 00:00:00 2001 From: Andreas Aardal Hanssen Date: Mon, 31 May 2010 10:10:57 +0200 Subject: Revert "Improved documentation for QSharedMemory's key/setKey functions." This reverts commit 26f3dbf0e20dbaf131bbbb35440b1ecb40b3f405. --- src/corelib/kernel/qsharedmemory.cpp | 64 +++++++++++++++--------------------- 1 file changed, 27 insertions(+), 37 deletions(-) diff --git a/src/corelib/kernel/qsharedmemory.cpp b/src/corelib/kernel/qsharedmemory.cpp index 0782ffe..d5f4052 100644 --- a/src/corelib/kernel/qsharedmemory.cpp +++ b/src/corelib/kernel/qsharedmemory.cpp @@ -194,15 +194,11 @@ QSharedMemory::~QSharedMemory() } /*! - Sets the platform independent \a key for this shared memory object. If \a key - is the same as the current key, the function returns without doing anything. - - You can call key() to retrieve the platform independent key. Internally, - QSharedMemory converts this key into a platform specific key. If you instead - call nativeKey(), you will get the platform specific, converted key. - - If the shared memory object is attached to an underlying shared memory - segment, it will \l {detach()} {detach} from it before setting the new key. + Sets a new \a key for this shared memory object. + The \a key is first converted to a unicode string accepted by all supported platforms, + (see nativeKey()). If \a key and the current key are the same, the function returns + without doing anything. If the shared memory object is attached to an underlying + shared memory segment, it will \l {detach()} {detach} from it before setting the new key. This function does not do an attach(). \sa key() nativeKey() isAttached() @@ -221,22 +217,16 @@ void QSharedMemory::setKey(const QString &key) } /*! - \since 4.8 - - Sets the native, platform specific, \a key for this shared memory object. If - \a key is the same as the current native key, the function returns without - doing anything. If all you want is to assign a key to a segment, you should - call setKey() instead. - - You can call nativeKey() to retrieve the native key. If a native key has been - assigned, calling key() will return a null string. - - If the shared memory object is attached to an underlying shared memory + \since 4.7 + Sets a new native \a key for this shared memory object. + The specified \a key is used as-is, without any conversion. The \a key has to be + in a valid format for the current operating system (e.g. under Unix a valid \a key + corresponds to a filename). Be aware that the application might not be portable. + This function returns without doing anything if the \a key equals the current + native key. If the shared memory object is attached to an underlying shared memory segment, it will \l {detach()} {detach} from it before setting the new key. This function does not do an attach(). - The application will not be portable if you set a native key. - \sa nativeKey() key() isAttached() */ void QSharedMemory::setNativeKey(const QString &key) @@ -292,13 +282,12 @@ bool QSharedMemoryPrivate::initKey() } /*! - Returns the key assigned with setKey() to this shared memory, or a null key - if no key has been assigned, or if the segment is using a nativeKey(). The - key is the identifier used by Qt applications to identify the shared memory - segment. - - You can find the native, platform specific, key used by the operating system - by calling nativeKey(). + Returns the key assigned with setKey() to this shared memory. + The key is the identifier used by Qt applications to identify the shared + memory segment. The actual native key used by the operating system is returned + by nativeKey(). A null string is returned if the key was specified using setNativeKey(). + When QSharedMemory is used for interprocess communication, the key is how each + process attaches to the shared memory segment through which the IPC occurs. \sa setKey() setNativeKey() */ @@ -309,14 +298,15 @@ QString QSharedMemory::key() const } /*! - \since 4.8 - - Returns the native, platform specific, key for this shared memory object. The - native key is the identifier used by the operating system to identify the - shared memory segment. - - You can use the native key to access shared memory segments that have not - been created by Qt, or to grant shared memory access to non-Qt applications. + \since 4.7 + Returns the native key assigned with setKey() or setNativeKey() to this shared memory. + The native key is the identifier used by the operating system to identify the + shared memory segment. When using setKey(), the native key is obtained by + converting the specified key into a format accepted by all supported platforms. + When using setNativeKey(), the native key actually corresponds to the specified key + without any conversion. When QSharedMemory is used for interprocess communication, + the key is how each process attaches to the shared memory segment through which + the IPC occurs. \sa setKey() setNativeKey() */ -- cgit v0.12 From 3026f8ce811e8cebc48e49f732344cc13e107cc6 Mon Sep 17 00:00:00 2001 From: Andreas Aardal Hanssen Date: Mon, 31 May 2010 10:11:05 +0200 Subject: Revert "Added native key support to QSharedMemory API." This reverts commit 9b4ff3deb28b3d642dc4480207f2f23841cf26e9. --- src/corelib/kernel/qsharedmemory.cpp | 120 ++++++--------------- src/corelib/kernel/qsharedmemory.h | 2 - src/corelib/kernel/qsharedmemory_p.h | 1 - src/corelib/kernel/qsharedmemory_symbian.cpp | 11 +- src/corelib/kernel/qsharedmemory_unix.cpp | 15 +-- src/corelib/kernel/qsharedmemory_win.cpp | 13 ++- .../auto/qtipc/qsharedmemory/tst_qsharedmemory.cpp | 26 ++--- 7 files changed, 65 insertions(+), 123 deletions(-) diff --git a/src/corelib/kernel/qsharedmemory.cpp b/src/corelib/kernel/qsharedmemory.cpp index d5f4052..fe93ebc 100644 --- a/src/corelib/kernel/qsharedmemory.cpp +++ b/src/corelib/kernel/qsharedmemory.cpp @@ -142,12 +142,9 @@ QSharedMemoryPrivate::makePlatformSafeKey(const QString &key, remain. Do not mix using QtSharedMemory and QSharedMemory. Port everything to QSharedMemory. - \warning QSharedMemory changes the key in a Qt-specific way, unless otherwise - specified. Interoperation with non-Qt applications is achieved by first creating - a default shared memory with QSharedMemory() and then setting a native key with - setNativeKey(). When using native keys, shared memory is not protected against - multiple accesses on it (e.g. unable to lock()) and a user-defined mechanism - should be used to achieve a such protection. + \warning QSharedMemory changes the key in a Qt-specific way. + It is therefore currently not possible to use the shared memory of + non-Qt applications with QSharedMemory. */ /*! @@ -156,8 +153,8 @@ QSharedMemoryPrivate::makePlatformSafeKey(const QString &key, Constructs a shared memory object with the given \a parent. The shared memory object's key is not set by the constructor, so the shared memory object does not have an underlying shared memory - segment attached. The key must be set with setKey() or setNativeKey() - before create() or attach() can be used. + segment attached. The key must be set with setKey() before create() + or attach() can be used. \sa setKey() */ @@ -194,52 +191,24 @@ QSharedMemory::~QSharedMemory() } /*! - Sets a new \a key for this shared memory object. - The \a key is first converted to a unicode string accepted by all supported platforms, - (see nativeKey()). If \a key and the current key are the same, the function returns - without doing anything. If the shared memory object is attached to an underlying - shared memory segment, it will \l {detach()} {detach} from it before setting the new key. - This function does not do an attach(). - - \sa key() nativeKey() isAttached() -*/ + Sets a new \a key for this shared memory object. If \a key and the + current key are the same, the function returns without doing + anything. If the shared memory object is attached to an underlying + shared memory segment, it will \l {detach()} {detach} from it before + setting the new key. This function does not do an attach(). + + \sa key() isAttached() + */ void QSharedMemory::setKey(const QString &key) { Q_D(QSharedMemory); - if (key == d->key && d->makePlatformSafeKey(key) == d->nativeKey) + if (key == d->key) return; if (isAttached()) detach(); d->cleanHandle(); d->key = key; - d->nativeKey = d->makePlatformSafeKey(key); -} - -/*! - \since 4.7 - Sets a new native \a key for this shared memory object. - The specified \a key is used as-is, without any conversion. The \a key has to be - in a valid format for the current operating system (e.g. under Unix a valid \a key - corresponds to a filename). Be aware that the application might not be portable. - This function returns without doing anything if the \a key equals the current - native key. If the shared memory object is attached to an underlying shared memory - segment, it will \l {detach()} {detach} from it before setting the new key. - This function does not do an attach(). - - \sa nativeKey() key() isAttached() -*/ -void QSharedMemory::setNativeKey(const QString &key) -{ - Q_D(QSharedMemory); - if (key == d->nativeKey && d->key.isNull()) - return; - - if (isAttached()) - detach(); - d->cleanHandle(); - d->key = QString(); - d->nativeKey = key; } bool QSharedMemoryPrivate::initKey() @@ -282,14 +251,13 @@ bool QSharedMemoryPrivate::initKey() } /*! - Returns the key assigned with setKey() to this shared memory. - The key is the identifier used by Qt applications to identify the shared - memory segment. The actual native key used by the operating system is returned - by nativeKey(). A null string is returned if the key was specified using setNativeKey(). - When QSharedMemory is used for interprocess communication, the key is how each - process attaches to the shared memory segment through which the IPC occurs. - - \sa setKey() setNativeKey() + Returns the key assigned to this shared memory. The key is the + identifier used by the operating system to identify the shared + memory segment. When QSharedMemory is used for interprocess + communication, the key is how each process attaches to the shared + memory segment through which the IPC occurs. + + \sa setKey() */ QString QSharedMemory::key() const { @@ -298,31 +266,13 @@ QString QSharedMemory::key() const } /*! - \since 4.7 - Returns the native key assigned with setKey() or setNativeKey() to this shared memory. - The native key is the identifier used by the operating system to identify the - shared memory segment. When using setKey(), the native key is obtained by - converting the specified key into a format accepted by all supported platforms. - When using setNativeKey(), the native key actually corresponds to the specified key - without any conversion. When QSharedMemory is used for interprocess communication, - the key is how each process attaches to the shared memory segment through which - the IPC occurs. - - \sa setKey() setNativeKey() -*/ -QString QSharedMemory::nativeKey() const -{ - Q_D(const QSharedMemory); - return d->nativeKey; -} - -/*! - Creates a shared memory segment of \a size bytes with the key passed to the - constructor, set with setKey() or set with setNativeKey(), then attaches to - the new shared memory segment with the given access \a mode and returns - \tt true. If a shared memory segment identified by the key already exists, - the attach operation is not performed and \tt false is returned. When the - return value is \tt false, call error() to determine which error occurred. + Creates a shared memory segment of \a size bytes with the key passed + to the constructor or set with setKey(), attaches to the new shared + memory segment with the given access \a mode, and returns \tt true. + If a shared memory segment identified by the key already exists, the + attach operation is not performed, and \tt false is returned. When + the return value is \tt false, call error() to determine which error + occurred. \sa error() */ @@ -344,7 +294,7 @@ bool QSharedMemory::create(int size, AccessMode mode) QString function = QLatin1String("QSharedMemory::create"); #ifndef QT_NO_SYSTEMSEMAPHORE QSharedMemoryLocker lock(this); - if (!d->key.isNull() && !d->tryLocker(&lock, function)) + if (!d->tryLocker(&lock, function)) return false; #endif @@ -388,7 +338,7 @@ int QSharedMemory::size() const /*! Attempts to attach the process to the shared memory segment identified by the key that was passed to the constructor or to a - call to setKey() or setNativeKey(). The access \a mode is \l {QSharedMemory::} + call to setKey(). The access \a mode is \l {QSharedMemory::} {ReadWrite} by default. It can also be \l {QSharedMemory::} {ReadOnly}. Returns true if the attach operation is successful. If false is returned, call error() to determine which error occurred. @@ -405,7 +355,7 @@ bool QSharedMemory::attach(AccessMode mode) return false; #ifndef QT_NO_SYSTEMSEMAPHORE QSharedMemoryLocker lock(this); - if (!d->key.isNull() && !d->tryLocker(&lock, QLatin1String("QSharedMemory::attach"))) + if (!d->tryLocker(&lock, QLatin1String("QSharedMemory::attach"))) return false; #endif @@ -445,7 +395,7 @@ bool QSharedMemory::detach() #ifndef QT_NO_SYSTEMSEMAPHORE QSharedMemoryLocker lock(this); - if (!d->key.isNull() && !d->tryLocker(&lock, QLatin1String("QSharedMemory::detach"))) + if (!d->tryLocker(&lock, QLatin1String("QSharedMemory::detach"))) return false; #endif @@ -501,9 +451,9 @@ const void *QSharedMemory::data() const by this process and returns true. If another process has locked the segment, this function blocks until the lock is released. Then it acquires the lock and returns true. If this function returns false, - it means that you have ignored a false return from create() or attach(), - that you have set the key with setNativeKey() or that - QSystemSemaphore::acquire() failed due to an unknown system error. + it means either that you have ignored a false return from create() + or attach(), or that QSystemSemaphore::acquire() failed due to an + unknown system error. \sa unlock(), data(), QSystemSemaphore::acquire() */ diff --git a/src/corelib/kernel/qsharedmemory.h b/src/corelib/kernel/qsharedmemory.h index 5673f43..fba939c 100644 --- a/src/corelib/kernel/qsharedmemory.h +++ b/src/corelib/kernel/qsharedmemory.h @@ -85,8 +85,6 @@ public: void setKey(const QString &key); QString key() const; - void setNativeKey(const QString &key); - QString nativeKey() const; bool create(int size, AccessMode mode = ReadWrite); int size() const; diff --git a/src/corelib/kernel/qsharedmemory_p.h b/src/corelib/kernel/qsharedmemory_p.h index 632a6e9..a52f8b3 100644 --- a/src/corelib/kernel/qsharedmemory_p.h +++ b/src/corelib/kernel/qsharedmemory_p.h @@ -122,7 +122,6 @@ public: void *memory; int size; QString key; - QString nativeKey; QSharedMemory::SharedMemoryError error; QString errorString; #ifndef QT_NO_SYSTEMSEMAPHORE diff --git a/src/corelib/kernel/qsharedmemory_symbian.cpp b/src/corelib/kernel/qsharedmemory_symbian.cpp index 091c2b5..9b84eb56 100644 --- a/src/corelib/kernel/qsharedmemory_symbian.cpp +++ b/src/corelib/kernel/qsharedmemory_symbian.cpp @@ -107,14 +107,16 @@ bool QSharedMemoryPrivate::cleanHandle() bool QSharedMemoryPrivate::create(int size) { + // Get a windows acceptable key + QString safeKey = makePlatformSafeKey(key); QString function = QLatin1String("QSharedMemory::create"); - if (nativeKey.isEmpty()) { + if (safeKey.isEmpty()) { error = QSharedMemory::KeyError; errorString = QSharedMemory::tr("%1: key error").arg(function); return false; } - TPtrC ptr(qt_QString2TPtrC(nativeKey)); + TPtrC ptr(qt_QString2TPtrC(safeKey)); TInt err = chunk.CreateGlobal(ptr, size, size); @@ -134,13 +136,14 @@ bool QSharedMemoryPrivate::attach(QSharedMemory::AccessMode /* mode */) // Grab a pointer to the memory block if (!chunk.Handle()) { QString function = QLatin1String("QSharedMemory::handle"); - if (nativeKey.isEmpty()) { + QString safeKey = makePlatformSafeKey(key); + if (safeKey.isEmpty()) { error = QSharedMemory::KeyError; errorString = QSharedMemory::tr("%1: unable to make key").arg(function); return false; } - TPtrC ptr(qt_QString2TPtrC(nativeKey)); + TPtrC ptr(qt_QString2TPtrC(safeKey)); TInt err = KErrNoMemory; diff --git a/src/corelib/kernel/qsharedmemory_unix.cpp b/src/corelib/kernel/qsharedmemory_unix.cpp index 064979b..a5f79c2 100644 --- a/src/corelib/kernel/qsharedmemory_unix.cpp +++ b/src/corelib/kernel/qsharedmemory_unix.cpp @@ -116,20 +116,21 @@ key_t QSharedMemoryPrivate::handle() return unix_key; // don't allow making handles on empty keys - if (nativeKey.isEmpty()) { + if (key.isEmpty()) { errorString = QSharedMemory::tr("%1: key is empty").arg(QLatin1String("QSharedMemory::handle:")); error = QSharedMemory::KeyError; return 0; } // ftok requires that an actual file exists somewhere - if (!QFile::exists(nativeKey)) { + QString fileName = makePlatformSafeKey(key); + if (!QFile::exists(fileName)) { errorString = QSharedMemory::tr("%1: UNIX key file doesn't exist").arg(QLatin1String("QSharedMemory::handle:")); error = QSharedMemory::NotFound; return 0; } - unix_key = ftok(QFile::encodeName(nativeKey).constData(), 'Q'); + unix_key = ftok(QFile::encodeName(fileName).constData(), 'Q'); if (-1 == unix_key) { errorString = QSharedMemory::tr("%1: ftok failed").arg(QLatin1String("QSharedMemory::handle:")); error = QSharedMemory::KeyError; @@ -180,7 +181,7 @@ bool QSharedMemoryPrivate::create(int size) { // build file if needed bool createdFile = false; - int built = createUnixKeyFile(nativeKey); + int built = createUnixKeyFile(makePlatformSafeKey(key)); if (built == -1) { errorString = QSharedMemory::tr("%1: unable to make key").arg(QLatin1String("QSharedMemory::handle:")); error = QSharedMemory::KeyError; @@ -193,7 +194,7 @@ bool QSharedMemoryPrivate::create(int size) // get handle if (!handle()) { if (createdFile) - QFile::remove(nativeKey); + QFile::remove(makePlatformSafeKey(key)); return false; } @@ -209,7 +210,7 @@ bool QSharedMemoryPrivate::create(int size) setErrorString(function); } if (createdFile && error != QSharedMemory::AlreadyExists) - QFile::remove(nativeKey); + QFile::remove(makePlatformSafeKey(key)); return false; } @@ -294,7 +295,7 @@ bool QSharedMemoryPrivate::detach() } // remove file - if (!QFile::remove(nativeKey)) + if (!QFile::remove(makePlatformSafeKey(key))) return false; } return true; diff --git a/src/corelib/kernel/qsharedmemory_win.cpp b/src/corelib/kernel/qsharedmemory_win.cpp index 0cdb123..0f5fdc7 100644 --- a/src/corelib/kernel/qsharedmemory_win.cpp +++ b/src/corelib/kernel/qsharedmemory_win.cpp @@ -99,17 +99,18 @@ HANDLE QSharedMemoryPrivate::handle() { if (!hand) { QString function = QLatin1String("QSharedMemory::handle"); - if (nativeKey.isEmpty()) { + QString safeKey = makePlatformSafeKey(key); + if (safeKey.isEmpty()) { error = QSharedMemory::KeyError; errorString = QSharedMemory::tr("%1: unable to make key").arg(function); return false; } #ifndef Q_OS_WINCE - hand = OpenFileMapping(FILE_MAP_ALL_ACCESS, false, (wchar_t*)nativeKey.utf16()); + hand = OpenFileMapping(FILE_MAP_ALL_ACCESS, false, (wchar_t*)safeKey.utf16()); #else // This works for opening a mapping too, but always opens it with read/write access in // attach as it seems. - hand = CreateFileMapping(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, 0, (wchar_t*)nativeKey.utf16()); + hand = CreateFileMapping(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, 0, (wchar_t*)safeKey.utf16()); #endif if (!hand) { setErrorString(function); @@ -132,15 +133,17 @@ bool QSharedMemoryPrivate::cleanHandle() bool QSharedMemoryPrivate::create(int size) { + // Get a windows acceptable key + QString safeKey = makePlatformSafeKey(key); QString function = QLatin1String("QSharedMemory::create"); - if (nativeKey.isEmpty()) { + if (safeKey.isEmpty()) { error = QSharedMemory::KeyError; errorString = QSharedMemory::tr("%1: key error").arg(function); return false; } // Create the file mapping. - hand = CreateFileMapping(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, size, (wchar_t*)nativeKey.utf16()); + hand = CreateFileMapping(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, size, (wchar_t*)safeKey.utf16()); setErrorString(function); // hand is valid when it already exists unlike unix so explicitly check diff --git a/tests/auto/qtipc/qsharedmemory/tst_qsharedmemory.cpp b/tests/auto/qtipc/qsharedmemory/tst_qsharedmemory.cpp index dc071ab..1f65ae7 100644 --- a/tests/auto/qtipc/qsharedmemory/tst_qsharedmemory.cpp +++ b/tests/auto/qtipc/qsharedmemory/tst_qsharedmemory.cpp @@ -225,17 +225,11 @@ void tst_QSharedMemory::key_data() { QTest::addColumn("constructorKey"); QTest::addColumn("setKey"); - QTest::addColumn("setNativeKey"); - - QTest::newRow("null, null, null") << QString() << QString() << QString(); - QTest::newRow("one, null, null") << QString("one") << QString() << QString(); - QTest::newRow("null, one, null") << QString() << QString("one") << QString(); - QTest::newRow("null, null, one") << QString() << QString() << QString("one"); - QTest::newRow("one, two, null") << QString("one") << QString("two") << QString(); - QTest::newRow("one, null, two") << QString("one") << QString() << QString("two"); - QTest::newRow("null, one, two") << QString() << QString("one") << QString("two"); - QTest::newRow("one, two, three") << QString("one") << QString("two") << QString("three"); - QTest::newRow("invalid") << QString("o/e") << QString("t/o") << QString("|x"); + + QTest::newRow("null, null") << QString() << QString(); + QTest::newRow("null, one") << QString() << QString("one"); + QTest::newRow("one, two") << QString("one") << QString("two"); + QTest::newRow("invalid") << QString("o/e") << QString("t/o"); } /*! @@ -245,17 +239,11 @@ void tst_QSharedMemory::key() { QFETCH(QString, constructorKey); QFETCH(QString, setKey); - QFETCH(QString, setNativeKey); QSharedMemory sm(constructorKey); QCOMPARE(sm.key(), constructorKey); - QCOMPARE(sm.nativeKey().isEmpty(), constructorKey.isEmpty()); sm.setKey(setKey); QCOMPARE(sm.key(), setKey); - QCOMPARE(sm.nativeKey().isEmpty(), setKey.isEmpty()); - sm.setNativeKey(setNativeKey); - QVERIFY(sm.key().isNull()); - QCOMPARE(sm.nativeKey(), setNativeKey); QCOMPARE(sm.isAttached(), false); QCOMPARE(sm.error(), QSharedMemory::NoError); @@ -274,7 +262,7 @@ void tst_QSharedMemory::create_data() QTest::addColumn("error"); QTest::newRow("null key") << QString() << 1024 - << false << QSharedMemory::KeyError; + << false << QSharedMemory::LockError; QTest::newRow("-1 size") << QString("negsize") << -1 << false << QSharedMemory::InvalidSize; QTest::newRow("nor size") << QString("norsize") << 1024 @@ -314,7 +302,7 @@ void tst_QSharedMemory::attach_data() QTest::addColumn("exists"); QTest::addColumn("error"); - QTest::newRow("null key") << QString() << false << QSharedMemory::KeyError; + QTest::newRow("null key") << QString() << false << QSharedMemory::LockError; QTest::newRow("doesn't exists") << QString("doesntexists") << false << QSharedMemory::NotFound; QTest::newRow("already exists") << QString(EXISTING_SHARE) << true << QSharedMemory::NoError; } -- cgit v0.12 From 63da3c8981a88261169b0d61636a739467634fa3 Mon Sep 17 00:00:00 2001 From: Thomas Zander Date: Mon, 31 May 2010 10:44:07 +0200 Subject: Remove stray debug --- config.tests/unix/fvisibility.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.tests/unix/fvisibility.test b/config.tests/unix/fvisibility.test index 5bc4b93..27c6841 100755 --- a/config.tests/unix/fvisibility.test +++ b/config.tests/unix/fvisibility.test @@ -1,4 +1,4 @@ -#!/bin/sh -x +#!/bin/sh FVISIBILITY_SUPPORT=no COMPILER=$1 -- cgit v0.12 From 3860340918846b5b156ba8e018d12cfe90461208 Mon Sep 17 00:00:00 2001 From: Tasuku Suzuki Date: Mon, 31 May 2010 12:23:12 +0200 Subject: Fix QT_NO_DIRMODEL build error in QtDeclarative. Reviewed-by: Andreas Aardal Hanssen Merge-request: 652 Merge-request: 652 Reviewed-by: Andreas Aardal Hanssen --- src/imports/folderlistmodel/plugin.cpp | 2 ++ src/imports/folderlistmodel/qdeclarativefolderlistmodel.cpp | 4 ++++ src/imports/folderlistmodel/qdeclarativefolderlistmodel.h | 4 ++++ 3 files changed, 10 insertions(+) diff --git a/src/imports/folderlistmodel/plugin.cpp b/src/imports/folderlistmodel/plugin.cpp index 555df3c..1ec6106 100644 --- a/src/imports/folderlistmodel/plugin.cpp +++ b/src/imports/folderlistmodel/plugin.cpp @@ -53,7 +53,9 @@ public: virtual void registerTypes(const char *uri) { Q_ASSERT(QLatin1String(uri) == QLatin1String("Qt.labs.folderlistmodel")); +#ifndef QT_NO_DIRMODEL qmlRegisterType(uri,1,0,"FolderListModel"); +#endif } }; //![class decl] diff --git a/src/imports/folderlistmodel/qdeclarativefolderlistmodel.cpp b/src/imports/folderlistmodel/qdeclarativefolderlistmodel.cpp index fccb9d4..9cf81ca 100644 --- a/src/imports/folderlistmodel/qdeclarativefolderlistmodel.cpp +++ b/src/imports/folderlistmodel/qdeclarativefolderlistmodel.cpp @@ -45,6 +45,8 @@ #include #include +#ifndef QT_NO_DIRMODEL + QT_BEGIN_NAMESPACE class QDeclarativeFolderListModelPrivate @@ -397,3 +399,5 @@ void QDeclarativeFolderListModel::setShowOnlyReadable(bool on) //![code] QT_END_NAMESPACE + +#endif // QT_NO_DIRMODEL diff --git a/src/imports/folderlistmodel/qdeclarativefolderlistmodel.h b/src/imports/folderlistmodel/qdeclarativefolderlistmodel.h index ea7d701..1bab5f84 100644 --- a/src/imports/folderlistmodel/qdeclarativefolderlistmodel.h +++ b/src/imports/folderlistmodel/qdeclarativefolderlistmodel.h @@ -47,6 +47,8 @@ #include #include +#ifndef QT_NO_DIRMODEL + QT_BEGIN_HEADER QT_BEGIN_NAMESPACE @@ -152,4 +154,6 @@ QML_DECLARE_TYPE(QDeclarativeFolderListModel) QT_END_HEADER +#endif // QT_NO_DIRMODEL + #endif // QDECLARATIVEFOLDERLISTMODEL_H -- cgit v0.12 From e845c0d7a8ed33f2aa2a3ae5ebce931ea2043037 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Mon, 31 May 2010 11:45:25 +0200 Subject: Fix compilation with stricts compilers. Base class is type-dependent. One must not use unqualified-id to access base member. Reveiwed-by: Roberto Raggi --- tools/porting/src/codemodel.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/porting/src/codemodel.h b/tools/porting/src/codemodel.h index cb3088f..04ad178 100644 --- a/tools/porting/src/codemodel.h +++ b/tools/porting/src/codemodel.h @@ -96,7 +96,7 @@ class Collection: public QMultiHash { public: void add(CollectedType *collectedItem) - { insert(collectedItem->name(), collectedItem); } + { this->insert(collectedItem->name(), collectedItem); } }; typedef Collection ScopeCollection; -- cgit v0.12 From aa0b5d35b29fd2f23223e5a4eca4b0d48c74cb2f Mon Sep 17 00:00:00 2001 From: Morten Engvoldsen Date: Mon, 31 May 2010 13:09:37 +0200 Subject: Doc: replacing old image Task-number: QT-1520 --- .../assistant/doc/images/assistant-assistant.png | Bin 105954 -> 205326 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tools/assistant/tools/assistant/doc/images/assistant-assistant.png b/tools/assistant/tools/assistant/doc/images/assistant-assistant.png index b825de0..1ff5cc9 100644 Binary files a/tools/assistant/tools/assistant/doc/images/assistant-assistant.png and b/tools/assistant/tools/assistant/doc/images/assistant-assistant.png differ -- cgit v0.12 From 817469519a784b1cc84f89cb3cb84f7560874f8e Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Mon, 31 May 2010 10:00:54 +0200 Subject: Fix unreasonably large width of QTextLayout::boundingRect() When no lineWidth is set on the QTextLine, the QScriptLine::width will be the maximum value that can be represented by QFixed, thus always overriding the width of the bounding rect. The lineWidth of the QTextLine should never be used as the width of the bounding rect, since it's not a calculated value. The real bounding rect is found by querying the natural text width. Task-number: QTBUG-11104 Reviewed-by: Rhys Weatherley --- src/gui/text/qtextlayout.cpp | 2 +- tests/auto/qtextlayout/tst_qtextlayout.cpp | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index ce7915d..a1a17af 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -858,7 +858,7 @@ QRectF QTextLayout::boundingRect() const const QScriptLine &si = d->lines[i]; xmin = qMin(xmin, si.x); ymin = qMin(ymin, si.y); - xmax = qMax(xmax, si.x+qMax(si.width, si.textWidth)); + xmax = qMax(xmax, si.x+si.textWidth); // ### shouldn't the ascent be used in ymin??? ymax = qMax(ymax, si.y+si.height()); } diff --git a/tests/auto/qtextlayout/tst_qtextlayout.cpp b/tests/auto/qtextlayout/tst_qtextlayout.cpp index caf9bd3..b67dc30 100644 --- a/tests/auto/qtextlayout/tst_qtextlayout.cpp +++ b/tests/auto/qtextlayout/tst_qtextlayout.cpp @@ -110,6 +110,7 @@ private slots: void longText(); void widthOfTabs(); void columnWrapWithTabs(); + void boundingRectForUnsetLineWidth(); // QTextLine stuff void setNumColumnsWrapAtWordBoundaryOrAnywhere(); @@ -1307,6 +1308,17 @@ void tst_QTextLayout::columnWrapWithTabs() } +void tst_QTextLayout::boundingRectForUnsetLineWidth() +{ + QTextLayout layout("FOOBAR"); + + layout.beginLayout(); + QTextLine line = layout.createLine(); + layout.endLayout(); + + QCOMPARE(layout.boundingRect().width(), line.naturalTextWidth()); +} + void tst_QTextLayout::lineWidthFromBOM() { const QString string(QChar(0xfeff)); // BYTE ORDER MARK -- cgit v0.12 From b2244174dc4e1858954d7e21cf66bd010d7a8cb4 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Mon, 31 May 2010 13:40:54 +0200 Subject: Revert behavior of QTextLayout::boundingRect() when line width is set In change 817469519a784b1cc84f89cb3cb84f7560874f8e, there was a behavioral change which can cause regressions, as the bounding rect of the QTextLayout would previously return the set line width when this was greater than the calculated natural text width. We revert to this behavior to avoid regressions and add an autotest for it. When the line width is not set (and si.width is equal to QFIXED_MAX), then we will still return the natural text width. Reviewed-by: Lars --- src/gui/text/qtextlayout.cpp | 3 ++- tests/auto/qtextlayout/tst_qtextlayout.cpp | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index a1a17af..3f67408 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -858,7 +858,8 @@ QRectF QTextLayout::boundingRect() const const QScriptLine &si = d->lines[i]; xmin = qMin(xmin, si.x); ymin = qMin(ymin, si.y); - xmax = qMax(xmax, si.x+si.textWidth); + QFixed lineWidth = si.width < QFIXED_MAX ? qMax(si.width, si.textWidth) : si.textWidth; + xmax = qMax(xmax, si.x+lineWidth); // ### shouldn't the ascent be used in ymin??? ymax = qMax(ymax, si.y+si.height()); } diff --git a/tests/auto/qtextlayout/tst_qtextlayout.cpp b/tests/auto/qtextlayout/tst_qtextlayout.cpp index b67dc30..1a5f493 100644 --- a/tests/auto/qtextlayout/tst_qtextlayout.cpp +++ b/tests/auto/qtextlayout/tst_qtextlayout.cpp @@ -111,6 +111,7 @@ private slots: void widthOfTabs(); void columnWrapWithTabs(); void boundingRectForUnsetLineWidth(); + void boundingRectForSetLineWidth(); // QTextLine stuff void setNumColumnsWrapAtWordBoundaryOrAnywhere(); @@ -1319,6 +1320,18 @@ void tst_QTextLayout::boundingRectForUnsetLineWidth() QCOMPARE(layout.boundingRect().width(), line.naturalTextWidth()); } +void tst_QTextLayout::boundingRectForSetLineWidth() +{ + QTextLayout layout("FOOBAR"); + + layout.beginLayout(); + QTextLine line = layout.createLine(); + line.setLineWidth(QFIXED_MAX - 1); + layout.endLayout(); + + QCOMPARE(layout.boundingRect().width(), qreal(QFIXED_MAX - 1)); +} + void tst_QTextLayout::lineWidthFromBOM() { const QString string(QChar(0xfeff)); // BYTE ORDER MARK -- cgit v0.12 From 098eec2b9ba7218f1b595743476b73b61069d701 Mon Sep 17 00:00:00 2001 From: Morten Engvoldsen Date: Mon, 31 May 2010 13:45:34 +0200 Subject: Doc: Adding note about QDrag::exec() Adding note to the QDrag::exec docs alerting the user about Windows speciffic behaviour. Task-number: QT-640 --- src/gui/kernel/qdrag.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/gui/kernel/qdrag.cpp b/src/gui/kernel/qdrag.cpp index b57615c..2857bb5 100644 --- a/src/gui/kernel/qdrag.cpp +++ b/src/gui/kernel/qdrag.cpp @@ -253,7 +253,9 @@ Qt::DropAction QDrag::exec(Qt::DropActions supportedActions) can take some time, but this function does not block the event loop. Other events are still delivered to the application while the operation is performed. On Windows, the Qt event loop is - blocked while during the operation. + blocked while during the operation. However, QDrag::exec() on + Windows causes processEvents() to be called frequently to keep the GUI responsive. + If any loops or operations are called while a drag operation is active, it will block the drag operation. */ Qt::DropAction QDrag::exec(Qt::DropActions supportedActions, Qt::DropAction defaultDropAction) -- cgit v0.12 From de904c51b140e11c801471871632d1d1b552e470 Mon Sep 17 00:00:00 2001 From: Morten Engvoldsen Date: Mon, 31 May 2010 13:58:08 +0200 Subject: Doc: correcting docs in QDrag::exec --- src/gui/kernel/qdrag.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/kernel/qdrag.cpp b/src/gui/kernel/qdrag.cpp index 2857bb5..77f8fc0 100644 --- a/src/gui/kernel/qdrag.cpp +++ b/src/gui/kernel/qdrag.cpp @@ -253,7 +253,7 @@ Qt::DropAction QDrag::exec(Qt::DropActions supportedActions) can take some time, but this function does not block the event loop. Other events are still delivered to the application while the operation is performed. On Windows, the Qt event loop is - blocked while during the operation. However, QDrag::exec() on + blocked during the operation. However, QDrag::exec() on Windows causes processEvents() to be called frequently to keep the GUI responsive. If any loops or operations are called while a drag operation is active, it will block the drag operation. */ -- cgit v0.12 From c1760352caf33390592ccf5f8eb3401e10aea143 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Mon, 31 May 2010 14:37:30 +0200 Subject: Doc: Removed a misleading sentence about a class constructor. Reviewed-by: Trust Me Task-number: QTBUG-10479 --- doc/src/examples/pixelator.qdoc | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/doc/src/examples/pixelator.qdoc b/doc/src/examples/pixelator.qdoc index 09ae3e8..95099e1 100644 --- a/doc/src/examples/pixelator.qdoc +++ b/doc/src/examples/pixelator.qdoc @@ -80,8 +80,6 @@ functions to indicate the dimensions of the image and supply data to other components. - For convenience, the image to be used is passed in the constructor. - \section1 ImageModel Class Implementation The constructor is trivial: @@ -89,7 +87,7 @@ \snippet examples/itemviews/pixelator/imagemodel.cpp 0 The \c setImage() function sets the image that will be used by the model: - + \snippet examples/itemviews/pixelator/imagemodel.cpp 1 The QAbstractItemModel::reset() call tells the view(s) that the model @@ -233,7 +231,7 @@ This enables the items to be drawn without any gaps between them. Removing the headers also prevents the user from adjusting the sizes of individual rows and columns. - + We also set the minimum section size to 1 on the headers. If we didn't, the headers would default to a larger size, preventing us from displaying really small items (which can be specified -- cgit v0.12 From cbff8db322bf8e99cb3e062cc47fd2fc0db81ac2 Mon Sep 17 00:00:00 2001 From: Tasuku Suzuki Date: Mon, 31 May 2010 14:49:15 +0200 Subject: Fix QT_NO_VALIDATOR compilation. Merge-request: 648 Reviewed-by: Andreas Aardal Hanssen --- src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp | 4 ++++ src/declarative/graphicsitems/qdeclarativetextinput.cpp | 2 ++ src/declarative/graphicsitems/qdeclarativetextinput_p.h | 7 ++++++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp b/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp index 151a9e9..0be8dac 100644 --- a/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp @@ -112,9 +112,11 @@ void QDeclarativeItemModule::defineModule() qmlRegisterType("Qt",4,7,"PathPercent"); qmlRegisterType("Qt",4,7,"PathQuad"); qmlRegisterType("Qt",4,7,"PathView"); +#ifndef QT_NO_VALIDATOR qmlRegisterType("Qt",4,7,"IntValidator"); qmlRegisterType("Qt",4,7,"DoubleValidator"); qmlRegisterType("Qt",4,7,"RegExpValidator"); +#endif qmlRegisterType("Qt",4,7,"Rectangle"); qmlRegisterType("Qt",4,7,"Repeater"); qmlRegisterType("Qt",4,7,"Rotation"); @@ -138,7 +140,9 @@ void QDeclarativeItemModule::defineModule() qmlRegisterType(); qmlRegisterType(); qmlRegisterType(); +#ifndef QT_NO_VALIDATOR qmlRegisterType(); +#endif qmlRegisterType(); #ifndef QT_NO_ACTION qmlRegisterType(); diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index 9c70ea9..305540f 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -648,6 +648,7 @@ void QDeclarativeTextInput::setAutoScroll(bool b) \sa acceptableInput, inputMask */ +#ifndef QT_NO_VALIDATOR QValidator* QDeclarativeTextInput::validator() const { Q_D(const QDeclarativeTextInput); @@ -669,6 +670,7 @@ void QDeclarativeTextInput::setValidator(QValidator* v) emit validatorChanged(); } +#endif // QT_NO_VALIDATOR /*! \qmlproperty string TextInput::inputMask diff --git a/src/declarative/graphicsitems/qdeclarativetextinput_p.h b/src/declarative/graphicsitems/qdeclarativetextinput_p.h index 438293a..3dba844 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextinput_p.h @@ -79,7 +79,9 @@ class Q_DECLARATIVE_EXPORT QDeclarativeTextInput : public QDeclarativePaintedIte Q_PROPERTY(QString selectedText READ selectedText NOTIFY selectedTextChanged) Q_PROPERTY(int maximumLength READ maxLength WRITE setMaxLength NOTIFY maximumLengthChanged) +#ifndef QT_NO_VALIDATOR 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) @@ -156,9 +158,10 @@ public: int maxLength() const; void setMaxLength(int ml); +#ifndef QT_NO_VALIDATOR QValidator * validator() const; void setValidator(QValidator* v); - +#endif QString inputMask() const; void setInputMask(const QString &im); @@ -248,10 +251,12 @@ private: QT_END_NAMESPACE QML_DECLARE_TYPE(QDeclarativeTextInput) +#ifndef QT_NO_VALIDATOR QML_DECLARE_TYPE(QValidator) QML_DECLARE_TYPE(QIntValidator) QML_DECLARE_TYPE(QDoubleValidator) QML_DECLARE_TYPE(QRegExpValidator) +#endif QT_END_HEADER -- cgit v0.12 From 77474ad850b91e1de080d2f8fb9a60af2f89668f Mon Sep 17 00:00:00 2001 From: Tasuku Suzuki Date: Mon, 31 May 2010 15:11:57 +0200 Subject: Fix QT_NO_TEXTSTREAM compilation errors. Merge-request: 647 Reviewed-by: Andreas Aardal Hanssen --- src/declarative/graphicsitems/qdeclarativeanimatedimage.cpp | 2 ++ src/declarative/graphicsitems/qdeclarativeitem.cpp | 2 ++ src/declarative/graphicsitems/qdeclarativeitem.h | 2 ++ src/declarative/qml/qdeclarativeinfo.h | 2 ++ src/declarative/qml/qdeclarativeinstruction.cpp | 5 +++++ src/declarative/util/qdeclarativestate.cpp | 2 ++ src/declarative/util/qdeclarativetransitionmanager.cpp | 2 ++ 7 files changed, 17 insertions(+) diff --git a/src/declarative/graphicsitems/qdeclarativeanimatedimage.cpp b/src/declarative/graphicsitems/qdeclarativeanimatedimage.cpp index 32a6321..a05e426 100644 --- a/src/declarative/graphicsitems/qdeclarativeanimatedimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeanimatedimage.cpp @@ -263,7 +263,9 @@ void QDeclarativeAnimatedImage::movieRequestFinished() d->_movie = new QMovie(d->reply); if (!d->_movie->isValid()){ +#ifndef QT_NO_DEBUG_STREAM qmlInfo(this) << "Error Reading Animated Image File " << d->url; +#endif delete d->_movie; d->_movie = 0; return; diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index 7bd08ce..134bd6d 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -3131,6 +3131,7 @@ bool QDeclarativeItem::event(QEvent *ev) return QGraphicsObject::event(ev); } +#ifndef QT_NO_DEBUG_STREAM QDebug operator<<(QDebug debug, QDeclarativeItem *item) { if (!item) { @@ -3144,6 +3145,7 @@ QDebug operator<<(QDebug debug, QDeclarativeItem *item) << ", z =" << item->zValue() << ')'; return debug; } +#endif qint64 QDeclarativeItemPrivate::consistentTime = -1; void QDeclarativeItemPrivate::setConsistentTime(qint64 t) diff --git a/src/declarative/graphicsitems/qdeclarativeitem.h b/src/declarative/graphicsitems/qdeclarativeitem.h index 29fd241..77e316b 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.h +++ b/src/declarative/graphicsitems/qdeclarativeitem.h @@ -209,7 +209,9 @@ T qobject_cast(QGraphicsItem *item) return qobject_cast(o); } +#ifndef QT_NO_DEBUG_STREAM QDebug Q_DECLARATIVE_EXPORT operator<<(QDebug debug, QDeclarativeItem *item); +#endif QT_END_NAMESPACE diff --git a/src/declarative/qml/qdeclarativeinfo.h b/src/declarative/qml/qdeclarativeinfo.h index 2ac28f4..b41abd8 100644 --- a/src/declarative/qml/qdeclarativeinfo.h +++ b/src/declarative/qml/qdeclarativeinfo.h @@ -81,7 +81,9 @@ public: inline QDeclarativeInfo &operator<<(const void * t) { QDebug::operator<<(t); return *this; } inline QDeclarativeInfo &operator<<(QTextStreamFunction f) { QDebug::operator<<(f); return *this; } inline QDeclarativeInfo &operator<<(QTextStreamManipulator m) { QDebug::operator<<(m); return *this; } +#ifndef QT_NO_DEBUG_STREAM inline QDeclarativeInfo &operator<<(const QUrl &t) { static_cast(*this) << t; return *this; } +#endif private: friend Q_DECLARATIVE_EXPORT QDeclarativeInfo qmlInfo(const QObject *me); diff --git a/src/declarative/qml/qdeclarativeinstruction.cpp b/src/declarative/qml/qdeclarativeinstruction.cpp index b86d082..0f7b09d 100644 --- a/src/declarative/qml/qdeclarativeinstruction.cpp +++ b/src/declarative/qml/qdeclarativeinstruction.cpp @@ -49,6 +49,10 @@ QT_BEGIN_NAMESPACE void QDeclarativeCompiledData::dump(QDeclarativeInstruction *instr, int idx) { +#ifdef QT_NO_DEBUG_STREAM + Q_UNUSED(instr) + Q_UNUSED(idx) +#else QByteArray lineNumber = QByteArray::number(instr->line); if (instr->line == (unsigned short)-1) lineNumber = "NA"; @@ -217,6 +221,7 @@ void QDeclarativeCompiledData::dump(QDeclarativeInstruction *instr, int idx) qWarning().nospace() << idx << "\t\t" << line << "\t" << "XXX UNKOWN INSTRUCTION" << "\t" << instr->type; break; } +#endif // QT_NO_DEBUG_STREAM } QT_END_NAMESPACE diff --git a/src/declarative/util/qdeclarativestate.cpp b/src/declarative/util/qdeclarativestate.cpp index b5f7900..dc2b2cc 100644 --- a/src/declarative/util/qdeclarativestate.cpp +++ b/src/declarative/util/qdeclarativestate.cpp @@ -486,6 +486,7 @@ void QDeclarativeState::apply(QDeclarativeStateGroup *group, QDeclarativeTransit // All the local reverts now become part of the ongoing revertList d->revertList << additionalReverts; +#ifndef QT_NO_DEBUG_STREAM // Output for debugging if (stateChangeDebug()) { foreach(const QDeclarativeAction &action, applyList) { @@ -497,6 +498,7 @@ void QDeclarativeState::apply(QDeclarativeStateGroup *group, QDeclarativeTransit << "To:" << action.toValue; } } +#endif d->transitionManager.transition(applyList, trans); } diff --git a/src/declarative/util/qdeclarativetransitionmanager.cpp b/src/declarative/util/qdeclarativetransitionmanager.cpp index 368d484..9f198e4 100644 --- a/src/declarative/util/qdeclarativetransitionmanager.cpp +++ b/src/declarative/util/qdeclarativetransitionmanager.cpp @@ -233,6 +233,7 @@ void QDeclarativeTransitionManager::transition(const QList & action.property.write(action.toValue); } } +#ifndef QT_NO_DEBUG_STREAM if (stateChangeDebug()) { foreach(const QDeclarativeAction &action, applyList) { if (action.event) @@ -243,6 +244,7 @@ void QDeclarativeTransitionManager::transition(const QList & << "To:" << action.toValue; } } +#endif if (!transition) d->applyBindings(); } -- cgit v0.12 From 54f0a5691899c4b74c71c7718e8e451bdcdbda54 Mon Sep 17 00:00:00 2001 From: Tasuku Suzuki Date: Mon, 31 May 2010 15:44:57 +0200 Subject: Fix QT_NO_DOM Merge-request: 2395 Reviewed-by: Andreas Aardal Hanssen --- src/corelib/global/qfeatures.h | 10 +++++----- src/corelib/global/qfeatures.txt | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/corelib/global/qfeatures.h b/src/corelib/global/qfeatures.h index c66047a..a333153 100644 --- a/src/corelib/global/qfeatures.h +++ b/src/corelib/global/qfeatures.h @@ -335,11 +335,6 @@ #define QT_NO_DATESTRING #endif -// QtDBus module -#if !defined(QT_NO_DBUS) && (defined(QT_NO_PROPERTIES)) -#define QT_NO_DBUS -#endif - // QDial #if !defined(QT_NO_DIAL) && (defined(QT_NO_SLIDER)) #define QT_NO_DIAL @@ -515,6 +510,11 @@ #define QT_NO_CONTEXTMENU #endif +// QtDBus module +#if !defined(QT_NO_DBUS) && (defined(QT_NO_PROPERTIES) || defined(QT_NO_DOM)) +#define QT_NO_DBUS +#endif + // File Transfer Protocol #if !defined(QT_NO_FTP) && (defined(QT_NO_URLINFO) || defined(QT_NO_TEXTDATE)) #define QT_NO_FTP diff --git a/src/corelib/global/qfeatures.txt b/src/corelib/global/qfeatures.txt index ed173b1..3e6af24 100644 --- a/src/corelib/global/qfeatures.txt +++ b/src/corelib/global/qfeatures.txt @@ -1373,7 +1373,7 @@ SeeAlso: ??? Feature: DBUS Description: Provides classes for D-Bus. Section: D-Bus -Requires: PROPERTIES +Requires: PROPERTIES DOM Name: QtDBus module SeeAlso: ??? -- cgit v0.12 From 55d344acb767226bdf5e1629a44fd7d9a22e4906 Mon Sep 17 00:00:00 2001 From: Tasuku Suzuki Date: Mon, 31 May 2010 15:56:51 +0200 Subject: Fix QT_NO_TEXTHTMLPARSER Merge-request: 644 Reviewed-by: Andreas Aardal Hanssen --- src/declarative/graphicsitems/qdeclarativetext.cpp | 16 ++++++++++++++++ src/declarative/graphicsitems/qdeclarativetextedit.cpp | 10 ++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index 2c1eb67..55cef8b 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -318,7 +318,11 @@ void QDeclarativeText::setText(const QString &n) if (d->richText) { if (isComponentComplete()) { d->ensureDoc(); +#ifndef QT_NO_TEXTHTMLPARSER d->doc->setHtml(n); +#else + d->doc->setPlainText(n); +#endif } } @@ -605,7 +609,11 @@ void QDeclarativeText::setTextFormat(TextFormat format) } else if (!wasRich && d->richText) { if (isComponentComplete()) { d->ensureDoc(); +#ifndef QT_NO_TEXTHTMLPARSER d->doc->setHtml(d->text); +#else + d->doc->setPlainText(d->text); +#endif } d->updateLayout(); d->markImgDirty(); @@ -991,7 +999,11 @@ void QDeclarativeText::reloadWithResources() Q_D(QDeclarativeText); if (!d->richText) return; +#ifndef QT_NO_TEXTHTMLPARSER d->doc->setHtml(d->text); +#else + d->doc->setPlainText(d->text); +#endif d->updateLayout(); d->markImgDirty(); } @@ -1121,7 +1133,11 @@ void QDeclarativeText::componentComplete() if (d->dirty) { if (d->richText) { d->ensureDoc(); +#ifndef QT_NO_TEXTHTMLPARSER d->doc->setHtml(d->text); +#else + d->doc->setPlainText(d->text); +#endif } d->updateLayout(); d->dirty = false; diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index 9ccb8d2..997c666 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -120,9 +120,11 @@ QString QDeclarativeTextEdit::text() const { Q_D(const QDeclarativeTextEdit); +#ifndef QT_NO_TEXTHTMLPARSER if (d->richText) return d->document->toHtml(); else +#endif return d->document->toPlainText(); } @@ -253,7 +255,11 @@ void QDeclarativeTextEdit::setText(const QString &text) d->text = text; d->richText = d->format == RichText || (d->format == AutoText && Qt::mightBeRichText(text)); if (d->richText) { +#ifndef QT_NO_TEXTHTMLPARSER d->control->setHtml(text); +#else + d->control->setPlainText(text); +#endif } else { d->control->setPlainText(text); } @@ -318,7 +324,11 @@ void QDeclarativeTextEdit::setTextFormat(TextFormat format) d->control->setPlainText(d->text); updateSize(); } else if (!wasRich && d->richText) { +#ifndef QT_NO_TEXTHTMLPARSER d->control->setHtml(d->text); +#else + d->control->setPlainText(d->text); +#endif updateSize(); } d->format = format; -- cgit v0.12 From 51f56d93578be5021fe449da1165cf0c539343b9 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Mon, 31 May 2010 16:48:24 +0200 Subject: Updated WebKit to c58dc2f491a824ac56e31c440fcf7fe16dab09c4 Integrate https://trac.webkit.org/changeset/60435 - [Qt] Escape backslashes in the .pro files by Ossi. --- src/3rdparty/webkit/.tag | 2 +- src/3rdparty/webkit/VERSION | 2 +- src/3rdparty/webkit/WebCore/ChangeLog | 10 ++++++++++ src/3rdparty/webkit/WebCore/WebCore.pro | 2 +- .../webkit/WebKit/qt/Api/DerivedSources.pro | 6 +++--- src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp | 2 +- src/3rdparty/webkit/WebKit/qt/ChangeLog | 21 +++++++++++++++++++++ src/3rdparty/webkit/WebKit/qt/docs/docs.pri | 2 +- 8 files changed, 39 insertions(+), 8 deletions(-) diff --git a/src/3rdparty/webkit/.tag b/src/3rdparty/webkit/.tag index 49b1cbe..8cb0e53 100644 --- a/src/3rdparty/webkit/.tag +++ b/src/3rdparty/webkit/.tag @@ -1 +1 @@ -c58dc2f491a824ac56e31c440fcf7fe16dab09c4 +f59a934694947496cedecc5256a71bff60c43c4c diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION index 1db0c55..fb78e36 100644 --- a/src/3rdparty/webkit/VERSION +++ b/src/3rdparty/webkit/VERSION @@ -4,4 +4,4 @@ This is a snapshot of the Qt port of WebKit from and has the sha1 checksum - 531b0d7cd2af830f0d17b83b6e4a489794481539 + c58dc2f491a824ac56e31c440fcf7fe16dab09c4 diff --git a/src/3rdparty/webkit/WebCore/ChangeLog b/src/3rdparty/webkit/WebCore/ChangeLog index daf10fa..ff7d214 100644 --- a/src/3rdparty/webkit/WebCore/ChangeLog +++ b/src/3rdparty/webkit/WebCore/ChangeLog @@ -1,3 +1,13 @@ +2010-05-31 Oswald Buddenhagen + + Reviewed by Simon Hausmann. + + [Qt] Escape backslashes in the .pro files + + qmake in Qt 4.7 warns about unescaped backspaces and deprecates them. + + * WebCore.pro: + 2010-05-28 Antti Koivisto Reviewed by Kenneth Rohde Christiansen. diff --git a/src/3rdparty/webkit/WebCore/WebCore.pro b/src/3rdparty/webkit/WebCore/WebCore.pro index 5def728..63e78a7 100644 --- a/src/3rdparty/webkit/WebCore/WebCore.pro +++ b/src/3rdparty/webkit/WebCore/WebCore.pro @@ -159,7 +159,7 @@ defineTest(addExtraCompiler) { for(file,input) { base = $$basename(file) - base ~= s/\..+// + base ~= s/\\..+// newfile=$$replace(outputRule,\\$\\{QMAKE_FILE_BASE\\},$$base) SOURCES += $$newfile } diff --git a/src/3rdparty/webkit/WebKit/qt/Api/DerivedSources.pro b/src/3rdparty/webkit/WebKit/qt/Api/DerivedSources.pro index 389fb5f..22d4c8d 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/DerivedSources.pro +++ b/src/3rdparty/webkit/WebKit/qt/Api/DerivedSources.pro @@ -28,7 +28,7 @@ qtheader_module.commands += echo $${QUOTE}$${LITERAL_HASH}define QT_QTWEBKIT_MOD qtheader_module.commands += echo $${QUOTE}$${LITERAL_HASH}include $${ESCAPE}$${QUOTE} >> $${qtheader_module.target} && WEBKIT_CLASS_HEADERS = $${LITERAL_DOLLAR}$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}PWD/QtWebKit -regex = ".*\sclass\sQWEBKIT_EXPORT\s(\w+)\s(.*)" +regex = ".*\\sclass\\sQWEBKIT_EXPORT\\s(\\w+)\\s(.*)" for(HEADER, WEBKIT_API_HEADERS) { # 1. Append to QtWebKit header that includes all other header files @@ -70,7 +70,7 @@ for(HEADER, WEBKIT_API_HEADERS) { res = $$find(src, $$regex) isEmpty(res):break() - exp = $$replace(src, $$regex, "EXPORTED_CLASS = \1") + exp = $$replace(src, $$regex, "EXPORTED_CLASS = \\1") eval($$exp) CLASS_TARGET = "qtheader_$${EXPORTED_CLASS}" @@ -87,7 +87,7 @@ for(HEADER, WEBKIT_API_HEADERS) { # Qt's QRegExp does not support inline non-greedy matching, # so we'll have to work around it by updating the haystack - src = $$replace(src, $$regex, "\2") + src = $$replace(src, $$regex, "\\2") src_words = $$join(src, $${LITERAL_WHITESPACE}) } } diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp index a61ca2e..564c6fe 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp @@ -3620,7 +3620,7 @@ QString QWebPage::userAgentForUrl(const QUrl&) const languageName = d->client->ownerWidget()->locale().name(); else languageName = QLocale().name(); - languageName[2] = QLatin1Char('-'); + languageName.replace(QLatin1Char('_'), QLatin1Char('-')); // Application name/version QString appName = QCoreApplication::applicationName(); diff --git a/src/3rdparty/webkit/WebKit/qt/ChangeLog b/src/3rdparty/webkit/WebKit/qt/ChangeLog index cc2d39a..b6cbf92 100644 --- a/src/3rdparty/webkit/WebKit/qt/ChangeLog +++ b/src/3rdparty/webkit/WebKit/qt/ChangeLog @@ -1,3 +1,24 @@ +2010-05-31 Oswald Buddenhagen + + Reviewed by Simon Hausmann. + + [Qt] Escape backslashes in the .pro files + + qmake in Qt 4.7 warns about unescaped backspaces and deprecates them. + + * Api/DerivedSources.pro: + * docs/docs.pri: + +2010-05-19 Denis Dzyubenko + + Reviewed by Kenneth Rohde Christiansen. + + When creating the UA, do not sassmue the language code is a + two-letter iso639-1 code. + + * Api/qwebpage.cpp: + (QWebPage::userAgentForUrl): + 2010-05-28 Antti Koivisto Reviewed by Kenneth Rohde Christiansen. diff --git a/src/3rdparty/webkit/WebKit/qt/docs/docs.pri b/src/3rdparty/webkit/WebKit/qt/docs/docs.pri index 804817b..a56ddb4 100644 --- a/src/3rdparty/webkit/WebKit/qt/docs/docs.pri +++ b/src/3rdparty/webkit/WebKit/qt/docs/docs.pri @@ -3,7 +3,7 @@ include(../../../WebKit.pri) unix { QDOC = SRCDIR=$$PWD/../../.. OUTPUT_DIR=$$OUTPUT_DIR $$(QTDIR)/bin/qdoc3 } else { - QDOC = $$(QTDIR)\bin\qdoc3.exe + QDOC = $$(QTDIR)\\bin\\qdoc3.exe } unix { -- cgit v0.12 From bd786961b0d65bdd1adb31eca0a050a4b9a1f39a Mon Sep 17 00:00:00 2001 From: David Boddie Date: Mon, 31 May 2010 17:02:49 +0200 Subject: Doc: Fixed an off-by-one error in an example. Reviewed-by: Trust Me Task-number: QTBUG-10854 --- examples/itemviews/fetchmore/filelistmodel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/itemviews/fetchmore/filelistmodel.cpp b/examples/itemviews/fetchmore/filelistmodel.cpp index 05ab45e..942150e 100644 --- a/examples/itemviews/fetchmore/filelistmodel.cpp +++ b/examples/itemviews/fetchmore/filelistmodel.cpp @@ -92,7 +92,7 @@ void FileListModel::fetchMore(const QModelIndex & /* index */) int remainder = fileList.size() - fileCount; int itemsToFetch = qMin(100, remainder); - beginInsertRows(QModelIndex(), fileCount, fileCount+itemsToFetch); + beginInsertRows(QModelIndex(), fileCount, fileCount+itemsToFetch-1); fileCount += itemsToFetch; -- cgit v0.12 From 3cc9fc5f0c5e846dcc1ce2e7c6e58c06e1186363 Mon Sep 17 00:00:00 2001 From: Leonardo Sobral Cunha Date: Mon, 31 May 2010 17:57:52 +0200 Subject: Add my 4.7.0 changes --- dist/changes-4.7.0 | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/dist/changes-4.7.0 b/dist/changes-4.7.0 index e7b1e84..dbb3add 100644 --- a/dist/changes-4.7.0 +++ b/dist/changes-4.7.0 @@ -52,12 +52,16 @@ QtCore - QMetaType * Significantly improved performance of the type() function + * [QTBUG-8235] Support QEasingCurve as a built in metatype. - QState * [QTBUG-7741] Added a function to get the out-going transitions - QXmlStreamReader * [QTBUG-9196] fixed crash when parsing - QTimer * singleShot with 0 timeout will now avoid allocating objects + - QAbstractAnimation + * [QTBUG-10654] Avoids animation with loopCount == 0 to change state + to running and stopped. QtGui ----- @@ -95,6 +99,8 @@ QtGui - QGraphicsTextItem * [QTBUG-7333] Fixed keyboard shortcuts not being triggered when the the item has focus and something else has the same shortcut sequence. + * [QTBUG-10574] Fixed crash when flag "QGraphicsItem::ItemIgnoresTransformations" + is set. - QGraphicsView * [QTBUG-7438] Fixed viewport cursor getting reset when releasing -- cgit v0.12 From 33fddc2adf95b56d8309ef9bc11408252140a085 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Thu, 27 May 2010 21:16:10 +0200 Subject: QTextEngine: skip an unnecessary call to GetDeviceCaps on Windows. Reviewed-by: Simon Hausmann --- src/gui/text/qtextengine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index d34553f..6359672 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -885,7 +885,7 @@ void QTextEngine::shapeText(int item) const QFixed letterSpacing = font.d->letterSpacing; QFixed wordSpacing = font.d->wordSpacing; - if (letterSpacingIsAbsolute) + if (letterSpacingIsAbsolute && letterSpacing.value()) letterSpacing *= font.d->dpi / qt_defaultDpiY(); if (letterSpacing != 0) { -- cgit v0.12 From 032fb3d54eaaa1fa36ec45b37f5f7356b1137830 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Tue, 25 May 2010 20:19:14 +0200 Subject: Add the Qt::TextBypassShaping flag. This allows quick layouting especially with Windows fonts which contain heavy OpenType logic. On regular latin text the visual compromize is the loss of kerning, justification, capitalization, word spacing and letter spacing support. Reviewed-by: Simon Hausmann Reviewed-by: Eskil --- src/corelib/global/qnamespace.h | 3 ++- src/gui/painting/qpainter.cpp | 17 +++++++++++++++++ src/gui/text/qfontmetrics.cpp | 25 +++++++++++++++++++++++++ src/gui/text/qfontmetrics.h | 1 + src/gui/text/qtextengine.cpp | 6 ++++++ src/gui/text/qtextengine_p.h | 1 + tests/auto/qfontmetrics/tst_qfontmetrics.cpp | 15 +++++++++++++++ 7 files changed, 67 insertions(+), 1 deletion(-) diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h index 08674d2..52a24de 100644 --- a/src/corelib/global/qnamespace.h +++ b/src/corelib/global/qnamespace.h @@ -236,7 +236,8 @@ public: TextJustificationForced = 0x10000, TextForceLeftToRight = 0x20000, TextForceRightToLeft = 0x40000, - TextLongestVariant = 0x80000 + TextLongestVariant = 0x80000, + TextBypassShaping = 0x100000 #if defined(QT3_SUPPORT) && !defined(Q_MOC_RUN) ,SingleLine = TextSingleLine, diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index 657229a..54e0aa3 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -5937,6 +5937,23 @@ void QPainter::drawText(const QPointF &p, const QString &str, int tf, int justif if (!d->engine || str.isEmpty() || pen().style() == Qt::NoPen) return; + if (tf & Qt::TextBypassShaping) { + // Skip harfbuzz complex shaping, shape using glyph advances only + int len = str.length(); + int numGlyphs = len; + QVarLengthGlyphLayoutArray glyphs(len); + QFontEngine *fontEngine = d->state->font.d->engineForScript(QUnicodeTables::Common); + if (!fontEngine->stringToCMap(str.data(), len, &glyphs, &numGlyphs, 0)) { + glyphs.resize(numGlyphs); + if (!fontEngine->stringToCMap(str.data(), len, &glyphs, &numGlyphs, 0)) + Q_ASSERT_X(false, Q_FUNC_INFO, "stringToCMap shouldn't fail twice"); + } + + QTextItemInt gf(glyphs, &d->state->font, fontEngine); + drawTextItem(p, gf); + return; + } + QStackTextEngine engine(str, d->state->font); engine.option.setTextDirection(d->state->layoutDirection); if (tf & (Qt::TextForceLeftToRight|Qt::TextForceRightToLeft)) { diff --git a/src/gui/text/qfontmetrics.cpp b/src/gui/text/qfontmetrics.cpp index 5163c94..d02e841 100644 --- a/src/gui/text/qfontmetrics.cpp +++ b/src/gui/text/qfontmetrics.cpp @@ -526,6 +526,14 @@ int QFontMetrics::rightBearing(QChar ch) const */ int QFontMetrics::width(const QString &text, int len) const { + return width(text, len, 0); +} + +/*! + \internal +*/ +int QFontMetrics::width(const QString &text, int len, int flags) const +{ int pos = text.indexOf(QLatin1Char('\x9c')); if (pos != -1) { len = (len < 0) ? pos : qMin(pos, len); @@ -535,6 +543,23 @@ int QFontMetrics::width(const QString &text, int len) const if (len == 0) return 0; + if (flags & Qt::TextBypassShaping) { + // Skip harfbuzz complex shaping, only use advances + int numGlyphs = len; + QVarLengthGlyphLayoutArray glyphs(numGlyphs); + QFontEngine *engine = d->engineForScript(QUnicodeTables::Common); + if (!engine->stringToCMap(text.data(), len, &glyphs, &numGlyphs, 0)) { + glyphs.resize(numGlyphs); + if (!engine->stringToCMap(text.data(), len, &glyphs, &numGlyphs, 0)) + Q_ASSERT_X(false, Q_FUNC_INFO, "stringToCMap shouldn't fail twice"); + } + + QFixed width; + for (int i = 0; i < numGlyphs; ++i) + width += glyphs.advances_x[i]; + return qRound(width); + } + QStackTextEngine layout(text, d.data()); layout.ignoreBidi = true; return qRound(layout.width(0, len)); diff --git a/src/gui/text/qfontmetrics.h b/src/gui/text/qfontmetrics.h index dca4b93..2518b54 100644 --- a/src/gui/text/qfontmetrics.h +++ b/src/gui/text/qfontmetrics.h @@ -89,6 +89,7 @@ public: int leftBearing(QChar) const; int rightBearing(QChar) const; int width(const QString &, int len = -1) const; + int width(const QString &, int len, int flags) const; int width(QChar) const; int charWidth(const QString &str, int pos) const; diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index 6359672..3486264 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -2648,6 +2648,12 @@ QTextItemInt::QTextItemInt(const QScriptItem &si, QFont *font, const QTextCharFo flags |= QTextItem::StrikeOut; } +QTextItemInt::QTextItemInt(const QGlyphLayout &g, QFont *font, QFontEngine *fe) + : flags(0), justified(false), underlineStyle(QTextCharFormat::NoUnderline), + num_chars(0), chars(0), logClusters(0), f(font), fontEngine(fe), glyphs(g) +{ +} + QTextItemInt QTextItemInt::midItem(QFontEngine *fontEngine, int firstGlyphIndex, int numGlyphs) const { QTextItemInt ti = *this; diff --git a/src/gui/text/qtextengine_p.h b/src/gui/text/qtextengine_p.h index d92148f..00b1392 100644 --- a/src/gui/text/qtextengine_p.h +++ b/src/gui/text/qtextengine_p.h @@ -311,6 +311,7 @@ public: logClusters(0), f(0), fontEngine(0) {} QTextItemInt(const QScriptItem &si, QFont *font, const QTextCharFormat &format = QTextCharFormat()); + QTextItemInt(const QGlyphLayout &g, QFont *font, QFontEngine *fe); /// copy the structure items, adjusting the glyphs arrays to the right subarrays. /// the width of the returned QTextItemInt is not adjusted, for speed reasons diff --git a/tests/auto/qfontmetrics/tst_qfontmetrics.cpp b/tests/auto/qfontmetrics/tst_qfontmetrics.cpp index 5d73764..81e064e 100644 --- a/tests/auto/qfontmetrics/tst_qfontmetrics.cpp +++ b/tests/auto/qfontmetrics/tst_qfontmetrics.cpp @@ -71,6 +71,7 @@ private slots: void elidedText(); void veryNarrowElidedText(); void averageCharWidth(); + void bypassShaping(); void elidedMultiLength(); void elidedMultiLengthF(); void bearingIncludedInBoundingRect(); @@ -219,6 +220,20 @@ void tst_QFontMetrics::averageCharWidth() QVERIFY(fmf.averageCharWidth() != 0); } +void tst_QFontMetrics::bypassShaping() +{ + QFont f; + QFontMetrics fm(f); + QString text = " A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z"; + int textWidth = fm.width(text, -1, Qt::TextBypassShaping); + QVERIFY(textWidth != 0); + int charsWidth = 0; + for (int i = 0; i < text.size(); ++i) + charsWidth += fm.width(text[i]); + // This assertion is needed in QtWebKit's WebCore::Font::offsetForPositionForSimpleText + QCOMPARE(textWidth, charsWidth); +} + template void elidedMultiLength_helper() { QString text1 = "Long Text 1\x9cShorter\x9csmall"; -- cgit v0.12 From 1fede5dccd56541835046035bb2a8d28d4781e0f Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Mon, 31 May 2010 19:51:15 +0200 Subject: Fix Typo --- src/declarative/graphicsitems/qdeclarativetextedit.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index 935b431..2651ee5 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -570,7 +570,7 @@ int QDeclarativeTextEdit::positionAt(int x, int y) const } /*! - \qmlmethod int TextEdit::moveCursorSeletion(int pos) + \qmlmethod int TextEdit::moveCursorSelection(int pos) Moves the cursor to \a position and updates the selection accordingly. (To only move the cursor, set the \l cursorPosition property.) -- cgit v0.12 From 6bd67cf30b1574a114d9852820fe0fb8d3d10c50 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Mon, 31 May 2010 20:04:44 +0200 Subject: Fix zoom bug in QML Web Browser demo Zooming out no longer zooms to smaller than the window size. --- demos/declarative/webbrowser/content/FlickableWebView.qml | 4 ++-- demos/declarative/webbrowser/webbrowser.qml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/demos/declarative/webbrowser/content/FlickableWebView.qml b/demos/declarative/webbrowser/content/FlickableWebView.qml index 34e8fff..3a1b515 100644 --- a/demos/declarative/webbrowser/content/FlickableWebView.qml +++ b/demos/declarative/webbrowser/content/FlickableWebView.qml @@ -96,8 +96,8 @@ Flickable { function doZoom(zoom,centerX,centerY) { if (centerX) { - var sc = zoom/contentsScale; - scaleAnim.to = zoom; + var sc = zoom*contentsScale; + scaleAnim.to = sc; flickVX.from = flickable.contentX flickVX.to = Math.max(0,Math.min(centerX-flickable.width/2,webView.width*sc-flickable.width)) finalX.value = flickVX.to diff --git a/demos/declarative/webbrowser/webbrowser.qml b/demos/declarative/webbrowser/webbrowser.qml index 36e03bf..a923c92 100644 --- a/demos/declarative/webbrowser/webbrowser.qml +++ b/demos/declarative/webbrowser/webbrowser.qml @@ -47,7 +47,7 @@ import "content" Rectangle { id: webBrowser - property string urlString : "http://qt.nokia.com/" + property string urlString : "http://www.nokia.com/" width: 800; height: 600 color: "#343434" -- cgit v0.12 From fe77b0e466cf1a19663285d240a634e674e022f1 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Mon, 31 May 2010 20:42:41 +0200 Subject: Fix some bugs in the QML Web Browser buttons Now with fewer warnings! Also, the stop button works. --- demos/declarative/webbrowser/content/Button.qml | 2 +- demos/declarative/webbrowser/content/FlickableWebView.qml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/demos/declarative/webbrowser/content/Button.qml b/demos/declarative/webbrowser/content/Button.qml index 976502c..4642cc7 100644 --- a/demos/declarative/webbrowser/content/Button.qml +++ b/demos/declarative/webbrowser/content/Button.qml @@ -49,7 +49,7 @@ Item { Image { id: icon; anchors.centerIn: parent - opacity: action.enabled ? 1.0 : 0.4 + opacity: if(action != undefined) {action.enabled ? 1.0 : 0.4} else 0 } MouseArea { diff --git a/demos/declarative/webbrowser/content/FlickableWebView.qml b/demos/declarative/webbrowser/content/FlickableWebView.qml index 3a1b515..62da2ea 100644 --- a/demos/declarative/webbrowser/content/FlickableWebView.qml +++ b/demos/declarative/webbrowser/content/FlickableWebView.qml @@ -48,6 +48,7 @@ Flickable { property alias progress: webView.progress property alias url: webView.url property alias back: webView.back + property alias stop: webView.stop property alias reload: webView.reload property alias forward: webView.forward -- cgit v0.12 From 3842b53597526bcfc313f208ace808f3f20951ed Mon Sep 17 00:00:00 2001 From: Yann Bodson Date: Tue, 1 Jun 2010 10:17:02 +1000 Subject: Fix doc --- doc/src/snippets/declarative/rect-border-width.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/snippets/declarative/rect-border-width.qml b/doc/src/snippets/declarative/rect-border-width.qml index 27a241d..1c42226 100644 --- a/doc/src/snippets/declarative/rect-border-width.qml +++ b/doc/src/snippets/declarative/rect-border-width.qml @@ -6,7 +6,7 @@ Rectangle { color: "yellow" Rectangle { - anchor.fill: parent + anchors.fill: parent anchors.margins: 10 clip: true -- cgit v0.12 From bc1fb594d24b54b9c83994817348b0163ef1a9c5 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Tue, 1 Jun 2010 10:31:36 +1000 Subject: Fix example code and image --- doc/src/declarative/pics/repeater-modeldata.png | Bin 2600 -> 3394 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/src/declarative/pics/repeater-modeldata.png b/doc/src/declarative/pics/repeater-modeldata.png index 817f35b..6d8df0d 100644 Binary files a/doc/src/declarative/pics/repeater-modeldata.png and b/doc/src/declarative/pics/repeater-modeldata.png differ -- cgit v0.12 From ff93c3562f2b73abb69b1698f71fc9538ca5d999 Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Tue, 1 Jun 2010 11:36:29 +1000 Subject: Fix positionAt when autoScroll is use. Task-number: QTBUG-11054 --- src/declarative/graphicsitems/qdeclarativetextinput.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index 25a2b49..3a1acc2 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -852,7 +852,7 @@ QRectF QDeclarativeTextInput::positionToRectangle(int x) const int QDeclarativeTextInput::positionAt(int x) const { Q_D(const QDeclarativeTextInput); - return d->control->xToPos(x - d->hscroll); + return d->control->xToPos(x + d->hscroll); } void QDeclarativeTextInputPrivate::focusChanged(bool hasFocus) -- cgit v0.12 From 5f6b50f99a6457c208c7f186db45a2dba690bace Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Tue, 1 Jun 2010 12:39:15 +1000 Subject: Test positionAt. Task-number: QTBUG-11127 Task-number: QTBUG-11054 --- .../tst_qdeclarativetextinput.cpp | 43 ++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index 54bb9c1..c943c89 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -63,6 +63,8 @@ private slots: void color(); void selection(); + void positionAt(); + void maxLength(); void masks(); void validators(); @@ -361,6 +363,47 @@ void tst_qdeclarativetextinput::selection() delete textinputObject; } +void tst_qdeclarativetextinput::positionAt() +{ + QDeclarativeView *canvas = createView(SRCDIR "/data/positionAt.qml"); + QVERIFY(canvas->rootObject() != 0); + canvas->show(); + canvas->setFocus(); + QApplication::setActiveWindow(canvas); + QTest::qWaitForWindowShown(canvas); + + QDeclarativeTextInput *textinputObject = qobject_cast(canvas->rootObject()); + QVERIFY(textinputObject != 0); + + // Check autoscrolled... + QFontMetrics fm(textinputObject->font()); + + int pos = textinputObject->positionAt(textinputObject->width()/2); + int diff = abs(fm.width(textinputObject->text()) - (fm.width(textinputObject->text().left(pos))+textinputObject->width()/2)); + + // some tollerance for different fonts. +#ifdef Q_OS_LINUX + QVERIFY(diff < 2); +#else + QVERIFY(diff < 5); +#endif + + // Check without autoscroll... + QEXPECT_FAIL("", "QTBUG-11127", Abort); + textinputObject->setAutoScroll(false); + pos = textinputObject->positionAt(textinputObject->width()/2); + diff = abs(fm.width(textinputObject->text().left(pos))-textinputObject->width()/2); + + // some tollerance for different fonts. +#ifdef Q_OS_LINUX + QVERIFY(diff < 2); +#else + QVERIFY(diff < 5); +#endif + + delete canvas; +} + void tst_qdeclarativetextinput::maxLength() { //QString componentStr = "import Qt 4.7\nTextInput { maximumLength: 10; }"; -- cgit v0.12 From 91cb226780d05f0f7d8fd1875121427ade52c1a8 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Tue, 1 Jun 2010 13:06:05 +1000 Subject: Avoid refilling view during model change. The view position is reset to 0 after clear()ing, but this results in refill() being called, effectively undoing the clear(). Fix is to make the model invalid before resetting position. Task-number: QTBUG-11105 --- .../graphicsitems/qdeclarativelistview.cpp | 6 ++- .../tst_qdeclarativelistview.cpp | 48 ++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 78c56d6..01928a1 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -1466,13 +1466,15 @@ void QDeclarativeListView::setModel(const QVariant &model) disconnect(d->model, SIGNAL(destroyingItem(QDeclarativeItem*)), this, SLOT(destroyingItem(QDeclarativeItem*))); } d->clear(); + QDeclarativeVisualModel *oldModel = d->model; + d->model = 0; d->setPosition(0); d->modelVariant = model; QObject *object = qvariant_cast(model); QDeclarativeVisualModel *vim = 0; if (object && (vim = qobject_cast(object))) { if (d->ownModel) { - delete d->model; + delete oldModel; d->ownModel = false; } d->model = vim; @@ -1480,6 +1482,8 @@ void QDeclarativeListView::setModel(const QVariant &model) if (!d->ownModel) { d->model = new QDeclarativeVisualDataModel(qmlContext(this), this); d->ownModel = true; + } else { + d->model = oldModel; } if (QDeclarativeVisualDataModel *dataModel = qobject_cast(d->model)) dataModel->setModel(model); diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp index 203760e..2aef9bb 100644 --- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp +++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp @@ -91,6 +91,7 @@ private slots: void modelChanges(); void QTBUG_9791(); void manualHighlight(); + void QTBUG_11105(); private: template void items(); @@ -1493,6 +1494,53 @@ void tst_QDeclarativeListView::manualHighlight() QTRY_COMPARE(listview->highlightItem()->y(), listview->currentItem()->y()); } +void tst_QDeclarativeListView::QTBUG_11105() +{ + QDeclarativeView *canvas = createView(); + + TestModel model; + for (int i = 0; i < 30; 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(canvas->rootObject(), "list"); + QTRY_VERIFY(listview != 0); + + QDeclarativeItem *viewport = listview->viewport(); + QTRY_VERIFY(viewport != 0); + + // Confirm items positioned correctly + int itemCount = findItems(viewport, "wrapper").count(); + for (int i = 0; i < model.count() && i < itemCount; ++i) { + QDeclarativeItem *item = findItem(viewport, "wrapper", i); + if (!item) qWarning() << "Item" << i << "not found"; + QTRY_VERIFY(item); + QTRY_VERIFY(item->y() == i*20); + } + + listview->positionViewAtIndex(20, QDeclarativeListView::Beginning); + QCOMPARE(listview->contentY(), 280.); + + TestModel model2; + for (int i = 0; i < 5; i++) + model2.addItem("Item" + QString::number(i), ""); + + ctxt->setContextProperty("testModel", &model2); + + itemCount = findItems(viewport, "wrapper").count(); + QCOMPARE(itemCount, 5); + + delete canvas; +} + void tst_QDeclarativeListView::qListModelInterface_items() { items(); -- cgit v0.12 From 785ccda71652de47a161ff31c1a7543ef3cb4953 Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Tue, 1 Jun 2010 13:16:28 +1000 Subject: License. Pass headers test --- doc/src/snippets/declarative/rect-border-width.qml | 41 ++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/doc/src/snippets/declarative/rect-border-width.qml b/doc/src/snippets/declarative/rect-border-width.qml index 1c42226..73ce9f6 100644 --- a/doc/src/snippets/declarative/rect-border-width.qml +++ b/doc/src/snippets/declarative/rect-border-width.qml @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 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$ +** +****************************************************************************/ + import Qt 4.7 //![0] -- cgit v0.12 From 08d09e02109f18d2a22fa48f331cd7bcfacc154f Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Tue, 1 Jun 2010 13:24:21 +1000 Subject: Ensure text color set by S60 input method works for QML Items and QGraphicsWidgets. For QGraphicsWidgets use palette as per QWidget. For QML items leave the color unset so that the default pen is used. Task-number: QTBUG-10997 Reviewed-by: Sami Merila --- src/gui/inputmethod/qcoefepinputcontext_s60.cpp | 41 ++++++++++++++++++++----- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp index d081cfd..4cdc4ad 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp +++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp @@ -44,6 +44,9 @@ #include "qcoefepinputcontext_p.h" #include #include +#include +#include +#include #include #include @@ -320,12 +323,14 @@ TCoeInputCapabilities QCoeFepInputContext::inputCapabilities() return TCoeInputCapabilities(m_textCapabilities, this, 0); } -static QTextCharFormat qt_TCharFormat2QTextCharFormat(const TCharFormat &cFormat) +static QTextCharFormat qt_TCharFormat2QTextCharFormat(const TCharFormat &cFormat, bool validStyleColor) { QTextCharFormat qFormat; - QBrush foreground(QColor(cFormat.iFontPresentation.iTextColor.Internal())); - qFormat.setForeground(foreground); + if (validStyleColor) { + QBrush foreground(QColor(cFormat.iFontPresentation.iTextColor.Internal())); + qFormat.setForeground(foreground); + } qFormat.setFontStrikeOut(cFormat.iFontPresentation.iStrikethrough == EStrikethroughOn); qFormat.setFontUnderline(cFormat.iFontPresentation.iUnderline == EUnderlineOn); @@ -484,10 +489,30 @@ void QCoeFepInputContext::applyHints(Qt::InputMethodHints hints) void QCoeFepInputContext::applyFormat(QList *attributes) { TCharFormat cFormat; - const QColor styleTextColor = focusWidget() ? focusWidget()->palette().text().color() : - QApplication::palette("QLineEdit").text().color(); - const TLogicalRgb fontColor(TRgb(styleTextColor.red(), styleTextColor.green(), styleTextColor.blue(), styleTextColor.alpha())); - cFormat.iFontPresentation.iTextColor = fontColor; + QColor styleTextColor; + if (QWidget *focused = focusWidget()) { + QGraphicsView *gv = qobject_cast(focused); + if (!gv) // could be either the QGV or its viewport that has focus + gv = qobject_cast(focused->parentWidget()); + if (gv) { + if (QGraphicsScene *scene = gv->scene()) { + if (QGraphicsItem *focusItem = scene->focusItem()) { + if (focusItem->isWidget()) { + styleTextColor = static_cast(focusItem)->palette().text().color(); + } + } + } + } else { + styleTextColor = focused->palette().text().color(); + } + } else { + styleTextColor = QApplication::palette("QLineEdit").text().color(); + } + + if (styleTextColor.isValid()) { + const TLogicalRgb fontColor(TRgb(styleTextColor.red(), styleTextColor.green(), styleTextColor.blue(), styleTextColor.alpha())); + cFormat.iFontPresentation.iTextColor = fontColor; + } TInt numChars = 0; TInt charPos = 0; @@ -501,7 +526,7 @@ void QCoeFepInputContext::applyFormat(QList *attri attributes->append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, charPos, numChars, - QVariant(qt_TCharFormat2QTextCharFormat(cFormat)))); + QVariant(qt_TCharFormat2QTextCharFormat(cFormat, styleTextColor.isValid())))); charPos += numChars; if (charPos >= m_preeditString.size()) { break; -- cgit v0.12 From 450508cf9a19473644de20e64bb1098050806182 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy Date: Tue, 1 Jun 2010 15:03:15 +1000 Subject: Fix build failure on Symbian 3.1. --- src/plugins/bearer/symbian/symbianengine.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/bearer/symbian/symbianengine.cpp b/src/plugins/bearer/symbian/symbianengine.cpp index 8c26cf0..ab1ba28 100644 --- a/src/plugins/bearer/symbian/symbianengine.cpp +++ b/src/plugins/bearer/symbian/symbianengine.cpp @@ -389,9 +389,9 @@ void SymbianEngine::updateConfigurationsL() QNetworkConfigurationPrivatePointer ptr(cpPriv); accessPointConfigurations.insert(ident, ptr); - locker.unlock(); + mutex.unlock(); emit configurationAdded(ptr); - locker.relock(); + mutex.lock(); } else { delete cpPriv; } -- cgit v0.12 From 3eafb8d13a51d72af053e19fa4bc66b83f81a923 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Tue, 1 Jun 2010 15:51:02 +1000 Subject: Optimization for sci file loading. Reviewed-by: Martin Jones --- src/declarative/graphicsitems/qdeclarativescalegrid.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativescalegrid.cpp b/src/declarative/graphicsitems/qdeclarativescalegrid.cpp index fe89190..a053aa0 100644 --- a/src/declarative/graphicsitems/qdeclarativescalegrid.cpp +++ b/src/declarative/graphicsitems/qdeclarativescalegrid.cpp @@ -130,8 +130,9 @@ QDeclarativeGridScaledImage::QDeclarativeGridScaledImage(QIODevice *data) int b = -1; QString imgFile; - while(!data->atEnd()) { - QString line = QString::fromUtf8(data->readLine().trimmed()); + QByteArray raw; + while(raw = data->readLine(), !raw.isEmpty()) { + QString line = QString::fromUtf8(raw.trimmed()); if (line.isEmpty() || line.startsWith(QLatin1Char('#'))) continue; -- cgit v0.12 From 0400d1474e65a5fd849c1610bdf0717af295f704 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Tue, 1 Jun 2010 15:51:40 +1000 Subject: Documentation. --- src/declarative/util/qdeclarativepropertychanges.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/declarative/util/qdeclarativepropertychanges.cpp b/src/declarative/util/qdeclarativepropertychanges.cpp index d99de7a..08f4750 100644 --- a/src/declarative/util/qdeclarativepropertychanges.cpp +++ b/src/declarative/util/qdeclarativepropertychanges.cpp @@ -62,7 +62,7 @@ QT_BEGIN_NAMESPACE /*! \qmlclass PropertyChanges QDeclarativePropertyChanges \since 4.7 - \brief The PropertyChanges element describes new property values for a state. + \brief The PropertyChanges element describes new property bindings or values for a state. PropertyChanges provides a state change that modifies the properties of an item. @@ -89,6 +89,21 @@ QT_BEGIN_NAMESPACE MouseArea { anchors.fill: parent; onClicked: myText.state = 'myState' } } \endqml + + By default, PropertyChanges will establish new bindings where appropriate. + For example, the following creates a new binding for myItem's height property. + + \qml + PropertyChanges { + target: myItem + height: parent.height + } + \endqml + + If you don't want a binding to be established (and instead just want to assign + the value of the binding at the time the state is entered), + you should set the PropertyChange's \l{PropertyChanges::explicit}{explicit} + property to \c true. State-specific script for signal handlers can also be specified: -- cgit v0.12 From 15f331834833e34c1faf437b6fe3d3ef58691651 Mon Sep 17 00:00:00 2001 From: Martin Smith Date: Tue, 1 Jun 2010 08:48:06 +0200 Subject: doc: Added DITA XML generator --- tools/qdoc3/ditaxmlgenerator.cpp | 4773 ++++++++++++++++++++++++++++++++++++++ tools/qdoc3/ditaxmlgenerator.h | 358 +++ 2 files changed, 5131 insertions(+) create mode 100644 tools/qdoc3/ditaxmlgenerator.cpp create mode 100644 tools/qdoc3/ditaxmlgenerator.h diff --git a/tools/qdoc3/ditaxmlgenerator.cpp b/tools/qdoc3/ditaxmlgenerator.cpp new file mode 100644 index 0000000..a64e8e7 --- /dev/null +++ b/tools/qdoc3/ditaxmlgenerator.cpp @@ -0,0 +1,4773 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the tools applications 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$ +** +****************************************************************************/ + +/* + ditaxmlgenerator.cpp +*/ + +#include "codemarker.h" +#include "codeparser.h" +#include "helpprojectwriter.h" +#include "ditaxmlgenerator.h" +#include "node.h" +#include "separator.h" +#include "tree.h" +#include + +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +#define COMMAND_VERSION Doc::alias("version") +int DitaXmlGenerator::id = 0; + +QString DitaXmlGenerator::sinceTitles[] = + { + " New Namespaces", + " New Classes", + " New Member Functions", + " New Functions in Namespaces", + " New Global Functions", + " New Macros", + " New Enum Types", + " New Typedefs", + " New Properties", + " New Variables", + " New QML Elements", + " New Qml Properties", + " New Qml Signals", + " New Qml Methods", + "" + }; + +static bool showBrokenLinks = false; + +static void addLink(const QString &linkTarget, + const QStringRef &nestedStuff, + QString *res) +{ + if (!linkTarget.isEmpty()) { + *res += ""; + *res += nestedStuff; + *res += ""; + } + else { + *res += nestedStuff; + } +} + + +DitaXmlGenerator::DitaXmlGenerator() + : helpProjectWriter(0), + inLink(false), + inContents(false), + inSectionHeading(false), + inTableHeader(false), + numTableRows(0), + threeColumnEnumValueTable(true), + offlineDocs(true), + funcLeftParen("\\S(\\()"), + myTree(0), + slow(false), + obsoleteLinks(false) +{ +} + +DitaXmlGenerator::~DitaXmlGenerator() +{ + if (helpProjectWriter) + delete helpProjectWriter; +} + +void DitaXmlGenerator::initializeGenerator(const Config &config) +{ + static const struct { + const char *key; + const char *left; + const char *right; + } defaults[] = { + { ATOM_FORMATTING_BOLD, "", "" }, + { ATOM_FORMATTING_INDEX, "" }, + { ATOM_FORMATTING_ITALIC, "", "" }, + { ATOM_FORMATTING_PARAMETER, "", "" }, + { ATOM_FORMATTING_SUBSCRIPT, "", "" }, + { ATOM_FORMATTING_SUPERSCRIPT, "", "" }, + { ATOM_FORMATTING_TELETYPE, "", "" }, + { ATOM_FORMATTING_UNDERLINE, "", "" }, + { 0, 0, 0 } + }; + + Generator::initializeGenerator(config); + obsoleteLinks = config.getBool(QLatin1String(CONFIG_OBSOLETELINKS)); + setImageFileExtensions(QStringList() << "png" << "jpg" << "jpeg" << "gif"); + int i = 0; + while (defaults[i].key) { + formattingLeftMap().insert(defaults[i].key, defaults[i].left); + formattingRightMap().insert(defaults[i].key, defaults[i].right); + i++; + } + + style = config.getString(DitaXmlGenerator::format() + + Config::dot + + DITAXMLGENERATOR_STYLE); + postHeader = config.getString(DitaXmlGenerator::format() + + Config::dot + + DITAXMLGENERATOR_POSTHEADER); + postPostHeader = config.getString(DitaXmlGenerator::format() + + Config::dot + + DITAXMLGENERATOR_POSTPOSTHEADER); + footer = config.getString(DitaXmlGenerator::format() + + Config::dot + + DITAXMLGENERATOR_FOOTER); + address = config.getString(DitaXmlGenerator::format() + + Config::dot + + DITAXMLGENERATOR_ADDRESS); + pleaseGenerateMacRef = config.getBool(DitaXmlGenerator::format() + + Config::dot + + DITAXMLGENERATOR_GENERATEMACREFS); + + project = config.getString(CONFIG_PROJECT); + offlineDocs = !config.getBool(CONFIG_ONLINE); + projectDescription = config.getString(CONFIG_DESCRIPTION); + if (projectDescription.isEmpty() && !project.isEmpty()) + projectDescription = project + " Reference Documentation"; + + projectUrl = config.getString(CONFIG_URL); + + outputEncoding = config.getString(CONFIG_OUTPUTENCODING); + if (outputEncoding.isEmpty()) + outputEncoding = QLatin1String("ISO-8859-1"); + outputCodec = QTextCodec::codecForName(outputEncoding.toLocal8Bit()); + + naturalLanguage = config.getString(CONFIG_NATURALLANGUAGE); + if (naturalLanguage.isEmpty()) + naturalLanguage = QLatin1String("en"); + + QSet editionNames = config.subVars(CONFIG_EDITION); + QSet::ConstIterator edition = editionNames.begin(); + while (edition != editionNames.end()) { + QString editionName = *edition; + QStringList editionModules = config.getStringList(CONFIG_EDITION + + Config::dot + + editionName + + Config::dot + + "modules"); + QStringList editionGroups = config.getStringList(CONFIG_EDITION + + Config::dot + + editionName + + Config::dot + + "groups"); + + if (!editionModules.isEmpty()) + editionModuleMap[editionName] = editionModules; + if (!editionGroups.isEmpty()) + editionGroupMap[editionName] = editionGroups; + + ++edition; + } + + slow = config.getBool(CONFIG_SLOW); + + stylesheets = config.getStringList(DitaXmlGenerator::format() + + Config::dot + + DITAXMLGENERATOR_STYLESHEETS); + customHeadElements = config.getStringList(DitaXmlGenerator::format() + + Config::dot + + DITAXMLGENERATOR_CUSTOMHEADELEMENTS); + codeIndent = config.getInt(CONFIG_CODEINDENT); + + helpProjectWriter = new HelpProjectWriter(config, + project.toLower() + + ".qhp"); +} + +void DitaXmlGenerator::terminateGenerator() +{ + Generator::terminateGenerator(); +} + +QString DitaXmlGenerator::format() +{ + return "DITAXML"; +} + +/*! + This is where the html files and dcf files are written. + \note The html file generation is done in the base class, + PageGenerator::generateTree(). + */ +void DitaXmlGenerator::generateTree(const Tree *tree, CodeMarker *marker) +{ +#if 0 + // Copy the stylesheets from the directory containing the qdocconf file. + // ### This should be changed to use a special directory in doc/src. + QStringList::ConstIterator styleIter = stylesheets.begin(); + QDir configPath = QDir::current(); + while (styleIter != stylesheets.end()) { + QString filePath = configPath.absoluteFilePath(*styleIter); + Config::copyFile(Location(), filePath, filePath, outputDir()); + ++styleIter; + } +#endif + myTree = tree; + nonCompatClasses.clear(); + mainClasses.clear(); + compatClasses.clear(); + obsoleteClasses.clear(); + moduleClassMap.clear(); + moduleNamespaceMap.clear(); + funcIndex.clear(); + legaleseTexts.clear(); + serviceClasses.clear(); + findAllClasses(tree->root()); + findAllFunctions(tree->root()); + findAllLegaleseTexts(tree->root()); + findAllNamespaces(tree->root()); +#ifdef ZZZ_QDOC_QML + findAllQmlClasses(tree->root()); +#endif + findAllSince(tree->root()); + + PageGenerator::generateTree(tree, marker); + + dcfClassesRoot.ref = "classes.html"; + dcfClassesRoot.title = "Classes"; + qSort(dcfClassesRoot.subsections); + + dcfOverviewsRoot.ref = "overviews.html"; + dcfOverviewsRoot.title = "Overviews"; + qSort(dcfOverviewsRoot.subsections); + + dcfExamplesRoot.ref = "examples.html"; + dcfExamplesRoot.title = "Tutorial & Examples"; + qSort(dcfExamplesRoot.subsections); + + DcfSection qtRoot; + appendDcfSubSection(&qtRoot, dcfClassesRoot); + appendDcfSubSection(&qtRoot, dcfOverviewsRoot); + appendDcfSubSection(&qtRoot, dcfExamplesRoot); + + generateDcf(project.toLower().simplified().replace(" ", "-"), + "index.html", + projectDescription, qtRoot); + generateDcf("designer", + "designer-manual.html", + "Qt Designer Manual", + dcfDesignerRoot); + generateDcf("linguist", + "linguist-manual.html", + "Qt Linguist Manual", + dcfLinguistRoot); + generateDcf("assistant", + "assistant-manual.html", + "Qt Assistant Manual", + dcfAssistantRoot); + generateDcf("qmake", + "qmake-manual.html", + "qmake Manual", + dcfQmakeRoot); + + QString fileBase = project.toLower().simplified().replace(" ", "-"); + generateIndex(fileBase, projectUrl, projectDescription); + generatePageIndex(outputDir() + "/" + fileBase + ".pageindex", marker); + + helpProjectWriter->generate(myTree); +} + +void DitaXmlGenerator::startText(const Node * /* relative */, + CodeMarker * /* marker */) +{ + inLink = false; + inContents = false; + inSectionHeading = false; + inTableHeader = false; + numTableRows = 0; + threeColumnEnumValueTable = true; + link.clear(); + sectionNumber.clear(); +} + +/*! + Generate html from an instance of Atom. + */ +int DitaXmlGenerator::generateAtom(const Atom *atom, + const Node *relative, + CodeMarker *marker) +{ + int skipAhead = 0; + static bool in_para = false; + + switch (atom->type()) { + case Atom::AbstractLeft: + break; + case Atom::AbstractRight: + break; + case Atom::AutoLink: + if (!inLink && !inContents && !inSectionHeading) { + const Node *node = 0; + QString link = getLink(atom, relative, marker, &node); + if (!link.isEmpty()) { + beginLink(link, node, relative, marker); + generateLink(atom, relative, marker); + endLink(); + } + else { + out() << protectEnc(atom->string()); + } + } + else { + out() << protectEnc(atom->string()); + } + break; + case Atom::BaseName: + break; + case Atom::BriefLeft: + if (relative->type() == Node::Fake) { + skipAhead = skipAtoms(atom, Atom::BriefRight); + break; + } + + out() << "

"; + if (relative->type() == Node::Property || + relative->type() == Node::Variable) { + QString str; + atom = atom->next(); + while (atom != 0 && atom->type() != Atom::BriefRight) { + if (atom->type() == Atom::String || + atom->type() == Atom::AutoLink) + str += atom->string(); + skipAhead++; + atom = atom->next(); + } + str[0] = str[0].toLower(); + if (str.right(1) == ".") + str.truncate(str.length() - 1); + out() << "This "; + if (relative->type() == Node::Property) + out() << "property"; + else + out() << "variable"; + QStringList words = str.split(" "); + if (!(words.first() == "contains" || words.first() == "specifies" + || words.first() == "describes" || words.first() == "defines" + || words.first() == "holds" || words.first() == "determines")) + out() << " holds "; + else + out() << " "; + out() << str << "."; + } + break; + case Atom::BriefRight: + if (relative->type() != Node::Fake) + out() << "

\n"; + break; + case Atom::C: + out() << formattingLeftMap()[ATOM_FORMATTING_TELETYPE]; + if (inLink) { + out() << protectEnc(plainCode(atom->string())); + } + else { + out() << highlightedCode(atom->string(), marker, relative); + } + out() << formattingRightMap()[ATOM_FORMATTING_TELETYPE]; + break; + case Atom::Code: + out() << "
"
+              << trimmedTrailing(highlightedCode(indent(codeIndent,atom->string()),
+                                                 marker,relative))
+              << "
\n"; + break; +#ifdef QDOC_QML + case Atom::Qml: + out() << "
"
+              << trimmedTrailing(highlightedCode(indent(codeIndent,atom->string()),
+                                                 marker,relative))
+              << "
\n"; + break; +#endif + case Atom::CodeNew: + out() << "

you can rewrite it as

\n" + << "
"
+              << trimmedTrailing(highlightedCode(indent(codeIndent,atom->string()),
+                                                 marker,relative))
+              << "
\n"; + break; + case Atom::CodeOld: + out() << "

For example, if you have code like

\n"; + // fallthrough + case Atom::CodeBad: + out() << "
"
+              << trimmedTrailing(protectEnc(plainCode(indent(codeIndent,atom->string()))))
+              << "
\n"; + break; + case Atom::FootnoteLeft: + // ### For now + if (in_para) { + out() << "

\n"; + in_para = false; + } + out() << ""; + break; + case Atom::FormatElse: + case Atom::FormatEndif: + case Atom::FormatIf: + break; + case Atom::FormattingLeft: + out() << formattingLeftMap()[atom->string()]; + if (atom->string() == ATOM_FORMATTING_PARAMETER) { + if (atom->next() != 0 && atom->next()->type() == Atom::String) { + QRegExp subscriptRegExp("([a-z]+)_([0-9n])"); + if (subscriptRegExp.exactMatch(atom->next()->string())) { + out() << subscriptRegExp.cap(1) << "" + << subscriptRegExp.cap(2) << ""; + skipAhead = 1; + } + } + } + break; + case Atom::FormattingRight: + if (atom->string() == ATOM_FORMATTING_LINK) { + endLink(); + } + else { + out() << formattingRightMap()[atom->string()]; + } + break; + case Atom::AnnotatedList: + { + QList values = myTree->groups().values(atom->string()); + NodeMap nodeMap; + for (int i = 0; i < values.size(); ++i) { + const Node* n = values.at(i); + if ((n->status() != Node::Internal) && (n->access() != Node::Private)) { + nodeMap.insert(n->nameForLists(),n); + } + } + generateAnnotatedList(relative, marker, nodeMap); + } + break; + case Atom::GeneratedList: + if (atom->string() == "annotatedclasses") { + generateAnnotatedList(relative, marker, nonCompatClasses); + } + else if (atom->string() == "classes") { + generateCompactList(relative, marker, nonCompatClasses, true); + } + else if (atom->string().contains("classesbymodule")) { + QString arg = atom->string().trimmed(); + QString moduleName = atom->string().mid(atom->string().indexOf( + "classesbymodule") + 15).trimmed(); + if (moduleClassMap.contains(moduleName)) + generateAnnotatedList(relative, marker, moduleClassMap[moduleName]); + } + else if (atom->string().contains("classesbyedition")) { + + QString arg = atom->string().trimmed(); + QString editionName = atom->string().mid(atom->string().indexOf( + "classesbyedition") + 16).trimmed(); + + if (editionModuleMap.contains(editionName)) { + + // Add all classes in the modules listed for that edition. + NodeMap editionClasses; + foreach (const QString &moduleName, editionModuleMap[editionName]) { + if (moduleClassMap.contains(moduleName)) + editionClasses.unite(moduleClassMap[moduleName]); + } + + // Add additional groups and remove groups of classes that + // should be excluded from the edition. + + QMultiMap groups = myTree->groups(); + foreach (const QString &groupName, editionGroupMap[editionName]) { + QList groupClasses; + if (groupName.startsWith("-")) { + groupClasses = groups.values(groupName.mid(1)); + foreach (const Node *node, groupClasses) + editionClasses.remove(node->name()); + } + else { + groupClasses = groups.values(groupName); + foreach (const Node *node, groupClasses) + editionClasses.insert(node->name(), node); + } + } + generateAnnotatedList(relative, marker, editionClasses); + } + } + else if (atom->string() == "classhierarchy") { + generateClassHierarchy(relative, marker, nonCompatClasses); + } + else if (atom->string() == "compatclasses") { + generateCompactList(relative, marker, compatClasses, false); + } + else if (atom->string() == "obsoleteclasses") { + generateCompactList(relative, marker, obsoleteClasses, false); + } + else if (atom->string() == "functionindex") { + generateFunctionIndex(relative, marker); + } + else if (atom->string() == "legalese") { + generateLegaleseList(relative, marker); + } + else if (atom->string() == "mainclasses") { + generateCompactList(relative, marker, mainClasses, true); + } + else if (atom->string() == "services") { + generateCompactList(relative, marker, serviceClasses, false); + } + else if (atom->string() == "overviews") { + generateOverviewList(relative, marker); + } + else if (atom->string() == "namespaces") { + generateAnnotatedList(relative, marker, namespaceIndex); + } + else if (atom->string() == "related") { + const FakeNode *fake = static_cast(relative); + if (fake && !fake->groupMembers().isEmpty()) { + NodeMap groupMembersMap; + foreach (const Node *node, fake->groupMembers()) { + if (node->type() == Node::Fake) + groupMembersMap[fullName(node, relative, marker)] = node; + } + generateAnnotatedList(fake, marker, groupMembersMap); + } + } + else if (atom->string() == "relatedinline") { + const FakeNode *fake = static_cast(relative); + if (fake && !fake->groupMembers().isEmpty()) { + // Reverse the list into the original scan order. + // Should be sorted. But on what? It may not be a + // regular class or page definition. + QList list; + foreach (const Node *node, fake->groupMembers()) + list.prepend(node); + foreach (const Node *node, list) + generateBody(node, marker); + } + } + break; + case Atom::SinceList: + { + NewSinceMaps::const_iterator nsmap; + nsmap = newSinceMaps.find(atom->string()); + NewClassMaps::const_iterator ncmap; + ncmap = newClassMaps.find(atom->string()); + NewClassMaps::const_iterator nqcmap; + nqcmap = newQmlClassMaps.find(atom->string()); + if ((nsmap != newSinceMaps.constEnd()) && !nsmap.value().isEmpty()) { + QList
sections; + QList
::ConstIterator s; + for (int i=0; itype()) { + case Node::Fake: + if (node->subType() == Node::QmlClass) { + sections[QmlClass].appendMember((Node*)node); + } + break; + case Node::Namespace: + sections[Namespace].appendMember((Node*)node); + break; + case Node::Class: + sections[Class].appendMember((Node*)node); + break; + case Node::Enum: + sections[Enum].appendMember((Node*)node); + break; + case Node::Typedef: + sections[Typedef].appendMember((Node*)node); + break; + case Node::Function: { + const FunctionNode* fn = static_cast(node); + if (fn->isMacro()) + sections[Macro].appendMember((Node*)node); + else { + Node* p = fn->parent(); + if (p) { + if (p->type() == Node::Class) + sections[MemberFunction].appendMember((Node*)node); + else if (p->type() == Node::Namespace) { + if (p->name().isEmpty()) + sections[GlobalFunction].appendMember((Node*)node); + else + sections[NamespaceFunction].appendMember((Node*)node); + } + else + sections[GlobalFunction].appendMember((Node*)node); + } + else + sections[GlobalFunction].appendMember((Node*)node); + } + break; + } + case Node::Property: + sections[Property].appendMember((Node*)node); + break; + case Node::Variable: + sections[Variable].appendMember((Node*)node); + break; + case Node::QmlProperty: + sections[QmlProperty].appendMember((Node*)node); + break; + case Node::QmlSignal: + sections[QmlSignal].appendMember((Node*)node); + break; + case Node::QmlMethod: + sections[QmlMethod].appendMember((Node*)node); + break; + default: + break; + } + ++n; + } + + /* + First generate the table of contents. + */ + out() << "
    \n"; + s = sections.constBegin(); + while (s != sections.constEnd()) { + if (!(*s).members.isEmpty()) { + + out() << "
  • " + << "" + << (*s).name + << "
  • \n"; + } + ++s; + } + out() << "
\n"; + + int idx = 0; + s = sections.constBegin(); + while (s != sections.constEnd()) { + if (!(*s).members.isEmpty()) { + out() << "\n"; + out() << "

" << protectEnc((*s).name) << "

\n"; + if (idx == Class) + generateCompactList(0, marker, ncmap.value(), false, QString("Q")); + else if (idx == QmlClass) + generateCompactList(0, marker, nqcmap.value(), false, QString("Q")); + else if (idx == MemberFunction) { + ParentMaps parentmaps; + ParentMaps::iterator pmap; + NodeList::const_iterator i = s->members.constBegin(); + while (i != s->members.constEnd()) { + Node* p = (*i)->parent(); + pmap = parentmaps.find(p); + if (pmap == parentmaps.end()) + pmap = parentmaps.insert(p,NodeMultiMap()); + pmap->insert((*i)->name(),(*i)); + ++i; + } + pmap = parentmaps.begin(); + while (pmap != parentmaps.end()) { + NodeList nlist = pmap->values(); + out() << "

Class "; + + out() << ""; + QStringList pieces = fullName(pmap.key(), 0, marker).split("::"); + out() << protectEnc(pieces.last()); + out() << "" << ":

\n"; + + generateSection(nlist, 0, marker, CodeMarker::Summary); + out() << "
"; + ++pmap; + } + } + else + generateSection(s->members, 0, marker, CodeMarker::Summary); + } + ++idx; + ++s; + } + } + } + break; + case Atom::Image: + case Atom::InlineImage: + { + QString fileName = imageFileName(relative, atom->string()); + QString text; + if (atom->next() != 0) + text = atom->next()->string(); + if (atom->type() == Atom::Image) + out() << "

"; + if (fileName.isEmpty()) { + out() << "[Missing image " + << protectEnc(atom->string()) << "]"; + } + else { + out() << "\"""; + helpProjectWriter->addExtraFile(fileName); + } + if (atom->type() == Atom::Image) + out() << "

"; + } + break; + case Atom::ImageText: + break; + case Atom::LegaleseLeft: + out() << "
"; + break; + case Atom::LegaleseRight: + out() << "
"; + break; + case Atom::LineBreak: + out() << "
"; + break; + case Atom::Link: + { + const Node *node = 0; + QString myLink = getLink(atom, relative, marker, &node); + if (myLink.isEmpty()) { + relative->doc().location().warning(tr("Cannot link to '%1' in %2") + .arg(atom->string()) + .arg(marker->plainFullName(relative))); + } + beginLink(myLink, node, relative, marker); + skipAhead = 1; + } + break; + case Atom::LinkNode: + { + const Node *node = CodeMarker::nodeForString(atom->string()); + beginLink(linkForNode(node, relative), node, relative, marker); + skipAhead = 1; + } + break; + case Atom::ListLeft: + if (in_para) { + out() << "

\n"; + in_para = false; + } + if (atom->string() == ATOM_LIST_BULLET) { + out() << "
    \n"; + } + else if (atom->string() == ATOM_LIST_TAG) { + out() << "
    \n"; + } + else if (atom->string() == ATOM_LIST_VALUE) { + threeColumnEnumValueTable = isThreeColumnEnumValueTable(atom); + if (threeColumnEnumValueTable) { + out() << ""; + // << "" + if (++numTableRows % 2 == 1) + out() << ""; + else + out() << ""; + + out() << "" + << "" + << "\n"; + } + else { + out() << "
    ConstantValueDescription
    " + << "\n"; + } + } + else { + out() << "
      string() == ATOM_LIST_LOWERALPHA) { + out() << "\"a\""; + } + else if (atom->string() == ATOM_LIST_UPPERROMAN) { + out() << "\"I\""; + } + else if (atom->string() == ATOM_LIST_LOWERROMAN) { + out() << "\"i\""; + } + else { // (atom->string() == ATOM_LIST_NUMERIC) + out() << "\"1\""; + } + if (atom->next() != 0 && atom->next()->string().toInt() != 1) + out() << " start=\"" << atom->next()->string() << "\""; + out() << ">\n"; + } + break; + case Atom::ListItemNumber: + break; + case Atom::ListTagLeft: + if (atom->string() == ATOM_LIST_TAG) { + out() << "
      "; + } + else { // (atom->string() == ATOM_LIST_VALUE) + // ### Trenton + + out() << "
    \n"; + } + else { + out() << "\n"; + } + break; + case Atom::ListRight: + if (atom->string() == ATOM_LIST_BULLET) { + out() << "\n"; + } + else if (atom->string() == ATOM_LIST_TAG) { + out() << "\n"; + } + else if (atom->string() == ATOM_LIST_VALUE) { + out() << "
    ConstantValue
    " + << protectEnc(plainCode(marker->markedUpEnumValue(atom->next()->string(), + relative))) + << ""; + + QString itemValue; + if (relative->type() == Node::Enum) { + const EnumNode *enume = static_cast(relative); + itemValue = enume->itemValue(atom->next()->string()); + } + + if (itemValue.isEmpty()) + out() << "?"; + else + out() << "" << protectEnc(itemValue) << ""; + + skipAhead = 1; + } + break; + case Atom::ListTagRight: + if (atom->string() == ATOM_LIST_TAG) + out() << "\n"; + break; + case Atom::ListItemLeft: + if (atom->string() == ATOM_LIST_TAG) { + out() << "
    "; + } + else if (atom->string() == ATOM_LIST_VALUE) { + if (threeColumnEnumValueTable) { + out() << "
    "; + if (matchAhead(atom, Atom::ListItemRight)) + out() << " "; + } + } + else { + out() << "
  • "; + } + if (matchAhead(atom, Atom::ParaLeft)) + skipAhead = 1; + break; + case Atom::ListItemRight: + if (atom->string() == ATOM_LIST_TAG) { + out() << "\n"; + } + else if (atom->string() == ATOM_LIST_VALUE) { + out() << "
  • \n"; + } + else { + out() << "\n"; + } + break; + case Atom::Nop: + break; + case Atom::ParaLeft: + out() << "

    "; + in_para = true; + break; + case Atom::ParaRight: + endLink(); + if (in_para) { + out() << "

    \n"; + in_para = false; + } + //if (!matchAhead(atom, Atom::ListItemRight) && !matchAhead(atom, Atom::TableItemRight)) + // out() << "

    \n"; + break; + case Atom::QuotationLeft: + out() << "
    "; + break; + case Atom::QuotationRight: + out() << "
    \n"; + break; + case Atom::RawString: + out() << atom->string(); + break; + case Atom::SectionLeft: +#if 0 + { + int nextLevel = atom->string().toInt(); + if (sectionNumber.size() < nextLevel) { + do { + sectionNumber.append("1"); + } while (sectionNumber.size() < nextLevel); + } + else { + while (sectionNumber.size() > nextLevel) { + sectionNumber.removeLast(); + } + sectionNumber.last() = QString::number(sectionNumber.last().toInt() + 1); + } + out() << "\n"; + } +#else + out() << "\n"; +#endif + break; + case Atom::SectionRight: + break; + case Atom::SectionHeadingLeft: + out() << "string().toInt() + hOffset(relative)) + ">"; + inSectionHeading = true; + break; + case Atom::SectionHeadingRight: + out() << "string().toInt() + hOffset(relative)) + ">\n"; + inSectionHeading = false; + break; + case Atom::SidebarLeft: + break; + case Atom::SidebarRight: + break; + case Atom::String: + if (inLink && !inContents && !inSectionHeading) { + generateLink(atom, relative, marker); + } + else { + out() << protectEnc(atom->string()); + } + break; + case Atom::TableLeft: + if (in_para) { + out() << "

    \n"; + in_para = false; + } + if (!atom->string().isEmpty()) { + if (atom->string().contains("%")) + out() << "\n "; // width=\"" << atom->string() << "\">\n "; + else { + out() << "
    \n"; + } + } + else { + out() << "
    \n"; + } + numTableRows = 0; + break; + case Atom::TableRight: + out() << "
    \n"; + break; + case Atom::TableHeaderLeft: + out() << ""; + inTableHeader = true; + break; + case Atom::TableHeaderRight: + out() << ""; + if (matchAhead(atom, Atom::TableHeaderLeft)) { + skipAhead = 1; + out() << "\n"; + } + else { + out() << "\n"; + inTableHeader = false; + } + break; + case Atom::TableRowLeft: + if (++numTableRows % 2 == 1) + out() << ""; + else + out() << ""; + break; + case Atom::TableRowRight: + out() << "\n"; + break; + case Atom::TableItemLeft: + { + if (inTableHeader) + out() << "string().split(","); + if (spans.size() == 2) { + if (spans.at(0) != "1") + out() << " colspan=\"" << spans.at(0) << "\""; + if (spans.at(1) != "1") + out() << " rowspan=\"" << spans.at(1) << "\""; + if (inTableHeader) + out() << ">"; + else + out() << ">

    "; + } + if (matchAhead(atom, Atom::ParaLeft)) + skipAhead = 1; + } + break; + case Atom::TableItemRight: + if (inTableHeader) + out() << ""; + else + out() << "

    "; + if (matchAhead(atom, Atom::ParaLeft)) + skipAhead = 1; + break; + case Atom::TableOfContents: + { + int numColumns = 1; + const Node *node = relative; + + Doc::SectioningUnit sectioningUnit = Doc::Section4; + QStringList params = atom->string().split(","); + QString columnText = params.at(0); + QStringList pieces = columnText.split(" ", QString::SkipEmptyParts); + if (pieces.size() >= 2) { + columnText = pieces.at(0); + pieces.pop_front(); + QString path = pieces.join(" ").trimmed(); + node = findNodeForTarget(path, relative, marker, atom); + } + + if (params.size() == 2) { + numColumns = qMax(columnText.toInt(), numColumns); + sectioningUnit = (Doc::SectioningUnit)params.at(1).toInt(); + } + + if (node) + generateTableOfContents(node, + marker, + sectioningUnit, + numColumns, + relative); + } + break; + case Atom::Target: + out() << "string()) << "\">"; + break; + case Atom::UnhandledFormat: + out() << "<Missing DITAXML>"; + break; + case Atom::UnknownCommand: + out() << "\\" << protectEnc(atom->string()) + << ""; + break; +#ifdef QDOC_QML + case Atom::QmlText: + case Atom::EndQmlText: + // don't do anything with these. They are just tags. + break; +#endif + default: + unknownAtom(atom); + } + return skipAhead; +} + +/*! + Generate a reference page for a C++ class. + */ +void DitaXmlGenerator::generateClassLikeNode(const InnerNode *inner, + CodeMarker *marker) +{ + QList
    sections; + QList
    ::ConstIterator s; + + const ClassNode *classe = 0; + const NamespaceNode *namespasse = 0; + + QString title; + QString rawTitle; + QString fullTitle; + if (inner->type() == Node::Namespace) { + namespasse = static_cast(inner); + rawTitle = marker->plainName(inner); + fullTitle = marker->plainFullName(inner); + title = rawTitle + " Namespace"; + } + else if (inner->type() == Node::Class) { + classe = static_cast(inner); + rawTitle = marker->plainName(inner); + fullTitle = marker->plainFullName(inner); + title = rawTitle + " Class Reference"; + } + + DcfSection classSection; + classSection.title = title; + classSection.ref = linkForNode(inner, 0); + classSection.keywords += qMakePair(inner->name(), classSection.ref); + + Text subtitleText; + if (rawTitle != fullTitle) + subtitleText << "(" << Atom(Atom::AutoLink, fullTitle) << ")" + << Atom(Atom::LineBreak); + +#if 0 + // No longer used because the modeule name is a breadcrumb. + QString fixedModule = inner->moduleName(); + if (fixedModule == "Qt3SupportLight") + fixedModule = "Qt3Support"; + if (!fixedModule.isEmpty()) + subtitleText << "[" << Atom(Atom::AutoLink, fixedModule) << " module]"; + + if (fixedModule.isEmpty()) { + QMultiMap publicGroups = myTree->publicGroups(); + QList groupNames = publicGroups.values(inner->name()); + if (!groupNames.isEmpty()) { + qSort(groupNames.begin(), groupNames.end()); + subtitleText << "["; + for (int j=0; jsections(inner, CodeMarker::Summary, CodeMarker::Okay); + generateTableOfContents(inner,marker,§ions); + generateTitle(title, subtitleText, SmallSubTitle, inner, marker); + +#ifdef QDOC_QML + if (classe && !classe->qmlElement().isEmpty()) { + generateInstantiatedBy(classe,marker); + } +#endif + + generateBrief(inner, marker); + generateIncludes(inner, marker); + generateStatus(inner, marker); + if (classe) { + generateInherits(classe, marker); + generateInheritedBy(classe, marker); + } + generateThreadSafeness(inner, marker); + generateSince(inner, marker); + + out() << "\n"; + + bool needOtherSection = false; + + /* + sections is built above for the call to generateTableOfContents(). + */ + s = sections.begin(); + while (s != sections.end()) { + if (s->members.isEmpty() && s->reimpMembers.isEmpty()) { + if (!s->inherited.isEmpty()) + needOtherSection = true; + } + else { + if (!s->members.isEmpty()) { + out() << "
    \n"; + out() << "\n"; + out() << "

    " << protectEnc((*s).name) << "

    \n"; + generateSection(s->members, inner, marker, CodeMarker::Summary); + } + if (!s->reimpMembers.isEmpty()) { + QString name = QString("Reimplemented ") + (*s).name; + out() << "
    \n"; + out() << "\n"; + out() << "

    " << protectEnc(name) << "

    \n"; + generateSection(s->reimpMembers, inner, marker, CodeMarker::Summary); + } + + if (!s->inherited.isEmpty()) { + out() << "
      \n"; + generateSectionInheritedList(*s, inner, marker, true); + out() << "
    \n"; + } + } + ++s; + } + + if (needOtherSection) { + out() << "

    Additional Inherited Members

    \n" + "
      \n"; + + s = sections.begin(); + while (s != sections.end()) { + if (s->members.isEmpty() && !s->inherited.isEmpty()) + generateSectionInheritedList(*s, inner, marker); + ++s; + } + out() << "
    \n"; + } + + out() << "\n"; + + if (!inner->doc().isEmpty()) { + out() << "
    \n" + << "
    \n" // QTBUG-9504 + << "

    " << "Detailed Description" << "

    \n"; + generateBody(inner, marker); + out() << "
    \n"; // QTBUG-9504 + generateAlsoList(inner, marker); + } + + sections = marker->sections(inner, CodeMarker::Detailed, CodeMarker::Okay); + s = sections.begin(); + while (s != sections.end()) { + out() << "
    \n"; + if (!(*s).divClass.isEmpty()) + out() << "
    \n"; // QTBUG-9504 + out() << "

    " << protectEnc((*s).name) << "

    \n"; + + NodeList::ConstIterator m = (*s).members.begin(); + while (m != (*s).members.end()) { + if ((*m)->access() != Node::Private) { // ### check necessary? + if ((*m)->type() != Node::Class) + generateDetailedMember(*m, inner, marker); + else { + out() << "

    class "; + generateFullName(*m, inner, marker); + out() << "

    "; + generateBrief(*m, marker, inner); + } + + QStringList names; + names << (*m)->name(); + if ((*m)->type() == Node::Function) { + const FunctionNode *func = reinterpret_cast(*m); + if (func->metaness() == FunctionNode::Ctor || + func->metaness() == FunctionNode::Dtor || + func->overloadNumber() != 1) + names.clear(); + } + else if ((*m)->type() == Node::Property) { + const PropertyNode *prop = reinterpret_cast(*m); + if (!prop->getters().isEmpty() && + !names.contains(prop->getters().first()->name())) + names << prop->getters().first()->name(); + if (!prop->setters().isEmpty()) + names << prop->setters().first()->name(); + if (!prop->resetters().isEmpty()) + names << prop->resetters().first()->name(); + } + else if ((*m)->type() == Node::Enum) { + const EnumNode *enume = reinterpret_cast(*m); + if (enume->flagsType()) + names << enume->flagsType()->name(); + + foreach (const QString &enumName, + enume->doc().enumItemNames().toSet() - + enume->doc().omitEnumItemNames().toSet()) + names << plainCode(marker->markedUpEnumValue(enumName, + enume)); + } + foreach (const QString &name, names) + classSection.keywords += qMakePair(name,linkForNode(*m,0)); + } + ++m; + } + if (!(*s).divClass.isEmpty()) + out() << "
    \n"; // QTBUG-9504 + ++s; + } + generateFooter(inner); + + if (!membersLink.isEmpty()) { + DcfSection membersSection; + membersSection.title = "List of all members"; + membersSection.ref = membersLink; + appendDcfSubSection(&classSection, membersSection); + } + if (!obsoleteLink.isEmpty()) { + DcfSection obsoleteSection; + obsoleteSection.title = "Obsolete members"; + obsoleteSection.ref = obsoleteLink; + appendDcfSubSection(&classSection, obsoleteSection); + } + if (!compatLink.isEmpty()) { + DcfSection compatSection; + compatSection.title = "Qt 3 support members"; + compatSection.ref = compatLink; + appendDcfSubSection(&classSection, compatSection); + } + + appendDcfSubSection(&dcfClassesRoot, classSection); +} + +/*! + Generate the html page for a qdoc file that doesn't map + to an underlying c++ file. + */ +void DitaXmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker) +{ + SubTitleSize subTitleSize = LargeSubTitle; + DcfSection fakeSection; + fakeSection.title = fake->fullTitle(); + fakeSection.ref = linkForNode(fake, 0); + + QList
    sections; + QList
    ::const_iterator s; + + QString fullTitle = fake->fullTitle(); + QString htmlTitle = fullTitle; + if (fake->subType() == Node::File && !fake->subTitle().isEmpty()) { + subTitleSize = SmallSubTitle; + htmlTitle += " (" + fake->subTitle() + ")"; + } + else if (fake->subType() == Node::QmlBasicType) { + fullTitle = "QML Basic Type: " + fullTitle; + htmlTitle = fullTitle; + } + + generateHeader(htmlTitle, fake, marker); + + /* + Generate the TOC for the new doc format. + Don't generate a TOC for the home page. + */ + if (fake->name() != QString("index.html")) + generateTableOfContents(fake,marker,0); + + generateTitle(fullTitle, + Text() << fake->subTitle(), + subTitleSize, + fake, + marker); + + if (fake->subType() == Node::Module) { + // Generate brief text and status for modules. + generateBrief(fake, marker); + generateStatus(fake, marker); + + if (moduleNamespaceMap.contains(fake->name())) { + out() << "\n"; + out() << "

    Namespaces

    \n"; + generateAnnotatedList(fake, marker, moduleNamespaceMap[fake->name()]); + } + if (moduleClassMap.contains(fake->name())) { + out() << "\n"; + out() << "

    Classes

    \n"; + generateAnnotatedList(fake, marker, moduleClassMap[fake->name()]); + } + } + else if (fake->subType() == Node::HeaderFile) { + // Generate brief text and status for modules. + generateBrief(fake, marker); + generateStatus(fake, marker); + + out() << "\n"; + + if (!membersLink.isEmpty()) { + DcfSection membersSection; + membersSection.title = "List of all members"; + membersSection.ref = membersLink; + appendDcfSubSection(&fakeSection, membersSection); + } + if (!obsoleteLink.isEmpty()) { + DcfSection obsoleteSection; + obsoleteSection.title = "Obsolete members"; + obsoleteSection.ref = obsoleteLink; + appendDcfSubSection(&fakeSection, obsoleteSection); + } + if (!compatLink.isEmpty()) { + DcfSection compatSection; + compatSection.title = "Qt 3 support members"; + compatSection.ref = compatLink; + appendDcfSubSection(&fakeSection, compatSection); + } + } +#ifdef QDOC_QML + else if (fake->subType() == Node::QmlClass) { + const QmlClassNode* qml_cn = static_cast(fake); + const ClassNode* cn = qml_cn->classNode(); + generateQmlInherits(qml_cn, marker); + generateQmlInstantiates(qml_cn, marker); + generateBrief(qml_cn, marker); + generateQmlInheritedBy(qml_cn, marker); + sections = marker->qmlSections(qml_cn,CodeMarker::Summary); + s = sections.begin(); + while (s != sections.end()) { + out() << "\n"; + out() << "

    " << protectEnc((*s).name) << "

    \n"; + generateQmlSummary(*s,fake,marker); + ++s; + } + + out() << "\n"; + out() << "

    " << "Detailed Description" << "

    \n"; + generateBody(fake, marker); + if (cn) + generateQmlText(cn->doc().body(), cn, marker, fake->name()); + generateAlsoList(fake, marker); + out() << "
    \n"; + + sections = marker->qmlSections(qml_cn,CodeMarker::Detailed); + s = sections.begin(); + while (s != sections.end()) { + out() << "

    " << protectEnc((*s).name) << "

    \n"; + NodeList::ConstIterator m = (*s).members.begin(); + while (m != (*s).members.end()) { + generateDetailedQmlMember(*m, fake, marker); + out() << "
    \n"; + fakeSection.keywords += qMakePair((*m)->name(), + linkForNode(*m,0)); + ++m; + } + ++s; + } + generateFooter(fake); + return; + } +#endif + + sections = marker->sections(fake, CodeMarker::Summary, CodeMarker::Okay); + s = sections.begin(); + while (s != sections.end()) { + out() << "\n"; + out() << "

    " << protectEnc((*s).name) << "

    \n"; + generateSectionList(*s, fake, marker, CodeMarker::Summary); + ++s; + } + + Text brief = fake->doc().briefText(); + if (fake->subType() == Node::Module && !brief.isEmpty()) { + out() << "\n"; + out() << "
    \n"; // QTBUG-9504 + out() << "

    " << "Detailed Description" << "

    \n"; + } + else + out() << "
    \n"; // QTBUG-9504 + + generateBody(fake, marker); + out() << "
    \n"; // QTBUG-9504 + generateAlsoList(fake, marker); + + if (!fake->groupMembers().isEmpty()) { + NodeMap groupMembersMap; + foreach (const Node *node, fake->groupMembers()) { + if (node->type() == Node::Class || node->type() == Node::Namespace) + groupMembersMap[node->name()] = node; + } + generateAnnotatedList(fake, marker, groupMembersMap); + } + + fakeSection.keywords += qMakePair(fakeSection.title, fakeSection.ref); + + sections = marker->sections(fake, CodeMarker::Detailed, CodeMarker::Okay); + s = sections.begin(); + while (s != sections.end()) { + out() << "
    \n"; + out() << "

    " << protectEnc((*s).name) << "

    \n"; + + NodeList::ConstIterator m = (*s).members.begin(); + while (m != (*s).members.end()) { + generateDetailedMember(*m, fake, marker); + fakeSection.keywords += qMakePair((*m)->name(), linkForNode(*m, 0)); + ++m; + } + ++s; + } + generateFooter(fake); + + if (fake->subType() == Node::Example) { + appendDcfSubSection(&dcfExamplesRoot, fakeSection); + } + else if (fake->subType() != Node::File) { + QString contentsPage = fake->links().value(Node::ContentsLink).first; + + if (contentsPage == "Qt Designer Manual") { + appendDcfSubSection(&dcfDesignerRoot, fakeSection); + } + else if (contentsPage == "Qt Linguist Manual") { + appendDcfSubSection(&dcfLinguistRoot, fakeSection); + } + else if (contentsPage == "Qt Assistant Manual") { + appendDcfSubSection(&dcfAssistantRoot, fakeSection); + } + else if (contentsPage == "qmake Manual") { + appendDcfSubSection(&dcfQmakeRoot, fakeSection); + } + else { + appendDcfSubSection(&dcfOverviewsRoot, fakeSection); + } + } +} + +/*! + Returns "html" for this subclass of Generator. + */ +QString DitaXmlGenerator::fileExtension(const Node * /* node */) const +{ + return "html"; +} + +/*! + Output breadcrumb list in the html file. + */ +void DitaXmlGenerator::generateBreadCrumbs(const QString& title, + const Node *node, + CodeMarker *marker) +{ + Text breadcrumb; + if (node->type() == Node::Class) { + const ClassNode* cn = static_cast(node); + QString name = node->moduleName(); + out() << "
  • All Modules
  • "; + if (!name.isEmpty()) { + out() << "
  • "; + breadcrumb << Atom(Atom::AutoLink,name); + generateText(breadcrumb, node, marker); + out() << "
  • \n"; + } + breadcrumb.clear(); + if (!cn->name().isEmpty()) { + out() << "
  • "; + breadcrumb << Atom(Atom::AutoLink,cn->name()); + generateText(breadcrumb, 0, marker); + out() << "
  • \n"; + } + } + else if (node->type() == Node::Fake) { + const FakeNode* fn = static_cast(node); + if (node->subType() == Node::Module) { + out() << "
  • All Modules
  • "; + QString name = node->name(); + if (!name.isEmpty()) { + out() << "
  • "; + breadcrumb << Atom(Atom::AutoLink,name); + generateText(breadcrumb, 0, marker); + out() << "
  • \n"; + } + } + else if (node->subType() == Node::Group) { + if (fn->name() == QString("modules")) + out() << "
  • All Modules
  • "; + else { + out() << "
  • name() << "\">" << title + << "
  • "; + } + } + else if (node->subType() == Node::Page) { + if (fn->name() == QString("examples.html")) { + out() << "
  • Examples
  • "; + } + else if (fn->name().startsWith("examples-")) { + out() << "
  • Examples
  • "; + out() << "
  • name() << "\">" << title + << "
  • "; + } + else if (fn->name() == QString("namespaces.html")) { + out() << "
  • All Namespaces
  • "; + } + else { + out() << "
  • name() << "\">" << title + << "
  • "; + } + } + else if (node->subType() == Node::QmlClass) { + out() << "
  • QML Elements
  • "; + out() << "
  • name() << "\">" << title + << "
  • "; + } + else if (node->subType() == Node::Example) { + out() << "
  • Examples
  • "; + QStringList sl = fn->name().split('/'); + QString name = "examples-" + sl.at(0) + ".html"; + QString t = CodeParser::titleFromName(name); + out() << "
  • " + << t << "
  • "; + out() << "
  • " + << title << "
  • "; + } + } + else if (node->type() == Node::Namespace) { + const NamespaceNode* nsn = static_cast(node); + out() << "
  • All Namespaces
  • "; + out() << "
  • " << title + << "
  • "; + } +} + +void DitaXmlGenerator::generateHeader(const QString& title, + const Node *node, + CodeMarker *marker) +{ + out() << QString("\n").arg(outputEncoding); + out() << "\n"; + out() << QString("\n").arg(naturalLanguage); + out() << "\n"; + out() << " \n"; + QString shortVersion; + shortVersion = project + " " + shortVersion + ": "; + if (node && !node->doc().location().isEmpty()) + out() << "\n"; + + shortVersion = myTree->version(); + if (shortVersion.count(QChar('.')) == 2) + shortVersion.truncate(shortVersion.lastIndexOf(QChar('.'))); + if (!shortVersion.isEmpty()) { + if (project == "QSA") + shortVersion = "QSA " + shortVersion + ": "; + else + shortVersion = "Qt " + shortVersion + ": "; + } + + out() << " " << shortVersion << protectEnc(title) << "\n"; + + out() << " "; + out() << ""; + out() << ""; + out() << ""; + + + //out() << " Qt Reference Documentation"; + out() << " \n"; + out() << " \n"; + out() << " \n"; + out() << "\n"; + + if (offlineDocs) + out() << "\n"; + else + out() << "\n"; + +#ifdef GENERATE_MAC_REFS + if (mainPage) + generateMacRef(node, marker); +#endif + out() << QString(postHeader).replace("\\" + COMMAND_VERSION, myTree->version()); + generateBreadCrumbs(title,node,marker); + out() << QString(postPostHeader).replace("\\" + COMMAND_VERSION, myTree->version()); + +#if 0 // Removed for new docf format. MWS + if (node && !node->links().empty()) + out() << "

    \n" << navigationLinks << "

    \n"; +#endif +} + +void DitaXmlGenerator::generateTitle(const QString& title, + const Text &subTitle, + SubTitleSize subTitleSize, + const Node *relative, + CodeMarker *marker) +{ + if (!title.isEmpty()) + out() << "

    " << protectEnc(title) << "

    \n"; + if (!subTitle.isEmpty()) { + out() << ""; + else + out() << " class=\"subtitle\">"; + generateText(subTitle, relative, marker); + out() << "\n"; + } +} + +void DitaXmlGenerator::generateFooter(const Node *node) +{ + if (node && !node->links().empty()) + out() << "

    \n" << navigationLinks << "

    \n"; + + out() << QString(footer).replace("\\" + COMMAND_VERSION, myTree->version()) + << QString(address).replace("\\" + COMMAND_VERSION, myTree->version()); + out() << " \n"; + out() << "\n"; + out() << "\n"; +} + +void DitaXmlGenerator::generateBrief(const Node *node, CodeMarker *marker, + const Node *relative) +{ + Text brief = node->doc().briefText(); + if (!brief.isEmpty()) { + out() << "

    "; + generateText(brief, node, marker); + if (!relative || node == relative) + out() << " More...

    \n"; + } +} + +void DitaXmlGenerator::generateIncludes(const InnerNode *inner, CodeMarker *marker) +{ + if (!inner->includes().isEmpty()) { + out() << "
    "
    +              << trimmedTrailing(highlightedCode(indent(codeIndent,
    +                                                        marker->markedUpIncludes(inner->includes())),
    +                                                 marker,inner))
    +              << "
    "; + } +} + +/*! + Generates a table of contents begining at \a node. + */ +void DitaXmlGenerator::generateTableOfContents(const Node *node, + CodeMarker *marker, + Doc::SectioningUnit sectioningUnit, + int numColumns, + const Node *relative) + +{ + return; + if (!node->doc().hasTableOfContents()) + return; + QList toc = node->doc().tableOfContents(); + if (toc.isEmpty()) + return; + + QString nodeName = ""; + if (node != relative) + nodeName = node->name(); + + QStringList sectionNumber; + int columnSize = 0; + + QString tdTag; + if (numColumns > 1) { + tdTag = ""; /* width=\"" + QString::number((100 + numColumns - 1) / numColumns) + "%\">";*/ + out() << "\n" + << tdTag << "\n"; + } + + // disable nested links in table of contents + inContents = true; + inLink = true; + + for (int i = 0; i < toc.size(); ++i) { + Atom *atom = toc.at(i); + + int nextLevel = atom->string().toInt(); + if (nextLevel > (int)sectioningUnit) + continue; + + if (sectionNumber.size() < nextLevel) { + do { + out() << "
      "; + sectionNumber.append("1"); + } while (sectionNumber.size() < nextLevel); + } + else { + while (sectionNumber.size() > nextLevel) { + out() << "
    \n"; + sectionNumber.removeLast(); + } + sectionNumber.last() = QString::number(sectionNumber.last().toInt() + 1); + } + int numAtoms; + Text headingText = Text::sectionHeading(atom); + + if (sectionNumber.size() == 1 && columnSize > toc.size() / numColumns) { + out() << "" << tdTag << "\n"; + sectionNumber.removeLast(); + } + + if (numColumns > 1) + out() << "
    \n"; + + inContents = false; + inLink = false; +} + +/*! + Revised for the new doc format. + Generates a table of contents begining at \a node. + */ +void DitaXmlGenerator::generateTableOfContents(const Node *node, + CodeMarker *marker, + QList
    * sections) +{ + QList toc; + if (node->doc().hasTableOfContents()) + toc = node->doc().tableOfContents(); + if (toc.isEmpty() && !sections && (node->subType() != Node::Module)) + return; + + QStringList sectionNumber; + int detailsBase = 0; + + // disable nested links in table of contents + inContents = true; + inLink = true; + + out() << "
    \n"; + out() << "

    Contents

    \n"; + sectionNumber.append("1"); + out() << "
      \n"; + + if (node->subType() == Node::Module) { + if (moduleNamespaceMap.contains(node->name())) { + out() << "
    • Namespaces
    • \n"; + } + if (moduleClassMap.contains(node->name())) { + out() << "
    • Classes
    • \n"; + } + out() << "
    • Detailed Description
    • \n"; + for (int i = 0; i < toc.size(); ++i) { + if (toc.at(i)->string().toInt() == 1) { + detailsBase = 1; + break; + } + } + } + else if (sections && (node->type() == Node::Class)) { + QList
      ::ConstIterator s = sections->begin(); + while (s != sections->end()) { + if (!s->members.isEmpty() || !s->reimpMembers.isEmpty()) { + out() << "
    • " << (*s).name + << "
    • \n"; + } + ++s; + } + out() << "
    • Detailed Description
    • \n"; + for (int i = 0; i < toc.size(); ++i) { + if (toc.at(i)->string().toInt() == 1) { + detailsBase = 1; + break; + } + } + } + + for (int i = 0; i < toc.size(); ++i) { + Atom *atom = toc.at(i); + int nextLevel = atom->string().toInt() + detailsBase; + if (sectionNumber.size() < nextLevel) { + do { + sectionNumber.append("1"); + } while (sectionNumber.size() < nextLevel); + } + else { + while (sectionNumber.size() > nextLevel) { + sectionNumber.removeLast(); + } + sectionNumber.last() = QString::number(sectionNumber.last().toInt() + 1); + } + int numAtoms; + Text headingText = Text::sectionHeading(atom); + QString s = headingText.toString(); + out() << "
    • "; + out() << ""; + generateAtomList(headingText.firstAtom(), node, marker, true, numAtoms); + out() << "
    • \n"; + } + while (!sectionNumber.isEmpty()) { + sectionNumber.removeLast(); + } + out() << "
    \n"; + out() << "
    \n"; + inContents = false; + inLink = false; +} + +#if 0 +void DitaXmlGenerator::generateNavigationBar(const NavigationBar& bar, + const Node *node, + CodeMarker *marker) +{ + if (bar.prev.begin() != 0 || bar.current.begin() != 0 || + bar.next.begin() != 0) { + out() << "

    "; + if (bar.prev.begin() != 0) { +#if 0 + out() << "[Prev: "; + generateText(section.previousHeading(), node, marker); + out() << "]\n"; +#endif + } + if (bar.current.begin() != 0) { + out() << "[Home]\n"; + } + if (bar.next.begin() != 0) { + out() << "[Next: "; + generateText(Text::sectionHeading(bar.next.begin()), node, marker); + out() << "]\n"; + } + out() << "

    \n"; + } +} +#endif + +QString DitaXmlGenerator::generateListOfAllMemberFile(const InnerNode *inner, + CodeMarker *marker) +{ + QList
    sections; + QList
    ::ConstIterator s; + + sections = marker->sections(inner, + CodeMarker::SeparateList, + CodeMarker::Okay); + if (sections.isEmpty()) + return QString(); + + QString fileName = fileBase(inner) + "-members." + fileExtension(inner); + beginSubPage(inner->location(), fileName); + QString title = "List of All Members for " + inner->name(); + generateHeader(title, inner, marker); + generateTitle(title, Text(), SmallSubTitle, inner, marker); + out() << "

    This is the complete list of members for "; + generateFullName(inner, 0, marker); + out() << ", including inherited members.

    \n"; + + Section section = sections.first(); + generateSectionList(section, 0, marker, CodeMarker::SeparateList); + + generateFooter(); + endSubPage(); + return fileName; +} + +QString DitaXmlGenerator::generateLowStatusMemberFile(const InnerNode *inner, + CodeMarker *marker, + CodeMarker::Status status) +{ + QList
    sections = marker->sections(inner, + CodeMarker::Summary, + status); + QMutableListIterator
    j(sections); + while (j.hasNext()) { + if (j.next().members.size() == 0) + j.remove(); + } + if (sections.isEmpty()) + return QString(); + + int i; + + QString title; + QString fileName; + + if (status == CodeMarker::Compat) { + title = "Qt 3 Support Members for " + inner->name(); + fileName = fileBase(inner) + "-qt3." + fileExtension(inner); + } + else { + title = "Obsolete Members for " + inner->name(); + fileName = fileBase(inner) + "-obsolete." + fileExtension(inner); + } + + beginSubPage(inner->location(), fileName); + generateHeader(title, inner, marker); + generateTitle(title, Text(), SmallSubTitle, inner, marker); + + if (status == CodeMarker::Compat) { + out() << "

    The following class members are part of the " + "Qt 3 support layer. " + "They are provided to help you port old code to Qt 4. We advise against " + "using them in new code.

    \n"; + } + else { + out() << "

    The following class members are obsolete. " + << "They are provided to keep old source code working. " + << "We strongly advise against using them in new code.

    \n"; + } + + out() << "

    \n"; + + for (i = 0; i < sections.size(); ++i) { + out() << "

    " << protectEnc(sections.at(i).name) << "

    \n"; + generateSectionList(sections.at(i), inner, marker, CodeMarker::Summary); + } + + sections = marker->sections(inner, CodeMarker::Detailed, status); + for (i = 0; i < sections.size(); ++i) { + out() << "
    \n"; + out() << "

    " << protectEnc(sections.at(i).name) << "

    \n"; + + NodeList::ConstIterator m = sections.at(i).members.begin(); + while (m != sections.at(i).members.end()) { + if ((*m)->access() != Node::Private) + generateDetailedMember(*m, inner, marker); + ++m; + } + } + + generateFooter(); + endSubPage(); + return fileName; +} + +void DitaXmlGenerator::generateClassHierarchy(const Node *relative, + CodeMarker *marker, + const QMap &classMap) +{ + if (classMap.isEmpty()) + return; + + NodeMap topLevel; + NodeMap::ConstIterator c = classMap.begin(); + while (c != classMap.end()) { + const ClassNode *classe = static_cast(*c); + if (classe->baseClasses().isEmpty()) + topLevel.insert(classe->name(), classe); + ++c; + } + + QStack stack; + stack.push(topLevel); + + out() << "
      \n"; + while (!stack.isEmpty()) { + if (stack.top().isEmpty()) { + stack.pop(); + out() << "
    \n"; + } + else { + const ClassNode *child = + static_cast(*stack.top().begin()); + out() << "
  • "; + generateFullName(child, relative, marker); + out() << "
  • \n"; + stack.top().erase(stack.top().begin()); + + NodeMap newTop; + foreach (const RelatedClass &d, child->derivedClasses()) { + if (d.access != Node::Private) + newTop.insert(d.node->name(), d.node); + } + if (!newTop.isEmpty()) { + stack.push(newTop); + out() << "
      \n"; + } + } + } +} + +void DitaXmlGenerator::generateAnnotatedList(const Node *relative, + CodeMarker *marker, + const NodeMap &nodeMap) +{ + out() << "\n"; + + int row = 0; + foreach (const QString &name, nodeMap.keys()) { + const Node *node = nodeMap[name]; + + if (node->status() == Node::Obsolete) + continue; + + if (++row % 2 == 1) + out() << ""; + else + out() << ""; + out() << ""; + + if (!(node->type() == Node::Fake)) { + Text brief = node->doc().trimmedBriefText(name); + if (!brief.isEmpty()) { + out() << ""; + } + } + else { + out() << ""; + } + out() << "\n"; + } + out() << "

      "; + generateFullName(node, relative, marker); + out() << "

      "; + generateText(brief, node, marker); + out() << "

      "; + out() << protectEnc(node->doc().briefText().toString()); + out() << "

      \n"; +} + +/*! + This function finds the common prefix of the names of all + the classes in \a classMap and then generates a compact + list of the class names alphabetized on the part of the + name not including the common prefix. You can tell the + function to use \a comonPrefix as the common prefix, but + normally you let it figure it out itself by looking at + the name of the first and last classes in \a classMap. + */ +void DitaXmlGenerator::generateCompactList(const Node *relative, + CodeMarker *marker, + const NodeMap &classMap, + bool includeAlphabet, + QString commonPrefix) +{ + const int NumParagraphs = 37; // '0' to '9', 'A' to 'Z', '_' + + if (classMap.isEmpty()) + return; + + /* + If commonPrefix is not empty, then the caller knows what + the common prefix is and has passed it in, so just use that + one. + */ + int commonPrefixLen = commonPrefix.length(); + if (commonPrefixLen == 0) { + QString first; + QString last; + + /* + The caller didn't pass in a common prefix, so get the common + prefix by looking at the class names of the first and last + classes in the class map. Discard any namespace names and + just use the bare class names. For Qt, the prefix is "Q". + + Note that the algorithm used here to derive the common prefix + from the first and last classes in alphabetical order (QAccel + and QXtWidget in Qt 2.1), fails if either class name does not + begin with Q. + */ + + NodeMap::const_iterator iter = classMap.begin(); + while (iter != classMap.end()) { + if (!iter.key().contains("::")) { + first = iter.key(); + break; + } + ++iter; + } + + if (first.isEmpty()) + first = classMap.begin().key(); + + iter = classMap.end(); + while (iter != classMap.begin()) { + --iter; + if (!iter.key().contains("::")) { + last = iter.key(); + break; + } + } + + if (last.isEmpty()) + last = classMap.begin().key(); + + if (classMap.size() > 1) { + while (commonPrefixLen < first.length() + 1 && + commonPrefixLen < last.length() + 1 && + first[commonPrefixLen] == last[commonPrefixLen]) + ++commonPrefixLen; + } + + commonPrefix = first.left(commonPrefixLen); + } + + /* + Divide the data into 37 paragraphs: 0, ..., 9, A, ..., Z, + underscore (_). QAccel will fall in paragraph 10 (A) and + QXtWidget in paragraph 33 (X). This is the only place where we + assume that NumParagraphs is 37. Each paragraph is a NodeMap. + */ + NodeMap paragraph[NumParagraphs+1]; + QString paragraphName[NumParagraphs+1]; + QSet usedParagraphNames; + + NodeMap::ConstIterator c = classMap.begin(); + while (c != classMap.end()) { + QStringList pieces = c.key().split("::"); + QString key; + int idx = commonPrefixLen; + if (!pieces.last().startsWith(commonPrefix)) + idx = 0; + if (pieces.size() == 1) + key = pieces.last().mid(idx).toLower(); + else + key = pieces.last().toLower(); + + int paragraphNr = NumParagraphs - 1; + + if (key[0].digitValue() != -1) { + paragraphNr = key[0].digitValue(); + } + else if (key[0] >= QLatin1Char('a') && key[0] <= QLatin1Char('z')) { + paragraphNr = 10 + key[0].unicode() - 'a'; + } + + paragraphName[paragraphNr] = key[0].toUpper(); + usedParagraphNames.insert(key[0].toLower().cell()); + paragraph[paragraphNr].insert(key, c.value()); + ++c; + } + + /* + Each paragraph j has a size: paragraph[j].count(). In the + discussion, we will assume paragraphs 0 to 5 will have sizes + 3, 1, 4, 1, 5, 9. + + We now want to compute the paragraph offset. Paragraphs 0 to 6 + start at offsets 0, 3, 4, 8, 9, 14, 23. + */ + int paragraphOffset[NumParagraphs + 1]; // 37 + 1 + paragraphOffset[0] = 0; + for (int i=0; i"; + for (int i = 0; i < 26; i++) { + QChar ch('a' + i); + if (usedParagraphNames.contains(char('a' + i))) + out() << QString("%2 ").arg(ch).arg(ch.toUpper()); + } + out() << "

      \n"; + } + + /* + Output a
      element to contain all the
      elements. + */ + out() << "
      \n"; + + for (int i=0; i. + */ + if (curParOffset == 0) { + if (i > 0) + out() << "
      \n"; + if (++numTableRows % 2 == 1) + out() << "
      "; + else + out() << "
      "; + out() << "
      "; + if (includeAlphabet) { + QChar c = paragraphName[curParNr][0].toLower(); + out() << QString("").arg(c); + } + out() << "" + << paragraphName[curParNr] + << ""; + out() << "
      \n"; + } + + /* + Output a
      for the current offset in the current paragraph. + */ + out() << "
      "; + if ((curParNr < NumParagraphs) && + !paragraphName[curParNr].isEmpty()) { + NodeMap::Iterator it; + it = paragraph[curParNr].begin(); + for (int i=0; i"; + + QStringList pieces; + if (it.value()->subType() == Node::QmlClass) + pieces << it.value()->name(); + else + pieces = fullName(it.value(), relative, marker).split("::"); + out() << protectEnc(pieces.last()); + out() << ""; + if (pieces.size() > 1) { + out() << " ("; + generateFullName(it.value()->parent(), relative, marker); + out() << ")"; + } + } + out() << "
      \n"; + curParOffset++; + } + out() << "
      \n"; + out() << "
      \n"; +} + +void DitaXmlGenerator::generateFunctionIndex(const Node *relative, + CodeMarker *marker) +{ + out() << "

      "; + for (int i = 0; i < 26; i++) { + QChar ch('a' + i); + out() << QString("%2 ").arg(ch).arg(ch.toUpper()); + } + out() << "

      \n"; + + char nextLetter = 'a'; + char currentLetter; + +#if 1 + out() << "
        \n"; +#endif + QMap::ConstIterator f = funcIndex.begin(); + while (f != funcIndex.end()) { +#if 1 + out() << "
      • "; +#else + out() << "

        "; +#endif + out() << protectEnc(f.key()) << ":"; + + currentLetter = f.key()[0].unicode(); + while (islower(currentLetter) && currentLetter >= nextLetter) { + out() << QString("").arg(nextLetter); + nextLetter++; + } + + NodeMap::ConstIterator s = (*f).begin(); + while (s != (*f).end()) { + out() << " "; + generateFullName((*s)->parent(), relative, marker, *s); + ++s; + } +#if 1 + out() << "

      • "; +#else + out() << "

        "; +#endif + out() << "\n"; + ++f; + } +#if 1 + out() << "
      \n"; +#endif +} + +void DitaXmlGenerator::generateLegaleseList(const Node *relative, + CodeMarker *marker) +{ + QMap::ConstIterator it = legaleseTexts.begin(); + while (it != legaleseTexts.end()) { + Text text = it.key(); + out() << "
      \n"; + generateText(text, relative, marker); + out() << "
        \n"; + do { + out() << "
      • "; + generateFullName(it.value(), relative, marker); + out() << "
      • \n"; + ++it; + } while (it != legaleseTexts.end() && it.key() == text); + out() << "
      \n"; + } +} + +/*void DitaXmlGenerator::generateSynopsis(const Node *node, + const Node *relative, + CodeMarker *marker, + CodeMarker::SynopsisStyle style) +{ + QString marked = marker->markedUpSynopsis(node, relative, style); + QRegExp templateTag("(<[^@>]*>)"); + if (marked.indexOf(templateTag) != -1) { + QString contents = protectEnc(marked.mid(templateTag.pos(1), + templateTag.cap(1).length())); + marked.replace(templateTag.pos(1), templateTag.cap(1).length(), + contents); + } + marked.replace(QRegExp("<@param>([a-z]+)_([1-9n])"), + "\\1\\2"); + marked.replace("<@param>", ""); + marked.replace("", ""); + + if (style == CodeMarker::Summary) + marked.replace("@name>", "b>"); + + if (style == CodeMarker::SeparateList) { + QRegExp extraRegExp("<@extra>.*"); + extraRegExp.setMinimal(true); + marked.replace(extraRegExp, ""); + } + else { + marked.replace("<@extra>", "  "); + marked.replace("", ""); + } + + if (style != CodeMarker::Detailed) { + marked.replace("<@type>", ""); + marked.replace("", ""); + } + out() << highlightedCode(marked, marker, relative); +}*/ + +#ifdef QDOC_QML +void DitaXmlGenerator::generateQmlItem(const Node *node, + const Node *relative, + CodeMarker *marker, + bool summary) +{ + QString marked = marker->markedUpQmlItem(node,summary); + QRegExp templateTag("(<[^@>]*>)"); + if (marked.indexOf(templateTag) != -1) { + QString contents = protectEnc(marked.mid(templateTag.pos(1), + templateTag.cap(1).length())); + marked.replace(templateTag.pos(1), templateTag.cap(1).length(), + contents); + } + marked.replace(QRegExp("<@param>([a-z]+)_([1-9n])"), + "\\1\\2"); + marked.replace("<@param>", ""); + marked.replace("", ""); + + if (summary) + marked.replace("@name>", "b>"); + + marked.replace("<@extra>", ""); + marked.replace("", ""); + + if (summary) { + marked.replace("<@type>", ""); + marked.replace("", ""); + } + out() << highlightedCode(marked, marker, relative); +} +#endif + +void DitaXmlGenerator::generateOverviewList(const Node *relative, CodeMarker * /* marker */) +{ + QMap > fakeNodeMap; + QMap groupTitlesMap; + QMap uncategorizedNodeMap; + QRegExp singleDigit("\\b([0-9])\\b"); + + const NodeList children = myTree->root()->childNodes(); + foreach (Node *child, children) { + if (child->type() == Node::Fake && child != relative) { + FakeNode *fakeNode = static_cast(child); + + // Check whether the page is part of a group or is the group + // definition page. + QString group; + bool isGroupPage = false; + if (fakeNode->doc().metaCommandsUsed().contains("group")) { + group = fakeNode->doc().metaCommandArgs("group")[0]; + isGroupPage = true; + } + + // there are too many examples; they would clutter the list + if (fakeNode->subType() == Node::Example) + continue; + + // not interested either in individual (Qt Designer etc.) manual chapters + if (fakeNode->links().contains(Node::ContentsLink)) + continue; + + // Discard external nodes. + if (fakeNode->subType() == Node::ExternalPage) + continue; + + QString sortKey = fakeNode->fullTitle().toLower(); + if (sortKey.startsWith("the ")) + sortKey.remove(0, 4); + sortKey.replace(singleDigit, "0\\1"); + + if (!group.isEmpty()) { + if (isGroupPage) { + // If we encounter a group definition page, we add all + // the pages in that group to the list for that group. + foreach (Node *member, fakeNode->groupMembers()) { + if (member->type() != Node::Fake) + continue; + FakeNode *page = static_cast(member); + if (page) { + QString sortKey = page->fullTitle().toLower(); + if (sortKey.startsWith("the ")) + sortKey.remove(0, 4); + sortKey.replace(singleDigit, "0\\1"); + fakeNodeMap[const_cast(fakeNode)].insert(sortKey, page); + groupTitlesMap[fakeNode->fullTitle()] = const_cast(fakeNode); + } + } + } + else if (!isGroupPage) { + // If we encounter a page that belongs to a group then + // we add that page to the list for that group. + const FakeNode *groupNode = static_cast(myTree->root()->findNode(group, Node::Fake)); + if (groupNode) + fakeNodeMap[groupNode].insert(sortKey, fakeNode); + //else + // uncategorizedNodeMap.insert(sortKey, fakeNode); + }// else + // uncategorizedNodeMap.insert(sortKey, fakeNode); + }// else + // uncategorizedNodeMap.insert(sortKey, fakeNode); + } + } + + // We now list all the pages found that belong to groups. + // If only certain pages were found for a group, but the definition page + // for that group wasn't listed, the list of pages will be intentionally + // incomplete. However, if the group definition page was listed, all the + // pages in that group are listed for completeness. + + if (!fakeNodeMap.isEmpty()) { + foreach (const QString &groupTitle, groupTitlesMap.keys()) { + const FakeNode *groupNode = groupTitlesMap[groupTitle]; + out() << QString("

      %2

      \n").arg( + linkForNode(groupNode, relative)).arg( + protectEnc(groupNode->fullTitle())); + + if (fakeNodeMap[groupNode].count() == 0) + continue; + + out() << "
        \n"; + + foreach (const FakeNode *fakeNode, fakeNodeMap[groupNode]) { + QString title = fakeNode->fullTitle(); + if (title.startsWith("The ")) + title.remove(0, 4); + out() << "
      • " + << protectEnc(title) << "
      • \n"; + } + out() << "
      \n"; + } + } + + if (!uncategorizedNodeMap.isEmpty()) { + out() << QString("

      Miscellaneous

      \n"); + out() << "
        \n"; + foreach (const FakeNode *fakeNode, uncategorizedNodeMap) { + QString title = fakeNode->fullTitle(); + if (title.startsWith("The ")) + title.remove(0, 4); + out() << "
      • " + << protectEnc(title) << "
      • \n"; + } + out() << "
      \n"; + } +} + +#ifdef QDOC_NAME_ALIGNMENT +void DitaXmlGenerator::generateSection(const NodeList& nl, + const Node *relative, + CodeMarker *marker, + CodeMarker::SynopsisStyle style) +{ + bool name_alignment = true; + if (!nl.isEmpty()) { + bool twoColumn = false; + if (style == CodeMarker::SeparateList) { + name_alignment = false; + twoColumn = (nl.count() >= 16); + } + else if (nl.first()->type() == Node::Property) { + twoColumn = (nl.count() >= 5); + name_alignment = false; + } + if (name_alignment) { + out() << "\n"; + } + else { + if (twoColumn) + out() << "
      \n" + << "\n"; + else + out() << "\n"; + i++; + ++m; + } + if (name_alignment) + out() << "
      "; + out() << "
        \n"; + } + + int i = 0; + NodeList::ConstIterator m = nl.begin(); + while (m != nl.end()) { + if ((*m)->access() == Node::Private) { + ++m; + continue; + } + + if (name_alignment) { + out() << "
      "; + } + else { + if (twoColumn && i == (int) (nl.count() + 1) / 2) + out() << "
        \n"; + out() << "
      • "; + } + + generateSynopsis(*m, relative, marker, style, name_alignment); + if (name_alignment) + out() << "
      \n"; + else { + out() << "
    \n"; + if (twoColumn) + out() << "\n\n"; + } + } +} + +void DitaXmlGenerator::generateSectionList(const Section& section, + const Node *relative, + CodeMarker *marker, + CodeMarker::SynopsisStyle style) +{ + bool name_alignment = true; + if (!section.members.isEmpty()) { + bool twoColumn = false; + if (style == CodeMarker::SeparateList) { + name_alignment = false; + twoColumn = (section.members.count() >= 16); + } + else if (section.members.first()->type() == Node::Property) { + twoColumn = (section.members.count() >= 5); + name_alignment = false; + } + if (name_alignment) { + out() << "\n"; + } + else { + if (twoColumn) + out() << "
    \n" + << "\n"; + else + out() << "\n"; + i++; + ++m; + } + if (name_alignment) + out() << "
    "; + out() << "
      \n"; + } + + int i = 0; + NodeList::ConstIterator m = section.members.begin(); + while (m != section.members.end()) { + if ((*m)->access() == Node::Private) { + ++m; + continue; + } + + if (name_alignment) { + out() << "
    "; + } + else { + if (twoColumn && i == (int) (section.members.count() + 1) / 2) + out() << "
      \n"; + out() << "
    • "; + } + + generateSynopsis(*m, relative, marker, style, name_alignment); + if (name_alignment) + out() << "
    \n"; + else { + out() << "
\n"; + if (twoColumn) + out() << "\n\n"; + } + } + + if (style == CodeMarker::Summary && !section.inherited.isEmpty()) { + out() << "
    \n"; + generateSectionInheritedList(section, relative, marker, name_alignment); + out() << "
\n"; + } +} + +void DitaXmlGenerator::generateSectionInheritedList(const Section& section, + const Node *relative, + CodeMarker *marker, + bool nameAlignment) +{ + QList >::ConstIterator p = section.inherited.begin(); + while (p != section.inherited.end()) { + if (nameAlignment) + out() << "
  • "; + else + out() << "
  • "; + out() << (*p).second << " "; + if ((*p).second == 1) { + out() << section.singularMember; + } + else { + out() << section.pluralMember; + } + out() << " inherited from " + << protectEnc(marker->plainFullName((*p).first, relative)) + << "
  • \n"; + ++p; + } +} + +void DitaXmlGenerator::generateSynopsis(const Node *node, + const Node *relative, + CodeMarker *marker, + CodeMarker::SynopsisStyle style, + bool nameAlignment) +{ + QString marked = marker->markedUpSynopsis(node, relative, style); + QRegExp templateTag("(<[^@>]*>)"); + if (marked.indexOf(templateTag) != -1) { + QString contents = protectEnc(marked.mid(templateTag.pos(1), + templateTag.cap(1).length())); + marked.replace(templateTag.pos(1), templateTag.cap(1).length(), + contents); + } + marked.replace(QRegExp("<@param>([a-z]+)_([1-9n])"), + "\\1\\2"); + marked.replace("<@param>", ""); + marked.replace("", ""); + + if (style == CodeMarker::Summary) { + marked.replace("<@name>", ""); // was "" + marked.replace("", ""); // was "" + } + + if (style == CodeMarker::SeparateList) { + QRegExp extraRegExp("<@extra>.*"); + extraRegExp.setMinimal(true); + marked.replace(extraRegExp, ""); + } else { + marked.replace("<@extra>", ""); + marked.replace("", ""); + } + + if (style != CodeMarker::Detailed) { + marked.replace("<@type>", ""); + marked.replace("", ""); + } + out() << highlightedCode(marked, marker, relative, style, nameAlignment); +} + +QString DitaXmlGenerator::highlightedCode(const QString& markedCode, + CodeMarker *marker, + const Node *relative, + CodeMarker::SynopsisStyle , + bool nameAlignment) +{ + QString src = markedCode; + QString html; + QStringRef arg; + QStringRef par1; + + const QChar charLangle = '<'; + const QChar charAt = '@'; + + // replace all <@link> tags: "(<@link node=\"([^\"]+)\">).*()" + static const QString linkTag("link"); + bool done = false; + for (int i = 0, n = src.size(); i < n;) { + if (src.at(i) == charLangle && src.at(i + 1).unicode() == '@') { + if (nameAlignment && !done) {// && (i != 0)) Why was this here? + html += ""; + done = true; + } + i += 2; + if (parseArg(src, linkTag, &i, n, &arg, &par1)) { + html += ""; + QString link = linkForNode( + CodeMarker::nodeForString(par1.toString()), relative); + addLink(link, arg, &html); + html += ""; + } + else { + html += charLangle; + html += charAt; + } + } + else { + html += src.at(i++); + } + } + + + if (slow) { + // is this block ever used at all? + // replace all <@func> tags: "(<@func target=\"([^\"]*)\">)(.*)()" + src = html; + html = QString(); + static const QString funcTag("func"); + for (int i = 0, n = src.size(); i < n;) { + if (src.at(i) == charLangle && src.at(i + 1) == charAt) { + i += 2; + if (parseArg(src, funcTag, &i, n, &arg, &par1)) { + QString link = linkForNode( + marker->resolveTarget(par1.toString(), + myTree, + relative), + relative); + addLink(link, arg, &html); + par1 = QStringRef(); + } + else { + html += charLangle; + html += charAt; + } + } + else { + html += src.at(i++); + } + } + } + + // replace all "(<@(type|headerfile|func)(?: +[^>]*)?>)(.*)()" tags + src = html; + html = QString(); + static const QString typeTags[] = { "type", "headerfile", "func" }; + for (int i = 0, n = src.size(); i < n;) { + if (src.at(i) == charLangle && src.at(i + 1) == charAt) { + i += 2; + bool handled = false; + for (int k = 0; k != 3; ++k) { + if (parseArg(src, typeTags[k], &i, n, &arg, &par1)) { + par1 = QStringRef(); + QString link = linkForNode( + marker->resolveTarget(arg.toString(), myTree, relative), + relative); + addLink(link, arg, &html); + handled = true; + break; + } + } + if (!handled) { + html += charLangle; + html += charAt; + } + } + else { + html += src.at(i++); + } + } + + // replace all + // "<@comment>" -> ""; + // "<@preprocessor>" -> ""; + // "<@string>" -> ""; + // "<@char>" -> ""; + // "" -> "" + src = html; + html = QString(); + static const QString spanTags[] = { + "<@comment>", "", + "<@preprocessor>", "", + "<@string>", "", + "<@char>", "", + "", "", + "","", + "", "", + "", "" + // "<@char>", "", + // "", "", + // "<@func>", "", + // "", "", + // "<@id>", "", + // "", "", + // "<@keyword>", "", + // "", "", + // "<@number>", "", + // "", "", + // "<@op>", "", + // "", "", + // "<@param>", "", + // "", "", + // "<@string>", "", + // "", "", + }; + for (int i = 0, n = src.size(); i < n;) { + if (src.at(i) == charLangle) { + bool handled = false; + for (int k = 0; k != 8; ++k) { + const QString & tag = spanTags[2 * k]; + if (tag == QStringRef(&src, i, tag.length())) { + html += spanTags[2 * k + 1]; + i += tag.length(); + handled = true; + break; + } + } + if (!handled) { + ++i; + if (src.at(i) == charAt || + (src.at(i) == QLatin1Char('/') && src.at(i + 1) == charAt)) { + // drop 'our' unknown tags (the ones still containing '@') + while (i < n && src.at(i) != QLatin1Char('>')) + ++i; + ++i; + } + else { + // retain all others + html += charLangle; + } + } + } + else { + html += src.at(i); + ++i; + } + } + + return html; +} + +#else +void DitaXmlGenerator::generateSectionList(const Section& section, + const Node *relative, + CodeMarker *marker, + CodeMarker::SynopsisStyle style) +{ + if (!section.members.isEmpty()) { + bool twoColumn = false; + if (style == CodeMarker::SeparateList) { + twoColumn = (section.members.count() >= 16); + } + else if (section.members.first()->type() == Node::Property) { + twoColumn = (section.members.count() >= 5); + } + if (twoColumn) + out() << "\n"; + if (++numTableRows % 2 == 1) + out() << ""; + else + out() << ""; + +// << "\n
    "; + out() << "
      \n"; + + int i = 0; + NodeList::ConstIterator m = section.members.begin(); + while (m != section.members.end()) { + if ((*m)->access() == Node::Private) { + ++m; + continue; + } + + if (twoColumn && i == (int) (section.members.count() + 1) / 2) + out() << "
      \n"; + + out() << "
    • "; + if (style == CodeMarker::Accessors) + out() << ""; + generateSynopsis(*m, relative, marker, style); + if (style == CodeMarker::Accessors) + out() << ""; + out() << "
    • \n"; + i++; + ++m; + } + out() << "
    \n"; + if (twoColumn) + out() << "
    \n"; + } + + if (style == CodeMarker::Summary && !section.inherited.isEmpty()) { + out() << "
      \n"; + generateSectionInheritedList(section, relative, marker); + out() << "
    \n"; + } +} + +void DitaXmlGenerator::generateSectionInheritedList(const Section& section, + const Node *relative, + CodeMarker *marker) +{ + QList >::ConstIterator p = section.inherited.begin(); + while (p != section.inherited.end()) { + out() << "
  • "; + out() << (*p).second << " "; + if ((*p).second == 1) { + out() << section.singularMember; + } else { + out() << section.pluralMember; + } + out() << " inherited from " + << protectEnc(marker->plainFullName((*p).first, relative)) + << "
  • \n"; + ++p; + } +} + +void DitaXmlGenerator::generateSynopsis(const Node *node, + const Node *relative, + CodeMarker *marker, + CodeMarker::SynopsisStyle style) +{ + QString marked = marker->markedUpSynopsis(node, relative, style); + QRegExp templateTag("(<[^@>]*>)"); + if (marked.indexOf(templateTag) != -1) { + QString contents = protectEnc(marked.mid(templateTag.pos(1), + templateTag.cap(1).length())); + marked.replace(templateTag.pos(1), templateTag.cap(1).length(), + contents); + } + marked.replace(QRegExp("<@param>([a-z]+)_([1-9n])"), "\\1\\2"); + marked.replace("<@param>", ""); + marked.replace("", ""); + + if (style == CodeMarker::Summary) + marked.replace("@name>", "b>"); + + if (style == CodeMarker::SeparateList) { + QRegExp extraRegExp("<@extra>.*"); + extraRegExp.setMinimal(true); + marked.replace(extraRegExp, ""); + } else { + marked.replace("<@extra>", ""); + marked.replace("", ""); + } + + if (style != CodeMarker::Detailed) { + marked.replace("<@type>", ""); + marked.replace("", ""); + } + out() << highlightedCode(marked, marker, relative); +} + +QString DitaXmlGenerator::highlightedCode(const QString& markedCode, + CodeMarker *marker, + const Node *relative) +{ + QString src = markedCode; + QString html; + QStringRef arg; + QStringRef par1; + + const QChar charLangle = '<'; + const QChar charAt = '@'; + + // replace all <@link> tags: "(<@link node=\"([^\"]+)\">).*()" + static const QString linkTag("link"); + for (int i = 0, n = src.size(); i < n;) { + if (src.at(i) == charLangle && src.at(i + 1) == charAt) { + i += 2; + if (parseArg(src, linkTag, &i, n, &arg, &par1)) { + const Node* node = CodeMarker::nodeForString(par1.toString()); + QString link = linkForNode(node, relative); + addLink(link, arg, &html); + } + else { + html += charLangle; + html += charAt; + } + } + else { + html += src.at(i++); + } + } + + if (slow) { + // is this block ever used at all? + // replace all <@func> tags: "(<@func target=\"([^\"]*)\">)(.*)()" + src = html; + html = QString(); + static const QString funcTag("func"); + for (int i = 0, n = src.size(); i < n;) { + if (src.at(i) == charLangle && src.at(i + 1) == charAt) { + i += 2; + if (parseArg(src, funcTag, &i, n, &arg, &par1)) { + QString link = linkForNode( + marker->resolveTarget(par1.toString(), + myTree, + relative), + relative); + addLink(link, arg, &html); + par1 = QStringRef(); + } + else { + html += charLangle; + html += charAt; + } + } + else { + html += src.at(i++); + } + } + } + + // replace all "(<@(type|headerfile|func)(?: +[^>]*)?>)(.*)()" tags + src = html; + html = QString(); + static const QString typeTags[] = { "type", "headerfile", "func" }; + for (int i = 0, n = src.size(); i < n;) { + if (src.at(i) == charLangle && src.at(i + 1) == charAt) { + i += 2; + bool handled = false; + for (int k = 0; k != 3; ++k) { + if (parseArg(src, typeTags[k], &i, n, &arg, &par1)) { + par1 = QStringRef(); + QString link = linkForNode( + marker->resolveTarget(arg.toString(), myTree, relative), + relative); + addLink(link, arg, &html); + handled = true; + break; + } + } + if (!handled) { + html += charLangle; + html += charAt; + } + } + else { + html += src.at(i++); + } + } + + // replace all + // "<@comment>" -> ""; + // "<@preprocessor>" -> ""; + // "<@string>" -> ""; + // "<@char>" -> ""; + // "" -> "" + src = html; + html = QString(); + static const QString spanTags[] = { + "<@comment>", "", + "<@preprocessor>", "", + "<@string>", "", + "<@char>", "", + "", "", + "","", + "", "", + "", "" + // "<@char>", "", + // "", "", + // "<@func>", "", + // "", "", + // "<@id>", "", + // "", "", + // "<@keyword>", "", + // "", "", + // "<@number>", "", + // "", "", + // "<@op>", "", + // "", "", + // "<@param>", "", + // "", "", + // "<@string>", "", + // "", "", + }; + for (int i = 0, n = src.size(); i < n;) { + if (src.at(i) == charLangle) { + bool handled = false; + for (int k = 0; k != 8; ++k) { + const QString & tag = spanTags[2 * k]; + if (tag == QStringRef(&src, i, tag.length())) { + html += spanTags[2 * k + 1]; + i += tag.length(); + handled = true; + break; + } + } + if (!handled) { + ++i; + if (src.at(i) == charAt || + (src.at(i) == QLatin1Char('/') && src.at(i + 1) == charAt)) { + // drop 'our' unknown tags (the ones still containing '@') + while (i < n && src.at(i) != QLatin1Char('>')) + ++i; + ++i; + } + else { + // retain all others + html += charLangle; + } + } + } + else { + html += src.at(i); + ++i; + } + } + + return html; +} +#endif + +void DitaXmlGenerator::generateLink(const Atom* atom, + const Node* /* relative */, + CodeMarker* marker) +{ + static QRegExp camelCase("[A-Z][A-Z][a-z]|[a-z][A-Z0-9]|_"); + + if (funcLeftParen.indexIn(atom->string()) != -1 && marker->recognizeLanguage("Cpp")) { + // hack for C++: move () outside of link + int k = funcLeftParen.pos(1); + out() << protectEnc(atom->string().left(k)); + if (link.isEmpty()) { + if (showBrokenLinks) + out() << ""; + } else { + out() << ""; + } + inLink = false; + out() << protectEnc(atom->string().mid(k)); + } else if (marker->recognizeLanguage("Java")) { + // hack for Java: remove () and use when appropriate + bool func = atom->string().endsWith("()"); + bool tt = (func || atom->string().contains(camelCase)); + if (tt) + out() << ""; + if (func) { + out() << protectEnc(atom->string().left(atom->string().length() - 2)); + } else { + out() << protectEnc(atom->string()); + } + out() << ""; + } else { + out() << protectEnc(atom->string()); + } +} + +QString DitaXmlGenerator::cleanRef(const QString& ref) +{ + QString clean; + + if (ref.isEmpty()) + return clean; + + clean.reserve(ref.size() + 20); + const QChar c = ref[0]; + const uint u = c.unicode(); + + if ((u >= 'a' && u <= 'z') || + (u >= 'A' && u <= 'Z') || + (u >= '0' && u <= '9')) { + clean += c; + } else if (u == '~') { + clean += "dtor."; + } else if (u == '_') { + clean += "underscore."; + } else { + clean += "A"; + } + + for (int i = 1; i < (int) ref.length(); i++) { + const QChar c = ref[i]; + const uint u = c.unicode(); + if ((u >= 'a' && u <= 'z') || + (u >= 'A' && u <= 'Z') || + (u >= '0' && u <= '9') || u == '-' || + u == '_' || u == ':' || u == '.') { + clean += c; + } else if (c.isSpace()) { + clean += "-"; + } else if (u == '!') { + clean += "-not"; + } else if (u == '&') { + clean += "-and"; + } else if (u == '<') { + clean += "-lt"; + } else if (u == '=') { + clean += "-eq"; + } else if (u == '>') { + clean += "-gt"; + } else if (u == '#') { + clean += "#"; + } else { + clean += "-"; + clean += QString::number((int)u, 16); + } + } + return clean; +} + +QString DitaXmlGenerator::registerRef(const QString& ref) +{ + QString clean = DitaXmlGenerator::cleanRef(ref); + + for (;;) { + QString& prevRef = refMap[clean.toLower()]; + if (prevRef.isEmpty()) { + prevRef = ref; + break; + } else if (prevRef == ref) { + break; + } + clean += "x"; + } + return clean; +} + +QString DitaXmlGenerator::protectEnc(const QString &string) +{ + return protect(string, outputEncoding); +} + +QString DitaXmlGenerator::protect(const QString &string, const QString &outputEncoding) +{ +#define APPEND(x) \ + if (html.isEmpty()) { \ + html = string; \ + html.truncate(i); \ + } \ + html += (x); + + QString html; + int n = string.length(); + + for (int i = 0; i < n; ++i) { + QChar ch = string.at(i); + + if (ch == QLatin1Char('&')) { + APPEND("&"); + } else if (ch == QLatin1Char('<')) { + APPEND("<"); + } else if (ch == QLatin1Char('>')) { + APPEND(">"); + } else if (ch == QLatin1Char('"')) { + APPEND("""); + } else if ((outputEncoding == "ISO-8859-1" && ch.unicode() > 0x007F) + || (ch == QLatin1Char('*') && i + 1 < n && string.at(i) == QLatin1Char('/')) + || (ch == QLatin1Char('.') && i > 2 && string.at(i - 2) == QLatin1Char('.'))) { + // we escape '*/' and the last dot in 'e.g.' and 'i.e.' for the Javadoc generator + APPEND("&#x"); + html += QString::number(ch.unicode(), 16); + html += QLatin1Char(';'); + } else { + if (!html.isEmpty()) + html += ch; + } + } + + if (!html.isEmpty()) + return html; + return string; + +#undef APPEND +} + +QString DitaXmlGenerator::fileBase(const Node *node) +{ + QString result; + + result = PageGenerator::fileBase(node); + + if (!node->isInnerNode()) { + switch (node->status()) { + case Node::Compat: + result += "-qt3"; + break; + case Node::Obsolete: + result += "-obsolete"; + break; + default: + ; + } + } + return result; +} + +#if 0 +QString DitaXmlGenerator::fileBase(const Node *node, + const SectionIterator& section) +{ + QStringList::ConstIterator s = section.sectionNumber().end(); + QStringList::ConstIterator b = section.baseNameStack().end(); + + QString suffix; + QString base = fileBase(node); + + while (s != section.sectionNumber().begin()) { + --s; + --b; + if (!(*b).isEmpty()) { + base = *b; + break; + } + suffix.prepend("-" + *s); + } + return base + suffix; +} +#endif + +QString DitaXmlGenerator::fileName(const Node *node) +{ + if (node->type() == Node::Fake) { + if (static_cast(node)->subType() == Node::ExternalPage) + return node->name(); + if (static_cast(node)->subType() == Node::Image) + return node->name(); + } + return PageGenerator::fileName(node); +} + +QString DitaXmlGenerator::refForNode(const Node *node) +{ + const FunctionNode *func; + const TypedefNode *typedeffe; + QString ref; + + switch (node->type()) { + case Node::Namespace: + case Node::Class: + default: + break; + case Node::Enum: + ref = node->name() + "-enum"; + break; + case Node::Typedef: + typedeffe = static_cast(node); + if (typedeffe->associatedEnum()) { + return refForNode(typedeffe->associatedEnum()); + } + else { + ref = node->name() + "-typedef"; + } + break; + case Node::Function: + func = static_cast(node); + if (func->associatedProperty()) { + return refForNode(func->associatedProperty()); + } + else { + ref = func->name(); + if (func->overloadNumber() != 1) + ref += "-" + QString::number(func->overloadNumber()); + } + break; +#ifdef QDOC_QML + case Node::Fake: + if (node->subType() != Node::QmlPropertyGroup) + break; + case Node::QmlProperty: +#endif + case Node::Property: + ref = node->name() + "-prop"; + break; +#ifdef QDOC_QML + case Node::QmlSignal: + ref = node->name() + "-signal"; + break; + case Node::QmlMethod: + ref = node->name() + "-method"; + break; +#endif + case Node::Variable: + ref = node->name() + "-var"; + break; + case Node::Target: + return protectEnc(node->name()); + } + return registerRef(ref); +} + +QString DitaXmlGenerator::linkForNode(const Node *node, const Node *relative) +{ + QString link; + QString fn; + QString ref; + + if (node == 0 || node == relative) + return QString(); + if (!node->url().isEmpty()) + return node->url(); + if (fileBase(node).isEmpty()) + return QString(); + if (node->access() == Node::Private) + return QString(); + + fn = fileName(node); +/* if (!node->url().isEmpty()) + return fn;*/ +#if 0 + // ### reintroduce this test, without breaking .dcf files + if (fn != outFileName()) +#endif + link += fn; + + if (!node->isInnerNode() || node->subType() == Node::QmlPropertyGroup) { + ref = refForNode(node); + if (relative && fn == fileName(relative) && ref == refForNode(relative)) + return QString(); + + link += "#"; + link += ref; + } + return link; +} + +QString DitaXmlGenerator::refForAtom(Atom *atom, const Node * /* node */) +{ + if (atom->type() == Atom::SectionLeft) { + return Doc::canonicalTitle(Text::sectionHeading(atom).toString()); + } + else if (atom->type() == Atom::Target) { + return Doc::canonicalTitle(atom->string()); + } + else { + return QString(); + } +} + +void DitaXmlGenerator::generateFullName(const Node *apparentNode, + const Node *relative, + CodeMarker *marker, + const Node *actualNode) +{ + if (actualNode == 0) + actualNode = apparentNode; + out() << "status() != actualNode->status()) { + switch (actualNode->status()) { + case Node::Obsolete: + out() << "\" class=\"obsolete"; + break; + case Node::Compat: + out() << "\" class=\"compat"; + break; + default: + ; + } + } + out() << "\">"; + out() << protectEnc(fullName(apparentNode, relative, marker)); + out() << ""; +} + +void DitaXmlGenerator::generateDetailedMember(const Node *node, + const InnerNode *relative, + CodeMarker *marker) +{ + const EnumNode *enume; + +#ifdef GENERATE_MAC_REFS + generateMacRef(node, marker); +#endif + if (node->type() == Node::Enum + && (enume = static_cast(node))->flagsType()) { +#ifdef GENERATE_MAC_REFS + generateMacRef(enume->flagsType(), marker); +#endif + out() << "

    "; + out() << ""; + generateSynopsis(enume, relative, marker, CodeMarker::Detailed); + out() << "
    "; + generateSynopsis(enume->flagsType(), + relative, + marker, + CodeMarker::Detailed); + out() << "

    \n"; + } + else { + out() << "

    "; + out() << ""; + generateSynopsis(node, relative, marker, CodeMarker::Detailed); + out() << "

    \n"; + } + + generateStatus(node, marker); + generateBody(node, marker); + generateThreadSafeness(node, marker); + generateSince(node, marker); + + if (node->type() == Node::Property) { + const PropertyNode *property = static_cast(node); + Section section; + + section.members += property->getters(); + section.members += property->setters(); + section.members += property->resetters(); + + if (!section.members.isEmpty()) { + out() << "

    Access functions:

    \n"; + generateSectionList(section, node, marker, CodeMarker::Accessors); + } + + Section notifiers; + notifiers.members += property->notifiers(); + + if (!notifiers.members.isEmpty()) { + out() << "

    Notifier signal:

    \n"; + //out() << "

    This signal is emitted when the property value is changed.

    \n"; + generateSectionList(notifiers, node, marker, CodeMarker::Accessors); + } + } + else if (node->type() == Node::Enum) { + const EnumNode *enume = static_cast(node); + if (enume->flagsType()) { + out() << "

    The " << protectEnc(enume->flagsType()->name()) + << " type is a typedef for " + << "QFlags<" + << protectEnc(enume->name()) + << ">. It stores an OR combination of " + << protectEnc(enume->name()) + << " values.

    \n"; + } + } + generateAlsoList(node, marker); +} + +void DitaXmlGenerator::findAllClasses(const InnerNode *node) +{ + NodeList::const_iterator c = node->childNodes().constBegin(); + while (c != node->childNodes().constEnd()) { + if ((*c)->access() != Node::Private && (*c)->url().isEmpty()) { + if ((*c)->type() == Node::Class && !(*c)->doc().isEmpty()) { + QString className = (*c)->name(); + if ((*c)->parent() && + (*c)->parent()->type() == Node::Namespace && + !(*c)->parent()->name().isEmpty()) + className = (*c)->parent()->name()+"::"+className; + + if (!(static_cast(*c))->hideFromMainList()) { + if ((*c)->status() == Node::Compat) { + compatClasses.insert(className, *c); + } + else if ((*c)->status() == Node::Obsolete) { + obsoleteClasses.insert(className, *c); + } + else { + nonCompatClasses.insert(className, *c); + if ((*c)->status() == Node::Main) + mainClasses.insert(className, *c); + } + } + + QString moduleName = (*c)->moduleName(); + if (moduleName == "Qt3SupportLight") { + moduleClassMap[moduleName].insert((*c)->name(), *c); + moduleName = "Qt3Support"; + } + if (!moduleName.isEmpty()) + moduleClassMap[moduleName].insert((*c)->name(), *c); + + QString serviceName = + (static_cast(*c))->serviceName(); + if (!serviceName.isEmpty()) + serviceClasses.insert(serviceName, *c); + } + else if ((*c)->isInnerNode()) { + findAllClasses(static_cast(*c)); + } + } + ++c; + } +} + +/*! + For generating the "New Classes... in 4.6" section on the + What's New in 4.6" page. + */ +void DitaXmlGenerator::findAllSince(const InnerNode *node) +{ + NodeList::const_iterator child = node->childNodes().constBegin(); + while (child != node->childNodes().constEnd()) { + QString sinceVersion = (*child)->since(); + if (((*child)->access() != Node::Private) && !sinceVersion.isEmpty()) { + NewSinceMaps::iterator nsmap = newSinceMaps.find(sinceVersion); + if (nsmap == newSinceMaps.end()) + nsmap = newSinceMaps.insert(sinceVersion,NodeMultiMap()); + NewClassMaps::iterator ncmap = newClassMaps.find(sinceVersion); + if (ncmap == newClassMaps.end()) + ncmap = newClassMaps.insert(sinceVersion,NodeMap()); + NewClassMaps::iterator nqcmap = newQmlClassMaps.find(sinceVersion); + if (nqcmap == newQmlClassMaps.end()) + nqcmap = newQmlClassMaps.insert(sinceVersion,NodeMap()); + + if ((*child)->type() == Node::Function) { + FunctionNode *func = static_cast(*child); + if ((func->status() > Node::Obsolete) && + (func->metaness() != FunctionNode::Ctor) && + (func->metaness() != FunctionNode::Dtor)) { + nsmap.value().insert(func->name(),(*child)); + } + } + else if ((*child)->url().isEmpty()) { + if ((*child)->type() == Node::Class && !(*child)->doc().isEmpty()) { + QString className = (*child)->name(); + if ((*child)->parent() && + (*child)->parent()->type() == Node::Namespace && + !(*child)->parent()->name().isEmpty()) + className = (*child)->parent()->name()+"::"+className; + nsmap.value().insert(className,(*child)); + ncmap.value().insert(className,(*child)); + } + else if ((*child)->subType() == Node::QmlClass) { + QString className = (*child)->name(); + if ((*child)->parent() && + (*child)->parent()->type() == Node::Namespace && + !(*child)->parent()->name().isEmpty()) + className = (*child)->parent()->name()+"::"+className; + nsmap.value().insert(className,(*child)); + nqcmap.value().insert(className,(*child)); + } + } + else { + QString name = (*child)->name(); + if ((*child)->parent() && + (*child)->parent()->type() == Node::Namespace && + !(*child)->parent()->name().isEmpty()) + name = (*child)->parent()->name()+"::"+name; + nsmap.value().insert(name,(*child)); + } + if ((*child)->isInnerNode()) { + findAllSince(static_cast(*child)); + } + } + ++child; + } +} + +#if 0 + const QRegExp versionSeparator("[\\-\\.]"); + const int minorIndex = version.indexOf(versionSeparator); + const int patchIndex = version.indexOf(versionSeparator, minorIndex+1); + version = version.left(patchIndex); +#endif + +void DitaXmlGenerator::findAllFunctions(const InnerNode *node) +{ + NodeList::ConstIterator c = node->childNodes().begin(); + while (c != node->childNodes().end()) { + if ((*c)->access() != Node::Private) { + if ((*c)->isInnerNode() && (*c)->url().isEmpty()) { + findAllFunctions(static_cast(*c)); + } + else if ((*c)->type() == Node::Function) { + const FunctionNode *func = static_cast(*c); + if ((func->status() > Node::Obsolete) && + (func->metaness() != FunctionNode::Ctor) && + (func->metaness() != FunctionNode::Dtor)) { + funcIndex[(*c)->name()].insert(myTree->fullDocumentName((*c)->parent()), *c); + } + } + } + ++c; + } +} + +void DitaXmlGenerator::findAllLegaleseTexts(const InnerNode *node) +{ + NodeList::ConstIterator c = node->childNodes().begin(); + while (c != node->childNodes().end()) { + if ((*c)->access() != Node::Private) { + if (!(*c)->doc().legaleseText().isEmpty()) + legaleseTexts.insertMulti((*c)->doc().legaleseText(), *c); + if ((*c)->isInnerNode()) + findAllLegaleseTexts(static_cast(*c)); + } + ++c; + } +} + +void DitaXmlGenerator::findAllNamespaces(const InnerNode *node) +{ + NodeList::ConstIterator c = node->childNodes().begin(); + while (c != node->childNodes().end()) { + if ((*c)->access() != Node::Private) { + if ((*c)->isInnerNode() && (*c)->url().isEmpty()) { + findAllNamespaces(static_cast(*c)); + if ((*c)->type() == Node::Namespace) { + const NamespaceNode *nspace = static_cast(*c); + // Ensure that the namespace's name is not empty (the root + // namespace has no name). + if (!nspace->name().isEmpty()) { + namespaceIndex.insert(nspace->name(), *c); + QString moduleName = (*c)->moduleName(); + if (moduleName == "Qt3SupportLight") { + moduleNamespaceMap[moduleName].insert((*c)->name(), *c); + moduleName = "Qt3Support"; + } + if (!moduleName.isEmpty()) + moduleNamespaceMap[moduleName].insert((*c)->name(), *c); + } + } + } + } + ++c; + } +} + +#ifdef ZZZ_QDOC_QML +/*! + This function finds all the qml element nodes and + stores them in a map for later use. + */ +void DitaXmlGenerator::findAllQmlClasses(const InnerNode *node) +{ + NodeList::const_iterator c = node->childNodes().constBegin(); + while (c != node->childNodes().constEnd()) { + if ((*c)->type() == Node::Fake) { + const FakeNode* fakeNode = static_cast(*c); + if (fakeNode->subType() == Node::QmlClass) { + const QmlClassNode* qmlNode = + static_cast(fakeNode); + const Node* n = qmlNode->classNode(); + } + qmlClasses.insert(fakeNode->name(),*c); + } + ++c; + } +} +#endif + +int DitaXmlGenerator::hOffset(const Node *node) +{ + switch (node->type()) { + case Node::Namespace: + case Node::Class: + return 2; + case Node::Fake: + return 1; +#if 0 + if (node->doc().briefText().isEmpty()) + return 1; + else + return 2; +#endif + case Node::Enum: + case Node::Typedef: + case Node::Function: + case Node::Property: + default: + return 3; + } +} + +bool DitaXmlGenerator::isThreeColumnEnumValueTable(const Atom *atom) +{ + while (atom != 0 && !(atom->type() == Atom::ListRight && atom->string() == ATOM_LIST_VALUE)) { + if (atom->type() == Atom::ListItemLeft && !matchAhead(atom, Atom::ListItemRight)) + return true; + atom = atom->next(); + } + return false; +} + +const Node *DitaXmlGenerator::findNodeForTarget(const QString &target, + const Node *relative, + CodeMarker *marker, + const Atom *atom) +{ + const Node *node = 0; + + if (target.isEmpty()) { + node = relative; + } + else if (target.endsWith(".html")) { + node = myTree->root()->findNode(target, Node::Fake); + } + else if (marker) { + node = marker->resolveTarget(target, myTree, relative); + if (!node) + node = myTree->findFakeNodeByTitle(target); + if (!node && atom) { + node = myTree->findUnambiguousTarget(target, + *const_cast(&atom)); + } + } + + if (!node) + relative->doc().location().warning(tr("Cannot link to '%1'").arg(target)); + + return node; +} + +const QPair DitaXmlGenerator::anchorForNode(const Node *node) +{ + QPair anchorPair; + + anchorPair.first = PageGenerator::fileName(node); + if (node->type() == Node::Fake) { + const FakeNode *fakeNode = static_cast(node); + anchorPair.second = fakeNode->title(); + } + + return anchorPair; +} + +QString DitaXmlGenerator::getLink(const Atom *atom, + const Node *relative, + CodeMarker *marker, + const Node** node) +{ + QString link; + *node = 0; + inObsoleteLink = false; + + if (atom->string().contains(":") && + (atom->string().startsWith("file:") + || atom->string().startsWith("http:") + || atom->string().startsWith("https:") + || atom->string().startsWith("ftp:") + || atom->string().startsWith("mailto:"))) { + + link = atom->string(); + } + else { + QStringList path; + if (atom->string().contains('#')) { + path = atom->string().split('#'); + } + else { + path.append(atom->string()); + } + + Atom *targetAtom = 0; + + QString first = path.first().trimmed(); + if (first.isEmpty()) { + *node = relative; + } + else if (first.endsWith(".html")) { + *node = myTree->root()->findNode(first, Node::Fake); + } + else { + *node = marker->resolveTarget(first, myTree, relative); + if (!*node) { + *node = myTree->findFakeNodeByTitle(first); + } + if (!*node) { + *node = myTree->findUnambiguousTarget(first, targetAtom); + } + } + + if (*node) { + if (!(*node)->url().isEmpty()) + return (*node)->url(); + else + path.removeFirst(); + } + else { + *node = relative; + } + + if (*node) { + if ((*node)->status() == Node::Obsolete) { + if (relative) { + if (relative->parent() != *node) { + if (relative->status() != Node::Obsolete) { + bool porting = false; + if (relative->type() == Node::Fake) { + const FakeNode* fake = static_cast(relative); + if (fake->title().startsWith("Porting")) + porting = true; + } + QString name = marker->plainFullName(relative); + if (!porting && !name.startsWith("Q3")) { + if (obsoleteLinks) { + relative->doc().location().warning(tr("Link to obsolete item '%1' in %2") + .arg(atom->string()) + .arg(name)); + } + inObsoleteLink = true; + } + } + } + } + else { + qDebug() << "Link to Obsolete entity" + << (*node)->name() << "no relative"; + } + } +#if 0 + else if ((*node)->status() == Node::Deprecated) { + qDebug() << "Link to Deprecated entity"; + } + else if ((*node)->status() == Node::Internal) { + qDebug() << "Link to Internal entity"; + } +#endif + } + + while (!path.isEmpty()) { + targetAtom = myTree->findTarget(path.first(), *node); + if (targetAtom == 0) + break; + path.removeFirst(); + } + + if (path.isEmpty()) { + link = linkForNode(*node, relative); + if (*node && (*node)->subType() == Node::Image) + link = "images/used-in-examples/" + link; + if (targetAtom) + link += "#" + refForAtom(targetAtom, *node); + } + } + return link; +} + +void DitaXmlGenerator::generateDcf(const QString &fileBase, + const QString &startPage, + const QString &title, + DcfSection &dcfRoot) +{ + dcfRoot.ref = startPage; + dcfRoot.title = title; + generateDcfSections(dcfRoot, outputDir() + "/" + fileBase + ".dcf", fileBase + "/reference"); +} + +void DitaXmlGenerator::generateIndex(const QString &fileBase, + const QString &url, + const QString &title) +{ + myTree->generateIndex(outputDir() + "/" + fileBase + ".index", url, title); +} + +void DitaXmlGenerator::generateStatus(const Node *node, CodeMarker *marker) +{ + Text text; + + switch (node->status()) { + case Node::Obsolete: + if (node->isInnerNode()) + Generator::generateStatus(node, marker); + break; + case Node::Compat: + if (node->isInnerNode()) { + text << Atom::ParaLeft + << Atom(Atom::FormattingLeft,ATOM_FORMATTING_BOLD) + << "This " + << typeString(node) + << " is part of the Qt 3 support library." + << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD) + << " It is provided to keep old source code working. " + << "We strongly advise against " + << "using it in new code. See "; + + const FakeNode *fakeNode = myTree->findFakeNodeByTitle("Porting To Qt 4"); + Atom *targetAtom = 0; + if (fakeNode && node->type() == Node::Class) { + QString oldName(node->name()); + targetAtom = myTree->findTarget(oldName.replace("3", ""), + fakeNode); + } + + if (targetAtom) { + text << Atom(Atom::Link, linkForNode(fakeNode, node) + "#" + + refForAtom(targetAtom, fakeNode)); + } + else + text << Atom(Atom::Link, "Porting to Qt 4"); + + text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) + << Atom(Atom::String, "Porting to Qt 4") + << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) + << " for more information." + << Atom::ParaRight; + } + generateText(text, node, marker); + break; + default: + Generator::generateStatus(node, marker); + } +} + +#ifdef GENERATE_MAC_REFS +/* + No longer valid. + */ +void DitaXmlGenerator::generateMacRef(const Node *node, CodeMarker *marker) +{ + if (!pleaseGenerateMacRef || marker == 0) + return; + + QStringList macRefs = marker->macRefsForNode(node); + foreach (const QString &macRef, macRefs) + out() << "\n"; +} +#endif + +void DitaXmlGenerator::beginLink(const QString &link, + const Node *node, + const Node *relative, + CodeMarker *marker) +{ + Q_UNUSED(marker) + Q_UNUSED(relative) + + this->link = link; + if (link.isEmpty()) { + if (showBrokenLinks) + out() << ""; + } + else if (node == 0 || (relative != 0 && + node->status() == relative->status())) { + out() << ""; + } + else { + switch (node->status()) { + case Node::Obsolete: + out() << ""; + break; + case Node::Compat: + out() << ""; + break; + default: + out() << ""; + } + } + inLink = true; +} + +void DitaXmlGenerator::endLink() +{ + if (inLink) { + if (link.isEmpty()) { + if (showBrokenLinks) + out() << ""; + } + else { + if (inObsoleteLink) { + out() << "(obsolete)"; + } + out() << ""; + } + } + inLink = false; + inObsoleteLink = false; +} + +#ifdef QDOC_QML + +/*! + Generates the summary for the \a section. Only used for + sections of QML element documentation. + + Currently handles only the QML property group. + */ +void DitaXmlGenerator::generateQmlSummary(const Section& section, + const Node *relative, + CodeMarker *marker) +{ + if (!section.members.isEmpty()) { + NodeList::ConstIterator m; + int count = section.members.size(); + bool twoColumn = false; + if (section.members.first()->type() == Node::QmlProperty) { + twoColumn = (count >= 5); + } + if (twoColumn) + out() << "\n"; + if (++numTableRows % 2 == 1) + out() << ""; + else + out() << ""; + // << "\n
    "; + out() << "
      \n"; + + int row = 0; + m = section.members.begin(); + while (m != section.members.end()) { + if (twoColumn && row == (int) (count + 1) / 2) + out() << "
      \n"; + out() << "
    • "; + generateQmlItem(*m,relative,marker,true); + out() << "
    • \n"; + row++; + ++m; + } + out() << "
    \n"; + if (twoColumn) + out() << "
    \n"; + } +} + +/*! + Outputs the html detailed documentation for a section + on a QML element reference page. + */ +void DitaXmlGenerator::generateDetailedQmlMember(const Node *node, + const InnerNode *relative, + CodeMarker *marker) +{ + const QmlPropertyNode* qpn = 0; +#ifdef GENERATE_MAC_REFS + generateMacRef(node, marker); +#endif + out() << "
    "; + if (node->subType() == Node::QmlPropertyGroup) { + const QmlPropGroupNode* qpgn = static_cast(node); + NodeList::ConstIterator p = qpgn->childNodes().begin(); + out() << "
    "; + out() << ""; + + while (p != qpgn->childNodes().end()) { + if ((*p)->type() == Node::QmlProperty) { + qpn = static_cast(*p); + + if (++numTableRows % 2 == 1) + out() << ""; + else + out() << ""; + + out() << ""; + } + ++p; + } + out() << "

    "; + //out() << "

    "; // old + out() << ""; + if (!qpn->isWritable()) + out() << "read-only"; + if (qpgn->isDefault()) + out() << "default"; + generateQmlItem(qpn, relative, marker, false); + out() << "
    "; + out() << "
    "; + } + else if (node->type() == Node::QmlSignal) { + const FunctionNode* qsn = static_cast(node); + out() << "
    "; + out() << ""; + //out() << ""; + if (++numTableRows % 2 == 1) + out() << ""; + else + out() << ""; + out() << ""; + out() << "

    "; + out() << ""; + generateSynopsis(qsn,relative,marker,CodeMarker::Detailed,false); + //generateQmlItem(qsn,relative,marker,false); + out() << "

    "; + out() << "
    "; + } + else if (node->type() == Node::QmlMethod) { + const FunctionNode* qmn = static_cast(node); + out() << "
    "; + out() << ""; + //out() << ""; + if (++numTableRows % 2 == 1) + out() << ""; + else + out() << ""; + out() << ""; + out() << "

    "; + out() << ""; + generateSynopsis(qmn,relative,marker,CodeMarker::Detailed,false); + out() << "

    "; + out() << "
    "; + } + out() << "
    "; + generateStatus(node, marker); + generateBody(node, marker); + generateThreadSafeness(node, marker); + generateSince(node, marker); + generateAlsoList(node, marker); + out() << "
    "; + out() << "
    "; +} + +/*! + Output the "Inherits" line for the QML element, + if there should be one. + */ +void DitaXmlGenerator::generateQmlInherits(const QmlClassNode* cn, + CodeMarker* marker) +{ + if (cn && !cn->links().empty()) { + if (cn->links().contains(Node::InheritsLink)) { + QPair linkPair; + linkPair = cn->links()[Node::InheritsLink]; + QStringList strList(linkPair.first); + const Node* n = myTree->findNode(strList,Node::Fake); + if (n && n->subType() == Node::QmlClass) { + const QmlClassNode* qcn = static_cast(n); + out() << "

    "; + Text text; + text << "[Inherits "; + text << Atom(Atom::LinkNode,CodeMarker::stringForNode(qcn)); + text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK); + text << Atom(Atom::String, linkPair.second); + text << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); + text << "]"; + generateText(text, cn, marker); + out() << "

    "; + } + } + } +} + +/*! + Output the "Inherit by" list for the QML element, + if it is inherited by any other elements. + */ +void DitaXmlGenerator::generateQmlInheritedBy(const QmlClassNode* cn, + CodeMarker* marker) +{ + if (cn) { + NodeList subs; + QmlClassNode::subclasses(cn->name(),subs); + if (!subs.isEmpty()) { + Text text; + text << Atom::ParaLeft << "Inherited by "; + appendSortedQmlNames(text,cn,subs,marker); + text << Atom::ParaRight; + generateText(text, cn, marker); + } + } +} + +/*! + Output the "[Xxx instantiates the C++ class QmlGraphicsXxx]" + line for the QML element, if there should be one. + + If there is no class node, or if the class node status + is set to Node::Internal, do nothing. + */ +void DitaXmlGenerator::generateQmlInstantiates(const QmlClassNode* qcn, + CodeMarker* marker) +{ + const ClassNode* cn = qcn->classNode(); + if (cn && (cn->status() != Node::Internal)) { + out() << "

    "; + Text text; + text << "["; + text << Atom(Atom::LinkNode,CodeMarker::stringForNode(qcn)); + text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK); + text << Atom(Atom::String, qcn->name()); + text << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); + text << " instantiates the C++ class "; + text << Atom(Atom::LinkNode,CodeMarker::stringForNode(cn)); + text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK); + text << Atom(Atom::String, cn->name()); + text << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); + text << "]"; + generateText(text, qcn, marker); + out() << "

    "; + } +} + +/*! + Output the "[QmlGraphicsXxx is instantiated by QML element Xxx]" + line for the class, if there should be one. + + If there is no QML element, or if the class node status + is set to Node::Internal, do nothing. + */ +void DitaXmlGenerator::generateInstantiatedBy(const ClassNode* cn, + CodeMarker* marker) +{ + if (cn && cn->status() != Node::Internal && !cn->qmlElement().isEmpty()) { + const Node* n = myTree->root()->findNode(cn->qmlElement(),Node::Fake); + if (n && n->subType() == Node::QmlClass) { + out() << "

    "; + Text text; + text << "["; + text << Atom(Atom::LinkNode,CodeMarker::stringForNode(cn)); + text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK); + text << Atom(Atom::String, cn->name()); + text << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); + text << " is instantiated by QML element "; + text << Atom(Atom::LinkNode,CodeMarker::stringForNode(n)); + text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK); + text << Atom(Atom::String, n->name()); + text << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); + text << "]"; + generateText(text, cn, marker); + out() << "

    "; + } + } +} + +/*! + Generate the element for the given \a node using the \a writer. + Return true if a element was written; otherwise return false. + */ +bool DitaXmlGenerator::generatePageElement(QXmlStreamWriter& writer, + const Node* node, + CodeMarker* marker) const +{ + if (node->pageType() == Node::NoPageType) + return false; + if (node->name().isEmpty()) + return true; + if (node->access() == Node::Private) + return false; + if (!node->isInnerNode()) + return false; + + QString title; + QString rawTitle; + QString fullTitle; + const InnerNode* inner = static_cast(node); + + writer.writeStartElement("page"); + QXmlStreamAttributes attributes; + QString t; + t.setNum(id++); + switch (node->type()) { + case Node::Fake: + { + const FakeNode* fake = static_cast(node); + title = fake->fullTitle(); + break; + } + case Node::Class: + { + title = node->name() + " Class Reference"; + break; + } + case Node::Namespace: + { + rawTitle = marker->plainName(inner); + fullTitle = marker->plainFullName(inner); + title = rawTitle + " Namespace Reference"; + break; + } + default: + title = node->name(); + break; + } + writer.writeAttribute("id",t); + writer.writeStartElement("pageWords"); + writer.writeCharacters(title); + if (!inner->pageKeywords().isEmpty()) { + const QStringList& w = inner->pageKeywords(); + for (int i = 0; i < w.size(); ++i) { + writer.writeCharacters(" "); + writer.writeCharacters(w.at(i).toLocal8Bit().constData()); + } + } + writer.writeEndElement(); + writer.writeStartElement("pageTitle"); + writer.writeCharacters(title); + writer.writeEndElement(); + writer.writeStartElement("pageUrl"); + writer.writeCharacters(PageGenerator::fileName(node)); + writer.writeEndElement(); + writer.writeStartElement("pageType"); + switch (node->pageType()) { + case Node::ApiPage: + writer.writeCharacters("APIPage"); + break; + case Node::ArticlePage: + writer.writeCharacters("Article"); + break; + case Node::ExamplePage: + writer.writeCharacters("Example"); + break; + default: + break; + } + writer.writeEndElement(); + writer.writeEndElement(); + return true; +} + +/*! + Traverse the tree recursively and generate the + elements. + */ +void DitaXmlGenerator::generatePageElements(QXmlStreamWriter& writer, const Node* node, CodeMarker* marker) const +{ + if (generatePageElement(writer, node, marker)) { + + if (node->isInnerNode()) { + const InnerNode *inner = static_cast(node); + + // Recurse to write an element for this child node and all its children. + foreach (const Node *child, inner->childNodes()) + generatePageElements(writer, child, marker); + } + } +} + +/*! + Outputs the file containing the index used for searching the html docs. + */ +void DitaXmlGenerator::generatePageIndex(const QString& fileName, CodeMarker* marker) const +{ + QFile file(fileName); + if (!file.open(QFile::WriteOnly | QFile::Text)) + return ; + + QXmlStreamWriter writer(&file); + writer.setAutoFormatting(true); + writer.writeStartDocument(); + writer.writeStartElement("qtPageIndex"); + + generatePageElements(writer, myTree->root(), marker); + + writer.writeEndElement(); // qtPageIndex + writer.writeEndDocument(); + file.close(); +} + +#endif + +#if 0 // fossil removed for new doc format MWS 19/04/2010 + out() << "\n"; + out() << QString("\n").arg(naturalLanguage); + + QString shortVersion; + if ((project != "Qtopia") && (project != "Qt Extended")) { + shortVersion = project + " " + shortVersion + ": "; + if (node && !node->doc().location().isEmpty()) + out() << "\n"; + + shortVersion = myTree->version(); + if (shortVersion.count(QChar('.')) == 2) + shortVersion.truncate(shortVersion.lastIndexOf(QChar('.'))); + if (!shortVersion.isEmpty()) { + if (project == "QSA") + shortVersion = "QSA " + shortVersion + ": "; + else + shortVersion = "Qt " + shortVersion + ": "; + } + } + + out() << "\n" + " " << shortVersion << protectEnc(title) << "\n"; + out() << QString("").arg(outputEncoding); + + if (!style.isEmpty()) + out() << " \n"; + + const QMap &metaMap = node->doc().metaTagMap(); + if (!metaMap.isEmpty()) { + QMapIterator i(metaMap); + while (i.hasNext()) { + i.next(); + out() << " \n"; + } + } + + navigationLinks.clear(); + + if (node && !node->links().empty()) { + QPair linkPair; + QPair anchorPair; + const Node *linkNode; + + if (node->links().contains(Node::PreviousLink)) { + linkPair = node->links()[Node::PreviousLink]; + linkNode = findNodeForTarget(linkPair.first, node, marker); + if (!linkNode || linkNode == node) + anchorPair = linkPair; + else + anchorPair = anchorForNode(linkNode); + + out() << " \n"; + + navigationLinks += "[Previous: "; + if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty()) + navigationLinks += protectEnc(anchorPair.second); + else + navigationLinks += protectEnc(linkPair.second); + navigationLinks += "]\n"; + } + if (node->links().contains(Node::ContentsLink)) { + linkPair = node->links()[Node::ContentsLink]; + linkNode = findNodeForTarget(linkPair.first, node, marker); + if (!linkNode || linkNode == node) + anchorPair = linkPair; + else + anchorPair = anchorForNode(linkNode); + + out() << " \n"; + + navigationLinks += "["; + if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty()) + navigationLinks += protectEnc(anchorPair.second); + else + navigationLinks += protectEnc(linkPair.second); + navigationLinks += "]\n"; + } + if (node->links().contains(Node::NextLink)) { + linkPair = node->links()[Node::NextLink]; + linkNode = findNodeForTarget(linkPair.first, node, marker); + if (!linkNode || linkNode == node) + anchorPair = linkPair; + else + anchorPair = anchorForNode(linkNode); + + out() << " \n"; + + navigationLinks += "[Next: "; + if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty()) + navigationLinks += protectEnc(anchorPair.second); + else + navigationLinks += protectEnc(linkPair.second); + navigationLinks += "]\n"; + } + if (node->links().contains(Node::IndexLink)) { + linkPair = node->links()[Node::IndexLink]; + linkNode = findNodeForTarget(linkPair.first, node, marker); + if (!linkNode || linkNode == node) + anchorPair = linkPair; + else + anchorPair = anchorForNode(linkNode); + out() << " \n"; + } + if (node->links().contains(Node::StartLink)) { + linkPair = node->links()[Node::StartLink]; + linkNode = findNodeForTarget(linkPair.first, node, marker); + if (!linkNode || linkNode == node) + anchorPair = linkPair; + else + anchorPair = anchorForNode(linkNode); + out() << " \n"; + } + } + + foreach (const QString &stylesheet, stylesheets) { + out() << " \n"; + } + + foreach (const QString &customHeadElement, customHeadElements) { + out() << " " << customHeadElement << "\n"; + } + + out() << "\n" + #endif + + QT_END_NAMESPACE diff --git a/tools/qdoc3/ditaxmlgenerator.h b/tools/qdoc3/ditaxmlgenerator.h new file mode 100644 index 0000000..4de578d --- /dev/null +++ b/tools/qdoc3/ditaxmlgenerator.h @@ -0,0 +1,358 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the tools applications 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$ +** +****************************************************************************/ + +/* + ditaxmlgenerator.h +*/ + +#ifndef DITAXMLGENERATOR_H +#define DITAXMLGENERATOR_H + +#define QDOC_NAME_ALIGNMENT + +#include +#include +#include + +#include "codemarker.h" +#include "config.h" +#include "dcfsection.h" +#include "pagegenerator.h" + +QT_BEGIN_NAMESPACE + +#if 0 +struct NavigationBar +{ + SectionIterator prev; + SectionIterator current; + SectionIterator next; +}; +#endif + +typedef QMultiMap NodeMultiMap; +typedef QMap NewSinceMaps; +typedef QMap ParentMaps; +typedef QMap NodeMap; +typedef QMap NewClassMaps; + +class HelpProjectWriter; + +class DitaXmlGenerator : public PageGenerator +{ + public: + enum SinceType { + Namespace, + Class, + MemberFunction, + NamespaceFunction, + GlobalFunction, + Macro, + Enum, + Typedef, + Property, + Variable, + QmlClass, + QmlProperty, + QmlSignal, + QmlMethod, + LastSinceType + }; + + public: + DitaXmlGenerator(); + ~DitaXmlGenerator(); + + virtual void initializeGenerator(const Config& config); + virtual void terminateGenerator(); + virtual QString format(); + virtual void generateTree(const Tree *tree, CodeMarker *marker); + + QString protectEnc(const QString &string); + static QString protect(const QString &string, const QString &encoding = "ISO-8859-1"); + static QString cleanRef(const QString& ref); + static QString sinceTitle(int i) { return sinceTitles[i]; } + + protected: + virtual void startText(const Node *relative, CodeMarker *marker); + virtual int generateAtom(const Atom *atom, + const Node *relative, + CodeMarker *marker); + virtual void generateClassLikeNode(const InnerNode *inner, CodeMarker *marker); + virtual void generateFakeNode(const FakeNode *fake, CodeMarker *marker); + virtual QString fileExtension(const Node *node) const; + virtual QString refForNode(const Node *node); + virtual QString linkForNode(const Node *node, const Node *relative); + virtual QString refForAtom(Atom *atom, const Node *node); + + private: + enum SubTitleSize { SmallSubTitle, LargeSubTitle }; + + const QPair anchorForNode(const Node *node); + const Node *findNodeForTarget(const QString &target, + const Node *relative, + CodeMarker *marker, + const Atom *atom = 0); + void generateBreadCrumbs(const QString& title, + const Node *node, + CodeMarker *marker); + void generateHeader(const QString& title, + const Node *node = 0, + CodeMarker *marker = 0); + void generateTitle(const QString& title, + const Text &subTitle, + SubTitleSize subTitleSize, + const Node *relative, + CodeMarker *marker); + void generateFooter(const Node *node = 0); + void generateBrief(const Node *node, + CodeMarker *marker, + const Node *relative = 0); + void generateIncludes(const InnerNode *inner, CodeMarker *marker); +#if 0 + void generateNavigationBar(const NavigationBar& bar, + const Node *node, + CodeMarker *marker); +#endif + void generateTableOfContents(const Node *node, + CodeMarker *marker, + Doc::SectioningUnit sectioningUnit, + int numColumns, + const Node *relative = 0); + void generateTableOfContents(const Node *node, + CodeMarker *marker, + QList
    * sections = 0); + QString generateListOfAllMemberFile(const InnerNode *inner, CodeMarker *marker); + QString generateLowStatusMemberFile(const InnerNode *inner, + CodeMarker *marker, + CodeMarker::Status status); + void generateClassHierarchy(const Node *relative, + CodeMarker *marker, + const NodeMap &classMap); + void generateAnnotatedList(const Node *relative, + CodeMarker *marker, + const NodeMap &nodeMap); + void generateCompactList(const Node *relative, + CodeMarker *marker, + const NodeMap &classMap, + bool includeAlphabet, + QString commonPrefix = QString()); + void generateFunctionIndex(const Node *relative, CodeMarker *marker); + void generateLegaleseList(const Node *relative, CodeMarker *marker); + void generateOverviewList(const Node *relative, CodeMarker *marker); + void generateSectionList(const Section& section, + const Node *relative, + CodeMarker *marker, + CodeMarker::SynopsisStyle style); +#ifdef QDOC_QML + void generateQmlSummary(const Section& section, + const Node *relative, + CodeMarker *marker); + void generateQmlItem(const Node *node, + const Node *relative, + CodeMarker *marker, + bool summary); + void generateDetailedQmlMember(const Node *node, + const InnerNode *relative, + CodeMarker *marker); + void generateQmlInherits(const QmlClassNode* cn, CodeMarker* marker); + void generateQmlInheritedBy(const QmlClassNode* cn, CodeMarker* marker); + void generateQmlInstantiates(const QmlClassNode* qcn, CodeMarker* marker); + void generateInstantiatedBy(const ClassNode* cn, CodeMarker* marker); +#endif +#ifdef QDOC_NAME_ALIGNMENT + void generateSection(const NodeList& nl, + const Node *relative, + CodeMarker *marker, + CodeMarker::SynopsisStyle style); + void generateSynopsis(const Node *node, + const Node *relative, + CodeMarker *marker, + CodeMarker::SynopsisStyle style, + bool nameAlignment = false); + void generateSectionInheritedList(const Section& section, + const Node *relative, + CodeMarker *marker, + bool nameAlignment = false); + QString highlightedCode(const QString& markedCode, + CodeMarker *marker, + const Node *relative, + CodeMarker::SynopsisStyle style = CodeMarker::Accessors, + bool nameAlignment = false); +#else + void generateSynopsis(const Node *node, + const Node *relative, + CodeMarker *marker, + CodeMarker::SynopsisStyle style); + void generateSectionInheritedList(const Section& section, + const Node *relative, + CodeMarker *marker); + QString highlightedCode(const QString& markedCode, + CodeMarker *marker, + const Node *relative); +#endif + void generateFullName(const Node *apparentNode, + const Node *relative, + CodeMarker *marker, + const Node *actualNode = 0); + void generateDetailedMember(const Node *node, + const InnerNode *relative, + CodeMarker *marker); + void generateLink(const Atom *atom, + const Node *relative, + CodeMarker *marker); + void generateStatus(const Node *node, CodeMarker *marker); + + QString registerRef(const QString& ref); + QString fileBase(const Node *node); +#if 0 + QString fileBase(const Node *node, const SectionIterator& section); +#endif + QString fileName(const Node *node); + void findAllClasses(const InnerNode *node); + void findAllFunctions(const InnerNode *node); + void findAllLegaleseTexts(const InnerNode *node); + void findAllNamespaces(const InnerNode *node); +#ifdef ZZZ_QDOC_QML + void findAllQmlClasses(const InnerNode *node); +#endif + void findAllSince(const InnerNode *node); + static int hOffset(const Node *node); + static bool isThreeColumnEnumValueTable(const Atom *atom); + virtual QString getLink(const Atom *atom, + const Node *relative, + CodeMarker *marker, + const Node** node); + virtual void generateDcf(const QString &fileBase, + const QString &startPage, + const QString &title, DcfSection &dcfRoot); + virtual void generateIndex(const QString &fileBase, + const QString &url, + const QString &title); +#ifdef GENERATE_MAC_REFS + void generateMacRef(const Node *node, CodeMarker *marker); +#endif + void beginLink(const QString &link, + const Node *node, + const Node *relative, + CodeMarker *marker); + void endLink(); + bool generatePageElement(QXmlStreamWriter& writer, + const Node* node, + CodeMarker* marker) const; + void generatePageElements(QXmlStreamWriter& writer, + const Node* node, + CodeMarker* marker) const; + void generatePageIndex(const QString& fileName, + CodeMarker* marker) const; + +#if 0 + NavigationBar currentNavigationBar; +#endif + QMap refMap; + int codeIndent; + DcfSection dcfClassesRoot; + DcfSection dcfOverviewsRoot; + DcfSection dcfExamplesRoot; + DcfSection dcfDesignerRoot; + DcfSection dcfLinguistRoot; + DcfSection dcfAssistantRoot; + DcfSection dcfQmakeRoot; + HelpProjectWriter *helpProjectWriter; + bool inLink; + bool inObsoleteLink; + bool inContents; + bool inSectionHeading; + bool inTableHeader; + int numTableRows; + bool threeColumnEnumValueTable; + bool offlineDocs; + QString link; + QStringList sectionNumber; + QRegExp funcLeftParen; + QString style; + QString postHeader; + QString postPostHeader; + QString footer; + QString address; + bool pleaseGenerateMacRef; + QString project; + QString projectDescription; + QString projectUrl; + QString navigationLinks; + QStringList stylesheets; + QStringList customHeadElements; + const Tree *myTree; + bool slow; + bool obsoleteLinks; + QMap moduleClassMap; + QMap moduleNamespaceMap; + NodeMap nonCompatClasses; + NodeMap mainClasses; + NodeMap compatClasses; + NodeMap obsoleteClasses; + NodeMap namespaceIndex; + NodeMap serviceClasses; +#ifdef QDOC_QML + NodeMap qmlClasses; +#endif + QMap funcIndex; + QMap legaleseTexts; + NewSinceMaps newSinceMaps; + static QString sinceTitles[]; + NewClassMaps newClassMaps; + NewClassMaps newQmlClassMaps; + static int id; +}; + +#define DITAXMLGENERATOR_ADDRESS "address" +#define DITAXMLGENERATOR_FOOTER "footer" +#define DITAXMLGENERATOR_GENERATEMACREFS "generatemacrefs" // ### document me +#define DITAXMLGENERATOR_POSTHEADER "postheader" +#define DITAXMLGENERATOR_POSTPOSTHEADER "postpostheader" +#define DITAXMLGENERATOR_STYLE "style" +#define DITAXMLGENERATOR_STYLESHEETS "stylesheets" +#define DITAXMLGENERATOR_CUSTOMHEADELEMENTS "customheadelements" + +QT_END_NAMESPACE + +#endif + -- cgit v0.12 From f5aeb6a627ecde5da8c3674b0ba83582f5e4ec84 Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Tue, 1 Jun 2010 17:09:17 +1000 Subject: Missed file. --- tests/auto/declarative/qdeclarativetextinput/data/positionAt.qml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 tests/auto/declarative/qdeclarativetextinput/data/positionAt.qml diff --git a/tests/auto/declarative/qdeclarativetextinput/data/positionAt.qml b/tests/auto/declarative/qdeclarativetextinput/data/positionAt.qml new file mode 100644 index 0000000..2800351 --- /dev/null +++ b/tests/auto/declarative/qdeclarativetextinput/data/positionAt.qml @@ -0,0 +1,8 @@ +import Qt 4.7 + +TextInput{ + focus: true + objectName: "myInput" + width: 50 + text: "This is a long piece of text" +} -- cgit v0.12 From 2e1e1cff3696c93f983db78c99e564a791d5d0ef Mon Sep 17 00:00:00 2001 From: Andreas Aardal Hanssen Date: Tue, 1 Jun 2010 09:39:57 +0200 Subject: Avoid unnecessary detach / deep copy in QGraphicsItem::scroll(). QGraphicsItem::scroll() scrolls the cache pixmap when cacheMode is enabled (for ItemCoordinateCache only). Because the pixmap exists both in the cache and in a temp QPixmap copy, the ref count is 2, so the scroll operation has to do a deep copy. To avoid this, we remove the pixmap from the cache before and reinsert it again after calling QPixmap::scroll(). Reviewed-by: Alexis Menard --- src/gui/graphicsview/qgraphicsitem.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index 36d21a6..d284a29 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -5687,11 +5687,13 @@ void QGraphicsItem::scroll(qreal dx, qreal dy, const QRectF &rect) return; } + // Find pixmap in cache, then remove to avoid deep copy when modifying.s QPixmap cachedPixmap; if (!QPixmapCache::find(cache->key, &cachedPixmap)) { update(rect); return; } + QPixmapCache::remove(cache->key); QRegion exposed; const bool scrollEntirePixmap = rect.isNull(); @@ -5707,7 +5709,8 @@ void QGraphicsItem::scroll(qreal dx, qreal dy, const QRectF &rect) cachedPixmap.scroll(dx, dy, scrollRect.translated(-cache->boundingRect.topLeft()), &exposed); } - QPixmapCache::replace(cache->key, cachedPixmap); + // Reinsert into cache. + cache->key = QPixmapCache::insert(cachedPixmap); // Translate the existing expose. for (int i = 0; i < cache->exposed.size(); ++i) { -- cgit v0.12 From 7b581310ceb106664077052abeabbde217ea30dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Tue, 1 Jun 2010 09:19:16 +0200 Subject: Make sure we don't pull inn /usr/X11 stuff in the qws mkspek conf Reviewed-by: paul --- mkspecs/common/qws.conf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mkspecs/common/qws.conf b/mkspecs/common/qws.conf index 96341a7..225f0ff 100644 --- a/mkspecs/common/qws.conf +++ b/mkspecs/common/qws.conf @@ -14,6 +14,10 @@ QMAKE_INCDIR_X11 = QMAKE_LIBDIR_X11 = QMAKE_INCDIR_OPENGL = QMAKE_LIBDIR_OPENGL = +QMAKE_INCDIR_OPENGL_ES1 = +QMAKE_LIBDIR_OPENGL_ES1 = +QMAKE_INCDIR_OPENGL_ES2 = +QMAKE_LIBDIR_OPENGL_ES2 = QMAKE_LIBS_X11 = QMAKE_LIBS_X11SM = QMAKE_LIBS_OPENGL = -- cgit v0.12 From 1b6d41deebdd8103e2d8abb53bd2bb1dd26bd0ae Mon Sep 17 00:00:00 2001 From: Andreas Aardal Hanssen Date: Tue, 1 Jun 2010 10:50:30 +0200 Subject: Fix bug in QGraphicsItem::scroll() when called with no QRectF argument. With a null rect argument, QGraphicsItem::scroll() is supposed to scroll the whole item. When using ItemCoordinateCache, currently the only supported mode for scroll optimization, we simple scrolled the whole cache pixmap. Problem: The cache pixmap has a border of 2 pixels. So we scroll the contents _and_ the border. This leaves white/transparent horizontal and vertical line artifacts when scrolling. This change unifies the two cases - partial and full scrolling - into one (shorter) approach that works without scrolling the margin as well. Reviewed-by: Alexis Menard --- src/gui/graphicsview/qgraphicsitem.cpp | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index d284a29..9d7354a 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -5695,19 +5695,12 @@ void QGraphicsItem::scroll(qreal dx, qreal dy, const QRectF &rect) } QPixmapCache::remove(cache->key); + QRect scrollRect = (rect.isNull() ? boundingRect() : rect).toAlignedRect(); + if (!scrollRect.intersects(cache->boundingRect)) + return; // Nothing to scroll. + QRegion exposed; - const bool scrollEntirePixmap = rect.isNull(); - if (scrollEntirePixmap) { - // Scroll entire pixmap. - cachedPixmap.scroll(dx, dy, cachedPixmap.rect(), &exposed); - } else { - if (!rect.intersects(cache->boundingRect)) - return; // Nothing to scroll. - // Scroll sub-rect of pixmap. The rect is in item coordinates - // so we have to translate it to pixmap coordinates. - QRect scrollRect = rect.toAlignedRect(); - cachedPixmap.scroll(dx, dy, scrollRect.translated(-cache->boundingRect.topLeft()), &exposed); - } + cachedPixmap.scroll(dx, dy, scrollRect.translated(-cache->boundingRect.topLeft()), &exposed); // Reinsert into cache. cache->key = QPixmapCache::insert(cachedPixmap); @@ -5715,7 +5708,7 @@ void QGraphicsItem::scroll(qreal dx, qreal dy, const QRectF &rect) // Translate the existing expose. for (int i = 0; i < cache->exposed.size(); ++i) { QRectF &e = cache->exposed[i]; - if (!scrollEntirePixmap && !e.intersects(rect)) + if (!rect.isNull() && !e.intersects(rect)) continue; e.translate(dx, dy); } -- cgit v0.12 From 805126ebc2aa9a683edefbc21d4ee7362ae26f55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Trond=20Kjern=C3=A5sen?= Date: Tue, 1 Jun 2010 10:50:47 +0200 Subject: Fixed a problem where QPixmaps where re-bound in non-sharing contexts. If you have two non-sharing GL contexts and try to draw the same QPixmap in both of them, they will wind up competing for a spot in the texture cache. Make the context group a part of the cache key to avoid that. Task-number: QT-3462 Reviewed-by: Kim --- src/opengl/qgl.cpp | 51 ++++++++++++++++++++++++++++++++++++++++++++------- src/opengl/qgl_p.h | 36 +++++++++++++++++++++++------------- 2 files changed, 67 insertions(+), 20 deletions(-) diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 922a96c..c8502c2 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -91,6 +91,7 @@ #include "qcolormap.h" #include "qfile.h" #include "qlibrary.h" +#include QT_BEGIN_NAMESPACE @@ -1515,10 +1516,33 @@ bool operator!=(const QGLFormat& a, const QGLFormat& b) return !(a == b); } +struct QGLContextGroupList { + void append(QGLContextGroup *group) { + QMutexLocker locker(&m_mutex); + m_list.append(group); + } + + void remove(QGLContextGroup *group) { + QMutexLocker locker(&m_mutex); + m_list.removeOne(group); + } + + QList m_list; + QMutex m_mutex; +}; + +Q_GLOBAL_STATIC(QGLContextGroupList, qt_context_groups) + /***************************************************************************** QGLContext implementation *****************************************************************************/ +QGLContextGroup::QGLContextGroup(const QGLContext *context) + : m_context(context), m_guards(0), m_refs(1) +{ + qt_context_groups()->append(this); +} + QGLContextGroup::~QGLContextGroup() { // Clear any remaining QGLSharedResourceGuard objects on the group. @@ -1528,6 +1552,7 @@ QGLContextGroup::~QGLContextGroup() guard->m_id = 0; guard = guard->m_next; } + qt_context_groups()->remove(this); } void QGLContextGroup::addGuard(QGLSharedResourceGuard *guard) @@ -1736,7 +1761,7 @@ void QGLTextureCache::insert(QGLContext* ctx, qint64 key, QGLTexture* texture, i QWriteLocker locker(&m_lock); if (m_cache.totalCost() + cost > m_cache.maxCost()) { // the cache is full - make an attempt to remove something - const QList keys = m_cache.keys(); + const QList keys = m_cache.keys(); int i = 0; while (i < m_cache.count() && (m_cache.totalCost() + cost > m_cache.maxCost())) { @@ -1746,13 +1771,26 @@ void QGLTextureCache::insert(QGLContext* ctx, qint64 key, QGLTexture* texture, i ++i; } } - m_cache.insert(key, texture, cost); + const QGLTextureCacheKey cacheKey = {key, QGLContextPrivate::contextGroup(ctx)}; + m_cache.insert(cacheKey, texture, cost); +} + +void QGLTextureCache::remove(qint64 key) +{ + QWriteLocker locker(&m_lock); + QMutexLocker groupLocker(&qt_context_groups()->m_mutex); + QList::const_iterator it = qt_context_groups()->m_list.constBegin(); + while (it != qt_context_groups()->m_list.constEnd()) { + const QGLTextureCacheKey cacheKey = {key, *it}; + m_cache.remove(cacheKey); + ++it; + } } bool QGLTextureCache::remove(QGLContext* ctx, GLuint textureId) { QWriteLocker locker(&m_lock); - QList keys = m_cache.keys(); + QList keys = m_cache.keys(); for (int i = 0; i < keys.size(); ++i) { QGLTexture *tex = m_cache.object(keys.at(i)); if (tex->id == textureId && tex->context == ctx) { @@ -1767,9 +1805,9 @@ bool QGLTextureCache::remove(QGLContext* ctx, GLuint textureId) void QGLTextureCache::removeContextTextures(QGLContext* ctx) { QWriteLocker locker(&m_lock); - QList keys = m_cache.keys(); + QList keys = m_cache.keys(); for (int i = 0; i < keys.size(); ++i) { - const qint64 &key = keys.at(i); + const QGLTextureCacheKey &key = keys.at(i); if (m_cache.object(key)->context == ctx) m_cache.remove(key); } @@ -1782,7 +1820,6 @@ void QGLTextureCache::removeContextTextures(QGLContext* ctx) void QGLTextureCache::cleanupTexturesForCacheKey(qint64 cacheKey) { qt_gl_texture_cache()->remove(cacheKey); - Q_ASSERT(qt_gl_texture_cache()->getTexture(cacheKey) == 0); } @@ -2425,7 +2462,7 @@ QGLTexture* QGLContextPrivate::bindTexture(const QImage &image, GLenum target, G QGLTexture *QGLContextPrivate::textureCacheLookup(const qint64 key, GLenum target) { Q_Q(QGLContext); - QGLTexture *texture = QGLTextureCache::instance()->getTexture(key); + QGLTexture *texture = QGLTextureCache::instance()->getTexture(q, key); if (texture && texture->target == target && (texture->context == q || QGLContext::areSharing(q, texture->context))) { diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index d92f963..16c225f 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -230,7 +230,7 @@ public: static void addShare(const QGLContext *context, const QGLContext *share); static void removeShare(const QGLContext *context); private: - QGLContextGroup(const QGLContext *context) : m_context(context), m_guards(0), m_refs(1) { } + QGLContextGroup(const QGLContext *context); QGLExtensionFuncs m_extensionFuncs; const QGLContext *m_context; // context group's representative @@ -522,17 +522,33 @@ public: QSize bindCompressedTexturePVR(const char *buf, int len); }; +struct QGLTextureCacheKey { + qint64 key; + QGLContextGroup *group; +}; + +inline bool operator==(const QGLTextureCacheKey &a, const QGLTextureCacheKey &b) +{ + return a.key == b.key && a.group == b.group; +} + +inline uint qHash(const QGLTextureCacheKey &key) +{ + return qHash(key.key) ^ qHash(key.group); +} + + class Q_AUTOTEST_EXPORT QGLTextureCache { public: QGLTextureCache(); ~QGLTextureCache(); void insert(QGLContext *ctx, qint64 key, QGLTexture *texture, int cost); - inline void remove(quint64 key); + void remove(qint64 key); inline int size(); inline void setMaxCost(int newMax); inline int maxCost(); - inline QGLTexture* getTexture(quint64 key); + inline QGLTexture* getTexture(QGLContext *ctx, qint64 key); bool remove(QGLContext *ctx, GLuint textureId); void removeContextTextures(QGLContext *ctx); @@ -542,7 +558,7 @@ public: static void cleanupBeforePixmapDestruction(QPixmapData* pixmap); private: - QCache m_cache; + QCache m_cache; QReadWriteLock m_lock; }; @@ -563,19 +579,13 @@ int QGLTextureCache::maxCost() return m_cache.maxCost(); } -QGLTexture* QGLTextureCache::getTexture(quint64 key) +QGLTexture* QGLTextureCache::getTexture(QGLContext *ctx, qint64 key) { QReadLocker locker(&m_lock); - return m_cache.object(key); + const QGLTextureCacheKey cacheKey = {key, QGLContextPrivate::contextGroup(ctx)}; + return m_cache.object(cacheKey); } -void QGLTextureCache::remove(quint64 key) -{ - QWriteLocker locker(&m_lock); - m_cache.remove(key); -} - - extern Q_OPENGL_EXPORT QPaintEngine* qt_qgl_paint_engine(); bool qt_gl_preferGL2Engine(); -- cgit v0.12 From f5cc4e9a020e78f0bf0d929ff2780b5bf01749ae Mon Sep 17 00:00:00 2001 From: Andreas Hartmetz Date: Tue, 1 Jun 2010 10:35:30 +0200 Subject: Added environment variable graphicssystem switch. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add environment variable switch for graphicssystem so a default can be set at runtime without passing a command-line parameter. Merge-request: 622 Reviewed-by: Samuel Rødal --- src/gui/kernel/qapplication.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index a2c058a..09a3bfe 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -780,6 +780,9 @@ void QApplicationPrivate::construct( qt_is_gui_used = (qt_appType != QApplication::Tty); process_cmdline(); + // the environment variable has the lowest precedence of runtime graphicssystem switches + if (graphics_system_name.isEmpty()) + graphics_system_name = QString::fromLocal8Bit(qgetenv("QT_GRAPHICSSYSTEM")); // Must be called before initialize() qt_init(this, qt_appType #ifdef Q_WS_X11 @@ -1560,10 +1563,18 @@ QStyle* QApplication::setStyle(const QString& style) on-screen widgets and QPixmaps. The available systems are \c{"native"}, \c{"raster"} and \c{"opengl"}. - This function call overrides both the application commandline - \c{-graphicssystem} switch and the configure \c{-graphicssystem} switch. + There are several ways to set the graphics backend, in order of decreasing + precedence: + \list + \o the application commandline \c{-graphicssystem} switch + \o QApplication::setGraphicsSystem() + \o the QT_GRAPHICSSYSTEM environment variable + \o the Qt configure \c{-graphicssystem} switch + \endlist + If the highest precedence switch sets an invalid name, the error will be + ignored and the default backend will be used. - \warning This function must be called before the QApplication constructor + \warning This function is only effective before the QApplication constructor is called. \note The \c{"opengl"} option is currently experimental. -- cgit v0.12 From 94f0369e21cb4db41f6f10358ba1967fe1d0e8a1 Mon Sep 17 00:00:00 2001 From: John Brooks Date: Sun, 2 May 2010 00:19:25 -0600 Subject: Doc: QAbstractItemModel: note unexpected behavior with beginMoveRows The meaning of the destinationChild parameter differs when moving down in the same parent, contrary to statements by the previous docs. Reviewed-by: Olivier Goffart Merge-Request: 600 --- src/corelib/kernel/qabstractitemmodel.cpp | 92 +++++++++++++++++-------------- 1 file changed, 52 insertions(+), 40 deletions(-) diff --git a/src/corelib/kernel/qabstractitemmodel.cpp b/src/corelib/kernel/qabstractitemmodel.cpp index 24c26b6..b0e2f48 100644 --- a/src/corelib/kernel/qabstractitemmodel.cpp +++ b/src/corelib/kernel/qabstractitemmodel.cpp @@ -2508,29 +2508,35 @@ bool QAbstractItemModelPrivate::allowMove(const QModelIndex &srcParent, int star When reimplementing a subclass, this method simplifies moving entities in your model. This method is responsible for moving persistent indexes in the model, which you would otherwise be - required to do yourself. - - Using beginMoveRows and endMoveRows is an alternative to emitting - layoutAboutToBeChanged and layoutChanged directly along with - changePersistentIndexes. layoutAboutToBeChanged is emitted by - this method for compatibility reasons. + required to do yourself. Using beginMoveRows and endMoveRows + is an alternative to emitting layoutAboutToBeChanged and + layoutChanged directly along with changePersistentIndexes. + layoutAboutToBeChanged is emitted by this method for compatibility + reasons. The \a sourceParent index corresponds to the parent from which the - rows are moved; \a sourceFirst and \a sourceLast are the row - numbers of the rows to be moved. The \a destinationParent index - corresponds to the parent into which the rows are moved. The \a + rows are moved; \a sourceFirst and \a sourceLast are the first and last + row numbers of the rows to be moved. The \a destinationParent index + corresponds to the parent into which those rows are moved. The \a destinationChild is the row to which the rows will be moved. That is, the index at row \a sourceFirst in \a sourceParent will become - row \a destinationChild in \a destinationParent. Its siblings will - be moved correspondingly. - - Note that \a sourceParent and \a destinationParent may be the - same, in which case you must ensure that the \a destinationChild is - not within the range of \a sourceFirst and \a sourceLast. You - must also ensure that you do not attempt to move a row to one of - its own children or ancestors. This method returns false if either - condition is true, in which case you should abort your move - operation. + row \a destinationChild in \a destinationParent, followed by all other + rows up to \a sourceLast. + + However, when moving rows down in the same parent (\a sourceParent + and \a destinationParent are equal), the rows will be placed before the + \a destinationChild index. That is, if you wish to move rows 0 and 1 so + they will become rows 1 and 2, \a destinationChild should be 3. In this + case, the new index for the source row \c i (which is between + \a sourceFirst and \a sourceLast) is equal to + \c {(destinationChild-sourceLast-1+i)}. + + Note that if \a sourceParent and \a destinationParent are the same, + you must ensure that the \a destinationChild is not within the range + of \a sourceFirst and \a sourceLast + 1. You must also ensure that you + do not attempt to move a row to one of its own children or ancestors. + This method returns false if either condition is true, in which case you + should abort your move operation. \table 80% \row @@ -2761,29 +2767,35 @@ void QAbstractItemModel::endRemoveColumns() When reimplementing a subclass, this method simplifies moving entities in your model. This method is responsible for moving persistent indexes in the model, which you would otherwise be - required to do yourself. - - Using beginMoveColumns and endMoveColumns is an alternative to - emitting layoutAboutToBeChanged and layoutChanged directly along - with changePersistentIndexes. layoutAboutToBeChanged is emitted - by this method for compatibility reasons. + required to do yourself. Using beginMoveRows and endMoveRows + is an alternative to emitting layoutAboutToBeChanged and + layoutChanged directly along with changePersistentIndexes. + layoutAboutToBeChanged is emitted by this method for compatibility + reasons. The \a sourceParent index corresponds to the parent from which the - columns are moved; \a sourceFirst and \a sourceLast are the column - numbers of the columns to be moved. The \a destinationParent index - corresponds to the parent into which the columns are moved. The \a - destinationChild is the column to which the columns will be - moved. That is, the index at column \a sourceFirst in \a - sourceParent will become column \a destinationChild in \a - destinationParent. Its siblings will be moved correspondingly. - - Note that \a sourceParent and \a destinationParent may be the - same, in which case you must ensure that the \a destinationChild - is not within the range of \a sourceFirst and \a sourceLast. You - must also ensure that you do not attempt to move a row to one of - its own chilren or ancestors. This method returns false if either - condition is true, in which case you should abort your move - operation. + columns are moved; \a sourceFirst and \a sourceLast are the first and last + column numbers of the columns to be moved. The \a destinationParent index + corresponds to the parent into which those columns are moved. The \a + destinationChild is the column to which the columns will be moved. That + is, the index at column \a sourceFirst in \a sourceParent will become + column \a destinationChild in \a destinationParent, followed by all other + columns up to \a sourceLast. + + However, when moving columns down in the same parent (\a sourceParent + and \a destinationParent are equal), the columnss will be placed before the + \a destinationChild index. That is, if you wish to move columns 0 and 1 so + they will become columns 1 and 2, \a destinationChild should be 3. In this + case, the new index for the source column \c i (which is between + \a sourceFirst and \a sourceLast) is equal to + \c {(destinationChild-sourceLast-1+i)}. + + Note that if \a sourceParent and \a destinationParent are the same, + you must ensure that the \a destinationChild is not within the range + of \a sourceFirst and \a sourceLast + 1. You must also ensure that you + do not attempt to move a column to one of its own children or ancestors. + This method returns false if either condition is true, in which case you + should abort your move operation. \sa endMoveColumns() -- cgit v0.12 From 4e85c1015c2dfa58560e0567af4fa17a412441a5 Mon Sep 17 00:00:00 2001 From: Geir Vattekar Date: Tue, 1 Jun 2010 12:16:17 +0200 Subject: Doc: Fixed a typo Task-number: QTBUG-10951 --- doc/src/examples/waitconditions.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/examples/waitconditions.qdoc b/doc/src/examples/waitconditions.qdoc index 1d3ff84..d4f680e 100644 --- a/doc/src/examples/waitconditions.qdoc +++ b/doc/src/examples/waitconditions.qdoc @@ -92,7 +92,7 @@ Together, the wait conditions, the mutex, and the \c numUsedBytes counter ensure that the producer is never more than \c BufferSize bytes ahead of the consumer, and that the consumer never reads - data that the consumer hasn't generated yet. + data that the producer hasn't generated yet. \section1 Producer Class -- cgit v0.12 From 8d6ac1a041eb26f635914b1c356f47e50cdfdc98 Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Tue, 1 Jun 2010 12:38:18 +0200 Subject: Defines whether the cursor should keep its current position. Defines whether the cursor should keep its position when text gets inserted at the current position of the cursor. For example, we don't want QTextCursor to extend the selection when inserting characters at the end of an extra selection representing a user-type but we do want the selection to grow when rewriting a region of code (e.g. when using our QuickFix engine). Task-number: QTBUG-11075 Reviewed-by: mae --- src/gui/text/qtextcursor.cpp | 52 ++++++++++++++++++++++++++---- src/gui/text/qtextcursor.h | 3 ++ src/gui/text/qtextcursor_p.h | 3 +- tests/auto/qtextcursor/tst_qtextcursor.cpp | 8 +++-- 4 files changed, 56 insertions(+), 10 deletions(-) diff --git a/src/gui/text/qtextcursor.cpp b/src/gui/text/qtextcursor.cpp index c91df3c..abc0889 100644 --- a/src/gui/text/qtextcursor.cpp +++ b/src/gui/text/qtextcursor.cpp @@ -64,7 +64,7 @@ enum { QTextCursorPrivate::QTextCursorPrivate(QTextDocumentPrivate *p) : priv(p), x(0), position(0), anchor(0), adjusted_anchor(0), - currentCharFormat(-1), visualNavigation(false) + currentCharFormat(-1), visualNavigation(false), keepPositionOnInsert(false) { priv->addCursor(this); } @@ -79,6 +79,7 @@ QTextCursorPrivate::QTextCursorPrivate(const QTextCursorPrivate &rhs) x = rhs.x; currentCharFormat = rhs.currentCharFormat; visualNavigation = rhs.visualNavigation; + keepPositionOnInsert = rhs.keepPositionOnInsert; priv->addCursor(this); } @@ -95,7 +96,7 @@ QTextCursorPrivate::AdjustResult QTextCursorPrivate::adjustPosition(int position if (position < positionOfChange || (position == positionOfChange && (op == QTextUndoCommand::KeepCursor - || anchor < position) + || keepPositionOnInsert) ) ) { result = CursorUnchanged; @@ -1277,6 +1278,45 @@ void QTextCursor::setVisualNavigation(bool b) } /*! + \since 4.7 + + Returns whether the cursor should keep its current position when text gets inserted at the position of the + cursor. + + The default is false; + + \sa setKeepPositionOnInsert() + */ +bool QTextCursor::keepPositionOnInsert() const +{ + return d ? d->keepPositionOnInsert : false; +} + +/*! + \since 4.7 + + Defines whether the cursor should keep its current position when text gets inserted at the current position of the + cursor. + + If \b is true, the cursor keeps its current position when text gets inserted at the positing of the cursor. + If \b is false, the cursor moves along with the inserted text. + + The default is false. + + Note that a cursor always moves when text is inserted before the current position of the cursor, and it + always keeps its position when text is inserted after the current position of the cursor. + + \sa keepPositionOnInsert() + */ +void QTextCursor::setKeepPositionOnInsert(bool b) +{ + if (d) + d->keepPositionOnInsert = b; +} + + + +/*! Inserts \a text at the current position, using the current character format. @@ -1408,16 +1448,16 @@ void QTextCursor::deletePreviousChar() { if (!d || !d->priv) return; - + if (d->position != d->anchor) { removeSelectedText(); return; } - + if (d->anchor < 1 || !d->canDelete(d->anchor-1)) return; d->anchor--; - + QTextDocumentPrivate::FragmentIterator fragIt = d->priv->find(d->anchor); const QTextFragmentData * const frag = fragIt.value(); int fpos = fragIt.position(); @@ -1429,7 +1469,7 @@ void QTextCursor::deletePreviousChar() if (uc.unicode() >= 0xd800 && uc.unicode() < 0xdc00) --d->anchor; } - + d->adjusted_anchor = d->anchor; d->remove(); d->setX(); diff --git a/src/gui/text/qtextcursor.h b/src/gui/text/qtextcursor.h index 3e968a3..6cb776c 100644 --- a/src/gui/text/qtextcursor.h +++ b/src/gui/text/qtextcursor.h @@ -132,6 +132,9 @@ public: bool visualNavigation() const; void setVisualNavigation(bool b); + void setKeepPositionOnInsert(bool b); + bool keepPositionOnInsert() const; + void deleteChar(); void deletePreviousChar(); diff --git a/src/gui/text/qtextcursor_p.h b/src/gui/text/qtextcursor_p.h index 1bdfa78..4e36b95 100644 --- a/src/gui/text/qtextcursor_p.h +++ b/src/gui/text/qtextcursor_p.h @@ -112,7 +112,8 @@ public: int anchor; int adjusted_anchor; int currentCharFormat; - bool visualNavigation; + uint visualNavigation : 1; + uint keepPositionOnInsert : 1; }; QT_END_NAMESPACE diff --git a/tests/auto/qtextcursor/tst_qtextcursor.cpp b/tests/auto/qtextcursor/tst_qtextcursor.cpp index d44ce72..99babac 100644 --- a/tests/auto/qtextcursor/tst_qtextcursor.cpp +++ b/tests/auto/qtextcursor/tst_qtextcursor.cpp @@ -226,9 +226,9 @@ void tst_QTextCursor::navigation1() cursor.movePosition(QTextCursor::End); cursor.insertBlock(); { - int oldPos = cursor.position(); - cursor.movePosition(QTextCursor::End); - QVERIFY(cursor.position() == oldPos); + int oldPos = cursor.position(); + cursor.movePosition(QTextCursor::End); + QVERIFY(cursor.position() == oldPos); } QVERIFY(cursor.atBlockStart()); QVERIFY(cursor.position() == 9); @@ -1699,8 +1699,10 @@ void tst_QTextCursor::adjustCursorsOnInsert() QCOMPARE(selection.position(), posAfter+1); doc->undo(); + selection.setKeepPositionOnInsert(true); cursor.setPosition(posAfter); cursor.insertText(QLatin1String("x")); + selection.setKeepPositionOnInsert(false); QCOMPARE(selection.anchor(), posBefore); QCOMPARE(selection.position(), posAfter); doc->undo(); -- cgit v0.12 From bbc96efe5f47353d3188728fc9024cfec5553709 Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Tue, 1 Jun 2010 12:39:18 +0200 Subject: Introduced getter and setter for the visual X cursor position. The mechanism allows the cursor to move up and down on a visually straight line with proportional fonts, and to gently "jump" over short lines. Reviewed-by: mae --- src/gui/text/qtextcursor.cpp | 35 +++++++++++++++++++++++++++++++++++ src/gui/text/qtextcursor.h | 3 +++ 2 files changed, 38 insertions(+) diff --git a/src/gui/text/qtextcursor.cpp b/src/gui/text/qtextcursor.cpp index abc0889..d6ac3aa 100644 --- a/src/gui/text/qtextcursor.cpp +++ b/src/gui/text/qtextcursor.cpp @@ -1277,6 +1277,41 @@ void QTextCursor::setVisualNavigation(bool b) d->visualNavigation = b; } + +/*! + \since 4.7 + + Sets the visual x position for vertical cursor movements. + + The vertical movement x position is cleared automatically when the cursor moves horizontally, and kept + unchanged when the cursor moves vertically. The mechanism allows the cursor to move up and down on a + visually straight line with proportional fonts, and to gently "jump" over short lines. + + A value of -1 indicates no predefined x position. It will then be set automatically the next time the + cursor moves up or down. + + \sa verticalMovementX() + */ +void QTextCursor::setVerticalMovementX(int x) +{ + if (d) + d->x = x; +} + +/*! \since 4.7 + + Returns the visual x position for vertical cursor movements. + + A value of -1 indicates no predefined x position. It will then be set automatically the next time the + cursor moves up or down. + + \sa setVerticalMovementX() + */ +int QTextCursor::verticalMovementX() const +{ + return d ? d->x : -1; +} + /*! \since 4.7 diff --git a/src/gui/text/qtextcursor.h b/src/gui/text/qtextcursor.h index 6cb776c..251cb33 100644 --- a/src/gui/text/qtextcursor.h +++ b/src/gui/text/qtextcursor.h @@ -132,6 +132,9 @@ public: bool visualNavigation() const; void setVisualNavigation(bool b); + void setVerticalMovementX(int x); + int verticalMovementX() const; + void setKeepPositionOnInsert(bool b); bool keepPositionOnInsert() const; -- cgit v0.12 From 0081d328394dea7ddcf7411ece678973a86781c9 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Tue, 1 Jun 2010 12:45:09 +0200 Subject: Fix QML crashes on the N900 JavaScriptCore and QtWebKit JIT symbols were clashing. Hide the new thunk functions that DEFINE_STUB_FUNCTION declares. Reviewed-by: Tapani Mikola --- src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.cpp b/src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.cpp index 022689b..b3c229e 100644 --- a/src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.cpp +++ b/src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.cpp @@ -1094,6 +1094,10 @@ RVCT() #define DEFINE_STUB_FUNCTION(rtype, op) rtype JIT_STUB cti_##op(STUB_ARGS_DECLARATION) #endif +#if COMPILER(GCC) +#pragma GCC visibility push(hidden) +#endif + DEFINE_STUB_FUNCTION(EncodedJSValue, op_convert_this) { STUB_INIT_STACK_FRAME(stackFrame); @@ -3205,6 +3209,10 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, to_object) return JSValue::encode(stackFrame.args[0].jsValue().toObject(callFrame)); } +#if COMPILER(GCC) +#pragma GCC visibility pop +#endif + } // namespace JSC #endif // ENABLE(JIT) -- cgit v0.12 From ff57057bc6844eb3c10ab0eadff292a10ef493f8 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Tue, 1 Jun 2010 13:31:18 +0200 Subject: Speed up QStaticText with affine transformation on GL2 engine Since the OpenGL2 paint engine supports transforming the prerendered glyphs rather than rasterizing the glyphs with the transformation applied, we don't need to recalculate the QStaticText layout whenever the transformation changes. This means that we can do fast animated transforms for QStaticText on this paint engine. A quick test yields something like 100x speed-up on Windows. This also give visually better results, as we previously would animate the hinting of the glyphs, thus causing jittering. The autotest has been updated to reflect the fact that drawText() and drawStaticText() now go through identical paths on GL, also when transforms are set on the painter. However, the scale was changed in one test, because it was so great that drawText() would fall back to paths. With QStaticText the idea is speed, so you'll get a poor, but fast result instead, which is better than tricking people. Reviewed-by: Samuel --- src/gui/painting/qpainter.cpp | 23 ++++++++++---- src/gui/text/qstatictext.cpp | 37 ++++++++++++++-------- src/gui/text/qstatictext_p.h | 7 ++-- .../gl2paintengineex/qpaintengineex_opengl2.cpp | 33 ++++++++----------- .../gl2paintengineex/qpaintengineex_opengl2_p.h | 3 +- tests/auto/qstatictext/tst_qstatictext.cpp | 7 ++-- 6 files changed, 61 insertions(+), 49 deletions(-) diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index 657229a..4596754 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -5855,14 +5855,24 @@ void QPainter::drawStaticText(const QPointF &topLeftPosition, const QStaticText return; } + if (d->extended->type() == QPaintEngine::OpenGL2 && !staticText_d->untransformedCoordinates) { + staticText_d->untransformedCoordinates = true; + staticText_d->needsRelayout = true; + } else if (d->extended->type() != QPaintEngine::OpenGL2 && staticText_d->untransformedCoordinates) { + staticText_d->untransformedCoordinates = false; + staticText_d->needsRelayout = true; + } + // Don't recalculate entire layout because of translation, rather add the dx and dy // into the position to move each text item the correct distance. - QPointF transformedPosition = topLeftPosition * d->state->matrix; - QTransform matrix = d->state->matrix; + QPointF transformedPosition = topLeftPosition; + if (!staticText_d->untransformedCoordinates) + transformedPosition = transformedPosition * d->state->matrix; + QTransform oldMatrix; // The translation has been applied to transformedPosition. Remove translation // component from matrix. - if (d->state->matrix.isTranslating()) { + if (d->state->matrix.isTranslating() && !staticText_d->untransformedCoordinates) { qreal m11 = d->state->matrix.m11(); qreal m12 = d->state->matrix.m12(); qreal m13 = d->state->matrix.m13(); @@ -5871,6 +5881,7 @@ void QPainter::drawStaticText(const QPointF &topLeftPosition, const QStaticText qreal m23 = d->state->matrix.m23(); qreal m33 = d->state->matrix.m33(); + oldMatrix = d->state->matrix; d->state->matrix.setMatrix(m11, m12, m13, m21, m22, m23, 0.0, 0.0, m33); @@ -5879,7 +5890,7 @@ void QPainter::drawStaticText(const QPointF &topLeftPosition, const QStaticText // If the transform is not identical to the text transform, // we have to relayout the text (for other transformations than plain translation) bool staticTextNeedsReinit = staticText_d->needsRelayout; - if (staticText_d->matrix != d->state->matrix) { + if (!staticText_d->untransformedCoordinates && staticText_d->matrix != d->state->matrix) { staticText_d->matrix = d->state->matrix; staticTextNeedsReinit = true; } @@ -5918,8 +5929,8 @@ void QPainter::drawStaticText(const QPointF &topLeftPosition, const QStaticText if (currentColor != oldPen.color()) setPen(oldPen); - if (matrix.isTranslating()) - d->state->matrix = matrix; + if (!staticText_d->untransformedCoordinates && oldMatrix.isTranslating()) + d->state->matrix = oldMatrix; } /*! diff --git a/src/gui/text/qstatictext.cpp b/src/gui/text/qstatictext.cpp index 84c1d96..10870aa 100644 --- a/src/gui/text/qstatictext.cpp +++ b/src/gui/text/qstatictext.cpp @@ -115,10 +115,12 @@ QT_BEGIN_NAMESPACE Qt::RichText. If it's the first time the static text is drawn, or if the static text, or the painter's font - or matrix have been altered since the last time it was drawn, the text's layout has to be - recalculated. This will impose an overhead on the QPainter::drawStaticText() call where the - relayout occurs. To avoid this overhead in the paint event, you can call prepare() ahead of - time to ensure that the layout is calculated. + has been altered since the last time it was drawn, the text's layout has to be + recalculated. On some paint engines, changing the matrix of the painter will also cause the + layout to be recalculated. In particular, this will happen for any engine except for the + OpenGL2 paint engine. Recalculating the layout will impose an overhead on the + QPainter::drawStaticText() call where it occurs. To avoid this overhead in the paint event, you + can call prepare() ahead of time to ensure that the layout is calculated. \sa QPainter::drawText(), QPainter::drawStaticText(), QTextLayout, QTextDocument */ @@ -188,8 +190,9 @@ void QStaticText::detach() When drawStaticText() is called, the layout of the QStaticText will be recalculated if any part of the QStaticText object has changed since the last time it was drawn. It will also be - recalculated if the painter's font or matrix are not the same as when the QStaticText was last - drawn. + recalculated if the painter's font is not the same as when the QStaticText was last drawn, or, + on any other paint engine than the OpenGL2 engine, if the painter's matrix has been altered + since the static text was last drawn. To avoid the overhead of creating the layout the first time you draw the QStaticText after making changes, you can use the prepare() function and pass in the \a matrix and \a font you @@ -364,14 +367,16 @@ QSizeF QStaticText::size() const QStaticTextPrivate::QStaticTextPrivate() : textWidth(-1.0), items(0), itemCount(0), glyphPool(0), positionPool(0), charPool(0), - needsRelayout(true), useBackendOptimizations(false), textFormat(Qt::AutoText) + needsRelayout(true), useBackendOptimizations(false), textFormat(Qt::AutoText), + untransformedCoordinates(false) { } QStaticTextPrivate::QStaticTextPrivate(const QStaticTextPrivate &other) : text(other.text), font(other.font), textWidth(other.textWidth), matrix(other.matrix), items(0), itemCount(0), glyphPool(0), positionPool(0), charPool(0), needsRelayout(true), - useBackendOptimizations(other.useBackendOptimizations), textFormat(other.textFormat) + useBackendOptimizations(other.useBackendOptimizations), textFormat(other.textFormat), + untransformedCoordinates(other.untransformedCoordinates) { } @@ -396,8 +401,9 @@ namespace { class DrawTextItemRecorder: public QPaintEngine { public: - DrawTextItemRecorder(bool useBackendOptimizations, int numChars) - : m_dirtyPen(false), m_useBackendOptimizations(useBackendOptimizations) + DrawTextItemRecorder(bool untransformedCoordinates, bool useBackendOptimizations, int numChars) + : m_dirtyPen(false), m_useBackendOptimizations(useBackendOptimizations), + m_untransformedCoordinates(untransformedCoordinates) { } @@ -423,7 +429,7 @@ namespace { if (m_dirtyPen) currentItem.color = state->pen().color(); - QTransform matrix = state->transform(); + QTransform matrix = m_untransformedCoordinates ? QTransform() : state->transform(); matrix.translate(position.x(), position.y()); QVarLengthArray glyphs; @@ -486,14 +492,17 @@ namespace { bool m_dirtyPen; bool m_useBackendOptimizations; + bool m_untransformedCoordinates; }; class DrawTextItemDevice: public QPaintDevice { public: - DrawTextItemDevice(bool useBackendOptimizations, int numChars) + DrawTextItemDevice(bool untransformedCoordinates, bool useBackendOptimizations, + int numChars) { - m_paintEngine = new DrawTextItemRecorder(useBackendOptimizations, numChars); + m_paintEngine = new DrawTextItemRecorder(untransformedCoordinates, + useBackendOptimizations, numChars); } ~DrawTextItemDevice() @@ -629,7 +638,7 @@ void QStaticTextPrivate::init() position = QPointF(0, 0); - DrawTextItemDevice device(useBackendOptimizations, text.size()); + DrawTextItemDevice device(untransformedCoordinates, useBackendOptimizations, text.size()); { QPainter painter(&device); painter.setFont(font); diff --git a/src/gui/text/qstatictext_p.h b/src/gui/text/qstatictext_p.h index 2ab5579..1a96291 100644 --- a/src/gui/text/qstatictext_p.h +++ b/src/gui/text/qstatictext_p.h @@ -148,9 +148,10 @@ public: QFixedPoint *positionPool; // 4 bytes per text QChar *charPool; // 4 bytes per text - unsigned char needsRelayout : 1; - unsigned char useBackendOptimizations : 1; // 1 byte per text - unsigned char textFormat : 2; + unsigned char needsRelayout : 1; // 1 byte per text + unsigned char useBackendOptimizations : 1; + unsigned char textFormat : 2; + unsigned char untransformedCoordinates : 1; // ================ // 167 bytes per text diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp index 5758b25..ee49a3d 100644 --- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp +++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp @@ -1333,8 +1333,16 @@ void QGL2PaintEngineEx::drawStaticTextItem(QStaticTextItem *textItem) QFontEngineGlyphCache::Type glyphType = textItem->fontEngine->glyphFormat >= 0 ? QFontEngineGlyphCache::Type(textItem->fontEngine->glyphFormat) : d->glyphCacheType; + if (glyphType == QFontEngineGlyphCache::Raster_RGBMask) { + if (d->device->alphaRequested() || state()->matrix.type() > QTransform::TxTranslate + || (state()->composition_mode != QPainter::CompositionMode_Source + && state()->composition_mode != QPainter::CompositionMode_SourceOver)) + { + glyphType = QFontEngineGlyphCache::Raster_A8; + } + } - d->drawCachedGlyphs(glyphType, textItem, true); + d->drawCachedGlyphs(glyphType, textItem); } bool QGL2PaintEngineEx::drawTexture(const QRectF &dest, GLuint textureId, const QSize &size, const QRectF &src) @@ -1408,7 +1416,7 @@ void QGL2PaintEngineEx::drawTextItem(const QPointF &p, const QTextItem &textItem staticTextItem.numGlyphs = glyphs.size(); staticTextItem.glyphPositions = positions.data(); - d->drawCachedGlyphs(glyphType, &staticTextItem, false); + d->drawCachedGlyphs(glyphType, &staticTextItem); } return; } @@ -1439,21 +1447,16 @@ namespace { // #define QT_OPENGL_DRAWCACHEDGLYPHS_INDEX_ARRAY_VBO void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyphType, - QStaticTextItem *staticTextItem, - bool includeMatrixInCache) + QStaticTextItem *staticTextItem) { Q_Q(QGL2PaintEngineEx); QOpenGL2PaintEngineState *s = q->state(); QGLTextureGlyphCache *cache = - (QGLTextureGlyphCache *) staticTextItem->fontEngine->glyphCache(ctx, glyphType, - includeMatrixInCache - ? s->matrix - : QTransform()); + (QGLTextureGlyphCache *) staticTextItem->fontEngine->glyphCache(ctx, glyphType, QTransform()); if (!cache || cache->cacheType() != glyphType) { - cache = new QGLTextureGlyphCache(ctx, glyphType, - includeMatrixInCache ? s->matrix : QTransform()); + cache = new QGLTextureGlyphCache(ctx, glyphType, QTransform()); staticTextItem->fontEngine->setGlyphCache(ctx, cache); } @@ -1561,13 +1564,6 @@ void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyp QBrush pensBrush = q->state()->pen.brush(); setBrush(pensBrush); - // When painting a QStaticTextItem, the glyph positions are already in device coordinates, - // therefore we temporarily set an identity matrix on the painter for the draw call to - // avoid transforming the positions twice. - QTransform old = s->matrix; - if (includeMatrixInCache) - s->matrix = QTransform(); - if (glyphType == QFontEngineGlyphCache::Raster_RGBMask) { // Subpixel antialiasing without gamma correction @@ -1664,9 +1660,6 @@ void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyp #else glDrawElements(GL_TRIANGLE_STRIP, 6 * staticTextItem->numGlyphs, GL_UNSIGNED_SHORT, elementIndices.data()); #endif - - if (includeMatrixInCache) - s->matrix = old; } void QGL2PaintEngineEx::drawPixmapFragments(const QPainter::PixmapFragment *fragments, int fragmentCount, const QPixmap &pixmap, diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h b/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h index 0a046dc..59b90d8 100644 --- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h +++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h @@ -202,8 +202,7 @@ public: void drawTexture(const QGLRect& dest, const QGLRect& src, const QSize &textureSize, bool opaque, bool pattern = false); void drawPixmapFragments(const QPainter::PixmapFragment *fragments, int fragmentCount, const QPixmap &pixmap, QPainter::PixmapFragmentHints hints); - void drawCachedGlyphs(QFontEngineGlyphCache::Type glyphType, QStaticTextItem *staticTextItem, - bool includeMatrixInCache); + void drawCachedGlyphs(QFontEngineGlyphCache::Type glyphType, QStaticTextItem *staticTextItem); // Calls glVertexAttributePointer if the pointer has changed inline void setVertexAttributePointer(unsigned int arrayIndex, const GLfloat *pointer); diff --git a/tests/auto/qstatictext/tst_qstatictext.cpp b/tests/auto/qstatictext/tst_qstatictext.cpp index c7801ac..1d166f4 100644 --- a/tests/auto/qstatictext/tst_qstatictext.cpp +++ b/tests/auto/qstatictext/tst_qstatictext.cpp @@ -324,8 +324,7 @@ bool tst_QStaticText::supportsTransformations() const QPaintEngine::Type type = engine->type(); - if (type == QPaintEngine::OpenGL2 - || type == QPaintEngine::OpenGL + if (type == QPaintEngine::OpenGL #if !defined Q_WS_WIN || type == QPaintEngine::Raster #endif @@ -471,7 +470,7 @@ void tst_QStaticText::transformationChanged() p.drawText(QRectF(0, 0, 1000, 1000), 0, "Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - p.scale(7.0, 5.0); + p.scale(2.0, 2.5); p.drawText(QRectF(0, 0, 1000, 1000), 0, "Lorem ipsum dolor sit amet, consectetur adipiscing elit."); } @@ -487,7 +486,7 @@ void tst_QStaticText::transformationChanged() p.drawStaticText(QPointF(0, 0), text); - p.scale(7.0, 5.0); + p.scale(2.0, 2.5); p.drawStaticText(QPointF(0, 0), text); } -- cgit v0.12 From 37a0291f932b0af0f6844898ccbce52415f0f179 Mon Sep 17 00:00:00 2001 From: Andreas Aardal Hanssen Date: Tue, 1 Jun 2010 14:01:10 +0200 Subject: Don't remove the pixmap from cache when not modifying it. Fixes one minor regression in the last commit to QGraphicsIten::scroll: if the expose region doesn't intersect with the cache pixmap, then there's no point in removing it. Reviewed-by: Alexis Menard --- src/gui/graphicsview/qgraphicsitem.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index 9d7354a..b3e1701 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -5687,18 +5687,20 @@ void QGraphicsItem::scroll(qreal dx, qreal dy, const QRectF &rect) return; } - // Find pixmap in cache, then remove to avoid deep copy when modifying.s + // Find pixmap in cache. QPixmap cachedPixmap; if (!QPixmapCache::find(cache->key, &cachedPixmap)) { update(rect); return; } - QPixmapCache::remove(cache->key); QRect scrollRect = (rect.isNull() ? boundingRect() : rect).toAlignedRect(); if (!scrollRect.intersects(cache->boundingRect)) return; // Nothing to scroll. + // Remove from cache to avoid deep copy when modifying. + QPixmapCache::remove(cache->key); + QRegion exposed; cachedPixmap.scroll(dx, dy, scrollRect.translated(-cache->boundingRect.topLeft()), &exposed); -- cgit v0.12 From dab3121d59b202eac72a0b7d0fa101532ac080cd Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 31 May 2010 19:47:52 +0200 Subject: fix setRawData() setRawData() itself (consistently with fromRawData()) sets alloc to the passed raw size, so the check at the start would always find that we cannot re-use the qstring object, thus completely defeating the purpose of the function. so also check that the string data pointer actually points into the internal array before giving up. Reviewed-by: olivier --- src/corelib/tools/qstring.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp index 6acbcec..a0dbb8e 100644 --- a/src/corelib/tools/qstring.cpp +++ b/src/corelib/tools/qstring.cpp @@ -7093,7 +7093,7 @@ QString QString::fromRawData(const QChar *unicode, int size) */ QString &QString::setRawData(const QChar *unicode, int size) { - if (d->ref != 1 || d->alloc) { + if (d->ref != 1 || (d->data == d->array && d->alloc)) { *this = fromRawData(unicode, size); } else { #ifdef QT3_SUPPORT -- cgit v0.12 From f370fa5c6758cdce3c161de94888ed1d05ae2c9f Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Tue, 1 Jun 2010 15:32:57 +0200 Subject: Updated WebKit to f59a934694947496cedecc5256a71bff60c43c4c Integrated changes: || || [Qt] QtWebkit.pc is broken || Plus a fix for the installation/setup of qt_webkit_version.pri --- src/3rdparty/webkit/.tag | 2 +- src/3rdparty/webkit/VERSION | 2 +- src/3rdparty/webkit/WebCore/ChangeLog | 23 ++++++++++++++++++++++ src/3rdparty/webkit/WebCore/WebCore.pro | 18 +++++++++++++---- src/3rdparty/webkit/WebKit/qt/ChangeLog | 8 ++++++++ .../webkit/WebKit/qt/qt_webkit_version.pri | 4 ++++ src/3rdparty/webkit/WebKit/qt/qtwebkit_version.pri | 4 ---- 7 files changed, 51 insertions(+), 10 deletions(-) create mode 100644 src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri delete mode 100644 src/3rdparty/webkit/WebKit/qt/qtwebkit_version.pri diff --git a/src/3rdparty/webkit/.tag b/src/3rdparty/webkit/.tag index 8cb0e53..14be658 100644 --- a/src/3rdparty/webkit/.tag +++ b/src/3rdparty/webkit/.tag @@ -1 +1 @@ -f59a934694947496cedecc5256a71bff60c43c4c +9a83f22bc41a2016b6bbf495bfd32b3a659038c8 diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION index fb78e36..a63a9d1 100644 --- a/src/3rdparty/webkit/VERSION +++ b/src/3rdparty/webkit/VERSION @@ -4,4 +4,4 @@ This is a snapshot of the Qt port of WebKit from and has the sha1 checksum - c58dc2f491a824ac56e31c440fcf7fe16dab09c4 + f59a934694947496cedecc5256a71bff60c43c4c diff --git a/src/3rdparty/webkit/WebCore/ChangeLog b/src/3rdparty/webkit/WebCore/ChangeLog index ff7d214..246504f 100644 --- a/src/3rdparty/webkit/WebCore/ChangeLog +++ b/src/3rdparty/webkit/WebCore/ChangeLog @@ -1,3 +1,26 @@ +2010-06-01 Jocelyn Turcotte + + Reviewed by Simon Hausmann. + + [Qt] Fix a QtWebKit.pc corruption problem. + https://bugs.webkit.org/show_bug.cgi?id=36826 + + The problem occurs while installing QtWebKit from trunk + or a source package. + + * WebCore.pro: + +2010-06-01 Simon Hausmann + + Reviewed by Laszlo Gombos. + + [Qt] Fix Symbian package dependencies of apps against QtWebKit when installing into Qt + + Install the versioning qt_webkit_version.pri into $$[QMAKE_MKSPECS]/modules, which is + where mkspecs/features/qt.prf expects it. + + * WebCore.pro: + 2010-05-31 Oswald Buddenhagen Reviewed by Simon Hausmann. diff --git a/src/3rdparty/webkit/WebCore/WebCore.pro b/src/3rdparty/webkit/WebCore/WebCore.pro index 63e78a7..f2671fb 100644 --- a/src/3rdparty/webkit/WebCore/WebCore.pro +++ b/src/3rdparty/webkit/WebCore/WebCore.pro @@ -74,7 +74,8 @@ CONFIG(QTDIR_build) { !static: DEFINES += QT_MAKEDLL symbian: TARGET =$$TARGET$${QT_LIBINFIX} } -include($$PWD/../WebKit/qt/qtwebkit_version.pri) +moduleFile=$$PWD/../WebKit/qt/qt_webkit_version.pri +include($$moduleFile) VERSION = $${QT_WEBKIT_MAJOR_VERSION}.$${QT_WEBKIT_MINOR_VERSION}.$${QT_WEBKIT_PATCH_VERSION} unix { @@ -2849,7 +2850,10 @@ HEADERS += $$WEBKIT_API_HEADERS headers.path = $$[QT_INSTALL_HEADERS]/QtWebKit target.path = $$[QT_INSTALL_LIBS] - INSTALLS += target headers + modfile.files = $$moduleFile + modfile.path = $$[QMAKE_MKSPECS]/modules + + INSTALLS += target headers modfile } else { # INSTALLS is not implemented in qmake's s60 generators, copy headers manually inst_headers.commands = $$QMAKE_COPY ${QMAKE_FILE_NAME} ${QMAKE_FILE_OUT} @@ -2857,7 +2861,13 @@ HEADERS += $$WEBKIT_API_HEADERS inst_headers.output = $$[QT_INSTALL_HEADERS]/QtWebKit/${QMAKE_FILE_BASE}${QMAKE_FILE_EXT} QMAKE_EXTRA_COMPILERS += inst_headers - install.depends += compiler_inst_headers_make_all + inst_modfile.commands = $$inst_headers.commands + inst_modfile.input = moduleFile + inst_modfile.output = $$[QMAKE_MKSPECS]/modules + + QMAKE_EXTRA_COMPILERS += inst_modfile + + install.depends += compiler_inst_headers_make_all compiler_inst_modfile_make_all QMAKE_EXTRA_TARGETS += install } @@ -2875,7 +2885,7 @@ HEADERS += $$WEBKIT_API_HEADERS QMAKE_PKGCONFIG_LIBDIR = $$target.path QMAKE_PKGCONFIG_INCDIR = $$headers.path QMAKE_PKGCONFIG_DESTDIR = pkgconfig - lib_replace.match = $$DESTDIR + lib_replace.match = $$re_escape($$DESTDIR) lib_replace.replace = $$[QT_INSTALL_LIBS] QMAKE_PKGCONFIG_INSTALL_REPLACE += lib_replace } diff --git a/src/3rdparty/webkit/WebKit/qt/ChangeLog b/src/3rdparty/webkit/WebKit/qt/ChangeLog index b6cbf92..39f2cf3 100644 --- a/src/3rdparty/webkit/WebKit/qt/ChangeLog +++ b/src/3rdparty/webkit/WebKit/qt/ChangeLog @@ -1,3 +1,11 @@ +2010-06-01 Simon Hausmann + + Reviewed by Laszlo Gombos. + + [Qt] Rename versioning .pri file to what Qt's mkspecs/features/qt.pri expects. + + * qt_webkit_version.pri: Renamed from WebKit/qt/qtwebkit_version.pri. + 2010-05-31 Oswald Buddenhagen Reviewed by Simon Hausmann. diff --git a/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri b/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri new file mode 100644 index 0000000..ffd192c --- /dev/null +++ b/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri @@ -0,0 +1,4 @@ +QT_WEBKIT_VERSION = 4.7.0 +QT_WEBKIT_MAJOR_VERSION = 4 +QT_WEBKIT_MINOR_VERSION = 7 +QT_WEBKIT_PATCH_VERSION = 0 diff --git a/src/3rdparty/webkit/WebKit/qt/qtwebkit_version.pri b/src/3rdparty/webkit/WebKit/qt/qtwebkit_version.pri deleted file mode 100644 index ffd192c..0000000 --- a/src/3rdparty/webkit/WebKit/qt/qtwebkit_version.pri +++ /dev/null @@ -1,4 +0,0 @@ -QT_WEBKIT_VERSION = 4.7.0 -QT_WEBKIT_MAJOR_VERSION = 4 -QT_WEBKIT_MINOR_VERSION = 7 -QT_WEBKIT_PATCH_VERSION = 0 -- cgit v0.12 From 2c8f9dee611ed403ef129d5e3a3f9f5883bfd08b Mon Sep 17 00:00:00 2001 From: Jens Bache-Wiig Date: Tue, 1 Jun 2010 15:32:03 +0200 Subject: Some optimizations for QImage::load() We didnt check if the file existed before trying to load it. This means that we had a lot of redundant dlopen calls for that case. In addition pixmap cache should be significantly faster now. Task-number: QTBUG-11137 Reviewed-by: joao --- src/gui/image/qpixmap.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp index 3013726..20e4b50 100644 --- a/src/gui/image/qpixmap.cpp +++ b/src/gui/image/qpixmap.cpp @@ -82,6 +82,7 @@ #endif #include "qpixmap_raster_p.h" +#include "private/qstylehelper_p.h" QT_BEGIN_NAMESPACE @@ -829,8 +830,14 @@ bool QPixmap::load(const QString &fileName, const char *format, Qt::ImageConvers return false; QFileInfo info(fileName); - QString key = QLatin1String("qt_pixmap_") + info.absoluteFilePath() + QLatin1Char('_') + QString::number(info.lastModified().toTime_t()) + QLatin1Char('_') + - QString::number(info.size()) + QLatin1Char('_') + QString::number(data ? data->pixelType() : QPixmapData::PixmapType); + if (!info.exists()) + return false; + + QString key = QLatin1Literal("qt_pixmap") + % info.absoluteFilePath() + % HexString(info.lastModified().toTime_t()) + % HexString(info.size()) + % HexString(data ? data->pixelType() : QPixmapData::PixmapType); if (QPixmapCache::find(key, *this)) return true; -- cgit v0.12 From 9ea2eb78e4e3613f052535892a5f3bbf0e8c4dee Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Tue, 1 Jun 2010 16:06:00 +0200 Subject: Fix versioning of pkg files on Symbian for apps linking against WebKit Currently features/symbian/qt.prf defaults to the qt version for WebKit when it comes with Qt from src/3rdparty. Instead of defaulting to the Qt version, pick up the real version from src/3rdparty by including the .pri file. Reviewed-by: Jocelyn Turcotte --- mkspecs/modules/qt_webkit_version.pri | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 mkspecs/modules/qt_webkit_version.pri diff --git a/mkspecs/modules/qt_webkit_version.pri b/mkspecs/modules/qt_webkit_version.pri new file mode 100644 index 0000000..0370720 --- /dev/null +++ b/mkspecs/modules/qt_webkit_version.pri @@ -0,0 +1,2 @@ +# The version information comes from our copy of +include($$PWD/../../src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri) -- cgit v0.12 From 5d7b4968cc181726b97848bda5684da99e6db312 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Tue, 1 Jun 2010 16:38:48 +0200 Subject: Updated WebKit to 9a83f22bc41a2016b6bbf495bfd32b3a659038c8 Integrated changes: || || [Qt] QtWebkit.pc is broken || || || Bring CanvasRenderingContext2D's createImageData() in line with HTML5 spec || || || Properly handle invalid arguments to CanvasRenderingContext2D's getImageData() and putImageData() || As well as fixes for the qt_webkit_version.pri module installation. --- src/3rdparty/webkit/.tag | 2 +- src/3rdparty/webkit/VERSION | 2 +- src/3rdparty/webkit/WebCore/ChangeLog | 50 ++++++++++++++++++++++ src/3rdparty/webkit/WebCore/WebCore.pro | 7 ++- .../js/JSCanvasRenderingContext2DCustom.cpp | 18 ++++++++ .../generated/JSCanvasRenderingContext2D.cpp | 12 +----- .../WebCore/generated/JSCanvasRenderingContext2D.h | 1 + .../html/canvas/CanvasRenderingContext2D.cpp | 30 +++++++++++-- .../WebCore/html/canvas/CanvasRenderingContext2D.h | 1 + .../html/canvas/CanvasRenderingContext2D.idl | 3 +- 10 files changed, 108 insertions(+), 18 deletions(-) diff --git a/src/3rdparty/webkit/.tag b/src/3rdparty/webkit/.tag index 14be658..cc67d1b 100644 --- a/src/3rdparty/webkit/.tag +++ b/src/3rdparty/webkit/.tag @@ -1 +1 @@ -9a83f22bc41a2016b6bbf495bfd32b3a659038c8 +de1e909b06cbc981d63e0fc0f6a3f84002dd1e80 diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION index a63a9d1..f37c367 100644 --- a/src/3rdparty/webkit/VERSION +++ b/src/3rdparty/webkit/VERSION @@ -4,4 +4,4 @@ This is a snapshot of the Qt port of WebKit from and has the sha1 checksum - f59a934694947496cedecc5256a71bff60c43c4c + 9a83f22bc41a2016b6bbf495bfd32b3a659038c8 diff --git a/src/3rdparty/webkit/WebCore/ChangeLog b/src/3rdparty/webkit/WebCore/ChangeLog index 246504f..e907167 100644 --- a/src/3rdparty/webkit/WebCore/ChangeLog +++ b/src/3rdparty/webkit/WebCore/ChangeLog @@ -1,3 +1,11 @@ +2010-06-01 Simon Hausmann + + Reviewed by Laszlo Gombos. + + [Qt] Fix installation of the QtWebKit module .pri file when building inside of Qt + + * WebCore.pro: + 2010-06-01 Jocelyn Turcotte Reviewed by Simon Hausmann. @@ -21,6 +29,48 @@ * WebCore.pro: +2010-05-17 Andreas Kling + + Reviewed by Kenneth Rohde Christiansen. + + Bring CanvasRenderingContext2D's createImageData() in line with HTML5 spec + Added createImageData(ImageData) which returns a new ImageData with the same size as the one passed. + Changed createImageData(width, height) to use the absolute values of width and height. + + https://bugs.webkit.org/show_bug.cgi?id=39189 + + Spec link: + http://www.whatwg.org/specs/web-apps/current-work/#dom-context-2d-createimagedata + + Test: fast/canvas/canvas-createImageData.html + + * bindings/js/JSCanvasRenderingContext2DCustom.cpp: + (WebCore::JSCanvasRenderingContext2D::createImageData): + * html/canvas/CanvasRenderingContext2D.cpp: + (WebCore::CanvasRenderingContext2D::createImageData): + * html/canvas/CanvasRenderingContext2D.h: + * html/canvas/CanvasRenderingContext2D.idl: + +2010-05-16 Andreas Kling + + Reviewed by Kenneth Rohde Christiansen. + + Properly handle invalid arguments to CanvasRenderingContext2D's getImageData() and putImageData(). + Both should throw NOT_SUPPORTED_ERR when called with nonfinite arguments. + getImageData() should throw INDEX_SIZE_ERR if either width or height is 0. + + https://bugs.webkit.org/show_bug.cgi?id=39175 + + Spec link: + http://www.whatwg.org/specs/web-apps/current-work/#pixel-manipulation + + Test: fast/canvas/canvas-getImageData-invalid.html + + * html/canvas/CanvasRenderingContext2D.cpp: + (WebCore::CanvasRenderingContext2D::createImageData): + (WebCore::CanvasRenderingContext2D::getImageData): + (WebCore::CanvasRenderingContext2D::putImageData): + 2010-05-31 Oswald Buddenhagen Reviewed by Simon Hausmann. diff --git a/src/3rdparty/webkit/WebCore/WebCore.pro b/src/3rdparty/webkit/WebCore/WebCore.pro index f2671fb..2a1536c 100644 --- a/src/3rdparty/webkit/WebCore/WebCore.pro +++ b/src/3rdparty/webkit/WebCore/WebCore.pro @@ -2841,7 +2841,12 @@ contains(DEFINES, ENABLE_SYMBIAN_DIALOG_PROVIDERS) { include($$PWD/../WebKit/qt/Api/headers.pri) HEADERS += $$WEBKIT_API_HEADERS -!CONFIG(QTDIR_build) { +CONFIG(QTDIR_build) { + modfile.files = $$moduleFile + modfile.path = $$[QMAKE_MKSPECS]/modules + + INSTALLS += modfile +} else { exists($$OUTPUT_DIR/include/QtWebKit/classheaders.pri): include($$OUTPUT_DIR/include/QtWebKit/classheaders.pri) WEBKIT_INSTALL_HEADERS = $$WEBKIT_API_HEADERS $$WEBKIT_CLASS_HEADERS diff --git a/src/3rdparty/webkit/WebCore/bindings/js/JSCanvasRenderingContext2DCustom.cpp b/src/3rdparty/webkit/WebCore/bindings/js/JSCanvasRenderingContext2DCustom.cpp index a271923..0254d0f 100644 --- a/src/3rdparty/webkit/WebCore/bindings/js/JSCanvasRenderingContext2DCustom.cpp +++ b/src/3rdparty/webkit/WebCore/bindings/js/JSCanvasRenderingContext2DCustom.cpp @@ -361,6 +361,24 @@ JSValue JSCanvasRenderingContext2D::createPattern(ExecState* exec, const ArgList return jsUndefined(); } +JSValue JSCanvasRenderingContext2D::createImageData(ExecState* exec, const ArgList& args) +{ + // createImageData has two variants + // createImageData(ImageData) + // createImageData(width, height) + CanvasRenderingContext2D* context = static_cast(impl()); + RefPtr imageData = 0; + + ExceptionCode ec = 0; + if (args.size() == 1) + imageData = context->createImageData(toImageData(args.at(0)), ec); + else if (args.size() == 2) + imageData = context->createImageData(args.at(0).toFloat(exec), args.at(1).toFloat(exec), ec); + + setDOMException(exec, ec); + return toJS(exec, globalObject(), WTF::getPtr(imageData)); +} + JSValue JSCanvasRenderingContext2D::putImageData(ExecState* exec, const ArgList& args) { // putImageData has two variants diff --git a/src/3rdparty/webkit/WebCore/generated/JSCanvasRenderingContext2D.cpp b/src/3rdparty/webkit/WebCore/generated/JSCanvasRenderingContext2D.cpp index a991e8d..d97b54a 100644 --- a/src/3rdparty/webkit/WebCore/generated/JSCanvasRenderingContext2D.cpp +++ b/src/3rdparty/webkit/WebCore/generated/JSCanvasRenderingContext2D.cpp @@ -165,7 +165,7 @@ static const HashTableValue JSCanvasRenderingContext2DPrototypeTableValues[45] = { "drawImageFromRect", DontDelete|Function, (intptr_t)static_cast(jsCanvasRenderingContext2DPrototypeFunctionDrawImageFromRect), (intptr_t)0 }, { "setShadow", DontDelete|Function, (intptr_t)static_cast(jsCanvasRenderingContext2DPrototypeFunctionSetShadow), (intptr_t)0 }, { "createPattern", DontDelete|Function, (intptr_t)static_cast(jsCanvasRenderingContext2DPrototypeFunctionCreatePattern), (intptr_t)0 }, - { "createImageData", DontDelete|Function, (intptr_t)static_cast(jsCanvasRenderingContext2DPrototypeFunctionCreateImageData), (intptr_t)2 }, + { "createImageData", DontDelete|Function, (intptr_t)static_cast(jsCanvasRenderingContext2DPrototypeFunctionCreateImageData), (intptr_t)0 }, { "getImageData", DontDelete|Function, (intptr_t)static_cast(jsCanvasRenderingContext2DPrototypeFunctionGetImageData), (intptr_t)4 }, { "putImageData", DontDelete|Function, (intptr_t)static_cast(jsCanvasRenderingContext2DPrototypeFunctionPutImageData), (intptr_t)0 }, { 0, 0, 0, 0 } @@ -1018,15 +1018,7 @@ JSValue JSC_HOST_CALL jsCanvasRenderingContext2DPrototypeFunctionCreateImageData if (!thisValue.inherits(&JSCanvasRenderingContext2D::s_info)) return throwError(exec, TypeError); JSCanvasRenderingContext2D* castedThisObj = static_cast(asObject(thisValue)); - CanvasRenderingContext2D* imp = static_cast(castedThisObj->impl()); - ExceptionCode ec = 0; - float sw = args.at(0).toFloat(exec); - float sh = args.at(1).toFloat(exec); - - - JSC::JSValue result = toJS(exec, castedThisObj->globalObject(), WTF::getPtr(imp->createImageData(sw, sh, ec))); - setDOMException(exec, ec); - return result; + return castedThisObj->createImageData(exec, args); } JSValue JSC_HOST_CALL jsCanvasRenderingContext2DPrototypeFunctionGetImageData(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args) diff --git a/src/3rdparty/webkit/WebCore/generated/JSCanvasRenderingContext2D.h b/src/3rdparty/webkit/WebCore/generated/JSCanvasRenderingContext2D.h index 218e455..92fabb7 100644 --- a/src/3rdparty/webkit/WebCore/generated/JSCanvasRenderingContext2D.h +++ b/src/3rdparty/webkit/WebCore/generated/JSCanvasRenderingContext2D.h @@ -61,6 +61,7 @@ public: JSC::JSValue drawImageFromRect(JSC::ExecState*, const JSC::ArgList&); JSC::JSValue setShadow(JSC::ExecState*, const JSC::ArgList&); JSC::JSValue createPattern(JSC::ExecState*, const JSC::ArgList&); + JSC::JSValue createImageData(JSC::ExecState*, const JSC::ArgList&); JSC::JSValue putImageData(JSC::ExecState*, const JSC::ArgList&); protected: static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | Base::StructureFlags; diff --git a/src/3rdparty/webkit/WebCore/html/canvas/CanvasRenderingContext2D.cpp b/src/3rdparty/webkit/WebCore/html/canvas/CanvasRenderingContext2D.cpp index 398e4d8..9cec7a9 100644 --- a/src/3rdparty/webkit/WebCore/html/canvas/CanvasRenderingContext2D.cpp +++ b/src/3rdparty/webkit/WebCore/html/canvas/CanvasRenderingContext2D.cpp @@ -1278,14 +1278,30 @@ static PassRefPtr createEmptyImageData(const IntSize& size) return data.get(); } +PassRefPtr CanvasRenderingContext2D::createImageData(PassRefPtr imageData, ExceptionCode& ec) const +{ + if (!imageData) { + ec = NOT_SUPPORTED_ERR; + return 0; + } + + IntSize size(imageData->width(), imageData->height()); + return createEmptyImageData(size); +} + PassRefPtr CanvasRenderingContext2D::createImageData(float sw, float sh, ExceptionCode& ec) const { ec = 0; + if (!sw || !sh) { + ec = INDEX_SIZE_ERR; + return 0; + } if (!isfinite(sw) || !isfinite(sh)) { ec = NOT_SUPPORTED_ERR; return 0; } - FloatSize unscaledSize(sw, sh); + + FloatSize unscaledSize(fabs(sw), fabs(sh)); IntSize scaledSize = canvas()->convertLogicalToDevice(unscaledSize); if (scaledSize.width() < 1) scaledSize.setWidth(1); @@ -1301,7 +1317,15 @@ PassRefPtr CanvasRenderingContext2D::getImageData(float sx, float sy, ec = SECURITY_ERR; return 0; } - + if (!sw || !sh) { + ec = INDEX_SIZE_ERR; + return 0; + } + if (!isfinite(sx) || !isfinite(sy) || !isfinite(sw) || !isfinite(sh)) { + ec = NOT_SUPPORTED_ERR; + return 0; + } + FloatRect unscaledRect(sx, sy, sw, sh); IntRect scaledRect = canvas()->convertLogicalToDevice(unscaledRect); if (scaledRect.width() < 1) @@ -1332,7 +1356,7 @@ void CanvasRenderingContext2D::putImageData(ImageData* data, float dx, float dy, } if (!isfinite(dx) || !isfinite(dy) || !isfinite(dirtyX) || !isfinite(dirtyY) || !isfinite(dirtyWidth) || !isfinite(dirtyHeight)) { - ec = INDEX_SIZE_ERR; + ec = NOT_SUPPORTED_ERR; return; } diff --git a/src/3rdparty/webkit/WebCore/html/canvas/CanvasRenderingContext2D.h b/src/3rdparty/webkit/WebCore/html/canvas/CanvasRenderingContext2D.h index 553ffd2..2220f7e 100644 --- a/src/3rdparty/webkit/WebCore/html/canvas/CanvasRenderingContext2D.h +++ b/src/3rdparty/webkit/WebCore/html/canvas/CanvasRenderingContext2D.h @@ -178,6 +178,7 @@ namespace WebCore { PassRefPtr createPattern(HTMLImageElement*, const String& repetitionType, ExceptionCode&); PassRefPtr createPattern(HTMLCanvasElement*, const String& repetitionType, ExceptionCode&); + PassRefPtr createImageData(PassRefPtr imageData, ExceptionCode&) const; PassRefPtr createImageData(float width, float height, ExceptionCode&) const; PassRefPtr getImageData(float sx, float sy, float sw, float sh, ExceptionCode&) const; void putImageData(ImageData*, float dx, float dy, ExceptionCode&); diff --git a/src/3rdparty/webkit/WebCore/html/canvas/CanvasRenderingContext2D.idl b/src/3rdparty/webkit/WebCore/html/canvas/CanvasRenderingContext2D.idl index f93a752..3f7ead7 100644 --- a/src/3rdparty/webkit/WebCore/html/canvas/CanvasRenderingContext2D.idl +++ b/src/3rdparty/webkit/WebCore/html/canvas/CanvasRenderingContext2D.idl @@ -105,13 +105,12 @@ module html { [Custom] void drawImageFromRect(/* 10 */); [Custom] void setShadow(/* 3 */); [Custom] void createPattern(/* 2 */); + [Custom] ImageData createImageData(/* 3 */); attribute [Custom] custom strokeStyle; attribute [Custom] custom fillStyle; // pixel manipulation - ImageData createImageData(in float sw, in float sh) - raises (DOMException); ImageData getImageData(in float sx, in float sy, in float sw, in float sh) raises(DOMException); [Custom] void putImageData(/* in ImageData imagedata, in float dx, in float dy [, in float dirtyX, in float dirtyY, in float dirtyWidth, in float dirtyHeight] */); -- cgit v0.12 From 2e904930ede28a59710ef6f898419aba7ede7c06 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Tue, 1 Jun 2010 14:58:05 +1000 Subject: Add Vector3dAnimation to list of QML elements --- doc/src/declarative/elements.qdoc | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/src/declarative/elements.qdoc b/doc/src/declarative/elements.qdoc index 574a187..713b49d 100644 --- a/doc/src/declarative/elements.qdoc +++ b/doc/src/declarative/elements.qdoc @@ -76,6 +76,7 @@ The following table lists the QML elements provided by the \l {QtDeclarative}{Qt \o \l ParentAnimation \o \l AnchorAnimation \o \l SmoothedAnimation +\o \l Vector3dAnimation \o \l PropertyAction \o \l ScriptAction \o \l Transition -- cgit v0.12 From 9cb0802cede5f9fd91ca303bcec5ae869acae951 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Tue, 1 Jun 2010 16:27:59 +1000 Subject: Doc fixes and improvements - fix some example code, link to examples from class docs and improve assorted docs --- doc/src/declarative/pics/gridview-highlight.png | Bin 0 -> 11806 bytes doc/src/declarative/pics/gridview-simple.png | Bin 0 -> 10149 bytes doc/src/declarative/pics/gridview.png | Bin 10564 -> 0 bytes doc/src/declarative/pics/translate.png | Bin 0 -> 398 bytes doc/src/declarative/pics/visualitemmodel.png | Bin 0 -> 347 bytes doc/src/snippets/declarative/drag.qml | 59 ------- .../snippets/declarative/gridview/ContactModel.qml | 64 +++++++ .../gridview/dummydata/ContactModel.qml | 66 -------- doc/src/snippets/declarative/gridview/gridview.qml | 110 ++++++++---- .../snippets/declarative/listview/highlight.qml | 104 ------------ doc/src/snippets/declarative/mousearea.qml | 119 +++++++++++++ doc/src/snippets/declarative/mouseregion.qml | 75 --------- .../snippets/declarative/pathview/ContactModel.qml | 59 +++++++ .../declarative/pathview/dummydata/MenuModel.qml | 58 ------- .../declarative/pathview/pathattributes.qml | 13 +- doc/src/snippets/declarative/pathview/pathview.qml | 22 +-- .../declarative/pathview/pics/qtlogo-64.png | Bin 2991 -> 0 bytes .../snippets/declarative/pathview/pics/qtlogo.png | Bin 0 -> 2991 bytes .../graphicsitems/qdeclarativeanimatedimage.cpp | 25 ++- .../graphicsitems/qdeclarativeflipable.cpp | 10 +- .../graphicsitems/qdeclarativegridview.cpp | 185 ++++++++++----------- .../graphicsitems/qdeclarativeimage.cpp | 5 - src/declarative/graphicsitems/qdeclarativeitem.cpp | 6 +- .../graphicsitems/qdeclarativelayoutitem.cpp | 5 +- .../graphicsitems/qdeclarativelistview.cpp | 25 ++- .../graphicsitems/qdeclarativeloader.cpp | 50 ++++-- .../graphicsitems/qdeclarativemousearea.cpp | 59 +++---- src/declarative/graphicsitems/qdeclarativepath.cpp | 7 +- .../graphicsitems/qdeclarativepathview.cpp | 12 +- .../graphicsitems/qdeclarativepositioners.cpp | 101 +++++------ .../graphicsitems/qdeclarativerectangle.cpp | 4 +- src/declarative/graphicsitems/qdeclarativetext.cpp | 2 + .../graphicsitems/qdeclarativevisualitemmodel.cpp | 6 +- src/declarative/qml/qdeclarativeworkerscript.cpp | 6 +- src/declarative/util/qdeclarativeanimation.cpp | 23 ++- src/declarative/util/qdeclarativefontloader.cpp | 31 +++- .../util/qdeclarativepropertychanges.cpp | 2 +- .../util/qdeclarativesmoothedanimation.cpp | 2 +- src/declarative/util/qdeclarativetimer.cpp | 23 +-- 39 files changed, 670 insertions(+), 668 deletions(-) create mode 100644 doc/src/declarative/pics/gridview-highlight.png create mode 100644 doc/src/declarative/pics/gridview-simple.png delete mode 100644 doc/src/declarative/pics/gridview.png create mode 100644 doc/src/declarative/pics/translate.png create mode 100644 doc/src/declarative/pics/visualitemmodel.png delete mode 100644 doc/src/snippets/declarative/drag.qml create mode 100644 doc/src/snippets/declarative/gridview/ContactModel.qml delete mode 100644 doc/src/snippets/declarative/gridview/dummydata/ContactModel.qml delete mode 100644 doc/src/snippets/declarative/listview/highlight.qml create mode 100644 doc/src/snippets/declarative/mousearea.qml delete mode 100644 doc/src/snippets/declarative/mouseregion.qml create mode 100644 doc/src/snippets/declarative/pathview/ContactModel.qml delete mode 100644 doc/src/snippets/declarative/pathview/dummydata/MenuModel.qml delete mode 100644 doc/src/snippets/declarative/pathview/pics/qtlogo-64.png create mode 100644 doc/src/snippets/declarative/pathview/pics/qtlogo.png diff --git a/doc/src/declarative/pics/gridview-highlight.png b/doc/src/declarative/pics/gridview-highlight.png new file mode 100644 index 0000000..b54af37 Binary files /dev/null and b/doc/src/declarative/pics/gridview-highlight.png differ diff --git a/doc/src/declarative/pics/gridview-simple.png b/doc/src/declarative/pics/gridview-simple.png new file mode 100644 index 0000000..a102939 Binary files /dev/null and b/doc/src/declarative/pics/gridview-simple.png differ diff --git a/doc/src/declarative/pics/gridview.png b/doc/src/declarative/pics/gridview.png deleted file mode 100644 index 3726893..0000000 Binary files a/doc/src/declarative/pics/gridview.png and /dev/null differ diff --git a/doc/src/declarative/pics/translate.png b/doc/src/declarative/pics/translate.png new file mode 100644 index 0000000..baf58b0 Binary files /dev/null and b/doc/src/declarative/pics/translate.png differ diff --git a/doc/src/declarative/pics/visualitemmodel.png b/doc/src/declarative/pics/visualitemmodel.png new file mode 100644 index 0000000..5e6d132 Binary files /dev/null and b/doc/src/declarative/pics/visualitemmodel.png differ diff --git a/doc/src/snippets/declarative/drag.qml b/doc/src/snippets/declarative/drag.qml deleted file mode 100644 index 0a69574..0000000 --- a/doc/src/snippets/declarative/drag.qml +++ /dev/null @@ -1,59 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 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$ -** -****************************************************************************/ - -import Qt 4.7 - -//! [0] -Rectangle { - id: blurtest; width: 600; height: 200; color: "white" - Image { - id: pic; source: "qtlogo-64.png"; anchors.verticalCenter: parent.verticalCenter - opacity: (600.0-pic.x) / 600; - MouseArea { - anchors.fill: parent - drag.target: pic - drag.axis: Drag.XAxis - drag.minimumX: 0 - drag.maximumX: blurtest.width-pic.width - } - } -} -//! [0] diff --git a/doc/src/snippets/declarative/gridview/ContactModel.qml b/doc/src/snippets/declarative/gridview/ContactModel.qml new file mode 100644 index 0000000..2da4660 --- /dev/null +++ b/doc/src/snippets/declarative/gridview/ContactModel.qml @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2010 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$ +** +****************************************************************************/ + +//![0] +import Qt 4.7 + +ListModel { + + ListElement { + name: "Jim Williams" + portrait: "pics/portrait.png" + } + ListElement { + name: "John Brown" + portrait: "pics/portrait.png" + } + ListElement { + name: "Bill Smyth" + portrait: "pics/portrait.png" + } + ListElement { + name: "Sam Wise" + portrait: "pics/portrait.png" + } +} +//![0] diff --git a/doc/src/snippets/declarative/gridview/dummydata/ContactModel.qml b/doc/src/snippets/declarative/gridview/dummydata/ContactModel.qml deleted file mode 100644 index 1e79030..0000000 --- a/doc/src/snippets/declarative/gridview/dummydata/ContactModel.qml +++ /dev/null @@ -1,66 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 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$ -** -****************************************************************************/ - -import Qt 4.7 - -ListModel { - id: contactModel - ListElement { - name: "Bill Smith" - number: "555 3264" - portrait: "pics/portrait.png" - } - ListElement { - name: "Jim Williams" - number: "555 5673" - portrait: "pics/portrait.png" - } - ListElement { - name: "John Brown" - number: "555 8426" - portrait: "pics/portrait.png" - } - ListElement { - name: "Sam Wise" - number: "555 0473" - portrait: "pics/portrait.png" - } -} diff --git a/doc/src/snippets/declarative/gridview/gridview.qml b/doc/src/snippets/declarative/gridview/gridview.qml index 3c205bc..0b3bbf3 100644 --- a/doc/src/snippets/declarative/gridview/gridview.qml +++ b/doc/src/snippets/declarative/gridview/gridview.qml @@ -39,50 +39,98 @@ ** ****************************************************************************/ +//![import] import Qt 4.7 +//![import] -//! [3] Rectangle { - width: 240; height: 180; color: "white" - // ContactModel model is defined in dummydata/ContactModel.qml - // The viewer automatically loads files in dummydata/* to assist - // development without a real data source. - - // Define a delegate component. A component will be - // instantiated for each visible item in the list. -//! [0] + width: childrenRect.width; height: childrenRect.height + +Row { + +//![classdocs simple] +GridView { + width: 300; height: 200 + + model: ContactModel {} + delegate: Column { + Image { source: portrait; anchors.horizontalCenter: parent.horizontalCenter } + Text { text: name; anchors.horizontalCenter: parent.horizontalCenter } + } +} +//![classdocs simple] + + +//![classdocs advanced] +Rectangle { + width: 300; height: 200 + Component { - id: delegate + id: contactDelegate Item { - id: wrapper - width: 80; height: 78 + width: grid.cellWidth; height: grid.cellHeight Column { + anchors.fill: parent Image { source: portrait; anchors.horizontalCenter: parent.horizontalCenter } Text { text: name; anchors.horizontalCenter: parent.horizontalCenter } } } } -//! [0] - // Define a highlight component. Just one of these will be instantiated - // by each ListView and placed behind the current item. -//! [1] - Component { - id: highlight - Rectangle { - color: "lightsteelblue" - radius: 5 - } - } -//! [1] - // The actual grid -//! [2] + GridView { - width: parent.width; height: parent.height - model: ContactModel; delegate: delegate + id: grid + anchors.fill: parent cellWidth: 80; cellHeight: 80 - highlight: highlight + + model: ContactModel {} + delegate: contactDelegate + highlight: Rectangle { color: "lightsteelblue"; radius: 5 } focus: true } -//! [2] } -//! [3] +//![classdocs advanced] + +//![delayRemove] +Component { + id: delegate + Item { + GridView.onRemove: SequentialAnimation { + PropertyAction { target: wrapper; property: "GridView.delayRemove"; value: true } + NumberAnimation { target: wrapper; property: "scale"; to: 0; duration: 250; easing.type: Easing.InOutQuad } + PropertyAction { target: wrapper; property: "GridView.delayRemove"; value: false } + } + } +} +//![delayRemove] + +//![highlightFollowsCurrentItem] +Component { + id: highlight + Rectangle { + width: view.cellWidth; height: view.cellHeight + color: "lightsteelblue"; radius: 5 + SpringFollow on x { to: view.currentItem.x; spring: 3; damping: 0.2 } + SpringFollow on y { to: view.currentItem.y; spring: 3; damping: 0.2 } + } +} + +GridView { + id: view + width: 300; height: 200 + cellWidth: 80; cellHeight: 80 + + model: ContactModel {} + delegate: Column { + Image { source: portrait; anchors.horizontalCenter: parent.horizontalCenter } + Text { text: name; anchors.horizontalCenter: parent.horizontalCenter } + } + + highlight: highlight + highlightFollowsCurrentItem: false + focus: true +} +//![highlightFollowsCurrentItem] + +} + +} diff --git a/doc/src/snippets/declarative/listview/highlight.qml b/doc/src/snippets/declarative/listview/highlight.qml deleted file mode 100644 index af9e95f..0000000 --- a/doc/src/snippets/declarative/listview/highlight.qml +++ /dev/null @@ -1,104 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 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$ -** -****************************************************************************/ - -import Qt 4.7 - -Rectangle { - width: 180; height: 200; color: "white" - - // ContactModel model is defined in dummydata/ContactModel.qml - // The viewer automatically loads files in dummydata/* to assist - // development without a real data source. - - // Define a delegate component. A component will be - // instantiated for each visible item in the list. -//! [0] - Component { - id: delegate - Item { - id: wrapper - width: 180; height: 40 - Column { - x: 5; y: 5 - Text { text: 'Name: ' + name } - Text { text: 'Number: ' + number } - } - // Use the ListView.isCurrentItem attached property to - // indent the item if it is the current item. - states: [ - State { - name: "Current" - when: wrapper.ListView.isCurrentItem - PropertyChanges { target: wrapper; x: 10 } - } - ] - transitions: [ - Transition { NumberAnimation { properties: "x"; duration: 200 } } - ] - } - } -//! [0] - // Specify a highlight with custom movement. Note that autoHighlight - // is set to false in the ListView so that we can control how the - // highlight moves to the current item. -//! [1] - Component { - id: highlight - Rectangle { - width: 180; height: 40 - color: "lightsteelblue"; radius: 5 - SpringFollow on y { - to: list.currentItem.y - spring: 3 - damping: 0.2 - } - } - } - ListView { - id: list - width: parent.height; height: parent.height - model: ContactModel; delegate: delegate - highlight: highlight - highlightFollowsCurrentItem: false - focus: true - } -//! [1] -} diff --git a/doc/src/snippets/declarative/mousearea.qml b/doc/src/snippets/declarative/mousearea.qml new file mode 100644 index 0000000..c6071c7 --- /dev/null +++ b/doc/src/snippets/declarative/mousearea.qml @@ -0,0 +1,119 @@ +/**************************************************************************** +** +** Copyright (C) 2010 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$ +** +****************************************************************************/ + +//! [import] +import Qt 4.7 +//! [import] + +Rectangle { + width: childrenRect.width + height: childrenRect.height + +Row { + +//! [intro] +Rectangle { + width: 100; height: 100 + color: "green" + + MouseArea { + anchors.fill: parent + onClicked: { parent.color = 'red' } + } +} +//! [intro] + +//! [intro-extended] +Rectangle { + width: 100; height: 100 + color: "green" + + MouseArea { + anchors.fill: parent + acceptedButtons: Qt.LeftButton | Qt.RightButton + onClicked: { + if (mouse.button == Qt.RightButton) + parent.color = 'blue'; + else + parent.color = 'red'; + } + } +} +//! [intro-extended] + +//! [drag] +Rectangle { + id: container + width: 600; height: 200 + + Image { + id: pic + source: "pics/qt.png" + opacity: (600.0 - pic.x) / 600 + + MouseArea { + anchors.fill: parent + drag.target: pic + drag.axis: Drag.XAxis + drag.minimumX: 0 + drag.maximumX: container.width - pic.width + } + } +} +//! [drag] + +//! [mousebuttons] +Text { + text: mouseArea.pressedButtons & Qt.RightButton ? "right" : "" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + + MouseArea { + id: mouseArea + anchors.fill: parent + acceptedButtons: Qt.LeftButton | Qt.RightButton + } +} +//! [mousebuttons] + +} + +} diff --git a/doc/src/snippets/declarative/mouseregion.qml b/doc/src/snippets/declarative/mouseregion.qml deleted file mode 100644 index a162854..0000000 --- a/doc/src/snippets/declarative/mouseregion.qml +++ /dev/null @@ -1,75 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 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$ -** -****************************************************************************/ - -import Qt 4.7 - -Rectangle { width: 200; height: 100 -Row { -//! [0] -Rectangle { - width: 100; height: 100 - color: "green" - - MouseArea { - anchors.fill: parent - onClicked: { parent.color = 'red' } - } -} -//! [0] -//! [1] -Rectangle { - width: 100; height: 100 - color: "green" - - MouseArea { - anchors.fill: parent - acceptedButtons: Qt.LeftButton | Qt.RightButton - onClicked: { - if (mouse.button == Qt.RightButton) - parent.color = 'blue'; - else - parent.color = 'red'; - } - } -} -//! [1] -} -} diff --git a/doc/src/snippets/declarative/pathview/ContactModel.qml b/doc/src/snippets/declarative/pathview/ContactModel.qml new file mode 100644 index 0000000..1a042a3 --- /dev/null +++ b/doc/src/snippets/declarative/pathview/ContactModel.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2010 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$ +** +****************************************************************************/ + +//![0] +import Qt 4.7 + +ListModel { + ListElement { + name: "Bill Jones" + icon: "pics/qtlogo.png" + } + ListElement { + name: "Jane Doe" + icon: "pics/qtlogo.png" + } + ListElement { + name: "John Smith" + icon: "pics/qtlogo.png" + } +} +//![0] diff --git a/doc/src/snippets/declarative/pathview/dummydata/MenuModel.qml b/doc/src/snippets/declarative/pathview/dummydata/MenuModel.qml deleted file mode 100644 index a52b60a..0000000 --- a/doc/src/snippets/declarative/pathview/dummydata/MenuModel.qml +++ /dev/null @@ -1,58 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 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$ -** -****************************************************************************/ - -import Qt 4.7 - -ListModel { - id: menuModel - ListElement { - name: "Bill Jones" - icon: "pics/qtlogo-64.png" - } - ListElement { - name: "Jane Doe" - icon: "pics/qtlogo-64.png" - } - ListElement { - name: "John Smith" - icon: "pics/qtlogo-64.png" - } -} diff --git a/doc/src/snippets/declarative/pathview/pathattributes.qml b/doc/src/snippets/declarative/pathview/pathattributes.qml index e8d2509..3ba3b95 100644 --- a/doc/src/snippets/declarative/pathview/pathattributes.qml +++ b/doc/src/snippets/declarative/pathview/pathattributes.qml @@ -39,16 +39,16 @@ ** ****************************************************************************/ +//! [0] import Qt 4.7 Rectangle { - width: 240; height: 200; color: 'white' -//! [0] + width: 240; height: 200 + //! [1] Component { id: delegate Item { - id: wrapper width: 80; height: 80 scale: PathView.scale opacity: PathView.opacity @@ -59,9 +59,12 @@ Rectangle { } } //! [1] + //! [2] PathView { - anchors.fill: parent; model: MenuModel; delegate: delegate + anchors.fill: parent + model: ContactModel {} + delegate: delegate path: Path { startX: 120; startY: 100 PathAttribute { name: "scale"; value: 1.0 } @@ -73,5 +76,5 @@ Rectangle { } } //! [2] -//! [0] } +//! [0] diff --git a/doc/src/snippets/declarative/pathview/pathview.qml b/doc/src/snippets/declarative/pathview/pathview.qml index 31b793d..1669847 100644 --- a/doc/src/snippets/declarative/pathview/pathview.qml +++ b/doc/src/snippets/declarative/pathview/pathview.qml @@ -39,27 +39,27 @@ ** ****************************************************************************/ +//! [0] import Qt 4.7 Rectangle { - width: 240; height: 200; color: 'white' -//! [0] + width: 240; height: 200 + //! [1] Component { id: delegate - Item { - id: wrapper - width: 80; height: 80 - Column { - Image { anchors.horizontalCenter: name.horizontalCenter; width: 64; height: 64; source: icon } - Text { text: name; font.pointSize: 16} - } + Column { + Image { anchors.horizontalCenter: name.horizontalCenter; width: 64; height: 64; source: icon } + Text { text: name; font.pointSize: 16 } } } //! [1] + //! [2] PathView { - anchors.fill: parent; model: MenuModel; delegate: delegate + anchors.fill: parent + model: ContactModel {} + delegate: delegate path: Path { startX: 120; startY: 100 PathQuad { x: 120; y: 25; controlX: 260; controlY: 75 } @@ -67,5 +67,5 @@ Rectangle { } } //! [2] -//! [0] } +//! [0] diff --git a/doc/src/snippets/declarative/pathview/pics/qtlogo-64.png b/doc/src/snippets/declarative/pathview/pics/qtlogo-64.png deleted file mode 100644 index 4f68e16..0000000 Binary files a/doc/src/snippets/declarative/pathview/pics/qtlogo-64.png and /dev/null differ diff --git a/doc/src/snippets/declarative/pathview/pics/qtlogo.png b/doc/src/snippets/declarative/pathview/pics/qtlogo.png new file mode 100644 index 0000000..4f68e16 Binary files /dev/null and b/doc/src/snippets/declarative/pathview/pics/qtlogo.png differ diff --git a/src/declarative/graphicsitems/qdeclarativeanimatedimage.cpp b/src/declarative/graphicsitems/qdeclarativeanimatedimage.cpp index a05e426..261cc5c 100644 --- a/src/declarative/graphicsitems/qdeclarativeanimatedimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeanimatedimage.cpp @@ -72,13 +72,22 @@ QT_BEGIN_NAMESPACE \o \image animatedimageitem.gif \o \qml -Item { - width: anim.width; height: anim.height+8 - AnimatedImage { id: anim; source: "pics/games-anim.gif" } - Rectangle { color: "red"; width: 4; height: 8; y: anim.height - x: (anim.width-width)*anim.currentFrame/(anim.frameCount-1) + import Qt 4.7 + + Rectangle { + width: animation.width; height: animation.height + 8 + + AnimatedImage { id: animation; source: "animation.gif" } + + Rectangle { + property int frames: animation.frameCount + + width: 4; height: 8 + x: (animation.width - width) * animation.currentFrame / frames + y: animation.height + color: "red" + } } -} \endqml \endtable */ @@ -96,7 +105,7 @@ QDeclarativeAnimatedImage::~QDeclarativeAnimatedImage() /*! \qmlproperty bool AnimatedImage::paused - This property holds whether the animated image is paused or not + This property holds whether the animated image is paused. Defaults to false, and can be set to true when you want to pause. */ @@ -120,7 +129,7 @@ void QDeclarativeAnimatedImage::setPaused(bool pause) } /*! \qmlproperty bool AnimatedImage::playing - This property holds whether the animated image is playing or not + This property holds whether the animated image is playing. Defaults to true, so as to start playing immediately. */ diff --git a/src/declarative/graphicsitems/qdeclarativeflipable.cpp b/src/declarative/graphicsitems/qdeclarativeflipable.cpp index d926119..8c9d2dd 100644 --- a/src/declarative/graphicsitems/qdeclarativeflipable.cpp +++ b/src/declarative/graphicsitems/qdeclarativeflipable.cpp @@ -74,7 +74,7 @@ public: \inherits Item Flipable is an item that can be visibly "flipped" between its front and - back sides. It is used together with Rotation and State/Transition to + back sides. It is used together with \l Rotation and \l {State}/\l {Transition} to produce a flipping effect. Here is a Flipable that flips whenever it is clicked: @@ -83,10 +83,12 @@ public: \image flipable.gif - The Rotation element is used to specify the angle and axis of the flip, - and the State defines the changes in angle which produce the flipping - effect. Finally, the Transition creates the animation that changes the + The \l Rotation element is used to specify the angle and axis of the flip, + and the \l State defines the changes in angle which produce the flipping + effect. Finally, the \l Transition creates the animation that changes the angle over one second. + + \sa {declarative/ui-components/flipable}{Flipable example} */ /*! diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index 906f1fc..ffffc2f 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -904,28 +904,43 @@ void QDeclarativeGridViewPrivate::flick(AxisData &data, qreal minExtent, qreal m \inherits Flickable \brief The GridView item provides a grid view of items provided by a model. - The model is typically provided by a QAbstractListModel "C++ model object", - but can also be created directly in QML. + A GridView displays data from models created from built-in QML elements like ListModel + and XmlListModel, or custom model classes defined in C++ that inherit from + QAbstractListModel. - The items are laid out top to bottom (vertically) or left to right (horizontally) - and may be flicked to scroll. + A GridView has a \l model, which defines the data to be displayed, and + a \l delegate, which defines how the data should be displayed. Items in a + GridView are laid out horizontally or vertically. Grid views are inherently flickable + as GridView inherits from \l Flickable. - The below example creates a very simple grid, using a QML model. + For example, if there is a simple list model defined in a file \c ContactModel.qml like this: - \image gridview.png + \snippet doc/src/snippets/declarative/gridview/ContactModel.qml 0 - \snippet doc/src/snippets/declarative/gridview/gridview.qml 3 + Another component can display this model data in a GridView, like this: - The model is defined as a ListModel using QML: - \quotefile doc/src/snippets/declarative/gridview/dummydata/ContactModel.qml + \snippet doc/src/snippets/declarative/gridview/gridview.qml import + \codeline + \snippet doc/src/snippets/declarative/gridview/gridview.qml classdocs simple + \image gridview-simple.png - In this case ListModel is a handy way for us to test our UI. In practice - the model would be implemented in C++, or perhaps via a SQL data source. + Here, the GridView creates a \c ContactModel component for its model, and a \l Column element + (containing \l Image and \ Text elements) for its delegate. The view will create a new delegate + for each item in the model. Notice the delegate is able to access the model's \c name and + \c portrait data directly. + + An improved grid view is shown below. The delegate is visually improved and is moved + into a separate \c contactDelegate component. Also, the currently selected item is highlighted + with a blue \l Rectangle using the \l highlight property, and \c focus is set to \c true + to enable keyboard navigation for the grid view. + + \snippet doc/src/snippets/declarative/gridview/gridview.qml classdocs advanced + \image gridview-highlight.png Delegates are instantiated as needed and may be destroyed at any time. State should \e never be stored in a delegate. - \bold Note that views do not enable \e clip automatically. If the view + \note Views do not enable \e clip automatically. If the view is not clipped by another item or the screen, it will be necessary to set \e {clip: true} in order to have the out of view items clipped nicely. @@ -971,19 +986,7 @@ QDeclarativeGridView::~QDeclarativeGridView() The example below ensures that the animation completes before the item is removed from the grid. - \code - Component { - id: myDelegate - Item { - id: wrapper - GridView.onRemove: SequentialAnimation { - PropertyAction { target: wrapper; property: "GridView.delayRemove"; value: true } - NumberAnimation { target: wrapper; property: "scale"; to: 0; duration: 250; easing.type: Easing.InOutQuad } - PropertyAction { target: wrapper; property: "GridView.delayRemove"; value: false } - } - } - } - \endcode + \snippet doc/src/snippets/declarative/gridview/gridview.qml delayRemove */ /*! @@ -1001,10 +1004,10 @@ QDeclarativeGridView::~QDeclarativeGridView() \qmlproperty model GridView::model This property holds the model providing data for the grid. - The model provides a set of data that is used to create the items - for the view. For large or dynamic datasets the model is usually - provided by a C++ model object. The C++ model object must be a \l - {QAbstractItemModel} subclass, a VisualModel, or a simple list. + The model provides the set of data that is used to create the items + in the view. Models can be created directly in QML using \l ListModel, \l XmlListModel + or \l VisualItemModel, or provided by C++ model classes. If a C++ model class is + used, it must be a subclass of \l QAbstractItemModel or a simple list. \sa {qmlmodels}{Data Models} */ @@ -1079,11 +1082,11 @@ void QDeclarativeGridView::setModel(const QVariant &model) that is not needed for the normal display of the delegate in a \l Loader which can load additional elements when needed. - Note that the GridView will layout the items based on the size of the root item + The GridView will layout the items based on the size of the root item in the delegate. - Here is an example delegate: - \snippet doc/src/snippets/declarative/gridview/gridview.qml 0 + \note Delegates are instantiated as needed and may be destroyed at any time. + State should \e never be stored in a delegate. */ QDeclarativeComponent *QDeclarativeGridView::delegate() const { @@ -1157,8 +1160,7 @@ QDeclarativeItem *QDeclarativeGridView::currentItem() /*! \qmlproperty Item GridView::highlightItem - \c highlightItem holds the highlight item, which was created - from the \l highlight component. + This holds the highlight item created from the \l highlight component. The highlightItem is managed by the view unless \l highlightFollowsCurrentItem is set to false. @@ -1189,13 +1191,10 @@ int QDeclarativeGridView::count() const \qmlproperty Component GridView::highlight This property holds the component to use as the highlight. - An instance of the highlight component will be created for each view. - The geometry of the resultant component instance will be managed by the view + An instance of the highlight component is created for each view. + The geometry of the resulting component instance will be managed by the view so as to stay with the current item, unless the highlightFollowsCurrentItem property is false. - The below example demonstrates how to make a simple highlight: - \snippet doc/src/snippets/declarative/gridview/gridview.qml 1 - \sa highlightItem, highlightFollowsCurrentItem */ QDeclarativeComponent *QDeclarativeGridView::highlight() const @@ -1218,21 +1217,14 @@ void QDeclarativeGridView::setHighlight(QDeclarativeComponent *highlight) \qmlproperty bool GridView::highlightFollowsCurrentItem This property sets whether the highlight is managed by the view. - If highlightFollowsCurrentItem is true, the highlight will be moved smoothly - to follow the current item. If highlightFollowsCurrentItem is false, the - highlight will not be moved by the view, and must be implemented - by the highlight component, for example: - - \code - Component { - id: myHighlight - Rectangle { - id: wrapper; color: "lightsteelblue"; radius: 4; width: 320; height: 60 - SpringFollow on y { source: wrapper.GridView.view.currentItem.y; spring: 3; damping: 0.2 } - SpringFollow on x { source: wrapper.GridView.view.currentItem.x; spring: 3; damping: 0.2 } - } - } - \endcode + If this property is true, the highlight is moved smoothly + to follow the current item. Otherwise, the + highlight is not moved by the view, and any movement must be implemented + by the highlight. + + Here is a highlight with its motion defined by a \l {SpringFollow} item: + + \snippet doc/src/snippets/declarative/gridview/gridview.qml highlightFollowsCurrentItem */ bool QDeclarativeGridView::highlightFollowsCurrentItem() const { @@ -1290,32 +1282,30 @@ void QDeclarativeGridView::setHighlightMoveDuration(int duration) \qmlproperty real GridView::preferredHighlightEnd \qmlproperty enumeration GridView::highlightRangeMode - These properties set the preferred range of the highlight (current item) - within the view. + These properties define the preferred range of the highlight (for the current item) + within the view. The \c preferredHighlightBegin value must be less than the + \c preferredHighlightEnd value. - Note that this is the correct way to influence where the - current item ends up when the view scrolls. For example, if you want the - currently selected item to be in the middle of the list, then set the - highlight range to be where the middle item would go. Then, when the view scrolls, - the currently selected item will be the item at that spot. This also applies to - when the currently selected item changes - it will scroll to within the preferred - highlight range. Furthermore, the behaviour of the current item index will occur - whether or not a highlight exists. + These properties affect the position of the current item when the view is scrolled. + For example, if the currently selected item should stay in the middle of the + view when it is scrolled, set the \c preferredHighlightBegin and + \c preferredHighlightEnd values to the top and bottom coordinates of where the middle + item would be. If the \c currentItem is changed programmatically, the view will + automatically scroll so that the current item is in the middle of the view. + Furthermore, the behavior of the current item index will occur whether or not a + highlight exists. - If highlightRangeMode is set to \e GridView.ApplyRange the view will - attempt to maintain the highlight within the range, however - the highlight can move outside of the range at the ends of the list - or due to a mouse interaction. + Valid values for \c highlightRangeMode are: - If highlightRangeMode is set to \e GridView.StrictlyEnforceRange the highlight will never - move outside of the range. This means that the current item will change - if a keyboard or mouse action would cause the highlight to move - outside of the range. - - The default value is \e GridView.NoHighlightRange. - - Note that a valid range requires preferredHighlightEnd to be greater - than or equal to preferredHighlightBegin. + \list + \o GridView.ApplyRange - the view attempts to maintain the highlight within the range. + However, the highlight can move outside of the range at the ends of the view or due + to mouse interaction. + \o GridView.StrictlyEnforceRange - the highlight never moves outside of the range. + The current item changes if a keyboard or mouse action would cause the highlight to move + outside of the range. + \o GridView.NoHighlightRange - this is the default value. + \endlist */ qreal QDeclarativeGridView::preferredHighlightBegin() const { @@ -1370,10 +1360,12 @@ void QDeclarativeGridView::setHighlightRangeMode(HighlightRangeMode mode) \qmlproperty enumeration GridView::flow This property holds the flow of the grid. - Possible values are \c GridView.LeftToRight (default) and \c GridView.TopToBottom. + Possible values: - If \a flow is \c GridView.LeftToRight, the view will scroll vertically. - If \a flow is \c GridView.TopToBottom, the view will scroll horizontally. + \list + \o GridView.LeftToRight (default) - Items are laid out from left to right, and the view scrolls vertically + \o GridView.TopToBottom - Items are laid out from top to bottom, and the view scrolls horizontally + \endlist */ QDeclarativeGridView::Flow QDeclarativeGridView::flow() const { @@ -1405,8 +1397,9 @@ void QDeclarativeGridView::setFlow(Flow flow) \qmlproperty bool GridView::keyNavigationWraps This property holds whether the grid wraps key navigation - If this property is true then key presses to move off of one end of the grid will cause the - selection to jump to the other side. + If this is true, key navigation that would move the current item selection + past one end of the view instead wraps around and moves the selection to + the other end of the view. */ bool QDeclarativeGridView::isWrapEnabled() const { @@ -1463,7 +1456,7 @@ void QDeclarativeGridView::setCacheBuffer(int buffer) \qmlproperty int GridView::cellWidth \qmlproperty int GridView::cellHeight - These properties holds the width and height of each cell in the grid + These properties holds the width and height of each cell in the grid. The default cell size is 100x100. */ @@ -1503,14 +1496,14 @@ void QDeclarativeGridView::setCellHeight(int cellHeight) /*! \qmlproperty enumeration GridView::snapMode - This property determines where the view will settle following a drag or flick. - The allowed values are: + This property determines how the view scrolling will settle following a drag or flick. + The possible values are: \list - \o GridView.NoSnap (default) - the view will stop anywhere within the visible area. - \o GridView.SnapToRow - the view will settle with a row (or column for TopToBottom flow) + \o GridView.NoSnap (default) - the view stops anywhere within the visible area. + \o GridView.SnapToRow - the view settles with a row (or column for \c GridView.TopToBottom flow) aligned with the start of the view. - \o GridView.SnapOneRow - the view will settle no more than one row (or column for TopToBottom flow) + \o GridView.SnapOneRow - the view will settle no more than one row (or column for \c GridView.TopToBottom flow) away from the first visible row at the time the mouse button is released. This mode is particularly useful for moving one page at a time. \endlist @@ -1789,22 +1782,22 @@ void QDeclarativeGridView::moveCurrentIndexRight() \a mode: \list - \o Beginning - position item at the top (or left for TopToBottom flow) of the view. - \o Center- position item in the center of the view. - \o End - position item at bottom (or right for horizontal orientation) of the view. - \o Visible - if any part of the item is visible then take no action, otherwise + \o GridView.Beginning - position item at the top (or left for \c GridView.TopToBottom flow) of the view. + \o GridView.Center - position item in the center of the view. + \o GridView.End - position item at bottom (or right for horizontal orientation) of the view. + \o GridView.Visible - if any part of the item is visible then take no action, otherwise bring the item into view. - \o Contain - ensure the entire item is visible. If the item is larger than - the view the item is positioned at the top (or left for TopToBottom flow) of the view. + \o GridView.Contain - ensure the entire item is visible. If the item is larger than + the view the item is positioned at the top (or left for \c GridView.TopToBottom flow) of the view. \endlist If positioning the view at the index would cause empty space to be displayed at the beginning or end of the view, the view will be positioned at the boundary. - It is not recommended to use contentX or contentY to position the view + It is not recommended to use \l {Flickable::}{contentX} or \l {Flickable::}{contentY} to position the view at a particular index. This is unreliable since removing items from the start of the view does not cause all other items to be repositioned. - The correct way to bring an item into view is with positionViewAtIndex. + The correct way to bring an item into view is with \c positionViewAtIndex. */ void QDeclarativeGridView::positionViewAtIndex(int index, int mode) { diff --git a/src/declarative/graphicsitems/qdeclarativeimage.cpp b/src/declarative/graphicsitems/qdeclarativeimage.cpp index 4593cf8..94240c2 100644 --- a/src/declarative/graphicsitems/qdeclarativeimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeimage.cpp @@ -275,11 +275,6 @@ qreal QDeclarativeImage::paintedHeight() const \o Image.Error - an error occurred while loading the image \endlist - Note that a change in the status property does not cause anything to happen - (although it reflects what has happened with the image internally). If you wish - to react to the change in status you need to do it yourself, for example in one - of the following ways: - Use this status to provide an update or respond to the status change in some way. For example, you could: diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index 134bd6d..9949e65 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -97,9 +97,11 @@ QT_BEGIN_NAMESPACE The Translate object provides independent control over position in addition to the Item's x and y properties. - The following example moves the Y axis of the Rectangles while still allowing the Row element + The following example moves the Y axis of the \l Rectangle elements while still allowing the \l Row element to lay the items out as if they had not been transformed: \qml + import Qt 4.7 + Row { Rectangle { width: 100; height: 100 @@ -113,6 +115,8 @@ QT_BEGIN_NAMESPACE } } \endqml + + \image translate.png */ /*! diff --git a/src/declarative/graphicsitems/qdeclarativelayoutitem.cpp b/src/declarative/graphicsitems/qdeclarativelayoutitem.cpp index 4add66d..38d5f59 100644 --- a/src/declarative/graphicsitems/qdeclarativelayoutitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativelayoutitem.cpp @@ -58,7 +58,10 @@ QT_BEGIN_NAMESPACE taking its size hints into account, and you can propagate this to the other elements in your UI via anchors and bindings. This is a QGraphicsLayoutItem subclass, and its properties merely expose the QGraphicsLayoutItem functionality to QML. - See the QGraphicsLayoutItem documentation for further details. + + The \l{declarative/cppextensions/qgraphicslayouts/layoutitem}{LayoutItem example} + demonstrates how a LayoutItem can be used within a \l{Graphics View Framework}{Graphics View} + scene. */ /*! diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 01928a1..023d663 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -1325,13 +1325,11 @@ void QDeclarativeListViewPrivate::flick(AxisData &data, qreal minExtent, qreal m Another component can display this model data in a ListView, like this: - \table - \row - \o \snippet doc/src/snippets/declarative/listview/listview.qml import + \snippet doc/src/snippets/declarative/listview/listview.qml import \codeline \snippet doc/src/snippets/declarative/listview/listview.qml classdocs simple - \o \image listview-simple.png - \endtable + + \image listview-simple.png Here, the ListView creates a \c ContactModel component for its model, and a \l Text element for its delegate. The view will create a new \l Text component for each item in the model. Notice @@ -1342,13 +1340,10 @@ void QDeclarativeListViewPrivate::flick(AxisData &data, qreal minExtent, qreal m with a blue \l Rectangle using the \l highlight property, and \c focus is set to \c true to enable keyboard navigation for the list view. - \table - \row - \o \snippet doc/src/snippets/declarative/listview/listview.qml classdocs advanced - \o \image listview-highlight.png - \endtable + \snippet doc/src/snippets/declarative/listview/listview.qml classdocs advanced + \image listview-highlight.png - In a ListView, delegates are instantiated as needed and may be destroyed at any time. + In a GridView, delegates are instantiated as needed and may be destroyed at any time. State should \e never be stored in a delegate. \note Views do not enable \e clip automatically. If the view @@ -1634,7 +1629,7 @@ int QDeclarativeListView::count() const This property holds the component to use as the highlight. An instance of the highlight component is created for each list. - The geometry of the resultant component instance is managed by the list + The geometry of the resulting component instance is managed by the list so as to stay with the current item, unless the highlightFollowsCurrentItem property is false. @@ -1667,7 +1662,7 @@ void QDeclarativeListView::setHighlight(QDeclarativeComponent *highlight) highlight is not moved by the view, and any movement must be implemented by the highlight. - Here is a highlight with its motion defined by the a \l {SpringFollow} item: + Here is a highlight with its motion defined by a \l {SpringFollow} item: \snippet doc/src/snippets/declarative/listview/listview.qml highlightFollowsCurrentItem @@ -2042,8 +2037,8 @@ void QDeclarativeListView::setHighlightResizeDuration(int duration) /*! \qmlproperty enumeration ListView::snapMode - This property determines where the view's scrolling behavior stops following a drag or flick. - The allowed values are: + This property determines how the view scrolling will settle following a drag or flick. + The possible values are: \list \o ListView.NoSnap (default) - the view stops anywhere within the visible area. diff --git a/src/declarative/graphicsitems/qdeclarativeloader.cpp b/src/declarative/graphicsitems/qdeclarativeloader.cpp index 4995baf..898c5a5 100644 --- a/src/declarative/graphicsitems/qdeclarativeloader.cpp +++ b/src/declarative/graphicsitems/qdeclarativeloader.cpp @@ -115,27 +115,37 @@ void QDeclarativeLoaderPrivate::initResize() subtree from a QML URL or Component. Loader instantiates an item from a component. The component to - instantiate may be specified directly by the \c sourceComponent - property, or loaded from a URL via the \c source property. + instantiate may be specified directly by the \l sourceComponent + property, or loaded from a URL via the \l source property. It is also an effective means of delaying the creation of a component until it is required: \code + import Qt 4.7 + Loader { id: pageLoader } + Rectangle { - MouseArea { anchors.fill: parent; onClicked: pageLoader.source = "Page1.qml" } + MouseArea { + anchors.fill: parent + onClicked: pageLoader.source = "Page1.qml" + } } \endcode If the Loader source is changed, any previous items instantiated - will be destroyed. Setting \c source to an empty string, or setting + will be destroyed. Setting \l source to an empty string, or setting sourceComponent to \e undefined will destroy the currently instantiated items, freeing resources and leaving the Loader empty. For example: \code pageLoader.source = "" + \endcode + or + + \code pageLoader.sourceComponent = undefined \endcode @@ -340,19 +350,31 @@ void QDeclarativeLoaderPrivate::_q_sourceLoaded() \o Loader.Error - an error occurred while loading the QML source \endlist - Note that a change in the status property does not cause anything to happen - (although it reflects what has happened to the loader internally). If you wish - to react to the change in status you need to do it yourself, for example in one - of the following ways: - \list - \o Create a state, so that a state change occurs, e.g. State{name: 'loaded'; when: loader.status = Loader.Ready;} - \o Do something inside the onLoaded signal handler, e.g. Loader{id: loader; onLoaded: console.log('Loaded');} - \o Bind to the status variable somewhere, e.g. Text{text: if(loader.status!=Loader.Ready){'Not Loaded';}else{'Loaded';}} - \endlist - \sa progress + Use this status to provide an update or respond to the status change in some way. + For example, you could: + + \e {Trigger a state change:} + \qml + State { name: 'loaded'; when: loader.status = Loader.Ready } + \endqml + + \e {Implement an \c onStatusChanged signal handler:} + \qml + Loader { + id: loader + onStatusChanged: if (loader.status == Loader.Ready) console.log('Loaded') + } + \endqml + + \e {Bind to the status value:} + \qml + Text { text: loader.status != Loader.Ready ? 'Not Loaded' : 'Loaded' } + \endqml Note that if the source is a local file, the status will initially be Ready (or Error). While there will be no onStatusChanged signal in that case, the onLoaded will still be invoked. + + \sa progress */ QDeclarativeLoader::Status QDeclarativeLoader::status() const diff --git a/src/declarative/graphicsitems/qdeclarativemousearea.cpp b/src/declarative/graphicsitems/qdeclarativemousearea.cpp index 1947c00..6fca283 100644 --- a/src/declarative/graphicsitems/qdeclarativemousearea.cpp +++ b/src/declarative/graphicsitems/qdeclarativemousearea.cpp @@ -172,17 +172,21 @@ QDeclarativeMouseAreaPrivate::~QDeclarativeMouseAreaPrivate() A MouseArea is typically used in conjunction with a visible item, where the MouseArea effectively 'proxies' mouse handling for that - item. For example, we can put a MouseArea in a Rectangle that changes - the Rectangle color to red when clicked: - \snippet doc/src/snippets/declarative/mouseregion.qml 0 + item. For example, we can put a MouseArea in a \l Rectangle that changes + the \l Rectangle color to red when clicked: + + \snippet doc/src/snippets/declarative/mousearea.qml import + \codeline + \snippet doc/src/snippets/declarative/mousearea.qml intro Many MouseArea signals pass a \l {MouseEvent}{mouse} parameter that contains additional information about the mouse event, such as the position, button, and any key modifiers. - Below we have the previous - example extended so as to give a different color when you right click. - \snippet doc/src/snippets/declarative/mouseregion.qml 1 + Here is an extension of the previous example that produces a different + color when the area is right clicked: + + \snippet doc/src/snippets/declarative/mousearea.qml intro-extended For basic key handling, see the \l {Keys}{Keys attached property}. @@ -238,7 +242,7 @@ QDeclarativeMouseAreaPrivate::~QDeclarativeMouseAreaPrivate() releasing is also considered a click). The \l {MouseEvent}{mouse} parameter provides information about the click, including the x and y - position of the release of the click, and whether the click wasHeld. + position of the release of the click, and whether the click was held. The \e accepted property of the MouseEvent parameter is ignored in this handler. */ @@ -262,7 +266,7 @@ QDeclarativeMouseAreaPrivate::~QDeclarativeMouseAreaPrivate() This handler is called when there is a release. The \l {MouseEvent}{mouse} parameter provides information about the click, including the x and y - position of the release of the click, and whether the click wasHeld. + position of the release of the click, and whether the click was held. The \e accepted property of the MouseEvent parameter is ignored in this handler. */ @@ -282,7 +286,7 @@ QDeclarativeMouseAreaPrivate::~QDeclarativeMouseAreaPrivate() This handler is called when there is a double-click (a press followed by a release followed by a press). The \l {MouseEvent}{mouse} parameter provides information about the click, including the x and y - position of the release of the click, and whether the click wasHeld. + position of the release of the click, and whether the click was held. The \e accepted property of the MouseEvent parameter is ignored in this handler. */ @@ -328,10 +332,10 @@ QDeclarativeMouseArea::~QDeclarativeMouseArea() while a button is pressed, and will remain valid as long as the button is held even if the mouse is moved outside the area. - If hoverEnabled is true then these properties will be valid: + If hoverEnabled is true then these properties will be valid when: \list - \i when no button is pressed, but the mouse is within the MouseArea (containsMouse is true). - \i if a button is pressed and held, even if it has since moved out of the area. + \i no button is pressed, but the mouse is within the MouseArea (containsMouse is true). + \i a button is pressed and held, even if it has since moved out of the area. \endlist The coordinates are relative to the MouseArea. @@ -378,18 +382,7 @@ void QDeclarativeMouseArea::setEnabled(bool a) \endlist The code below displays "right" when the right mouse buttons is pressed: - \code - Text { - text: mr.pressedButtons & Qt.RightButton ? "right" : "" - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - MouseArea { - id: mr - acceptedButtons: Qt.LeftButton | Qt.RightButton - anchors.fill: parent - } - } - \endcode + \snippet doc/src/snippets/declarative/mousearea.qml mousebuttons \sa acceptedButtons */ @@ -705,7 +698,7 @@ void QDeclarativeMouseArea::setHovered(bool h) MouseArea { acceptedButtons: Qt.LeftButton | Qt.RightButton } \endcode - The default is to accept the Left button. + The default value is \c Qt.LeftButton. */ Qt::MouseButtons QDeclarativeMouseArea::acceptedButtons() const { @@ -765,17 +758,19 @@ QDeclarativeDrag *QDeclarativeMouseArea::drag() \qmlproperty real MouseArea::drag.minimumY \qmlproperty real MouseArea::drag.maximumY - drag provides a convenient way to make an item draggable. + \c drag provides a convenient way to make an item draggable. \list - \i \c target specifies the item to drag. - \i \c active specifies if the target item is being currently dragged. - \i \c axis specifies whether dragging can be done horizontally (Drag.XAxis), vertically (Drag.YAxis), or both (Drag.XandYAxis) - \i the minimum and maximum properties limit how far the target can be dragged along the corresponding axes. + \i \c drag.target specifies the item to drag. + \i \c drag.active specifies if the target item is currently being dragged. + \i \c drag.axis specifies whether dragging can be done horizontally (\c Drag.XAxis), vertically (\c Drag.YAxis), or both (\c Drag.XandYAxis) + \i \c drag.minimum and \c drag.maximum limit how far the target can be dragged along the corresponding axes. \endlist - The following example uses drag to reduce the opacity of an image as it moves to the right: - \snippet doc/src/snippets/declarative/drag.qml 0 + The following example displays an image that can be dragged along the X-axis. The opacity + of the image is reduced when it is dragged to the right. + + \snippet doc/src/snippets/declarative/mousearea.qml drag */ QT_END_NAMESPACE diff --git a/src/declarative/graphicsitems/qdeclarativepath.cpp b/src/declarative/graphicsitems/qdeclarativepath.cpp index 141a938..a904869 100644 --- a/src/declarative/graphicsitems/qdeclarativepath.cpp +++ b/src/declarative/graphicsitems/qdeclarativepath.cpp @@ -628,7 +628,7 @@ void QDeclarativePathLine::addToPath(QPainterPath &path) \qml Path { startX: 0; startY: 0 - PathQuad x: 200; y: 0; controlX: 100; controlY: 150 } + PathQuad { x: 200; y: 0; controlX: 100; controlY: 150 } } \endqml \endtable @@ -713,8 +713,9 @@ void QDeclarativePathQuad::addToPath(QPainterPath &path) Path { startX: 20; startY: 0 PathCubic { - x: 180; y: 0; control1X: -10; control1Y: 90 - control2X: 210; control2Y: 90 + x: 180; y: 0 + control1X: -10; control1Y: 90 + control2X: 210; control2Y: 90 } } \endqml diff --git a/src/declarative/graphicsitems/qdeclarativepathview.cpp b/src/declarative/graphicsitems/qdeclarativepathview.cpp index 448ec06..695af7e 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview.cpp +++ b/src/declarative/graphicsitems/qdeclarativepathview.cpp @@ -310,11 +310,21 @@ void QDeclarativePathViewPrivate::regenerate() \brief The PathView element lays out model-provided items on a path. \inherits Item - The model is typically provided by a QAbstractListModel "C++ model object", but can also be created directly in QML. + A PathView displays data from models created from built-in QML elements like ListModel + and XmlListModel, or custom model classes defined in C++ that inherit from + QAbstractListModel. + A ListView has a \l model, which defines the data to be displayed, and + a \l delegate, which defines how the data should be displayed. The \l delegate is instantiated for each item on the \l path. The items may be flicked to move them along the path. + For example, if there is a simple list model defined in a file \c ContactModel.qml like this: + + \snippet doc/src/snippets/declarative/pathview/ContactModel.qml 0 + + This data can be represented as a PathView, like this: + \snippet doc/src/snippets/declarative/pathview/pathview.qml 0 \image pathview.gif diff --git a/src/declarative/graphicsitems/qdeclarativepositioners.cpp b/src/declarative/graphicsitems/qdeclarativepositioners.cpp index 8796e63..20cc46b 100644 --- a/src/declarative/graphicsitems/qdeclarativepositioners.cpp +++ b/src/declarative/graphicsitems/qdeclarativepositioners.cpp @@ -302,7 +302,7 @@ void QDeclarativeBasePositioner::finishApplyTransitions() /*! \qmlclass Column QDeclarativeColumn \since 4.7 - \brief The Column item lines up its children vertically. + \brief The Column item arranges its children vertically. \inherits Item The Column item positions its child items so that they are vertically @@ -346,7 +346,8 @@ Column { will not change. If you manually change the x or y properties in script, bind the x or y properties, use anchors on a child of a positioner, or have the height of a child depend on the position of a child, then the - positioner may exhibit strange behaviour. + positioner may exhibit strange behaviour. If you need to perform any of these + actions, consider positioning the items without the use of a Column. */ /*! @@ -396,7 +397,7 @@ Column { spacing is the amount in pixels left empty between each adjacent item, and defaults to 0. - The below example places a Grid containing a red, a blue and a + The below example places a \l Grid containing a red, a blue and a green rectangle on a gray background. The area the grid positioner occupies is colored white. The top positioner has the default of no spacing, and the bottom positioner has its spacing set to 2. @@ -468,17 +469,15 @@ void QDeclarativeColumn::reportConflictingAnchors() /*! \qmlclass Row QDeclarativeRow \since 4.7 - \brief The Row item lines up its children horizontally. + \brief The Row item arranges its children horizontally. \inherits Item The Row item positions its child items so that they are - horizontally aligned and not overlapping. Spacing can be added between the - items, and a margin around all items can also be added. It also provides for - transitions to be set when items are added, moved, or removed in the - positioner. Adding and removing apply both to items which are deleted or have - their position in the document changed so as to no longer be children of the - positioner, as well as to items which have their opacity set to or from zero - so as to appear or disappear. + horizontally aligned and not overlapping. + + Use \l spacing to set the spacing between items in a Row, and use the + \l add and \l move properties to set the transitions that should be applied + when items are added to, removed from, or re-positioned within the Row. The below example lays out differently shaped rectangles using a Row. \qml @@ -495,8 +494,8 @@ Row { will not change. If you manually change the x or y properties in script, bind the x or y properties, use anchors on a child of a positioner, or have the width of a child depend on the position of a child, then the - positioner may exhibit strange behaviour. - + positioner may exhibit strange behaviour. If you need to perform any of these + actions, consider positioning the items without the use of a Row. */ /*! \qmlproperty Transition Row::add @@ -504,12 +503,10 @@ Row { The transition will only be applied to the added item(s). Positioner transitions will only affect the position (x,y) of items. - Added can mean that either the object has been created or - reparented, and thus is now a child or the positioner, or that the + An object is considered to be added to the positioner if it has been + created or reparented and thus is now a child or the positioner, or if the object has had its opacity increased from zero, and thus is now visible. - - */ /*! \qmlproperty Transition Row::move @@ -540,7 +537,7 @@ Row { spacing is the amount in pixels left empty between each adjacent item, and defaults to 0. - The below example places a Grid containing a red, a blue and a + The below example places a \l Grid containing a red, a blue and a green rectangle on a gray background. The area the grid positioner occupies is colored white. The top positioner has the default of no spacing, and the bottom positioner has its spacing set to 2. @@ -610,18 +607,20 @@ void QDeclarativeRow::reportConflictingAnchors() \inherits Item The Grid item positions its child items so that they are - aligned in a grid and are not overlapping. Spacing can be added - between the items. It also provides for transitions to be set when items are + aligned in a grid and are not overlapping. + + Spacing can be added + between child items. It also provides for transitions to be set when items are added, moved, or removed in the positioner. Adding and removing apply both to items which are deleted or have their position in the document changed so as to no longer be children of the positioner, as well as to items which have their opacity set to or from zero so as to appear or disappear. - The Grid defaults to using four columns, and as many rows as - are necessary to fit all the child items. The number of rows - and/or the number of columns can be constrained by setting the rows - or columns properties. The grid positioner calculates a grid with + A Grid defaults to four columns, and as many rows as + are necessary to fit all child items. The number of rows + and/or the number of columns can be constrained by setting the \l rows + or \l columns properties. The grid positioner calculates a grid with rectangular cells of sufficient size to hold all items, and then places the items in the cells, going across then down, and positioning each item at the (0,0) corner of the cell. The below @@ -648,7 +647,8 @@ Grid { will not change. If you manually change the x or y properties in script, bind the x or y properties, use anchors on a child of a positioner, or have the width or height of a child depend on the position of a child, then the - positioner may exhibit strange behaviour. + positioner may exhibit strange behaviour. If you need to perform any of these + actions, consider positioning the items without the use of a Grid. */ /*! \qmlproperty Transition Grid::add @@ -658,12 +658,10 @@ Grid { as that is all the positioners affect. To animate other property change you will have to do so based on how you have changed those properties. - Added can mean that either the object has been created or - reparented, and thus is now a child or the positioner, or that the + An object is considered to be added to the positioner if it has been + created or reparented and thus is now a child or the positioner, or if the object has had its opacity increased from zero, and thus is now visible. - - */ /*! \qmlproperty Transition Grid::move @@ -714,18 +712,16 @@ QDeclarativeGrid::QDeclarativeGrid(QDeclarativeItem *parent) : \qmlproperty int Grid::columns This property holds the number of columns in the grid. - When the columns property is set the Grid will always have - that many columns. Note that if you do not have enough items to - fill this many columns some columns will be of zero width. + If the grid does not have enough items to fill the specified + number of columns, some columns will be of zero width. */ /*! \qmlproperty int Grid::rows This property holds the number of rows in the grid. - When the rows property is set the Grid will always have that - many rows. Note that if you do not have enough items to fill this - many rows some rows will be of zero width. + If the grid does not have enough items to fill the specified + number of rows, some rows will be of zero width. */ void QDeclarativeGrid::setColumns(const int columns) @@ -750,12 +746,14 @@ void QDeclarativeGrid::setRows(const int rows) \qmlproperty enumeration Grid::flow This property holds the flow of the layout. - Possible values are \c Grid.LeftToRight (default) and \c Grid.TopToBottom. + Possible values are: - If \a flow is \c Grid.LeftToRight, the items are positioned next to - to each other from left to right, then wrapped to the next line. - If \a flow is \c Grid.TopToBottom, the items are positioned next to each - other from top to bottom, then wrapped to the next column. + \list + \o Grid.LeftToRight (default) - Items are positioned next to + to each other from left to right, then wrapped to the next line. + \o Grid.TopToBottom - Items are positioned next to each + other from top to bottom, then wrapped to the next column. + \endlist */ QDeclarativeGrid::Flow QDeclarativeGrid::flow() const { @@ -893,14 +891,18 @@ void QDeclarativeGrid::reportConflictingAnchors() /*! \qmlclass Flow QDeclarativeFlow \since 4.7 - \brief The Flow item lines up its children side by side, wrapping as necessary. + \brief The Flow item arranges its children side by side, wrapping as necessary. \inherits Item + The Flow item positions its child items so that they are side by side and are + not overlapping. + Note that the positioner assumes that the x and y positions of its children will not change. If you manually change the x or y properties in script, bind the x or y properties, use anchors on a child of a positioner, or have the width or height of a child depend on the position of a child, then the - positioner may exhibit strange behaviour. + positioner may exhibit strange behaviour. If you need to perform any of these + actions, consider positioning the items without the use of a Flow. */ /*! @@ -909,9 +911,10 @@ void QDeclarativeGrid::reportConflictingAnchors() The transition will only be applied to the added item(s). Positioner transitions will only affect the position (x,y) of items. - Added can mean that either the object has been created or reparented, and thus is now a child or the positioner, or that the object has had its opacity increased from zero, and thus is now visible. - - + An object is considered to be added to the positioner if it has been + created or reparented and thus is now a child or the positioner, or if the + object has had its opacity increased from zero, and thus is now + visible. */ /*! \qmlproperty Transition Flow::move @@ -965,14 +968,16 @@ QDeclarativeFlow::QDeclarativeFlow(QDeclarativeItem *parent) \qmlproperty enumeration Flow::flow This property holds the flow of the layout. - Possible values are \c Flow.LeftToRight (default) and \c Flow.TopToBottom. + Possible values are: - If \a flow is \c Flow.LeftToRight, the items are positioned next to + \list + \o Flow.LeftToRight (default) - Items are positioned next to to each other from left to right until the width of the Flow is exceeded, then wrapped to the next line. - If \a flow is \c Flow.TopToBottom, the items are positioned next to each + \o Flow.TopToBottom - Items are positioned next to each other from top to bottom until the height of the Flow is exceeded, then wrapped to the next column. + \endlist */ QDeclarativeFlow::Flow QDeclarativeFlow::flow() const { diff --git a/src/declarative/graphicsitems/qdeclarativerectangle.cpp b/src/declarative/graphicsitems/qdeclarativerectangle.cpp index de3dbcd..2756877 100644 --- a/src/declarative/graphicsitems/qdeclarativerectangle.cpp +++ b/src/declarative/graphicsitems/qdeclarativerectangle.cpp @@ -160,6 +160,8 @@ void QDeclarativeGradient::doUpdate() You can also create rounded rectangles using the \l radius property. \qml + import Qt 4.7 + Rectangle { width: 100 height: 100 @@ -206,7 +208,7 @@ void QDeclarativeRectangle::doUpdate() border smoothness. Also, the border is rendered evenly on either side of the rectangle's boundaries, and the spare pixel is rendered to the right and below the rectangle (as documented for QRect rendering). This can cause unintended effects if - \c border.width is 1 and the rectangle is \l{clip}{clipped} by a parent item: + \c border.width is 1 and the rectangle is \l{Item::clip}{clipped} by a parent item: \table \row diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index 55cef8b..a6bf5d4 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -119,6 +119,8 @@ QSet QTextDocumentWithImageResources::errors; A Text item can display both plain and rich text. For example: \qml + import Qt 4.7 + Text { text: "Hello World!"; font.family: "Helvetica"; font.pointSize: 24; color: "red" } Text { text: "Hello World!" } \endqml diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp index c6ee46f..2a88a80 100644 --- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp +++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp @@ -119,11 +119,11 @@ public: visual delegate (items). An item can determine its index within the - model via the VisualItemModel.index attached property. + model via the \c VisualItemModel.index attached property. The example below places three colored rectangles in a ListView. \code - Item { + Rectangle { VisualItemModel { id: itemModel Rectangle { height: 30; width: 80; color: "red" } @@ -137,6 +137,8 @@ public: } } \endcode + + \image visualitemmodel.png */ QDeclarativeVisualItemModel::QDeclarativeVisualItemModel(QObject *parent) : QDeclarativeVisualModel(*(new QDeclarativeVisualItemModelPrivate), parent) diff --git a/src/declarative/qml/qdeclarativeworkerscript.cpp b/src/declarative/qml/qdeclarativeworkerscript.cpp index 2ca030e..e0ee84f 100644 --- a/src/declarative/qml/qdeclarativeworkerscript.cpp +++ b/src/declarative/qml/qdeclarativeworkerscript.cpp @@ -521,7 +521,7 @@ void QDeclarativeWorkerScriptEngine::run() that the main GUI thread is not blocked. Messages can be passed between the new thread and the parent thread - using sendMessage() and the onMessage() handler. + using \l sendMessage() and the \l {WorkerScript::onMessage}{onMessage()} handler. Here is an example: @@ -555,7 +555,7 @@ QDeclarativeWorkerScript::~QDeclarativeWorkerScript() /*! \qmlproperty url WorkerScript::source - This holds the url of the javascript file that implements the + This holds the url of the JavaScript file that implements the \tt WorkerScript.onMessage() handler for threaded operations. */ QUrl QDeclarativeWorkerScript::source() const @@ -576,7 +576,7 @@ void QDeclarativeWorkerScript::setSource(const QUrl &source) emit sourceChanged(); } -/* +/*! \qmlmethod WorkerScript::sendMessage(jsobject message) Sends the given \a message to a worker script handler in another diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp index de1c0cb..0eae136 100644 --- a/src/declarative/util/qdeclarativeanimation.cpp +++ b/src/declarative/util/qdeclarativeanimation.cpp @@ -557,6 +557,8 @@ void QDeclarativeAbstractAnimation::timelineComplete() NumberAnimation { ... duration: 200 } } \endcode + + \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} */ /*! \internal @@ -627,6 +629,8 @@ QAbstractAnimation *QDeclarativePauseAnimation::qtAnimation() When used in a transition, ColorAnimation will by default animate all properties of type color that are changing. If a property or properties are explicitly set for the animation, then those will be used instead. + + \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} */ /*! \internal @@ -1082,11 +1086,13 @@ void QDeclarativePropertyAction::transition(QDeclarativeStateActions &actions, \inherits PropertyAnimation \brief The NumberAnimation element allows you to animate changes in properties of type qreal. - Animate a set of properties over 200ms, from their values in the start state to + For example, to animate a set of properties over 200ms, from their values in the start state to their values in the end state of the transition: \code NumberAnimation { properties: "x,y,scale"; duration: 200 } \endcode + + \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} */ /*! @@ -1156,6 +1162,8 @@ void QDeclarativeNumberAnimation::setTo(qreal t) \since 4.7 \inherits PropertyAnimation \brief The Vector3dAnimation element allows you to animate changes in properties of type QVector3d. + + \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} */ /*! @@ -1224,7 +1232,8 @@ void QDeclarativeVector3dAnimation::setTo(QVector3D t) When used in a transition RotationAnimation will rotate all properties named "rotation" or "angle". You can override this by providing - your own properties via \c properties or \c property. + your own properties via \l {PropertyAnimation::properties}{properties} or + \l {PropertyAnimation::property}{property}. In the following example we use RotationAnimation to animate the rotation between states via the shortest path. @@ -1238,6 +1247,8 @@ void QDeclarativeVector3dAnimation::setTo(QVector3D t) RotationAnimation { direction: RotationAnimation.Shortest } } \endqml + + \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} */ /*! @@ -1446,7 +1457,7 @@ QDeclarativeListProperty QDeclarativeAnimationGro } \endcode - \sa ParallelAnimation + \sa ParallelAnimation, {QML Animation}, {declarative/animation/basics}{Animation basics example} */ QDeclarativeSequentialAnimation::QDeclarativeSequentialAnimation(QObject *parent) : @@ -1508,7 +1519,7 @@ void QDeclarativeSequentialAnimation::transition(QDeclarativeStateActions &actio } \endcode - \sa SequentialAnimation + \sa SequentialAnimation, {QML Animation}, {declarative/animation/basics}{Animation basics example} */ /*! \internal @@ -1657,6 +1668,8 @@ void QDeclarativePropertyAnimationPrivate::convertVariant(QVariant &variant, int Depending on how the animation is used, the set of properties normally used will be different. For more information see the individual property documentation, as well as the \l{QML Animation} introduction. + + \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} */ QDeclarativePropertyAnimation::QDeclarativePropertyAnimation(QObject *parent) @@ -2319,6 +2332,8 @@ void QDeclarativePropertyAnimation::transition(QDeclarativeStateActions &actions When used in a transition, ParentAnimation will by default animate all ParentChanges. + + \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} */ /*! diff --git a/src/declarative/util/qdeclarativefontloader.cpp b/src/declarative/util/qdeclarativefontloader.cpp index c73f827..3c2e239 100644 --- a/src/declarative/util/qdeclarativefontloader.cpp +++ b/src/declarative/util/qdeclarativefontloader.cpp @@ -83,6 +83,8 @@ public: Example: \qml + import Qt 4.7 + FontLoader { id: fixedFont; name: "Courier" } FontLoader { id: webFont; source: "http://www.mysite.com/myfont.ttf" } @@ -183,15 +185,26 @@ void QDeclarativeFontLoader::setName(const QString &name) \o FontLoader.Error - an error occurred while loading the font \endlist - Note that a change in the status property does not cause anything to happen - (although it reflects what has happened to the font loader internally). If you wish - to react to the change in status you need to do it yourself, for example in one - of the following ways: - \list - \o Create a state, so that a state change occurs, e.g. State{name: 'loaded'; when: loader.status = FontLoader.Ready;} - \o Do something inside the onStatusChanged signal handler, e.g. FontLoader{id: loader; onStatusChanged: if(loader.status == FontLoader.Ready) console.log('Loaded');} - \o Bind to the status variable somewhere, e.g. Text{text: if(loader.status!=FontLoader.Ready){'Not Loaded';}else{'Loaded';}} - \endlist + Use this status to provide an update or respond to the status change in some way. + For example, you could: + + \e {Trigger a state change:} + \qml + State { name: 'loaded'; when: loader.status = FontLoader.Ready } + \endqml + + \e {Implement an \c onStatusChanged signal handler:} + \qml + FontLoader { + id: loader + onStatusChanged: if (loader.status == FontLoader.Ready) console.log('Loaded') + } + \endqml + + \e {Bind to the status value:} + \qml + Text { text: loader.status != FontLoader.Ready ? 'Not Loaded' : 'Loaded' } + \endqml */ QDeclarativeFontLoader::Status QDeclarativeFontLoader::status() const { diff --git a/src/declarative/util/qdeclarativepropertychanges.cpp b/src/declarative/util/qdeclarativepropertychanges.cpp index 08f4750..e98afeb 100644 --- a/src/declarative/util/qdeclarativepropertychanges.cpp +++ b/src/declarative/util/qdeclarativepropertychanges.cpp @@ -66,7 +66,7 @@ QT_BEGIN_NAMESPACE PropertyChanges provides a state change that modifies the properties of an item. - Here is a property change that modifies the text and color of a Text element + Here is a property change that modifies the text and color of a \l Text element when it is clicked: \qml diff --git a/src/declarative/util/qdeclarativesmoothedanimation.cpp b/src/declarative/util/qdeclarativesmoothedanimation.cpp index bd48ef0..6b6df4d 100644 --- a/src/declarative/util/qdeclarativesmoothedanimation.cpp +++ b/src/declarative/util/qdeclarativesmoothedanimation.cpp @@ -307,7 +307,7 @@ Rectangle { set to a value such as 0.5 units/second. Animating from 0 to 1.0 with a velocity of 0.5 will take 2000 ms to complete. - \sa SpringFollow + \sa SpringFollow, {QML Animation}, {declarative/animation/basics}{Animation basics example} */ QDeclarativeSmoothedAnimation::QDeclarativeSmoothedAnimation(QObject *parent) diff --git a/src/declarative/util/qdeclarativetimer.cpp b/src/declarative/util/qdeclarativetimer.cpp index 53a9d83..9e18eb5 100644 --- a/src/declarative/util/qdeclarativetimer.cpp +++ b/src/declarative/util/qdeclarativetimer.cpp @@ -80,17 +80,22 @@ public: the text every 500 milliseconds: \qml - Timer { - interval: 500; running: true; repeat: true - onTriggered: time.text = Date().toString() - } - Text { - id: time + import Qt 4.7 + + Item { + Timer { + interval: 500; running: true; repeat: true + onTriggered: time.text = Date().toString() + } + + Text { + id: time + } } \endqml - QDeclarativeTimer is synchronized with the animation timer. Since the animation - timer is usually set to 60fps, the resolution of QDeclarativeTimer will be + The Timer element is synchronized with the animation timer. Since the animation + timer is usually set to 60fps, the resolution of Timer will be at best 16ms. If the Timer is running and one of its properties is changed, the @@ -98,8 +103,6 @@ public: 1000ms has its \e repeat property changed 500ms after starting, the elapsed time will be reset to 0, and the Timer will be triggered 1000ms later. - - \sa {QtDeclarative} */ QDeclarativeTimer::QDeclarativeTimer(QObject *parent) -- cgit v0.12 From 850efd1651acbec1f99fc3b7f35307a88504327b Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Wed, 2 Jun 2010 11:19:47 +1000 Subject: More autoScroll fixes Task-number: QTBUG-11143 --- .../graphicsitems/qdeclarativetextinput.cpp | 19 +++++++++++++++++-- .../graphicsitems/qdeclarativetextinput_p.h | 1 + 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index 7b96c0c..91ef0a2 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -891,6 +891,22 @@ void QDeclarativeTextInput::keyPressEvent(QKeyEvent* ev) QDeclarativePaintedItem::keyPressEvent(ev); } +/*! +\overload +Handles the given mouse \a event. +*/ +void QDeclarativeTextInput::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) +{ + Q_D(QDeclarativeTextInput); + if (d->selectByMouse) { + int cursor = d->xToPos(event->pos().x()); + d->control->selectWordAtPos(cursor); + event->setAccepted(true); + } else { + QDeclarativePaintedItem::mouseDoubleClickEvent(event); + } +} + void QDeclarativeTextInput::mousePressEvent(QGraphicsSceneMouseEvent *event) { Q_D(QDeclarativeTextInput); @@ -949,10 +965,9 @@ bool QDeclarativeTextInput::event(QEvent* ev) case QEvent::GraphicsSceneMousePress: case QEvent::GraphicsSceneMouseMove: case QEvent::GraphicsSceneMouseRelease: + case QEvent::GraphicsSceneMouseDoubleClick: break; default: - if (ev->type() == QEvent::GraphicsSceneMouseDoubleClick && !d->selectByMouse) - break; handled = d->control->processEvent(ev); if (ev->type() == QEvent::InputMethod) updateSize(); diff --git a/src/declarative/graphicsitems/qdeclarativetextinput_p.h b/src/declarative/graphicsitems/qdeclarativetextinput_p.h index 6bc6fc4..4b857ca 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextinput_p.h @@ -225,6 +225,7 @@ protected: void mousePressEvent(QGraphicsSceneMouseEvent *event); void mouseMoveEvent(QGraphicsSceneMouseEvent *event); void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); + void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event); void keyPressEvent(QKeyEvent* ev); bool event(QEvent *e); void focusInEvent(QFocusEvent *event); -- cgit v0.12 From e891abddfe42699a8c2c9a583b91269237e17008 Mon Sep 17 00:00:00 2001 From: Joona Petrell Date: Tue, 1 Jun 2010 14:50:59 +1000 Subject: Take into account platform differences in input panel support Task-number: Reviewed-by: Warwick Allison --- src/declarative/QmlChanges.txt | 1 - .../graphicsitems/qdeclarativetextedit.cpp | 109 +++++++++++-------- .../graphicsitems/qdeclarativetextedit_p.h | 5 - .../graphicsitems/qdeclarativetextedit_p_p.h | 12 ++- .../graphicsitems/qdeclarativetextinput.cpp | 117 ++++++++++++--------- .../graphicsitems/qdeclarativetextinput_p.h | 5 - .../graphicsitems/qdeclarativetextinput_p_p.h | 11 +- .../tst_qdeclarativetextedit.cpp | 83 ++++++++++++--- .../tst_qdeclarativetextinput.cpp | 83 ++++++++++++--- 9 files changed, 285 insertions(+), 141 deletions(-) diff --git a/src/declarative/QmlChanges.txt b/src/declarative/QmlChanges.txt index 0df5f10..5735b1e 100644 --- a/src/declarative/QmlChanges.txt +++ b/src/declarative/QmlChanges.txt @@ -2,7 +2,6 @@ The changes below are pre Qt 4.7.0 RC TextInput and TextEdit: - - showInputPanelOnFocus property added - openSoftwareInputPanel() and closeSoftwareInputPanel() functions added Flickable: - overShoot is replaced by boundsBehavior enumeration diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index ffb7dfe..48826ff 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -1106,9 +1106,15 @@ void QDeclarativeTextEdit::mousePressEvent(QGraphicsSceneMouseEvent *event) p = p->parentItem(); } setFocus(true); - if (hasFocus() == hadFocus && d->showInputPanelOnFocus && !isReadOnly()) { - // re-open input panel on press if already focused - openSoftwareInputPanel(); + if (d->showInputPanelOnFocus) { + if (hasFocus() && hadFocus && !isReadOnly()) { + // re-open input panel on press if already focused + openSoftwareInputPanel(); + } + } else { // show input panel on click + if (hasFocus() && !hadFocus) { + d->clickCausedFocus = true; + } } } if (event->type() != QEvent::GraphicsSceneMouseDoubleClick || d->selectByMouse) @@ -1125,6 +1131,17 @@ void QDeclarativeTextEdit::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { Q_D(QDeclarativeTextEdit); d->control->processEvent(event, QPointF(0, -d->yoff)); + if (!d->showInputPanelOnFocus) { // input panel on click + if (d->focusOnPress && !isReadOnly() && boundingRect().contains(event->pos())) { + if (QGraphicsView * view = qobject_cast(qApp->focusWidget())) { + if (view->scene() && view->scene() == scene()) { + qt_widget_private(view)->handleSoftwareInputPanel(event->button(), d->clickCausedFocus); + } + } + } + } + d->clickCausedFocus = false; + if (!event->isAccepted()) QDeclarativePaintedItem::mouseReleaseEvent(event); } @@ -1372,10 +1389,14 @@ void QDeclarativeTextEditPrivate::updateDefaultTextOption() customizing when you want the input keyboard to be shown and hidden in your application. - By default input panels are shown when TextEdit element gains focus and hidden - when the focus is lost. You can disable the automatic behavior by setting the - property showInputPanelOnFocus to false and use functions openSoftwareInputPanel() - and closeSoftwareInputPanel() to implement the behavior you want. + By default the opening of input panels follows the platform style. On Symbian^1 and + Symbian^3 -based devices the panels are opened by clicking TextEdit and need to be + manually closed by the user. On other platforms the panels are automatically opened + when TextEdit element gains focus and closed when the focus is lost. + + . You can disable the automatic behavior by setting the property \c focusOnPress to false + and use functions openSoftwareInputPanel() and closeSoftwareInputPanel() to implement + the behavior you want. Only relevant on platforms, which provide virtual keyboards. @@ -1384,12 +1405,19 @@ void QDeclarativeTextEditPrivate::updateDefaultTextOption() TextEdit { id: textEdit text: "Hello world!" - showInputPanelOnFocus: false + focusOnPress: false MouseArea { anchors.fill: parent - onClicked: textEdit.openSoftwareInputPanel() + onClicked: { + if (!textEdit.focus) { + textEdit.focus = true; + textEdit.openSoftwareInputPanel(); + } else { + textEdit.focus = false; + textEdit.closeSoftwareInputPanel(); + } + } } - onFocusChanged: if (!focus) closeSoftwareInputpanel() } \endcode */ @@ -1412,10 +1440,14 @@ void QDeclarativeTextEdit::openSoftwareInputPanel() for customizing when you want the input keyboard to be shown and hidden in your application. - By default input panels are shown when TextEdit element gains focus and hidden - when the focus is lost. You can disable the automatic behavior by setting the - property showInputPanelOnFocus to false and use functions openSoftwareInputPanel() - and closeSoftwareInputPanel() to implement the behavior you want. + By default the opening of input panels follows the platform style. On Symbian^1 and + Symbian^3 -based devices the panels are opened by clicking TextEdit and need to be + manually closed by the user. On other platforms the panels are automatically opened + when TextEdit element gains focus and closed when the focus is lost. + + . You can disable the automatic behavior by setting the property \c focusOnPress to false + and use functions openSoftwareInputPanel() and closeSoftwareInputPanel() to implement + the behavior you want. Only relevant on platforms, which provide virtual keyboards. @@ -1424,12 +1456,19 @@ void QDeclarativeTextEdit::openSoftwareInputPanel() TextEdit { id: textEdit text: "Hello world!" - showInputPanelOnFocus: false + focusOnPress: false MouseArea { anchors.fill: parent - onClicked: textEdit.openSoftwareInputPanel() + onClicked: { + if (!textEdit.focus) { + textEdit.focus = true; + textEdit.openSoftwareInputPanel(); + } else { + textEdit.focus = false; + textEdit.closeSoftwareInputPanel(); + } + } } - onFocusChanged: if (!focus) closeSoftwareInputpanel() } \endcode */ @@ -1445,35 +1484,13 @@ void QDeclarativeTextEdit::closeSoftwareInputPanel() } } -/*! - \qmlproperty bool TextEdit::showInputPanelOnFocus - Whether input panels are automatically shown when TextEdit element gains - focus and hidden when focus is lost. By default this is set to true. - - Only relevant on platforms, which provide virtual keyboards. -*/ -bool QDeclarativeTextEdit::showInputPanelOnFocus() const -{ - Q_D(const QDeclarativeTextEdit); - return d->showInputPanelOnFocus; -} - -void QDeclarativeTextEdit::setShowInputPanelOnFocus(bool showOnFocus) -{ - Q_D(QDeclarativeTextEdit); - if (d->showInputPanelOnFocus == showOnFocus) - return; - - d->showInputPanelOnFocus = showOnFocus; - - emit showInputPanelOnFocusChanged(d->showInputPanelOnFocus); -} - void QDeclarativeTextEdit::focusInEvent(QFocusEvent *event) { Q_D(const QDeclarativeTextEdit); - if (d->showInputPanelOnFocus && !isReadOnly() && event->reason() != Qt::ActiveWindowFocusReason) { - openSoftwareInputPanel(); + if (d->showInputPanelOnFocus) { + if (d->focusOnPress && !isReadOnly() && event->reason() != Qt::ActiveWindowFocusReason) { + openSoftwareInputPanel(); + } } QDeclarativePaintedItem::focusInEvent(event); } @@ -1481,8 +1498,10 @@ void QDeclarativeTextEdit::focusInEvent(QFocusEvent *event) void QDeclarativeTextEdit::focusOutEvent(QFocusEvent *event) { Q_D(const QDeclarativeTextEdit); - if (d->showInputPanelOnFocus && !isReadOnly()) { - closeSoftwareInputPanel(); + if (d->showInputPanelOnFocus) { + if (d->focusOnPress && !isReadOnly()) { + closeSoftwareInputPanel(); + } } QDeclarativePaintedItem::focusOutEvent(event); } diff --git a/src/declarative/graphicsitems/qdeclarativetextedit_p.h b/src/declarative/graphicsitems/qdeclarativetextedit_p.h index 3abfc35..3846d49 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextedit_p.h @@ -86,7 +86,6 @@ class Q_DECLARATIVE_EXPORT QDeclarativeTextEdit : public QDeclarativePaintedItem Q_PROPERTY(int selectionEnd READ selectionEnd NOTIFY selectionEndChanged) Q_PROPERTY(QString selectedText READ selectedText NOTIFY selectionChanged) Q_PROPERTY(bool focusOnPress READ focusOnPress WRITE setFocusOnPress NOTIFY focusOnPressChanged) - Q_PROPERTY(bool showInputPanelOnFocus READ showInputPanelOnFocus WRITE setShowInputPanelOnFocus NOTIFY showInputPanelOnFocusChanged) Q_PROPERTY(bool persistentSelection READ persistentSelection WRITE setPersistentSelection NOTIFY persistentSelectionChanged) Q_PROPERTY(qreal textMargin READ textMargin WRITE setTextMargin NOTIFY textMarginChanged) Q_PROPERTY(Qt::InputMethodHints inputMethodHints READ inputMethodHints WRITE setInputMethodHints) @@ -167,9 +166,6 @@ public: bool focusOnPress() const; void setFocusOnPress(bool on); - bool showInputPanelOnFocus() const; - void setShowInputPanelOnFocus(bool showOnFocus); - bool persistentSelection() const; void setPersistentSelection(bool on); @@ -222,7 +218,6 @@ Q_SIGNALS: void persistentSelectionChanged(bool isPersistentSelection); void textMarginChanged(qreal textMargin); void selectByMouseChanged(bool selectByMouse); - void showInputPanelOnFocusChanged(bool showOnFocus); public Q_SLOTS: void selectAll(); diff --git a/src/declarative/graphicsitems/qdeclarativetextedit_p_p.h b/src/declarative/graphicsitems/qdeclarativetextedit_p_p.h index 8e1d630..4092e65 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextedit_p_p.h @@ -70,12 +70,17 @@ public: QDeclarativeTextEditPrivate() : color("black"), hAlign(QDeclarativeTextEdit::AlignLeft), vAlign(QDeclarativeTextEdit::AlignTop), imgDirty(true), dirty(false), richText(false), cursorVisible(false), focusOnPress(true), - showInputPanelOnFocus(true), persistentSelection(true), textMargin(0.0), lastSelectionStart(0), - lastSelectionEnd(0), cursorComponent(0), cursor(0), format(QDeclarativeTextEdit::AutoText), - document(0), wrapMode(QDeclarativeTextEdit::NoWrap), + showInputPanelOnFocus(true), clickCausedFocus(false), persistentSelection(true), textMargin(0.0), + lastSelectionStart(0), lastSelectionEnd(0), cursorComponent(0), cursor(0), + format(QDeclarativeTextEdit::AutoText), document(0), wrapMode(QDeclarativeTextEdit::NoWrap), selectByMouse(false), yoff(0) { +#ifdef Q_OS_SYMBIAN + if (QSysInfo::symbianVersion() == QSysInfo::SV_SF_1 || QSysInfo::symbianVersion() == QSysInfo::SV_SF_3) { + showInputPanelOnFocus = false; + } +#endif } void init(); @@ -102,6 +107,7 @@ public: bool cursorVisible : 1; bool focusOnPress : 1; bool showInputPanelOnFocus : 1; + bool clickCausedFocus : 1; bool persistentSelection : 1; qreal textMargin; int lastSelectionStart; diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index 91ef0a2..1202101 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -919,12 +919,17 @@ void QDeclarativeTextInput::mousePressEvent(QGraphicsSceneMouseEvent *event) p = p->parentItem(); } setFocus(true); - if (hasFocus() == hadFocus && d->showInputPanelOnFocus && !isReadOnly()) { - // re-open input panel on press w already focused - openSoftwareInputPanel(); + if (d->showInputPanelOnFocus) { + if (hasFocus() && hadFocus && !isReadOnly()) { + // re-open input panel on press if already focused + openSoftwareInputPanel(); + } + } else { // show input panel on click + if (hasFocus() && !hadFocus) { + d->clickCausedFocus = true; + } } } - bool mark = event->modifiers() & Qt::ShiftModifier; int cursor = d->xToPos(event->pos().x()); d->control->moveCursor(cursor, mark); @@ -949,6 +954,16 @@ Handles the given mouse \a event. void QDeclarativeTextInput::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { Q_D(QDeclarativeTextInput); + if (!d->showInputPanelOnFocus) { // input panel on click + if (d->focusOnPress && !isReadOnly() && boundingRect().contains(event->pos())) { + if (QGraphicsView * view = qobject_cast(qApp->focusWidget())) { + if (view->scene() && view->scene() == scene()) { + qt_widget_private(view)->handleSoftwareInputPanel(event->button(), d->clickCausedFocus); + } + } + } + } + d->clickCausedFocus = false; d->control->processEvent(event); if (!event->isAccepted()) QDeclarativePaintedItem::mouseReleaseEvent(event); @@ -1218,26 +1233,37 @@ void QDeclarativeTextInput::moveCursorSelection(int position) customizing when you want the input keyboard to be shown and hidden in your application. - By default input panels are shown when TextInput element gains focus and hidden - when the focus is lost. You can disable the automatic behavior by setting the - property showInputPanelOnFocus to false and use functions openSoftwareInputPanel() - and closeSoftwareInputPanel() to implement the behavior you want. + By default the opening of input panels follows the platform style. On Symbian^1 and + Symbian^3 -based devices the panels are opened by clicking TextInput and need to be + manually closed by the user. On other platforms the panels are automatically opened + when TextInput element gains focus and closed when the focus is lost. + + . You can disable the automatic behavior by setting the property \c focusOnPress to false + and use functions openSoftwareInputPanel() and closeSoftwareInputPanel() to implement + the behavior you want. Only relevant on platforms, which provide virtual keyboards. - \code + \qml import Qt 4.7 TextInput { id: textInput text: "Hello world!" - showInputPanelOnFocus: false + focusOnPress: false MouseArea { anchors.fill: parent - onClicked: textInput.openSoftwareInputPanel() + onClicked: { + if (!textInput.focus) { + textInput.focus = true; + textInput.openSoftwareInputPanel(); + } else { + textInput.focus = false; + textInput.closeSoftwareInputPanel(); + } + } } - onFocusChanged: if (!focus) closeSoftwareInputPanel() } - \endcode + \endqml */ void QDeclarativeTextInput::openSoftwareInputPanel() { @@ -1258,26 +1284,37 @@ void QDeclarativeTextInput::openSoftwareInputPanel() for customizing when you want the input keyboard to be shown and hidden in your application. - By default input panels are shown when TextInput element gains focus and hidden - when the focus is lost. You can disable the automatic behavior by setting the - property showInputPanelOnFocus to false and use functions openSoftwareInputPanel() - and closeSoftwareInputPanel() to implement the behavior you want. + By default the opening of input panels follows the platform style. On Symbian^1 and + Symbian^3 -based devices the panels are opened by clicking TextInput and need to be + manually closed by the user. On other platforms the panels are automatically opened + when TextInput element gains focus and closed when the focus is lost. + + . You can disable the automatic behavior by setting the property \c focusOnPress to false + and use functions openSoftwareInputPanel() and closeSoftwareInputPanel() to implement + the behavior you want. Only relevant on platforms, which provide virtual keyboards. - \code + \qml import Qt 4.7 TextInput { id: textInput text: "Hello world!" - showInputPanelOnFocus: false + focusOnPress: false MouseArea { anchors.fill: parent - onClicked: textInput.openSoftwareInputPanel() + onClicked: { + if (!textInput.focus) { + textInput.focus = true; + textInput.openSoftwareInputPanel(); + } else { + textInput.focus = false; + textInput.closeSoftwareInputPanel(); + } + } } - onFocusChanged: if (!focus) closeSoftwareInputPanel() } - \endcode + \endqml */ void QDeclarativeTextInput::closeSoftwareInputPanel() { @@ -1292,35 +1329,13 @@ void QDeclarativeTextInput::closeSoftwareInputPanel() } } -/*! - \qmlproperty bool TextInput::showInputPanelOnFocus - Whether input panels are automatically shown when TextInput element gains - focus and hidden when focus is lost. By default this is set to true. - - Only relevant on platforms, which provide virtual keyboards. -*/ -bool QDeclarativeTextInput::showInputPanelOnFocus() const -{ - Q_D(const QDeclarativeTextInput); - return d->showInputPanelOnFocus; -} - -void QDeclarativeTextInput::setShowInputPanelOnFocus(bool showOnFocus) -{ - Q_D(QDeclarativeTextInput); - if (d->showInputPanelOnFocus == showOnFocus) - return; - - d->showInputPanelOnFocus = showOnFocus; - - emit showInputPanelOnFocusChanged(d->showInputPanelOnFocus); -} - void QDeclarativeTextInput::focusInEvent(QFocusEvent *event) { Q_D(const QDeclarativeTextInput); - if (d->showInputPanelOnFocus && !isReadOnly() && event->reason() != Qt::ActiveWindowFocusReason) { - openSoftwareInputPanel(); + if (d->showInputPanelOnFocus) { + if (d->focusOnPress && !isReadOnly() && event->reason() != Qt::ActiveWindowFocusReason) { + openSoftwareInputPanel(); + } } QDeclarativePaintedItem::focusInEvent(event); } @@ -1328,8 +1343,10 @@ void QDeclarativeTextInput::focusInEvent(QFocusEvent *event) void QDeclarativeTextInput::focusOutEvent(QFocusEvent *event) { Q_D(const QDeclarativeTextInput); - if (d->showInputPanelOnFocus && !isReadOnly()) { - closeSoftwareInputPanel(); + if (d->showInputPanelOnFocus) { + if (d->focusOnPress && !isReadOnly()) { + closeSoftwareInputPanel(); + } } QDeclarativePaintedItem::focusOutEvent(event); } diff --git a/src/declarative/graphicsitems/qdeclarativetextinput_p.h b/src/declarative/graphicsitems/qdeclarativetextinput_p.h index 4b857ca..e34634a 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextinput_p.h @@ -88,7 +88,6 @@ class Q_DECLARATIVE_EXPORT QDeclarativeTextInput : public QDeclarativePaintedIte Q_PROPERTY(bool acceptableInput READ hasAcceptableInput NOTIFY acceptableInputChanged) Q_PROPERTY(EchoMode echoMode READ echoMode WRITE setEchoMode NOTIFY echoModeChanged) Q_PROPERTY(bool focusOnPress READ focusOnPress WRITE setFocusOnPress NOTIFY focusOnPressChanged) - Q_PROPERTY(bool showInputPanelOnFocus READ showInputPanelOnFocus WRITE setShowInputPanelOnFocus NOTIFY showInputPanelOnFocusChanged) Q_PROPERTY(QString passwordCharacter READ passwordCharacter WRITE setPasswordCharacter NOTIFY passwordCharacterChanged) Q_PROPERTY(QString displayText READ displayText NOTIFY displayTextChanged) Q_PROPERTY(bool autoScroll READ autoScroll WRITE setAutoScroll NOTIFY autoScrollChanged) @@ -177,9 +176,6 @@ public: bool focusOnPress() const; void setFocusOnPress(bool); - bool showInputPanelOnFocus() const; - void setShowInputPanelOnFocus(bool showOnFocus); - bool autoScroll() const; void setAutoScroll(bool); @@ -216,7 +212,6 @@ Q_SIGNALS: void focusOnPressChanged(bool focusOnPress); void autoScrollChanged(bool autoScroll); void selectByMouseChanged(bool selectByMouse); - void showInputPanelOnFocusChanged(bool showOnFocus); protected: virtual void geometryChanged(const QRectF &newGeometry, diff --git a/src/declarative/graphicsitems/qdeclarativetextinput_p_p.h b/src/declarative/graphicsitems/qdeclarativetextinput_p_p.h index f44d014..6865147 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextinput_p_p.h @@ -72,9 +72,15 @@ public: color((QRgb)0), style(QDeclarativeText::Normal), styleColor((QRgb)0), hAlign(QDeclarativeTextInput::AlignLeft), hscroll(0), oldScroll(0), focused(false), focusOnPress(true), - showInputPanelOnFocus(true), cursorVisible(false), autoScroll(true), - selectByMouse(false) + showInputPanelOnFocus(true), clickCausedFocus(false), cursorVisible(false), + autoScroll(true), selectByMouse(false) { +#ifdef Q_OS_SYMBIAN + if (QSysInfo::symbianVersion() == QSysInfo::SV_SF_1 || QSysInfo::symbianVersion() == QSysInfo::SV_SF_3) { + showInputPanelOnFocus = false; + } +#endif + } ~QDeclarativeTextInputPrivate() @@ -116,6 +122,7 @@ public: bool focused; bool focusOnPress; bool showInputPanelOnFocus; + bool clickCausedFocus; bool cursorVisible; bool autoScroll; bool selectByMouse; diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp index 47c5b63..fbab30e 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -50,6 +50,7 @@ #include #include #include +#include #include #include #include @@ -86,7 +87,8 @@ private slots: void delegateLoading(); void navigation(); void readOnly(); - void sendRequestSoftwareInputPanelEvent(); + void openInputPanelOnClick(); + void openInputPanelOnFocus(); void geometrySignals(); private: void simulateKey(QDeclarativeView *, int key); @@ -817,14 +819,14 @@ public: bool closeInputPanelReceived; }; -void tst_qdeclarativetextedit::sendRequestSoftwareInputPanelEvent() +void tst_qdeclarativetextedit::openInputPanelOnClick() { QGraphicsScene scene; QGraphicsView view(&scene); MyInputContext ic; view.setInputContext(&ic); QDeclarativeTextEdit edit; - QSignalSpy inputPanelonFocusSpy(&edit, SIGNAL(showInputPanelOnFocusChanged(bool))); + QSignalSpy focusOnPressSpy(&edit, SIGNAL(focusOnPressChanged(bool))); edit.setText("Hello world"); edit.setPos(0, 0); scene.addItem(&edit); @@ -834,7 +836,58 @@ void tst_qdeclarativetextedit::sendRequestSoftwareInputPanelEvent() QTest::qWaitForWindowShown(&view); QTRY_COMPARE(QApplication::activeWindow(), static_cast(&view)); - QVERIFY(edit.showInputPanelOnFocus()); + QDeclarativeItemPrivate* pri = QDeclarativeItemPrivate::get(&edit); + QDeclarativeTextEditPrivate *editPrivate = static_cast(pri); + + // input panel on click + editPrivate->showInputPanelOnFocus = false; + + QStyle::RequestSoftwareInputPanel behavior = QStyle::RequestSoftwareInputPanel( + view.style()->styleHint(QStyle::SH_RequestSoftwareInputPanel)); + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(edit.scenePos())); + QApplication::processEvents(); + if (behavior == QStyle::RSIP_OnMouseClickAndAlreadyFocused) { + QCOMPARE(ic.openInputPanelReceived, false); + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(edit.scenePos())); + QApplication::processEvents(); + QCOMPARE(ic.openInputPanelReceived, true); + } else if (behavior == QStyle::RSIP_OnMouseClick) { + QCOMPARE(ic.openInputPanelReceived, true); + } + ic.openInputPanelReceived = false; + + // focus should not cause input panels to open or close + edit.setFocus(false); + edit.setFocus(true); + edit.setFocus(false); + edit.setFocus(true); + edit.setFocus(false); + QCOMPARE(ic.openInputPanelReceived, false); + QCOMPARE(ic.closeInputPanelReceived, false); +} + +void tst_qdeclarativetextedit::openInputPanelOnFocus() +{ + QGraphicsScene scene; + QGraphicsView view(&scene); + MyInputContext ic; + view.setInputContext(&ic); + QDeclarativeTextEdit edit; + QSignalSpy focusOnPressSpy(&edit, SIGNAL(focusOnPressChanged(bool))); + edit.setText("Hello world"); + edit.setPos(0, 0); + scene.addItem(&edit); + view.show(); + qApp->setAutoSipEnabled(true); + QApplication::setActiveWindow(&view); + QTest::qWaitForWindowShown(&view); + QTRY_COMPARE(QApplication::activeWindow(), static_cast(&view)); + + QDeclarativeItemPrivate* pri = QDeclarativeItemPrivate::get(&edit); + QDeclarativeTextEditPrivate *editPrivate = static_cast(pri); + editPrivate->showInputPanelOnFocus = true; + + QVERIFY(edit.focusOnPress()); QCOMPARE(ic.openInputPanelReceived, false); QCOMPARE(ic.closeInputPanelReceived, false); @@ -867,9 +920,9 @@ void tst_qdeclarativetextedit::sendRequestSoftwareInputPanelEvent() QCOMPARE(ic.closeInputPanelReceived, true); ic.closeInputPanelReceived = false; - // no input panel events if showInputPanelOnFocus is false - edit.setShowInputPanelOnFocus(false); - QCOMPARE(inputPanelonFocusSpy.count(),1); + // no automatic input panel events if focusOnPress is false + edit.setFocusOnPress(false); + QCOMPARE(focusOnPressSpy.count(),1); QTest::mousePress(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(edit.scenePos())); QTest::mouseRelease(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(edit.scenePos())); edit.setFocus(false); @@ -877,8 +930,8 @@ void tst_qdeclarativetextedit::sendRequestSoftwareInputPanelEvent() QCOMPARE(ic.openInputPanelReceived, false); QCOMPARE(ic.closeInputPanelReceived, false); - edit.setShowInputPanelOnFocus(false); - QCOMPARE(inputPanelonFocusSpy.count(),1); + edit.setFocusOnPress(false); + QCOMPARE(focusOnPressSpy.count(),1); // one show input panel event when openSoftwareInputPanel is called edit.openSoftwareInputPanel(); @@ -892,14 +945,17 @@ void tst_qdeclarativetextedit::sendRequestSoftwareInputPanelEvent() QCOMPARE(ic.closeInputPanelReceived, true); ic.openInputPanelReceived = false; - // set showInputPanelOnFocus back to true - edit.setShowInputPanelOnFocus(true); - QCOMPARE(inputPanelonFocusSpy.count(),2); + // set focusOnPress back to true + edit.setFocusOnPress(true); + QCOMPARE(focusOnPressSpy.count(),2); edit.setFocus(false); QCOMPARE(ic.openInputPanelReceived, false); QCOMPARE(ic.closeInputPanelReceived, true); ic.closeInputPanelReceived = false; + edit.setFocusOnPress(true); + QCOMPARE(focusOnPressSpy.count(),2); + // active window focus reason should not cause input panel to open QGraphicsObject * editObject = qobject_cast(&edit); editObject->setFocus(Qt::ActiveWindowFocusReason); @@ -910,9 +966,6 @@ void tst_qdeclarativetextedit::sendRequestSoftwareInputPanelEvent() edit.setFocus(true); QCOMPARE(ic.openInputPanelReceived, false); QCOMPARE(ic.closeInputPanelReceived, false); - - edit.setShowInputPanelOnFocus(true); - QCOMPARE(inputPanelonFocusSpy.count(),2); } void tst_qdeclarativetextedit::geometrySignals() diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index c943c89..3cb4da0 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -45,6 +45,7 @@ #include #include #include +#include #include #include #include @@ -74,7 +75,8 @@ private slots: void navigation(); void readOnly(); - void sendRequestSoftwareInputPanelEvent(); + void openInputPanelOnClick(); + void openInputPanelOnFocus(); void setHAlignClearCache(); void focusOutClearSelection(); @@ -763,14 +765,14 @@ public: bool closeInputPanelReceived; }; -void tst_qdeclarativetextinput::sendRequestSoftwareInputPanelEvent() +void tst_qdeclarativetextinput::openInputPanelOnClick() { QGraphicsScene scene; QGraphicsView view(&scene); MyInputContext ic; view.setInputContext(&ic); QDeclarativeTextInput input; - QSignalSpy inputPanelonFocusSpy(&input, SIGNAL(showInputPanelOnFocusChanged(bool))); + QSignalSpy focusOnPressSpy(&input, SIGNAL(focusOnPressChanged(bool))); input.setText("Hello world"); input.setPos(0, 0); scene.addItem(&input); @@ -780,7 +782,58 @@ void tst_qdeclarativetextinput::sendRequestSoftwareInputPanelEvent() QTest::qWaitForWindowShown(&view); QTRY_COMPARE(QApplication::activeWindow(), static_cast(&view)); - QVERIFY(input.showInputPanelOnFocus()); + QDeclarativeItemPrivate* pri = QDeclarativeItemPrivate::get(&input); + QDeclarativeTextInputPrivate *inputPrivate = static_cast(pri); + + // input panel on click + inputPrivate->showInputPanelOnFocus = false; + + QStyle::RequestSoftwareInputPanel behavior = QStyle::RequestSoftwareInputPanel( + view.style()->styleHint(QStyle::SH_RequestSoftwareInputPanel)); + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(input.scenePos())); + QApplication::processEvents(); + if (behavior == QStyle::RSIP_OnMouseClickAndAlreadyFocused) { + QCOMPARE(ic.openInputPanelReceived, false); + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(input.scenePos())); + QApplication::processEvents(); + QCOMPARE(ic.openInputPanelReceived, true); + } else if (behavior == QStyle::RSIP_OnMouseClick) { + QCOMPARE(ic.openInputPanelReceived, true); + } + ic.openInputPanelReceived = false; + + // focus should not cause input panels to open or close + input.setFocus(false); + input.setFocus(true); + input.setFocus(false); + input.setFocus(true); + input.setFocus(false); + QCOMPARE(ic.openInputPanelReceived, false); + QCOMPARE(ic.closeInputPanelReceived, false); +} + +void tst_qdeclarativetextinput::openInputPanelOnFocus() +{ + QGraphicsScene scene; + QGraphicsView view(&scene); + MyInputContext ic; + view.setInputContext(&ic); + QDeclarativeTextInput input; + QSignalSpy focusOnPressSpy(&input, SIGNAL(focusOnPressChanged(bool))); + input.setText("Hello world"); + input.setPos(0, 0); + scene.addItem(&input); + view.show(); + qApp->setAutoSipEnabled(true); + QApplication::setActiveWindow(&view); + QTest::qWaitForWindowShown(&view); + QTRY_COMPARE(QApplication::activeWindow(), static_cast(&view)); + + QDeclarativeItemPrivate* pri = QDeclarativeItemPrivate::get(&input); + QDeclarativeTextInputPrivate *inputPrivate = static_cast(pri); + inputPrivate->showInputPanelOnFocus = true; + + QVERIFY(input.focusOnPress()); QCOMPARE(ic.openInputPanelReceived, false); QCOMPARE(ic.closeInputPanelReceived, false); @@ -813,9 +866,9 @@ void tst_qdeclarativetextinput::sendRequestSoftwareInputPanelEvent() QCOMPARE(ic.closeInputPanelReceived, true); ic.closeInputPanelReceived = false; - // no input panel events if showInputPanelOnFocus is false - input.setShowInputPanelOnFocus(false); - QCOMPARE(inputPanelonFocusSpy.count(),1); + // no automatic input panel events if focusOnPress is false + input.setFocusOnPress(false); + QCOMPARE(focusOnPressSpy.count(),1); QTest::mousePress(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(input.scenePos())); QTest::mouseRelease(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(input.scenePos())); input.setFocus(false); @@ -823,8 +876,8 @@ void tst_qdeclarativetextinput::sendRequestSoftwareInputPanelEvent() QCOMPARE(ic.openInputPanelReceived, false); QCOMPARE(ic.closeInputPanelReceived, false); - input.setShowInputPanelOnFocus(false); - QCOMPARE(inputPanelonFocusSpy.count(),1); + input.setFocusOnPress(false); + QCOMPARE(focusOnPressSpy.count(),1); // one show input panel event when openSoftwareInputPanel is called input.openSoftwareInputPanel(); @@ -838,14 +891,17 @@ void tst_qdeclarativetextinput::sendRequestSoftwareInputPanelEvent() QCOMPARE(ic.closeInputPanelReceived, true); ic.openInputPanelReceived = false; - // set showInputPanelOnFocus back to true - input.setShowInputPanelOnFocus(true); - QCOMPARE(inputPanelonFocusSpy.count(),2); + // set focusOnPress back to true + input.setFocusOnPress(true); + QCOMPARE(focusOnPressSpy.count(),2); input.setFocus(false); QCOMPARE(ic.openInputPanelReceived, false); QCOMPARE(ic.closeInputPanelReceived, true); ic.closeInputPanelReceived = false; + input.setFocusOnPress(true); + QCOMPARE(focusOnPressSpy.count(),2); + // active window focus reason should not cause input panel to open QGraphicsObject * inputObject = qobject_cast(&input); inputObject->setFocus(Qt::ActiveWindowFocusReason); @@ -856,9 +912,6 @@ void tst_qdeclarativetextinput::sendRequestSoftwareInputPanelEvent() input.setFocus(true); QCOMPARE(ic.openInputPanelReceived, false); QCOMPARE(ic.closeInputPanelReceived, false); - - input.setShowInputPanelOnFocus(true); - QCOMPARE(inputPanelonFocusSpy.count(),2); } class MyTextInput : public QDeclarativeTextInput -- cgit v0.12 From 3609497406ad3c4128faeac8a4fb4cddf79deaf1 Mon Sep 17 00:00:00 2001 From: Joona Petrell Date: Wed, 2 Jun 2010 12:51:00 +1000 Subject: Add qml import plugins to qt.iby and qt.sis Task-number: QTBUG-10835, QTBUG-9784 Reviewed-by: Alessandro Portale Import plugins provide functionality (webkit, gesture, folderlistmodel, particle elements) that is important for QML application development and should be included in Qt 4.7 deployment. Even the plugins labeled as "Qt Labs" plugins will be maintained in the future Qt 4.x releases. --- src/s60installs/qt.iby | 15 +++++++++++++++ src/s60installs/s60installs.pro | 21 +++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/src/s60installs/qt.iby b/src/s60installs/qt.iby index ec019e2..f43f344 100644 --- a/src/s60installs/qt.iby +++ b/src/s60installs/qt.iby @@ -74,6 +74,21 @@ data=\epoc32\data\z\resource\qt\plugins\codecs\qtwcodecs.qtplugin resou // iconengines stubs 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\org\webkit\qmlwebkitplugin.qtplugin resource\qt\imports\org\webkit\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\org\webkit\qmldir resource\qt\imports\org\webkit\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 diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro index 90c362b..d3aadb0 100644 --- a/src/s60installs/s60installs.pro +++ b/src/s60installs/s60installs.pro @@ -143,6 +143,27 @@ symbian: { contains(QT_CONFIG, declarative): { qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtDeclarative$${QT_LIBINFIX}.dll + + folderlistmodelImport.sources = $$QMAKE_LIBDIR_QT/qmlfolderlistmodelplugin$${QT_LIBINFIX}.dll + gesturesImport.sources = $$QMAKE_LIBDIR_QT/qmlgesturesplugin$${QT_LIBINFIX}.dll + particlesImport.sources = $$QMAKE_LIBDIR_QT/qmlparticlesplugin$${QT_LIBINFIX}.dll + + folderlistmodelImport.sources += $$QT_SOURCE_TREE/src/imports/folderlistmodel/qmldir + gesturesImport.sources += $$QT_SOURCE_TREE/src/imports/gestures/qmldir + particlesImport.sources += $$QT_SOURCE_TREE/src/imports/particles/qmldir + + folderlistmodelImport.path = $$QT_IMPORTS_BASE_DIR/Qt/labs/folderlistmodel + gesturesImport.path = $$QT_IMPORTS_BASE_DIR/Qt/labs/gestures + particlesImport.path = $$QT_IMPORTS_BASE_DIR/Qt/labs/particles + + DEPLOYMENT += folderlistmodelImport gesturesImport particlesImport + + contains(QT_CONFIG, webkit): { + webkitImport.sources = $$QMAKE_LIBDIR_QT/qmlwebkitplugin$${QT_LIBINFIX}.dll + webkitImport.sources += $$QT_SOURCE_TREE/src/imports/webkit/qmldir + webkitImport.path = $$QT_IMPORTS_BASE_DIR/org/webkit + DEPLOYMENT += webkitImport + } } graphicssystems_plugins.path = c:$$QT_PLUGINS_BASE_DIR/graphicssystems -- cgit v0.12 From 04eb4d19a32c92453c6a74037e4ddf065e5e4f49 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Wed, 2 Jun 2010 16:04:38 +1000 Subject: Text should update when the alignment changes. --- src/declarative/graphicsitems/qdeclarativetext.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index a6bf5d4..f4722c3 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -479,6 +479,7 @@ void QDeclarativeText::setHAlign(HAlignment align) return; d->hAlign = align; + update(); emit horizontalAlignmentChanged(align); } @@ -495,6 +496,7 @@ void QDeclarativeText::setVAlign(VAlignment align) return; d->vAlign = align; + update(); emit verticalAlignmentChanged(align); } -- cgit v0.12 From 74232ac426d9911417e880334292925f47f0df1e Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Wed, 2 Jun 2010 17:19:22 +1000 Subject: QML viewer now supports TopUp, TopDown, RightUp and LeftUp orientations instead of Portrait/Landscape. The new orientations are named the same as the orientations in the QtMobility sensors module. Task-number: QTBUG-11106 Reviewed-by: akennedy --- .../qdeclarativeviewer/data/orientation.qml | 17 +++-- .../qdeclarativeviewer/tst_qdeclarativeviewer.cpp | 4 +- tools/qml/deviceorientation.cpp | 2 +- tools/qml/deviceorientation.h | 9 ++- tools/qml/deviceorientation_maemo.cpp | 12 ++-- tools/qml/qmlruntime.cpp | 82 ++++++++++++---------- tools/qml/qmlruntime.h | 9 +-- 7 files changed, 79 insertions(+), 56 deletions(-) diff --git a/tests/auto/declarative/qdeclarativeviewer/data/orientation.qml b/tests/auto/declarative/qdeclarativeviewer/data/orientation.qml index 687fac6..be911a3 100644 --- a/tests/auto/declarative/qdeclarativeviewer/data/orientation.qml +++ b/tests/auto/declarative/qdeclarativeviewer/data/orientation.qml @@ -1,10 +1,19 @@ import Qt 4.7 Rectangle { color: "black" - width: (runtime.orientation == Orientation.Landscape) ? 300 : 200 - height: (runtime.orientation == Orientation.Landscape) ? 200 : 300 + width: (runtime.orientation == Orientation.RightUp || runtime.orientation == Orientation.LeftUp) ? 300 : 200 + height: (runtime.orientation == Orientation.RightUp || runtime.orientation == Orientation.LeftUp) ? 200 : 300 Text { - text: runtime.orientation == Orientation.Landscape ? "Landscape" : "Portrait" + text: { + if (runtime.orientation == Orientation.TopUp) + return "TopUp" + if (runtime.orientation == Orientation.TopDown) + return "TopDown" + if (runtime.orientation == Orientation.LeftUp) + return "LeftUp" + if (runtime.orientation == Orientation.RightUp) + return "RightUp" + } color: "white" } -} \ No newline at end of file +} diff --git a/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp b/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp index 9429dc9..f296d9e 100644 --- a/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp +++ b/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp @@ -82,7 +82,7 @@ void tst_QDeclarativeViewer::orientation() QCOMPARE(viewer->size(), QSize(200, 300+viewer->menuBar()->height())); QCOMPARE(viewer->size(), viewer->sizeHint()); - viewer->toggleOrientation(); + viewer->rotateOrientation(); qApp->processEvents(); QCOMPARE(rootItem->width(), 300.0); @@ -92,7 +92,7 @@ void tst_QDeclarativeViewer::orientation() QCOMPARE(viewer->size(), QSize(300, 200+viewer->menuBar()->height())); QCOMPARE(viewer->size(), viewer->sizeHint()); - viewer->toggleOrientation(); + viewer->rotateOrientation(); qApp->processEvents(); QCOMPARE(rootItem->width(), 200.0); diff --git a/tools/qml/deviceorientation.cpp b/tools/qml/deviceorientation.cpp index e7c70d5..a13b912 100644 --- a/tools/qml/deviceorientation.cpp +++ b/tools/qml/deviceorientation.cpp @@ -47,7 +47,7 @@ class DefaultDeviceOrientation : public DeviceOrientation { Q_OBJECT public: - DefaultDeviceOrientation() : DeviceOrientation(), m_orientation(DeviceOrientation::Portrait) {} + DefaultDeviceOrientation() : DeviceOrientation(), m_orientation(DeviceOrientation::TopUp) {} Orientation orientation() const { return m_orientation; diff --git a/tools/qml/deviceorientation.h b/tools/qml/deviceorientation.h index d209005..fe73868 100644 --- a/tools/qml/deviceorientation.h +++ b/tools/qml/deviceorientation.h @@ -52,7 +52,14 @@ class DeviceOrientation : public QObject Q_OBJECT Q_ENUMS(Orientation) public: - enum Orientation { UnknownOrientation, Portrait, Landscape }; + enum Orientation { + UnknownOrientation, + TopUp, + TopDown, + LeftUp, + RightUp + }; + virtual Orientation orientation() const = 0; virtual void setOrientation(Orientation) = 0; diff --git a/tools/qml/deviceorientation_maemo.cpp b/tools/qml/deviceorientation_maemo.cpp index 9f12f3d..501ff79 100644 --- a/tools/qml/deviceorientation_maemo.cpp +++ b/tools/qml/deviceorientation_maemo.cpp @@ -48,11 +48,11 @@ class MaemoOrientation : public DeviceOrientation Q_OBJECT public: MaemoOrientation() - : DeviceOrientation(),m_current(Portrait), m_lastSeen(Portrait), m_lastSeenCount(0) + : DeviceOrientation(),m_current(TopUp), m_lastSeen(TopUp), m_lastSeenCount(0) { m_current = get(); if (m_current == UnknownOrientation) - m_current = Portrait; + m_current = TopUp; startTimer(100); } @@ -101,9 +101,13 @@ private: if (abs(az) > 850) { o = UnknownOrientation; } else if (ax < -750) { - o = Portrait; + o = LeftUp; + } else if (ax > 750) { + o = RightUp; } else if (ay < -750) { - o = Landscape; + o = TopUp; + } else if (ay > 750) { + o = TopDown; } return o; diff --git a/tools/qml/qmlruntime.cpp b/tools/qml/qmlruntime.cpp index fe323c1..f681303 100644 --- a/tools/qml/qmlruntime.cpp +++ b/tools/qml/qmlruntime.cpp @@ -367,7 +367,7 @@ QDeclarativeViewer::QDeclarativeViewer(QWidget *parent, Qt::WindowFlags flags) #endif , loggerWindow(new LoggerWidget()) , frame_stream(0), mb(0) - , portraitOrientation(0), landscapeOrientation(0) + , orientation(0) , showWarningsWindow(0) , m_scriptOptions(0) , tester(0) @@ -418,7 +418,7 @@ QDeclarativeViewer::QDeclarativeViewer(QWidget *parent, Qt::WindowFlags flags) if (!(flags & Qt::FramelessWindowHint)) { createMenu(menuBar(),0); - setPortrait(); + changeOrientation(orientation->actions().value(0)); } #if !defined(Q_OS_SYMBIAN) @@ -571,26 +571,25 @@ void QDeclarativeViewer::createMenu(QMenuBar *menu, QMenu *flatmenu) QMenu *propertiesMenu = settingsMenu->addMenu(tr("Properties")); - QActionGroup *orientation = new QActionGroup(parent); + orientation = new QActionGroup(parent); - QAction *toggleOrientation = new QAction(tr("&Toggle Orientation"), parent); - toggleOrientation->setCheckable(true); - toggleOrientation->setShortcut(QKeySequence("Ctrl+T")); - settingsMenu->addAction(toggleOrientation); - connect(toggleOrientation, SIGNAL(triggered()), this, SLOT(toggleOrientation())); + QAction *rotateOrientation = new QAction(tr("Rotate orientation"), parent); + rotateOrientation->setShortcut(QKeySequence("Ctrl+T")); + settingsMenu->addAction(rotateOrientation); + connect(rotateOrientation, SIGNAL(triggered()), this, SLOT(rotateOrientation())); orientation->setExclusive(true); - portraitOrientation = new QAction(tr("orientation: Portrait"), parent); - portraitOrientation->setCheckable(true); - connect(portraitOrientation, SIGNAL(triggered()), this, SLOT(setPortrait())); - orientation->addAction(portraitOrientation); - propertiesMenu->addAction(portraitOrientation); - - landscapeOrientation = new QAction(tr("orientation: Landscape"), parent); - landscapeOrientation->setCheckable(true); - connect(landscapeOrientation, SIGNAL(triggered()), this, SLOT(setLandscape())); - orientation->addAction(landscapeOrientation); - propertiesMenu->addAction(landscapeOrientation); + connect(orientation, SIGNAL(triggered(QAction*)), this, SLOT(changeOrientation(QAction*))); + + orientation->addAction(tr("orientation: TopUp")); + orientation->addAction(tr("orientation: LeftUp")); + orientation->addAction(tr("orientation: TopDown")); + orientation->addAction(tr("orientation: RightUp")); + QList actions = orientation->actions(); + for (int i=0; iaddAction(actions[i]); + actions[i]->setCheckable(true); + } if (flatmenu) flatmenu->addSeparator(); @@ -624,21 +623,16 @@ void QDeclarativeViewer::proxySettingsChanged() reload (); } -void QDeclarativeViewer::setPortrait() -{ - DeviceOrientation::instance()->setOrientation(DeviceOrientation::Portrait); - portraitOrientation->setChecked(true); -} - -void QDeclarativeViewer::setLandscape() +void QDeclarativeViewer::rotateOrientation() { - DeviceOrientation::instance()->setOrientation(DeviceOrientation::Landscape); - landscapeOrientation->setChecked(true); -} + QAction *current = orientation->checkedAction(); + QList actions = orientation->actions(); + int index = actions.indexOf(current); + if (index < 0) + return; -void QDeclarativeViewer::toggleOrientation() -{ - DeviceOrientation::instance()->setOrientation(DeviceOrientation::instance()->orientation()==DeviceOrientation::Portrait?DeviceOrientation::Landscape:DeviceOrientation::Portrait); + QAction *newOrientation = actions[(index + 1) % actions.count()]; + changeOrientation(newOrientation); } void QDeclarativeViewer::toggleFullScreen() @@ -971,12 +965,7 @@ void QDeclarativeViewer::keyPressEvent(QKeyEvent *event) } else if (event->key() == Qt::Key_F9 || (event->key() == Qt::Key_9 && devicemode)) { toggleRecording(); } else if (event->key() == Qt::Key_F10) { - if (portraitOrientation) { - if (portraitOrientation->isChecked()) - setLandscape(); - else - setPortrait(); - } + rotateOrientation(); } QWidget::keyPressEvent(event); @@ -1181,6 +1170,23 @@ void QDeclarativeViewer::recordFrame() } } +void QDeclarativeViewer::changeOrientation(QAction *action) +{ + if (!action) + return; + action->setChecked(true); + + QString o = action->text().split(QLatin1Char(':')).value(1).trimmed(); + if (o == QLatin1String("TopUp")) + DeviceOrientation::instance()->setOrientation(DeviceOrientation::TopUp); + else if (o == QLatin1String("TopDown")) + DeviceOrientation::instance()->setOrientation(DeviceOrientation::TopDown); + else if (o == QLatin1String("LeftUp")) + DeviceOrientation::instance()->setOrientation(DeviceOrientation::LeftUp); + else if (o == QLatin1String("RightUp")) + DeviceOrientation::instance()->setOrientation(DeviceOrientation::RightUp); +} + void QDeclarativeViewer::orientationChanged() { if (canvas->resizeMode() == QDeclarativeView::SizeRootObjectToView) { diff --git a/tools/qml/qmlruntime.h b/tools/qml/qmlruntime.h index 5086e02..27bd217 100644 --- a/tools/qml/qmlruntime.h +++ b/tools/qml/qmlruntime.h @@ -124,7 +124,7 @@ public slots: void ffmpegFinished(int code); void showProxySettings (); void proxySettingsChanged (); - void toggleOrientation(); + void rotateOrientation(); void statusChanged(); void setSlowMode(bool); void launch(const QString &); @@ -140,9 +140,8 @@ private slots: void recordFrame(); void chooseRecordingOptions(); void pickRecordingFile(); - void setPortrait(); - void setLandscape(); void toggleFullScreen(); + void changeOrientation(QAction*); void orientationChanged(); void showWarnings(bool show); @@ -183,9 +182,7 @@ private: bool ffmpegAvailable; bool convertAvailable; - QAction *portraitOrientation; - QAction *landscapeOrientation; - + QActionGroup *orientation; QAction *showWarningsWindow; QString m_script; -- cgit v0.12 From f62926954a742990a33a54ad598de1af0989d92b Mon Sep 17 00:00:00 2001 From: Tasuku Suzuki Date: Wed, 2 Jun 2010 09:35:14 +0200 Subject: Add a new qconfig feature GESTURES Merge-request: 535 Reviewed-by: Andreas Aardal Hanssen --- src/corelib/global/qconfig-medium.h | 3 +++ src/corelib/global/qconfig-minimal.h | 3 +++ src/corelib/global/qconfig-small.h | 3 +++ src/corelib/global/qfeatures.h | 3 +++ src/corelib/global/qfeatures.txt | 6 ++++++ src/corelib/global/qnamespace.h | 4 ++++ src/corelib/kernel/qcoreevent.h | 8 ++++++-- src/corelib/kernel/qeventdispatcher_win.cpp | 4 ++++ src/gui/graphicsview/qgraphicsitem.cpp | 5 +++++ src/gui/graphicsview/qgraphicsitem.h | 4 ++++ src/gui/graphicsview/qgraphicsitem_p.h | 2 ++ src/gui/graphicsview/qgraphicsscene.cpp | 13 +++++++++++++ src/gui/graphicsview/qgraphicsscene.h | 2 ++ src/gui/graphicsview/qgraphicsscene_p.h | 2 ++ src/gui/graphicsview/qgraphicsview.cpp | 4 ++++ src/gui/kernel/qapplication.cpp | 9 ++++++++- src/gui/kernel/qapplication.h | 2 ++ src/gui/kernel/qapplication_p.h | 9 +++++++++ src/gui/kernel/qapplication_win.cpp | 15 ++++++++++++++- src/gui/kernel/qcocoaview_mac.mm | 10 ++++++++++ src/gui/kernel/qevent.cpp | 5 +++++ src/gui/kernel/qevent.h | 4 ++++ src/gui/kernel/qevent_p.h | 3 ++- src/gui/kernel/qeventdispatcher_mac.mm | 2 ++ src/gui/kernel/qgesture.cpp | 4 ++++ src/gui/kernel/qgesture.h | 4 ++++ src/gui/kernel/qgesture_p.h | 4 ++++ src/gui/kernel/qgesturemanager.cpp | 4 ++++ src/gui/kernel/qgesturemanager_p.h | 4 ++++ src/gui/kernel/qgesturerecognizer.cpp | 4 ++++ src/gui/kernel/qgesturerecognizer.h | 4 ++++ src/gui/kernel/qmacgesturerecognizer_mac.mm | 4 ++++ src/gui/kernel/qmacgesturerecognizer_mac_p.h | 4 ++++ src/gui/kernel/qstandardgestures.cpp | 4 ++++ src/gui/kernel/qstandardgestures_p.h | 4 ++++ src/gui/kernel/qwidget.cpp | 9 ++++++++- src/gui/kernel/qwidget.h | 4 ++++ src/gui/kernel/qwidget_mac.mm | 4 ++++ src/gui/kernel/qwidget_p.h | 5 ++++- src/gui/kernel/qwidget_win.cpp | 2 +- src/gui/kernel/qwinnativepangesturerecognizer_win.cpp | 4 ++++ src/gui/kernel/qwinnativepangesturerecognizer_win_p.h | 5 +++++ src/gui/statemachine/qguistatemachine.cpp | 2 ++ src/gui/widgets/qabstractscrollarea.cpp | 8 ++++++++ src/gui/widgets/qplaintextedit.cpp | 2 ++ src/imports/gestures/plugin.cpp | 3 ++- src/imports/gestures/qdeclarativegesturearea.cpp | 4 ++++ src/imports/gestures/qdeclarativegesturearea_p.h | 4 ++++ 48 files changed, 216 insertions(+), 9 deletions(-) diff --git a/src/corelib/global/qconfig-medium.h b/src/corelib/global/qconfig-medium.h index ccd6759..6cb6c2c 100644 --- a/src/corelib/global/qconfig-medium.h +++ b/src/corelib/global/qconfig-medium.h @@ -213,6 +213,9 @@ #ifndef QT_NO_UNDOVIEW # define QT_NO_UNDOVIEW #endif +#ifndef QT_NO_GESTURES +# define QT_NO_GESTURES +#endif /* Widgets */ #ifndef QT_NO_LCDNUMBER diff --git a/src/corelib/global/qconfig-minimal.h b/src/corelib/global/qconfig-minimal.h index 99b16e8..c285e99 100644 --- a/src/corelib/global/qconfig-minimal.h +++ b/src/corelib/global/qconfig-minimal.h @@ -447,6 +447,9 @@ #ifndef QT_NO_UNDOVIEW # define QT_NO_UNDOVIEW #endif +#ifndef QT_NO_GESTURES +# define QT_NO_GESTURES +#endif /* Widgets */ #ifndef QT_NO_GROUPBOX diff --git a/src/corelib/global/qconfig-small.h b/src/corelib/global/qconfig-small.h index 1716b8d..dd74dcf 100644 --- a/src/corelib/global/qconfig-small.h +++ b/src/corelib/global/qconfig-small.h @@ -250,6 +250,9 @@ #ifndef QT_NO_SYSTEMTRAYICON # define QT_NO_SYSTEMTRAYICON #endif +#ifndef QT_NO_GESTURES +# define QT_NO_GESTURES +#endif /* Widgets */ #ifndef QT_NO_LCDNUMBER diff --git a/src/corelib/global/qfeatures.h b/src/corelib/global/qfeatures.h index a333153..b606843 100644 --- a/src/corelib/global/qfeatures.h +++ b/src/corelib/global/qfeatures.h @@ -85,6 +85,9 @@ // Freetype Font Engine //#define QT_NO_FREETYPE +// Gesture +//#define QT_NO_GESTURES + // QGroupBox //#define QT_NO_GROUPBOX diff --git a/src/corelib/global/qfeatures.txt b/src/corelib/global/qfeatures.txt index 3e6af24..4d938a9 100644 --- a/src/corelib/global/qfeatures.txt +++ b/src/corelib/global/qfeatures.txt @@ -1185,6 +1185,12 @@ Requires: PROPERTIES Name: State machine SeeAlso: ??? +Feature: GESTURES +Description: Provides a framework for gestures. +Section: Utilities +Requires: +Name: Gesture +SeeAlso: ??? # SVG diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h index 08674d2..8504e1e 100644 --- a/src/corelib/global/qnamespace.h +++ b/src/corelib/global/qnamespace.h @@ -1719,6 +1719,7 @@ public: }; Q_DECLARE_FLAGS(TouchPointStates, TouchPointState) +#ifndef QT_NO_GESTURES enum GestureState { NoGesture, @@ -1748,6 +1749,7 @@ public: IgnoredGesturesPropagateToParent = 0x04 }; Q_DECLARE_FLAGS(GestureFlags, GestureFlag) +#endif // QT_NO_GESTURES enum NavigationMode { @@ -1777,7 +1779,9 @@ Q_DECLARE_OPERATORS_FOR_FLAGS(Qt::MatchFlags) Q_DECLARE_OPERATORS_FOR_FLAGS(Qt::TextInteractionFlags) Q_DECLARE_OPERATORS_FOR_FLAGS(Qt::InputMethodHints) Q_DECLARE_OPERATORS_FOR_FLAGS(Qt::TouchPointStates) +#ifndef QT_NO_GESTURES Q_DECLARE_OPERATORS_FOR_FLAGS(Qt::GestureFlags) +#endif typedef bool (*qInternalCallback)(void **); diff --git a/src/corelib/kernel/qcoreevent.h b/src/corelib/kernel/qcoreevent.h index a20d171..9d3513a 100644 --- a/src/corelib/kernel/qcoreevent.h +++ b/src/corelib/kernel/qcoreevent.h @@ -275,17 +275,19 @@ public: TouchUpdate = 195, TouchEnd = 196, +#ifndef QT_NO_GESTURES NativeGesture = 197, // Internal for platform gesture support - +#endif RequestSoftwareInputPanel = 199, CloseSoftwareInputPanel = 200, UpdateSoftKeys = 201, // Internal for compressing soft key updates WinIdChange = 203, +#ifndef QT_NO_GESTURES Gesture = 198, GestureOverride = 202, - +#endif // 512 reserved for Qt Jambi's MetaCall event // 513 reserved for Qt Jambi's DeleteOnMainThread event @@ -327,7 +329,9 @@ private: friend class QGraphicsView; friend class QGraphicsViewPrivate; friend class QGraphicsScenePrivate; +#ifndef QT_NO_GESTURES friend class QGestureManager; +#endif }; class Q_CORE_EXPORT QTimerEvent : public QEvent diff --git a/src/corelib/kernel/qeventdispatcher_win.cpp b/src/corelib/kernel/qeventdispatcher_win.cpp index 135ec303..cede810 100644 --- a/src/corelib/kernel/qeventdispatcher_win.cpp +++ b/src/corelib/kernel/qeventdispatcher_win.cpp @@ -71,10 +71,12 @@ extern uint qGlobalPostedEventsCount(); #ifndef WM_TOUCH # define WM_TOUCH 0x0240 #endif +#ifndef QT_NO_GESTURES #ifndef WM_GESTURE # define WM_GESTURE 0x0119 # define WM_GESTURENOTIFY 0x011A #endif +#endif // QT_NO_GESTURES enum { WM_QT_SOCKETNOTIFIER = WM_USER, @@ -738,8 +740,10 @@ bool QEventDispatcherWin32::processEvents(QEventLoop::ProcessEventsFlags flags) || msg.message == WM_MOUSEWHEEL || msg.message == WM_MOUSEHWHEEL || msg.message == WM_TOUCH +#ifndef QT_NO_GESTURES || msg.message == WM_GESTURE || msg.message == WM_GESTURENOTIFY +#endif || msg.message == WM_CLOSE)) { // queue user input events for later processing haveMessage = false; diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index b3e1701..8042c46 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -1427,12 +1427,14 @@ QGraphicsItem::~QGraphicsItem() d_ptr->inDestructor = 1; d_ptr->removeExtraItemCache(); +#ifndef QT_NO_GESTURES if (d_ptr->isObject && !d_ptr->gestureContext.isEmpty()) { QGraphicsObject *o = static_cast(this); QGestureManager *manager = QGestureManager::instance(); foreach (Qt::GestureType type, d_ptr->gestureContext.keys()) manager->cleanupCachedGestures(o, type); } +#endif clearFocus(); @@ -7571,6 +7573,7 @@ QGraphicsObject::QGraphicsObject(QGraphicsItemPrivate &dd, QGraphicsItem *parent QGraphicsItem::d_ptr->isObject = true; } +#ifndef QT_NO_GESTURES /*! Subscribes the graphics object to the given \a gesture with specific \a flags. @@ -7594,6 +7597,8 @@ void QGraphicsObject::ungrabGesture(Qt::GestureType gesture) if (QGraphicsItem::d_ptr->gestureContext.remove(gesture) && QGraphicsItem::d_ptr->scene) QGraphicsItem::d_ptr->scene->d_func()->ungrabGesture(this, gesture); } +#endif // QT_NO_GESTURES + /*! Updates the item's micro focus. This is slot for convenience. diff --git a/src/gui/graphicsview/qgraphicsitem.h b/src/gui/graphicsview/qgraphicsitem.h index 9891af3..d7d5332 100644 --- a/src/gui/graphicsview/qgraphicsitem.h +++ b/src/gui/graphicsview/qgraphicsitem.h @@ -485,7 +485,9 @@ private: friend class QGraphicsSceneBspTreeIndexPrivate; friend class QGraphicsItemEffectSourcePrivate; friend class QGraphicsTransformPrivate; +#ifndef QT_NO_GESTURES friend class QGestureManager; +#endif friend class ::tst_QGraphicsItem; friend bool qt_closestLeaf(const QGraphicsItem *, const QGraphicsItem *); friend bool qt_closestItemFirst(const QGraphicsItem *, const QGraphicsItem *); @@ -572,8 +574,10 @@ public: using QObject::children; #endif +#ifndef QT_NO_GESTURES void grabGesture(Qt::GestureType type, Qt::GestureFlags flags = Qt::GestureFlags()); void ungrabGesture(Qt::GestureType type); +#endif protected Q_SLOTS: void updateMicroFocus(); diff --git a/src/gui/graphicsview/qgraphicsitem_p.h b/src/gui/graphicsview/qgraphicsitem_p.h index e812f29..bde6e7d 100644 --- a/src/gui/graphicsview/qgraphicsitem_p.h +++ b/src/gui/graphicsview/qgraphicsitem_p.h @@ -525,7 +525,9 @@ public: QGraphicsItem *focusScopeItem; Qt::InputMethodHints imHints; QGraphicsItem::PanelModality panelModality; +#ifndef QT_NO_GESTURES QMap gestureContext; +#endif // Packed 32 bits quint32 acceptedMouseButtons : 5; diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp index 22c3f92..7b0722e 100644 --- a/src/gui/graphicsview/qgraphicsscene.cpp +++ b/src/gui/graphicsview/qgraphicsscene.cpp @@ -699,6 +699,7 @@ void QGraphicsScenePrivate::removeItemHelper(QGraphicsItem *item) if (!selectionChanging && selectedItems.size() != oldSelectedItemsSize) emit q->selectionChanged(); +#ifndef QT_NO_GESTURES QHash::iterator it; for (it = gestureTargets.begin(); it != gestureTargets.end();) { if (it.value() == item) @@ -706,6 +707,7 @@ void QGraphicsScenePrivate::removeItemHelper(QGraphicsItem *item) else ++it; } + QGraphicsObject *dummy = static_cast(item); cachedTargetItems.removeOne(dummy); cachedItemGestures.remove(dummy); @@ -713,6 +715,7 @@ void QGraphicsScenePrivate::removeItemHelper(QGraphicsItem *item) foreach (Qt::GestureType gesture, item->d_ptr->gestureContext.keys()) ungrabGesture(item, gesture); +#endif // QT_NO_GESTURES } /*! @@ -1180,11 +1183,13 @@ bool QGraphicsScenePrivate::filterEvent(QGraphicsItem *item, QEvent *event) bool QGraphicsScenePrivate::sendEvent(QGraphicsItem *item, QEvent *event) { if (QGraphicsObject *object = item->toGraphicsObject()) { +#ifndef QT_NO_GESTURES QGestureManager *gestureManager = QApplicationPrivate::instance()->gestureManager; if (gestureManager) { if (gestureManager->filterEvent(object, event)) return true; } +#endif // QT_NO_GESTURES } if (filterEvent(item, event)) @@ -2602,8 +2607,10 @@ void QGraphicsScene::addItem(QGraphicsItem *item) d->enableTouchEventsOnViews(); } +#ifndef QT_NO_GESTURES foreach (Qt::GestureType gesture, item->d_ptr->gestureContext.keys()) d->grabGesture(item, gesture); +#endif // Update selection lists if (item->isSelected()) @@ -3525,10 +3532,12 @@ bool QGraphicsScene::event(QEvent *event) case QEvent::TouchEnd: d->touchEventHandler(static_cast(event)); break; +#ifndef QT_NO_GESTURES case QEvent::Gesture: case QEvent::GestureOverride: d->gestureEventHandler(static_cast(event)); break; +#endif // QT_NO_GESTURES default: return QObject::event(event); } @@ -5637,8 +5646,10 @@ bool QGraphicsScene::sendEvent(QGraphicsItem *item, QEvent *event) void QGraphicsScenePrivate::addView(QGraphicsView *view) { views << view; +#ifndef QT_NO_GESTURES foreach (Qt::GestureType gesture, grabbedGestures.keys()) view->viewport()->grabGesture(gesture); +#endif } void QGraphicsScenePrivate::removeView(QGraphicsView *view) @@ -5968,6 +5979,7 @@ void QGraphicsScenePrivate::leaveModal(QGraphicsItem *panel) dispatchHoverEvent(&hoverEvent); } +#ifndef QT_NO_GESTURES void QGraphicsScenePrivate::gestureTargetsAtHotSpots(const QSet &gestures, Qt::GestureFlag flag, QHash > *targets, @@ -6356,6 +6368,7 @@ void QGraphicsScenePrivate::ungrabGesture(QGraphicsItem *item, Qt::GestureType g view->viewport()->ungrabGesture(gesture); } } +#endif // QT_NO_GESTURES QT_END_NAMESPACE diff --git a/src/gui/graphicsview/qgraphicsscene.h b/src/gui/graphicsview/qgraphicsscene.h index c34a303..f8615f4 100644 --- a/src/gui/graphicsview/qgraphicsscene.h +++ b/src/gui/graphicsview/qgraphicsscene.h @@ -313,7 +313,9 @@ private: friend class QGraphicsSceneBspTreeIndex; friend class QGraphicsSceneBspTreeIndexPrivate; friend class QGraphicsItemEffectSourcePrivate; +#ifndef QT_NO_GESTURES friend class QGesture; +#endif }; Q_DECLARE_OPERATORS_FOR_FLAGS(QGraphicsScene::SceneLayers) diff --git a/src/gui/graphicsview/qgraphicsscene_p.h b/src/gui/graphicsview/qgraphicsscene_p.h index 8ad2a0a..f28dfe9 100644 --- a/src/gui/graphicsview/qgraphicsscene_p.h +++ b/src/gui/graphicsview/qgraphicsscene_p.h @@ -299,6 +299,7 @@ public: void enableTouchEventsOnViews(); QList cachedTargetItems; +#ifndef QT_NO_GESTURES QHash > cachedItemGestures; QHash > cachedAlreadyDeliveredGestures; QHash gestureTargets; @@ -313,6 +314,7 @@ public: void cancelGesturesForChildren(QGesture *original); void grabGesture(QGraphicsItem *, Qt::GestureType gesture); void ungrabGesture(QGraphicsItem *, Qt::GestureType gesture); +#endif // QT_NO_GESTURES void updateInputMethodSensitivityInViews(); diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp index a83b528..0674610 100644 --- a/src/gui/graphicsview/qgraphicsview.cpp +++ b/src/gui/graphicsview/qgraphicsview.cpp @@ -2688,10 +2688,12 @@ void QGraphicsView::setupViewport(QWidget *widget) if (d->scene && !d->scene->d_func()->allItemsIgnoreTouchEvents) widget->setAttribute(Qt::WA_AcceptTouchEvents); +#ifndef QT_NO_GESTURES if (d->scene) { foreach (Qt::GestureType gesture, d->scene->d_func()->grabbedGestures.keys()) widget->grabGesture(gesture); } +#endif widget->setAcceptDrops(acceptDrops()); } @@ -2838,6 +2840,7 @@ bool QGraphicsView::viewportEvent(QEvent *event) return true; } +#ifndef QT_NO_GESTURES case QEvent::Gesture: case QEvent::GestureOverride: { @@ -2851,6 +2854,7 @@ bool QGraphicsView::viewportEvent(QEvent *event) } return true; } +#endif // QT_NO_GESTURES default: break; } diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index 09a3bfe..c9a3e8b 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -187,8 +187,10 @@ QApplicationPrivate::QApplicationPrivate(int &argc, char **argv, QApplication::T directPainters = 0; #endif +#ifndef QT_NO_GESTURES gestureManager = 0; gestureWidget = 0; +#endif // QT_NO_GESTURES #if defined(Q_WS_X11) || defined(Q_WS_WIN) move_cursor = 0; @@ -3718,6 +3720,7 @@ bool QApplication::notify(QObject *receiver, QEvent *e) #endif // !QT_NO_WHEELEVENT || !QT_NO_TABLETEVENT } +#ifndef QT_NO_GESTURES // walk through parents and check for gestures if (d->gestureManager) { switch (e->type()) { @@ -3762,7 +3765,7 @@ bool QApplication::notify(QObject *receiver, QEvent *e) } } } - +#endif // QT_NO_GESTURES // User input and window activation makes tooltips sleep switch (e->type()) { @@ -4267,6 +4270,7 @@ bool QApplication::notify(QObject *receiver, QEvent *e) res = d->notify_helper(receiver, e); break; +#ifndef QT_NO_GESTURES case QEvent::NativeGesture: { // only propagate the first gesture event (after the GID_BEGIN) @@ -4345,6 +4349,7 @@ bool QApplication::notify(QObject *receiver, QEvent *e) } break; } +#endif // QT_NO_GESTURES default: res = d->notify_helper(receiver, e); break; @@ -5777,6 +5782,7 @@ Q_GUI_EXPORT void qt_translateRawTouchEvent(QWidget *window, QApplicationPrivate::translateRawTouchEvent(window, deviceType, touchPoints); } +#ifndef QT_NO_GESTURES QGestureManager* QGestureManager::instance() { QApplicationPrivate *qAppPriv = QApplicationPrivate::instance(); @@ -5784,6 +5790,7 @@ QGestureManager* QGestureManager::instance() qAppPriv->gestureManager = new QGestureManager(qApp); return qAppPriv->gestureManager; } +#endif // QT_NO_GESTURES // These pixmaps approximate the images in the Windows User Interface Guidelines. diff --git a/src/gui/kernel/qapplication.h b/src/gui/kernel/qapplication.h index c21b982..cb1d063 100644 --- a/src/gui/kernel/qapplication.h +++ b/src/gui/kernel/qapplication.h @@ -399,7 +399,9 @@ private: friend class QDirectPainter; friend class QDirectPainterPrivate; #endif +#ifndef QT_NO_GESTURES friend class QGestureManager; +#endif #if defined(Q_WS_MAC) || defined(Q_WS_X11) Q_PRIVATE_SLOT(d_func(), void _q_alertTimeOut()) diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index e83cd71..3a3f816 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -84,7 +84,9 @@ class QInputContext; class QObject; class QWidget; class QSocketNotifier; +#ifndef QT_NO_GESTURES class QGestureManager; +#endif extern bool qt_is_gui_used; #ifndef QT_NO_CLIPBOARD @@ -200,6 +202,7 @@ typedef BOOL (WINAPI *PtrRegisterTouchWindow)(HWND, ULONG); typedef BOOL (WINAPI *PtrGetTouchInputInfo)(HANDLE, UINT, PVOID, int); typedef BOOL (WINAPI *PtrCloseTouchInputHandle)(HANDLE); +#ifndef QT_NO_GESTURES typedef BOOL (WINAPI *PtrGetGestureInfo)(HANDLE, PVOID); typedef BOOL (WINAPI *PtrGetGestureExtraArgs)(HANDLE, UINT, PBYTE); typedef BOOL (WINAPI *PtrCloseGestureInfoHandle)(HANDLE); @@ -263,6 +266,8 @@ typedef struct tagGESTURECONFIG #define GID_ROLLOVER 0xf003 #endif +#endif // QT_NO_GESTURES + #endif // Q_WS_WIN class QScopedLoopLevelCounter @@ -519,6 +524,7 @@ public: void sendSyntheticEnterLeave(QWidget *widget); #endif +#ifndef QT_NO_GESTURES QGestureManager *gestureManager; QWidget *gestureWidget; #if defined(Q_WS_X11) || defined(Q_WS_WIN) @@ -526,6 +532,7 @@ public: QPixmap *copy_cursor; QPixmap *link_cursor; #endif +#endif #if defined(Q_WS_WIN) QPixmap *ignore_cursor; #endif @@ -554,6 +561,7 @@ public: QHash touchInputIDToTouchPointID; bool translateTouchEvent(const MSG &msg); +#ifndef QT_NO_GESTURES PtrGetGestureInfo GetGestureInfo; PtrGetGestureExtraArgs GetGestureExtraArgs; PtrCloseGestureInfoHandle CloseGestureInfoHandle; @@ -562,6 +570,7 @@ public: PtrBeginPanningFeedback BeginPanningFeedback; PtrUpdatePanningFeedback UpdatePanningFeedback; PtrEndPanningFeedback EndPanningFeedback; +#endif // QT_NO_GESTURES #endif #ifdef QT_RX71_MULTITOUCH diff --git a/src/gui/kernel/qapplication_win.cpp b/src/gui/kernel/qapplication_win.cpp index 60fc5e1..c52fbdf 100644 --- a/src/gui/kernel/qapplication_win.cpp +++ b/src/gui/kernel/qapplication_win.cpp @@ -52,9 +52,11 @@ extern void qt_wince_hide_taskbar(HWND hwnd); //defined in qguifunctions_wince.c #include #include #ifdef QT_WINCE_GESTURES +#ifndef QT_NO_GESTURES #include #endif #endif +#endif #include "qapplication.h" #include "qdesktopwidget.h" @@ -198,6 +200,7 @@ struct SHRGINFO { #define SPI_SETSIPINFO 224 #endif +#ifndef QT_NO_GESTURES typedef DWORD (API *AygRecognizeGesture)(SHRGINFO*); static AygRecognizeGesture ptrRecognizeGesture = 0; static bool aygResolved = false; @@ -211,6 +214,7 @@ static void resolveAygLibs() ptrRecognizeGesture = (AygRecognizeGesture) ayglib.resolve("SHRecognizeGesture"); } } +#endif // QT_NO_GESTURES #endif @@ -463,7 +467,9 @@ public: bool translateConfigEvent(const MSG &msg); bool translateCloseEvent(const MSG &msg); bool translateTabletEvent(const MSG &msg, PACKET *localPacketBuf, int numPackets); +#ifndef QT_NO_GESTURES bool translateGestureEvent(const MSG &msg, const GESTUREINFO &gi); +#endif void repolishStyle(QStyle &style); inline void showChildren(bool spontaneous) { d_func()->showChildren(spontaneous); } inline void hideChildren(bool spontaneous) { d_func()->hideChildren(spontaneous); } @@ -843,6 +849,7 @@ void qt_init(QApplicationPrivate *priv, int) ptrSetProcessDPIAware(); #endif +#ifndef QT_NO_GESTURES priv->GetGestureInfo = 0; priv->GetGestureExtraArgs = 0; priv->CloseGestureInfoHandle = 0; @@ -883,6 +890,7 @@ void qt_init(QApplicationPrivate *priv, int) (PtrEndPanningFeedback)QLibrary::resolve(QLatin1String("uxtheme"), "EndPanningFeedback"); #endif +#endif // QT_NO_GESTURES } /***************************************************************************** @@ -1667,12 +1675,14 @@ extern "C" LRESULT QT_WIN_CALLBACK QtWndProc(HWND hwnd, UINT message, WPARAM wPa shrg.ptDown.y = GET_Y_LPARAM(lParam); shrg.dwFlags = SHRG_RETURNCMD | SHRG_NOANIMATION; resolveAygLibs(); +#ifndef QT_NO_GESTURES if (ptrRecognizeGesture && (ptrRecognizeGesture(&shrg) == GN_CONTEXTMENU)) { if (QApplication::activePopupWidget()) QApplication::activePopupWidget()->close(); QContextMenuEvent e(QContextMenuEvent::Mouse, pos, globalPos); result = qt_sendSpontaneousEvent(alienWidget, &e); } +#endif // QT_NO_GESTURES } } } @@ -2556,6 +2566,7 @@ extern "C" LRESULT QT_WIN_CALLBACK QtWndProc(HWND hwnd, UINT message, WPARAM wPa } result = false; break; +#ifndef QT_NO_GESTURES #if !defined(Q_WS_WINCE) || defined(QT_WINCE_GESTURES) case WM_GESTURE: { GESTUREINFO gi; @@ -2590,6 +2601,7 @@ extern "C" LRESULT QT_WIN_CALLBACK QtWndProc(HWND hwnd, UINT message, WPARAM wPa break; } #endif // !defined(Q_WS_WINCE) || defined(QT_WINCE_GESTURES) +#endif // QT_NO_GESTURES #ifndef QT_NO_CURSOR case WM_SETCURSOR: { QCursor *ovr = QApplication::overrideCursor(); @@ -3825,6 +3837,7 @@ bool QETWidget::translateCloseEvent(const MSG &) return d_func()->close_helper(QWidgetPrivate::CloseWithSpontaneousEvent); } +#ifndef QT_NO_GESTURES bool QETWidget::translateGestureEvent(const MSG &, const GESTUREINFO &gi) { const QPoint widgetPos = QPoint(gi.ptsLocation.x, gi.ptsLocation.y); @@ -3863,7 +3876,7 @@ bool QETWidget::translateGestureEvent(const MSG &, const GESTUREINFO &gi) qt_sendSpontaneousEvent(widget, &event); return true; } - +#endif // QT_NO_GESTURES void QApplication::setCursorFlashTime(int msecs) { diff --git a/src/gui/kernel/qcocoaview_mac.mm b/src/gui/kernel/qcocoaview_mac.mm index 4953c48..eec9699 100644 --- a/src/gui/kernel/qcocoaview_mac.mm +++ b/src/gui/kernel/qcocoaview_mac.mm @@ -952,12 +952,14 @@ static int qCocoaViewCount = 0; if (!QApplicationPrivate::tryModalHelper(qwidget, 0)) return; +#ifndef QT_NO_GESTURES QNativeGestureEvent qNGEvent; qNGEvent.gestureType = QNativeGestureEvent::Zoom; NSPoint p = [[event window] convertBaseToScreen:[event locationInWindow]]; qNGEvent.position = flipPoint(p).toPoint(); qNGEvent.percentage = [event magnification]; qt_sendSpontaneousEvent(qwidget, &qNGEvent); +#endif // QT_NO_GESTURES } - (void)rotateWithEvent:(NSEvent *)event; @@ -965,12 +967,14 @@ static int qCocoaViewCount = 0; if (!QApplicationPrivate::tryModalHelper(qwidget, 0)) return; +#ifndef QT_NO_GESTURES QNativeGestureEvent qNGEvent; qNGEvent.gestureType = QNativeGestureEvent::Rotate; NSPoint p = [[event window] convertBaseToScreen:[event locationInWindow]]; qNGEvent.position = flipPoint(p).toPoint(); qNGEvent.percentage = -[event rotation]; qt_sendSpontaneousEvent(qwidget, &qNGEvent); +#endif // QT_NO_GESTURES } - (void)swipeWithEvent:(NSEvent *)event; @@ -978,6 +982,7 @@ static int qCocoaViewCount = 0; if (!QApplicationPrivate::tryModalHelper(qwidget, 0)) return; +#ifndef QT_NO_GESTURES QNativeGestureEvent qNGEvent; qNGEvent.gestureType = QNativeGestureEvent::Swipe; NSPoint p = [[event window] convertBaseToScreen:[event locationInWindow]]; @@ -991,6 +996,7 @@ static int qCocoaViewCount = 0; else if ([event deltaY] == -1) qNGEvent.angle = 270.0f; qt_sendSpontaneousEvent(qwidget, &qNGEvent); +#endif // QT_NO_GESTURES } - (void)beginGestureWithEvent:(NSEvent *)event; @@ -998,11 +1004,13 @@ static int qCocoaViewCount = 0; if (!QApplicationPrivate::tryModalHelper(qwidget, 0)) return; +#ifndef QT_NO_GESTURES QNativeGestureEvent qNGEvent; qNGEvent.gestureType = QNativeGestureEvent::GestureBegin; NSPoint p = [[event window] convertBaseToScreen:[event locationInWindow]]; qNGEvent.position = flipPoint(p).toPoint(); qt_sendSpontaneousEvent(qwidget, &qNGEvent); +#endif // QT_NO_GESTURES } - (void)endGestureWithEvent:(NSEvent *)event; @@ -1010,11 +1018,13 @@ static int qCocoaViewCount = 0; if (!QApplicationPrivate::tryModalHelper(qwidget, 0)) return; +#ifndef QT_NO_GESTURES QNativeGestureEvent qNGEvent; qNGEvent.gestureType = QNativeGestureEvent::GestureEnd; NSPoint p = [[event window] convertBaseToScreen:[event locationInWindow]]; qNGEvent.position = flipPoint(p).toPoint(); qt_sendSpontaneousEvent(qwidget, &qNGEvent); +#endif // QT_NO_GESTURES } - (void)frameDidChange:(NSNotification *)note diff --git a/src/gui/kernel/qevent.cpp b/src/gui/kernel/qevent.cpp index acf7184..92eed33 100644 --- a/src/gui/kernel/qevent.cpp +++ b/src/gui/kernel/qevent.cpp @@ -3421,9 +3421,11 @@ QDebug operator<<(QDebug dbg, const QEvent *e) { case QEvent::ChildRemoved: n = n ? n : "ChildRemoved"; dbg.nospace() << "QChildEvent(" << n << ", " << (static_cast(e))->child(); return dbg.space(); +#ifndef QT_NO_GESTURES case QEvent::Gesture: n = "Gesture"; break; +#endif default: dbg.nospace() << "QEvent(" << (const void *)e << ", type = " << e->type() << ')'; return dbg.space(); @@ -4254,6 +4256,7 @@ QTouchEvent::TouchPoint &QTouchEvent::TouchPoint::operator=(const QTouchEvent::T return *this; } +#ifndef QT_NO_GESTURES /*! \class QGestureEvent \since 4.6 @@ -4558,4 +4561,6 @@ const QGestureEventPrivate *QGestureEvent::d_func() const */ #endif +#endif // QT_NO_GESTURES + QT_END_NAMESPACE diff --git a/src/gui/kernel/qevent.h b/src/gui/kernel/qevent.h index 90242fe..9c70c02 100644 --- a/src/gui/kernel/qevent.h +++ b/src/gui/kernel/qevent.h @@ -62,7 +62,9 @@ QT_BEGIN_NAMESPACE QT_MODULE(Gui) class QAction; +#ifndef QT_NO_GESTURES class QGesture; +#endif class Q_GUI_EXPORT QInputEvent : public QEvent { @@ -824,6 +826,7 @@ protected: friend class QApplicationPrivate; }; +#ifndef QT_NO_GESTURES class QGesture; class QGestureEventPrivate; class Q_GUI_EXPORT QGestureEvent : public QEvent @@ -875,6 +878,7 @@ private: friend class QApplication; friend class QGestureManager; }; +#endif // QT_NO_GESTURES QT_END_NAMESPACE diff --git a/src/gui/kernel/qevent_p.h b/src/gui/kernel/qevent_p.h index 5c94a23..e323aa9 100644 --- a/src/gui/kernel/qevent_p.h +++ b/src/gui/kernel/qevent_p.h @@ -120,6 +120,7 @@ public: qreal pressure; }; +#ifndef QT_NO_GESTURES class QNativeGestureEvent : public QEvent { public: @@ -164,7 +165,7 @@ public: QMap accepted; QMap targetWidgets; }; - +#endif // QT_NO_GESTURES class QFileOpenEventPrivate { diff --git a/src/gui/kernel/qeventdispatcher_mac.mm b/src/gui/kernel/qeventdispatcher_mac.mm index 0d93b9f..e26fbde 100644 --- a/src/gui/kernel/qeventdispatcher_mac.mm +++ b/src/gui/kernel/qeventdispatcher_mac.mm @@ -492,6 +492,7 @@ static bool IsMouseOrKeyEvent( NSEvent* event ) case NSOtherMouseDown: case NSOtherMouseUp: case NSOtherMouseDragged: +#ifndef QT_NO_GESTURES #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 case NSEventTypeGesture: // touch events case NSEventTypeMagnify: @@ -500,6 +501,7 @@ static bool IsMouseOrKeyEvent( NSEvent* event ) case NSEventTypeBeginGesture: case NSEventTypeEndGesture: #endif +#endif // QT_NO_GESTURES result = true; break; diff --git a/src/gui/kernel/qgesture.cpp b/src/gui/kernel/qgesture.cpp index 49bdea7..f5688f4 100644 --- a/src/gui/kernel/qgesture.cpp +++ b/src/gui/kernel/qgesture.cpp @@ -42,6 +42,8 @@ #include "qgesture.h" #include "private/qgesture_p.h" +#ifndef QT_NO_GESTURES + QT_BEGIN_NAMESPACE /*! @@ -725,3 +727,5 @@ void QTapAndHoldGesture::setPosition(const QPointF &value) } QT_END_NAMESPACE + +#endif // QT_NO_GESTURES diff --git a/src/gui/kernel/qgesture.h b/src/gui/kernel/qgesture.h index c9bdce6..8c10895 100644 --- a/src/gui/kernel/qgesture.h +++ b/src/gui/kernel/qgesture.h @@ -49,6 +49,8 @@ #include #include +#ifndef QT_NO_GESTURES + QT_BEGIN_HEADER Q_DECLARE_METATYPE(Qt::GestureState) @@ -258,4 +260,6 @@ QT_END_NAMESPACE Q_DECLARE_METATYPE(QGesture::GestureCancelPolicy) QT_END_HEADER +#endif // QT_NO_GESTURES + #endif // QGESTURE_H diff --git a/src/gui/kernel/qgesture_p.h b/src/gui/kernel/qgesture_p.h index bf60f97..f5474c1 100644 --- a/src/gui/kernel/qgesture_p.h +++ b/src/gui/kernel/qgesture_p.h @@ -59,6 +59,8 @@ #include "qelapsedtimer.h" #include "private/qobject_p.h" +#ifndef QT_NO_GESTURES + QT_BEGIN_NAMESPACE class QGesturePrivate : public QObjectPrivate @@ -179,4 +181,6 @@ public: QT_END_NAMESPACE +#endif // QT_NO_GESTURES + #endif // QGESTURE_P_H diff --git a/src/gui/kernel/qgesturemanager.cpp b/src/gui/kernel/qgesturemanager.cpp index 43facef..03db6ea 100644 --- a/src/gui/kernel/qgesturemanager.cpp +++ b/src/gui/kernel/qgesturemanager.cpp @@ -66,6 +66,8 @@ # define DEBUG qDebug #endif +#ifndef QT_NO_GESTURES + QT_BEGIN_NAMESPACE QGestureManager::QGestureManager(QObject *parent) @@ -691,4 +693,6 @@ void QGestureManager::recycle(QGesture *gesture) QT_END_NAMESPACE +#endif // QT_NO_GESTURES + #include "moc_qgesturemanager_p.cpp" diff --git a/src/gui/kernel/qgesturemanager_p.h b/src/gui/kernel/qgesturemanager_p.h index c452f49..747cb1a 100644 --- a/src/gui/kernel/qgesturemanager_p.h +++ b/src/gui/kernel/qgesturemanager_p.h @@ -58,6 +58,8 @@ #include "private/qwidget_p.h" #include "qgesturerecognizer.h" +#ifndef QT_NO_GESTURES + QT_BEGIN_NAMESPACE class QBasicTimer; @@ -143,4 +145,6 @@ private: QT_END_NAMESPACE +#endif // QT_NO_GESTURES + #endif // QGESTUREMANAGER_P_H diff --git a/src/gui/kernel/qgesturerecognizer.cpp b/src/gui/kernel/qgesturerecognizer.cpp index 9dcca17..3e23bbf 100644 --- a/src/gui/kernel/qgesturerecognizer.cpp +++ b/src/gui/kernel/qgesturerecognizer.cpp @@ -44,6 +44,8 @@ #include "private/qgesture_p.h" #include "private/qgesturemanager_p.h" +#ifndef QT_NO_GESTURES + QT_BEGIN_NAMESPACE /*! @@ -231,3 +233,5 @@ void QGestureRecognizer::unregisterRecognizer(Qt::GestureType type) } QT_END_NAMESPACE + +#endif // QT_NO_GESTURES diff --git a/src/gui/kernel/qgesturerecognizer.h b/src/gui/kernel/qgesturerecognizer.h index 3e17c99..5afb43f 100644 --- a/src/gui/kernel/qgesturerecognizer.h +++ b/src/gui/kernel/qgesturerecognizer.h @@ -45,6 +45,8 @@ #include #include +#ifndef QT_NO_GESTURES + QT_BEGIN_HEADER QT_BEGIN_NAMESPACE @@ -95,4 +97,6 @@ QT_END_NAMESPACE QT_END_HEADER +#endif // QT_NO_GESTURES + #endif // QGESTURERECOGNIZER_H diff --git a/src/gui/kernel/qmacgesturerecognizer_mac.mm b/src/gui/kernel/qmacgesturerecognizer_mac.mm index fba839b..0ccbb52 100644 --- a/src/gui/kernel/qmacgesturerecognizer_mac.mm +++ b/src/gui/kernel/qmacgesturerecognizer_mac.mm @@ -47,6 +47,8 @@ #include "qwidget.h" #include "qdebug.h" +#ifndef QT_NO_GESTURES + QT_BEGIN_NAMESPACE QMacSwipeGestureRecognizer::QMacSwipeGestureRecognizer() @@ -260,3 +262,5 @@ void QMacPanGestureRecognizer::reset(QGesture *gesture) #endif // QT_MAC_USE_COCOA QT_END_NAMESPACE + +#endif // QT_NO_GESTURES diff --git a/src/gui/kernel/qmacgesturerecognizer_mac_p.h b/src/gui/kernel/qmacgesturerecognizer_mac_p.h index dd8a150..f48c160 100644 --- a/src/gui/kernel/qmacgesturerecognizer_mac_p.h +++ b/src/gui/kernel/qmacgesturerecognizer_mac_p.h @@ -57,6 +57,8 @@ #include "qpoint.h" #include "qgesturerecognizer.h" +#ifndef QT_NO_GESTURES + QT_BEGIN_NAMESPACE class QMacSwipeGestureRecognizer : public QGestureRecognizer @@ -99,4 +101,6 @@ private: QT_END_NAMESPACE +#endif // QT_NO_GESTURES + #endif // QMACSWIPEGESTURERECOGNIZER_MAC_P_H diff --git a/src/gui/kernel/qstandardgestures.cpp b/src/gui/kernel/qstandardgestures.cpp index a575717..6960838 100644 --- a/src/gui/kernel/qstandardgestures.cpp +++ b/src/gui/kernel/qstandardgestures.cpp @@ -47,6 +47,8 @@ #include "qabstractscrollarea.h" #include "qdebug.h" +#ifndef QT_NO_GESTURES + QT_BEGIN_NAMESPACE QPanGestureRecognizer::QPanGestureRecognizer() @@ -563,3 +565,5 @@ void QTapAndHoldGestureRecognizer::reset(QGesture *state) } QT_END_NAMESPACE + +#endif // QT_NO_GESTURES diff --git a/src/gui/kernel/qstandardgestures_p.h b/src/gui/kernel/qstandardgestures_p.h index 64505d8..da73b85 100644 --- a/src/gui/kernel/qstandardgestures_p.h +++ b/src/gui/kernel/qstandardgestures_p.h @@ -56,6 +56,8 @@ #include "qgesturerecognizer.h" #include "private/qgesture_p.h" +#ifndef QT_NO_GESTURES + QT_BEGIN_NAMESPACE class QPanGestureRecognizer : public QGestureRecognizer @@ -110,4 +112,6 @@ public: QT_END_NAMESPACE +#endif // QT_NO_GESTURES + #endif // QSTANDARDGESTURES_P_H diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index b5879ae..2fc76ed 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -202,7 +202,9 @@ QWidgetPrivate::QWidgetPrivate(int version) , picture(0) #elif defined(Q_WS_WIN) , noPaintOnScreen(0) + #ifndef QT_NO_GESTURES , nativeGesturePanEnabled(0) + #endif #elif defined(Q_WS_MAC) , needWindowChange(0) , hasAlienChildren(0) @@ -1397,8 +1399,10 @@ QWidget::~QWidget() qWarning("QWidget: %s (%s) deleted while being painted", className(), name()); #endif +#ifndef QT_NO_GESTURES foreach (Qt::GestureType type, d->gestureContext.keys()) ungrabGesture(type); +#endif // force acceptDrops false before winId is destroyed. d->registerDropSite(false); @@ -8539,9 +8543,11 @@ bool QWidget::event(QEvent *event) #endif // Q_WS_MAC break; } +#ifndef QT_NO_GESTURES case QEvent::Gesture: event->ignore(); break; +#endif #ifndef QT_NO_PROPERTIES case QEvent::DynamicPropertyChange: { const QByteArray &propName = static_cast(event)->propertyName(); @@ -11957,6 +11963,7 @@ QGraphicsProxyWidget *QWidget::graphicsProxyWidget() const Synonym for QList. */ +#ifndef QT_NO_GESTURES /*! Subscribes the widget to a given \a gesture with specific \a flags. @@ -11984,7 +11991,7 @@ void QWidget::ungrabGesture(Qt::GestureType gesture) manager->cleanupCachedGestures(this, gesture); } } - +#endif // QT_NO_GESTURES /*! \typedef WId diff --git a/src/gui/kernel/qwidget.h b/src/gui/kernel/qwidget.h index e12148b..941bd68 100644 --- a/src/gui/kernel/qwidget.h +++ b/src/gui/kernel/qwidget.h @@ -360,8 +360,10 @@ public: void setGraphicsEffect(QGraphicsEffect *effect); #endif //QT_NO_GRAPHICSEFFECT +#ifndef QT_NO_GESTURES void grabGesture(Qt::GestureType type, Qt::GestureFlags flags = Qt::GestureFlags()); void ungrabGesture(Qt::GestureType type); +#endif public Q_SLOTS: void setWindowTitle(const QString &); @@ -742,8 +744,10 @@ private: friend class QGraphicsProxyWidgetPrivate; friend class QStyleSheetStyle; friend struct QWidgetExceptionCleaner; +#ifndef QT_NO_GESTURES friend class QGestureManager; friend class QWinNativePanGestureRecognizer; +#endif // QT_NO_GESTURES friend class QWidgetEffectSourcePrivate; #ifdef Q_WS_MAC diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm index f12c956..1928599 100644 --- a/src/gui/kernel/qwidget_mac.mm +++ b/src/gui/kernel/qwidget_mac.mm @@ -752,6 +752,7 @@ static OSWindowRef qt_mac_create_window(QWidget *, WindowClass wclass, WindowAtt return window; } +#ifndef QT_NO_GESTURES #if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_6 /* We build the release package against the 10.4 SDK. So, to enable gestures for applications running on @@ -768,6 +769,7 @@ enum { kEventParamMagnificationAmount = 'magn' }; #endif +#endif // QT_NO_GESTURES // window events static EventTypeSpec window_events[] = { @@ -1076,6 +1078,7 @@ OSStatus QWidgetPrivate::qt_window_event(EventHandlerCallRef er, EventRef event, handled_event = false; break; } +#ifndef QT_NO_GESTURES case kEventClassGesture: { // First, find the widget that was under // the mouse when the gesture happened: @@ -1142,6 +1145,7 @@ OSStatus QWidgetPrivate::qt_window_event(EventHandlerCallRef er, EventRef event, QApplication::sendSpontaneousEvent(widget, &qNGEvent); break; } +#endif // QT_NO_GESTURES default: handled_event = false; diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h index 3f494d8..f23a94c 100644 --- a/src/gui/kernel/qwidget_p.h +++ b/src/gui/kernel/qwidget_p.h @@ -685,7 +685,9 @@ public: #ifndef QT_NO_ACTION QList actions; #endif +#ifndef QT_NO_GESTURES QMap gestureContext; +#endif // Bit fields. uint high_attributes[4]; // the low ones are in QWidget::widget_attributes @@ -714,8 +716,9 @@ public: void updateX11AcceptFocus(); #elif defined(Q_WS_WIN) // <--------------------------------------------------------- WIN uint noPaintOnScreen : 1; // see qwidget_win.cpp ::paintEngine() +#ifndef QT_NO_GESTURES uint nativeGesturePanEnabled : 1; - +#endif bool shouldShowMaximizeButton(); void winUpdateIsOpaque(); void reparentChildren(); diff --git a/src/gui/kernel/qwidget_win.cpp b/src/gui/kernel/qwidget_win.cpp index 5482da3..a7e66bf 100644 --- a/src/gui/kernel/qwidget_win.cpp +++ b/src/gui/kernel/qwidget_win.cpp @@ -2075,7 +2075,7 @@ void QWidgetPrivate::registerTouchWindow() void QWidgetPrivate::winSetupGestures() { -#if !defined(QT_NO_NATIVE_GESTURES) +#if !defined(QT_NO_GESTURES) && !defined(QT_NO_NATIVE_GESTURES) Q_Q(QWidget); if (!q || !q->isVisible() || !nativeGesturePanEnabled) return; diff --git a/src/gui/kernel/qwinnativepangesturerecognizer_win.cpp b/src/gui/kernel/qwinnativepangesturerecognizer_win.cpp index 0bddbf6..780de5d 100644 --- a/src/gui/kernel/qwinnativepangesturerecognizer_win.cpp +++ b/src/gui/kernel/qwinnativepangesturerecognizer_win.cpp @@ -50,6 +50,8 @@ #include "private/qapplication_p.h" #include "private/qwidget_p.h" +#ifndef QT_NO_GESTURES + QT_BEGIN_NAMESPACE #if !defined(QT_NO_NATIVE_GESTURES) @@ -127,3 +129,5 @@ void QWinNativePanGestureRecognizer::reset(QGesture *state) #endif // QT_NO_NATIVE_GESTURES QT_END_NAMESPACE + +#endif // QT_NO_GESTURES diff --git a/src/gui/kernel/qwinnativepangesturerecognizer_win_p.h b/src/gui/kernel/qwinnativepangesturerecognizer_win_p.h index 146b067..64addeb 100644 --- a/src/gui/kernel/qwinnativepangesturerecognizer_win_p.h +++ b/src/gui/kernel/qwinnativepangesturerecognizer_win_p.h @@ -54,6 +54,7 @@ // #include + #include class IInkRectangle; @@ -87,6 +88,8 @@ DECLARE_INTERFACE_(IInkTablets, IDispatch) STDMETHOD(IsPacketPropertySupported)(THIS_ BSTR packetPropertyName, VARIANT_BOOL *Supported) PURE; }; +#ifndef QT_NO_GESTURES + QT_BEGIN_NAMESPACE #if !defined(QT_NO_NATIVE_GESTURES) @@ -105,4 +108,6 @@ public: QT_END_NAMESPACE +#endif // QT_NO_GESTURES + #endif // QWINNATIVEPANGESTURERECOGNIZER_WIN_P_H diff --git a/src/gui/statemachine/qguistatemachine.cpp b/src/gui/statemachine/qguistatemachine.cpp index 63ad94e..2b4c9c2 100644 --- a/src/gui/statemachine/qguistatemachine.cpp +++ b/src/gui/statemachine/qguistatemachine.cpp @@ -474,9 +474,11 @@ static QEvent *cloneEvent(QEvent *e) case QEvent::TouchEnd: return new QTouchEvent(*static_cast(e)); +#ifndef QT_NO_GESTURES case QEvent::NativeGesture: Q_ASSERT_X(false, "cloneEvent()", "not implemented"); break; +#endif case QEvent::RequestSoftwareInputPanel: case QEvent::CloseSoftwareInputPanel: diff --git a/src/gui/widgets/qabstractscrollarea.cpp b/src/gui/widgets/qabstractscrollarea.cpp index 8cffebd..30ce23b 100644 --- a/src/gui/widgets/qabstractscrollarea.cpp +++ b/src/gui/widgets/qabstractscrollarea.cpp @@ -295,8 +295,10 @@ void QAbstractScrollAreaPrivate::init() q->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); layoutChildren(); #ifndef Q_WS_MAC +#ifndef QT_NO_GESTURES viewport->grabGesture(Qt::PanGesture); #endif +#endif } #ifdef Q_WS_WIN @@ -546,8 +548,10 @@ void QAbstractScrollArea::setViewport(QWidget *widget) d->viewport->setFocusProxy(this); d->viewport->installEventFilter(d->viewportFilter.data()); #ifndef Q_WS_MAC +#ifndef QT_NO_GESTURES d->viewport->grabGesture(Qt::PanGesture); #endif +#endif d->layoutChildren(); if (isVisible()) d->viewport->show(); @@ -960,6 +964,7 @@ bool QAbstractScrollArea::event(QEvent *e) case QEvent::TouchUpdate: case QEvent::TouchEnd: return false; +#ifndef QT_NO_GESTURES case QEvent::Gesture: { QGestureEvent *ge = static_cast(e); @@ -980,6 +985,7 @@ bool QAbstractScrollArea::event(QEvent *e) } return false; } +#endif // QT_NO_GESTURES case QEvent::StyleChange: case QEvent::LayoutDirectionChange: case QEvent::ApplicationLayoutDirectionChange: @@ -1036,9 +1042,11 @@ bool QAbstractScrollArea::viewportEvent(QEvent *e) #endif return QFrame::event(e); case QEvent::LayoutRequest: +#ifndef QT_NO_GESTURES case QEvent::Gesture: case QEvent::GestureOverride: return event(e); +#endif default: break; } diff --git a/src/gui/widgets/qplaintextedit.cpp b/src/gui/widgets/qplaintextedit.cpp index 2734fba..21c2635 100644 --- a/src/gui/widgets/qplaintextedit.cpp +++ b/src/gui/widgets/qplaintextedit.cpp @@ -1476,6 +1476,7 @@ bool QPlainTextEdit::event(QEvent *e) d->sendControlEvent(e); } #endif +#ifndef QT_NO_GESTURES else if (e->type() == QEvent::Gesture) { QGestureEvent *ge = static_cast(e); QPanGesture *g = static_cast(ge->gesture(Qt::PanGesture)); @@ -1499,6 +1500,7 @@ bool QPlainTextEdit::event(QEvent *e) } return true; } +#endif // QT_NO_GESTURES return QAbstractScrollArea::event(e); } diff --git a/src/imports/gestures/plugin.cpp b/src/imports/gestures/plugin.cpp index 11f2392..1fc23ca 100644 --- a/src/imports/gestures/plugin.cpp +++ b/src/imports/gestures/plugin.cpp @@ -53,7 +53,9 @@ public: virtual void registerTypes(const char *uri) { Q_ASSERT(QLatin1String(uri) == QLatin1String("Qt.labs.gestures")); +#ifndef QT_NO_GESTURES qmlRegisterCustomType(uri,1,0, "GestureArea", new QDeclarativeGestureAreaParser); +#endif } }; @@ -62,4 +64,3 @@ QT_END_NAMESPACE #include "plugin.moc" Q_EXPORT_PLUGIN2(qmlgesturesplugin, QT_PREPEND_NAMESPACE(GestureAreaQmlPlugin)); - diff --git a/src/imports/gestures/qdeclarativegesturearea.cpp b/src/imports/gestures/qdeclarativegesturearea.cpp index 1b0aeeb..22be2f1 100644 --- a/src/imports/gestures/qdeclarativegesturearea.cpp +++ b/src/imports/gestures/qdeclarativegesturearea.cpp @@ -55,6 +55,8 @@ #include +#ifndef QT_NO_GESTURES + QT_BEGIN_NAMESPACE class QDeclarativeGestureAreaPrivate : public QDeclarativeItemPrivate @@ -267,3 +269,5 @@ bool QDeclarativeGestureAreaPrivate::gestureEvent(QGestureEvent *event) } QT_END_NAMESPACE + +#endif // QT_NO_GESTURES diff --git a/src/imports/gestures/qdeclarativegesturearea_p.h b/src/imports/gestures/qdeclarativegesturearea_p.h index 0195511..ff89166 100644 --- a/src/imports/gestures/qdeclarativegesturearea_p.h +++ b/src/imports/gestures/qdeclarativegesturearea_p.h @@ -50,6 +50,8 @@ #include #include +#ifndef QT_NO_GESTURES + QT_BEGIN_HEADER QT_BEGIN_NAMESPACE @@ -97,4 +99,6 @@ QML_DECLARE_TYPE(QDeclarativeGestureArea) QT_END_HEADER +#endif // QT_NO_GESTURES + #endif -- cgit v0.12 From 65f4148dc8c2ecd6538c1e2313c633d65e2b7fcc Mon Sep 17 00:00:00 2001 From: Morten Engvoldsen Date: Wed, 2 Jun 2010 10:17:09 +0200 Subject: Doc: adding offline docs to assistant and Qt Creator. Improving small docs and adding highlighting --- doc/src/template/images/arrow_down.png | Bin 0 -> 177 bytes doc/src/template/scripts/narrow.js | 78 +++ doc/src/template/scripts/superfish.js | 121 ++++ doc/src/template/style/OfflineStyle.css | 819 ++++++++++++++++++++++++++ doc/src/template/style/narrow.css | 250 ++++++++ doc/src/template/style/superfish.css | 51 ++ doc/src/template/style/superfish_skin.css | 83 +++ tools/qdoc3/htmlgenerator.cpp | 85 ++- tools/qdoc3/test/assistant.qdocconf | 2 + tools/qdoc3/test/designer.qdocconf | 2 + tools/qdoc3/test/linguist.qdocconf | 4 +- tools/qdoc3/test/qdeclarative.qdocconf | 2 + tools/qdoc3/test/qmake.qdocconf | 2 + tools/qdoc3/test/qt-build-docs.qdocconf | 2 + tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf | 1 + tools/qdoc3/test/qt-defines.qdocconf | 53 +- tools/qdoc3/test/qt-html-templates.qdocconf | 55 +- tools/qdoc3/test/qt.qdocconf | 17 +- 18 files changed, 1570 insertions(+), 57 deletions(-) create mode 100644 doc/src/template/images/arrow_down.png create mode 100644 doc/src/template/scripts/narrow.js create mode 100644 doc/src/template/scripts/superfish.js create mode 100644 doc/src/template/style/OfflineStyle.css create mode 100644 doc/src/template/style/narrow.css create mode 100644 doc/src/template/style/superfish.css create mode 100644 doc/src/template/style/superfish_skin.css diff --git a/doc/src/template/images/arrow_down.png b/doc/src/template/images/arrow_down.png new file mode 100644 index 0000000..9d01e97 Binary files /dev/null and b/doc/src/template/images/arrow_down.png differ diff --git a/doc/src/template/scripts/narrow.js b/doc/src/template/scripts/narrow.js new file mode 100644 index 0000000..12d0ce8 --- /dev/null +++ b/doc/src/template/scripts/narrow.js @@ -0,0 +1,78 @@ +var narrowInit = function() { + /* TODO: + Could probably be more efficient, not hardcoding each element to be created + */ + // 1: Create search form + var narrowSearch = $('
    '); + var searchform = $("#qtdocsearch"); + narrowSearch.append(searchform); + $("#qtdocheader .content .qtref").after(narrowSearch); + + // 2: Create dropdowns + var narrowmenu = $('
      '); + + // Lookup + var lookuptext = $("#lookup h2").attr("title"); + $("#lookup ul").removeAttr("id"); + $("#lookup ul li").removeAttr("class"); + $("#lookup ul li").removeAttr("style"); + var lookupul = $("#lookup ul"); + var lookuplist = $('
    • '); + var lookuplink = $(''); + lookuplink.append(lookuptext); + lookuplist.append(lookuplink); + lookuplist.append(lookupul); + narrowmenu.append(lookuplist); + + // Topics + var topicstext = $("#topics h2").attr("title"); + $("#topics ul").removeAttr("id"); + $("#topics ul li").removeAttr("class"); + $("#topics ul li").removeAttr("style"); + var topicsul = $("#topics ul"); + var topicslist = $('
    • '); + var topicslink = $(''); + topicslink.append(topicstext); + topicslist.append(topicslink); + topicslist.append(topicsul); + narrowmenu.append(topicslist); + + // Examples + var examplestext = $("#examples h2").attr("title"); + $("#examples ul").removeAttr("id"); + $("#examples ul li").removeAttr("class"); + $("#examples ul li").removeAttr("style"); + var examplesul = $("#examples ul"); + var exampleslist = $('
    • '); + var exampleslink = $(''); + exampleslink.append(examplestext); + exampleslist.append(exampleslink); + exampleslist.append(examplesul); + narrowmenu.append(exampleslist); + + $("#shortCut").after(narrowmenu); + $('ul#narrowmenu').superfish({ + delay: 100, + autoArrows: false, + disableHI: true + }); +} + +$(document).ready(function(){ + if ($('body').hasClass('narrow')) { + narrowInit(); + } +}); + +$(window).bind('resize', function () { + if($(window).width()<600) { + $('body').addClass('narrow'); + + if ($("#narrowsearch").length == 0) { + narrowInit(); + } + } + else { + $('body').removeClass('narrow'); + } +}); \ No newline at end of file diff --git a/doc/src/template/scripts/superfish.js b/doc/src/template/scripts/superfish.js new file mode 100644 index 0000000..c6a9c7d --- /dev/null +++ b/doc/src/template/scripts/superfish.js @@ -0,0 +1,121 @@ + +/* + * Superfish v1.4.8 - jQuery menu widget + * Copyright (c) 2008 Joel Birch + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * CHANGELOG: http://users.tpg.com.au/j_birch/plugins/superfish/changelog.txt + */ + +;(function($){ + $.fn.superfish = function(op){ + + var sf = $.fn.superfish, + c = sf.c, + $arrow = $([' »'].join('')), + over = function(){ + var $$ = $(this), menu = getMenu($$); + clearTimeout(menu.sfTimer); + $$.showSuperfishUl().siblings().hideSuperfishUl(); + }, + out = function(){ + var $$ = $(this), menu = getMenu($$), o = sf.op; + clearTimeout(menu.sfTimer); + menu.sfTimer=setTimeout(function(){ + o.retainPath=($.inArray($$[0],o.$path)>-1); + $$.hideSuperfishUl(); + if (o.$path.length && $$.parents(['li.',o.hoverClass].join('')).length<1){over.call(o.$path);} + },o.delay); + }, + getMenu = function($menu){ + var menu = $menu.parents(['ul.',c.menuClass,':first'].join(''))[0]; + sf.op = sf.o[menu.serial]; + return menu; + }, + addArrow = function($a){ $a.addClass(c.anchorClass).append($arrow.clone()); }; + + return this.each(function() { + var s = this.serial = sf.o.length; + var o = $.extend({},sf.defaults,op); + o.$path = $('li.'+o.pathClass,this).slice(0,o.pathLevels).each(function(){ + $(this).addClass([o.hoverClass,c.bcClass].join(' ')) + .filter('li:has(ul)').removeClass(o.pathClass); + }); + sf.o[s] = sf.op = o; + + $('li:has(ul)',this)[($.fn.hoverIntent && !o.disableHI) ? 'hoverIntent' : 'hover'](over,out).each(function() { + if (o.autoArrows) addArrow( $('>a:first-child',this) ); + }) + .not('.'+c.bcClass) + .hideSuperfishUl(); + + var $a = $('a',this); + $a.each(function(i){ + var $li = $a.eq(i).parents('li'); + $a.eq(i).focus(function(){over.call($li);}).blur(function(){out.call($li);}); + }); + o.onInit.call(this); + + }).each(function() { + var menuClasses = [c.menuClass]; + if (sf.op.dropShadows && !($.browser.msie && $.browser.version < 7)) menuClasses.push(c.shadowClass); + $(this).addClass(menuClasses.join(' ')); + }); + }; + + var sf = $.fn.superfish; + sf.o = []; + sf.op = {}; + sf.IE7fix = function(){ + var o = sf.op; + if ($.browser.msie && $.browser.version > 6 && o.dropShadows && o.animation.opacity!=undefined) + this.toggleClass(sf.c.shadowClass+'-off'); + }; + sf.c = { + bcClass : 'sf-breadcrumb', + menuClass : 'sf-js-enabled', + anchorClass : 'sf-with-ul', + arrowClass : 'sf-sub-indicator', + shadowClass : 'sf-shadow' + }; + sf.defaults = { + hoverClass : 'sfHover', + pathClass : 'overideThisToUse', + pathLevels : 1, + delay : 800, + animation : {opacity:'show'}, + speed : 'normal', + autoArrows : true, + dropShadows : true, + disableHI : false, // true disables hoverIntent detection + onInit : function(){}, // callback functions + onBeforeShow: function(){}, + onShow : function(){}, + onHide : function(){} + }; + $.fn.extend({ + hideSuperfishUl : function(){ + var o = sf.op, + not = (o.retainPath===true) ? o.$path : ''; + o.retainPath = false; + var $ul = $(['li.',o.hoverClass].join(''),this).add(this).not(not).removeClass(o.hoverClass) + .find('>ul').hide().css('visibility','hidden'); + o.onHide.call($ul); + return this; + }, + showSuperfishUl : function(){ + var o = sf.op, + sh = sf.c.shadowClass+'-off', + $ul = this.addClass(o.hoverClass) + .find('>ul:hidden').css('visibility','visible'); + sf.IE7fix.call($ul); + o.onBeforeShow.call($ul); + $ul.animate(o.animation,o.speed,function(){ sf.IE7fix.call($ul); o.onShow.call($ul); }); + return this; + } + }); + +})(jQuery); diff --git a/doc/src/template/style/OfflineStyle.css b/doc/src/template/style/OfflineStyle.css new file mode 100644 index 0000000..ddd580a --- /dev/null +++ b/doc/src/template/style/OfflineStyle.css @@ -0,0 +1,819 @@ +@media screen +{ + html + { + color: #000000; + background: #FFFFFF; + } + body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, button, textarea, p, blockquote, th, td + { + margin: 0; + padding: 0; + } + table + { + border-collapse: collapse; + border-spacing: 0; + } + fieldset, img + { + border: 0; + } + address, caption, cite, code, dfn, em, strong, th, var, optgroup + { + font-style: inherit; + font-weight: inherit; + } + del, ins + { + text-decoration: none; + } + li + { + list-style: none; + } + caption, th + { + text-align: left; + } + h1, h2, h3, h4, h5, h6 + { + font-size: 100%; + } + q:before, q:after + { + content: ''; + } + abbr, acronym + { + border: 0; + font-variant: normal; + } + sup + { + vertical-align: baseline; + } + sub + { + vertical-align: baseline; + } + tt, .qmlreadonly span, .qmldefault span + { + word-spacing:5px; + } + .heading + { + font: normal 600 16px/1.0 Arial; + } + .subtitle + { + font-size: 13px; + } + .small-subtitle + { + font-size: 13px; + } + legend + { + color: #000000; + } + input, button, textarea, select, optgroup, option + { + font-family: inherit; + font-size: inherit; + font-style: inherit; + font-weight: inherit; + } + input, button, textarea, select + { + font-size: 100%; + } + body + { + font: normal 13px/1.2 Verdana; + color: #363534; + } + strong + { + font-weight: bold; + } + em + { + font-style: italic; + } + a + { + color: #00732f; + text-decoration: none; + } + .header, .footer, .wrapper + { + /*min-width: 600px;*/ + max-width: 1500px; + margin: 0 5px; + } + .wrapper + { + position:relative; + top:50px; + } + .wrapper .bd + { + position: relative; + } + + .header, .footer + { + display: block; + clear: both; + overflow: hidden; + } + .header + { + height: 115px; + position: relative; + } + + + .header .qtref + { + position: absolute; + top: 28px; + left: 88px; + width: 302px; + height: 22px; + } + .header .qtref span + { + display: block; + height: 22px; + } + .wrap .content h1 + { + font: 600 18px/1.2 Arial; + } + .wrap .content h2 + { + font: 600 16px/1.2 Arial; + } + .wrap .content h3 + { + font: 600 14px/1.2 Arial; + } + .wrap .content h4 + { + font: 600 12px/1.2 Arial; + } + + .wrap .content p + { + line-height: 20px; + padding: 5px; + } + .wrap .content table p + { + line-height: 20px; + padding: 0px; + } + .wrap .content ul + { + padding-left: 25px; + padding-top: 10px; + } + a:hover + { + color: #4c0033; + text-decoration: underline; + } + .content a:visited + { + color: #4c0033; + text-decoration: none; + } + .content a:visited:hover + { + color: #4c0033; + text-decoration: underline; + } + + pre + { + border: 1px solid #DDDDDD; + margin: 0 20px 10px 10px; + padding: 20px 15px 20px 20px; + overflow-x: auto; + } + table, pre + { + -moz-border-radius: 7px 7px 7px 7px; + background-color: #F6F6F6; + border: 1px solid #E6E6E6; + border-collapse: separate; + font-size: 11px; + /*min-width: 395px;*/ + margin-bottom: 25px; + display: inline-block; + } + thead + { + margin-top: 5px; + font:600 12px/1.2 Arial; + } + th + { + padding: 5px 15px 5px 15px; + background-color: #E1E1E1; + /* border-bottom: 1px solid #E6E6E6;*/ + border-left: 1px solid #E6E6E6; + /* border-right: 1px solid #E6E6E6;*/ + } + td + { + padding: 3px 15px 3px 20px; + /* border-left: 1px solid #E6E6E6; + border-right: 1px solid #E6E6E6;*/ + } + tr.odd td:hover, tr.even td:hover + { + /* border-right: 1px solid #C3C3C3; + border-left: 1px solid #C3C3C3;*/ + } + + td.rightAlign + { + padding: 3px 15px 3px 10px; + } + table tr.odd + { + border-left: 1px solid #E6E6E6; + background-color: #F6F6F6; + color: #66666E; + } + table tr.even + { + border-left: 1px solid #E6E6E6; + background-color: #ffffff; + color: #66666E; + } + table tr.odd td:hover, table tr.even td:hover + { + background-color: #E6E6E6; + } + + span.comment + { + color: #8B0000; + font-style: italic; + } + span.string, span.char + { + color: #254117; + } + + .qmltype + { + text-align: center; + font-size: 160%; + } + .qmlreadonly + { + float: right; + color: #254117; + } + + .qmldefault + { + float: right; + color: red; + } + + .footer + { + border-top:1px solid #E5E5E5; + min-height: 100px; + color: #797775; + font: normal 9px/1 Verdana; + text-align: center; + padding-top: 40px; + margin: 0; + } + + + .wrap + { + margin: 0 5px 0 5px; + } + .wrap .toolbar + { + display:block; + } + + .wrap .breadcrumb ul li + { + float: left; + background: url(../images/breadcrumb.png) no-repeat 0 5px; + padding-left: 15px; + margin-left: 15px; + font-weight: bold; + } + .wrap .breadcrumb ul li.last + { + font-weight: normal; + } + .wrap .breadcrumb ul li a + { + /* color: #363534;*/ + color: #00732F; + } + .wrap .breadcrumb ul li.first + { + background-image: none; + padding-left: 0; + margin-left: 0; + } + .wrap .content + { + word-wrap:break-word; + } + .wrap .content li + { + padding-left: 12px; + background: url(../images/bullet_sq.png) no-repeat 0 5px; + font: normal 400 10pt/1 Verdana; + margin-bottom: 10px; + } + + .offline .wrap .content + { + padding-top: 15px; + } + + .header:after, .footer:after, .breadcrumb:after, .wrap .content:after, .group:after + { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; + } + + hr + { + background-color: #E6E6E6; + border: 1px solid #E6E6E6; + height: 1px; + width: 100%; + text-align: left; + margin: 5px 0px 5px 0px; + } + + .content .alignedsummary + { + margin: 5px; + width:100%; + } + + + .toc + { + float: right; + -moz-border-radius: 7px 7px 7px 7px; + background-color: #F6F6F6; + border: 1px solid #DDDDDD; + margin: 0 20px 10px 10px; + padding: 20px 15px 20px 20px; + height: auto; + width: 200px; + } + + .toc h3, .generic a + { + font: 600 12px/1.2 Arial; + } + + .wrap .content .toc ul + { + padding-left: 0px; + } + + + .wrap .content .toc .level2 + { + margin-left: 15px; + } + + .wrap .content .toc .level3 + { + margin-left: 30px; + } + + .content .toc li + { + font: normal 10px/1.2 Verdana; + background: url(../images/bullet_dn.png) no-repeat 0 5px; + } + + + .generic{ + max-width:75%; + } + .generic td{ + padding:0; + } + + .generic .odd .alphaChar{ + background-color: #F6F6F6; + } + + .generic .even .alphaChar{ + background-color: #FFFFFF; + } + + .highlightedCode + { + margin:10px; + } + + .flowList{ + vertical-align:top; + } + .alphaChar{ + width:100%; + background-color:#F6F6F6; + border:1px solid #E6E6E6; + font-size:12pt; + padding-left:10px; + margin-top:10px; + margin-bottom:10px; + } + + .flowList dl{ + } + .flowList dd{ + display:inline-block; + margin-left:10px; + width:250px; + } + .wrap .content .flowList p{ + padding:0px; + } + + .relpage + { + -moz-border-radius: 7px 7px 7px 7px; + border: 1px solid #DDDDDD; + padding: 25px 25px; + clear: both; + } + .relpage ul + { + float: none; + padding: 15px; + } + .content .relpage li + { + font: normal 11px/1.2 Verdana; + } + h3.fn, span.fn + { + background-color: #F6F6F6; + border-width: 1px; + border-style: solid; + border-color: #E6E6E6; + font-weight: bold; + word-spacing:3px; + } + + .functionIndex { + font-size:12pt; + word-spacing:10px; + margin-bottom:10px; + background-color: #F6F6F6; + border-width: 1px; + border-style: solid; + border-color: #E6E6E6; + width:100%; + } + + .centerAlign { text-align:center;} + .rightAlign {text-align:right;} + .leftAlign {text-align:left;} + .topAlign{vertical-align:top } + .functionIndex a{display:inline-block;} + + /* start index box */ + .indexbox + { + width: 100%; + display:inline-block; + } + + .indexboxcont { display: block; } + + .indexboxbar + { + border-bottom:1px solid #E5E5E5; + margin-bottom: 25px; + } + + .indexboxcont .section + { + display: inline-block; + padding:0 2% 0 1%; + vertical-align:top; + } + + .indexboxcont .section { + float: left; + } + + .indexboxcont .section p + { + padding-top: 20px; + padding-bottom: 20px; + } + .indexboxcont .sectionlist + { + display: inline-block; + vertical-align:top; + padding: 0; + } + .indexboxcont .sectionlist ul + { + margin-bottom: 20px; + } + + .indexboxcont .sectionlist ul li + { + line-height: 12px; + } + + .content .indexboxcont li + { + font: normal 600 13px/1 Verdana; + } + + .indexbox a:hover, .indexbox a:visited:hover + { + color: #4c0033; + text-decoration: underline; + } + + .indexbox a:visited + { + color: #00732f; + text-decoration: none; + } + + .indexbox .indexIcon { + width: 11%; + } + + + .indexboxcont:after + { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; + } + + body.offline + { + background-image: none; + } + + .offline .footer { + margin: 0; + } + .offline .header + { + width: 100%; + margin: 0; + height: auto; + background-color: #ffffff; + padding: 10px 0 5px 0; + overflow: visible; + border-bottom: solid #E5E5E5 1px; + z-index:1; + position:fixed; + } + + .offline .header .content + { + } + .offline .header .qtref + { + color: #00732F; + position: static; + float: left; + margin-left: 5px; + font: bold 18px/1 Arial; + } + + .offline .header .qtref:visited + { + color: #00732F; + } + .offline .header .qtref:hover + { + color: #00732F; + text-decoration:none; + } + .offline .header .qtref span + { + background-image: none; + text-indent: 0; + text-decoration:none; + } + + .offline .wrap + { + margin: 0 5px 0 5px; + } + + .offline .wrap .toolbar + { + display:block; + padding-top:5px; + } + + .offline .wrap .breadcrumb ul li { + font-weight: normal; + } + + .offline .wrap .breadcrumb ul li a { + /*color: #44a51c;*/ + } + + .offline .wrap .breadcrumb ul li.last a { + /*color: #363534;*/ + } + + + + .narrow .indexboxcont .section { + width: 64%; + padding-left: 0; + } + + .narrow .indexboxcont .sectionlist { + width: 32.5%; + } + + .header .icon, + .sidebar, + .feedback, + .t_button, + .feedback, + #feedbackBox, + #feedback, + #blurpage, + .indexbox .indexIcon span, + .wrapper .hd, + .offline .indexbox .indexIcon, + .offline .header #nav-logo, + #offlinemenu, + #offlinesearch, + .offline .header #nav-topright, + .offline .header #shortCut , + .offline .wrapper .hd, + .offline .wrapper .ft, + .offline .sidebar, + .offline .wrap .feedback + { + display:none; + } + + /* end offline mode */ +#narrowmenu { + display: none; + float: right; + margin: 15px 40px 0 0; + font-size: 11px; + } + + .narrow #narrowmenu { + display: block; + } + + #narrowsearch{ + display:none; + } + + #narrowmenu ul + { + border-bottom:solid 1px #E5E5E5; + border-left:solid 1px #E5E5E5; + border-right:solid 1px #E5E5E5; + } + + #narrowmenu a { + line-height: 1.1; + background: url(../images/arrow_down.png) no-repeat 100% 50%; + white-space: nowrap; + padding: 0 16px 0 5px; + } + + #narrowmenu li { + margin-left: 20px; + } + + #narrowmenu li li { + margin: 0 0 5px 0; + } + + #narrowmenu li li a { + padding: 0; + background-image: none; + } + + #narrowmenu li, + #narrowmenu li ul { + background-color: #fff; + } + + #narrowmenu li ul { + width: auto; + padding: 5px; + margin-top:-15px; + } + + .sf-menu li:hover ul, .sf-menu li.sfHover ul { + top: 1.2em; + } +.sf-menu, .sf-menu * { + margin: 0; + padding: 0; + list-style: none; +} +.sf-menu { + line-height: 1.0; +} +.sf-menu ul { + position: absolute; + top: -999em; + width: 10em; /* left offset of submenus need to match (see below) */ +} +.sf-menu ul li { + width: 100%; +} +.sf-menu li:hover { + visibility: inherit; /* fixes IE7 'sticky bug' */ +} +.sf-menu li { + float: left; + position: relative; +} +.sf-menu a { + display: block; + position: relative; +} +.sf-menu li:hover ul, +.sf-menu li.sfHover ul { + left: 0; + top: 2.5em; /* match top ul list item height */ + z-index: 99; +} +ul.sf-menu li:hover li ul, +ul.sf-menu li.sfHover li ul { + top: -999em; +} +ul.sf-menu li li:hover ul, +ul.sf-menu li li.sfHover ul { + left: 10em; /* match ul width */ + top: 0; +} +ul.sf-menu li li:hover li ul, +ul.sf-menu li li.sfHover li ul { + top: -999em; +} +ul.sf-menu li li li:hover ul, +ul.sf-menu li li li.sfHover ul { + left: 10em; /* match ul width */ + top: 0; +} + +} +/* end of screen media */ + +/* start of print media */ + +@media print +{ + input, textarea, .header, .footer, .toolbar, .feedback, .wrapper .hd, .wrapper .bd .sidebar, .wrapper .ft + { + display: none; + background: none; + } + .content + { + position: absolute; + top: 0px; + left: 0px; + background: none; + display: block; + } +} +/* end of print media */ diff --git a/doc/src/template/style/narrow.css b/doc/src/template/style/narrow.css new file mode 100644 index 0000000..05159aa --- /dev/null +++ b/doc/src/template/style/narrow.css @@ -0,0 +1,250 @@ + /* start narrow mode */ + + body.narrow + { + background-image: none; + } + + .narrow a { + color: #44a51c; + } + + .narrow .header, .narrow .header .content, .narrow .footer, .narrow .wrapper { + margin: 0 7px; + min-width: 300px; + } + + .narrow .footer { + margin: 0; + } + .narrow .header + { + width: 100%; + margin: 0; + height: auto; + background: #fff url(../images/header_bg.png) repeat-x 0 100%; + padding: 10px 0 5px 0; + overflow: visible; + } + + .narrow .header .content + { + } + + .narrow .header #nav-logo + { + display: none; + } + + .narrow .header .qtref + { + width: auto; + height: auto; + color: #363534; + position: static; + float: left; + margin-left: 25px; + font: bold 18px/1 Arial; + } + + .narrow .header .qtref a + { + color: #363534; + } + + .narrow .header .qtref span + { + background-image: none; + text-indent: 0; + } + + .narrow .header #nav-topright + { + display: none; + } + + .narrow .header #shortCut + { + clear: both; + font-weight: normal; + position: static; + float: left; + margin: 15px 0 0 25px; + overflow: hidden; + padding: 0; + height: auto; + } + + .narrow .header #shortCut ul + { + float: none; + margin: 0; + width: auto; + font-size: 11px; + } + + .narrow .header #shortCut ul li + { + background-image: none; + } + + .narrow .header #shortCut ul .shortCut-topleft-active, + .narrow .header #shortCut ul .shortCut-topleft-inactive + { + background-image: none; + height: auto; + padding: 0; + width: auto; + } + .narrow .header #shortCut ul li a + { + color: #44a51c; + } + + .narrow .wrapper .hd + { + background: url(../images/bg_ul_blank.png) no-repeat 0 0; + } + + .narrow .wrapper .bd + { + background: url(../images/bg_l_blank.png) repeat-y 0 0; + } + + .narrow .wrapper .ft + { + background: url(../images/bg_ll_blank.png) no-repeat 0 0; + } + + .narrow .sidebar + { + display: none; + } + + .narrow .wrap + { + margin: 0 5px 0 5px; + } + + .narrow .wrap .toolbar + { + border-bottom: none; + } + + .narrow .wrap .content + { + padding-top: 15px; + } + + .narrow .wrap .feedback + { + display: none; + } + + .narrow .wrap .breadcrumb ul li { + font-weight: normal; + } + + .narrow .wrap .breadcrumb ul li a { + color: #44a51c; + } + + .narrow .wrap .breadcrumb ul li.last a { + color: #363534; + } + + #narrowsearch { + display: none; + } + + .narrow #narrowsearch { + display: block; + float: right; + margin-right: 25px; + _position: relative; + } + + .narrow #narrowsearch fieldset { + _position: absolute; + _margin-top: -1px; + } + + .narrow #narrowsearch { + background: url("http://doc.qt.nokia.com/prototype/html/images/sprites-combined.png") no-repeat scroll -6px -348px transparent; + height: 21px; + padding: 2px 0 0 5px; + width: 167px; + } + + .narrow #narrowsearch input { + border: none; + font: 13px/1.2 Verdana; + height: 19px; + outline: none; + padding: 0; + width: 158px; + *border: 1px solid #fff; + *height: 17px; + _height: 18px; + } + + .narrow .indexbox .indexIcon { + display: none; + } + + .narrow .indexboxcont .section { + width: 64%; + padding-left: 0; + } + + .narrow .indexboxcont .sectionlist { + width: 32.5%; + } + + #narrowmenu { + display: none; + float: right; + margin: 15px 40px 0 0; + font-size: 11px; + } + + .narrow #narrowmenu { + display: block; + } + + #narrowmenu a { + line-height: 1.1; + background: url(../images/arrow_down.png) no-repeat 100% 50%; + white-space: nowrap; + padding: 0 16px 0 5px; + } + + #narrowmenu li { + margin-left: 20px; + } + + #narrowmenu li li { + margin: 0 0 5px 0; + } + + #narrowmenu li li a { + padding: 0; + background-image: none; + } + + #narrowmenu li, + #narrowmenu li ul { + background-color: #fff; + margin-top:-1px; + } + + #narrowmenu li ul { + width: auto; + padding: 5px; + } + + .sf-menu li:hover ul, .sf-menu li.sfHover ul { + top: 1.2em; + } + + /* end narrow mode */ diff --git a/doc/src/template/style/superfish.css b/doc/src/template/style/superfish.css new file mode 100644 index 0000000..0cf0f7d --- /dev/null +++ b/doc/src/template/style/superfish.css @@ -0,0 +1,51 @@ +.sf-menu, .sf-menu * { + margin: 0; + padding: 0; + list-style: none; +} +.sf-menu { + line-height: 1.0; +} +.sf-menu ul { + position: absolute; + top: -999em; + width: 10em; /* left offset of submenus need to match (see below) */ +} +.sf-menu ul li { + width: 100%; +} +.sf-menu li:hover { + visibility: inherit; /* fixes IE7 'sticky bug' */ +} +.sf-menu li { + float: left; + position: relative; +} +.sf-menu a { + display: block; + position: relative; +} +.sf-menu li:hover ul, +.sf-menu li.sfHover ul { + left: 0; + top: 2.5em; /* match top ul list item height */ + z-index: 99; +} +ul.sf-menu li:hover li ul, +ul.sf-menu li.sfHover li ul { + top: -999em; +} +ul.sf-menu li li:hover ul, +ul.sf-menu li li.sfHover ul { + left: 10em; /* match ul width */ + top: 0; +} +ul.sf-menu li li:hover li ul, +ul.sf-menu li li.sfHover li ul { + top: -999em; +} +ul.sf-menu li li li:hover ul, +ul.sf-menu li li li.sfHover ul { + left: 10em; /* match ul width */ + top: 0; +} diff --git a/doc/src/template/style/superfish_skin.css b/doc/src/template/style/superfish_skin.css new file mode 100644 index 0000000..8d84827 --- /dev/null +++ b/doc/src/template/style/superfish_skin.css @@ -0,0 +1,83 @@ + +/*** DEMO SKIN ***/ +.sf-menu { + float: left; + margin-bottom: 1em; +} +.sf-menu a { + border-left: 1px solid #fff; + border-top: 1px solid #CFDEFF; + padding: .75em 1em; + text-decoration:none; +} +.sf-menu a, .sf-menu a:visited { /* visited pseudo selector so IE6 applies text colour*/ + color: #13a; +} +.sf-menu li { + background: #BDD2FF; +} +.sf-menu li li { + background: #AABDE6; +} +.sf-menu li li li { + background: #9AAEDB; +} +.sf-menu li:hover, .sf-menu li.sfHover, +.sf-menu a:focus, .sf-menu a:hover, .sf-menu a:active { + background: #CFDEFF; + outline: 0; +} + +/*** arrows **/ +.sf-menu a.sf-with-ul { + padding-right: 2.25em; + min-width: 1px; /* trigger IE7 hasLayout so spans position accurately */ +} +.sf-sub-indicator { + position: absolute; + display: block; + right: .75em; + top: 1.05em; /* IE6 only */ + width: 10px; + height: 10px; + text-indent: -999em; + overflow: hidden; + background: url('../images/arrows-ffffff.png') no-repeat -10px -100px; /* 8-bit indexed alpha png. IE6 gets solid image only */ +} +a > .sf-sub-indicator { /* give all except IE6 the correct values */ + top: .8em; + background-position: 0 -100px; /* use translucent arrow for modern browsers*/ +} +/* apply hovers to modern browsers */ +a:focus > .sf-sub-indicator, +a:hover > .sf-sub-indicator, +a:active > .sf-sub-indicator, +li:hover > a > .sf-sub-indicator, +li.sfHover > a > .sf-sub-indicator { + background-position: -10px -100px; /* arrow hovers for modern browsers*/ +} + +/* point right for anchors in subs */ +.sf-menu ul .sf-sub-indicator { background-position: -10px 0; } +.sf-menu ul a > .sf-sub-indicator { background-position: 0 0; } +/* apply hovers to modern browsers */ +.sf-menu ul a:focus > .sf-sub-indicator, +.sf-menu ul a:hover > .sf-sub-indicator, +.sf-menu ul a:active > .sf-sub-indicator, +.sf-menu ul li:hover > a > .sf-sub-indicator, +.sf-menu ul li.sfHover > a > .sf-sub-indicator { + background-position: -10px 0; /* arrow hovers for modern browsers*/ +} + +/*** shadows for all but IE6 ***/ +.sf-shadow ul { + background: url('../images/shadow.png') no-repeat bottom right; + padding: 0 8px 9px 0; + -moz-border-radius-bottomleft: 17px; + -moz-border-radius-topright: 17px; + -webkit-border-top-right-radius: 17px; + -webkit-border-bottom-left-radius: 17px; +} +.sf-shadow ul.sf-shadow-off { + background: transparent; +} diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index bf80277..f6b8c06 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -519,14 +519,14 @@ int HtmlGenerator::generateAtom(const Atom *atom, out() << formattingRightMap()[ATOM_FORMATTING_TELETYPE]; break; case Atom::Code: - out() << "
      "
      +	out() << "
      "
                     << trimmedTrailing(highlightedCode(indent(codeIndent,atom->string()),
                                                        marker,relative))
                     << "
      \n"; break; #ifdef QDOC_QML case Atom::Qml: - out() << "
      "
      +	out() << "
      "
                     << trimmedTrailing(highlightedCode(indent(codeIndent,atom->string()),
                                                        marker,relative))
                     << "
      \n"; @@ -534,7 +534,7 @@ int HtmlGenerator::generateAtom(const Atom *atom, #endif case Atom::CodeNew: out() << "

      you can rewrite it as

      \n" - << "
      "
      +              << "
      "
                     << trimmedTrailing(highlightedCode(indent(codeIndent,atom->string()),
                                                        marker,relative))
                     << "
      \n"; @@ -543,7 +543,7 @@ int HtmlGenerator::generateAtom(const Atom *atom, out() << "

      For example, if you have code like

      \n"; // fallthrough case Atom::CodeBad: - out() << "
      "
      +        out() << "
      "
                     << trimmedTrailing(protectEnc(plainCode(indent(codeIndent,atom->string()))))
                     << "
      \n"; break; @@ -1797,31 +1797,51 @@ void HtmlGenerator::generateHeader(const QString& title, out() << " " << shortVersion << protectEnc(title) << "\n"; - out() << " "; - out() << ""; - out() << ""; - out() << ""; - - //out() << " Qt Reference Documentation"; - out() << " \n"; - out() << " \n"; - out() << " \n"; - out() << "\n"; if (offlineDocs) - out() << "\n"; + { + out() << " "; + out() << "\n"; + out() << "\n"; // narrow mainly for Creator + } else - out() << "\n"; + { + out() << " "; + out() << " \n"; + out() << "\n"; + out() << "\n"; + out() << "\n"; + // jquery functions + out() << " \n"; + out() << " \n"; + // menus and small docs js and css + out() << " \n"; + out() << " \n"; + out() << " "; + out() << " "; + + // syntax highlighter js and css + // out() << " \n"; + // out() << " \n"; + // out() << " \n"; + // out() << " \n"; + // out() << " \n"; + + out() << "\n"; + out() << "\n"; + } #ifdef GENERATE_MAC_REFS if (mainPage) @@ -1863,8 +1883,16 @@ void HtmlGenerator::generateFooter(const Node *node) out() << QString(footer).replace("\\" + COMMAND_VERSION, myTree->version()) << QString(address).replace("\\" + COMMAND_VERSION, myTree->version()); - out() << " \n"; + + if (offlineDocs) + { out() << "\n"; + } + else + { + out() << " \n"; + out() << "\n"; + } out() << "\n"; } @@ -1886,7 +1914,7 @@ void HtmlGenerator::generateBrief(const Node *node, CodeMarker *marker, void HtmlGenerator::generateIncludes(const InnerNode *inner, CodeMarker *marker) { if (!inner->includes().isEmpty()) { - out() << "
      "
      +        out() << "
      "
                     << trimmedTrailing(highlightedCode(indent(codeIndent,
                                                               marker->markedUpIncludes(inner->includes())),
                                                        marker,inner))
      @@ -2110,6 +2138,8 @@ void HtmlGenerator::generateNavigationBar(const NavigationBar& bar,
                   out() << "]\n";
       #endif
               }
      +		if (fake->name() != QString("index.html"))
      +			{
               if (bar.current.begin() != 0) {
                   out() << "[Home]\n";
      @@ -2121,6 +2151,7 @@ void HtmlGenerator::generateNavigationBar(const NavigationBar& bar,
                   out() << "]\n";
               }
               out() << "

      \n"; + } } } #endif diff --git a/tools/qdoc3/test/assistant.qdocconf b/tools/qdoc3/test/assistant.qdocconf index 167bb19..4b52992 100644 --- a/tools/qdoc3/test/assistant.qdocconf +++ b/tools/qdoc3/test/assistant.qdocconf @@ -30,6 +30,7 @@ qhp.Assistant.extraFiles = images/bg_l.png \ images/page.png \ images/page_bg.png \ images/sprites-combined.png \ + images/arrow-down.png \ images/spinner.gif \ images/stylesheet-coffee-plastique.png \ images/taskmenuextension-example.png \ @@ -37,6 +38,7 @@ qhp.Assistant.extraFiles = images/bg_l.png \ images/dynamiclayouts-example.png \ scripts/functions.js \ scripts/jquery.js \ + style/OfflineStyle.css \ style/style_ie6.css \ style/style_ie7.css \ style/style_ie8.css \ diff --git a/tools/qdoc3/test/designer.qdocconf b/tools/qdoc3/test/designer.qdocconf index 48e3ea1..b1f37dc 100644 --- a/tools/qdoc3/test/designer.qdocconf +++ b/tools/qdoc3/test/designer.qdocconf @@ -30,6 +30,7 @@ qhp.Designer.extraFiles = images/bg_l.png \ images/page.png \ images/page_bg.png \ images/sprites-combined.png \ + images/arrow-down.png \ images/spinner.gif \ images/stylesheet-coffee-plastique.png \ images/taskmenuextension-example.png \ @@ -37,6 +38,7 @@ qhp.Designer.extraFiles = images/bg_l.png \ images/dynamiclayouts-example.png \ scripts/functions.js \ scripts/jquery.js \ + style/OfflineStyle.css \ style/style_ie6.css \ style/style_ie7.css \ style/style_ie8.css \ diff --git a/tools/qdoc3/test/linguist.qdocconf b/tools/qdoc3/test/linguist.qdocconf index 8974bd7..26fb55c 100644 --- a/tools/qdoc3/test/linguist.qdocconf +++ b/tools/qdoc3/test/linguist.qdocconf @@ -30,13 +30,15 @@ qhp.Linguist.extraFiles = images/bg_l.png \ images/page.png \ images/page_bg.png \ images/sprites-combined.png \ - images/spinner.gif \ + images/arrow-down.png \ +s images/spinner.gif \ images/stylesheet-coffee-plastique.png \ images/taskmenuextension-example.png \ images/coloreditorfactoryimage.png \ images/dynamiclayouts-example.png \ scripts/functions.js \ scripts/jquery.js \ + style/OfflineStyle.css \ style/style_ie6.css \ style/style_ie7.css \ style/style_ie8.css \ diff --git a/tools/qdoc3/test/qdeclarative.qdocconf b/tools/qdoc3/test/qdeclarative.qdocconf index 0f2e381..74fd802 100644 --- a/tools/qdoc3/test/qdeclarative.qdocconf +++ b/tools/qdoc3/test/qdeclarative.qdocconf @@ -41,6 +41,7 @@ qhp.Qml.extraFiles = images/bg_l.png \ images/page.png \ images/page_bg.png \ images/sprites-combined.png \ + images/arrow-down.png \ images/spinner.png \ images/stylesheet-coffee-plastique.png \ images/taskmenuextension-example.png \ @@ -48,6 +49,7 @@ qhp.Qml.extraFiles = images/bg_l.png \ images/dynamiclayouts-example.png \ scripts/functions.js \ scripts/jquery.js \ + style/OfflineStyle.css \ style/style_ie6.css \ style/style_ie7.css \ style/style_ie8.css \ diff --git a/tools/qdoc3/test/qmake.qdocconf b/tools/qdoc3/test/qmake.qdocconf index ea58059..f069129 100644 --- a/tools/qdoc3/test/qmake.qdocconf +++ b/tools/qdoc3/test/qmake.qdocconf @@ -30,6 +30,7 @@ qhp.qmake.extraFiles = images/bg_l.png \ images/page.png \ images/page_bg.png \ images/sprites-combined.png \ + images/arrow-down.png \ images/spinner.gif \ images/stylesheet-coffee-plastique.png \ images/taskmenuextension-example.png \ @@ -37,6 +38,7 @@ qhp.qmake.extraFiles = images/bg_l.png \ images/dynamiclayouts-example.png \ scripts/functions.js \ scripts/jquery.js \ + style/OfflineStyle.css \ style/style_ie6.css \ style/style_ie7.css \ style/style_ie8.css \ diff --git a/tools/qdoc3/test/qt-build-docs.qdocconf b/tools/qdoc3/test/qt-build-docs.qdocconf index bd363a6..00704ea 100644 --- a/tools/qdoc3/test/qt-build-docs.qdocconf +++ b/tools/qdoc3/test/qt-build-docs.qdocconf @@ -36,6 +36,7 @@ qhp.Qt.extraFiles = index.html \ images/page.png \ images/page_bg.png \ images/sprites-combined.png \ + images/arrow-down.png \ images/spinner.gif \ images/stylesheet-coffee-plastique.png \ images/taskmenuextension-example.png \ @@ -43,6 +44,7 @@ qhp.Qt.extraFiles = index.html \ images/dynamiclayouts-example.png \ scripts/functions.js \ scripts/jquery.js \ + style/OfflineStyle.css \ style/style_ie6.css \ style/style_ie7.css \ style/style_ie8.css \ diff --git a/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf b/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf index caf5f73..712e23f 100644 --- a/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf +++ b/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf @@ -44,6 +44,7 @@ qhp.Qt.extraFiles = index.html \ images/page.png \ images/page_bg.png \ images/sprites-combined.png \ + images/arrow-down.png \ images/spinner.gif \ images/stylesheet-coffee-plastique.png \ images/taskmenuextension-example.png \ diff --git a/tools/qdoc3/test/qt-defines.qdocconf b/tools/qdoc3/test/qt-defines.qdocconf index 3e71d07..9e41d93 100644 --- a/tools/qdoc3/test/qt-defines.qdocconf +++ b/tools/qdoc3/test/qt-defines.qdocconf @@ -20,34 +20,49 @@ codeindent = 1 # See also qhp.Qt.extraFiles extraimages.HTML = qt-logo \ trolltech-logo \ - bg_l.png \ - bg_l_blank.png \ - bg_r.png \ - box_bg.png \ - breadcrumb.png \ - bullet_gt.png \ - bullet_dn.png \ - bullet_sq.png \ - bullet_up.png \ - feedbackground.png \ - horBar.png \ - page.png \ - page_bg.png \ - sprites-combined.png \ - spinner.gif \ - taskmenuextension-example.png \ - coloreditorfactoryimage.png \ - dynamiclayouts-example.png \ - stylesheet-coffee-plastique.png + bg_l.png \ + bg_l_blank.png \ + bg_ll_blank.png \ + bg_ul_blank.png \ + header_bg.png \ + bg_r.png \ + box_bg.png \ + breadcrumb.png \ + bullet_gt.png \ + bullet_dn.png \ + bullet_sq.png \ + bullet_up.png \ + arrow_down.png \ + feedbackground.png \ + horBar.png \ + page.png \ + page_bg.png \ + sprites-combined.png \ + spinner.gif \ + stylesheet-coffee-plastique.png \ + taskmenuextension-example.png \ + coloreditorfactoryimage.png \ + dynamiclayouts-example.png \ # This stuff is used by the new doc format. scriptdirs = $QT_SOURCE_TREE/doc/src/template/scripts styledirs = $QT_SOURCE_TREE/doc/src/template/style scripts.HTML = functions.js \ + shBrushCpp.js \ + shCore.js \ + shLegacy.js \ + narrow.js \ + superfish.js \ jquery.js styles.HTML = style.css \ + shCore.css \ + shThemeDefault.css \ + narrow.css \ + superfish.css \ + superfish_skin.css \ + OfflineStyle.css \ style_ie6.css \ style_ie7.css \ style_ie8.css diff --git a/tools/qdoc3/test/qt-html-templates.qdocconf b/tools/qdoc3/test/qt-html-templates.qdocconf index b72a1eb..60f5fb1 100644 --- a/tools/qdoc3/test/qt-html-templates.qdocconf +++ b/tools/qdoc3/test/qt-html-templates.qdocconf @@ -1,12 +1,19 @@ -HTML.stylesheets = style/style_ie6.css \ +HTML.stylesheets = style/style.css \ + style/OfflineStyle.css \ style/style_ie7.css \ style/style_ie8.css \ - style/style.css + style/style_ie6.css HTML.postheader = "
      \n" \ + "
      \n" \ "
      \n" \ " Home
      \n" \ " Qt Reference Documentation\n" \ + "
      \n" \ + "
      \n" \ + " \n" \ + "
      \n" \ + "
      \n" \ "
      \n" \ "
      \n" \ "
      \n" \ @@ -35,14 +72,14 @@ HTML.postheader = "
      \n" \ "
      \n" \ " Search index:
      \n" \ "
      \n" \ - "
      \n" \ + " \n" \ "
      \n" \ " \n" \ "
      \n" \ "
      \n" \ "
      \n" \ "
      \n" \ - "

      \n" \ + "

      \n" \ " API Lookup

      \n" \ "
      \n" \ "
        \n" \ @@ -56,7 +93,7 @@ HTML.postheader = "
        \n" \ "
        \n" \ "
      \n" \ "
      \n" \ - "

      \n" \ + "

      \n" \ " Qt Topics

      \n" \ "
      \n" \ "
        \n" \ @@ -68,7 +105,7 @@ HTML.postheader = "
        \n" \ "
        \n" \ "
      \n" \ "
      \n" \ - "

      \n" \ + "

      \n" \ " Examples

      \n" \ "
      \n" \ "
        \n" \ @@ -129,7 +166,7 @@ HTML.footer = " \n" \ "
      \n" \ "
      \n" \ "
      \n" \ - "\n" \ " ga.src = (\'https:\' == document.location.protocol ? \'https://ssl\' : \'http://www\') + \'.google-analytics.com/ga.js\';\n" \ " var s = document.getElementsByTagName(\'script\')[0]; s.parentNode.insertBefore(ga, s);\n" \ " })();\n" \ - " -->\n" + "\n" diff --git a/tools/qdoc3/test/qt.qdocconf b/tools/qdoc3/test/qt.qdocconf index 267d536..edf6d92 100644 --- a/tools/qdoc3/test/qt.qdocconf +++ b/tools/qdoc3/test/qt.qdocconf @@ -28,13 +28,17 @@ qhp.Qt.indexRoot = qhp.Qt.extraFiles = index.html \ images/bg_l.png \ images/bg_l_blank.png \ - images/bg_r.png \ + images/bg_ll_blank.png \ + images/bg_ul_blank.png \ + images/header_bg.png \ + images/bg_r.png \ images/box_bg.png \ images/breadcrumb.png \ images/bullet_gt.png \ images/bullet_dn.png \ images/bullet_sq.png \ images/bullet_up.png \ + images/arrow_down.png \ images/feedbackground.png \ images/horBar.png \ images/page.png \ @@ -47,6 +51,17 @@ qhp.Qt.extraFiles = index.html \ images/dynamiclayouts-example.png \ scripts/functions.js \ scripts/jquery.js \ + scripts/shBrushCpp.js \ + scripts/shCore.js \ + scripts/shLegacy.js \ + scripts/narrow.js \ + scripts/superfish.js \ + style/shCore.css \ + style/shThemeDefault.css \ + style/narrow.css \ + style/superfish.css \ + style/superfish_skin.css \ + style/OfflineStyle.css \ style/style_ie6.css \ style/style_ie7.css \ style/style_ie8.css \ -- cgit v0.12 From cd50f97a9f09eece645c9d7d01cb14c04521a915 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy Date: Wed, 2 Jun 2010 15:41:22 +1000 Subject: Split Symbian bearer plugin into three platform specfic plugins Symbian bearer plugin has more functionality when built for newer platforms, so split the plugin into three platform specific plugins, and deploy the correct one depending on what the device supports. Written by: Miikka Heikkinen --- src/plugins/bearer/symbian/3_1/3_1.pro | 4 +++ src/plugins/bearer/symbian/3_2/3_2.pro | 12 +++++++ src/plugins/bearer/symbian/symbian.pri | 30 ++++++++++++++++ src/plugins/bearer/symbian/symbian.pro | 42 ++-------------------- src/plugins/bearer/symbian/symbian_3/symbian_3.pro | 14 ++++++++ src/s60installs/qsymbianbearer.qtplugin | 1 + src/s60installs/s60installs.pro | 25 +++++++++---- 7 files changed, 81 insertions(+), 47 deletions(-) create mode 100644 src/plugins/bearer/symbian/3_1/3_1.pro create mode 100644 src/plugins/bearer/symbian/3_2/3_2.pro create mode 100644 src/plugins/bearer/symbian/symbian.pri create mode 100644 src/plugins/bearer/symbian/symbian_3/symbian_3.pro create mode 100644 src/s60installs/qsymbianbearer.qtplugin diff --git a/src/plugins/bearer/symbian/3_1/3_1.pro b/src/plugins/bearer/symbian/3_1/3_1.pro new file mode 100644 index 0000000..a60d18b --- /dev/null +++ b/src/plugins/bearer/symbian/3_1/3_1.pro @@ -0,0 +1,4 @@ +include(../symbian.pri) + +LIBS += -lapengine +TARGET = $${TARGET}_3_1 diff --git a/src/plugins/bearer/symbian/3_2/3_2.pro b/src/plugins/bearer/symbian/3_2/3_2.pro new file mode 100644 index 0000000..4e5b416 --- /dev/null +++ b/src/plugins/bearer/symbian/3_2/3_2.pro @@ -0,0 +1,12 @@ +include(../symbian.pri) + +exists($${EPOCROOT}epoc32/release/winscw/udeb/cmmanager.lib)| \ +exists($${EPOCROOT}epoc32/release/armv5/lib/cmmanager.lib) { + DEFINES += SNAP_FUNCTIONALITY_AVAILABLE + LIBS += -lcmmanager +} else { + # Fall back to 3_1 implementation on platforms that do not have cmmanager + LIBS += -lapengine +} + +TARGET = $${TARGET}_3_2 diff --git a/src/plugins/bearer/symbian/symbian.pri b/src/plugins/bearer/symbian/symbian.pri new file mode 100644 index 0000000..bfcd9ed --- /dev/null +++ b/src/plugins/bearer/symbian/symbian.pri @@ -0,0 +1,30 @@ +TARGET = qsymbianbearer +include(../../qpluginbase.pri) + +QT += network + +HEADERS += ../symbianengine.h \ + ../qnetworksession_impl.h + +SOURCES += ../symbianengine.cpp \ + ../qnetworksession_impl.cpp \ + ../main.cpp + +TARGET.UID3=0x20021319 + +INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE +symbian-abld:INCLUDEPATH += $$QT_BUILD_TREE/include/QtNetwork/private + +LIBS += -lcommdb \ + -lapsettingshandlerui \ + -lconnmon \ + -lcentralrepository \ + -lesock \ + -linsock \ + -lecom \ + -lefsrv \ + -lnetmeta + +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/bearer +target.path += $$[QT_INSTALL_PLUGINS]/bearer +INSTALLS += target diff --git a/src/plugins/bearer/symbian/symbian.pro b/src/plugins/bearer/symbian/symbian.pro index 4f1e51c..f320eb6 100644 --- a/src/plugins/bearer/symbian/symbian.pro +++ b/src/plugins/bearer/symbian/symbian.pro @@ -1,41 +1,3 @@ -TARGET = qsymbianbearer -include(../../qpluginbase.pri) +TEMPLATE = subdirs -QT += network - -HEADERS += symbianengine.h \ - qnetworksession_impl.h - -SOURCES += symbianengine.cpp \ - qnetworksession_impl.cpp \ - main.cpp - -symbian { - TARGET.UID3=0x20021319 - exists($${EPOCROOT}epoc32/release/winscw/udeb/cmmanager.lib)| \ - exists($${EPOCROOT}epoc32/release/armv5/lib/cmmanager.lib) { - message("Building with SNAP support") - DEFINES += SNAP_FUNCTIONALITY_AVAILABLE - LIBS += -lcmmanager - } else { - message("Building without SNAP support") - LIBS += -lapengine - } -} - -INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE -symbian-abld:INCLUDEPATH += $$QT_BUILD_TREE/include/QtNetwork/private - -LIBS += -lcommdb \ - -lapsettingshandlerui \ - -lconnmon \ - -lcentralrepository \ - -lesock \ - -linsock \ - -lecom \ - -lefsrv \ - -lnetmeta - -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/bearer -target.path += $$[QT_INSTALL_PLUGINS]/bearer -INSTALLS += target +SUBDIRS += 3_1 3_2 symbian_3 \ No newline at end of file diff --git a/src/plugins/bearer/symbian/symbian_3/symbian_3.pro b/src/plugins/bearer/symbian/symbian_3/symbian_3.pro new file mode 100644 index 0000000..455aa67 --- /dev/null +++ b/src/plugins/bearer/symbian/symbian_3/symbian_3.pro @@ -0,0 +1,14 @@ +include(../symbian.pri) + +exists($${EPOCROOT}epoc32/release/winscw/udeb/cmmanager.lib)| \ +exists($${EPOCROOT}epoc32/release/armv5/lib/cmmanager.lib) { + DEFINES += SNAP_FUNCTIONALITY_AVAILABLE + LIBS += -lcmmanager + + exists($$MW_LAYER_PUBLIC_EXPORT_PATH(extendedconnpref.h)) { + DEFINES += OCC_FUNCTIONALITY_AVAILABLE + } +} else { + # Fall back to 3_1 implementation on platforms that do not have cmmanager + LIBS += -lapengine +} diff --git a/src/s60installs/qsymbianbearer.qtplugin b/src/s60installs/qsymbianbearer.qtplugin new file mode 100644 index 0000000..5c45bdd --- /dev/null +++ b/src/s60installs/qsymbianbearer.qtplugin @@ -0,0 +1 @@ +This file is a Qt plugin stub file. The real Qt plugin is located in /sys/bin. Created:2010-06-02T14:02:21 diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro index 90c362b..15d7830 100644 --- a/src/s60installs/s60installs.pro +++ b/src/s60installs/s60installs.pro @@ -51,20 +51,35 @@ symbian: { symbian-abld|symbian-sbsv2 { pluginLocations = $${EPOCROOT}epoc32/release/$(PLATFORM)/$(TARGET) + bearerPluginLocation = $${EPOCROOT}epoc32/release/$(PLATFORM)/$(TARGET) + bearerStubZ = $${EPOCROOT}$${HW_ZDIR}$${QT_PLUGINS_BASE_DIR}/bearer/qsymbianbearer$${QT_LIBINFIX}.qtplugin + BLD_INF_RULES.prj_exports += \ + "qsymbianbearer.qtplugin $$bearerStubZ" \ + "qsymbianbearer.qtplugin /epoc32/winscw/c$${QT_PLUGINS_BASE_DIR}/bearer/qsymbianbearer$${QT_LIBINFIX}.qtplugin" } else { pluginLocations = $$QT_BUILD_TREE/plugins/s60 + bearerPluginLocation = $$QT_BUILD_TREE/plugins/bearer + bearerStubZ = $${PWD}/qsymbianbearer.qtplugin } qts60plugindeployment = \ - "IF package(0x1028315F)" \ + "IF package(0x20022E6D)" \ + " \"$$pluginLocations/qts60plugin_5_0$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_5_0$${QT_LIBINFIX}.dll\"" \ + " \"$$bearerPluginLocation/qsymbianbearer$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qsymbianbearer$${QT_LIBINFIX}.dll\"" \ + "ELSEIF package(0x1028315F)" \ " \"$$pluginLocations/qts60plugin_5_0$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_5_0$${QT_LIBINFIX}.dll\"" \ + " \"$$bearerPluginLocation/qsymbianbearer_3_2$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qsymbianbearer$${QT_LIBINFIX}.dll\"" \ "ELSEIF package(0x102752AE)" \ " \"$$pluginLocations/qts60plugin_3_2$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_3_2$${QT_LIBINFIX}.dll\"" \ + " \"$$bearerPluginLocation/qsymbianbearer_3_2$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qsymbianbearer$${QT_LIBINFIX}.dll\"" \ "ELSEIF package(0x102032BE)" \ " \"$$pluginLocations/qts60plugin_3_1$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_3_1$${QT_LIBINFIX}.dll\"" \ + " \"$$bearerPluginLocation/qsymbianbearer_3_1$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qsymbianbearer$${QT_LIBINFIX}.dll\"" \ "ELSE" \ " \"$$pluginLocations/qts60plugin_5_0$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_5_0$${QT_LIBINFIX}.dll\"" \ - "ENDIF" + " \"$$bearerPluginLocation/qsymbianbearer$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qsymbianbearer$${QT_LIBINFIX}.dll\"" \ + "ENDIF" \ + " \"$$bearerStubZ\" - \"c:$$replace(QT_PLUGINS_BASE_DIR,/,\\)\\bearer\\qsymbianbearer$${QT_LIBINFIX}.qtplugin\" qtlibraries.pkg_postrules += qts60plugindeployment @@ -111,15 +126,11 @@ symbian: { qtbackup.sources = backup_registration.xml qtbackup.path = c:/private/10202D56/import/packages/$$replace(TARGET.UID3, 0x,) - bearer_plugins.path = c:$$QT_PLUGINS_BASE_DIR/bearer - bearer_plugins.sources += $$QT_BUILD_TREE/plugins/bearer/qsymbianbearer$${QT_LIBINFIX}.dll - DEPLOYMENT += qtlibraries \ qtbackup \ imageformats_plugins \ codecs_plugins \ - graphicssystems_plugins \ - bearer_plugins + graphicssystems_plugins contains(QT_CONFIG, svg): { qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtSvg$${QT_LIBINFIX}.dll -- cgit v0.12 From dad9f0db9dbde73aeaccc4f5d27def15066cd618 Mon Sep 17 00:00:00 2001 From: lit-uriy Date: Wed, 2 Jun 2010 10:36:43 +0200 Subject: Fix compilation on WinXP MinGW32; Without this change, I get an error when building plug QODBC: drivers\odbc\qsql_odbc.cpp: In function 'QString qODBCWarn(const QODBCPrivate*, int*)': drivers\odbc\qsql_odbc.cpp:264: error: 'class QStringBuilder, QString>, QLatin1Char>, QString>' has no member named 'simplified' drivers\odbc\qsql_odbc.cpp: In function 'QString qODBCWarn(const QODBCDriverPrivate*, int*)': drivers\odbc\qsql_odbc.cpp:270: error: 'class QStringBuilder, QString>' has no member named 'simplified' drivers\odbc\qsql_odbc.cpp: In function 'QString qGetStringData(void*, int, int, bool)': drivers\odbc\qsql_odbc.cpp:403: warning: comparison between signed and unsigned integer expressions drivers\odbc\qsql_odbc.cpp:444: warning: comparison between signed and unsigned integer expressions Env: Windows XP SP2 MinGW (GCC 4.4.0 from trolls ftp) Merge-request: 2402 Reviewed-by: Andreas Aardal Hanssen --- src/sql/drivers/odbc/qsql_odbc.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sql/drivers/odbc/qsql_odbc.cpp b/src/sql/drivers/odbc/qsql_odbc.cpp index 6fd1725..9a35ac5 100644 --- a/src/sql/drivers/odbc/qsql_odbc.cpp +++ b/src/sql/drivers/odbc/qsql_odbc.cpp @@ -259,14 +259,14 @@ static QString qWarnODBCHandle(int handleType, SQLHANDLE handle, int *nativeCode static QString qODBCWarn(const QODBCPrivate* odbc, int *nativeCode = 0) { - return (qWarnODBCHandle(SQL_HANDLE_ENV, odbc->dpEnv()) + QLatin1Char(' ') + return QString(qWarnODBCHandle(SQL_HANDLE_ENV, odbc->dpEnv()) + QLatin1Char(' ') + qWarnODBCHandle(SQL_HANDLE_DBC, odbc->dpDbc()) + QLatin1Char(' ') + qWarnODBCHandle(SQL_HANDLE_STMT, odbc->hStmt, nativeCode)).simplified(); } static QString qODBCWarn(const QODBCDriverPrivate* odbc, int *nativeCode = 0) { - return (qWarnODBCHandle(SQL_HANDLE_ENV, odbc->hEnv) + QLatin1Char(' ') + return QString(qWarnODBCHandle(SQL_HANDLE_ENV, odbc->hEnv) + QLatin1Char(' ') + qWarnODBCHandle(SQL_HANDLE_DBC, odbc->hDbc, nativeCode)).simplified(); } -- cgit v0.12 From 0f16c7ce8dcd6f4905d14875088c55148e41366a Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Tue, 1 Jun 2010 16:50:55 +0200 Subject: QSslCertificate: support large serial numbers We were calling an OpenSSL function that returned a long for the serial number; sometimes serial numbers are too big to fit into a long (up to 20 octets). In that case, do not convert the serial number to decimal, but just output the hexadecimal value. Reviewed-by: Zeno Albisser Task-number: QTBUG-9973 --- src/network/ssl/qsslcertificate.cpp | 23 ++++++++++++++++++---- .../more-certificates/cert-large-serial-number.pem | 14 +++++++++++++ tests/auto/qsslcertificate/tst_qsslcertificate.cpp | 13 ++++++++++++ 3 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 tests/auto/qsslcertificate/more-certificates/cert-large-serial-number.pem diff --git a/src/network/ssl/qsslcertificate.cpp b/src/network/ssl/qsslcertificate.cpp index fd647e2..31c5ed1 100644 --- a/src/network/ssl/qsslcertificate.cpp +++ b/src/network/ssl/qsslcertificate.cpp @@ -259,13 +259,28 @@ QByteArray QSslCertificate::version() const /*! Returns the certificate's serial number string in decimal format. + In case the serial number cannot be converted to decimal format + (i.e. if it is bigger than 4294967295, which means it does not fit into 4 bytes), + its hexadecimal version is returned. */ QByteArray QSslCertificate::serialNumber() const { - if (d->serialNumberString.isEmpty() && d->x509) - d->serialNumberString = - QByteArray::number(qlonglong(q_ASN1_INTEGER_get(d->x509->cert_info->serialNumber))); - + if (d->serialNumberString.isEmpty() && d->x509) { + ASN1_INTEGER *serialNumber = d->x509->cert_info->serialNumber; + // if we cannot convert to a long, just output the hexadecimal number + if (serialNumber->length > 4) { + QByteArray hexString; + hexString.reserve(serialNumber->length * 3); + for (int a = 0; a < serialNumber->length; ++a) { + hexString += QByteArray::number(serialNumber->data[a], 16).rightJustified(2, '0'); + hexString += ':'; + } + hexString.chop(1); + d->serialNumberString = hexString; + } else { + d->serialNumberString = QByteArray::number(qlonglong(q_ASN1_INTEGER_get(serialNumber))); + } + } return d->serialNumberString; } diff --git a/tests/auto/qsslcertificate/more-certificates/cert-large-serial-number.pem b/tests/auto/qsslcertificate/more-certificates/cert-large-serial-number.pem new file mode 100644 index 0000000..ecb6c35 --- /dev/null +++ b/tests/auto/qsslcertificate/more-certificates/cert-large-serial-number.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICGjCCAYMCFAECAwQFBgcICRCqu8zd7v8XGBkgMA0GCSqGSIb3DQEBBQUAMEwx +CzAJBgNVBAYTAkdCMRIwEAYDVQQIEwlCZXJrc2hpcmUxEDAOBgNVBAcTB05ld2J1 +cnkxFzAVBgNVBAoTDk15IENvbXBhbnkgTHRkMB4XDTEwMDYwMTE1MDI0MVoXDTEx +MDYwMTE1MDI0MVowTDELMAkGA1UEBhMCR0IxEjAQBgNVBAgTCUJlcmtzaGlyZTEQ +MA4GA1UEBxMHTmV3YnVyeTEXMBUGA1UEChMOTXkgQ29tcGFueSBMdGQwgZ8wDQYJ +KoZIhvcNAQEBBQADgY0AMIGJAoGBAM2q22/WNMmn8cC+5EEYGeICySLmp9W6Ay6e +KHr0Xxp3X3epETuPfvAuxp7rOtkS18EMUegkUj8jw0IMEcbyHKFC/rTCaYOt93Cx +GBXMIChiMPAsFeYzGa/D6xzAkfcRaJRQ+Ek3CDLXPnXfo7xpABXezYcPXAJrgsgB +fWrwHdxzAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtlScqSn4IHFLRiQYQdfOgsPi +wdqD1MPZEniQE0Xp8McZ7kuYbGgdEqzeVgMHqitlzkNNtTz+2u37CbFNXDGCTy5D +2JCgZxaAWNkh1w+4VB91HfMwEU0MqvAO7SB31FwbKNaB3gVnua++NL1cAkujyRny +yR3PatYZCfESQ7oZgds= +-----END CERTIFICATE----- diff --git a/tests/auto/qsslcertificate/tst_qsslcertificate.cpp b/tests/auto/qsslcertificate/tst_qsslcertificate.cpp index c76c11f..505b867 100644 --- a/tests/auto/qsslcertificate/tst_qsslcertificate.cpp +++ b/tests/auto/qsslcertificate/tst_qsslcertificate.cpp @@ -109,6 +109,7 @@ private slots: void task256066toPem(); void nulInCN(); void nulInSan(); + void largeSerialNumber(); // ### add tests for certificate bundles (multiple certificates concatenated into a single // structure); both PEM and DER formatted #endif @@ -786,6 +787,18 @@ void tst_QSslCertificate::nulInSan() QCOMPARE(dnssan, QString::fromLatin1(realSAN, sizeof realSAN - 1)); } +void tst_QSslCertificate::largeSerialNumber() +{ + QList certList = + QSslCertificate::fromPath(SRCDIR "more-certificates/cert-large-serial-number.pem"); + + QCOMPARE(certList.size(), 1); + + const QSslCertificate &cert = certList.at(0); + QVERIFY(!cert.isNull()); + QCOMPARE(cert.serialNumber(), QByteArray("01:02:03:04:05:06:07:08:09:10:aa:bb:cc:dd:ee:ff:17:18:19:20")); +} + #endif // QT_NO_OPENSSL QTEST_MAIN(tst_QSslCertificate) -- cgit v0.12 From 417f3a4ece9403d1eb37ce0ecdf74cf670bdd0ff Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Wed, 2 Jun 2010 11:56:19 +0200 Subject: QNAM: Improve child deletion order Delete the QNetworkReply children first because they could access the QAbstractNetworkCache that is also a child of the QNetworkAccessManager. Reviewed-by: brad --- src/network/access/qnetworkaccessmanager.cpp | 9 +++ .../qnetworkdiskcache/tst_qnetworkdiskcache.cpp | 77 ++++++++++++++++++++++ 2 files changed, 86 insertions(+) diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp index 42c64fb..837cf66 100644 --- a/src/network/access/qnetworkaccessmanager.cpp +++ b/src/network/access/qnetworkaccessmanager.cpp @@ -464,6 +464,15 @@ QNetworkAccessManager::~QNetworkAccessManager() #ifndef QT_NO_NETWORKPROXY delete d_func()->proxyFactory; #endif + + // Delete the QNetworkReply children first. + // Else a QAbstractNetworkCache might get deleted in ~QObject + // before a QNetworkReply that accesses the QAbstractNetworkCache + // object in its destructor. + qDeleteAll(findChildren()); + // The other children will be deleted in this ~QObject + // FIXME instead of this "hack" make the QNetworkReplyImpl + // properly watch the cache deletion, e.g. via a QWeakPointer. } #ifndef QT_NO_NETWORKPROXY diff --git a/tests/auto/qnetworkdiskcache/tst_qnetworkdiskcache.cpp b/tests/auto/qnetworkdiskcache/tst_qnetworkdiskcache.cpp index 8ce10fb..5bbe8f6 100644 --- a/tests/auto/qnetworkdiskcache/tst_qnetworkdiskcache.cpp +++ b/tests/auto/qnetworkdiskcache/tst_qnetworkdiskcache.cpp @@ -78,6 +78,56 @@ private slots: void oldCacheVersionFile(); void sync(); + + void crashWhenParentingCache(); +}; + +// FIXME same as in tst_qnetworkreply.cpp .. could be unified +// Does not work for POST/PUT! +class MiniHttpServer: public QTcpServer +{ + Q_OBJECT +public: + QTcpSocket *client; // always the last one that was received + QByteArray dataToTransmit; + QByteArray receivedData; + bool doClose; + bool multiple; + int totalConnections; + + MiniHttpServer(const QByteArray &data) : client(0), dataToTransmit(data), doClose(true), multiple(false), totalConnections(0) + { + listen(); + connect(this, SIGNAL(newConnection()), this, SLOT(doAccept())); + } + +public slots: + void doAccept() + { + client = nextPendingConnection(); + client->setParent(this); + ++totalConnections; + connect(client, SIGNAL(readyRead()), this, SLOT(readyReadSlot())); + } + + void readyReadSlot() + { + receivedData += client->readAll(); + int doubleEndlPos = receivedData.indexOf("\r\n\r\n"); + + if (doubleEndlPos != -1) { + // multiple requests incoming. remove the bytes of the current one + if (multiple) + receivedData.remove(0, doubleEndlPos+4); + + client->write(dataToTransmit); + if (doClose) { + client->disconnectFromHost(); + disconnect(client, 0, this, 0); + client = 0; + } + } + } }; // Subclass that exposes the protected functions. @@ -581,6 +631,33 @@ public: Runner *other; }; +void tst_QNetworkDiskCache::crashWhenParentingCache() +{ + // the trick here is to not send the complete response + // but some data. So we get a readyRead() and it gets tried + // to be saved to the cache + QByteArray data("HTTP/1.0 200 OK\r\nCache-Control: max-age=300\r\nAge: 1\r\nContent-Length: 5\r\n\r\n123"); + MiniHttpServer server(data); + + QNetworkAccessManager *manager = new QNetworkAccessManager(); + QNetworkDiskCache *diskCache = new QNetworkDiskCache(manager); // parent to qnam! + // we expect the temp dir to be cleaned at some point anyway + diskCache->setCacheDirectory(QDir::tempPath() + "/cacheDir_" + QCoreApplication::applicationPid()); + manager->setCache(diskCache); + + QUrl url("http://127.0.0.1:" + QString::number(server.serverPort())); + QNetworkRequest request(url); + // request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysNetwork); + QNetworkReply *reply = manager->get(request); // new reply is parented to qnam + + // wait for readyRead of reply! + connect(reply, SIGNAL(readyRead()), &QTestEventLoop::instance(), SLOT(exitLoop())); + QTestEventLoop::instance().enterLoop(5); + QVERIFY(!QTestEventLoop::instance().timeout()); + + delete manager; // crashed before.. +} + void tst_QNetworkDiskCache::sync() { // This tests would be a nice to have, but is currently not supported. -- cgit v0.12 From 7644a925dab5400280228cd2f7381030368c6913 Mon Sep 17 00:00:00 2001 From: Jens Bache-Wiig Date: Wed, 2 Jun 2010 12:58:17 +0200 Subject: More Pixmap cache key optimizations Reviewed-by: ogoffart --- src/gui/image/qiconloader.cpp | 16 +++++------ src/gui/painting/qbrush.cpp | 7 +++-- src/gui/painting/qdrawutil.cpp | 5 +++- src/gui/painting/qpaintengine_x11.cpp | 7 ++++- src/gui/painting/qpainter.cpp | 8 +++--- src/gui/styles/qgtkpainter.cpp | 51 +++++++++++++++++++++-------------- src/gui/styles/qgtkstyle.cpp | 2 +- src/gui/styles/qplastiquestyle.cpp | 37 ++++++++++++------------- src/gui/styles/qwindowsstyle.cpp | 5 ++-- 9 files changed, 79 insertions(+), 59 deletions(-) diff --git a/src/gui/image/qiconloader.cpp b/src/gui/image/qiconloader.cpp index a515ef8..34f40a9 100644 --- a/src/gui/image/qiconloader.cpp +++ b/src/gui/image/qiconloader.cpp @@ -63,6 +63,8 @@ #include #endif +#include + QT_BEGIN_NAMESPACE Q_GLOBAL_STATIC(QIconLoader, iconLoaderInstance) @@ -488,14 +490,12 @@ QPixmap PixmapEntry::pixmap(const QSize &size, QIcon::Mode mode, QIcon::State st basePixmap.load(filename); int actualSize = qMin(size.width(), size.height()); - QString key = QLatin1String("$qt_theme_") - + QString::number(basePixmap.cacheKey(), 16) - + QLatin1Char('_') - + QString::number(mode) - + QLatin1Char('_') - + QString::number(qApp->palette().cacheKey(), 16) - + QLatin1Char('_') - + QString::number(actualSize); + + QString key = QLatin1Literal("$qt_theme_") + % HexString(basePixmap.cacheKey()) + % HexString(mode) + % HexString(qApp->palette().cacheKey()) + % HexString(actualSize); QPixmap cachedPixmap; if (QPixmapCache::find(key, &cachedPixmap)) { diff --git a/src/gui/painting/qbrush.cpp b/src/gui/painting/qbrush.cpp index b468b11..d3061d8 100644 --- a/src/gui/painting/qbrush.cpp +++ b/src/gui/painting/qbrush.cpp @@ -48,6 +48,7 @@ #include "qline.h" #include "qdebug.h" #include +#include "private/qstylehelper_p.h" QT_BEGIN_NAMESPACE @@ -96,9 +97,11 @@ const uchar *qt_patternForBrush(int brushStyle, bool invert) QPixmap qt_pixmapForBrush(int brushStyle, bool invert) { + QPixmap pm; - QString key = QLatin1String("$qt-brush$") + QString::number(brushStyle) - + QString::number((int)invert); + QString key = QLatin1Literal("$qt-brush$") + % HexString(brushStyle) + % QLatin1Char(invert ? '1' : '0'); if (!QPixmapCache::find(key, pm)) { pm = QBitmap::fromData(QSize(8, 8), qt_patternForBrush(brushStyle, invert), QImage::Format_MonoLSB); diff --git a/src/gui/painting/qdrawutil.cpp b/src/gui/painting/qdrawutil.cpp index 3ce95ef..11ea6d5 100644 --- a/src/gui/painting/qdrawutil.cpp +++ b/src/gui/painting/qdrawutil.cpp @@ -48,6 +48,7 @@ #include #include #include +#include QT_BEGIN_NAMESPACE @@ -1018,7 +1019,9 @@ void qDrawItem(QPainter *p, Qt::GUIStyle gs, ; #ifndef QT_NO_IMAGE_HEURISTIC_MASK } else { // color pixmap, no mask - QString k = QString::fromLatin1("$qt-drawitem-%1").arg(pm.cacheKey()); + QString k = QLatin1Literal("$qt-drawitem") + % HexString(pm.cacheKey()); + if (!QPixmapCache::find(k, pm)) { pm = pm.createHeuristicMask(); pm.setMask((QBitmap&)pm); diff --git a/src/gui/painting/qpaintengine_x11.cpp b/src/gui/painting/qpaintengine_x11.cpp index aef8b80..b8ad9b3 100644 --- a/src/gui/painting/qpaintengine_x11.cpp +++ b/src/gui/painting/qpaintengine_x11.cpp @@ -79,6 +79,8 @@ #include #endif +#include + QT_BEGIN_NAMESPACE extern Drawable qt_x11Handle(const QPaintDevice *pd); @@ -224,7 +226,10 @@ static const uchar base_dither_matrix[DITHER_SIZE][DITHER_SIZE] = { static QPixmap qt_patternForAlpha(uchar alpha, int screen) { QPixmap pm; - QString key = QLatin1String("$qt-alpha-brush$") + QString::number(alpha) + QString::number(screen); + QString key = QLatin1Literal("$qt-alpha-brush$") + % HexString(alpha) + % HexString(screen); + if (!QPixmapCache::find(key, pm)) { // #### why not use a mono image here???? QImage pattern(DITHER_SIZE, DITHER_SIZE, QImage::Format_ARGB32); diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index e460b7b..97f754d 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -72,6 +72,7 @@ #include #include #include +#include QT_BEGIN_NAMESPACE @@ -6245,10 +6246,9 @@ static QPixmap generateWavyPixmap(qreal maxRadius, const QPen &pen) { const qreal radiusBase = qMax(qreal(1), maxRadius); - QString key = QLatin1String("WaveUnderline-"); - key += pen.color().name(); - key += QLatin1Char('-'); - key += QString::number(radiusBase); + QString key = QLatin1Literal("WaveUnderline-") + % pen.color().name() + % HexString(radiusBase); QPixmap pixmap; if (QPixmapCache::find(key, pixmap)) diff --git a/src/gui/styles/qgtkpainter.cpp b/src/gui/styles/qgtkpainter.cpp index 79c53e9..0217a39 100644 --- a/src/gui/styles/qgtkpainter.cpp +++ b/src/gui/styles/qgtkpainter.cpp @@ -241,8 +241,10 @@ void QGtkPainter::paintBoxGap(GtkWidget *gtkWidget, const gchar* part, if (rect.height() > maxHeight && (gap_side == GTK_POS_TOP || gap_side == GTK_POS_BOTTOM)) rect.setHeight(2 * border + 1); - QString gapExtras = QString(QLS("s %0 w %1 g %2")).arg(gap_side).arg(width).arg(x); - QString pixmapName = uniqueName(QLS(part), state, shadow, rect.size(), gtkWidget) + gapExtras; + QString pixmapName = uniqueName(QLS(part), state, shadow, rect.size(), gtkWidget) + % HexString(gap_side) + % HexString(width) + % HexString(x); if (!m_usePixmapCache || !QPixmapCache::find(pixmapName, cache)) { DRAW_TO_CACHE(QGtkStylePrivate::gtk_paint_box_gap (style, @@ -307,7 +309,7 @@ void QGtkPainter::paintBox(GtkWidget *gtkWidget, const gchar* part, rect.setHeight(2 * border + 1); QString pixmapName = uniqueName(QLS(part), state, shadow, - rect.size(), gtkWidget) + pmKey; + rect.size(), gtkWidget) % pmKey; if (!m_usePixmapCache || !QPixmapCache::find(pixmapName, cache)) { DRAW_TO_CACHE(QGtkStylePrivate::gtk_paint_box (style, @@ -357,9 +359,11 @@ void QGtkPainter::paintHline(GtkWidget *gtkWidget, const gchar* part, return; QPixmap cache; - QString hLineExtras = QString(QLS("%0 %1 %2")).arg(x1).arg(x2).arg(y); QString pixmapName = uniqueName(QLS(part), state, GTK_SHADOW_NONE, rect.size(), gtkWidget) - + hLineExtras + pmKey; + % HexString(x1) + % HexString(x2) + % HexString(y) + % pmKey; if (!m_usePixmapCache || !QPixmapCache::find(pixmapName, cache)) { DRAW_TO_CACHE(QGtkStylePrivate::gtk_paint_hline (style, pixmap, @@ -384,9 +388,12 @@ void QGtkPainter::paintVline(GtkWidget *gtkWidget, const gchar* part, return; QPixmap cache; - QString vLineExtras = QString(QLS("%0 %1 %2")).arg(y1).arg(y2).arg(x); - QString pixmapName = uniqueName(QLS(part), state, GTK_SHADOW_NONE, rect.size(), - gtkWidget) + vLineExtras +pmKey; + QString pixmapName = uniqueName(QLS(part), state, GTK_SHADOW_NONE, rect.size(), gtkWidget) + % HexString(y1) + % HexString(y2) + % HexString(x) + % pmKey; + if (!m_usePixmapCache || !QPixmapCache::find(pixmapName, cache)) { DRAW_TO_CACHE(QGtkStylePrivate::gtk_paint_vline (style, pixmap, @@ -412,8 +419,10 @@ void QGtkPainter::paintExpander(GtkWidget *gtkWidget, return; QPixmap cache; - QString pixmapName = uniqueName(QLS(part), state, GTK_SHADOW_NONE, rect.size(), - gtkWidget) + QString::number(expander_state) + pmKey; + QString pixmapName = uniqueName(QLS(part), state, GTK_SHADOW_NONE, rect.size(), gtkWidget) + % HexString(expander_state) + % pmKey; + if (!m_usePixmapCache || !QPixmapCache::find(pixmapName, cache)) { DRAW_TO_CACHE(QGtkStylePrivate::gtk_paint_expander (style, pixmap, state, NULL, @@ -436,7 +445,7 @@ void QGtkPainter::paintFocus(GtkWidget *gtkWidget, const gchar* part, return; QPixmap cache; - QString pixmapName = uniqueName(QLS(part), state, GTK_SHADOW_NONE, rect.size(), gtkWidget) + pmKey; + QString pixmapName = uniqueName(QLS(part), state, GTK_SHADOW_NONE, rect.size(), gtkWidget) % pmKey; if (!m_usePixmapCache || !QPixmapCache::find(pixmapName, cache)) { DRAW_TO_CACHE(QGtkStylePrivate::gtk_paint_focus (style, pixmap, state, NULL, gtkWidget, @@ -461,7 +470,7 @@ void QGtkPainter::paintResizeGrip(GtkWidget *gtkWidget, const gchar* part, return; QPixmap cache; - QString pixmapName = uniqueName(QLS(part), state, shadow, rect.size(), gtkWidget) + pmKey; + QString pixmapName = uniqueName(QLS(part), state, shadow, rect.size(), gtkWidget) % pmKey; if (!m_usePixmapCache || !QPixmapCache::find(pixmapName, cache)) { DRAW_TO_CACHE(QGtkStylePrivate::gtk_paint_resize_grip (style, pixmap, state, NULL, gtkWidget, @@ -486,8 +495,9 @@ void QGtkPainter::paintArrow(GtkWidget *gtkWidget, const gchar* part, return; QPixmap cache; - QString pixmapName = uniqueName(QLS(part), state, shadow, rect.size()) + - QString::number((int)arrow_type) + pmKey; + QString pixmapName = uniqueName(QLS(part), state, shadow, rect.size()) + % HexString(arrow_type) + % pmKey; GdkRectangle gtkCliprect = {0, 0, rect.width(), rect.height()}; int xOffset = m_cliprect.isValid() ? arrowrect.x() - m_cliprect.x() : 0; @@ -518,7 +528,8 @@ void QGtkPainter::paintHandle(GtkWidget *gtkWidget, const gchar* part, const QRe QPixmap cache; QString pixmapName = uniqueName(QLS(part), state, shadow, rect.size()) - + QString::number(orientation); + % HexString(orientation); + if (!m_usePixmapCache || !QPixmapCache::find(pixmapName, cache)) { DRAW_TO_CACHE(QGtkStylePrivate::gtk_paint_handle (style, pixmap, @@ -546,7 +557,7 @@ void QGtkPainter::paintSlider(GtkWidget *gtkWidget, const gchar* part, const QRe return; QPixmap cache; - QString pixmapName = uniqueName(QLS(part), state, shadow, rect.size(), gtkWidget) + pmKey; + QString pixmapName = uniqueName(QLS(part), state, shadow, rect.size(), gtkWidget) % pmKey; if (!m_usePixmapCache || !QPixmapCache::find(pixmapName, cache)) { DRAW_TO_CACHE(QGtkStylePrivate::gtk_paint_slider (style, pixmap, @@ -577,7 +588,7 @@ void QGtkPainter::paintShadow(GtkWidget *gtkWidget, const gchar* part, QRect r = rect; QPixmap cache; - QString pixmapName = uniqueName(QLS(part), state, shadow, rect.size()) + pmKey; + QString pixmapName = uniqueName(QLS(part), state, shadow, rect.size()) % pmKey; if (!m_usePixmapCache || !QPixmapCache::find(pixmapName, cache)) { DRAW_TO_CACHE(QGtkStylePrivate::gtk_paint_shadow(style, pixmap, state, shadow, NULL, gtkWidget, part, 0, 0, rect.width(), rect.height())); @@ -596,7 +607,7 @@ void QGtkPainter::paintFlatBox(GtkWidget *gtkWidget, const gchar* part, return; QRect r = rect; QPixmap cache; - QString pixmapName = uniqueName(QLS(part), state, shadow, rect.size()) + pmKey; + QString pixmapName = uniqueName(QLS(part), state, shadow, rect.size()) % pmKey; if (!m_usePixmapCache || !QPixmapCache::find(pixmapName, cache)) { DRAW_TO_CACHE(QGtkStylePrivate::gtk_paint_flat_box (style, pixmap, @@ -623,8 +634,8 @@ void QGtkPainter::paintExtention(GtkWidget *gtkWidget, QRect r = rect; QPixmap cache; - QString pixmapName = uniqueName(QLS(part), state, shadow, rect.size(), gtkWidget); - pixmapName += QString::number(gap_pos); + QString pixmapName = uniqueName(QLS(part), state, shadow, rect.size(), gtkWidget) + % HexString(gap_pos); if (!m_usePixmapCache || !QPixmapCache::find(pixmapName, cache)) { DRAW_TO_CACHE(QGtkStylePrivate::gtk_paint_extension (style, pixmap, state, shadow, diff --git a/src/gui/styles/qgtkstyle.cpp b/src/gui/styles/qgtkstyle.cpp index 9d6dc9a..5465c7b 100644 --- a/src/gui/styles/qgtkstyle.cpp +++ b/src/gui/styles/qgtkstyle.cpp @@ -692,7 +692,7 @@ void QGtkStyle::drawPrimitive(PrimitiveElement element, // thin rectangular images const int pmSize = 64; const int border = proxy()->pixelMetric(PM_DefaultFrameWidth, option, widget); - const QString pmKey = QString(QLS("windowframe %0")).arg(option->state); + const QString pmKey = QLatin1Literal("windowframe") % HexString(option->state); QPixmap pixmap; QRect pmRect(QPoint(0,0), QSize(pmSize, pmSize)); diff --git a/src/gui/styles/qplastiquestyle.cpp b/src/gui/styles/qplastiquestyle.cpp index c8711f6..20d9bd9 100644 --- a/src/gui/styles/qplastiquestyle.cpp +++ b/src/gui/styles/qplastiquestyle.cpp @@ -488,7 +488,9 @@ static void qBrushSetAlphaF(QBrush *brush, qreal alpha) // Modify the texture - ridiculously expensive. QPixmap texture = brush->texture(); QPixmap pixmap; - QString name = QString::fromLatin1("qbrushtexture-alpha-%1-%2").arg(alpha).arg(texture.cacheKey()); + QString name = QLatin1Literal("qbrushtexture-alpha") + % HexString(alpha) + % HexString(texture.cacheKey()); if (!QPixmapCache::find(name, pixmap)) { QImage image = texture.toImage(); QRgb *rgb = reinterpret_cast(image.bits()); @@ -549,7 +551,10 @@ static QBrush qBrushLight(QBrush brush, int light) // Modify the texture - ridiculously expensive. QPixmap texture = brush.texture(); QPixmap pixmap; - QString name = QString::fromLatin1("qbrushtexture-light-%1-%2").arg(light).arg(texture.cacheKey()); + QString name = QLatin1Literal("qbrushtexture-light") + % HexString(light) + % HexString(texture.cacheKey()); + if (!QPixmapCache::find(name, pixmap)) { QImage image = texture.toImage(); QRgb *rgb = reinterpret_cast(image.bits()); @@ -608,7 +613,10 @@ static QBrush qBrushDark(QBrush brush, int dark) // Modify the texture - ridiculously expensive. QPixmap texture = brush.texture(); QPixmap pixmap; - QString name = QString::fromLatin1("qbrushtexture-dark-%1-%2").arg(dark).arg(brush.texture().cacheKey()); + QString name = QLatin1Literal("qbrushtexture-dark") + % HexString(dark) + % HexString(texture.cacheKey()); + if (!QPixmapCache::find(name, pixmap)) { QImage image = texture.toImage(); QRgb *rgb = reinterpret_cast(image.bits()); @@ -732,8 +740,12 @@ static QColor mergedColors(const QColor &colorA, const QColor &colorB, int facto static void qt_plastique_draw_gradient(QPainter *painter, const QRect &rect, const QColor &gradientStart, const QColor &gradientStop) { - QString gradientName; - gradientName.sprintf("%dx%d-%x-%x", rect.width(), rect.height(), gradientStart.rgba(), gradientStop.rgba()); + QString gradientName = QLatin1Literal("qplastique-g") + % HexString(rect.width()) + % HexString(rect.height()) + % HexString(gradientStart.rgba()) + % HexString(gradientStop.rgba()); + QPixmap cache; QPainter *p = painter; QRect r = rect; @@ -1092,14 +1104,6 @@ void QPlastiqueStyle::drawPrimitive(PrimitiveElement element, const QStyleOption Q_ASSERT(option); QColor borderColor = option->palette.background().color().darker(178); - QColor gradientStartColor = option->palette.button().color().lighter(104); - QColor gradientStopColor = option->palette.button().color().darker(105); - QColor highlightedGradientStartColor = option->palette.button().color().lighter(101); - QColor highlightedGradientStopColor = mergedColors(option->palette.button().color(), option->palette.highlight().color(), 85); - QColor highlightedBaseGradientStartColor = option->palette.base().color(); - QColor highlightedBaseGradientStopColor = mergedColors(option->palette.base().color().darker(105), option->palette.highlight().color(), 70); - QColor highlightedDarkInnerBorderColor = mergedColors(option->palette.button().color(), option->palette.highlight().color(), 35); - QColor highlightedLightInnerBorderColor = mergedColors(option->palette.button().color(), option->palette.highlight().color(), 58); QColor alphaCornerColor; if (widget) { // ### backgroundrole/foregroundrole should be part of the style option @@ -1107,13 +1111,7 @@ void QPlastiqueStyle::drawPrimitive(PrimitiveElement element, const QStyleOption } else { alphaCornerColor = mergedColors(option->palette.background().color(), borderColor); } - QColor alphaInnerColor = mergedColors(highlightedLightInnerBorderColor, gradientStartColor); - QColor alphaInnerColorNoHover = mergedColors(borderColor, gradientStartColor); QColor alphaTextColor = mergedColors(option->palette.background().color(), option->palette.text().color()); - QColor alphaLightTextColor = mergedColors(option->palette.background().color().lighter(250), option->palette.text().color().lighter(250)); - QColor lightShadow = option->palette.button().color().lighter(105); - QColor shadowGradientStartColor = option->palette.button().color().darker(115); - QColor shadow = shadowGradientStartColor; switch (element) { case PE_IndicatorButtonDropDown: @@ -2057,7 +2055,6 @@ void QPlastiqueStyle::drawControl(ControlElement element, const QStyleOption *op bool reverse = (tab->direction == Qt::RightToLeft); int lowerTop = selected ? 0 : 3; // to make the selected tab bigger than the rest - QRect adjustedRect; bool atEnd = (tab->position == QStyleOptionTab::End) || onlyTab; bool atBeginning = ((tab->position == QStyleOptionTab::Beginning) || onlyTab) && !leftCornerWidget; diff --git a/src/gui/styles/qwindowsstyle.cpp b/src/gui/styles/qwindowsstyle.cpp index 0314c6f..579dd0b 100644 --- a/src/gui/styles/qwindowsstyle.cpp +++ b/src/gui/styles/qwindowsstyle.cpp @@ -1388,8 +1388,9 @@ void QWindowsStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QRect r = opt->rect; int size = qMin(r.height(), r.width()); QPixmap pixmap; - QString pixmapName = QStyleHelper::uniqueName(QLatin1String("$qt_ia-") + QLatin1String(metaObject()->className()), opt, QSize(size, size)) - + QLatin1Char('-') + QString::number(pe); + QString pixmapName = QStyleHelper::uniqueName(QLatin1String("$qt_ia-") + % QLatin1String(metaObject()->className()), opt, QSize(size, size)) + % HexString(pe); if (!QPixmapCache::find(pixmapName, pixmap)) { int border = size/5; int sqsize = 2*(size/2); -- cgit v0.12 From 0fc84aa48ef03c1910dc344e204e7267470305c4 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Wed, 2 Jun 2010 13:23:35 +0200 Subject: Fix failing bypassShaping autotest on the Mac OS X This test relies on integer metrics, so we need to force them for Mac OS X. Reviewed-by: Jocelyn Turcotte --- tests/auto/qfontmetrics/tst_qfontmetrics.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/auto/qfontmetrics/tst_qfontmetrics.cpp b/tests/auto/qfontmetrics/tst_qfontmetrics.cpp index 81e064e..2567a41 100644 --- a/tests/auto/qfontmetrics/tst_qfontmetrics.cpp +++ b/tests/auto/qfontmetrics/tst_qfontmetrics.cpp @@ -223,6 +223,7 @@ void tst_QFontMetrics::averageCharWidth() void tst_QFontMetrics::bypassShaping() { QFont f; + f.setStyleStrategy(QFont::ForceIntegerMetrics); QFontMetrics fm(f); QString text = " A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z"; int textWidth = fm.width(text, -1, Qt::TextBypassShaping); -- cgit v0.12 From 8f517a60c93ec64478772b4cb2ce7d2cd2967647 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Wed, 2 Jun 2010 13:30:18 +0300 Subject: Fix Qt.sis content for Symbian^3 builds Some build-time omissions from Qt_template.pkg are done, so qt.sis built on Symbian^3 will not work properly on most S60 3.x & 5.0 devices. This should not be an issue, as Symbian^3 builds are expected to be configured to use OpenVG anyway. If necessary, it is still possible to build Qt.sis compatible with older platforms also on Symbian^3 if you fake the S60 version when calling qmake, e.g.: 'qmake S60_VERSION=5.0' Reviewed-by: Shane Kearns --- mkspecs/common/symbian/symbian-mmp.conf | 16 +++++----- mkspecs/common/symbian/symbian.conf | 3 +- src/s60installs/s60installs.pro | 53 ++++++++++++++++++++------------- 3 files changed, 44 insertions(+), 28 deletions(-) diff --git a/mkspecs/common/symbian/symbian-mmp.conf b/mkspecs/common/symbian/symbian-mmp.conf index 1ab228f..b0d17be 100644 --- a/mkspecs/common/symbian/symbian-mmp.conf +++ b/mkspecs/common/symbian/symbian-mmp.conf @@ -38,15 +38,17 @@ INCLUDEPATH = \ # RVCT seems to do this automatically, but WINSCW compiler does not, so add it here. MMP_RULES += "USERINCLUDE ." -exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.0.sis )|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.0.sis) { +exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.2.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.2.sis) { + S60_VERSION = 5.2 symbian3 +} else:exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.1.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.1.sis) { + S60_VERSION = 5.1 symbian2 +} else:exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.0.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.0.sis) { S60_VERSION = 5.0 +} else:exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v3.2.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v3.2.sis) { + S60_VERSION = 3.2 } else { - exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v3.2.sis )|exists($${EPOCROOT}epoc32/data/z/system/install/series60v3.2.sis) { - S60_VERSION = 3.2 - } else { - S60_VERSION = 3.1 - MMP_RULES -= PAGED BYTEPAIRCOMPRESSTARGET - } + S60_VERSION = 3.1 + MMP_RULES -= PAGED BYTEPAIRCOMPRESSTARGET } QMAKE_CXXFLAGS_FAST_VFP.ARMCC = --fpmode fast diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf index 89034ca..b8bfd7c 100644 --- a/mkspecs/common/symbian/symbian.conf +++ b/mkspecs/common/symbian/symbian.conf @@ -119,13 +119,14 @@ load(symbian/platform_paths) default_deployment.pkg_prerules += pkg_depends_webkit pkg_depends_qt pkg_platform_dependencies -# Supports S60 3.0, 3.1, 3.2 and 5.0 by default +# Supports S60 3.0, 3.1, 3.2, 5.0 and Symbian^3 by default pkg_platform_dependencies = \ "; Default HW/platform dependencies" \ "[0x101F7961],0,0,0,{\"S60ProductID\"}" \ "[0x102032BE],0,0,0,{\"S60ProductID\"}" \ "[0x102752AE],0,0,0,{\"S60ProductID\"}" \ "[0x1028315F],0,0,0,{\"S60ProductID\"}" \ + "[0x20022e6d],0,0,0,{\"S60ProductID\"}" \ " " DEPLOYMENT += default_deployment diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro index 90c362b..136f270 100644 --- a/src/s60installs/s60installs.pro +++ b/src/s60installs/s60installs.pro @@ -11,21 +11,24 @@ symbian: { isEmpty(QT_LIBINFIX) { TARGET.UID3 = 0x2001E61C - - # sqlite3 is expected to be already found on phone if infixed configuration is built. - BLD_INF_RULES.prj_exports += \ - "sqlite3.sis $${EPOCROOT}epoc32/data/qt/sis/sqlite3.sis" \ - "sqlite3_selfsigned.sis $${EPOCROOT}epoc32/data/qt/sis/sqlite3_selfsigned.sis" - symbian-abld|symbian-sbsv2 { - sqlitedeployment = \ - "; Deploy sqlite onto phone that does not have it already" \ - "@\"$${EPOCROOT}epoc32/data/qt/sis/sqlite3.sis\", (0x2002af5f)" - } else { - sqlitedeployment = \ - "; Deploy sqlite onto phone that does not have it already" \ - "@\"$${PWD}/sqlite3.sis\", (0x2002af5f)" + + # Sqlite3 is expected to be already found on phone if infixed configuration is built. + # It is also expected that devices newer than those based on S60 5.0 all have sqlite3.dll. + contains(S60_VERSION, 3.1)|contains(S60_VERSION, 3.2)|contains(S60_VERSION, 5.0) { + BLD_INF_RULES.prj_exports += \ + "sqlite3.sis $${EPOCROOT}epoc32/data/qt/sis/sqlite3.sis" \ + "sqlite3_selfsigned.sis $${EPOCROOT}epoc32/data/qt/sis/sqlite3_selfsigned.sis" + symbian-abld|symbian-sbsv2 { + sqlitedeployment = \ + "; Deploy sqlite onto phone that does not have it already" \ + "@\"$${EPOCROOT}epoc32/data/qt/sis/sqlite3.sis\", (0x2002af5f)" + } else { + sqlitedeployment = \ + "; Deploy sqlite onto phone that does not have it already" \ + "@\"$${PWD}/sqlite3.sis\", (0x2002af5f)" + } + qtlibraries.pkg_postrules += sqlitedeployment } - qtlibraries.pkg_postrules += sqlitedeployment } else { # Always use experimental UID for infixed configuration to avoid UID clash TARGET.UID3 = 0xE001E61C @@ -81,12 +84,16 @@ symbian: { qtlibraries.pkg_prerules = vendorinfo qtlibraries.pkg_prerules += "; Dependencies of Qt libraries" - qtlibraries.pkg_prerules += "(0x20013851), 1, 5, 1, {\"PIPS Installer\"}" - contains(QT_CONFIG, openssl) | contains(QT_CONFIG, openssl-linked) { - qtlibraries.pkg_prerules += "(0x200110CB), 1, 5, 1, {\"Open C LIBSSL Common\"}" - } - contains(CONFIG, stl) { - qtlibraries.pkg_prerules += "(0x2000F866), 1, 0, 0, {\"Standard C++ Library Common\"}" + + # It is expected that Symbian^3 and newer phones will have sufficiently new OpenC already installed + contains(S60_VERSION, 3.1)|contains(S60_VERSION, 3.2)|contains(S60_VERSION, 5.0) { + qtlibraries.pkg_prerules += "(0x20013851), 1, 5, 1, {\"PIPS Installer\"}" + contains(QT_CONFIG, openssl) | contains(QT_CONFIG, openssl-linked) { + qtlibraries.pkg_prerules += "(0x200110CB), 1, 5, 1, {\"Open C LIBSSL Common\"}" + } + contains(CONFIG, stl) { + qtlibraries.pkg_prerules += "(0x2000F866), 1, 0, 0, {\"Standard C++ Library Common\"}" + } } qtlibraries.pkg_prerules += "(0x2002af5f), 0, 5, 0, {\"sqlite3\"}" @@ -149,6 +156,12 @@ symbian: { contains(QT_CONFIG, openvg) { qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtOpenVG$${QT_LIBINFIX}.dll graphicssystems_plugins.sources += $$QT_BUILD_TREE/plugins/graphicssystems/qvggraphicssystem$${QT_LIBINFIX}.dll + # OpenVG requires Symbian^3 or later + pkg_platform_dependencies -= \ + "[0x101F7961],0,0,0,{\"S60ProductID\"}" \ + "[0x102032BE],0,0,0,{\"S60ProductID\"}" \ + "[0x102752AE],0,0,0,{\"S60ProductID\"}" \ + "[0x1028315F],0,0,0,{\"S60ProductID\"}" } contains(QT_CONFIG, multimedia){ -- cgit v0.12 From 85695ff1643be61eb0ef0dbae89c46ebad06c84d Mon Sep 17 00:00:00 2001 From: Kim Motoyoshi Kalland Date: Wed, 2 Jun 2010 13:50:13 +0200 Subject: Added static version of QGLFramebufferObject::release(). The function is marked internal for now. Reviewed-by: Gunnar --- src/opengl/qglframebufferobject.cpp | 30 ++++++++++++++++++++++++++++++ src/opengl/qglframebufferobject.h | 2 ++ 2 files changed, 32 insertions(+) diff --git a/src/opengl/qglframebufferobject.cpp b/src/opengl/qglframebufferobject.cpp index 890b029..deffc20 100644 --- a/src/opengl/qglframebufferobject.cpp +++ b/src/opengl/qglframebufferobject.cpp @@ -1024,6 +1024,36 @@ QPaintEngine *QGLFramebufferObject::paintEngine() const } /*! + \fn bool QGLFramebufferObject::bindDefault() + \internal + + Switches rendering back to the default, windowing system provided + framebuffer. + Returns true upon success, false otherwise. + + \sa bind(), release() +*/ +bool QGLFramebufferObject::bindDefault() +{ + QGLContext *ctx = const_cast(QGLContext::currentContext()); + + if (ctx) { + bool ext_detected = (QGLExtensions::glExtensions() & QGLExtensions::FramebufferObject); + if (!ext_detected || (ext_detected && !qt_resolve_framebufferobject_extensions(ctx))) + return false; + + ctx->d_ptr->current_fbo = ctx->d_ptr->default_fbo; + glBindFramebuffer(GL_FRAMEBUFFER_EXT, ctx->d_ptr->default_fbo); +#ifdef QT_DEBUG + } else { + qWarning("QGLFramebufferObject::bindDefault() called without current context."); +#endif + } + + return ctx != 0; +} + +/*! \fn bool QGLFramebufferObject::hasOpenGLFramebufferObjects() Returns true if the OpenGL \c{GL_EXT_framebuffer_object} extension diff --git a/src/opengl/qglframebufferobject.h b/src/opengl/qglframebufferobject.h index 306b6ff..6ff6645 100644 --- a/src/opengl/qglframebufferobject.h +++ b/src/opengl/qglframebufferobject.h @@ -108,6 +108,8 @@ public: QPaintEngine *paintEngine() const; GLuint handle() const; + static bool bindDefault(); + static bool hasOpenGLFramebufferObjects(); void drawTexture(const QRectF &target, GLuint textureId, GLenum textureTarget = GL_TEXTURE_2D); -- cgit v0.12 From fbce5c6d20571717d67c2b8934f047af035e5b06 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Wed, 2 Jun 2010 14:35:03 +0200 Subject: my changes --- dist/changes-4.7.0 | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/dist/changes-4.7.0 b/dist/changes-4.7.0 index dbb3add..95cff56 100644 --- a/dist/changes-4.7.0 +++ b/dist/changes-4.7.0 @@ -50,6 +50,15 @@ Third party components QtCore ------ + - QString + * Added QString(const QChar *) constructor. + NOTE: This is source-incompatible for the bogus QString(0) case. + * Removed internal but exported qt_winQString2MB() and qt_winMB2QString() + * Added setRawData() function (also revived the one in QByteArray) + * Various performance improvements + - QList + * Added reserve() function + * Various performance improvements - QMetaType * Significantly improved performance of the type() function * [QTBUG-8235] Support QEasingCurve as a built in metatype. @@ -295,12 +304,7 @@ Qt for Windows CE - [QTBUG-5492] Made widgetbox-filter match on class names, too. - Linguist - - Linguist GUI - - - lupdate - - - lrelease - + * The GNU gettext PO format support has been improved - rcc @@ -316,6 +320,29 @@ Qt for Windows CE compatibility option -limit-xpm-linelength. - qmake + * Removed remainder of tmake compatibility + * Removed remainder of mac9 mode + * Removed MSVC6 generator + * Removed makespecs for MSVC.NET and MSVC2002 + * Deprecated -win32/-unix/-macx options, following various cleanups + relating to platform support. Cross-building makespecs should now + specify a TARGET_PLATFORM. + * Started to warn about use of various constructs: + - non-lowercased replace $$function() calls + - deprecated variables + - unescaped backslashes. + NOTE: You should use UNIX path separators where possible. qmake + will warn about unnecessary Windows path separators in the future. + * Removed expansion of qmake- & environment variables in some unexpected + cases (double expansions, command line options, etc.) + * Removed splitting at semicolons of literal values which were assigned + directly to INCLUDEPATH and DEPENDPATH + * Removed UNIX-specific exporting of all qmake variables to the environment + of subprocesses invoked via system(). You should put specific assignments + into the invoked shell command instead. + * Started to short-cut evaluation inside if() tests, consistently with + evaluation outside if(). + * Added possibility to request project recursion from within a PRO file - configure -- cgit v0.12 From 857b2618f3e7574bdff605554b72e6f286ce666a Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Wed, 2 Jun 2010 13:53:14 +0100 Subject: Avoid mmap() on symbian os QResource and QTranslator use mmap() on unix as an optimisation. Symbian OS doesn't support memory mapped files, so mmap() is actually worse than opening and reading the file yourself. So, switched off mmap() usage on symbian. Reviewed-by: mread --- src/corelib/io/qresource.cpp | 2 +- src/corelib/kernel/qtranslator.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/corelib/io/qresource.cpp b/src/corelib/io/qresource.cpp index 8e76e9e..ce9c57e 100644 --- a/src/corelib/io/qresource.cpp +++ b/src/corelib/io/qresource.cpp @@ -928,7 +928,7 @@ public: } }; -#if defined(Q_OS_UNIX) +#if defined(Q_OS_UNIX) && !defined(Q_OS_SYMBIAN) #define QT_USE_MMAP #endif diff --git a/src/corelib/kernel/qtranslator.cpp b/src/corelib/kernel/qtranslator.cpp index ca54c6c..1321b14 100644 --- a/src/corelib/kernel/qtranslator.cpp +++ b/src/corelib/kernel/qtranslator.cpp @@ -56,7 +56,7 @@ #include "qhash.h" #include "qtranslator_p.h" -#if defined(Q_OS_UNIX) +#if defined(Q_OS_UNIX) && !defined(Q_OS_SYMBIAN) #define QT_USE_MMAP #include "private/qcore_unix_p.h" #endif -- cgit v0.12 From a1c8fc04c17cfbf0060c81d442ffa2440a796112 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Wed, 2 Jun 2010 15:39:40 +0200 Subject: write PO files without duplicated message ids encoding the qt context as a magic comment was no particularly good idea, as it provided no disambiguation as far as gettext is concerned. so instead encode the context into msgctxt. Task-number: QTBUG-10307 --- tests/auto/linguist/lconvert/data/test20.ts | 12 ++++++ tools/linguist/shared/po.cpp | 67 ++++++++++++++++++++++++++--- 2 files changed, 72 insertions(+), 7 deletions(-) diff --git a/tests/auto/linguist/lconvert/data/test20.ts b/tests/auto/linguist/lconvert/data/test20.ts index 542cdee..f042edf 100644 --- a/tests/auto/linguist/lconvert/data/test20.ts +++ b/tests/auto/linguist/lconvert/data/test20.ts @@ -147,4 +147,16 @@ + + Bizarre ~ and | context~ + + just something + + + + something else + comment with | and ~ and so~ + + + diff --git a/tools/linguist/shared/po.cpp b/tools/linguist/shared/po.cpp index 99a8751..6a1d426 100644 --- a/tools/linguist/shared/po.cpp +++ b/tools/linguist/shared/po.cpp @@ -353,6 +353,29 @@ static void slurpComment(QByteArray &msg, const QList &lines, int & --l; } +static void splitContext(QByteArray *comment, QByteArray *context) +{ + char *data = comment->data(); + int len = comment->size(); + int sep = -1, j = 0; + + for (int i = 0; i < len; i++, j++) { + if (data[i] == '~' && i + 1 < len) + i++; + else if (data[i] == '|') + sep = j; + data[j] = data[i]; + } + if (sep >= 0) { + QByteArray tmp = comment->mid(sep + 1, j - sep - 1); + comment->truncate(sep); + *context = *comment; + *comment = tmp; + } else { + comment->truncate(j); + } +} + static QString makePoHeader(const QString &str) { return QLatin1String("po-header-") + str.toLower().replace(QLatin1Char('-'), QLatin1Char('_')); @@ -411,6 +434,7 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd) lines.append(QByteArray()); int l = 0, lastCmtLine = -1; + bool qtContexts = false; PoItem item; for (; l != lines.size(); ++l) { QByteArray line = lines.at(l); @@ -449,6 +473,8 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd) translator.setLanguageCode(QString::fromLatin1(hdrValue)); } else if (hdrName == "X-Source-Language") { translator.setSourceLanguageCode(QString::fromLatin1(hdrValue)); + } else if (hdrName == "X-Qt-Contexts") { + qtContexts = (hdrValue == "true"); } else if (hdrName == "Plural-Forms") { pluralForms = hdrValue; } else if (hdrName == "MIME-Version") { @@ -498,7 +524,7 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd) // Keep in sync with savePO static const char * const dfltHdrs[] = { "MIME-Version", "Content-Type", "Content-Transfer-Encoding", - "Plural-Forms", "X-Language", "X-Source-Language" + "Plural-Forms", "X-Language", "X-Source-Language", "X-Qt-Contexts" }; uint cdh = 0; for (int cho = 0; cho < hdrOrder.length(); cho++) { @@ -596,7 +622,7 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd) slurpComment(item.translatorComments, lines, l); break; case '.': - if (line.startsWith("#. ts-context ")) { + if (line.startsWith("#. ts-context ")) { // legacy item.context = line.mid(14); } else if (line.startsWith("#. ts-id ")) { item.id = line.mid(9); @@ -615,6 +641,8 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd) codec->toUnicode(extra); } else if (line.startsWith("#| msgctxt ")) { item.oldTscomment = slurpEscapedString(lines, l, 11, "#| ", cd); + if (qtContexts) + splitContext(&item.oldTscomment, &item.context); } else { cd.appendError(QString(QLatin1String("PO-format parse error in line %1: '%2'\n")) .arg(l + 1).arg(codec->toUnicode(lines[l]))); @@ -647,6 +675,8 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd) lastCmtLine = l; } else if (line.startsWith("msgctxt ")) { item.tscomment = slurpEscapedString(lines, l, 8, QByteArray(), cd); + if (qtContexts) + splitContext(&item.tscomment, &item.context); } else if (line.startsWith("msgid ")) { item.msgId = slurpEscapedString(lines, l, 6, QByteArray(), cd); } else if (line.startsWith("msgid_plural ")) { @@ -672,6 +702,16 @@ static void addPoHeader(Translator::ExtraData &headers, QStringList &hdrOrder, headers[makePoHeader(qName)] = value; } +static QString escapeComment(const QString &in, bool escape) +{ + QString out = in; + if (escape) { + out.replace(QLatin1Char('~'), QLatin1String("~~")); + out.replace(QLatin1Char('|'), QLatin1String("~|")); + } + return out; +} + bool savePO(const Translator &translator, QIODevice &dev, ConversionData &cd) { QString str_format = QLatin1String("-format"); @@ -680,6 +720,13 @@ bool savePO(const Translator &translator, QIODevice &dev, ConversionData &cd) QTextStream out(&dev); out.setCodec(cd.m_outputCodec.isEmpty() ? QByteArray("UTF-8") : cd.m_outputCodec); + bool qtContexts = false; + foreach (const TranslatorMessage &msg, translator.messages()) + if (!msg.context().isEmpty()) { + qtContexts = true; + break; + } + QString cmt = translator.extra(QLatin1String("po-header_comment")); if (!cmt.isEmpty()) out << cmt << '\n'; @@ -703,6 +750,8 @@ bool savePO(const Translator &translator, QIODevice &dev, ConversionData &cd) } if (!translator.sourceLanguageCode().isEmpty()) addPoHeader(headers, hdrOrder, "X-Source-Language", translator.sourceLanguageCode()); + if (qtContexts) + addPoHeader(headers, hdrOrder, "X-Qt-Contexts", QLatin1String("true")); QString hdrStr; foreach (const QString &hdr, hdrOrder) { hdrStr += hdr; @@ -721,8 +770,6 @@ bool savePO(const Translator &translator, QIODevice &dev, ConversionData &cd) if (!msg.extraComment().isEmpty()) out << poEscapedLines(QLatin1String("#."), true, msg.extraComment()); - if (!msg.context().isEmpty()) - out << QLatin1String("#. ts-context ") << msg.context() << '\n'; if (!msg.id().isEmpty()) out << QLatin1String("#. ts-id ") << msg.id() << '\n'; @@ -770,15 +817,21 @@ bool savePO(const Translator &translator, QIODevice &dev, ConversionData &cd) QString prefix = QLatin1String("#| "); if (!msg.oldComment().isEmpty()) - out << poEscapedString(prefix, QLatin1String("msgctxt"), noWrap, msg.oldComment()); + out << poEscapedString(prefix, QLatin1String("msgctxt"), noWrap, + escapeComment(msg.oldComment(), qtContexts)); if (!msg.oldSourceText().isEmpty()) out << poEscapedString(prefix, QLatin1String("msgid"), noWrap, msg.oldSourceText()); QString plural = msg.extra(QLatin1String("po-old_msgid_plural")); if (!plural.isEmpty()) out << poEscapedString(prefix, QLatin1String("msgid_plural"), noWrap, plural); prefix = QLatin1String((msg.type() == TranslatorMessage::Obsolete) ? "#~ " : ""); - if (!msg.comment().isEmpty()) - out << poEscapedString(prefix, QLatin1String("msgctxt"), noWrap, msg.comment()); + if (!msg.context().isEmpty()) + out << poEscapedString(prefix, QLatin1String("msgctxt"), noWrap, + escapeComment(msg.context(), true) + QLatin1Char('|') + + escapeComment(msg.comment(), true)); + else if (!msg.comment().isEmpty()) + out << poEscapedString(prefix, QLatin1String("msgctxt"), noWrap, + escapeComment(msg.comment(), qtContexts)); out << poEscapedString(prefix, QLatin1String("msgid"), noWrap, msg.sourceText()); if (!msg.isPlural()) { QString transl = msg.translation(); -- cgit v0.12 From 889e13652e00ba64060e7b62ed3377ea04d44faa Mon Sep 17 00:00:00 2001 From: Mike FABIAN Date: Wed, 2 Jun 2010 15:51:45 +0200 Subject: Changes: add patch for artificial emboldening Details: Fixes http://bugreports.qt.nokia.com/browse/QTBUG-10596 Patch taken from https://bugzilla.novell.com/show_bug.cgi?id=374066 https://bugzillafiles.novell.org/attachment.cgi?id=232442 and http://code.google.com/p/gentoo-taiwan/source/browse/trunk/x11-libs/qt-gui/files/synthetic-bold-4.5.diff?spec=svn298&r=298 and slightly edited. Moving the two lines concerning the underlining is unrelated to the emboldening but seems to make sense anyway, the comment "//underline metrics" seems to be misplaced before the "if (FT_IS_SCALABLE(face)) {| The hunk: @@ -789,6 +794,7 @@ QFontEngineFT::Glyph *QFontEngineFT::loadGlyphMetrics(QGlyphSet *set, uint glyph } FT_GlyphSlot slot = face->glyph; + if (embolden) FT_GlyphSlot_Embolden(slot); int left = slot->metrics.horiBearingX; int right = slot->metrics.horiBearingX + slot->metrics.width; int top = slot->metrics.horiBearingY; seems to be logical but it is apparently not used when running my test program, i.e. synthetic emboldening in my test program works even without this hunk. Merge-request: 635 Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/gui/text/qfontengine_ft.cpp | 15 ++++++++++++--- src/gui/text/qfontengine_ft_p.h | 1 + 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp index 449dffd..9056012 100644 --- a/src/gui/text/qfontengine_ft.cpp +++ b/src/gui/text/qfontengine_ft.cpp @@ -58,6 +58,7 @@ #include #include FT_FREETYPE_H #include FT_OUTLINE_H +#include FT_SYNTHESIS_H #include FT_TRUETYPE_TABLES_H #include FT_TYPE1_TABLES_H #include FT_GLYPH_H @@ -617,6 +618,7 @@ QFontEngineFT::QFontEngineFT(const QFontDef &fd) cache_cost = 100; kerning_pairs_loaded = false; transform = false; + embolden = false; antialias = true; freetype = 0; default_load_flags = FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH; @@ -679,10 +681,7 @@ bool QFontEngineFT::init(FaceId faceId, bool antialias, GlyphFormat format) FT_Face face = lockFace(); - //underline metrics if (FT_IS_SCALABLE(face)) { - line_thickness = QFixed::fromFixed(FT_MulFix(face->underline_thickness, face->size->metrics.y_scale)); - underline_position = QFixed::fromFixed(-FT_MulFix(face->underline_position, face->size->metrics.y_scale)); bool fake_oblique = (fontDef.style != QFont::StyleNormal) && !(face->style_flags & FT_STYLE_FLAG_ITALIC); if (fake_oblique) matrix.xy = 0x10000*3/10; @@ -690,6 +689,12 @@ bool QFontEngineFT::init(FaceId faceId, bool antialias, GlyphFormat format) freetype->matrix = matrix; if (fake_oblique) transform = true; + // fake bold + if ((fontDef.weight == QFont::Bold) && !(face->style_flags & FT_STYLE_FLAG_BOLD)) + embolden = true; + // underline metrics + line_thickness = QFixed::fromFixed(FT_MulFix(face->underline_thickness, face->size->metrics.y_scale)); + underline_position = QFixed::fromFixed(-FT_MulFix(face->underline_position, face->size->metrics.y_scale)); } else { // copied from QFontEngineQPF // ad hoc algorithm @@ -789,6 +794,7 @@ QFontEngineFT::Glyph *QFontEngineFT::loadGlyphMetrics(QGlyphSet *set, uint glyph } FT_GlyphSlot slot = face->glyph; + if (embolden) FT_GlyphSlot_Embolden(slot); int left = slot->metrics.horiBearingX; int right = slot->metrics.horiBearingX + slot->metrics.width; int top = slot->metrics.horiBearingY; @@ -934,6 +940,7 @@ QFontEngineFT::Glyph *QFontEngineFT::loadGlyph(QGlyphSet *set, uint glyph, Glyph return 0; FT_GlyphSlot slot = face->glyph; + if (embolden) FT_GlyphSlot_Embolden(slot); FT_Library library = qt_getFreetype(); info.xOff = TRUNC(ROUND(slot->advance.x)); @@ -1209,6 +1216,8 @@ int QFontEngineFT::synthesized() const int s = 0; if ((fontDef.style != QFont::StyleNormal) && !(freetype->face->style_flags & FT_STYLE_FLAG_ITALIC)) s = SynthesizedItalic; + if ((fontDef.weight == QFont::Bold) && !(freetype->face->style_flags & FT_STYLE_FLAG_BOLD)) + s |= SynthesizedBold; if (fontDef.stretch != 100 && FT_IS_SCALABLE(freetype->face)) s |= SynthesizedStretch; return s; diff --git a/src/gui/text/qfontengine_ft_p.h b/src/gui/text/qfontengine_ft_p.h index 12b7da8..2f05a8b 100644 --- a/src/gui/text/qfontengine_ft_p.h +++ b/src/gui/text/qfontengine_ft_p.h @@ -304,6 +304,7 @@ protected: bool antialias; bool transform; + bool embolden; SubpixelAntialiasingType subpixelType; int lcdFilterType; bool canUploadGlyphsToServer; -- cgit v0.12 From 25763b746eca93d53b209ab232d323b9ed3ee465 Mon Sep 17 00:00:00 2001 From: Thomas Zander Date: Wed, 2 Jun 2010 16:20:00 +0200 Subject: Fix a corner case where a gesture sometimes doesn't start. gestures are re-used per widget / recognizer and in the case of a gesture getting cancelled we sometimes didn't properly 'start' the gesture on new incoming events since the manager forgot to mark it as not running. Add a test case and a one line fix. Reviewed-by: Denis Task-number: QTBUG-11076 --- src/gui/kernel/qgesturemanager.cpp | 1 + tests/auto/gestures/tst_gestures.cpp | 166 +++++++++++++++++++++++++++++++++++ 2 files changed, 167 insertions(+) diff --git a/src/gui/kernel/qgesturemanager.cpp b/src/gui/kernel/qgesturemanager.cpp index 43facef..a81d4e4 100644 --- a/src/gui/kernel/qgesturemanager.cpp +++ b/src/gui/kernel/qgesturemanager.cpp @@ -684,6 +684,7 @@ void QGestureManager::recycle(QGesture *gesture) if (recognizer) { gesture->setGestureCancelPolicy(QGesture::CancelNone); recognizer->reset(gesture); + m_activeGestures.remove(gesture); } else { cleanupGesturesForRemovedRecognizer(gesture); } diff --git a/tests/auto/gestures/tst_gestures.cpp b/tests/auto/gestures/tst_gestures.cpp index 4a9f1d1..7c1170c 100644 --- a/tests/auto/gestures/tst_gestures.cpp +++ b/tests/auto/gestures/tst_gestures.cpp @@ -49,6 +49,7 @@ #include #include #include +#include #include #include @@ -358,6 +359,7 @@ private slots: void viewportCoordinates(); void partialGesturePropagation(); void testQGestureRecognizerCleanup(); + void testReuseCanceledGestures(); }; tst_Gestures::tst_Gestures() @@ -2069,5 +2071,169 @@ void tst_Gestures::testQGestureRecognizerCleanup() delete w; } +class ReuseCanceledGesturesRecognizer : public QGestureRecognizer +{ +public: + enum Type { + RmbAndCancelAllType, + LmbType + }; + + ReuseCanceledGesturesRecognizer(Type type) : m_type(type) {} + + QGesture *create(QObject *) { + QGesture *g = new QGesture; + return g; + } + + Result recognize(QGesture *gesture, QObject *, QEvent *event) { + QMouseEvent *me = static_cast(event); + Qt::MouseButton mouseButton(m_type == LmbType ? Qt::LeftButton : Qt::RightButton); + + switch(event->type()) { + case QEvent::MouseButtonPress: + if (me->button() == mouseButton && gesture->state() == Qt::NoGesture) { + gesture->setHotSpot(QPointF(me->globalPos())); + if (m_type == RmbAndCancelAllType) + gesture->setGestureCancelPolicy(QGesture::CancelAllInContext); + return QGestureRecognizer::TriggerGesture; + } + break; + case QEvent::MouseButtonRelease: + if (me->button() == mouseButton && gesture->state() > Qt::NoGesture) + return QGestureRecognizer::FinishGesture; + default: + break; + } + return QGestureRecognizer::Ignore; + } +private: + Type m_type; +}; + +class ReuseCanceledGesturesWidget : public QGraphicsWidget +{ + public: + ReuseCanceledGesturesWidget(Qt::GestureType gestureType = Qt::TapGesture, QGraphicsItem *parent = 0) + : QGraphicsWidget(parent), + m_gestureType(gestureType), + m_started(0), m_updated(0), m_canceled(0), m_finished(0) + { + } + + bool event(QEvent *event) { + if (event->type() == QEvent::Gesture) { + QGesture *gesture = static_cast(event)->gesture(m_gestureType); + if (gesture) { + switch(gesture->state()) { + case Qt::GestureStarted: m_started++; break; + case Qt::GestureUpdated: m_updated++; break; + case Qt::GestureFinished: m_finished++; break; + case Qt::GestureCanceled: m_canceled++; break; + default: break; + } + } + return true; + } + if (event->type() == QEvent::GraphicsSceneMousePress) { + return true; + } + return QGraphicsWidget::event(event); + } + + int started() { return m_started; } + int updated() { return m_updated; } + int finished() { return m_finished; } + int canceled() { return m_canceled; } + + private: + Qt::GestureType m_gestureType; + int m_started; + int m_updated; + int m_canceled; + int m_finished; +}; + +void tst_Gestures::testReuseCanceledGestures() +{ + Qt::GestureType cancellingGestureTypeId = QGestureRecognizer::registerRecognizer( + new ReuseCanceledGesturesRecognizer(ReuseCanceledGesturesRecognizer::RmbAndCancelAllType)); + Qt::GestureType tapGestureTypeId = QGestureRecognizer::registerRecognizer( + new ReuseCanceledGesturesRecognizer(ReuseCanceledGesturesRecognizer::LmbType)); + + QMainWindow mw; + mw.setWindowFlags(Qt::X11BypassWindowManagerHint); + QGraphicsView *gv = new QGraphicsView(&mw); + QGraphicsScene *scene = new QGraphicsScene; + + gv->setScene(scene); + scene->setSceneRect(0,0,100,100); + + // Create container and add to the scene + ReuseCanceledGesturesWidget *container = new ReuseCanceledGesturesWidget; + container->grabGesture(cancellingGestureTypeId); // << container grabs canceling gesture + + // Create widget and add to the scene + ReuseCanceledGesturesWidget *target = new ReuseCanceledGesturesWidget(tapGestureTypeId, container); + target->grabGesture(tapGestureTypeId); + + container->setGeometry(scene->sceneRect()); + + scene->addItem(container); + + mw.setCentralWidget(gv); + + // Viewport needs to grab all gestures that widgets in scene grab + gv->viewport()->grabGesture(cancellingGestureTypeId); + gv->viewport()->grabGesture(tapGestureTypeId); + + mw.show(); + QTest::qWaitForWindowShown(&mw); + + QPoint targetPos(gv->mapFromScene(target->mapToScene(target->rect().center()))); + targetPos = gv->viewport()->mapFromParent(targetPos); + + // "Tap" starts on child widget + QTest::mousePress(gv->viewport(), Qt::LeftButton, 0, targetPos); + QCOMPARE(target->started(), 1); + QCOMPARE(target->updated(), 0); + QCOMPARE(target->finished(), 0); + QCOMPARE(target->canceled(), 0); + + // Canceling gesture starts on parent + QTest::mousePress(gv->viewport(), Qt::RightButton, 0, targetPos); + QCOMPARE(target->started(), 1); + QCOMPARE(target->updated(), 0); + QCOMPARE(target->finished(), 0); + QCOMPARE(target->canceled(), 1); // <- child canceled + + // Canceling gesture ends + QTest::mouseRelease(gv->viewport(), Qt::RightButton, 0, targetPos); + QCOMPARE(target->started(), 1); + QCOMPARE(target->updated(), 0); + QCOMPARE(target->finished(), 0); + QCOMPARE(target->canceled(), 1); + + // Tap would end if not canceled + QTest::mouseRelease(gv->viewport(), Qt::LeftButton, 0, targetPos); + QCOMPARE(target->started(), 1); + QCOMPARE(target->updated(), 0); + QCOMPARE(target->finished(), 0); + QCOMPARE(target->canceled(), 1); + + // New "Tap" starts + QTest::mousePress(gv->viewport(), Qt::LeftButton, 0, targetPos); + QCOMPARE(target->started(), 2); + QCOMPARE(target->updated(), 0); + QCOMPARE(target->finished(), 0); + QCOMPARE(target->canceled(), 1); + + QTest::mouseRelease(gv->viewport(), Qt::LeftButton, 0, targetPos); + QCOMPARE(target->started(), 2); + QCOMPARE(target->updated(), 0); + QCOMPARE(target->finished(), 1); + QCOMPARE(target->canceled(), 1); +} + QTEST_MAIN(tst_Gestures) #include "tst_gestures.moc" -- cgit v0.12 From 8287298f62cafbaa4a43d1a71c84d17b0685f603 Mon Sep 17 00:00:00 2001 From: Morten Engvoldsen Date: Wed, 2 Jun 2010 18:35:22 +0200 Subject: Doc: updating images --- doc/src/template/images/bg_ll_blank.png | Bin 0 -> 320 bytes doc/src/template/images/bg_ul_blank.png | Bin 0 -> 304 bytes doc/src/template/images/header_bg.png | Bin 0 -> 114 bytes tools/qdoc3/test/images/bg_l.png | Bin 0 -> 100 bytes tools/qdoc3/test/images/bg_l_blank.png | Bin 0 -> 84 bytes tools/qdoc3/test/images/bg_r.png | Bin 0 -> 96 bytes tools/qdoc3/test/images/box_bg.png | Bin 0 -> 89 bytes tools/qdoc3/test/images/breadcrumb.png | Bin 0 -> 134 bytes tools/qdoc3/test/images/bullet_dn.png | Bin 0 -> 230 bytes tools/qdoc3/test/images/bullet_gt.png | Bin 0 -> 124 bytes tools/qdoc3/test/images/bullet_sq.png | Bin 0 -> 74 bytes tools/qdoc3/test/images/bullet_up.png | Bin 0 -> 253 bytes tools/qdoc3/test/images/feedbackground.png | Bin 0 -> 263 bytes tools/qdoc3/test/images/horBar.png | Bin 0 -> 2807 bytes tools/qdoc3/test/images/page.png | Bin 0 -> 3102 bytes tools/qdoc3/test/images/page_bg.png | Bin 0 -> 84 bytes tools/qdoc3/test/images/sprites-combined.png | Bin 0 -> 62534 bytes 17 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/src/template/images/bg_ll_blank.png create mode 100644 doc/src/template/images/bg_ul_blank.png create mode 100644 doc/src/template/images/header_bg.png create mode 100644 tools/qdoc3/test/images/bg_l.png create mode 100644 tools/qdoc3/test/images/bg_l_blank.png create mode 100644 tools/qdoc3/test/images/bg_r.png create mode 100644 tools/qdoc3/test/images/box_bg.png create mode 100644 tools/qdoc3/test/images/breadcrumb.png create mode 100644 tools/qdoc3/test/images/bullet_dn.png create mode 100644 tools/qdoc3/test/images/bullet_gt.png create mode 100644 tools/qdoc3/test/images/bullet_sq.png create mode 100644 tools/qdoc3/test/images/bullet_up.png create mode 100644 tools/qdoc3/test/images/feedbackground.png create mode 100644 tools/qdoc3/test/images/horBar.png create mode 100644 tools/qdoc3/test/images/page.png create mode 100644 tools/qdoc3/test/images/page_bg.png create mode 100644 tools/qdoc3/test/images/sprites-combined.png diff --git a/doc/src/template/images/bg_ll_blank.png b/doc/src/template/images/bg_ll_blank.png new file mode 100644 index 0000000..95a1c45 Binary files /dev/null and b/doc/src/template/images/bg_ll_blank.png differ diff --git a/doc/src/template/images/bg_ul_blank.png b/doc/src/template/images/bg_ul_blank.png new file mode 100644 index 0000000..7051261 Binary files /dev/null and b/doc/src/template/images/bg_ul_blank.png differ diff --git a/doc/src/template/images/header_bg.png b/doc/src/template/images/header_bg.png new file mode 100644 index 0000000..a436aa6 Binary files /dev/null and b/doc/src/template/images/header_bg.png differ diff --git a/tools/qdoc3/test/images/bg_l.png b/tools/qdoc3/test/images/bg_l.png new file mode 100644 index 0000000..90b1da1 Binary files /dev/null and b/tools/qdoc3/test/images/bg_l.png differ diff --git a/tools/qdoc3/test/images/bg_l_blank.png b/tools/qdoc3/test/images/bg_l_blank.png new file mode 100644 index 0000000..5a9673d Binary files /dev/null and b/tools/qdoc3/test/images/bg_l_blank.png differ diff --git a/tools/qdoc3/test/images/bg_r.png b/tools/qdoc3/test/images/bg_r.png new file mode 100644 index 0000000..f0fb121 Binary files /dev/null and b/tools/qdoc3/test/images/bg_r.png differ diff --git a/tools/qdoc3/test/images/box_bg.png b/tools/qdoc3/test/images/box_bg.png new file mode 100644 index 0000000..3322f92 Binary files /dev/null and b/tools/qdoc3/test/images/box_bg.png differ diff --git a/tools/qdoc3/test/images/breadcrumb.png b/tools/qdoc3/test/images/breadcrumb.png new file mode 100644 index 0000000..0ded551 Binary files /dev/null and b/tools/qdoc3/test/images/breadcrumb.png differ diff --git a/tools/qdoc3/test/images/bullet_dn.png b/tools/qdoc3/test/images/bullet_dn.png new file mode 100644 index 0000000..f776247 Binary files /dev/null and b/tools/qdoc3/test/images/bullet_dn.png differ diff --git a/tools/qdoc3/test/images/bullet_gt.png b/tools/qdoc3/test/images/bullet_gt.png new file mode 100644 index 0000000..7561b4e Binary files /dev/null and b/tools/qdoc3/test/images/bullet_gt.png differ diff --git a/tools/qdoc3/test/images/bullet_sq.png b/tools/qdoc3/test/images/bullet_sq.png new file mode 100644 index 0000000..a84845e Binary files /dev/null and b/tools/qdoc3/test/images/bullet_sq.png differ diff --git a/tools/qdoc3/test/images/bullet_up.png b/tools/qdoc3/test/images/bullet_up.png new file mode 100644 index 0000000..285e741 Binary files /dev/null and b/tools/qdoc3/test/images/bullet_up.png differ diff --git a/tools/qdoc3/test/images/feedbackground.png b/tools/qdoc3/test/images/feedbackground.png new file mode 100644 index 0000000..3a38d99 Binary files /dev/null and b/tools/qdoc3/test/images/feedbackground.png differ diff --git a/tools/qdoc3/test/images/horBar.png b/tools/qdoc3/test/images/horBar.png new file mode 100644 index 0000000..100fe91 Binary files /dev/null and b/tools/qdoc3/test/images/horBar.png differ diff --git a/tools/qdoc3/test/images/page.png b/tools/qdoc3/test/images/page.png new file mode 100644 index 0000000..1db151b Binary files /dev/null and b/tools/qdoc3/test/images/page.png differ diff --git a/tools/qdoc3/test/images/page_bg.png b/tools/qdoc3/test/images/page_bg.png new file mode 100644 index 0000000..9b3bd99 Binary files /dev/null and b/tools/qdoc3/test/images/page_bg.png differ diff --git a/tools/qdoc3/test/images/sprites-combined.png b/tools/qdoc3/test/images/sprites-combined.png new file mode 100644 index 0000000..3a48b21 Binary files /dev/null and b/tools/qdoc3/test/images/sprites-combined.png differ -- cgit v0.12 From d29e1dda8fbc24087b9cf0bf08d929bef74f5c96 Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Sat, 22 May 2010 17:54:33 +1000 Subject: Move `check' target for autotests into testcase.prf testcase.prf is installed, thus allowing `make check' to work outside of the Qt source tree. --- mkspecs/features/qttest_p4.prf | 36 +---------------------------- mkspecs/features/testcase.prf | 51 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 35 deletions(-) create mode 100644 mkspecs/features/testcase.prf diff --git a/mkspecs/features/qttest_p4.prf b/mkspecs/features/qttest_p4.prf index d2011d0..d1c7c2b 100644 --- a/mkspecs/features/qttest_p4.prf +++ b/mkspecs/features/qttest_p4.prf @@ -1,5 +1,5 @@ isEmpty(TEMPLATE):TEMPLATE=app -CONFIG += qt warn_on console depend_includepath +CONFIG += qt warn_on console depend_includepath testcase qtAddLibrary(QtTest) @@ -13,39 +13,5 @@ symbian:{ # prefix test binary with tst_ !contains(TARGET, ^tst_.*):TARGET = $$join(TARGET,,"tst_") - -check.files = -check.path = . -!isEmpty(DESTDIR): check.commands = cd ./$(DESTDIR) && -macx: check.commands += ./$(QMAKE_TARGET).app/Contents/MacOS/$(QMAKE_TARGET) -else:unix: check.commands += ./$(QMAKE_TARGET) -else:win32: { - CONFIG(debug, debug|release):check.commands += $(DESTDIR_TARGET) - else:check.commands += $(DESTDIR_TARGET) -} -embedded: check.commands += -qws -QMAKE_EXTRA_TARGETS += check - -!debug_and_release|build_pass { - check.depends = first -} else { - check.CONFIG = recursive - # In debug and release mode, only run the test once. - # Run debug if available, release otherwise. - debug_and_release { - check.target = dummy_check - check.recurse_target = check - debug { - real_check.depends = debug-check - real_check.target = check - QMAKE_EXTRA_TARGETS += real_check - } else { - real_check.depends = release-check - real_check.target = check - QMAKE_EXTRA_TARGETS += real_check - } - } -} - target.path += $$[QT_INSTALL_PREFIX]/tests/qt4 INSTALLS += target diff --git a/mkspecs/features/testcase.prf b/mkspecs/features/testcase.prf new file mode 100644 index 0000000..db4f673 --- /dev/null +++ b/mkspecs/features/testcase.prf @@ -0,0 +1,51 @@ +!contains(TEMPLATE,subdirs) { + +check.files = +check.path = . + +# If the test ends up in a different directory, we should cd to that directory. +# Note that qmake modifies DESTDIR after this file is processed, +# therefore, testing DESTDIR for emptiness is not sufficient. +!isEmpty(DESTDIR):!contains(DESTDIR,^\./?): check.commands = cd $(DESTDIR) && +contains(TARGET,.*/.*): check.commands = cd $(DESTDIR) && + +# Allow for a custom test runner script +check.commands += $(TESTRUNNER) + +macx { + app_bundle: check.commands += ./$(QMAKE_TARGET).app/Contents/MacOS/$(QMAKE_TARGET) + else: check.commands += ./$(QMAKE_TARGET) +} +else:unix: check.commands += ./$(QMAKE_TARGET) +else: check.commands += $(DESTDIR_TARGET) + +# For Qt/Embedded, run every test app as a QWS server +embedded: check.commands += -qws + +# Allow for custom arguments to tests +check.commands += $(TESTARGS) +QMAKE_EXTRA_TARGETS *= check + +!debug_and_release|build_pass { + check.depends = first +} else { + check.CONFIG = recursive + # In debug and release mode, only run the test once. + # Run debug if available, release otherwise. + debug_and_release { + check.target = dummy_check + check.recurse_target = check + debug { + real_check.depends = debug-check + real_check.target = check + QMAKE_EXTRA_TARGETS += real_check + } else { + real_check.depends = release-check + real_check.target = check + QMAKE_EXTRA_TARGETS += real_check + } + } +} + +} + -- cgit v0.12 From 012a777ecec0ca74cf95683f069cb79774b7093a Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Mon, 31 May 2010 10:22:24 +1000 Subject: Fix `make check' for debug-and-release on Windows. --- mkspecs/features/testcase.prf | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/mkspecs/features/testcase.prf b/mkspecs/features/testcase.prf index db4f673..2a56d7d 100644 --- a/mkspecs/features/testcase.prf +++ b/mkspecs/features/testcase.prf @@ -6,8 +6,22 @@ check.path = . # If the test ends up in a different directory, we should cd to that directory. # Note that qmake modifies DESTDIR after this file is processed, # therefore, testing DESTDIR for emptiness is not sufficient. -!isEmpty(DESTDIR):!contains(DESTDIR,^\./?): check.commands = cd $(DESTDIR) && -contains(TARGET,.*/.*): check.commands = cd $(DESTDIR) && +# Also note that in debug-and-release mode we don't want to cd into the debug/release +# directory (e.g. if the test goes to foo/release/tst_thing.exe, we want to do +# cd foo && release/tst_thing.exe ). +MUNGED_DESTDIR=$$DESTDIR +MUNGED_TARGET=$$TARGET +win32:debug_and_release { + contains(DESTDIR,^release$)|contains(DESTDIR,^debug$):MUNGED_DESTDIR= + + # In debug-and-release mode, the first ../ in TARGET breaks out of the debug/release + # subdirectory. However, since make's working directory is already outside of the + # debug/release subdirectory, this first ../ should be ignored when deciding if + # we have to change directory before running the test. + MUNGED_TARGET=$$replace(MUNGED_TARGET,^\.\./,) +} +!isEmpty(MUNGED_DESTDIR):!contains(MUNGED_DESTDIR,^\./?):check.commands = cd $(DESTDIR) && +contains(MUNGED_TARGET,.*/.*):check.commands = cd $(DESTDIR) && # Allow for a custom test runner script check.commands += $(TESTRUNNER) -- cgit v0.12 From d7da9ec2a9e3752b1480007aa1fb213765aa8c90 Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Mon, 31 May 2010 11:12:02 +1000 Subject: Add a test for the `make check' feature. --- .../auto/maketestselftest/checktest/checktest.pro | 7 ++ tests/auto/maketestselftest/checktest/main.cpp | 88 ++++++++++++++++++++++ tests/auto/maketestselftest/maketestselftest.pro | 9 +-- tests/auto/maketestselftest/test/test.pro | 10 +++ .../auto/maketestselftest/tst_maketestselftest.cpp | 71 +++++++++++++++++ 5 files changed, 179 insertions(+), 6 deletions(-) create mode 100644 tests/auto/maketestselftest/checktest/checktest.pro create mode 100644 tests/auto/maketestselftest/checktest/main.cpp create mode 100644 tests/auto/maketestselftest/test/test.pro diff --git a/tests/auto/maketestselftest/checktest/checktest.pro b/tests/auto/maketestselftest/checktest/checktest.pro new file mode 100644 index 0000000..79c5ca5 --- /dev/null +++ b/tests/auto/maketestselftest/checktest/checktest.pro @@ -0,0 +1,7 @@ +TEMPLATE = app +TARGET = checktest +CONFIG += console +CONFIG -= app_bundle +DESTDIR = ./ +QT = core +SOURCES += main.cpp diff --git a/tests/auto/maketestselftest/checktest/main.cpp b/tests/auto/maketestselftest/checktest/main.cpp new file mode 100644 index 0000000..e775665 --- /dev/null +++ b/tests/auto/maketestselftest/checktest/main.cpp @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2010 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 +#include +#include +#include +#include + +#include +#include + +void fail(QString const& message) +{ + printf("CHECKTEST FAIL: %s\n", qPrintable(message)); + exit(0); +} + +void pass(QString const& message) +{ + printf("CHECKTEST PASS: %s\n", qPrintable(message)); + exit(0); +} + +int main(int argc, char** argv) +{ + QCoreApplication app(argc, argv); + + QStringList args = app.arguments(); + args.removeFirst(); // ourself + + QString args_quoted = QString("'%1'").arg(args.join("','")); + if (args.count() != 1) { + fail(QString("Expected exactly one argument, got: %1").arg(args_quoted)); + } + + QString test = args.at(0); + + QFileInfo testfile(test); + if (!testfile.exists()) { + fail(QString("File %1 does not exist (my working directory is: %2, my args are: %3)") + .arg(test) + .arg(QDir::currentPath()) + .arg(args_quoted) + ); + } + + pass(args_quoted); +} + diff --git a/tests/auto/maketestselftest/maketestselftest.pro b/tests/auto/maketestselftest/maketestselftest.pro index 6cc1744..a27d5d7 100644 --- a/tests/auto/maketestselftest/maketestselftest.pro +++ b/tests/auto/maketestselftest/maketestselftest.pro @@ -1,9 +1,6 @@ -load(qttest_p4) - -SOURCES += tst_maketestselftest.cpp -QT = core - -DEFINES += SRCDIR=\\\"$$PWD/\\\" +TEMPLATE = subdirs +SUBDIRS = checktest test +test.depends = checktest requires(!cross_compile) diff --git a/tests/auto/maketestselftest/test/test.pro b/tests/auto/maketestselftest/test/test.pro new file mode 100644 index 0000000..2fae25f --- /dev/null +++ b/tests/auto/maketestselftest/test/test.pro @@ -0,0 +1,10 @@ +load(qttest_p4) + +TARGET = ../tst_maketestselftest +SOURCES += ../tst_maketestselftest.cpp +QT = core + +DEFINES += SRCDIR=\\\"$$PWD/..\\\" + +requires(!cross_compile) + diff --git a/tests/auto/maketestselftest/tst_maketestselftest.cpp b/tests/auto/maketestselftest/tst_maketestselftest.cpp index 437e143..9f8e2c5 100644 --- a/tests/auto/maketestselftest/tst_maketestselftest.cpp +++ b/tests/auto/maketestselftest/tst_maketestselftest.cpp @@ -66,6 +66,8 @@ private slots: void naming_convention(); void naming_convention_data(); + void make_check(); + private: QStringList find_subdirs(QString const&, FindSubdirsMode, QString const& = QString()); @@ -446,6 +448,75 @@ QStringList tst_MakeTestSelfTest::find_subdirs(QString const& pro_file, FindSubd return out; } +void tst_MakeTestSelfTest::make_check() +{ + /* + Run `make check' over the whole tests tree with a custom TESTRUNNER, + to verify that the TESTRUNNER mechanism works right. + */ + QString testsDir(SRCDIR "/.."); + QString checktest(SRCDIR "/checktest/checktest"); + +#ifdef Q_OS_WIN32 + checktest.replace("/", "\\"); + checktest += ".exe"; +#endif + + QProcess make; + make.setWorkingDirectory(testsDir); + + QStringList arguments; + arguments << "-k"; + arguments << "check"; + arguments << QString("TESTRUNNER=%1").arg(checktest); + + // find the right make; from externaltests.cpp + static const char makes[] = + "nmake.exe\0" + "mingw32-make.exe\0" + "gmake\0" + "make\0" + ; + + bool ok = false; + for (const char *p = makes; *p; p += strlen(p) + 1) { + make.start(p, arguments); + if (make.waitForStarted()) { + ok = true; + break; + } + } + + if (!ok) { + QFAIL("Could not find the right make tool in PATH"); + } + + QVERIFY(make.waitForFinished(1000 * 60 * 10)); + QCOMPARE(make.exitStatus(), QProcess::NormalExit); + + int fail = 0; + int pass = 0; + QList out = make.readAllStandardOutput().split('\n'); + foreach (QByteArray line, out) { + while (line.endsWith("\r")) { + line.chop(1); + } + if (line.startsWith("CHECKTEST FAIL")) { + QWARN(line.constData()); + ++fail; + } + if (line.startsWith("CHECKTEST PASS")) { + ++pass; + } + } + + // We can't check that the exit code of make is 0, because some tests + // may have failed to compile, but that doesn't mean `make check' is broken. + // We do assume there are at least this many unbroken tests, though. + QCOMPARE(fail, 0); + QVERIFY(pass > 50); +} + QStringList find_test_class(QString const& filename) { QStringList out; -- cgit v0.12 From cd35a0656b5aebd9cdd54c1b1555b40d90a07fd1 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Thu, 3 Jun 2010 10:14:24 +1000 Subject: QDeclarativeImage::updatePaintedGeometry() does not need to be a slot --- src/declarative/graphicsitems/qdeclarativeimage_p.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeimage_p.h b/src/declarative/graphicsitems/qdeclarativeimage_p.h index 5ea700d..fa5b2a9 100644 --- a/src/declarative/graphicsitems/qdeclarativeimage_p.h +++ b/src/declarative/graphicsitems/qdeclarativeimage_p.h @@ -87,8 +87,6 @@ protected: QDeclarativeImage(QDeclarativeImagePrivate &dd, QDeclarativeItem *parent); void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry); void pixmapChange(); - -protected Q_SLOTS: void updatePaintedGeometry(); private: -- cgit v0.12 From 8aaeff9fb126021432e469899534e87a107c8b2d Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Thu, 3 Jun 2010 11:30:57 +1000 Subject: Keep ListView highlight in sync when currentItem changes geometry. Task-number: QTBUG-11110 --- src/declarative/graphicsitems/qdeclarativelistview.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 023d663..dbd1976 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -427,6 +427,8 @@ public: scheduleLayout(); } } + if (currentItem && currentItem->item == item) + updateHighlight(); if (trackedItem && trackedItem->item == item) q->trackedPositionChanged(); } @@ -1103,7 +1105,9 @@ void QDeclarativeListViewPrivate::updateHeader() void QDeclarativeListViewPrivate::fixupPosition() { - moveReason = Other; + if ((haveHighlightRange && highlightRange == QDeclarativeListView::StrictlyEnforceRange) + || snapMode != QDeclarativeListView::NoSnap) + moveReason = Other; if (orient == QDeclarativeListView::Vertical) fixupY(); else -- cgit v0.12 From 5f09880833fe39b49881469d19f09daaf5ef27e6 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy Date: Thu, 3 Jun 2010 11:35:38 +1000 Subject: Don't poll non-polling engines when configurations are in use. --- src/network/bearer/qnetworkconfigmanager_p.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/network/bearer/qnetworkconfigmanager_p.cpp b/src/network/bearer/qnetworkconfigmanager_p.cpp index 471927a..5d4274f 100644 --- a/src/network/bearer/qnetworkconfigmanager_p.cpp +++ b/src/network/bearer/qnetworkconfigmanager_p.cpp @@ -483,8 +483,10 @@ void QNetworkConfigurationManagerPrivate::pollEngines() QMutexLocker locker(&mutex); for (int i = 0; i < sessionEngines.count(); ++i) { - if ((forcedPolling && sessionEngines.at(i)->requiresPolling()) || - sessionEngines.at(i)->configurationsInUse()) { + if (!sessionEngines.at(i)->requiresPolling()) + continue; + + if (forcedPolling || sessionEngines.at(i)->configurationsInUse()) { pollingEngines.insert(i); QMetaObject::invokeMethod(sessionEngines.at(i), "requestUpdate"); } -- cgit v0.12 From a0ebaa90465ffea92ce4a6c54cb03693fda747a2 Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Thu, 3 Jun 2010 11:37:13 +1000 Subject: Add some Q_AUTOTEST_EXPORTs --- src/declarative/debugger/qdeclarativedebugtrace_p.h | 2 +- src/declarative/qml/qdeclarativecontext_p.h | 2 +- src/declarative/qml/qdeclarativepropertycache_p.h | 2 +- src/declarative/util/qdeclarativepackage_p.h | 2 +- src/declarative/util/qdeclarativesmoothedanimation_p_p.h | 2 +- src/declarative/util/qdeclarativetimeline_p_p.h | 8 ++++---- src/declarative/util/qdeclarativetransitionmanager_p_p.h | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/declarative/debugger/qdeclarativedebugtrace_p.h b/src/declarative/debugger/qdeclarativedebugtrace_p.h index 5ba49a8..704c49a 100644 --- a/src/declarative/debugger/qdeclarativedebugtrace_p.h +++ b/src/declarative/debugger/qdeclarativedebugtrace_p.h @@ -50,7 +50,7 @@ QT_BEGIN_HEADER QT_BEGIN_NAMESPACE class QUrl; -class QDeclarativeDebugTrace : public QDeclarativeDebugService +class Q_AUTOTEST_EXPORT QDeclarativeDebugTrace : public QDeclarativeDebugService { public: enum EventType { diff --git a/src/declarative/qml/qdeclarativecontext_p.h b/src/declarative/qml/qdeclarativecontext_p.h index 6b6cd0a..1f5aaf1 100644 --- a/src/declarative/qml/qdeclarativecontext_p.h +++ b/src/declarative/qml/qdeclarativecontext_p.h @@ -108,7 +108,7 @@ public: class QDeclarativeComponentAttached; class QDeclarativeGuardedContextData; -class QDeclarativeContextData +class Q_AUTOTEST_EXPORT QDeclarativeContextData { public: QDeclarativeContextData(); diff --git a/src/declarative/qml/qdeclarativepropertycache_p.h b/src/declarative/qml/qdeclarativepropertycache_p.h index b01e5cc..72cfeba 100644 --- a/src/declarative/qml/qdeclarativepropertycache_p.h +++ b/src/declarative/qml/qdeclarativepropertycache_p.h @@ -65,7 +65,7 @@ QT_BEGIN_NAMESPACE class QDeclarativeEngine; class QMetaProperty; -class QDeclarativePropertyCache : public QDeclarativeRefCount, public QDeclarativeCleanup +class Q_AUTOTEST_EXPORT QDeclarativePropertyCache : public QDeclarativeRefCount, public QDeclarativeCleanup { public: QDeclarativePropertyCache(QDeclarativeEngine *); diff --git a/src/declarative/util/qdeclarativepackage_p.h b/src/declarative/util/qdeclarativepackage_p.h index 87d9b80..57d9c22 100644 --- a/src/declarative/util/qdeclarativepackage_p.h +++ b/src/declarative/util/qdeclarativepackage_p.h @@ -58,7 +58,7 @@ QT_MODULE(Declarative) class QDeclarativePackagePrivate; class QDeclarativePackageAttached; -class QDeclarativePackage : public QObject +class Q_AUTOTEST_EXPORT QDeclarativePackage : public QObject { Q_OBJECT Q_DECLARE_PRIVATE(QDeclarativePackage) diff --git a/src/declarative/util/qdeclarativesmoothedanimation_p_p.h b/src/declarative/util/qdeclarativesmoothedanimation_p_p.h index 81cd229..8cdbea2 100644 --- a/src/declarative/util/qdeclarativesmoothedanimation_p_p.h +++ b/src/declarative/util/qdeclarativesmoothedanimation_p_p.h @@ -65,7 +65,7 @@ QT_BEGIN_NAMESPACE -class QSmoothedAnimation : public QAbstractAnimation +class Q_AUTOTEST_EXPORT QSmoothedAnimation : public QAbstractAnimation { public: QSmoothedAnimation(QObject *parent=0); diff --git a/src/declarative/util/qdeclarativetimeline_p_p.h b/src/declarative/util/qdeclarativetimeline_p_p.h index 598c897..61f6bcd 100644 --- a/src/declarative/util/qdeclarativetimeline_p_p.h +++ b/src/declarative/util/qdeclarativetimeline_p_p.h @@ -63,7 +63,7 @@ class QDeclarativeTimeLineValue; class QDeclarativeTimeLineCallback; struct QDeclarativeTimeLinePrivate; class QDeclarativeTimeLineObject; -class QDeclarativeTimeLine : public QAbstractAnimation +class Q_AUTOTEST_EXPORT QDeclarativeTimeLine : public QAbstractAnimation { Q_OBJECT public: @@ -117,7 +117,7 @@ private: QDeclarativeTimeLinePrivate *d; }; -class QDeclarativeTimeLineObject +class Q_AUTOTEST_EXPORT QDeclarativeTimeLineObject { public: QDeclarativeTimeLineObject(); @@ -129,7 +129,7 @@ protected: QDeclarativeTimeLine *_t; }; -class QDeclarativeTimeLineValue : public QDeclarativeTimeLineObject +class Q_AUTOTEST_EXPORT QDeclarativeTimeLineValue : public QDeclarativeTimeLineObject { public: QDeclarativeTimeLineValue(qreal v = 0.) : _v(v) {} @@ -147,7 +147,7 @@ private: qreal _v; }; -class QDeclarativeTimeLineCallback +class Q_AUTOTEST_EXPORT QDeclarativeTimeLineCallback { public: typedef void (*Callback)(void *); diff --git a/src/declarative/util/qdeclarativetransitionmanager_p_p.h b/src/declarative/util/qdeclarativetransitionmanager_p_p.h index 2e23898..75d11a9 100644 --- a/src/declarative/util/qdeclarativetransitionmanager_p_p.h +++ b/src/declarative/util/qdeclarativetransitionmanager_p_p.h @@ -59,7 +59,7 @@ QT_BEGIN_NAMESPACE class QDeclarativeStatePrivate; class QDeclarativeTransitionManagerPrivate; -class QDeclarativeTransitionManager +class Q_AUTOTEST_EXPORT QDeclarativeTransitionManager { public: QDeclarativeTransitionManager(); -- cgit v0.12 From 8119f82f6bc835dbd5bdc7827f9f80e5cfccbd6a Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Thu, 3 Jun 2010 10:33:04 +1000 Subject: Remove Media elements from Elements index --- doc/src/declarative/elements.qdoc | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/doc/src/declarative/elements.qdoc b/doc/src/declarative/elements.qdoc index 713b49d..514119b 100644 --- a/doc/src/declarative/elements.qdoc +++ b/doc/src/declarative/elements.qdoc @@ -168,8 +168,8 @@ The following table lists the QML elements provided by the \l {QtDeclarative}{Qt \header \o \bold {Views} \o \bold {Positioners} -\o \bold {Media} \o \bold {Effects} +\o \row \o @@ -202,13 +202,6 @@ The following table lists the QML elements provided by the \l {QtDeclarative}{Qt \o \list -\o \l SoundEffect -\o \l Audio -\o \l Video -\endlist - -\o -\list \o \l Particles (experimental) \list \o \l ParticleMotionLinear @@ -218,4 +211,6 @@ The following table lists the QML elements provided by the \l {QtDeclarative}{Qt \endlist \endtable +\o + */ -- cgit v0.12 From 551d4d2e022c7b86c62afbe10d29cb66d6240acb Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Thu, 3 Jun 2010 11:39:21 +1000 Subject: Improve basic types documentation. Don't imply that Item has properties like "geometry" and "position". Task-number: QTBUG-11169 --- doc/src/declarative/basictypes.qdoc | 74 ++++++++++++++++++++++--------------- 1 file changed, 44 insertions(+), 30 deletions(-) diff --git a/doc/src/declarative/basictypes.qdoc b/doc/src/declarative/basictypes.qdoc index 43ae214..5f9902e 100644 --- a/doc/src/declarative/basictypes.qdoc +++ b/doc/src/declarative/basictypes.qdoc @@ -185,46 +185,53 @@ \qmlbasictype point \ingroup qmlbasictypes - \brief A point is specified as "x,y". + \brief A point type has x and y attributes. - A point is specified as "x,y". + A \c point type has \c x and \c y attributes. + + To create a \c point value, specify it as a "x,y" string: - Example: \qml - MyItem { position: "0,20" } + CustomObject { myPointProperty: "0,20" } \endqml - Or with the \l{Qt::point()}{Qt.point()} function: + Or use the \l{Qt::point()}{Qt.point()} function: \qml - MyItem { position: Qt.point(0, 20) } + CustomObject { myPointProperty: Qt.point(0, 20) } \endqml - A point object has \c x and \c y attributes that contain the \c x and \c y values. - \sa {QML Basic Types} */ /*! \qmlbasictype size \ingroup qmlbasictypes + + \brief A size type has width and height attributes - \brief A size is specified as "width x height". + A \c size type has \c width and \c height attributes. - A size is specified as "width x height". + For example, to read the \l {Image::sourceSize} \c size property: - Example: \qml - LayoutItem { preferredSize: "150x50" } + Column { + Image { id: image; source: "logo.png" } + Text { text: image.sourceSize.width + "," + image.sourceSize.height } + } \endqml - Or with the \l{Qt::size()}{Qt.size()} function: + To create a \c size value, specify it as a "width x height" string: \qml - MyItem { position: Qt.size(150, 50) } + LayoutItem { preferredSize: "150x50" } \endqml - A size object has \c width and \c height attributes that contain the \c width and \c height values. + Or use the \l{Qt::size()}{Qt.size()} function: + + \qml + LayoutItem { preferredSize: Qt.size(150, 50) } + \endqml \sa {QML Basic Types} */ @@ -233,23 +240,31 @@ \qmlbasictype rect \ingroup qmlbasictypes - \brief A rect is specified as "x, y, width x height". + \brief A rect type has x, y, width and height attributes. - A rect is specified as "x, y, width x height". + A \c rect type has \c x, \c y, \c width and \c height attributes. - Example: + For example, to read the \l {Item::childrenRect.x}{Item::childrenRect} \c rect property: \qml - MyItem { geometry: "50,50,100x100" } + Rectangle { + width: childrenRect.width + height: childrenRect.height + + Rectangle { width: 100; height: 100 } + } \endqml - Or with the \l{Qt::rect()}{Qt.rect()} function: + To create a \c rect value, specify it as a "x, y, width x height" string: \qml - MyItem { position: Qt.rect(50, 50, 100, 100) } + CustomObject { myRectProperty: "50,50,100x100" } \endqml - A rect object has \c x, \c, y, \c width and \c height attributes that contain the - \c x, \c y, \c width and \c height values. + Or use the \l{Qt::rect()}{Qt.rect()} function: + + \qml + CustomObject { myRectProperty: Qt.rect(50, 50, 100, 100) } + \endqml \sa {QML Basic Types} */ @@ -260,7 +275,7 @@ \brief A date is specified as "YYYY-MM-DD". - A date is specified as "YYYY-MM-DD". + To create a \c date value, specify it as a "YYYY-MM-DD" string: Example: \qml @@ -375,15 +390,17 @@ \qmlbasictype vector3d \ingroup qmlbasictypes - \brief A vector3d is specified as "x,y,z". + \brief A vector3d type has x, y, and z attributes. - A vector3d is specified as "x,y,z". + A \c vector3d type has \c x, \c y, and \c z attributes. + + To create a \c vector3d value, specify it as a "x,y,z" string: \qml Rotation { angle: 60; axis: "0,1,0" } \endqml - or with the \c{Qt.vector3d()} function: + or with the \l{Qt::vector3d()}{Qt.vector3d()} function: \qml Rotation { angle: 60; axis: Qt.vector3d(0, 1, 0) } @@ -395,8 +412,5 @@ Rotation { angle: 60; axis.x: 0; axis.y: 1; axis.z: 0 } \endqml - A vector3d object has \c x, \c, y, and \c z attributes that contain the - \c x, \c y, \c z values. - \sa {QML Basic Types} */ -- cgit v0.12 From fe128b272c11ea2c826c850328c8bc80b8ac0028 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Thu, 3 Jun 2010 11:43:52 +1000 Subject: Fix basic types docs indentation --- doc/src/declarative/basictypes.qdoc | 484 ++++++++++++++++++------------------ 1 file changed, 242 insertions(+), 242 deletions(-) diff --git a/doc/src/declarative/basictypes.qdoc b/doc/src/declarative/basictypes.qdoc index 5f9902e..87dab81 100644 --- a/doc/src/declarative/basictypes.qdoc +++ b/doc/src/declarative/basictypes.qdoc @@ -40,377 +40,377 @@ ****************************************************************************/ /*! - \page qdeclarativebasictypes.html - \title QML Basic Types + \page qdeclarativebasictypes.html + \title QML Basic Types - QML has a set of primitive types, as listed below, that are used throughout - the \l {QML Elements}. + QML has a set of primitive types, as listed below, that are used throughout + the \l {QML Elements}. - Some of these types can also be used for defining - \c property values in QML. See \l{Extending types from QML} for the - list of types that can be used for \c property values. + Some of these types can also be used for defining + \c property values in QML. See \l{Extending types from QML} for the + list of types that can be used for \c property values. - \annotatedlist qmlbasictypes + \annotatedlist qmlbasictypes */ /*! - \qmlbasictype int - \ingroup qmlbasictypes + \qmlbasictype int + \ingroup qmlbasictypes - \brief An integer is a whole number, e.g. 0, 10, or -20. + \brief An integer is a whole number, e.g. 0, 10, or -20. - An integer is a whole number, e.g. 0, 10, or -20. The possible \c - int values range from around -2000000000 to around 2000000000, - although most elements will only accept a reduced range (which they - mention in their documentation). + An integer is a whole number, e.g. 0, 10, or -20. The possible \c + int values range from around -2000000000 to around 2000000000, + although most elements will only accept a reduced range (which they + mention in their documentation). - Example: - \qml - Item { width: 100; height: 200 } - \endqml + Example: + \qml + Item { width: 100; height: 200 } + \endqml - \sa {QML Basic Types} + \sa {QML Basic Types} */ /*! - \qmlbasictype bool - \ingroup qmlbasictypes + \qmlbasictype bool + \ingroup qmlbasictypes - \brief A boolean is a binary true/false value. + \brief A boolean is a binary true/false value. - A boolean is a binary true/false value. + A boolean is a binary true/false value. - Example: - \qml - Item { focus: true; clip: false } - \endqml + Example: + \qml + Item { focus: true; clip: false } + \endqml - \sa {QML Basic Types} + \sa {QML Basic Types} */ /*! - \qmlbasictype real - \ingroup qmlbasictypes + \qmlbasictype real + \ingroup qmlbasictypes - \brief A real number has a decimal point, e.g. 1.2 or -29.8. + \brief A real number has a decimal point, e.g. 1.2 or -29.8. - A real number has a decimal point, e.g. 1.2 or -29.8. + A real number has a decimal point, e.g. 1.2 or -29.8. - Example: - \qml - Item { width: 100.45; height: 150.82 } - \endqml + Example: + \qml + Item { width: 100.45; height: 150.82 } + \endqml - \note In QML all reals are stored in single precision, \l - {http://en.wikipedia.org/wiki/IEEE_754} {IEEE floating point} - format. + \note In QML all reals are stored in single precision, \l + {http://en.wikipedia.org/wiki/IEEE_754} {IEEE floating point} + format. - \sa {QML Basic Types} + \sa {QML Basic Types} */ /*! - \qmlbasictype string - \ingroup qmlbasictypes + \qmlbasictype string + \ingroup qmlbasictypes - \brief A string is a free form text in quotes, e.g. "Hello world!". + \brief A string is a free form text in quotes, e.g. "Hello world!". - A string is a free form text in quotes, e.g. "Hello world!". + A string is a free form text in quotes, e.g. "Hello world!". - Example: - \qml - Text { text: "Hello world!" } - \endqml + Example: + \qml + Text { text: "Hello world!" } + \endqml - \sa {QML Basic Types} + \sa {QML Basic Types} */ /*! - \qmlbasictype url - \ingroup qmlbasictypes + \qmlbasictype url + \ingroup qmlbasictypes - \brief A URL is a resource locator, like a file name. + \brief A URL is a resource locator, like a file name. - A URL is a resource locator, like a file name. It can be either - absolute, e.g. "http://qt.nokia.com", or relative, e.g. - "pics/logo.png". A relative URL is resolved relative to the URL of - the component where the URL is converted from a JavaScript string - expression to a url property value. + A URL is a resource locator, like a file name. It can be either + absolute, e.g. "http://qt.nokia.com", or relative, e.g. + "pics/logo.png". A relative URL is resolved relative to the URL of + the component where the URL is converted from a JavaScript string + expression to a url property value. - Example: - \qml - Image { source: "pics/logo.png" } - \endqml + Example: + \qml + Image { source: "pics/logo.png" } + \endqml - \raw HTML - \endraw + \raw HTML + \endraw - \sa {QML Basic Types} + \sa {QML Basic Types} */ /*! - \qmlbasictype color - \ingroup qmlbasictypes + \qmlbasictype color + \ingroup qmlbasictypes - \brief A color is a standard color name in quotes. + \brief A color is a standard color name in quotes. - A color is a standard color name in quotes. It is normally specified - as an \l {http://www.w3.org/TR/SVG/types.html#ColorKeywords} {SVG - color name}. These names include colors like "red", "green" and - "lightsteelblue". + A color is a standard color name in quotes. It is normally specified + as an \l {http://www.w3.org/TR/SVG/types.html#ColorKeywords} {SVG + color name}. These names include colors like "red", "green" and + "lightsteelblue". - If the color you want isn't part of this list, colors can also be - specified in hexidecimal triplets or quads that take the form \c - "#RRGGBB" and \c "#AARRGGBB" respectively. For example, the color - red corresponds to a triplet of \c "#FF0000" and a slightly - transparent blue to a quad of \c "#800000FF". + If the color you want isn't part of this list, colors can also be + specified in hexidecimal triplets or quads that take the form \c + "#RRGGBB" and \c "#AARRGGBB" respectively. For example, the color + red corresponds to a triplet of \c "#FF0000" and a slightly + transparent blue to a quad of \c "#800000FF". - Example: - \qml - Rectangle { color: "steelblue" } - Rectangle { color: "#FF0000" } - Rectangle { color: "#800000FF" } - \endqml + Example: + \qml + Rectangle { color: "steelblue" } + Rectangle { color: "#FF0000" } + Rectangle { color: "#800000FF" } + \endqml - Or with the \l{Qt::rgba()}{Qt.rgba()}, \l{Qt::hsla()}{Qt.hsla()}, \l{Qt::darker()}{Qt.darker()}, - \l{Qt::lighter()}{Qt.lighter()} or \l{Qt::tint()}{Qt.tint()} functions: + Or with the \l{Qt::rgba()}{Qt.rgba()}, \l{Qt::hsla()}{Qt.hsla()}, \l{Qt::darker()}{Qt.darker()}, + \l{Qt::lighter()}{Qt.lighter()} or \l{Qt::tint()}{Qt.tint()} functions: - \qml - Rectangle { color: Qt.rgba(255, 0, 0, 1) } - \endqml + \qml + Rectangle { color: Qt.rgba(255, 0, 0, 1) } + \endqml - \sa {QML Basic Types} + \sa {QML Basic Types} */ /*! - \qmlbasictype point - \ingroup qmlbasictypes + \qmlbasictype point + \ingroup qmlbasictypes - \brief A point type has x and y attributes. + \brief A point type has x and y attributes. - A \c point type has \c x and \c y attributes. + A \c point type has \c x and \c y attributes. - To create a \c point value, specify it as a "x,y" string: + To create a \c point value, specify it as a "x,y" string: - \qml - CustomObject { myPointProperty: "0,20" } - \endqml + \qml + CustomObject { myPointProperty: "0,20" } + \endqml - Or use the \l{Qt::point()}{Qt.point()} function: + Or use the \l{Qt::point()}{Qt.point()} function: - \qml - CustomObject { myPointProperty: Qt.point(0, 20) } - \endqml + \qml + CustomObject { myPointProperty: Qt.point(0, 20) } + \endqml - \sa {QML Basic Types} + \sa {QML Basic Types} */ /*! - \qmlbasictype size - \ingroup qmlbasictypes - - \brief A size type has width and height attributes + \qmlbasictype size + \ingroup qmlbasictypes + + \brief A size type has width and height attributes - A \c size type has \c width and \c height attributes. + A \c size type has \c width and \c height attributes. - For example, to read the \l {Image::sourceSize} \c size property: + For example, to read the \l {Image::sourceSize} \c size property: - \qml - Column { - Image { id: image; source: "logo.png" } - Text { text: image.sourceSize.width + "," + image.sourceSize.height } - } - \endqml + \qml + Column { + Image { id: image; source: "logo.png" } + Text { text: image.sourceSize.width + "," + image.sourceSize.height } + } + \endqml - To create a \c size value, specify it as a "width x height" string: + To create a \c size value, specify it as a "width x height" string: - \qml - LayoutItem { preferredSize: "150x50" } - \endqml + \qml + LayoutItem { preferredSize: "150x50" } + \endqml - Or use the \l{Qt::size()}{Qt.size()} function: + Or use the \l{Qt::size()}{Qt.size()} function: - \qml - LayoutItem { preferredSize: Qt.size(150, 50) } - \endqml + \qml + LayoutItem { preferredSize: Qt.size(150, 50) } + \endqml - \sa {QML Basic Types} + \sa {QML Basic Types} */ /*! - \qmlbasictype rect - \ingroup qmlbasictypes + \qmlbasictype rect + \ingroup qmlbasictypes - \brief A rect type has x, y, width and height attributes. + \brief A rect type has x, y, width and height attributes. - A \c rect type has \c x, \c y, \c width and \c height attributes. + A \c rect type has \c x, \c y, \c width and \c height attributes. - For example, to read the \l {Item::childrenRect.x}{Item::childrenRect} \c rect property: - \qml - Rectangle { - width: childrenRect.width - height: childrenRect.height + For example, to read the \l {Item::childrenRect.x}{Item::childrenRect} \c rect property: + \qml + Rectangle { + width: childrenRect.width + height: childrenRect.height - Rectangle { width: 100; height: 100 } - } - \endqml + Rectangle { width: 100; height: 100 } + } + \endqml - To create a \c rect value, specify it as a "x, y, width x height" string: + To create a \c rect value, specify it as a "x, y, width x height" string: - \qml - CustomObject { myRectProperty: "50,50,100x100" } - \endqml + \qml + CustomObject { myRectProperty: "50,50,100x100" } + \endqml - Or use the \l{Qt::rect()}{Qt.rect()} function: + Or use the \l{Qt::rect()}{Qt.rect()} function: - \qml - CustomObject { myRectProperty: Qt.rect(50, 50, 100, 100) } - \endqml + \qml + CustomObject { myRectProperty: Qt.rect(50, 50, 100, 100) } + \endqml - \sa {QML Basic Types} + \sa {QML Basic Types} */ /*! - \qmlbasictype date - \ingroup qmlbasictypes + \qmlbasictype date + \ingroup qmlbasictypes - \brief A date is specified as "YYYY-MM-DD". + \brief A date is specified as "YYYY-MM-DD". - To create a \c date value, specify it as a "YYYY-MM-DD" string: + To create a \c date value, specify it as a "YYYY-MM-DD" string: - Example: - \qml - MyDatePicker { minDate: "2000-01-01"; maxDate: "2020-12-31" } - \endqml + Example: + \qml + MyDatePicker { minDate: "2000-01-01"; maxDate: "2020-12-31" } + \endqml - To read a date value returned from a C++ extension class, use - \l{Qt::formatDate()}{Qt.formatDate()} and \l{Qt::formatDateTime()}{Qt.formatDateTime()}. + To read a date value returned from a C++ extension class, use + \l{Qt::formatDate()}{Qt.formatDate()} and \l{Qt::formatDateTime()}{Qt.formatDateTime()}. - \sa {QML Basic Types} + \sa {QML Basic Types} */ /*! - \qmlbasictype time - \ingroup qmlbasictypes + \qmlbasictype time + \ingroup qmlbasictypes - \brief A time is specified as "hh:mm:ss". + \brief A time is specified as "hh:mm:ss". - A time is specified as "hh:mm:ss". + A time is specified as "hh:mm:ss". - Example: - \qml - MyTimePicker { time: "14:22:15" } - \endqml + Example: + \qml + MyTimePicker { time: "14:22:15" } + \endqml - To read a time value returned from a C++ extension class, use - \l{Qt::formatTime()}{Qt.formatTime()} and \l{Qt::formatDateTime()}{Qt.formatDateTime()}. + To read a time value returned from a C++ extension class, use + \l{Qt::formatTime()}{Qt.formatTime()} and \l{Qt::formatDateTime()}{Qt.formatDateTime()}. - \sa {QML Basic Types} + \sa {QML Basic Types} */ /*! - \qmlbasictype font - \ingroup qmlbasictypes + \qmlbasictype font + \ingroup qmlbasictypes - \brief A font type has the properties of a QFont. + \brief A font type has the properties of a QFont. - A font type has the properties of a QFont. The properties are: + A font type has the properties of a QFont. The properties are: - \list - \o \c string font.family - \o \c bool font.bold - \o \c bool font.italic - \o \c bool font.underline - \o \c real font.pointSize - \o \c int font.pixelSize - \endlist + \list + \o \c string font.family + \o \c bool font.bold + \o \c bool font.italic + \o \c bool font.underline + \o \c real font.pointSize + \o \c int font.pixelSize + \endlist - Example: - \qml - Text { font.family: "Helvetica"; font.pointSize: 13; font.bold: true } - \endqml + Example: + \qml + Text { font.family: "Helvetica"; font.pointSize: 13; font.bold: true } + \endqml - \sa {QML Basic Types} + \sa {QML Basic Types} */ /*! - \qmlbasictype action - \ingroup qmlbasictypes + \qmlbasictype action + \ingroup qmlbasictypes - \brief The action type has all the properties of QAction. + \brief The action type has all the properties of QAction. - The action type has all the properties of QAction. The properties - are: + The action type has all the properties of QAction. The properties + are: - \list - \o \c slot action.trigger - invoke the action - \o \c bool action.enabled - true if the action is enabled - \o \c string action.text - the text associated with the action - \endlist + \list + \o \c slot action.trigger - invoke the action + \o \c bool action.enabled - true if the action is enabled + \o \c string action.text - the text associated with the action + \endlist - Actions are used like this: + Actions are used like this: - \qml - MouseArea { onClicked: myaction.trigger() } - State { name: "enabled"; when: myaction.enabled == true } - Text { text: someaction.text } - \endqml + \qml + MouseArea { onClicked: myaction.trigger() } + State { name: "enabled"; when: myaction.enabled == true } + Text { text: someaction.text } + \endqml - \sa {QML Basic Types} + \sa {QML Basic Types} */ /*! - \qmlbasictype list - \ingroup qmlbasictypes - - \brief A list of objects. - - A list of objects. While not technically a basic type, QML also - supports lists of object types. When used from QML, the engine - automatically appends each value to the list. - - For example, the \l Item class contains a list property named - children that can be used like this: - - \qml - Item { - children: [ - Item { id: child1 }, - Rectangle { id: child2 }, - Text { id: child3 } - ] - } - \endqml - \c child1, \c child2 and \c child3 will all be added to the children list - in the order in which they appear. - - \sa {QML Basic Types} + \qmlbasictype list + \ingroup qmlbasictypes + + \brief A list of objects. + + A list of objects. While not technically a basic type, QML also + supports lists of object types. When used from QML, the engine + automatically appends each value to the list. + + For example, the \l Item class contains a list property named + children that can be used like this: + + \qml + Item { + children: [ + Item { id: child1 }, + Rectangle { id: child2 }, + Text { id: child3 } + ] + } + \endqml + \c child1, \c child2 and \c child3 will all be added to the children list + in the order in which they appear. + + \sa {QML Basic Types} */ /*! - \qmlbasictype vector3d - \ingroup qmlbasictypes + \qmlbasictype vector3d + \ingroup qmlbasictypes - \brief A vector3d type has x, y, and z attributes. + \brief A vector3d type has x, y, and z attributes. - A \c vector3d type has \c x, \c y, and \c z attributes. + A \c vector3d type has \c x, \c y, and \c z attributes. - To create a \c vector3d value, specify it as a "x,y,z" string: + To create a \c vector3d value, specify it as a "x,y,z" string: - \qml - Rotation { angle: 60; axis: "0,1,0" } - \endqml + \qml + Rotation { angle: 60; axis: "0,1,0" } + \endqml - or with the \l{Qt::vector3d()}{Qt.vector3d()} function: + or with the \l{Qt::vector3d()}{Qt.vector3d()} function: - \qml - Rotation { angle: 60; axis: Qt.vector3d(0, 1, 0) } - \endqml + \qml + Rotation { angle: 60; axis: Qt.vector3d(0, 1, 0) } + \endqml - or as separate \c x, \c y, and \c z components: + or as separate \c x, \c y, and \c z components: - \qml - Rotation { angle: 60; axis.x: 0; axis.y: 1; axis.z: 0 } - \endqml + \qml + Rotation { angle: 60; axis.x: 0; axis.y: 1; axis.z: 0 } + \endqml - \sa {QML Basic Types} + \sa {QML Basic Types} */ -- cgit v0.12 From f2079babb50aa595e8a36bc133aed94a37fa0aeb Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Thu, 3 Jun 2010 11:57:05 +1000 Subject: Doc --- doc/src/declarative/elements.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/declarative/elements.qdoc b/doc/src/declarative/elements.qdoc index 514119b..aa48bcb 100644 --- a/doc/src/declarative/elements.qdoc +++ b/doc/src/declarative/elements.qdoc @@ -59,8 +59,8 @@ The following table lists the QML elements provided by the \l {QtDeclarative}{Qt \o \l State \o \l PropertyChanges \o \l StateGroup +\o \l StateChangeScript \o \l ParentChange (Item-specific) -\o \l StateChangeScript (Item-specific) \o \l AnchorChanges (Item-specific) \endlist -- cgit v0.12 From f23ddfc5d3df3cfb99ed66704beab015796dcb31 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Thu, 3 Jun 2010 11:59:49 +1000 Subject: Ensure PathView mappedRange is updated when pathItemCount changes. --- src/declarative/graphicsitems/qdeclarativepathview.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/declarative/graphicsitems/qdeclarativepathview.cpp b/src/declarative/graphicsitems/qdeclarativepathview.cpp index 695af7e..f58b054 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview.cpp +++ b/src/declarative/graphicsitems/qdeclarativepathview.cpp @@ -895,6 +895,7 @@ void QDeclarativePathView::setPathItemCount(int i) if (i < 1) i = 1; d->pathItems = i; + d->updateMappedRange(); if (d->isValid() && isComponentComplete()) { d->regenerate(); } -- cgit v0.12 From d15d1612e995dc8b9ca841beb91414376a927eca Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Thu, 3 Jun 2010 12:09:31 +1000 Subject: Add Q_AUTOTEST_EXPORT --- src/declarative/util/qdeclarativestate_p.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarative/util/qdeclarativestate_p.h b/src/declarative/util/qdeclarativestate_p.h index 25715c6..37b24cb 100644 --- a/src/declarative/util/qdeclarativestate_p.h +++ b/src/declarative/util/qdeclarativestate_p.h @@ -84,7 +84,7 @@ public: void deleteFromBinding(); }; -class QDeclarativeActionEvent +class Q_AUTOTEST_EXPORT QDeclarativeActionEvent { public: virtual ~QDeclarativeActionEvent(); -- cgit v0.12 From c0932de90e141d6f3eef3388c3caae22f3982798 Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Thu, 3 Jun 2010 13:44:07 +1000 Subject: Fixed tst_maketestselftest on QWS and Windows. --- tests/auto/maketestselftest/checktest/main.cpp | 13 ++++++++++++- tests/auto/maketestselftest/test/test.pro | 8 ++++++++ tests/auto/maketestselftest/tst_maketestselftest.cpp | 10 ++++++---- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/tests/auto/maketestselftest/checktest/main.cpp b/tests/auto/maketestselftest/checktest/main.cpp index e775665..af98953 100644 --- a/tests/auto/maketestselftest/checktest/main.cpp +++ b/tests/auto/maketestselftest/checktest/main.cpp @@ -68,8 +68,19 @@ int main(int argc, char** argv) args.removeFirst(); // ourself QString args_quoted = QString("'%1'").arg(args.join("','")); + +#ifdef Q_WS_QWS + { + // for QWS we expect tests to be run as the QWS server + QString qws = args.takeLast(); + if (qws != "-qws") { + fail(QString("Expected test to be run with `-qws', but it wasn't; args: %1").arg(args_quoted)); + } + } +#endif + if (args.count() != 1) { - fail(QString("Expected exactly one argument, got: %1").arg(args_quoted)); + fail(QString("These arguments are not what I expected: %1").arg(args_quoted)); } QString test = args.at(0); diff --git a/tests/auto/maketestselftest/test/test.pro b/tests/auto/maketestselftest/test/test.pro index 2fae25f..d9de51e 100644 --- a/tests/auto/maketestselftest/test/test.pro +++ b/tests/auto/maketestselftest/test/test.pro @@ -8,3 +8,11 @@ DEFINES += SRCDIR=\\\"$$PWD/..\\\" requires(!cross_compile) +win32 { + CONFIG(debug, debug|release) { + TARGET = ../../debug/tst_maketestselftest +} else { + TARGET = ../../release/tst_maketestselftest + } +} + diff --git a/tests/auto/maketestselftest/tst_maketestselftest.cpp b/tests/auto/maketestselftest/tst_maketestselftest.cpp index 9f8e2c5..c3cbf76 100644 --- a/tests/auto/maketestselftest/tst_maketestselftest.cpp +++ b/tests/auto/maketestselftest/tst_maketestselftest.cpp @@ -494,16 +494,15 @@ void tst_MakeTestSelfTest::make_check() QVERIFY(make.waitForFinished(1000 * 60 * 10)); QCOMPARE(make.exitStatus(), QProcess::NormalExit); - int fail = 0; int pass = 0; QList out = make.readAllStandardOutput().split('\n'); + QStringList fails; foreach (QByteArray line, out) { while (line.endsWith("\r")) { line.chop(1); } if (line.startsWith("CHECKTEST FAIL")) { - QWARN(line.constData()); - ++fail; + fails << QString::fromLocal8Bit(line); } if (line.startsWith("CHECKTEST PASS")) { ++pass; @@ -513,7 +512,10 @@ void tst_MakeTestSelfTest::make_check() // We can't check that the exit code of make is 0, because some tests // may have failed to compile, but that doesn't mean `make check' is broken. // We do assume there are at least this many unbroken tests, though. - QCOMPARE(fail, 0); + QVERIFY2(fails.count() == 0, + qPrintable(QString("`make check' doesn't work for %1 tests:\n%2") + .arg(fails.count()).arg(fails.join("\n"))) + ); QVERIFY(pass > 50); } -- cgit v0.12 From ab9cb342554e89e0ff51afe3e8063d2719af16b1 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy Date: Thu, 3 Jun 2010 14:56:33 +1000 Subject: Revert "Split Symbian bearer plugin into three platform specfic plugins" This reverts commit cd50f97a9f09eece645c9d7d01cb14c04521a915. Fails on tb9.2, reverting while working on a fix. --- src/plugins/bearer/symbian/3_1/3_1.pro | 4 --- src/plugins/bearer/symbian/3_2/3_2.pro | 12 ------- src/plugins/bearer/symbian/symbian.pri | 30 ---------------- src/plugins/bearer/symbian/symbian.pro | 42 ++++++++++++++++++++-- src/plugins/bearer/symbian/symbian_3/symbian_3.pro | 14 -------- src/s60installs/qsymbianbearer.qtplugin | 1 - src/s60installs/s60installs.pro | 25 ++++--------- 7 files changed, 47 insertions(+), 81 deletions(-) delete mode 100644 src/plugins/bearer/symbian/3_1/3_1.pro delete mode 100644 src/plugins/bearer/symbian/3_2/3_2.pro delete mode 100644 src/plugins/bearer/symbian/symbian.pri delete mode 100644 src/plugins/bearer/symbian/symbian_3/symbian_3.pro delete mode 100644 src/s60installs/qsymbianbearer.qtplugin diff --git a/src/plugins/bearer/symbian/3_1/3_1.pro b/src/plugins/bearer/symbian/3_1/3_1.pro deleted file mode 100644 index a60d18b..0000000 --- a/src/plugins/bearer/symbian/3_1/3_1.pro +++ /dev/null @@ -1,4 +0,0 @@ -include(../symbian.pri) - -LIBS += -lapengine -TARGET = $${TARGET}_3_1 diff --git a/src/plugins/bearer/symbian/3_2/3_2.pro b/src/plugins/bearer/symbian/3_2/3_2.pro deleted file mode 100644 index 4e5b416..0000000 --- a/src/plugins/bearer/symbian/3_2/3_2.pro +++ /dev/null @@ -1,12 +0,0 @@ -include(../symbian.pri) - -exists($${EPOCROOT}epoc32/release/winscw/udeb/cmmanager.lib)| \ -exists($${EPOCROOT}epoc32/release/armv5/lib/cmmanager.lib) { - DEFINES += SNAP_FUNCTIONALITY_AVAILABLE - LIBS += -lcmmanager -} else { - # Fall back to 3_1 implementation on platforms that do not have cmmanager - LIBS += -lapengine -} - -TARGET = $${TARGET}_3_2 diff --git a/src/plugins/bearer/symbian/symbian.pri b/src/plugins/bearer/symbian/symbian.pri deleted file mode 100644 index bfcd9ed..0000000 --- a/src/plugins/bearer/symbian/symbian.pri +++ /dev/null @@ -1,30 +0,0 @@ -TARGET = qsymbianbearer -include(../../qpluginbase.pri) - -QT += network - -HEADERS += ../symbianengine.h \ - ../qnetworksession_impl.h - -SOURCES += ../symbianengine.cpp \ - ../qnetworksession_impl.cpp \ - ../main.cpp - -TARGET.UID3=0x20021319 - -INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE -symbian-abld:INCLUDEPATH += $$QT_BUILD_TREE/include/QtNetwork/private - -LIBS += -lcommdb \ - -lapsettingshandlerui \ - -lconnmon \ - -lcentralrepository \ - -lesock \ - -linsock \ - -lecom \ - -lefsrv \ - -lnetmeta - -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/bearer -target.path += $$[QT_INSTALL_PLUGINS]/bearer -INSTALLS += target diff --git a/src/plugins/bearer/symbian/symbian.pro b/src/plugins/bearer/symbian/symbian.pro index f320eb6..4f1e51c 100644 --- a/src/plugins/bearer/symbian/symbian.pro +++ b/src/plugins/bearer/symbian/symbian.pro @@ -1,3 +1,41 @@ -TEMPLATE = subdirs +TARGET = qsymbianbearer +include(../../qpluginbase.pri) -SUBDIRS += 3_1 3_2 symbian_3 \ No newline at end of file +QT += network + +HEADERS += symbianengine.h \ + qnetworksession_impl.h + +SOURCES += symbianengine.cpp \ + qnetworksession_impl.cpp \ + main.cpp + +symbian { + TARGET.UID3=0x20021319 + exists($${EPOCROOT}epoc32/release/winscw/udeb/cmmanager.lib)| \ + exists($${EPOCROOT}epoc32/release/armv5/lib/cmmanager.lib) { + message("Building with SNAP support") + DEFINES += SNAP_FUNCTIONALITY_AVAILABLE + LIBS += -lcmmanager + } else { + message("Building without SNAP support") + LIBS += -lapengine + } +} + +INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE +symbian-abld:INCLUDEPATH += $$QT_BUILD_TREE/include/QtNetwork/private + +LIBS += -lcommdb \ + -lapsettingshandlerui \ + -lconnmon \ + -lcentralrepository \ + -lesock \ + -linsock \ + -lecom \ + -lefsrv \ + -lnetmeta + +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/bearer +target.path += $$[QT_INSTALL_PLUGINS]/bearer +INSTALLS += target diff --git a/src/plugins/bearer/symbian/symbian_3/symbian_3.pro b/src/plugins/bearer/symbian/symbian_3/symbian_3.pro deleted file mode 100644 index 455aa67..0000000 --- a/src/plugins/bearer/symbian/symbian_3/symbian_3.pro +++ /dev/null @@ -1,14 +0,0 @@ -include(../symbian.pri) - -exists($${EPOCROOT}epoc32/release/winscw/udeb/cmmanager.lib)| \ -exists($${EPOCROOT}epoc32/release/armv5/lib/cmmanager.lib) { - DEFINES += SNAP_FUNCTIONALITY_AVAILABLE - LIBS += -lcmmanager - - exists($$MW_LAYER_PUBLIC_EXPORT_PATH(extendedconnpref.h)) { - DEFINES += OCC_FUNCTIONALITY_AVAILABLE - } -} else { - # Fall back to 3_1 implementation on platforms that do not have cmmanager - LIBS += -lapengine -} diff --git a/src/s60installs/qsymbianbearer.qtplugin b/src/s60installs/qsymbianbearer.qtplugin deleted file mode 100644 index 5c45bdd..0000000 --- a/src/s60installs/qsymbianbearer.qtplugin +++ /dev/null @@ -1 +0,0 @@ -This file is a Qt plugin stub file. The real Qt plugin is located in /sys/bin. Created:2010-06-02T14:02:21 diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro index 15d7830..90c362b 100644 --- a/src/s60installs/s60installs.pro +++ b/src/s60installs/s60installs.pro @@ -51,35 +51,20 @@ symbian: { symbian-abld|symbian-sbsv2 { pluginLocations = $${EPOCROOT}epoc32/release/$(PLATFORM)/$(TARGET) - bearerPluginLocation = $${EPOCROOT}epoc32/release/$(PLATFORM)/$(TARGET) - bearerStubZ = $${EPOCROOT}$${HW_ZDIR}$${QT_PLUGINS_BASE_DIR}/bearer/qsymbianbearer$${QT_LIBINFIX}.qtplugin - BLD_INF_RULES.prj_exports += \ - "qsymbianbearer.qtplugin $$bearerStubZ" \ - "qsymbianbearer.qtplugin /epoc32/winscw/c$${QT_PLUGINS_BASE_DIR}/bearer/qsymbianbearer$${QT_LIBINFIX}.qtplugin" } else { pluginLocations = $$QT_BUILD_TREE/plugins/s60 - bearerPluginLocation = $$QT_BUILD_TREE/plugins/bearer - bearerStubZ = $${PWD}/qsymbianbearer.qtplugin } qts60plugindeployment = \ - "IF package(0x20022E6D)" \ - " \"$$pluginLocations/qts60plugin_5_0$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_5_0$${QT_LIBINFIX}.dll\"" \ - " \"$$bearerPluginLocation/qsymbianbearer$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qsymbianbearer$${QT_LIBINFIX}.dll\"" \ - "ELSEIF package(0x1028315F)" \ + "IF package(0x1028315F)" \ " \"$$pluginLocations/qts60plugin_5_0$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_5_0$${QT_LIBINFIX}.dll\"" \ - " \"$$bearerPluginLocation/qsymbianbearer_3_2$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qsymbianbearer$${QT_LIBINFIX}.dll\"" \ "ELSEIF package(0x102752AE)" \ " \"$$pluginLocations/qts60plugin_3_2$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_3_2$${QT_LIBINFIX}.dll\"" \ - " \"$$bearerPluginLocation/qsymbianbearer_3_2$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qsymbianbearer$${QT_LIBINFIX}.dll\"" \ "ELSEIF package(0x102032BE)" \ " \"$$pluginLocations/qts60plugin_3_1$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_3_1$${QT_LIBINFIX}.dll\"" \ - " \"$$bearerPluginLocation/qsymbianbearer_3_1$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qsymbianbearer$${QT_LIBINFIX}.dll\"" \ "ELSE" \ " \"$$pluginLocations/qts60plugin_5_0$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_5_0$${QT_LIBINFIX}.dll\"" \ - " \"$$bearerPluginLocation/qsymbianbearer$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qsymbianbearer$${QT_LIBINFIX}.dll\"" \ - "ENDIF" \ - " \"$$bearerStubZ\" - \"c:$$replace(QT_PLUGINS_BASE_DIR,/,\\)\\bearer\\qsymbianbearer$${QT_LIBINFIX}.qtplugin\" + "ENDIF" qtlibraries.pkg_postrules += qts60plugindeployment @@ -126,11 +111,15 @@ symbian: { qtbackup.sources = backup_registration.xml qtbackup.path = c:/private/10202D56/import/packages/$$replace(TARGET.UID3, 0x,) + bearer_plugins.path = c:$$QT_PLUGINS_BASE_DIR/bearer + bearer_plugins.sources += $$QT_BUILD_TREE/plugins/bearer/qsymbianbearer$${QT_LIBINFIX}.dll + DEPLOYMENT += qtlibraries \ qtbackup \ imageformats_plugins \ codecs_plugins \ - graphicssystems_plugins + graphicssystems_plugins \ + bearer_plugins contains(QT_CONFIG, svg): { qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtSvg$${QT_LIBINFIX}.dll -- cgit v0.12 From 095e74825d588fc260f06fba3a1c32ac837cf73d Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Thu, 3 Jun 2010 11:04:26 +0300 Subject: Fixed S60_VERSION variable exists checks Apparently else:exists(xxx)|exists(yyy) syntax doesn't work as I originally expected if both xxx and yyy exist, so change the check to use nested exists. Reviewed-by: Jason Barron --- mkspecs/common/symbian/symbian-mmp.conf | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/mkspecs/common/symbian/symbian-mmp.conf b/mkspecs/common/symbian/symbian-mmp.conf index b0d17be..5a7b2d2 100644 --- a/mkspecs/common/symbian/symbian-mmp.conf +++ b/mkspecs/common/symbian/symbian-mmp.conf @@ -40,15 +40,21 @@ MMP_RULES += "USERINCLUDE ." exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.2.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.2.sis) { S60_VERSION = 5.2 symbian3 -} else:exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.1.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.1.sis) { - S60_VERSION = 5.1 symbian2 -} else:exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.0.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.0.sis) { - S60_VERSION = 5.0 -} else:exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v3.2.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v3.2.sis) { - S60_VERSION = 3.2 } else { - S60_VERSION = 3.1 - MMP_RULES -= PAGED BYTEPAIRCOMPRESSTARGET + exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.1.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.1.sis) { + S60_VERSION = 5.1 symbian2 + } else { + exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.0.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.0.sis) { + S60_VERSION = 5.0 + } else { + exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v3.2.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v3.2.sis) { + S60_VERSION = 3.2 + } else { + S60_VERSION = 3.1 + MMP_RULES -= PAGED BYTEPAIRCOMPRESSTARGET + } + } + } } QMAKE_CXXFLAGS_FAST_VFP.ARMCC = --fpmode fast -- cgit v0.12 From 9ecba4c0c963272bbbac627a6742153b5f6f361f Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Tue, 1 Jun 2010 14:30:52 +0200 Subject: QProgressBar: make accessors const. Task-number: QTBUG-11039 Reviewed-by: Thierry --- src/gui/widgets/qprogressbar.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gui/widgets/qprogressbar.h b/src/gui/widgets/qprogressbar.h index b461a21..58bc8b2 100644 --- a/src/gui/widgets/qprogressbar.h +++ b/src/gui/widgets/qprogressbar.h @@ -93,9 +93,11 @@ public: Qt::Orientation orientation() const; void setInvertedAppearance(bool invert); - bool invertedAppearance(); + bool invertedAppearance(); //### Qt5 make const + bool invertedAppearance() const { return const_cast(this)->invertedAppearance(); } void setTextDirection(QProgressBar::Direction textDirection); - QProgressBar::Direction textDirection(); + QProgressBar::Direction textDirection(); //### Qt5 make const + QProgressBar::Direction textDirection() const { return const_cast(this)->textDirection(); } void setFormat(const QString &format); QString format() const; -- cgit v0.12 From cd003bfcf9a05967893099e8948ba3d8f281aa7d Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Thu, 3 Jun 2010 11:03:14 +0200 Subject: QString: Fix severals bugs when comparing with QStringRef the internal ucstricmp and ucstrcmp contains different bugs if the strings are not 0-terminated, as it is with QStringRef. - in ucstricmp, even if the pointer are the same, the lenght could be different - we used to deference the 'end' pointer, that would be 0 if the string ends with 0, but we cannot do that in the general case Task-number: QTBUG-10404 Reviewed-by: Denis --- src/corelib/tools/qstring.cpp | 11 +++++++---- tests/auto/qstring/tst_qstring.cpp | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp index 6acbcec..acb0cb4 100644 --- a/src/corelib/tools/qstring.cpp +++ b/src/corelib/tools/qstring.cpp @@ -113,7 +113,7 @@ int qFindStringBoyerMoore(const QChar *haystack, int haystackLen, int from, static int ucstricmp(const ushort *a, const ushort *ae, const ushort *b, const ushort *be) { if (a == b) - return 0; + return (ae - be); if (a == 0) return 1; if (b == 0) @@ -125,7 +125,7 @@ static int ucstricmp(const ushort *a, const ushort *ae, const ushort *b, const u uint alast = 0; uint blast = 0; - while (a != e) { + while (a < e) { // qDebug() << hex << alast << blast; // qDebug() << hex << "*a=" << *a << "alast=" << alast << "folded=" << foldCase (*a, alast); // qDebug() << hex << "*b=" << *b << "blast=" << blast << "folded=" << foldCase (*b, blast); @@ -154,7 +154,7 @@ static int ucstricmp(const ushort *a, const ushort *ae, const uchar *b) if (b == 0) return -1; - while (a != ae && *b) { + while (a < ae && *b) { int diff = foldCase(*a) - foldCase(*b); if ((diff)) return diff; @@ -4640,9 +4640,12 @@ int QString::compare_helper(const QChar *data1, int length1, QLatin1String s2, return length1; if (cs == Qt::CaseSensitive) { - while (uc != e && *c && *uc == *c) + while (uc < e && *c && *uc == *c) uc++, c++; + if (uc == e) + return -*c; + return *uc - *c; } else { return ucstricmp(uc, e, c); diff --git a/tests/auto/qstring/tst_qstring.cpp b/tests/auto/qstring/tst_qstring.cpp index 1bea4b7..c887936 100644 --- a/tests/auto/qstring/tst_qstring.cpp +++ b/tests/auto/qstring/tst_qstring.cpp @@ -207,6 +207,7 @@ private slots: void repeated() const; void repeated_data() const; void task262677remove(); + void QTBUG10404_compareRef(); }; typedef QList IntList; @@ -4828,6 +4829,38 @@ void tst_QString::task262677remove() QVERIFY(driveName == QLatin1String("V:")); } +void tst_QString::QTBUG10404_compareRef() +{ + QString a = "ABCDEFGH"; + + QCOMPARE(QStringRef(&a, 1, 2).compare(QLatin1String("BC")), 0); + QVERIFY(QStringRef(&a, 1, 2).compare(QLatin1String("BCD")) < 0); + QCOMPARE(QStringRef(&a, 1, 2).compare(QLatin1String("Bc"), Qt::CaseInsensitive), 0); + QVERIFY(QStringRef(&a, 1, 2).compare(QLatin1String("bCD"), Qt::CaseInsensitive) < 0); + + QCOMPARE(QStringRef(&a, 1, 2).compare(QString::fromLatin1("BC")), 0); + QVERIFY(QStringRef(&a, 1, 2).compare(QString::fromLatin1("BCD")) < 0); + QCOMPARE(QStringRef(&a, 1, 2).compare(QString::fromLatin1("Bc"), Qt::CaseInsensitive), 0); + QVERIFY(QStringRef(&a, 1, 2).compare(QString::fromLatin1("bCD"), Qt::CaseInsensitive) < 0); + + QCOMPARE(QString::fromLatin1("BC").compare(QStringRef(&a, 1, 2)), 0); + QVERIFY(QString::fromLatin1("BCD").compare(QStringRef(&a, 1, 2)) > 0); + QCOMPARE(QString::fromLatin1("Bc").compare(QStringRef(&a, 1, 2), Qt::CaseInsensitive), 0); + QVERIFY(QString::fromLatin1("bCD").compare(QStringRef(&a, 1, 2), Qt::CaseInsensitive) > 0); + + QCOMPARE(QStringRef(&a, 1, 2).compare(QStringRef(&a, 1, 2)), 0); + QVERIFY(QStringRef(&a, 1, 2).compare(QStringRef(&a, 1, 3)) < 0); + QCOMPARE(QStringRef(&a, 1, 2).compare(QStringRef(&a, 1, 2), Qt::CaseInsensitive), 0); + QVERIFY(QStringRef(&a, 1, 2).compare(QStringRef(&a, 1, 3), Qt::CaseInsensitive) < 0); + + QString a2 = "ABCDEFGh"; + QCOMPARE(QStringRef(&a2, 1, 2).compare(QStringRef(&a, 1, 2)), 0); + QVERIFY(QStringRef(&a2, 1, 2).compare(QStringRef(&a, 1, 3)) < 0); + QCOMPARE(QStringRef(&a2, 1, 2).compare(QStringRef(&a, 1, 2), Qt::CaseInsensitive), 0); + QVERIFY(QStringRef(&a2, 1, 2).compare(QStringRef(&a, 1, 3), Qt::CaseInsensitive) < 0); +} + + QTEST_APPLESS_MAIN(tst_QString) -- cgit v0.12 From 1d87017c4681c9d5da14d613b5b84d25620642fe Mon Sep 17 00:00:00 2001 From: Tasuku Suzuki Date: Thu, 3 Jun 2010 11:28:55 +0200 Subject: Fix compilation: disable -no-feature-* for bootstrapped moc isn't compiled when qt is configured if -no-feature-datestring Merge-request: 2347 Reviewed-by: Andreas Aardal Hanssen --- configure | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/configure b/configure index 0111f51..0db2236 100755 --- a/configure +++ b/configure @@ -7509,6 +7509,10 @@ then fi if [ -n "$QCONFIG_FLAGS" ]; then +cat >>"$outpath/src/corelib/global/qconfig.h.new" << EOF +#ifndef QT_BOOTSTRAPPED + +EOF for cfg in $QCONFIG_FLAGS; do cfgd=`echo $cfg | sed 's/=.*$//'` # trim pushed 'Foo=Bar' defines cfg=`echo $cfg | sed 's/=/ /'` # turn first '=' into a space @@ -7541,6 +7545,10 @@ cat >>"$outpath/src/corelib/global/qconfig.h.new" << EOF EOF fi done +cat >>"$outpath/src/corelib/global/qconfig.h.new" << EOF +#endif // QT_BOOTSTRAPPED + +EOF fi if [ "$CFG_REDUCE_EXPORTS" = "yes" ]; then -- cgit v0.12 From 41f57bd5eba433676b52d4f8dfebe5e671ba48e5 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Thu, 3 Jun 2010 11:57:26 +0200 Subject: Ensure that we only have one QLayoutStruct struct by renaming the other Since QTextDocumentLayout and QLayoutEngine code referred to their own instances of QLayoutStruct it was causing problems with the Visual Studio debugger as it kept confusing the two together. Reviewed-by: Eskil --- src/gui/text/qtextdocumentlayout.cpp | 58 ++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/src/gui/text/qtextdocumentlayout.cpp b/src/gui/text/qtextdocumentlayout.cpp index f12bf0b..eeb66ce 100644 --- a/src/gui/text/qtextdocumentlayout.cpp +++ b/src/gui/text/qtextdocumentlayout.cpp @@ -79,7 +79,7 @@ Q_GUI_EXPORT extern int qt_defaultDpi(); // ################ should probably add frameFormatChange notification! -struct QLayoutStruct; +struct QTextLayoutStruct; class QTextFrameData : public QTextFrameLayoutData { @@ -109,7 +109,7 @@ public: QFixed minimumWidth; QFixed maximumWidth; - QLayoutStruct *currentLayoutStruct; + QTextLayoutStruct *currentLayoutStruct; bool sizeDirty; bool layoutDirty; @@ -123,8 +123,8 @@ QTextFrameData::QTextFrameData() { } -struct QLayoutStruct { - QLayoutStruct() : maximumWidth(QFIXED_MAX), fullLayout(false) +struct QTextLayoutStruct { + QTextLayoutStruct() : maximumWidth(QFIXED_MAX), fullLayout(false) {} QTextFrame *frame; QFixed x_left; @@ -477,9 +477,9 @@ public: HitPoint hitTest(QTextTable *table, const QFixedPoint &point, int *position, QTextLayout **l, Qt::HitTestAccuracy accuracy) const; HitPoint hitTest(QTextBlock bl, const QFixedPoint &point, int *position, QTextLayout **l, Qt::HitTestAccuracy accuracy) const; - QLayoutStruct layoutCell(QTextTable *t, const QTextTableCell &cell, QFixed width, - int layoutFrom, int layoutTo, QTextTableData *tableData, QFixed absoluteTableY, - bool withPageBreaks); + QTextLayoutStruct layoutCell(QTextTable *t, const QTextTableCell &cell, QFixed width, + int layoutFrom, int layoutTo, QTextTableData *tableData, QFixed absoluteTableY, + bool withPageBreaks); void setCellPosition(QTextTable *t, const QTextTableCell &cell, const QPointF &pos); QRectF layoutTable(QTextTable *t, int layoutFrom, int layoutTo, QFixed parentY); @@ -490,13 +490,13 @@ public: QRectF layoutFrame(QTextFrame *f, int layoutFrom, int layoutTo, QFixed frameWidth, QFixed frameHeight, QFixed parentY = 0); void layoutBlock(const QTextBlock &bl, int blockPosition, const QTextBlockFormat &blockFormat, - QLayoutStruct *layoutStruct, int layoutFrom, int layoutTo, const QTextBlockFormat *previousBlockFormat); - void layoutFlow(QTextFrame::Iterator it, QLayoutStruct *layoutStruct, int layoutFrom, int layoutTo, QFixed width = 0); - void pageBreakInsideTable(QTextTable *table, QLayoutStruct *layoutStruct); + QTextLayoutStruct *layoutStruct, int layoutFrom, int layoutTo, const QTextBlockFormat *previousBlockFormat); + void layoutFlow(QTextFrame::Iterator it, QTextLayoutStruct *layoutStruct, int layoutFrom, int layoutTo, QFixed width = 0); + void pageBreakInsideTable(QTextTable *table, QTextLayoutStruct *layoutStruct); - void floatMargins(const QFixed &y, const QLayoutStruct *layoutStruct, QFixed *left, QFixed *right) const; - QFixed findY(QFixed yFrom, const QLayoutStruct *layoutStruct, QFixed requiredWidth) const; + void floatMargins(const QFixed &y, const QTextLayoutStruct *layoutStruct, QFixed *left, QFixed *right) const; + QFixed findY(QFixed yFrom, const QTextLayoutStruct *layoutStruct, QFixed requiredWidth) const; QVector checkPoints; @@ -1487,12 +1487,12 @@ static QFixed firstChildPos(const QTextFrame *f) return flowPosition(f->begin()); } -QLayoutStruct QTextDocumentLayoutPrivate::layoutCell(QTextTable *t, const QTextTableCell &cell, QFixed width, - int layoutFrom, int layoutTo, QTextTableData *td, - QFixed absoluteTableY, bool withPageBreaks) +QTextLayoutStruct QTextDocumentLayoutPrivate::layoutCell(QTextTable *t, const QTextTableCell &cell, QFixed width, + int layoutFrom, int layoutTo, QTextTableData *td, + QFixed absoluteTableY, bool withPageBreaks) { LDEBUG << "layoutCell"; - QLayoutStruct layoutStruct; + QTextLayoutStruct layoutStruct; layoutStruct.frame = t; layoutStruct.minimumWidth = 0; layoutStruct.maximumWidth = QFIXED_MAX; @@ -1641,9 +1641,9 @@ recalc_minmax_widths: // to figure out the min and the max width lay out the cell at // maximum width. otherwise the maxwidth calculation sometimes // returns wrong values - QLayoutStruct layoutStruct = layoutCell(table, cell, QFIXED_MAX, layoutFrom, - layoutTo, td, absoluteTableY, - /*withPageBreaks =*/false); + QTextLayoutStruct layoutStruct = layoutCell(table, cell, QFIXED_MAX, layoutFrom, + layoutTo, td, absoluteTableY, + /*withPageBreaks =*/false); // distribute the minimum width over all columns the cell spans QFixed widthToDistribute = layoutStruct.minimumWidth + widthPadding; @@ -1868,10 +1868,10 @@ relayout: ++rowCellCount; const QFixed width = td->cellWidth(c, cspan) - widthPadding; - QLayoutStruct layoutStruct = layoutCell(table, cell, width, - layoutFrom, layoutTo, - td, absoluteTableY, - /*withPageBreaks =*/true); + QTextLayoutStruct layoutStruct = layoutCell(table, cell, width, + layoutFrom, layoutTo, + td, absoluteTableY, + /*withPageBreaks =*/true); const QFixed height = layoutStruct.y + bottomPadding + topPadding; @@ -1976,7 +1976,7 @@ void QTextDocumentLayoutPrivate::positionFloat(QTextFrame *frame, QTextLine *cur QTextFrameData *pd = data(parent); Q_ASSERT(pd && pd->currentLayoutStruct); - QLayoutStruct *layoutStruct = pd->currentLayoutStruct; + QTextLayoutStruct *layoutStruct = pd->currentLayoutStruct; if (!pd->floats.contains(frame)) pd->floats.append(frame); @@ -2116,7 +2116,7 @@ QRectF QTextDocumentLayoutPrivate::layoutFrame(QTextFrame *f, int layoutFrom, in // function. fd->contentsWidth = newContentsWidth; - QLayoutStruct layoutStruct; + QTextLayoutStruct layoutStruct; layoutStruct.frame = f; layoutStruct.x_left = fd->leftMargin + fd->border + fd->padding; layoutStruct.x_right = layoutStruct.x_left + newContentsWidth; @@ -2179,7 +2179,7 @@ QRectF QTextDocumentLayoutPrivate::layoutFrame(QTextFrame *f, int layoutFrom, in return layoutStruct.updateRect; } -void QTextDocumentLayoutPrivate::layoutFlow(QTextFrame::Iterator it, QLayoutStruct *layoutStruct, +void QTextDocumentLayoutPrivate::layoutFlow(QTextFrame::Iterator it, QTextLayoutStruct *layoutStruct, int layoutFrom, int layoutTo, QFixed width) { LDEBUG << "layoutFlow from=" << layoutFrom << "to=" << layoutTo; @@ -2509,7 +2509,7 @@ void QTextDocumentLayoutPrivate::layoutFlow(QTextFrame::Iterator it, QLayoutStru } void QTextDocumentLayoutPrivate::layoutBlock(const QTextBlock &bl, int blockPosition, const QTextBlockFormat &blockFormat, - QLayoutStruct *layoutStruct, int layoutFrom, int layoutTo, const QTextBlockFormat *previousBlockFormat) + QTextLayoutStruct *layoutStruct, int layoutFrom, int layoutTo, const QTextBlockFormat *previousBlockFormat) { Q_Q(QTextDocumentLayout); @@ -2718,7 +2718,7 @@ void QTextDocumentLayoutPrivate::layoutBlock(const QTextBlock &bl, int blockPosi } } -void QTextDocumentLayoutPrivate::floatMargins(const QFixed &y, const QLayoutStruct *layoutStruct, +void QTextDocumentLayoutPrivate::floatMargins(const QFixed &y, const QTextLayoutStruct *layoutStruct, QFixed *left, QFixed *right) const { // qDebug() << "floatMargins y=" << y; @@ -2740,7 +2740,7 @@ void QTextDocumentLayoutPrivate::floatMargins(const QFixed &y, const QLayoutStru // qDebug() << "floatMargins: left="<<*left<<"right="<<*right<<"y="<x_right - layoutStruct->x_left); -- cgit v0.12 From bec2d2610a9b35ffcf8314be184b1815527beb13 Mon Sep 17 00:00:00 2001 From: Sebastian Hartte Date: Wed, 2 Jun 2010 15:46:12 +0200 Subject: Added OpenGL 3.3 and 4.0 recognition to QGLFormat Merge-request: 2404 Reviewed-by: Trond --- src/opengl/qgl.cpp | 22 ++++++++++++++++++++-- src/opengl/qgl.h | 4 +++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index c8502c2..5c5d3d1 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -1256,6 +1256,8 @@ QGLFormat::OpenGLVersionFlags Q_AUTOTEST_EXPORT qOpenGLVersionFlagsFromString(co QGLFormat::OpenGL_Version_2_1 | QGLFormat::OpenGL_Version_3_0; switch (versionString[2].toAscii()) { + case '3': + versionFlags |= QGLFormat::OpenGL_Version_3_3; case '2': versionFlags |= QGLFormat::OpenGL_Version_3_2; case '1': @@ -1264,9 +1266,23 @@ QGLFormat::OpenGLVersionFlags Q_AUTOTEST_EXPORT qOpenGLVersionFlagsFromString(co break; default: versionFlags |= QGLFormat::OpenGL_Version_3_1 | - QGLFormat::OpenGL_Version_3_2; + QGLFormat::OpenGL_Version_3_2 | + QGLFormat::OpenGL_Version_3_3; break; } + } else if (versionString.startsWith(QLatin1String("4."))) { + versionFlags |= QGLFormat::OpenGL_Version_1_1 | + QGLFormat::OpenGL_Version_1_2 | + QGLFormat::OpenGL_Version_1_3 | + QGLFormat::OpenGL_Version_1_4 | + QGLFormat::OpenGL_Version_1_5 | + QGLFormat::OpenGL_Version_2_0 | + QGLFormat::OpenGL_Version_2_1 | + QGLFormat::OpenGL_Version_3_0 | + QGLFormat::OpenGL_Version_3_1 | + QGLFormat::OpenGL_Version_3_2 | + QGLFormat::OpenGL_Version_3_3 | + QGLFormat::OpenGL_Version_4_0; } else { versionFlags |= QGLFormat::OpenGL_Version_1_1 | QGLFormat::OpenGL_Version_1_2 | @@ -1277,7 +1293,9 @@ QGLFormat::OpenGLVersionFlags Q_AUTOTEST_EXPORT qOpenGLVersionFlagsFromString(co QGLFormat::OpenGL_Version_2_1 | QGLFormat::OpenGL_Version_3_0 | QGLFormat::OpenGL_Version_3_1 | - QGLFormat::OpenGL_Version_3_2; + QGLFormat::OpenGL_Version_3_2 | + QGLFormat::OpenGL_Version_3_3 | + QGLFormat::OpenGL_Version_4_0; } } return versionFlags; diff --git a/src/opengl/qgl.h b/src/opengl/qgl.h index f297009..f0b36f7 100644 --- a/src/opengl/qgl.h +++ b/src/opengl/qgl.h @@ -266,7 +266,9 @@ public: OpenGL_ES_Version_2_0 = 0x00000800, OpenGL_Version_3_0 = 0x00001000, OpenGL_Version_3_1 = 0x00002000, - OpenGL_Version_3_2 = 0x00004000 + OpenGL_Version_3_2 = 0x00004000, + OpenGL_Version_3_3 = 0x00008000, + OpenGL_Version_4_0 = 0x00010000 }; Q_DECLARE_FLAGS(OpenGLVersionFlags, OpenGLVersionFlag) -- cgit v0.12 From a039a3a53d0a07b04e3b30ba2a73150ea5d2522a Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Thu, 3 Jun 2010 16:07:55 +0200 Subject: tst_qgraphicsitem: stabilize on X11 --- tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp index 5547b02..fe68c8e 100644 --- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp +++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp @@ -7584,6 +7584,7 @@ void tst_QGraphicsItem::itemUsesExtendedStyleOption() scene.addItem(rect); rect->setPos(200, 200); QGraphicsView view(&scene); + view.setWindowFlags(Qt::X11BypassWindowManagerHint); rect->startTrack = false; view.show(); QTest::qWaitForWindowShown(&view); -- cgit v0.12 From f535efb015314fb07573739fd33aa00ba5502bde Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Wed, 12 May 2010 00:24:55 +0200 Subject: Standalone Qml demos for Fluidlauncher There new Qml demos are self-contained Qml applications, ready to be run on Symbian devices: qmlcalculator qmlclocks qmldialcontrol qmleasing qmlflickr qmlphotoviewer qmltwitter Since these depend on the DEPLOYMENT feature of qmake, they currently will only work for Symbian and theoretically WinCE/Mobile. TODO: create INSTALLS rules in order to support more platforms. Task-number: QTBUG-10148 Reviewed-By: axis --- demos/embedded/embedded.pro | 5 ++ demos/embedded/fluidlauncher/config_s60/config.xml | 7 ++ demos/embedded/fluidlauncher/fluidlauncher.pro | 12 +++ .../fluidlauncher/screenshots/qmlcalculator.png | Bin 0 -> 15455 bytes .../fluidlauncher/screenshots/qmlclocks.png | Bin 0 -> 12409 bytes .../fluidlauncher/screenshots/qmldialcontrol.png | Bin 0 -> 16811 bytes .../fluidlauncher/screenshots/qmleasing.png | Bin 0 -> 3453 bytes .../fluidlauncher/screenshots/qmlflickr.jpg | Bin 0 -> 35616 bytes .../fluidlauncher/screenshots/qmlphotoviewer.jpg | Bin 0 -> 24216 bytes .../fluidlauncher/screenshots/qmltwitter.jpg | Bin 0 -> 35159 bytes demos/embedded/qmlcalculator/deployment.pri | 7 ++ demos/embedded/qmlcalculator/qmlcalculator.cpp | 78 +++++++++++++++++ demos/embedded/qmlcalculator/qmlcalculator.pro | 12 +++ demos/embedded/qmlclocks/deployment.pri | 7 ++ demos/embedded/qmlclocks/qmlclocks.cpp | 78 +++++++++++++++++ demos/embedded/qmlclocks/qmlclocks.pro | 12 +++ demos/embedded/qmldialcontrol/deployment.pri | 7 ++ demos/embedded/qmldialcontrol/qmldialcontrol.cpp | 66 +++++++++++++++ demos/embedded/qmldialcontrol/qmldialcontrol.pro | 11 +++ demos/embedded/qmleasing/deployment.pri | 7 ++ demos/embedded/qmleasing/qmleasing.cpp | 66 +++++++++++++++ demos/embedded/qmleasing/qmleasing.pro | 11 +++ demos/embedded/qmlflickr/deployment.pri | 7 ++ demos/embedded/qmlflickr/qmlflickr.cpp | 92 +++++++++++++++++++++ demos/embedded/qmlflickr/qmlflickr.pro | 14 ++++ demos/embedded/qmlphotoviewer/deployment.pri | 7 ++ demos/embedded/qmlphotoviewer/qmlphotoviewer.cpp | 92 +++++++++++++++++++++ demos/embedded/qmlphotoviewer/qmlphotoviewer.pro | 14 ++++ demos/embedded/qmltwitter/deployment.pri | 7 ++ demos/embedded/qmltwitter/qmltwitter.cpp | 92 +++++++++++++++++++++ demos/embedded/qmltwitter/qmltwitter.pro | 14 ++++ 31 files changed, 725 insertions(+) create mode 100644 demos/embedded/fluidlauncher/screenshots/qmlcalculator.png create mode 100644 demos/embedded/fluidlauncher/screenshots/qmlclocks.png create mode 100644 demos/embedded/fluidlauncher/screenshots/qmldialcontrol.png create mode 100644 demos/embedded/fluidlauncher/screenshots/qmleasing.png create mode 100644 demos/embedded/fluidlauncher/screenshots/qmlflickr.jpg create mode 100644 demos/embedded/fluidlauncher/screenshots/qmlphotoviewer.jpg create mode 100644 demos/embedded/fluidlauncher/screenshots/qmltwitter.jpg create mode 100644 demos/embedded/qmlcalculator/deployment.pri create mode 100644 demos/embedded/qmlcalculator/qmlcalculator.cpp create mode 100644 demos/embedded/qmlcalculator/qmlcalculator.pro create mode 100644 demos/embedded/qmlclocks/deployment.pri create mode 100644 demos/embedded/qmlclocks/qmlclocks.cpp create mode 100644 demos/embedded/qmlclocks/qmlclocks.pro create mode 100644 demos/embedded/qmldialcontrol/deployment.pri create mode 100644 demos/embedded/qmldialcontrol/qmldialcontrol.cpp create mode 100644 demos/embedded/qmldialcontrol/qmldialcontrol.pro create mode 100644 demos/embedded/qmleasing/deployment.pri create mode 100644 demos/embedded/qmleasing/qmleasing.cpp create mode 100644 demos/embedded/qmleasing/qmleasing.pro create mode 100644 demos/embedded/qmlflickr/deployment.pri create mode 100644 demos/embedded/qmlflickr/qmlflickr.cpp create mode 100644 demos/embedded/qmlflickr/qmlflickr.pro create mode 100644 demos/embedded/qmlphotoviewer/deployment.pri create mode 100644 demos/embedded/qmlphotoviewer/qmlphotoviewer.cpp create mode 100644 demos/embedded/qmlphotoviewer/qmlphotoviewer.pro create mode 100644 demos/embedded/qmltwitter/deployment.pri create mode 100644 demos/embedded/qmltwitter/qmltwitter.cpp create mode 100644 demos/embedded/qmltwitter/qmltwitter.pro diff --git a/demos/embedded/embedded.pro b/demos/embedded/embedded.pro index da764d1..a3fc72b 100644 --- a/demos/embedded/embedded.pro +++ b/demos/embedded/embedded.pro @@ -19,6 +19,11 @@ contains(QT_CONFIG, webkit) { SUBDIRS += anomaly } +contains(QT_CONFIG, declarative) { + # Qml demos require DEPLOYMENT support. Therefore, only symbian. + symbian:SUBDIRS += qmlcalculator qmlclocks qmldialcontrol qmleasing qmlflickr qmlphotoviewer qmltwitter +} + # install sources.files = README *.pro sources.path = $$[QT_INSTALL_DEMOS]/embedded diff --git a/demos/embedded/fluidlauncher/config_s60/config.xml b/demos/embedded/fluidlauncher/config_s60/config.xml index d926a4b..4f10488 100644 --- a/demos/embedded/fluidlauncher/config_s60/config.xml +++ b/demos/embedded/fluidlauncher/config_s60/config.xml @@ -21,6 +21,13 @@ + + + + + + + diff --git a/demos/embedded/fluidlauncher/fluidlauncher.pro b/demos/embedded/fluidlauncher/fluidlauncher.pro index bb512d9..21f3819 100644 --- a/demos/embedded/fluidlauncher/fluidlauncher.pro +++ b/demos/embedded/fluidlauncher/fluidlauncher.pro @@ -215,6 +215,16 @@ symbian { $$appResourceDir(examples/script/context2d/context2d.mif) } + qmldemos = qmlcalculator qmlclocks qmldialcontrol qmleasing qmlflickr qmlphotoviewer qmltwitter + contains(QT_CONFIG, declarative) { + for(qmldemo, qmldemos) { + executables.sources += $$QT_BUILD_TREE/demos/embedded/$${qmldemo}/$${qmldemo}.exe + reg_resource.sources += $$regResourceDir(demos/embedded/$${qmldemo}/$${qmldemo}_reg.rsc) + resource.sources += $$appResourceDir(demos/embedded/$${qmldemo}/$${qmldemo}.rsc) + mifs.sources += $$appResourceDir(demos/embedded/$${qmldemo}/$${qmldemo}.mif) + } + } + files.sources = $$PWD/screenshots $$PWD/slides files.path = . @@ -243,6 +253,8 @@ symbian { DEPLOYMENT += config files executables viewerimages saxbookmarks reg_resource resource \ mifs desktopservices_music desktopservices_images fluidbackup + contains(QT_CONFIG, declarative):for(qmldemo, qmldemos):include($$QT_BUILD_TREE/demos/embedded/$${qmldemo}/deployment.pri) + DEPLOYMENT.installer_header = 0xA000D7CD TARGET.EPOCHEAPSIZE = 100000 20000000 diff --git a/demos/embedded/fluidlauncher/screenshots/qmlcalculator.png b/demos/embedded/fluidlauncher/screenshots/qmlcalculator.png new file mode 100644 index 0000000..f4218f5 Binary files /dev/null and b/demos/embedded/fluidlauncher/screenshots/qmlcalculator.png differ diff --git a/demos/embedded/fluidlauncher/screenshots/qmlclocks.png b/demos/embedded/fluidlauncher/screenshots/qmlclocks.png new file mode 100644 index 0000000..ba25a18 Binary files /dev/null and b/demos/embedded/fluidlauncher/screenshots/qmlclocks.png differ diff --git a/demos/embedded/fluidlauncher/screenshots/qmldialcontrol.png b/demos/embedded/fluidlauncher/screenshots/qmldialcontrol.png new file mode 100644 index 0000000..b8def8c Binary files /dev/null and b/demos/embedded/fluidlauncher/screenshots/qmldialcontrol.png differ diff --git a/demos/embedded/fluidlauncher/screenshots/qmleasing.png b/demos/embedded/fluidlauncher/screenshots/qmleasing.png new file mode 100644 index 0000000..d34c2ac Binary files /dev/null and b/demos/embedded/fluidlauncher/screenshots/qmleasing.png differ diff --git a/demos/embedded/fluidlauncher/screenshots/qmlflickr.jpg b/demos/embedded/fluidlauncher/screenshots/qmlflickr.jpg new file mode 100644 index 0000000..d7faabf Binary files /dev/null and b/demos/embedded/fluidlauncher/screenshots/qmlflickr.jpg differ diff --git a/demos/embedded/fluidlauncher/screenshots/qmlphotoviewer.jpg b/demos/embedded/fluidlauncher/screenshots/qmlphotoviewer.jpg new file mode 100644 index 0000000..673ffc6 Binary files /dev/null and b/demos/embedded/fluidlauncher/screenshots/qmlphotoviewer.jpg differ diff --git a/demos/embedded/fluidlauncher/screenshots/qmltwitter.jpg b/demos/embedded/fluidlauncher/screenshots/qmltwitter.jpg new file mode 100644 index 0000000..4399eea Binary files /dev/null and b/demos/embedded/fluidlauncher/screenshots/qmltwitter.jpg differ diff --git a/demos/embedded/qmlcalculator/deployment.pri b/demos/embedded/qmlcalculator/deployment.pri new file mode 100644 index 0000000..d5078f6 --- /dev/null +++ b/demos/embedded/qmlcalculator/deployment.pri @@ -0,0 +1,7 @@ +qmlcalculator_src = $$PWD/../../declarative/calculator +symbian { + qmlcalculator_uid3 = EA8EBD98 + qmlcalculator_files.path = ../$$qmlcalculator_uid3 +} +qmlcalculator_files.sources = $$qmlcalculator_src/calculator.qml $$qmlcalculator_src/Core +DEPLOYMENT += qmlcalculator_files diff --git a/demos/embedded/qmlcalculator/qmlcalculator.cpp b/demos/embedded/qmlcalculator/qmlcalculator.cpp new file mode 100644 index 0000000..3030e81 --- /dev/null +++ b/demos/embedded/qmlcalculator/qmlcalculator.cpp @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the demonstration applications 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 +#include +#include + +#if defined(Q_OS_SYMBIAN) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN + +int main(int argc, char *argv[]) +{ + QApplication application(argc, argv); + + const QString mainQmlApp = QLatin1String("calculator.qml"); + QDeclarativeView view; + view.setSource(QUrl(mainQmlApp)); + view.setResizeMode(QDeclarativeView::SizeRootObjectToView); + +#if defined(QT_KEYPAD_NAVIGATION) + QApplication::setNavigationMode(Qt::NavigationModeCursorAuto); +#endif // QT_KEYPAD_NAVIGATION + +#if defined(Q_OS_SYMBIAN) + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(CAknAppUi::EAppUiOrientationPortrait) + ) + view.showFullScreen(); +#else // Q_OS_SYMBIAN + view.show(); +#endif // Q_OS_SYMBIAN + + return application.exec(); +} diff --git a/demos/embedded/qmlcalculator/qmlcalculator.pro b/demos/embedded/qmlcalculator/qmlcalculator.pro new file mode 100644 index 0000000..1e71eed --- /dev/null +++ b/demos/embedded/qmlcalculator/qmlcalculator.pro @@ -0,0 +1,12 @@ +!symbian:!wince*:warning("DEPLOYMENT support required. This project only works on Symbian and WinCE.") + +QT += declarative +SOURCES += $$PWD/qmlcalculator.cpp +include($$PWD/deployment.pri) + +symbian { + TARGET.UID3 = 0x$$qmlcalculator_uid3 # defined in deployment.pri + include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + LIBS += -lcone -leikcore -lavkon # Screen orientation +} diff --git a/demos/embedded/qmlclocks/deployment.pri b/demos/embedded/qmlclocks/deployment.pri new file mode 100644 index 0000000..84803ec --- /dev/null +++ b/demos/embedded/qmlclocks/deployment.pri @@ -0,0 +1,7 @@ +qmlclocks_src = $$PWD/../../../examples/declarative/toys/clocks +symbian { + qmlclocks_uid3 = E19225B9 + qmlclocks_files.path = ../$$qmlclocks_uid3 +} +qmlclocks_files.sources = $$qmlclocks_src/clocks.qml $$qmlclocks_src/content +DEPLOYMENT += qmlclocks_files diff --git a/demos/embedded/qmlclocks/qmlclocks.cpp b/demos/embedded/qmlclocks/qmlclocks.cpp new file mode 100644 index 0000000..d94cbdd --- /dev/null +++ b/demos/embedded/qmlclocks/qmlclocks.cpp @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the demonstration applications 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 +#include +#include + +#if defined(Q_OS_SYMBIAN) +#include +#include +#include +#include +#endif // Q_OS_SYMBIAN + +int main(int argc, char *argv[]) +{ + QApplication application(argc, argv); + + const QString mainQmlApp = QLatin1String("clocks.qml"); + QDeclarativeView view; + view.setSource(QUrl(mainQmlApp)); + view.setResizeMode(QDeclarativeView::SizeRootObjectToView); + +#if defined(QT_KEYPAD_NAVIGATION) + QApplication::setNavigationMode(Qt::NavigationModeCursorAuto); +#endif // QT_KEYPAD_NAVIGATION + +#if defined(Q_OS_SYMBIAN) + CAknAppUi* appUi = dynamic_cast (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(CAknAppUi::EAppUiOrientationLandscape) + ) + view.showFullScreen(); +#else // Q_OS_SYMBIAN + view.show(); +#endif // Q_OS_SYMBIAN + + return application.exec(); +} diff --git a/demos/embedded/qmlclocks/qmlclocks.pro b/demos/embedded/qmlclocks/qmlclocks.pro new file mode 100644 index 0000000..5edfe14 --- /dev/null +++ b/demos/embedded/qmlclocks/qmlclocks.pro @@ -0,0 +1,12 @@ +!symbian:!wince*:warning("DEPLOYMENT support required. This project only works on Symbian and WinCE.") + +QT += declarative +SOURCES += $$PWD/qmlclocks.cpp +include($$PWD/deployment.pri) + +symbian { + TARGET.UID3 = 0x$$qmlclocks_uid3 # defined in deployment.pri + include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + LIBS += -lcone -leikcore -lavkon # Screen orientation +} diff --git a/demos/embedded/qmldialcontrol/deployment.pri b/demos/embedded/qmldialcontrol/deployment.pri new file mode 100644 index 0000000..8eb39b2 --- /dev/null +++ b/demos/embedded/qmldialcontrol/deployment.pri @@ -0,0 +1,7 @@ +qmldialcontrol_src = $$PWD/../../../examples/declarative/ui-components/dialcontrol +symbian { + qmldialcontrol_uid3 = E59A9283 + qmldialcontrol_files.path = ../$$qmldialcontrol_uid3 +} +qmldialcontrol_files.sources = $$qmldialcontrol_src/dialcontrol.qml $$qmldialcontrol_src/content +DEPLOYMENT += qmldialcontrol_files diff --git a/demos/embedded/qmldialcontrol/qmldialcontrol.cpp b/demos/embedded/qmldialcontrol/qmldialcontrol.cpp new file mode 100644 index 0000000..311cee0 --- /dev/null +++ b/demos/embedded/qmldialcontrol/qmldialcontrol.cpp @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the demonstration applications 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 +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication application(argc, argv); + + const QString mainQmlApp = QLatin1String("dialcontrol.qml"); + QDeclarativeView view; + view.setSource(QUrl(mainQmlApp)); + view.setResizeMode(QDeclarativeView::SizeRootObjectToView); + +#if defined(QT_KEYPAD_NAVIGATION) + QApplication::setNavigationMode(Qt::NavigationModeCursorAuto); +#endif // QT_KEYPAD_NAVIGATION + +#if defined(Q_OS_SYMBIAN) + view.showFullScreen(); +#else // Q_OS_SYMBIAN + view.show(); +#endif // Q_OS_SYMBIAN + + return application.exec(); +} diff --git a/demos/embedded/qmldialcontrol/qmldialcontrol.pro b/demos/embedded/qmldialcontrol/qmldialcontrol.pro new file mode 100644 index 0000000..193cf55 --- /dev/null +++ b/demos/embedded/qmldialcontrol/qmldialcontrol.pro @@ -0,0 +1,11 @@ +!symbian:!wince*:warning("DEPLOYMENT support required. This project only works on Symbian and WinCE.") + +QT += declarative +SOURCES += $$PWD/qmldialcontrol.cpp +include($$PWD/deployment.pri) + +symbian { + TARGET.UID3 = 0x$$qmldialcontrol_uid3 # defined in deployment.pri + include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 +} diff --git a/demos/embedded/qmleasing/deployment.pri b/demos/embedded/qmleasing/deployment.pri new file mode 100644 index 0000000..ddab1ba --- /dev/null +++ b/demos/embedded/qmleasing/deployment.pri @@ -0,0 +1,7 @@ +qmleasing_src = $$PWD/../../../examples/declarative/animation/easing +symbian { + qmleasing_uid3 = E8E8E725 + qmleasing_files.path = ../$$qmleasing_uid3 +} +qmleasing_files.sources = $$qmleasing_src/easing.qml +DEPLOYMENT += qmleasing_files diff --git a/demos/embedded/qmleasing/qmleasing.cpp b/demos/embedded/qmleasing/qmleasing.cpp new file mode 100644 index 0000000..d326468 --- /dev/null +++ b/demos/embedded/qmleasing/qmleasing.cpp @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the demonstration applications 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 +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication application(argc, argv); + + const QString mainQmlApp = QLatin1String("easing.qml"); + QDeclarativeView view; + view.setSource(QUrl(mainQmlApp)); + view.setResizeMode(QDeclarativeView::SizeRootObjectToView); + +#if defined(QT_KEYPAD_NAVIGATION) + QApplication::setNavigationMode(Qt::NavigationModeCursorAuto); +#endif // QT_KEYPAD_NAVIGATION + +#if defined(Q_OS_SYMBIAN) + view.showFullScreen(); +#else // Q_OS_SYMBIAN + view.show(); +#endif // Q_OS_SYMBIAN + + return application.exec(); +} diff --git a/demos/embedded/qmleasing/qmleasing.pro b/demos/embedded/qmleasing/qmleasing.pro new file mode 100644 index 0000000..084a880 --- /dev/null +++ b/demos/embedded/qmleasing/qmleasing.pro @@ -0,0 +1,11 @@ +!symbian:!wince*:warning("DEPLOYMENT support required. This project only works on Symbian and WinCE.") + +QT += declarative +SOURCES += $$PWD/qmleasing.cpp +include($$PWD/deployment.pri) + +symbian { + TARGET.UID3 = 0x$$qmleasing_uid3 # defined in deployment.pri + include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 +} diff --git a/demos/embedded/qmlflickr/deployment.pri b/demos/embedded/qmlflickr/deployment.pri new file mode 100644 index 0000000..aef3198 --- /dev/null +++ b/demos/embedded/qmlflickr/deployment.pri @@ -0,0 +1,7 @@ +qmlflickr_src = $$PWD/../../declarative/flickr +symbian { + qmlflickr_uid3 = E56D5A92 + qmlflickr_files.path = ../$$qmlflickr_uid3 +} +qmlflickr_files.sources = $$qmlflickr_src/flickr.qml $$qmlflickr_src/common $$qmlflickr_src/mobile +DEPLOYMENT += qmlflickr_files diff --git a/demos/embedded/qmlflickr/qmlflickr.cpp b/demos/embedded/qmlflickr/qmlflickr.cpp new file mode 100644 index 0000000..6f0c528 --- /dev/null +++ b/demos/embedded/qmlflickr/qmlflickr.cpp @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the demonstration applications 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 +#include +#include +#include + +#if defined(Q_OS_SYMBIAN) +#include +#include +#include "sym_iap_util.h" + +class QmlAppView : public QDeclarativeView +{ +Q_OBJECT +public: + QmlAppView(QWidget *parent = 0) + : QDeclarativeView(parent) + { + QTimer::singleShot(0, this, SLOT(setDefaultIap())); + } + +private slots: + void setDefaultIap() + { + qt_SetDefaultIap(); + } +}; +#else // Q_OS_SYMBIAN +typedef QDeclarativeView QmlAppView; +#endif // Q_OS_SYMBIAN + +int main(int argc, char *argv[]) +{ + QApplication application(argc, argv); + + const QString mainQmlApp = QLatin1String("flickr.qml"); + QmlAppView view; + view.setSource(QUrl(mainQmlApp)); + view.setResizeMode(QDeclarativeView::SizeRootObjectToView); + +#if defined(Q_OS_SYMBIAN) + view.showFullScreen(); +#else // Q_OS_SYMBIAN + view.setGeometry(QRect(100, 100, 360, 640)); + view.show(); +#endif // Q_OS_SYMBIAN + return application.exec(); +} + +#if defined(Q_OS_SYMBIAN) +#include "qmlflickr.moc" +#endif // Q_OS_SYMBIAN diff --git a/demos/embedded/qmlflickr/qmlflickr.pro b/demos/embedded/qmlflickr/qmlflickr.pro new file mode 100644 index 0000000..e706134 --- /dev/null +++ b/demos/embedded/qmlflickr/qmlflickr.pro @@ -0,0 +1,14 @@ +!symbian:!wince*:warning("DEPLOYMENT support required. This project only works on Symbian and WinCE.") + +QT += declarative network +SOURCES += $$PWD/qmlflickr.cpp +include($$PWD/deployment.pri) + +symbian { + TARGET.UID3 = 0x$$qmlflickr_uid3 # defined in deployment.pri + include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) + INCLUDEPATH += $$QT_SOURCE_TREE/examples/network/qftp/ + LIBS += -lesock -lcommdb -linsock # For IAP selection + TARGET.CAPABILITY = NetworkServices + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 +} diff --git a/demos/embedded/qmlphotoviewer/deployment.pri b/demos/embedded/qmlphotoviewer/deployment.pri new file mode 100644 index 0000000..99475cc --- /dev/null +++ b/demos/embedded/qmlphotoviewer/deployment.pri @@ -0,0 +1,7 @@ +qmlphotoviewer_src = $$PWD/../../declarative/photoviewer +symbian { + qmlphotoviewer_uid3 = E8567E72 + qmlphotoviewer_files.path = ../$$qmlphotoviewer_uid3 +} +qmlphotoviewer_files.sources = $$qmlphotoviewer_src/photoviewer.qml $$qmlphotoviewer_src/PhotoViewerCore +DEPLOYMENT += qmlphotoviewer_files diff --git a/demos/embedded/qmlphotoviewer/qmlphotoviewer.cpp b/demos/embedded/qmlphotoviewer/qmlphotoviewer.cpp new file mode 100644 index 0000000..7889842 --- /dev/null +++ b/demos/embedded/qmlphotoviewer/qmlphotoviewer.cpp @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the demonstration applications 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 +#include +#include +#include + +#if defined(Q_OS_SYMBIAN) +#include +#include +#include "sym_iap_util.h" + +class QmlAppView : public QDeclarativeView +{ +Q_OBJECT +public: + QmlAppView(QWidget *parent = 0) + : QDeclarativeView(parent) + { + QTimer::singleShot(0, this, SLOT(setDefaultIap())); + } + +private slots: + void setDefaultIap() + { + qt_SetDefaultIap(); + } +}; +#else // Q_OS_SYMBIAN +typedef QDeclarativeView QmlAppView; +#endif // Q_OS_SYMBIAN + +int main(int argc, char *argv[]) +{ + QApplication application(argc, argv); + + const QString mainQmlApp = QLatin1String("photoviewer.qml"); + QmlAppView view; + view.setSource(QUrl(mainQmlApp)); + view.setResizeMode(QDeclarativeView::SizeRootObjectToView); + +#if defined(Q_OS_SYMBIAN) + view.showFullScreen(); +#else // Q_OS_SYMBIAN + view.setGeometry(QRect(100, 100, 360, 640)); + view.show(); +#endif // Q_OS_SYMBIAN + return application.exec(); +} + +#if defined(Q_OS_SYMBIAN) +#include "qmlphotoviewer.moc" +#endif // Q_OS_SYMBIAN diff --git a/demos/embedded/qmlphotoviewer/qmlphotoviewer.pro b/demos/embedded/qmlphotoviewer/qmlphotoviewer.pro new file mode 100644 index 0000000..ead5e67 --- /dev/null +++ b/demos/embedded/qmlphotoviewer/qmlphotoviewer.pro @@ -0,0 +1,14 @@ +!symbian:!wince*:warning("DEPLOYMENT support required. This project only works on Symbian and WinCE.") + +QT += declarative network +SOURCES += $$PWD/qmlphotoviewer.cpp +include($$PWD/deployment.pri) + +symbian { + TARGET.UID3 = 0x$$qmlphotoviewer_uid3 # defined in deployment.pri + include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) + INCLUDEPATH += $$QT_SOURCE_TREE/examples/network/qftp/ + LIBS += -lesock -lcommdb -linsock # For IAP selection + TARGET.CAPABILITY = NetworkServices + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 +} diff --git a/demos/embedded/qmltwitter/deployment.pri b/demos/embedded/qmltwitter/deployment.pri new file mode 100644 index 0000000..e5bd884 --- /dev/null +++ b/demos/embedded/qmltwitter/deployment.pri @@ -0,0 +1,7 @@ +qmltwitter_src = $$PWD/../../declarative/twitter +symbian { + qmltwitter_uid3 = EEF6D468 + qmltwitter_files.path = ../$$qmltwitter_uid3 +} +qmltwitter_files.sources = $$qmltwitter_src/twitter.qml $$qmltwitter_src/TwitterCore +DEPLOYMENT += qmltwitter_files diff --git a/demos/embedded/qmltwitter/qmltwitter.cpp b/demos/embedded/qmltwitter/qmltwitter.cpp new file mode 100644 index 0000000..e30ab24 --- /dev/null +++ b/demos/embedded/qmltwitter/qmltwitter.cpp @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the demonstration applications 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 +#include +#include +#include + +#if defined(Q_OS_SYMBIAN) +#include +#include +#include "sym_iap_util.h" + +class QmlAppView : public QDeclarativeView +{ +Q_OBJECT +public: + QmlAppView(QWidget *parent = 0) + : QDeclarativeView(parent) + { + QTimer::singleShot(0, this, SLOT(setDefaultIap())); + } + +private slots: + void setDefaultIap() + { + qt_SetDefaultIap(); + } +}; +#else // Q_OS_SYMBIAN +typedef QDeclarativeView QmlAppView; +#endif // Q_OS_SYMBIAN + +int main(int argc, char *argv[]) +{ + QApplication application(argc, argv); + + const QString mainQmlApp = QLatin1String("twitter.qml"); + QmlAppView view; + view.setSource(QUrl(mainQmlApp)); + view.setResizeMode(QDeclarativeView::SizeRootObjectToView); + +#if defined(Q_OS_SYMBIAN) + view.showFullScreen(); +#else // Q_OS_SYMBIAN + view.setGeometry(QRect(100, 100, 360, 640)); + view.show(); +#endif // Q_OS_SYMBIAN + return application.exec(); +} + +#if defined(Q_OS_SYMBIAN) +#include "qmltwitter.moc" +#endif // Q_OS_SYMBIAN diff --git a/demos/embedded/qmltwitter/qmltwitter.pro b/demos/embedded/qmltwitter/qmltwitter.pro new file mode 100644 index 0000000..7f9be57 --- /dev/null +++ b/demos/embedded/qmltwitter/qmltwitter.pro @@ -0,0 +1,14 @@ +!symbian:!wince*:warning("DEPLOYMENT support required. This project only works on Symbian and WinCE.") + +QT += declarative network +SOURCES += $$PWD/qmltwitter.cpp +include($$PWD/deployment.pri) + +symbian { + TARGET.UID3 = 0x$$qmltwitter_uid3 # defined in deployment.pri + include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) + INCLUDEPATH += $$QT_SOURCE_TREE/examples/network/qftp/ + LIBS += -lesock -lcommdb -linsock # For IAP selection + TARGET.CAPABILITY = NetworkServices + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 +} -- cgit v0.12 From 7d71e65658d27c200f97b93781c3c7f7c313ff56 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Mon, 31 May 2010 00:51:05 +0200 Subject: Using Symbian's future font table getter Api Qt requires raw access to the font tables of used fonts, for a variety of reasons. Until Symbian^4, it is/was not possible to access the font tables of the fonts which are stored in Symbians Font and Bitmap Server. That's why Qt for Symbian's FontDataBase created an own TFontStore where it loaded in all installed fonts. While accessing the font tables via the own TFontStore it still uses the rasterization and metrics from the FBS, which has public Api for those things. However, loading all fonts in the own TFontStore for each Qt Gui process slows down the program startup. Symbian's future font table setter Api is very welcome and this implemets it's usage. This patch lets Qt use the new font API on Symbain^4. The font tables are retrieved via RFontTable. Task-number: QT-2746 Reviewed-by: Jason Barron --- src/gui/text/qfontdatabase_s60.cpp | 76 ++++++++++++++++++++++++++++--------- src/gui/text/qfontengine_s60.cpp | 78 ++++++++++++++++++++++++++++++++------ src/gui/text/qfontengine_s60_p.h | 18 ++++++--- 3 files changed, 137 insertions(+), 35 deletions(-) diff --git a/src/gui/text/qfontdatabase_s60.cpp b/src/gui/text/qfontdatabase_s60.cpp index 489b70b..943df7f 100644 --- a/src/gui/text/qfontdatabase_s60.cpp +++ b/src/gui/text/qfontdatabase_s60.cpp @@ -49,12 +49,12 @@ #include #include "qendian.h" #include -#if defined(QT_NO_FREETYPE) +#ifdef QT_NO_FREETYPE #include #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS #include // COpenFontRasterizer has moved to a new header file #endif // SYMBIAN_ENABLE_SPLIT_HEADERS -#endif +#endif // QT_NO_FREETYPE QT_BEGIN_NAMESPACE @@ -91,7 +91,7 @@ QFileInfoList alternativeFilePaths(const QString &path, const QStringList &nameF return result; } -#if defined(QT_NO_FREETYPE) +#ifdef QT_NO_FREETYPE class QSymbianFontDatabaseExtrasImplementation : public QSymbianFontDatabaseExtras { public: @@ -100,16 +100,41 @@ public: const QSymbianTypeFaceExtras *extras(const QString &typeface, bool bold, bool italic) const; +#ifndef Q_SYMBIAN_HAS_FONTTABLE_API + struct CFontFromFontStoreReleaser { + static inline void cleanup(CFont *font) + { + if (!font) + return; + const QSymbianFontDatabaseExtrasImplementation *dbExtras = + static_cast(privateDb()->symbianExtras); + dbExtras->m_store->ReleaseFont(font); + } + }; +#endif // !Q_SYMBIAN_HAS_FONTTABLE_API + + struct CFontFromScreenDeviceReleaser { + static inline void cleanup(CFont *font) + { + if (!font) + return; + QS60Data::screenDevice()->ReleaseFont(font); + } + }; + private: +#ifndef Q_SYMBIAN_HAS_FONTTABLE_API RHeap* m_heap; CFontStore *m_store; COpenFontRasterizer *m_rasterizer; mutable QList m_extras; +#endif // !Q_SYMBIAN_HAS_FONTTABLE_API mutable QHash m_extrasHash; }; QSymbianFontDatabaseExtrasImplementation::QSymbianFontDatabaseExtrasImplementation() { +#ifndef Q_SYMBIAN_HAS_FONTTABLE_API QStringList filters; filters.append(QLatin1String("*.ttf")); filters.append(QLatin1String("*.ccc")); @@ -131,10 +156,14 @@ QSymbianFontDatabaseExtrasImplementation::QSymbianFontDatabaseExtrasImplementati TPtrC fontFilePtr(qt_QString2TPtrC(fontFile)); QT_TRAP_THROWING(m_store->AddFileL(fontFilePtr)); } +#endif // !Q_SYMBIAN_HAS_FONTTABLE_API } QSymbianFontDatabaseExtrasImplementation::~QSymbianFontDatabaseExtrasImplementation() { +#ifdef Q_SYMBIAN_HAS_FONTTABLE_API + qDeleteAll(m_extrasHash); +#else // Q_SYMBIAN_HAS_FONTTABLE_API typedef QList::iterator iterator; for (iterator p = m_extras.begin(); p != m_extras.end(); ++p) { m_store->ReleaseFont((*p)->fontOwner()); @@ -143,6 +172,7 @@ QSymbianFontDatabaseExtrasImplementation::~QSymbianFontDatabaseExtrasImplementat delete m_store; m_heap->Close(); +#endif // Q_SYMBIAN_HAS_FONTTABLE_API } #ifndef FNTSTORE_H_INLINES_SUPPORT_FMM @@ -167,26 +197,37 @@ const QSymbianTypeFaceExtras *QSymbianFontDatabaseExtrasImplementation::extras(c { const QString searchKey = typeface + QString::number(int(bold)) + QString::number(int(italic)); if (!m_extrasHash.contains(searchKey)) { - CFont* font = NULL; TFontSpec searchSpec(qt_QString2TPtrC(typeface), 1); if (bold) searchSpec.iFontStyle.SetStrokeWeight(EStrokeWeightBold); if (italic) searchSpec.iFontStyle.SetPosture(EPostureItalic); + + CFont* font = NULL; +#ifdef Q_SYMBIAN_HAS_FONTTABLE_API + const TInt err = QS60Data::screenDevice()->GetNearestFontToDesignHeightInPixels(font, searchSpec); + Q_ASSERT(err == KErrNone && font); + QScopedPointer sFont(font); + QSymbianTypeFaceExtras *extras = new QSymbianTypeFaceExtras(font); + sFont.take(); + m_extrasHash.insert(searchKey, extras); +#else // Q_SYMBIAN_HAS_FONTTABLE_API const TInt err = m_store->GetNearestFontToDesignHeightInPixels(font, searchSpec); Q_ASSERT(err == KErrNone && font); const CBitmapFont *bitmapFont = static_cast(font); COpenFont *openFont = #ifdef FNTSTORE_H_INLINES_SUPPORT_FMM - bitmapFont->openFont(); -#else + bitmapFont->OpenFont(); +#else // FNTSTORE_H_INLINES_SUPPORT_FMM OpenFontFromBitmapFont(bitmapFont); #endif // FNTSTORE_H_INLINES_SUPPORT_FMM const TOpenFontFaceAttrib* const attrib = openFont->FaceAttrib(); const QString foundKey = QString((const QChar*)attrib->FullName().Ptr(), attrib->FullName().Length()); if (!m_extrasHash.contains(foundKey)) { + QScopedPointer sFont(font); QSymbianTypeFaceExtras *extras = new QSymbianTypeFaceExtras(font, openFont); + sFont.take(); m_extras.append(extras); m_extrasHash.insert(searchKey, extras); m_extrasHash.insert(foundKey, extras); @@ -194,10 +235,11 @@ const QSymbianTypeFaceExtras *QSymbianFontDatabaseExtrasImplementation::extras(c m_store->ReleaseFont(font); m_extrasHash.insert(searchKey, m_extrasHash.value(foundKey)); } +#endif // Q_SYMBIAN_HAS_FONTTABLE_API } return m_extrasHash.value(searchKey); } -#else +#else // QT_NO_FREETYPE class QFontEngineFTS60 : public QFontEngineFT { public: @@ -209,7 +251,7 @@ QFontEngineFTS60::QFontEngineFTS60(const QFontDef &fd) { default_hint_style = HintFull; } -#endif // defined(QT_NO_FREETYPE) +#endif // QT_NO_FREETYPE /* QFontEngineS60::pixelsToPoints, QFontEngineS60::pointsToPixels, QFontEngineMultiS60::QFontEngineMultiS60 @@ -261,12 +303,12 @@ static void initializeDb() if(!db || db->count) return; -#if defined(QT_NO_FREETYPE) +#ifdef QT_NO_FREETYPE if (!db->symbianExtras) db->symbianExtras = new QSymbianFontDatabaseExtrasImplementation; QSymbianFbsHeapLock lock(QSymbianFbsHeapLock::Unlock); - + const int numTypeFaces = QS60Data::screenDevice()->NumTypefaces(); const QSymbianFontDatabaseExtrasImplementation *dbExtras = static_cast(db->symbianExtras); @@ -278,6 +320,7 @@ static void initializeDb() TFontSpec fontSpec(typefaceSupport.iTypeface.iName, 11); if (QS60Data::screenDevice()->GetNearestFontInPixels(font, fontSpec) != KErrNone) continue; + QScopedPointer sFont(font); if (font->TypeUid() == KCFbsFontUid) { TOpenFontFaceAttrib faceAttrib; const CFbsFont *cfbsFont = static_cast(font); @@ -318,14 +361,13 @@ static void initializeDb() fontAdded = true; } - QS60Data::screenDevice()->ReleaseFont(font); } Q_ASSERT(fontAdded); - lock.relock(); + lock.relock(); -#else // defined(QT_NO_FREETYPE) +#else // QT_NO_FREETYPE QDir dir(QDesktopServices::storageLocation(QDesktopServices::FontsLocation)); dir.setNameFilters(QStringList() << QLatin1String("*.ttf") << QLatin1String("*.ttc") << QLatin1String("*.pfa") @@ -334,7 +376,7 @@ static void initializeDb() const QByteArray file = QFile::encodeName(dir.absoluteFilePath(dir[i])); db->addTTFile(file); } -#endif // defined(QT_NO_FREETYPE) +#endif // QT_NO_FREETYPE } static inline void load(const QString &family = QString(), int script = -1) @@ -416,13 +458,13 @@ QFontEngine *QFontDatabase::findFont(int script, const QFontPrivate *, const QFo const QString fontFamily = desc.family->name; QFontDef request = req; request.family = fontFamily; -#if defined(QT_NO_FREETYPE) +#ifdef QT_NO_FREETYPE const QSymbianFontDatabaseExtrasImplementation *dbExtras = static_cast(db->symbianExtras); const QSymbianTypeFaceExtras *typeFaceExtras = dbExtras->extras(fontFamily, request.weight > QFont::Normal, request.style != QFont::StyleNormal); fe = new QFontEngineS60(request, typeFaceExtras); -#else +#else // QT_NO_FREETYPE QFontEngine::FaceId faceId; const QtFontFamily * const reqQtFontFamily = db->family(fontFamily); faceId.filename = reqQtFontFamily->fontFilename; @@ -433,7 +475,7 @@ QFontEngine *QFontDatabase::findFont(int script, const QFontPrivate *, const QFo fe = fte; else delete fte; -#endif +#endif // QT_NO_FREETYPE Q_ASSERT(fe); if (script == QUnicodeTables::Common diff --git a/src/gui/text/qfontengine_s60.cpp b/src/gui/text/qfontengine_s60.cpp index 93f02ff..52a2c3c 100644 --- a/src/gui/text/qfontengine_s60.cpp +++ b/src/gui/text/qfontengine_s60.cpp @@ -50,21 +50,73 @@ #include #include #include +#ifdef Q_SYMBIAN_HAS_FONTTABLE_API +#include +#endif // Q_SYMBIAN_HAS_FONTTABLE_API QT_BEGIN_NAMESPACE -QSymbianTypeFaceExtras::QSymbianTypeFaceExtras(CFont* fontOwner, COpenFont *font) - : m_font(font) - , m_cmap(0) +#ifdef Q_SYMBIAN_HAS_FONTTABLE_API +QSymbianTypeFaceExtras::QSymbianTypeFaceExtras(CFont* cFont, COpenFont *openFont) + : m_cFont(cFont) , m_symbolCMap(false) - , m_fontOwner(fontOwner) +{ + Q_UNUSED(openFont) +} + +QSymbianTypeFaceExtras::~QSymbianTypeFaceExtras() +{ + QS60Data::screenDevice()->ReleaseFont(m_cFont); +} + +QByteArray QSymbianTypeFaceExtras::getSfntTable(uint tag) const +{ + RFontTable fontTable; + if (fontTable.Open(*m_cFont, tag) != KErrNone) + return QByteArray(); + const QByteArray byteArray(reinterpret_cast + (fontTable.TableContent()),fontTable.TableLength()); + fontTable.Close(); + return byteArray; +} + +bool QSymbianTypeFaceExtras::getSfntTableData(uint tag, uchar *buffer, uint *length) const +{ + RFontTable fontTable; + if (fontTable.Open(*m_cFont, tag) != KErrNone) + return false; + + bool result = true; + const TInt tableByteLength = fontTable.TableLength(); + + if (*length > 0 && *length < tableByteLength) { + result = false; // Caller did not allocate enough memory + } else { + *length = tableByteLength; + if (buffer) + qMemCopy(buffer, fontTable.TableContent(), tableByteLength); + } + + fontTable.Close(); + return result; +} + +#else // Q_SYMBIAN_HAS_FONTTABLE_API +QSymbianTypeFaceExtras::QSymbianTypeFaceExtras(CFont* cFont, COpenFont *openFont) + : m_cFont(cFont) + , m_symbolCMap(false) + , m_openFont(openFont) { TAny *trueTypeExtension = NULL; - m_font->ExtendedInterface(KUidOpenFontTrueTypeExtension, trueTypeExtension); + m_openFont->ExtendedInterface(KUidOpenFontTrueTypeExtension, trueTypeExtension); m_trueTypeExtension = static_cast(trueTypeExtension); Q_ASSERT(m_trueTypeExtension); } +QSymbianTypeFaceExtras::~QSymbianTypeFaceExtras() +{ +} + QByteArray QSymbianTypeFaceExtras::getSfntTable(uint tag) const { Q_ASSERT(m_trueTypeExtension->HasTrueTypeTable(tag)); @@ -100,23 +152,25 @@ bool QSymbianTypeFaceExtras::getSfntTableData(uint tag, uchar *buffer, uint *len m_trueTypeExtension->ReleaseTrueTypeTable(table); return result; } +#endif // Q_SYMBIAN_HAS_FONTTABLE_API -const unsigned char *QSymbianTypeFaceExtras::cmap() const +const uchar *QSymbianTypeFaceExtras::cmap() const { - if (!m_cmap) { - m_cmapTable = getSfntTable(MAKE_TAG('c', 'm', 'a', 'p')); + if (m_cmapTable.isNull()) { + const QByteArray cmapTable = getSfntTable(MAKE_TAG('c', 'm', 'a', 'p')); int size = 0; - m_cmap = QFontEngineS60::getCMap(reinterpret_cast(m_cmapTable.constData()), m_cmapTable.size(), &m_symbolCMap, &size); + const uchar *cmap = QFontEngine::getCMap(reinterpret_cast + (cmapTable.constData()), cmapTable.size(), &m_symbolCMap, &size); + m_cmapTable = QByteArray(reinterpret_cast(cmap), size); } - return m_cmap; + return reinterpret_cast(m_cmapTable.constData()); } CFont *QSymbianTypeFaceExtras::fontOwner() const { - return m_fontOwner; + return m_cFont; } - // duplicated from qfontengine_xyz.cpp static inline unsigned int getChar(const QChar *str, int &i, const int len) { diff --git a/src/gui/text/qfontengine_s60_p.h b/src/gui/text/qfontengine_s60_p.h index 6883730..dea32c4 100644 --- a/src/gui/text/qfontengine_s60_p.h +++ b/src/gui/text/qfontengine_s60_p.h @@ -58,6 +58,10 @@ #include "qsize.h" #include +#ifdef SYMBIAN_GDI_GLYPHDATA +#define Q_SYMBIAN_HAS_FONTTABLE_API +#endif + class CFont; QT_BEGIN_NAMESPACE @@ -66,20 +70,22 @@ QT_BEGIN_NAMESPACE class QSymbianTypeFaceExtras { public: - QSymbianTypeFaceExtras(CFont* fontOwner, COpenFont *font); + QSymbianTypeFaceExtras(CFont* cFont, COpenFont *openFont = 0); + ~QSymbianTypeFaceExtras(); QByteArray getSfntTable(uint tag) const; bool getSfntTableData(uint tag, uchar *buffer, uint *length) const; - const unsigned char *cmap() const; + const uchar *cmap() const; CFont *fontOwner() const; private: - COpenFont *m_font; - mutable MOpenFontTrueTypeExtension *m_trueTypeExtension; - mutable const unsigned char *m_cmap; + CFont* m_cFont; mutable bool m_symbolCMap; mutable QByteArray m_cmapTable; - CFont* m_fontOwner; +#ifndef Q_SYMBIAN_HAS_FONTTABLE_API + COpenFont *m_openFont; + mutable MOpenFontTrueTypeExtension *m_trueTypeExtension; +#endif // Q_SYMBIAN_HAS_FONTTABLE_API }; class QFontEngineS60 : public QFontEngine -- cgit v0.12 From 29e294aee281b7a4dcdd1277eef0fe1552015536 Mon Sep 17 00:00:00 2001 From: Jens Bache-Wiig Date: Thu, 3 Jun 2010 17:50:06 +0200 Subject: Styled item view backgrounds in Gtk+ These were currently never themed but used a fake gradient to mimick ClearLooks. I had to add a workaround for the case where you were using custom QItemDelegates since this could result in styled background on tree branches but flat items. Task-number: QTBUG-11209 Reviewed-by: thorbjorn --- src/gui/styles/qgtkstyle.cpp | 56 ++++++++++++++++++++++++++++++++------------ 1 file changed, 41 insertions(+), 15 deletions(-) diff --git a/src/gui/styles/qgtkstyle.cpp b/src/gui/styles/qgtkstyle.cpp index 5465c7b..b59a033 100644 --- a/src/gui/styles/qgtkstyle.cpp +++ b/src/gui/styles/qgtkstyle.cpp @@ -67,6 +67,7 @@ #include #include #include +#include #include #undef signals // Collides with GTK stymbols #include @@ -817,24 +818,49 @@ void QGtkStyle::drawPrimitive(PrimitiveElement element, option->state & State_Open ? openState : closedState , gtkTreeView->style); } break; + + case PE_PanelItemViewRow: + // This primitive is only used to draw selection behind selected expander arrows. + // We try not to decorate the tree branch background unless you inherit from StyledItemDelegate + // The reason for this is that a lot of code that relies on custom item delegates will look odd having + // a gradient on the branch but a flat shaded color on the item itself. + QCommonStyle::drawPrimitive(element, option, painter, widget); + if (!option->state & State_Selected) { + break; + } else { + if (const QAbstractItemView *view = qobject_cast(widget)) { + if (!qobject_cast(view->itemDelegate())) + break; + } + } // fall through + case PE_PanelItemViewItem: if (const QStyleOptionViewItemV4 *vopt = qstyleoption_cast(option)) { - if (vopt->state & State_Selected) { - QLinearGradient gradient; - gradient.setStart(option->rect.left(), option->rect.top()); - gradient.setFinalStop(option->rect.left(), option->rect.bottom()); - gradient.setColorAt(0, option->palette.highlight().color().lighter(105)); - gradient.setColorAt(0.5, option->palette.highlight().color().lighter(101)); - gradient.setColorAt(0.51, option->palette.highlight().color().darker(101)); - gradient.setColorAt(1, option->palette.highlight().color().darker(105)); - painter->fillRect(option->rect, gradient); - } else { - if (vopt->backgroundBrush.style() != Qt::NoBrush) { - QPointF oldBO = painter->brushOrigin(); - painter->setBrushOrigin(vopt->rect.topLeft()); - painter->fillRect(vopt->rect, vopt->backgroundBrush); - painter->setBrushOrigin(oldBO); + if (vopt->backgroundBrush.style() != Qt::NoBrush) { + QPointF oldBO = painter->brushOrigin(); + painter->setBrushOrigin(vopt->rect.topLeft()); + painter->fillRect(vopt->rect, vopt->backgroundBrush); + painter->setBrushOrigin(oldBO); + if (!(option->state & State_Selected)) + break; + } + if (GtkWidget *gtkTreeView = d->gtkWidget("GtkTreeView")) { + const char *detail = "cell_even_ruled"; + if (vopt && vopt->features & QStyleOptionViewItemV2::Alternate) + detail = "cell_odd_ruled"; + bool isActive = option->state & State_Active; + QString key; + if (isActive ) { + // Required for active/non-active window appearance + key = QLS("a"); + GTK_WIDGET_SET_FLAGS(gtkTreeView, GTK_HAS_FOCUS); } + gtkPainter.paintFlatBox(gtkTreeView, detail, option->rect, + option->state & State_Selected ? GTK_STATE_SELECTED : + option->state & State_Enabled ? GTK_STATE_NORMAL : GTK_STATE_INSENSITIVE, + GTK_SHADOW_OUT, gtkTreeView->style, key); + if (isActive ) + GTK_WIDGET_UNSET_FLAGS(gtkTreeView, GTK_HAS_FOCUS); } } break; -- cgit v0.12 From 482159bddec1736a8854dc2db1b75cf856d00255 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 3 Jun 2010 18:03:52 +0200 Subject: don't use qWarning() - or even qFatal()! - gratuitously. Task-number: QTBUG-8044 --- .../testdata/good/lacksqobject/expectedoutput.txt | 4 - .../testdata/good/parsecpp2/expectedoutput.txt | 4 - tools/linguist/lconvert/main.cpp | 8 +- tools/linguist/lrelease/main.cpp | 23 ++-- tools/linguist/lupdate/cpp.cpp | 124 ++++++++++----------- tools/linguist/lupdate/java.cpp | 40 ++++--- tools/linguist/lupdate/main.cpp | 90 +++++++-------- tools/linguist/lupdate/qscript.cpp | 22 ++-- tools/linguist/lupdate/qscript.g | 22 ++-- tools/linguist/shared/profileevaluator.cpp | 6 +- tools/linguist/shared/translator.cpp | 21 ++-- 11 files changed, 178 insertions(+), 186 deletions(-) diff --git a/tests/auto/linguist/lupdate/testdata/good/lacksqobject/expectedoutput.txt b/tests/auto/linguist/lupdate/testdata/good/lacksqobject/expectedoutput.txt index 72ec3c5..f6fc400 100644 --- a/tests/auto/linguist/lupdate/testdata/good/lacksqobject/expectedoutput.txt +++ b/tests/auto/linguist/lupdate/testdata/good/lacksqobject/expectedoutput.txt @@ -1,8 +1,4 @@ .*/lupdate/testdata/good/lacksqobject/main.cpp:58: Class 'B' lacks Q_OBJECT macro - .*/lupdate/testdata/good/lacksqobject/main.cpp:65: Class 'C' lacks Q_OBJECT macro - .*/lupdate/testdata/good/lacksqobject/main.cpp:78: Class 'nsB::B' lacks Q_OBJECT macro - .*/lupdate/testdata/good/lacksqobject/main.cpp:84: Class 'nsB::C' lacks Q_OBJECT macro - diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp2/expectedoutput.txt b/tests/auto/linguist/lupdate/testdata/good/parsecpp2/expectedoutput.txt index e3543c9..195c0e6 100644 --- a/tests/auto/linguist/lupdate/testdata/good/parsecpp2/expectedoutput.txt +++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp2/expectedoutput.txt @@ -1,8 +1,4 @@ .*/lupdate/testdata/good/parsecpp2/main.cpp:51: Excess closing brace .* - .*/lupdate/testdata/good/parsecpp2/main.cpp:55: Excess closing brace .* - .*/lupdate/testdata/good/parsecpp2/main.cpp:61: Excess closing brace .* - .*/lupdate/testdata/good/parsecpp2/main.cpp:65: Excess closing brace .* - diff --git a/tools/linguist/lconvert/main.cpp b/tools/linguist/lconvert/main.cpp index 543c405..049ea43 100644 --- a/tools/linguist/lconvert/main.cpp +++ b/tools/linguist/lconvert/main.cpp @@ -240,7 +240,7 @@ int main(int argc, char *argv[]) tr.setLanguageCode(Translator::guessLanguageCodeFromFileName(inFiles[0].name)); if (!tr.load(inFiles[0].name, cd, inFiles[0].format)) { - qWarning() << qPrintable(cd.error()); + std::cerr << qPrintable(cd.error()) << std::endl; return 2; } tr.reportDuplicates(tr.resolveDuplicates(), inFiles[0].name, verbose); @@ -248,7 +248,7 @@ int main(int argc, char *argv[]) for (int i = 1; i < inFiles.size(); ++i) { Translator tr2; if (!tr2.load(inFiles[i].name, cd, inFiles[i].format)) { - qWarning() << qPrintable(cd.error()); + std::cerr << qPrintable(cd.error()) << std::endl; return 2; } tr2.reportDuplicates(tr2.resolveDuplicates(), inFiles[i].name, verbose); @@ -273,11 +273,11 @@ int main(int argc, char *argv[]) tr.normalizeTranslations(cd); if (!cd.errors().isEmpty()) { - qWarning("%s", qPrintable(cd.error())); + std::cerr << qPrintable(cd.error()) << std::endl; cd.clearErrors(); } if (!tr.save(outFileName, cd, outFormat)) { - qWarning("%s", qPrintable(cd.error())); + std::cerr << qPrintable(cd.error()) << std::endl; return 3; } return 0; diff --git a/tools/linguist/lrelease/main.cpp b/tools/linguist/lrelease/main.cpp index 266474e..df0b430 100644 --- a/tools/linguist/lrelease/main.cpp +++ b/tools/linguist/lrelease/main.cpp @@ -55,6 +55,8 @@ #include #include +#include + QT_USE_NAMESPACE #ifdef QT_BOOTSTRAPPED @@ -106,7 +108,7 @@ static bool loadTsFile(Translator &tor, const QString &tsFileName, bool /* verbo ConversionData cd; bool ok = tor.load(tsFileName, cd, QLatin1String("auto")); if (!ok) { - qWarning("lrelease error: %s\n", qPrintable(cd.error())); + std::cerr << "lrelease error: " << qPrintable(cd.error()) << std::endl; } else { if (!cd.errors().isEmpty()) printOut(cd.error()); @@ -130,8 +132,8 @@ static bool releaseTranslator(Translator &tor, const QString &qmFileName, QFile file(qmFileName); if (!file.open(QIODevice::WriteOnly)) { - qWarning("lrelease error: cannot create '%s': %s\n", - qPrintable(qmFileName), qPrintable(file.errorString())); + std::cerr << "lrelease error: cannot create '" << qPrintable(qmFileName) + << "': " << qPrintable(file.errorString()) << std::endl; return false; } @@ -140,8 +142,8 @@ static bool releaseTranslator(Translator &tor, const QString &qmFileName, file.close(); if (!ok) { - qWarning("lrelease error: cannot save '%s': %s\n", - qPrintable(qmFileName), qPrintable(cd.error())); + std::cerr << "lrelease error: cannot save '" << qPrintable(qmFileName) + << "': " << qPrintable(cd.error()) << std::endl; } else if (!cd.errors().isEmpty()) { printOut(cd.error()); } @@ -253,19 +255,20 @@ int main(int argc, char **argv) visitor.setVerbose(cd.isVerbose()); if (!visitor.queryProFile(&pro)) { - qWarning("lrelease error: cannot read project file '%s'.", qPrintable(inputFile)); + std::cerr << "lrelease error: cannot read project file '" + << qPrintable(inputFile) << "'.\n"; continue; } if (!visitor.accept(&pro)) { - qWarning("lrelease error: cannot process project file '%s'.", qPrintable(inputFile)); + std::cerr << "lrelease error: cannot process project file '" + << qPrintable(inputFile) << "'.\n"; continue; } QStringList translations = visitor.values(QLatin1String("TRANSLATIONS")); if (translations.isEmpty()) { - qWarning("lrelease warning: Met no 'TRANSLATIONS' entry in" - " project file '%s'\n", - qPrintable(inputFile)); + std::cerr << "lrelease warning: Met no 'TRANSLATIONS' entry in project file '" + << qPrintable(inputFile) << "'\n"; } else { QDir proDir(fi.absolutePath()); foreach (const QString &trans, translations) diff --git a/tools/linguist/lupdate/cpp.cpp b/tools/linguist/lupdate/cpp.cpp index db4bbca..b3e7e84 100644 --- a/tools/linguist/lupdate/cpp.cpp +++ b/tools/linguist/lupdate/cpp.cpp @@ -51,6 +51,8 @@ #include #include +#include + #include // for isXXX() QT_BEGIN_NAMESPACE @@ -226,6 +228,8 @@ private: int elseLine; }; + std::ostream &yyMsg(int line = 0); + uint getChar(); uint getToken(); bool getMacroArgs(); @@ -352,6 +356,12 @@ CppParser::CppParser(ParseResults *_results) inDefine = false; } + +std::ostream &CppParser::yyMsg(int line) +{ + return std::cerr << qPrintable(yyFileName) << ':' << (line ? line : yyLineNo) << ": "; +} + void CppParser::setInput(const QString &in) { yyInStr = in; @@ -613,9 +623,9 @@ uint CppParser::getToken() if (yyBracketDepth != is.bracketDepth1st || yyBraceDepth != is.braceDepth1st || yyParenDepth != is.parenDepth1st) - qWarning("%s:%d: Parenthesis/bracket/brace mismatch between " - "#if and #else branches; using #if branch\n", - qPrintable(yyFileName), is.elseLine); + yyMsg(is.elseLine) + << "Parenthesis/bracket/brace mismatch between " + "#if and #else branches; using #if branch\n"; } else { is.bracketDepth1st = yyBracketDepth; is.braceDepth1st = yyBraceDepth; @@ -636,9 +646,9 @@ uint CppParser::getToken() if (yyBracketDepth != is.bracketDepth1st || yyBraceDepth != is.braceDepth1st || yyParenDepth != is.parenDepth1st) - qWarning("%s:%d: Parenthesis/brace mismatch between " - "#if and #else branches; using #if branch\n", - qPrintable(yyFileName), is.elseLine); + yyMsg(is.elseLine) + << "Parenthesis/brace mismatch between " + "#if and #else branches; using #if branch\n"; yyBracketDepth = is.bracketDepth1st; yyBraceDepth = is.braceDepth1st; yyParenDepth = is.parenDepth1st; @@ -664,8 +674,7 @@ uint CppParser::getToken() forever { yyCh = getChar(); if (yyCh == EOF) { - qWarning("%s:%d: Unterminated C++ comment\n", - qPrintable(yyFileName), yyLineNo); + yyMsg() << "Unterminated C++ comment\n"; break; } @@ -795,8 +804,7 @@ uint CppParser::getToken() forever { yyCh = getChar(); if (yyCh == EOF) { - qWarning("%s:%d: Unterminated C++ comment\n", - qPrintable(yyFileName), yyLineNo); + yyMsg() << "Unterminated C++ comment\n"; break; } *ptr++ = yyCh; @@ -829,8 +837,7 @@ uint CppParser::getToken() yyWord.resize(ptr - (ushort *)yyWord.unicode()); if (yyCh != '"') - qWarning("%s:%d: Unterminated C++ string\n", - qPrintable(yyFileName), yyLineNo); + yyMsg() << "Unterminated C++ string\n"; else yyCh = getChar(); return Tok_String; @@ -867,8 +874,7 @@ uint CppParser::getToken() forever { if (yyCh == EOF || yyCh == '\n') { - qWarning("%s:%d: Unterminated C++ character\n", - qPrintable(yyFileName), yyLineNo); + yyMsg() << "Unterminated C++ character\n"; break; } yyCh = getChar(); @@ -887,9 +893,9 @@ uint CppParser::getToken() case '}': if (yyBraceDepth == yyMinBraceDepth) { if (!inDefine) - qWarning("%s:%d: Excess closing brace in C++ code" - " (or abuse of the C++ preprocessor)\n", - qPrintable(yyFileName), yyCurLineNo); + yyMsg(yyCurLineNo) + << "Excess closing brace in C++ code" + " (or abuse of the C++ preprocessor)\n"; // Avoid things getting messed up even more yyCh = getChar(); return Tok_Semicolon; @@ -905,9 +911,9 @@ uint CppParser::getToken() return Tok_LeftParen; case ')': if (yyParenDepth == 0) - qWarning("%s:%d: Excess closing parenthesis in C++ code" - " (or abuse of the C++ preprocessor)\n", - qPrintable(yyFileName), yyCurLineNo); + yyMsg(yyCurLineNo) + << "Excess closing parenthesis in C++ code" + " (or abuse of the C++ preprocessor)\n"; else yyParenDepth--; yyCh = getChar(); @@ -920,9 +926,9 @@ uint CppParser::getToken() return Tok_LeftBracket; case ']': if (yyBracketDepth == 0) - qWarning("%s:%d: Excess closing bracket in C++ code" - " (or abuse of the C++ preprocessor)\n", - qPrintable(yyFileName), yyCurLineNo); + yyMsg(yyCurLineNo) + << "Excess closing bracket in C++ code" + " (or abuse of the C++ preprocessor)\n"; else yyBracketDepth--; yyCh = getChar(); @@ -1290,8 +1296,7 @@ void CppParser::processInclude(const QString &file, ConversionData &cd, QString cleanFile = QDir::cleanPath(file); if (inclusions.contains(cleanFile)) { - qWarning("%s:%d: circular inclusion of %s\n", - qPrintable(yyFileName), yyLineNo, qPrintable(cleanFile)); + yyMsg() << "circular inclusion of " << qPrintable(cleanFile) << std::endl; return; } @@ -1315,9 +1320,9 @@ void CppParser::processInclude(const QString &file, ConversionData &cd, QFile f(cleanFile); if (!f.open(QIODevice::ReadOnly)) { - qWarning("%s:%d: Cannot open %s: %s\n", - qPrintable(yyFileName), yyLineNo, - qPrintable(cleanFile), qPrintable(f.errorString())); + yyMsg() + << "Cannot open " << qPrintable(cleanFile) << ": " + << qPrintable(f.errorString()) << std::endl; return; } @@ -1656,8 +1661,7 @@ void CppParser::parseInternal(ConversionData &cd, QSet &inclusions) // Forward-declared class definitions can be namespaced. NamespaceList nsl; if (!fullyQualify(namespaces, quali, true, &nsl, 0)) { - qWarning("%s:%d: Ignoring definition of undeclared qualified class\n", - qPrintable(yyFileName), yyLineNo); + yyMsg() << "Ignoring definition of undeclared qualified class\n"; break; } namespaceDepths.push(namespaces.count()); @@ -1757,8 +1761,7 @@ void CppParser::parseInternal(ConversionData &cd, QSet &inclusions) if (!tor) goto case_default; if (!sourcetext.isEmpty()) - qWarning("%s:%d: //%% cannot be used with tr() / QT_TR_NOOP(). Ignoring\n", - qPrintable(yyFileName), yyLineNo); + yyMsg() << "//%% cannot be used with tr() / QT_TR_NOOP(). Ignoring\n"; utf8 = (yyTok == Tok_trUtf8); line = yyLineNo; yyTok = getToken(); @@ -1779,10 +1782,9 @@ void CppParser::parseInternal(ConversionData &cd, QSet &inclusions) QStringList unresolved; if (!fullyQualify(namespaces, pendingContext, true, &functionContext, &unresolved)) { functionContextUnresolved = unresolved.join(strColons); - qWarning("%s:%d: Qualifying with unknown namespace/class %s::%s\n", - qPrintable(yyFileName), yyLineNo, - qPrintable(stringifyNamespace(functionContext)), - qPrintable(unresolved.first())); + yyMsg() << "Qualifying with unknown namespace/class " + << qPrintable(stringifyNamespace(functionContext)) << "::" + << qPrintable(unresolved.first()) << std::endl; } pendingContext.clear(); } @@ -1790,8 +1792,7 @@ void CppParser::parseInternal(ConversionData &cd, QSet &inclusions) if (functionContextUnresolved.isEmpty()) { int idx = functionContext.length(); if (idx < 2) { - qWarning("%s:%d: tr() cannot be called without context\n", - qPrintable(yyFileName), yyLineNo); + yyMsg() << "tr() cannot be called without context\n"; break; } Namespace *fctx; @@ -1800,9 +1801,8 @@ void CppParser::parseInternal(ConversionData &cd, QSet &inclusions) context = stringifyNamespace(functionContext); fctx = findNamespace(functionContext)->classDef; if (!fctx->complained) { - qWarning("%s:%d: Class '%s' lacks Q_OBJECT macro\n", - qPrintable(yyFileName), yyLineNo, - qPrintable(context)); + yyMsg() << "Class '" << qPrintable(context) + << "' lacks Q_OBJECT macro\n"; fctx->complained = true; } goto gotctx; @@ -1830,9 +1830,8 @@ void CppParser::parseInternal(ConversionData &cd, QSet &inclusions) int last = prefix.lastIndexOf(strColons); QString className = prefix.mid(last == -1 ? 0 : last + 2); if (!className.isEmpty() && className == functionName) { - qWarning("%s::%d: It is not recommended to call tr() from within a constructor '%s::%s' ", - qPrintable(yyFileName), yyLineNo, - className.constData(), functionName.constData()); + yyMsg() << "It is not recommended to call tr() from within a constructor '" + << qPrintable(className) << "::" << qPrintable(functionName) << "'\n"; } #endif prefix.chop(2); @@ -1847,9 +1846,7 @@ void CppParser::parseInternal(ConversionData &cd, QSet &inclusions) context = fctx->trQualification; } if (!fctx->hasTrFunctions && !fctx->complained) { - qWarning("%s:%d: Class '%s' lacks Q_OBJECT macro\n", - qPrintable(yyFileName), yyLineNo, - qPrintable(context)); + yyMsg() << "Class '" << qPrintable(context) << "' lacks Q_OBJECT macro\n"; fctx->complained = true; } } else { @@ -1870,8 +1867,7 @@ void CppParser::parseInternal(ConversionData &cd, QSet &inclusions) if (!tor) goto case_default; if (!sourcetext.isEmpty()) - qWarning("%s:%d: //%% cannot be used with translate() / QT_TRANSLATE_NOOP(). Ignoring\n", - qPrintable(yyFileName), yyLineNo); + yyMsg() << "//%% cannot be used with translate() / QT_TRANSLATE_NOOP(). Ignoring\n"; utf8 = (yyTok == Tok_translateUtf8); line = yyLineNo; yyTok = getToken(); @@ -1925,8 +1921,7 @@ void CppParser::parseInternal(ConversionData &cd, QSet &inclusions) if (!tor) goto case_default; if (!msgid.isEmpty()) - qWarning("%s:%d: //= cannot be used with qtTrId() / QT_TRID_NOOP(). Ignoring\n", - qPrintable(yyFileName), yyLineNo); + yyMsg() << "//= cannot be used with qtTrId() / QT_TRID_NOOP(). Ignoring\n"; //utf8 = false; // Maybe use //%% or something like that line = yyLineNo; yyTok = getToken(); @@ -1993,15 +1988,13 @@ void CppParser::parseInternal(ConversionData &cd, QSet &inclusions) if (isspace(c)) continue; if (c != '"') { - qWarning("%s:%d: Unexpected character in meta string\n", - qPrintable(yyFileName), yyLineNo); + yyMsg() << "Unexpected character in meta string\n"; break; } forever { if (p >= yyWord.length()) { whoops: - qWarning("%s:%d: Unterminated meta string\n", - qPrintable(yyFileName), yyLineNo); + yyMsg() << "Unterminated meta string\n"; break; } c = yyWord.unicode()[p++].unicode(); @@ -2054,8 +2047,7 @@ void CppParser::parseInternal(ConversionData &cd, QSet &inclusions) case Tok_Arrow: yyTok = getToken(); if (yyTok == Tok_tr || yyTok == Tok_trUtf8) - qWarning("%s:%d: Cannot invoke tr() like this\n", - qPrintable(yyFileName), yyLineNo); + yyMsg() << "Cannot invoke tr() like this\n"; break; case Tok_ColonColon: if (yyBraceDepth == namespaceDepths.count() && yyParenDepth == 0 && !yyTokColonSeen) @@ -2123,17 +2115,17 @@ void CppParser::parseInternal(ConversionData &cd, QSet &inclusions) } if (yyBraceDepth != 0) - qWarning("%s:%d: Unbalanced opening brace in C++ code" - " (or abuse of the C++ preprocessor)\n", - qPrintable(yyFileName), yyBraceLineNo); + yyMsg(yyBraceLineNo) + << "Unbalanced opening brace in C++ code" + " (or abuse of the C++ preprocessor)\n"; else if (yyParenDepth != 0) - qWarning("%s:%d: Unbalanced opening parenthesis in C++ code" - " (or abuse of the C++ preprocessor)\n", - qPrintable(yyFileName), yyParenLineNo); + yyMsg(yyParenLineNo) + << "Unbalanced opening parenthesis in C++ code" + " (or abuse of the C++ preprocessor)\n"; else if (yyBracketDepth != 0) - qWarning("%s:%d: Unbalanced opening bracket in C++ code" - " (or abuse of the C++ preprocessor)\n", - qPrintable(yyFileName), yyBracketLineNo); + yyMsg(yyBracketLineNo) + << "Unbalanced opening bracket in C++ code" + " (or abuse of the C++ preprocessor)\n"; } const ParseResults *CppParser::recordResults(bool isHeader) diff --git a/tools/linguist/lupdate/java.cpp b/tools/linguist/lupdate/java.cpp index 27988b04..dc66e2b 100644 --- a/tools/linguist/lupdate/java.cpp +++ b/tools/linguist/lupdate/java.cpp @@ -51,6 +51,8 @@ #include #include +#include + #include QT_BEGIN_NAMESPACE @@ -107,6 +109,11 @@ static QString yyPackage; static QStack yyScope; static QString yyDefaultContext; +std::ostream &yyMsg(int line = 0) +{ + return std::cerr << qPrintable(yyFileName) << ':' << (line ? line : yyLineNo) << ": "; +} + static QChar getChar() { if (yyInPos >= yyInStr.size()) @@ -189,10 +196,7 @@ static int getToken() while ( !metAsterSlash ) { yyCh = getChar(); if ( yyCh == EOF ) { - qFatal( "%s: Unterminated Java comment starting at" - " line %d\n", - qPrintable(yyFileName), yyLineNo ); - + yyMsg() << "Unterminated Java comment.\n"; return Tok_Comment; } @@ -228,8 +232,8 @@ static int getToken() else { int sub(yyCh.toLower().toAscii() - 87); if( sub > 15 || sub < 10) { - qFatal( "%s:%d: Invalid Unicode", - qPrintable(yyFileName), yyLineNo ); + yyMsg() << "Invalid Unicode value.\n"; + break; } unicode += sub; } @@ -251,8 +255,7 @@ static int getToken() } if ( yyCh != QLatin1Char('"') ) - qFatal( "%s:%d: Unterminated string", - qPrintable(yyFileName), yyLineNo ); + yyMsg() << "Unterminated string.\n"; yyCh = getChar(); @@ -365,9 +368,8 @@ static bool matchString( QString &s ) if (yyTok == Tok_String) s += yyString; else { - qWarning( "%s:%d: String used in translation can only contain strings" - " concatenated with other strings, not expressions or numbers.", - qPrintable(yyFileName), yyLineNo ); + yyMsg() << "String used in translation can contain only literals" + " concatenated with other literals, not expressions or numbers.\n"; return false; } yyTok = getToken(); @@ -475,8 +477,8 @@ static void parse( Translator *tor ) yyScope.push(new Scope(yyIdent, Scope::Clazz, yyLineNo)); } else { - qFatal( "%s:%d: Class must be followed by a classname", - qPrintable(yyFileName), yyLineNo ); + yyMsg() << "'class' must be followed by a class name.\n"; + break; } while (!match(Tok_LeftBrace)) { yyTok = getToken(); @@ -547,8 +549,7 @@ static void parse( Translator *tor ) case Tok_RightBrace: if ( yyScope.isEmpty() ) { - qFatal( "%s:%d: Unbalanced right brace in Java code\n", - qPrintable(yyFileName), yyLineNo ); + yyMsg() << "Excess closing brace.\n"; } else delete (yyScope.pop()); @@ -577,8 +578,7 @@ static void parse( Translator *tor ) yyPackage.append(QLatin1String(".")); break; default: - qFatal( "%s:%d: Package keyword should be followed by com.package.name;", - qPrintable(yyFileName), yyLineNo ); + yyMsg() << "'package' must be followed by package name.\n"; break; } yyTok = getToken(); @@ -591,11 +591,9 @@ static void parse( Translator *tor ) } if ( !yyScope.isEmpty() ) - qFatal( "%s:%d: Unbalanced braces in Java code\n", - qPrintable(yyFileName), yyScope.top()->line ); + yyMsg(yyScope.top()->line) << "Unbalanced opening brace.\n"; else if ( yyParenDepth != 0 ) - qFatal( "%s:%d: Unbalanced parentheses in Java code\n", - qPrintable(yyFileName), yyParenLineNo ); + yyMsg(yyParenLineNo) << "Unbalanced opening parenthesis.\n"; } diff --git a/tools/linguist/lupdate/main.cpp b/tools/linguist/lupdate/main.cpp index 6c9157a..1715b79 100644 --- a/tools/linguist/lupdate/main.cpp +++ b/tools/linguist/lupdate/main.cpp @@ -57,16 +57,15 @@ static QString m_defaultExtensions; -static void printErr(const QString & out) -{ - qWarning("%s", qPrintable(out)); -} - static void printOut(const QString & out) { std::cerr << qPrintable(out); } +class LU { + Q_DECLARE_TR_FUNCTIONS(LUpdate); +}; + static void recursiveFileInfoList(const QDir &dir, const QSet &nameFilters, QDir::Filters filter, QFileInfoList *fileinfolist) @@ -150,24 +149,25 @@ static void updateTsFiles(const Translator &fetchedTor, const QStringList &tsFil cd.m_sortContexts = !(options & NoSort); if (QFile(fileName).exists()) { if (!tor.load(fileName, cd, QLatin1String("auto"))) { - printErr(cd.error()); + printOut(cd.error()); *fail = true; continue; } tor.resolveDuplicates(); cd.clearErrors(); if (setCodec && fetchedTor.codec() != tor.codec()) - qWarning("lupdate warning: Codec for tr() '%s' disagrees with " - "existing file's codec '%s'. Expect trouble.", - fetchedTor.codecName().constData(), tor.codecName().constData()); + printOut(LU::tr("lupdate warning: Codec for tr() '%1' disagrees with" + " existing file's codec '%2'. Expect trouble.\n") + .arg(QString::fromLatin1(fetchedTor.codecName()), + QString::fromLatin1(tor.codecName()))); if (!targetLanguage.isEmpty() && targetLanguage != tor.languageCode()) - qWarning("lupdate warning: Specified target language '%s' disagrees with " - "existing file's language '%s'. Ignoring.", - qPrintable(targetLanguage), qPrintable(tor.languageCode())); + printOut(LU::tr("lupdate warning: Specified target language '%1' disagrees with" + " existing file's language '%2'. Ignoring.\n") + .arg(targetLanguage, tor.languageCode())); if (!sourceLanguage.isEmpty() && sourceLanguage != tor.sourceLanguageCode()) - qWarning("lupdate warning: Specified source language '%s' disagrees with " - "existing file's language '%s'. Ignoring.", - qPrintable(sourceLanguage), qPrintable(tor.sourceLanguageCode())); + printOut(LU::tr("lupdate warning: Specified source language '%1' disagrees with" + " existing file's language '%2'. Ignoring.\n") + .arg(sourceLanguage, tor.sourceLanguageCode())); } else { if (setCodec) tor.setCodec(fetchedTor.codec()); @@ -210,11 +210,11 @@ static void updateTsFiles(const Translator &fetchedTor, const QStringList &tsFil out.normalizeTranslations(cd); if (!cd.errors().isEmpty()) { - printErr(cd.error()); + printOut(cd.error()); cd.clearErrors(); } if (!out.save(fileName, cd, QLatin1String("auto"))) { - printErr(cd.error()); + printOut(cd.error()); *fail = true; } } @@ -296,8 +296,9 @@ static void processProject( if (!tmp.isEmpty()) { codecForSource = tmp.last().toLatin1(); if (!QTextCodec::codecForName(codecForSource)) { - qWarning("lupdate warning: Codec for source '%s' is invalid. " - "Falling back to codec for tr().", codecForSource.constData()); + printOut(LU::tr("lupdate warning: Codec for source '%1' is invalid." + " Falling back to codec for tr().\n") + .arg(QString::fromLatin1(codecForSource))); codecForSource.clear(); } } @@ -452,7 +453,7 @@ int main(int argc, char **argv) } else if (arg == QLatin1String("-target-language")) { ++i; if (i == argc) { - qWarning("The option -target-language requires a parameter."); + printOut(LU::tr("The option -target-language requires a parameter.\n")); return 1; } targetLanguage = args[i]; @@ -460,7 +461,7 @@ int main(int argc, char **argv) } else if (arg == QLatin1String("-source-language")) { ++i; if (i == argc) { - qWarning("The option -source-language requires a parameter."); + printOut(LU::tr("The option -source-language requires a parameter.\n")); return 1; } sourceLanguage = args[i]; @@ -468,7 +469,7 @@ int main(int argc, char **argv) } else if (arg == QLatin1String("-disable-heuristic")) { ++i; if (i == argc) { - qWarning("The option -disable-heuristic requires a parameter."); + printOut(LU::tr("The option -disable-heuristic requires a parameter.\n")); return 1; } arg = args[i]; @@ -479,14 +480,14 @@ int main(int argc, char **argv) } else if (arg == QLatin1String("number")) { options &= ~HeuristicNumber; } else { - qWarning("Invalid heuristic name passed to -disable-heuristic."); + printOut(LU::tr("Invalid heuristic name passed to -disable-heuristic.\n")); return 1; } continue; } else if (arg == QLatin1String("-locations")) { ++i; if (i == argc) { - qWarning("The option -locations requires a parameter."); + printOut(LU::tr("The option -locations requires a parameter.\n")); return 1; } if (args[i] == QLatin1String("none")) { @@ -496,7 +497,7 @@ int main(int argc, char **argv) } else if (args[i] == QLatin1String("absolute")) { options |= AbsoluteLocations; } else { - qWarning("Invalid parameter passed to -locations."); + printOut(LU::tr("Invalid parameter passed to -locations.\n")); return 1; } continue; @@ -522,7 +523,7 @@ int main(int argc, char **argv) } else if (arg == QLatin1String("-codecfortr")) { ++i; if (i == argc) { - qWarning("The -codecfortr option should be followed by a codec name."); + printOut(LU::tr("The -codecfortr option should be followed by a codec name.\n")); return 1; } codecForTr = args[i].toLatin1(); @@ -533,7 +534,7 @@ int main(int argc, char **argv) } else if (arg == QLatin1String("-extensions")) { ++i; if (i == argc) { - qWarning("The -extensions option should be followed by an extension list."); + printOut(LU::tr("The -extensions option should be followed by an extension list.\n")); return 1; } extensions = args[i]; @@ -541,7 +542,7 @@ int main(int argc, char **argv) } else if (arg == QLatin1String("-pro")) { ++i; if (i == argc) { - qWarning("The -pro option should be followed by a filename of .pro file."); + printOut(LU::tr("The -pro option should be followed by a filename of .pro file.\n")); return 1; } proFiles += args[i]; @@ -551,7 +552,7 @@ int main(int argc, char **argv) if (arg.length() == 2) { ++i; if (i == argc) { - qWarning("The -I option should be followed by a path."); + printOut(LU::tr("The -I option should be followed by a path.\n")); return 1; } includePath += args[i]; @@ -560,7 +561,7 @@ int main(int argc, char **argv) } continue; } else if (arg.startsWith(QLatin1String("-")) && arg != QLatin1String("-")) { - qWarning("Unrecognized option '%s'", qPrintable(arg)); + printOut(LU::tr("Unrecognized option '%1'.\n").arg(arg)); return 1; } @@ -568,8 +569,8 @@ int main(int argc, char **argv) if (arg.startsWith(QLatin1String("@"))) { QFile lstFile(arg.mid(1)); if (!lstFile.open(QIODevice::ReadOnly)) { - qWarning("lupdate error: List file '%s' is not readable", - qPrintable(lstFile.fileName())); + printOut(LU::tr("lupdate error: List file '%1' is not readable.\n") + .arg(lstFile.fileName())); return 1; } while (!lstFile.atEnd()) @@ -586,16 +587,16 @@ int main(int argc, char **argv) if (!fi.exists() || fi.isWritable()) { tsFileNames.append(QFileInfo(file).absoluteFilePath()); } else { - qWarning("lupdate warning: For some reason, '%s' is not writable.\n", - qPrintable(file)); + printOut(LU::tr("lupdate warning: For some reason, '%1' is not writable.\n") + .arg(file)); } found = true; break; } } if (!found) { - qWarning("lupdate error: File '%s' has no recognized extension\n", - qPrintable(file)); + printOut(LU::tr("lupdate error: File '%1' has no recognized extension.\n") + .arg(file)); return 1; } } @@ -604,7 +605,7 @@ int main(int argc, char **argv) foreach (const QString &file, files) { QFileInfo fi(file); if (!fi.exists()) { - qWarning("lupdate error: File '%s' does not exists\n", qPrintable(file)); + printOut(LU::tr("lupdate error: File '%1' does not exist.\n").arg(file)); return 1; } if (file.endsWith(QLatin1String(".pro"), Qt::CaseInsensitive) @@ -612,7 +613,7 @@ int main(int argc, char **argv) proFiles << file; } else if (fi.isDir()) { if (options & Verbose) - printOut(QObject::tr("Scanning directory '%1'...").arg(file)); + printOut(QObject::tr("Scanning directory '%1'...\n").arg(file)); QDir dir = QDir(fi.filePath()); projectRoots.insert(dir.absolutePath() + QLatin1Char('/')); if (extensionsNameFilters.isEmpty()) { @@ -662,16 +663,16 @@ int main(int argc, char **argv) } if (!targetLanguage.isEmpty() && tsFileNames.count() != 1) - std::cerr << "lupdate warning: -target-language usually only " - "makes sense with exactly one TS file.\n"; + printOut(LU::tr("lupdate warning: -target-language usually only" + " makes sense with exactly one TS file.\n")); if (!codecForTr.isEmpty() && tsFileNames.isEmpty()) - std::cerr << "lupdate warning: -codecfortr has no effect without -ts.\n"; + printOut(LU::tr("lupdate warning: -codecfortr has no effect without -ts.\n")); bool fail = false; if (proFiles.isEmpty()) { if (tsFileNames.isEmpty()) - std::cerr << "lupdate warning: no TS files specified. " - "Only diagnostics will be produced.\n"; + printOut(LU::tr("lupdate warning:" + " no TS files specified. Only diagnostics will be produced.\n")); Translator fetchedTor; ConversionData cd; @@ -685,7 +686,8 @@ int main(int argc, char **argv) sourceLanguage, targetLanguage, options, &fail); } else { if (!sourceFiles.isEmpty() || !includePath.isEmpty()) { - qWarning("lupdate error: Both project and source files / include paths specified.\n"); + printOut(LU::tr("lupdate error:" + " Both project and source files / include paths specified.\n")); return 1; } if (!tsFileNames.isEmpty()) { diff --git a/tools/linguist/lupdate/qscript.cpp b/tools/linguist/lupdate/qscript.cpp index 33276e6..188ac36 100644 --- a/tools/linguist/lupdate/qscript.cpp +++ b/tools/linguist/lupdate/qscript.cpp @@ -53,6 +53,8 @@ #include #include +#include + #include #include #include @@ -2214,13 +2216,13 @@ case 66: { if ((name == QLatin1String("qsTranslate")) || (name == QLatin1String("QT_TRANSLATE_NOOP"))) { QVariantList args = sym(2).toList(); if (args.size() < 2) { - qWarning("%s:%d: %s() requires at least two arguments", - qPrintable(fileName), identLineNo, qPrintable(name)); + std::cerr << qPrintable(fileName) << ':' << identLineNo << ": " + << qPrintable(name) << "() requires at least two arguments.\n"; } else { if ((args.at(0).type() != QVariant::String) || (args.at(1).type() != QVariant::String)) { - qWarning("%s:%d: %s(): both arguments must be literal strings", - qPrintable(fileName), identLineNo, qPrintable(name)); + std::cerr << qPrintable(fileName) << ':' << identLineNo << ": " + << qPrintable(name) << "(): both arguments must be literal strings.\n"; } else { QString context = args.at(0).toString(); QString text = args.at(1).toString(); @@ -2234,12 +2236,12 @@ case 66: { } else if ((name == QLatin1String("qsTr")) || (name == QLatin1String("QT_TR_NOOP"))) { QVariantList args = sym(2).toList(); if (args.size() < 1) { - qWarning("%s:%d: %s() requires at least one argument", - qPrintable(fileName), identLineNo, qPrintable(name)); + std::cerr << qPrintable(fileName) << ':' << identLineNo << ": " + << qPrintable(name) << "() requires at least one argument.\n"; } else { if (args.at(0).type() != QVariant::String) { - qWarning("%s:%d: %s(): text to translate must be a literal string", - qPrintable(fileName), identLineNo, qPrintable(name)); + std::cerr << qPrintable(fileName) << ':' << identLineNo << ": " + << qPrintable(name) << "(): text to translate must be a literal string.\n"; } else { QString context = QFileInfo(fileName).baseName(); QString text = args.at(0).toString(); @@ -2377,8 +2379,8 @@ bool loadQScript(Translator &translator, const QString &filename, ConversionData lexer.setCode(code, /*lineNumber=*/1); QScriptParser parser; if (!parser.parse(&lexer, filename, &translator)) { - qWarning("%s:%d: %s", qPrintable(filename), parser.errorLineNumber(), - qPrintable(parser.errorMessage())); + std::cerr << qPrintable(filename) << ':' << parser.errorLineNumber() << ": " + << qPrintable(parser.errorMessage()) << std::endl; return false; } diff --git a/tools/linguist/lupdate/qscript.g b/tools/linguist/lupdate/qscript.g index a473500..a07753c 100644 --- a/tools/linguist/lupdate/qscript.g +++ b/tools/linguist/lupdate/qscript.g @@ -90,6 +90,8 @@ #include #include +#include + #include #include #include @@ -1630,13 +1632,13 @@ case $rule_number: { if ((name == QLatin1String("qsTranslate")) || (name == QLatin1String("QT_TRANSLATE_NOOP"))) { QVariantList args = sym(2).toList(); if (args.size() < 2) { - qWarning("%s:%d: %s() requires at least two arguments", - qPrintable(fileName), identLineNo, qPrintable(name)); + std::cerr << qPrintable(fileName) << ':' << identLineNo << ": " + << qPrintable(name) << "() requires at least two arguments.\n"; } else { if ((args.at(0).type() != QVariant::String) || (args.at(1).type() != QVariant::String)) { - qWarning("%s:%d: %s(): both arguments must be literal strings", - qPrintable(fileName), identLineNo, qPrintable(name)); + std::cerr << qPrintable(fileName) << ':' << identLineNo << ": " + << qPrintable(name) << "(): both arguments must be literal strings.\n"; } else { QString context = args.at(0).toString(); QString text = args.at(1).toString(); @@ -1650,12 +1652,12 @@ case $rule_number: { } else if ((name == QLatin1String("qsTr")) || (name == QLatin1String("QT_TR_NOOP"))) { QVariantList args = sym(2).toList(); if (args.size() < 1) { - qWarning("%s:%d: %s() requires at least one argument", - qPrintable(fileName), identLineNo, qPrintable(name)); + std::cerr << qPrintable(fileName) << ':' << identLineNo << ": " + << qPrintable(name) << "() requires at least one argument.\n"; } else { if (args.at(0).type() != QVariant::String) { - qWarning("%s:%d: %s(): text to translate must be a literal string", - qPrintable(fileName), identLineNo, qPrintable(name)); + std::cerr << qPrintable(fileName) << ':' << identLineNo << ": " + << qPrintable(name) << "(): text to translate must be a literal string.\n"; } else { QString context = QFileInfo(fileName).baseName(); QString text = args.at(0).toString(); @@ -2009,8 +2011,8 @@ bool loadQScript(Translator &translator, const QString &filename, ConversionData lexer.setCode(code, /*lineNumber=*/1); QScriptParser parser; if (!parser.parse(&lexer, filename, &translator)) { - qWarning("%s:%d: %s", qPrintable(filename), parser.errorLineNumber(), - qPrintable(parser.errorMessage())); + std::cerr << qPrintable(filename) << ':' << parser.errorLineNumber() << ": " + << qPrintable(parser.errorMessage()) << std::endl; return false; } diff --git a/tools/linguist/shared/profileevaluator.cpp b/tools/linguist/shared/profileevaluator.cpp index 5e1ee1f..a21408c 100644 --- a/tools/linguist/shared/profileevaluator.cpp +++ b/tools/linguist/shared/profileevaluator.cpp @@ -2594,19 +2594,19 @@ void ProFileEvaluator::addProperties(const QHash &properties) void ProFileEvaluator::logMessage(const QString &message) { if (d->m_verbose && !d->m_skipLevel) - qWarning("%s", qPrintable(message)); + fprintf(stderr, "%s\n", qPrintable(message)); } void ProFileEvaluator::fileMessage(const QString &message) { if (!d->m_skipLevel) - qWarning("%s", qPrintable(message)); + fprintf(stderr, "%s\n", qPrintable(message)); } void ProFileEvaluator::errorMessage(const QString &message) { if (!d->m_skipLevel) - qWarning("%s", qPrintable(message)); + fprintf(stderr, "%s\n", qPrintable(message)); } void ProFileEvaluator::setVerbose(bool on) diff --git a/tools/linguist/shared/translator.cpp b/tools/linguist/shared/translator.cpp index c86a9dd..8223dc6 100644 --- a/tools/linguist/shared/translator.cpp +++ b/tools/linguist/shared/translator.cpp @@ -43,6 +43,8 @@ #include "simtexth.h" +#include + #include #ifdef Q_OS_WIN // required for _setmode, to avoid _O_TEXT streams... @@ -586,22 +588,21 @@ void Translator::reportDuplicates(const Duplicates &dupes, const QString &fileName, bool verbose) { if (!dupes.byId.isEmpty() || !dupes.byContents.isEmpty()) { + std::cerr << "Warning: dropping duplicate messages in '" << qPrintable(fileName); if (!verbose) { - qWarning("Warning: dropping duplicate messages in '%s'\n(try -verbose for more info).", - qPrintable(fileName)); + std::cerr << "'\n(try -verbose for more info).\n"; } else { - qWarning("Warning: dropping duplicate messages in '%s':", qPrintable(fileName)); + std::cerr << "':\n"; foreach (int i, dupes.byId) - qWarning("\n* ID: %s", qPrintable(message(i).id())); + std::cerr << "\n* ID: " << qPrintable(message(i).id()) << std::endl; foreach (int j, dupes.byContents) { const TranslatorMessage &msg = message(j); - qWarning("\n* Context: %s\n* Source: %s", - qPrintable(msg.context()), - qPrintable(msg.sourceText())); + std::cerr << "\n* Context: " << qPrintable(msg.context()) + << "\n* Source: " << qPrintable(msg.sourceText()) << std::endl; if (!msg.comment().isEmpty()) - qWarning("* Comment: %s", qPrintable(msg.comment())); + std::cerr << "* Comment: " << qPrintable(msg.comment()) << std::endl; } - qWarning(); + std::cerr << std::endl; } } } @@ -737,7 +738,7 @@ void Translator::setCodecName(const QByteArray &name) QTextCodec *codec = QTextCodec::codecForName(name); if (!codec) { if (!name.isEmpty()) - qWarning("No QTextCodec for %s available. Using Latin1\n", name.constData()); + std::cerr << "No QTextCodec for " << name.constData() << " available. Using Latin1.\n"; m_codec = QTextCodec::codecForName("ISO-8859-1"); } else { m_codec = codec; -- cgit v0.12 From 068177288001c46896d6b04c520731adb56ed288 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 3 Jun 2010 18:05:47 +0200 Subject: remove spurious empty lines in the linguist tools' output ConversionData::error() does already newline-terminate the strings. --- tools/linguist/lconvert/main.cpp | 8 ++++---- tools/linguist/lrelease/main.cpp | 4 ++-- tools/linguist/shared/po.cpp | 16 ++++++++-------- tools/linguist/shared/qm.cpp | 4 ++-- tools/linguist/shared/translator.cpp | 2 +- tools/linguist/shared/translator.h | 2 +- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/tools/linguist/lconvert/main.cpp b/tools/linguist/lconvert/main.cpp index 049ea43..094406c 100644 --- a/tools/linguist/lconvert/main.cpp +++ b/tools/linguist/lconvert/main.cpp @@ -240,7 +240,7 @@ int main(int argc, char *argv[]) tr.setLanguageCode(Translator::guessLanguageCodeFromFileName(inFiles[0].name)); if (!tr.load(inFiles[0].name, cd, inFiles[0].format)) { - std::cerr << qPrintable(cd.error()) << std::endl; + std::cerr << qPrintable(cd.error()); return 2; } tr.reportDuplicates(tr.resolveDuplicates(), inFiles[0].name, verbose); @@ -248,7 +248,7 @@ int main(int argc, char *argv[]) for (int i = 1; i < inFiles.size(); ++i) { Translator tr2; if (!tr2.load(inFiles[i].name, cd, inFiles[i].format)) { - std::cerr << qPrintable(cd.error()) << std::endl; + std::cerr << qPrintable(cd.error()); return 2; } tr2.reportDuplicates(tr2.resolveDuplicates(), inFiles[i].name, verbose); @@ -273,11 +273,11 @@ int main(int argc, char *argv[]) tr.normalizeTranslations(cd); if (!cd.errors().isEmpty()) { - std::cerr << qPrintable(cd.error()) << std::endl; + std::cerr << qPrintable(cd.error()); cd.clearErrors(); } if (!tr.save(outFileName, cd, outFormat)) { - std::cerr << qPrintable(cd.error()) << std::endl; + std::cerr << qPrintable(cd.error()); return 3; } return 0; diff --git a/tools/linguist/lrelease/main.cpp b/tools/linguist/lrelease/main.cpp index df0b430..b5cff90 100644 --- a/tools/linguist/lrelease/main.cpp +++ b/tools/linguist/lrelease/main.cpp @@ -108,7 +108,7 @@ static bool loadTsFile(Translator &tor, const QString &tsFileName, bool /* verbo ConversionData cd; bool ok = tor.load(tsFileName, cd, QLatin1String("auto")); if (!ok) { - std::cerr << "lrelease error: " << qPrintable(cd.error()) << std::endl; + std::cerr << "lrelease error: " << qPrintable(cd.error()); } else { if (!cd.errors().isEmpty()) printOut(cd.error()); @@ -143,7 +143,7 @@ static bool releaseTranslator(Translator &tor, const QString &qmFileName, if (!ok) { std::cerr << "lrelease error: cannot save '" << qPrintable(qmFileName) - << "': " << qPrintable(cd.error()) << std::endl; + << "': " << qPrintable(cd.error()); } else if (!cd.errors().isEmpty()) { printOut(cd.error()); } diff --git a/tools/linguist/shared/po.cpp b/tools/linguist/shared/po.cpp index 6a1d426..a692332 100644 --- a/tools/linguist/shared/po.cpp +++ b/tools/linguist/shared/po.cpp @@ -461,7 +461,7 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd) continue; int idx = hdr.indexOf(':'); if (idx < 0) { - cd.appendError(QString::fromLatin1("Unexpected PO header format '%1'\n") + cd.appendError(QString::fromLatin1("Unexpected PO header format '%1'") .arg(QString::fromLatin1(hdr))); error = true; break; @@ -482,7 +482,7 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd) } else if (hdrName == "Content-Type") { if (cd.m_codecForSource.isEmpty()) { if (!hdrValue.startsWith("text/plain; charset=")) { - cd.appendError(QString::fromLatin1("Unexpected Content-Type header '%1'\n") + cd.appendError(QString::fromLatin1("Unexpected Content-Type header '%1'") .arg(QString::fromLatin1(hdrValue))); error = true; // This will avoid a flood of conversion errors. @@ -491,7 +491,7 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd) QByteArray cod = hdrValue.mid(20); QTextCodec *cdc = QTextCodec::codecForName(cod); if (!cdc) { - cd.appendError(QString::fromLatin1("Unsupported codec '%1'\n") + cd.appendError(QString::fromLatin1("Unsupported codec '%1'") .arg(QString::fromLatin1(cod))); error = true; // This will avoid a flood of conversion errors. @@ -503,7 +503,7 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd) } } else if (hdrName == "Content-Transfer-Encoding") { if (hdrValue != "8bit") { - cd.appendError(QString::fromLatin1("Unexpected Content-Transfer-Encoding '%1'\n") + cd.appendError(QString::fromLatin1("Unexpected Content-Transfer-Encoding '%1'") .arg(QString::fromLatin1(hdrValue))); return false; } @@ -644,7 +644,7 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd) if (qtContexts) splitContext(&item.oldTscomment, &item.context); } else { - cd.appendError(QString(QLatin1String("PO-format parse error in line %1: '%2'\n")) + cd.appendError(QString(QLatin1String("PO-format parse error in line %1: '%2'")) .arg(l + 1).arg(codec->toUnicode(lines[l]))); error = true; } @@ -661,13 +661,13 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd) } else if (line.startsWith("#~ msgctxt ")) { item.tscomment = slurpEscapedString(lines, l, 11, "#~ ", cd); } else { - cd.appendError(QString(QLatin1String("PO-format parse error in line %1: '%2'\n")) + cd.appendError(QString(QLatin1String("PO-format parse error in line %1: '%2'")) .arg(l + 1).arg(codec->toUnicode(lines[l]))); error = true; } break; default: - cd.appendError(QString(QLatin1String("PO-format parse error in line %1: '%2'\n")) + cd.appendError(QString(QLatin1String("PO-format parse error in line %1: '%2'")) .arg(l + 1).arg(codec->toUnicode(lines[l]))); error = true; break; @@ -685,7 +685,7 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd) item.extra[QLatin1String("po-msgid_plural")] = codec->toUnicode(extra); item.isPlural = true; } else { - cd.appendError(QString(QLatin1String("PO-format error in line %1: '%2'\n")) + cd.appendError(QString(QLatin1String("PO-format error in line %1: '%2'")) .arg(l + 1).arg(codec->toUnicode(lines[l]))); error = true; } diff --git a/tools/linguist/shared/qm.cpp b/tools/linguist/shared/qm.cpp index e2c4f4a..6678943 100644 --- a/tools/linguist/shared/qm.cpp +++ b/tools/linguist/shared/qm.cpp @@ -773,11 +773,11 @@ static bool saveQM(const Translator &translator, QIODevice &dev, ConversionData if (saved && cd.isVerbose()) { int generatedCount = finished + unfinished; cd.appendError(QCoreApplication::translate("LRelease", - " Generated %n translation(s) (%1 finished and %2 unfinished)\n", 0, + " Generated %n translation(s) (%1 finished and %2 unfinished)", 0, QCoreApplication::CodecForTr, generatedCount).arg(finished).arg(unfinished)); if (untranslated) cd.appendError(QCoreApplication::translate("LRelease", - " Ignored %n untranslated source text(s)\n", 0, + " Ignored %n untranslated source text(s)", 0, QCoreApplication::CodecForTr, untranslated)); } return saved; diff --git a/tools/linguist/shared/translator.cpp b/tools/linguist/shared/translator.cpp index 8223dc6..36af8da 100644 --- a/tools/linguist/shared/translator.cpp +++ b/tools/linguist/shared/translator.cpp @@ -689,7 +689,7 @@ void Translator::normalizeTranslations(ConversionData &cd) cd.appendError(QLatin1String( "Removed plural forms as the target language has less " "forms.\nIf this sounds wrong, possibly the target language is " - "not set or recognized.\n")); + "not set or recognized.")); } QString Translator::guessLanguageCodeFromFileName(const QString &filename) diff --git a/tools/linguist/shared/translator.h b/tools/linguist/shared/translator.h index bb199f0..cfb2178 100644 --- a/tools/linguist/shared/translator.h +++ b/tools/linguist/shared/translator.h @@ -92,7 +92,7 @@ public: bool sortContexts() const { return m_sortContexts; } void appendError(const QString &error) { m_errors.append(error); } - QString error() const { return m_errors.join(QLatin1String("\n")); } + QString error() const { return m_errors.isEmpty() ? QString() : m_errors.join(QLatin1String("\n")) + QLatin1Char('\n'); } QStringList errors() const { return m_errors; } void clearErrors() { m_errors.clear(); } -- cgit v0.12 From 21bd54d5cf754ca5a5928cbd3c2a0ab17e64f633 Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Fri, 4 Jun 2010 11:58:56 +1000 Subject: Skip tst_maketestselftest::make_check by default on Windows nmake and checktest are too slow on Windows for this test to be enabled by default. Set RUN_SLOW_TESTS=1 to run the test manually. --- tests/auto/maketestselftest/tst_maketestselftest.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/auto/maketestselftest/tst_maketestselftest.cpp b/tests/auto/maketestselftest/tst_maketestselftest.cpp index c3cbf76..3d1bbed 100644 --- a/tests/auto/maketestselftest/tst_maketestselftest.cpp +++ b/tests/auto/maketestselftest/tst_maketestselftest.cpp @@ -458,6 +458,9 @@ void tst_MakeTestSelfTest::make_check() QString checktest(SRCDIR "/checktest/checktest"); #ifdef Q_OS_WIN32 + if (qgetenv("RUN_SLOW_TESTS").isEmpty()) { + QSKIP("This test is too slow to run by default on Windows. Set RUN_SLOW_TESTS=1 to run it.", SkipAll); + } checktest.replace("/", "\\"); checktest += ".exe"; #endif -- cgit v0.12 From 3c5a4999703d36574e9d7017e633c29013e5e20d Mon Sep 17 00:00:00 2001 From: Tasuku Suzuki Date: Fri, 4 Jun 2010 09:09:39 +0200 Subject: Fix QT_NO_ACTION Merge-request: 657 Reviewed-by: Andreas Aardal Hanssen --- src/imports/webkit/qdeclarativewebview.cpp | 3 ++- src/imports/webkit/qdeclarativewebview_p.h | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/imports/webkit/qdeclarativewebview.cpp b/src/imports/webkit/qdeclarativewebview.cpp index 050e2b7..9e5647f 100644 --- a/src/imports/webkit/qdeclarativewebview.cpp +++ b/src/imports/webkit/qdeclarativewebview.cpp @@ -711,7 +711,7 @@ bool QDeclarativeWebView::sceneEvent(QEvent *event) return QDeclarativeItem::sceneEvent(event); } - +#ifndef QT_NO_ACTION /*! \qmlproperty action WebView::back This property holds the action for causing the previous URL in the history to be displayed. @@ -747,6 +747,7 @@ QAction *QDeclarativeWebView::stopAction() const { return page()->action(QWebPage::Stop); } +#endif // QT_NO_ACTION /*! \qmlproperty real WebView::title diff --git a/src/imports/webkit/qdeclarativewebview_p.h b/src/imports/webkit/qdeclarativewebview_p.h index 87bd938..042237e 100644 --- a/src/imports/webkit/qdeclarativewebview_p.h +++ b/src/imports/webkit/qdeclarativewebview_p.h @@ -108,10 +108,12 @@ class QDeclarativeWebView : public QDeclarativeItem Q_PROPERTY(qreal progress READ progress NOTIFY progressChanged) Q_PROPERTY(Status status READ status NOTIFY statusChanged) +#ifndef QT_NO_ACTION Q_PROPERTY(QAction* reload READ reloadAction CONSTANT) Q_PROPERTY(QAction* back READ backAction CONSTANT) Q_PROPERTY(QAction* forward READ forwardAction CONSTANT) Q_PROPERTY(QAction* stop READ stopAction CONSTANT) +#endif Q_PROPERTY(QDeclarativeWebSettings* settings READ settingsObject CONSTANT) @@ -154,10 +156,12 @@ public: qreal progress() const; QString statusText() const; +#ifndef QT_NO_ACTION QAction *reloadAction() const; QAction *backAction() const; QAction *forwardAction() const; QAction *stopAction() const; +#endif QWebPage *page() const; void setPage(QWebPage *page); -- cgit v0.12 From c5beba29f1ac44ce225d73da67503f23f8aeffdc Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Fri, 4 Jun 2010 17:08:37 +1000 Subject: Fixed unescaped backslashes in testcase.prf --- mkspecs/features/testcase.prf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mkspecs/features/testcase.prf b/mkspecs/features/testcase.prf index 2a56d7d..7a7c9e3 100644 --- a/mkspecs/features/testcase.prf +++ b/mkspecs/features/testcase.prf @@ -18,9 +18,9 @@ win32:debug_and_release { # subdirectory. However, since make's working directory is already outside of the # debug/release subdirectory, this first ../ should be ignored when deciding if # we have to change directory before running the test. - MUNGED_TARGET=$$replace(MUNGED_TARGET,^\.\./,) + MUNGED_TARGET=$$replace(MUNGED_TARGET,^\\.\\./,) } -!isEmpty(MUNGED_DESTDIR):!contains(MUNGED_DESTDIR,^\./?):check.commands = cd $(DESTDIR) && +!isEmpty(MUNGED_DESTDIR):!contains(MUNGED_DESTDIR,^\\./?):check.commands = cd $(DESTDIR) && contains(MUNGED_TARGET,.*/.*):check.commands = cd $(DESTDIR) && # Allow for a custom test runner script -- cgit v0.12 From 6078c083c0aca4d3b5b652fccce7b27de083c890 Mon Sep 17 00:00:00 2001 From: Tasuku Suzuki Date: Fri, 4 Jun 2010 09:15:45 +0200 Subject: Fix QT_NO_CLIPBOARD Merge-request: 658 Reviewed-by: Andreas Aardal Hanssen --- src/declarative/graphicsitems/qdeclarativetextedit.cpp | 3 ++- src/declarative/graphicsitems/qdeclarativetextedit_p.h | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index 48826ff..94973f2 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -1056,6 +1056,7 @@ void QDeclarativeTextEdit::select(int start, int end) updateSelectionMarkers(); } +#ifndef QT_NO_CLIPBOARD /*! \qmlmethod TextEdit::cut() @@ -1088,7 +1089,7 @@ void QDeclarativeTextEdit::paste() Q_D(QDeclarativeTextEdit); d->control->paste(); } - +#endif // QT_NO_CLIPBOARD /*! \overload diff --git a/src/declarative/graphicsitems/qdeclarativetextedit_p.h b/src/declarative/graphicsitems/qdeclarativetextedit_p.h index 3846d49..0ecb2f3 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextedit_p.h @@ -223,9 +223,11 @@ public Q_SLOTS: void selectAll(); void selectWord(); void select(int start, int end); +#ifndef QT_NO_CLIPBOARD void cut(); void copy(); void paste(); +#endif private Q_SLOTS: void updateImgCache(const QRectF &rect); -- cgit v0.12 From e7b977a323b634bab9d4b09be79cc99af25b6424 Mon Sep 17 00:00:00 2001 From: Tasuku Suzuki Date: Fri, 4 Jun 2010 09:25:35 +0200 Subject: Search local directory if no qconfig file found in src/corelib/global/ configure script searched qconfig-local.h under src/corelib/global/ with "-qconfig local". After this commit, configure tries to find local directory if the file is not found in the path. Now you can pass the option like "-qconfig ./qconfig-myconfig.h" Merge-request: 2341 Reviewed-by: Andreas Aardal Hanssen --- configure | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 0db2236..991596f 100755 --- a/configure +++ b/configure @@ -2201,9 +2201,11 @@ minimal|small|medium|large|full) ;; *) # not known to be sufficient for anything - if [ '!' -f "$relpath/src/corelib/global/qconfig-${CFG_QCONFIG}.h" ]; then + if [ '!' -f "$relpath/src/corelib/global/qconfig-${CFG_QCONFIG}.h" ] && [ '!' -f `"$relpath/config.tests/unix/makeabs" "${CFG_QCONFIG}"` ]; then echo >&2 "Error: configuration file not found:" echo >&2 " $relpath/src/corelib/global/qconfig-${CFG_QCONFIG}.h" + echo >&2 " or" + echo >&2 " `"$relpath/config.tests/unix/makeabs" "${CFG_QCONFIG}"`" OPT_HELP=yes fi esac @@ -7229,7 +7231,11 @@ full) *) tmpconfig="$outpath/src/corelib/global/qconfig.h.new" echo "#ifndef QT_BOOTSTRAPPED" >"$tmpconfig" - cat "$relpath/src/corelib/global/qconfig-$CFG_QCONFIG.h" >>"$tmpconfig" + if [ -f "$relpath/src/corelib/global/qconfig-$CFG_QCONFIG.h" ]; then + cat "$relpath/src/corelib/global/qconfig-$CFG_QCONFIG.h" >>"$tmpconfig" + elif [ -f `"$relpath/config.tests/unix/makeabs" "${CFG_QCONFIG}"` ]; then + cat `"$relpath/config.tests/unix/makeabs" "${CFG_QCONFIG}"` >>"$tmpconfig" + fi echo "#endif" >>"$tmpconfig" ;; esac -- cgit v0.12 From 51c3d06e09b5e501ed7536504053c02366b2df0d Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Fri, 4 Jun 2010 10:33:36 +0200 Subject: Updated WebKit to de1e909b06cbc981d63e0fc0f6a3f84002dd1e80 Integrated changes: || || [Qt] GraphicsLayer: warnings when reloading page || || || [Qt] Flash Plugin is not working on mac-cocoa-32 || || || REGRESSION(58615): Scroll events are sent twice per keypress for ports that don't have a platformWidget scrollbar || || || [Qt, Gtk] Allows build-webkit script to receive an install prefix as parameter || || || [Qt] Add documentation to the QtWebkit bridge || || || [Qt] The FIRST letter in the PASSWORD field is taken in UPPERCASE by DEFAULT in gmail.com web page || --- src/3rdparty/webkit/.tag | 2 +- src/3rdparty/webkit/VERSION | 2 +- src/3rdparty/webkit/WebCore/ChangeLog | 79 ++ src/3rdparty/webkit/WebCore/WebCore.gypi | 2 +- src/3rdparty/webkit/WebCore/WebCore.pro | 15 +- src/3rdparty/webkit/WebCore/page/FrameView.cpp | 4 + src/3rdparty/webkit/WebCore/page/FrameView.h | 3 +- .../webkit/WebCore/platform/ScrollView.cpp | 2 +- src/3rdparty/webkit/WebCore/platform/ScrollView.h | 2 +- .../platform/graphics/qt/GraphicsLayerQt.cpp | 9 +- .../webkit/WebCore/plugins/mac/PluginViewMac.cpp | 830 -------------------- .../webkit/WebCore/plugins/mac/PluginViewMac.mm | 833 +++++++++++++++++++++ src/3rdparty/webkit/WebKit/qt/ChangeLog | 24 + .../WebKit/qt/WebCoreSupport/EditorClientQt.cpp | 6 +- .../webkit/WebKit/qt/docs/qtwebkit-bridge.qdoc | 425 +++++++++++ src/3rdparty/webkit/WebKit/qt/docs/qtwebkit.qdoc | 5 +- .../webkitsnippets/qtwebkit_bridge_snippets.cpp | 83 ++ 17 files changed, 1479 insertions(+), 847 deletions(-) delete mode 100644 src/3rdparty/webkit/WebCore/plugins/mac/PluginViewMac.cpp create mode 100644 src/3rdparty/webkit/WebCore/plugins/mac/PluginViewMac.mm create mode 100644 src/3rdparty/webkit/WebKit/qt/docs/qtwebkit-bridge.qdoc create mode 100644 src/3rdparty/webkit/WebKit/qt/docs/webkitsnippets/qtwebkit_bridge_snippets.cpp diff --git a/src/3rdparty/webkit/.tag b/src/3rdparty/webkit/.tag index cc67d1b..24fdc2a 100644 --- a/src/3rdparty/webkit/.tag +++ b/src/3rdparty/webkit/.tag @@ -1 +1 @@ -de1e909b06cbc981d63e0fc0f6a3f84002dd1e80 +903617844b4341f7098b63b54e5be16cd83af647 diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION index f37c367..211921d 100644 --- a/src/3rdparty/webkit/VERSION +++ b/src/3rdparty/webkit/VERSION @@ -4,4 +4,4 @@ This is a snapshot of the Qt port of WebKit from and has the sha1 checksum - 9a83f22bc41a2016b6bbf495bfd32b3a659038c8 + de1e909b06cbc981d63e0fc0f6a3f84002dd1e80 diff --git a/src/3rdparty/webkit/WebCore/ChangeLog b/src/3rdparty/webkit/WebCore/ChangeLog index e907167..57e0e44 100644 --- a/src/3rdparty/webkit/WebCore/ChangeLog +++ b/src/3rdparty/webkit/WebCore/ChangeLog @@ -1,3 +1,82 @@ +2010-06-03 Tor Arne Vestbø + + Reviewed by Simon Hausmann. + + [Qt] Fix NPAPI support on Mac OS X/Cocoa-32 + + qt_mac_window_for() returns a NSWindow on Cocoa, so we were + passing in a NSWindow instead of a WindowRef as part of the + NP_CGContext. + + https://bugs.webkit.org/show_bug.cgi?id=38762 + + * WebCore.gypi: Reflect rename + * WebCore.pro: Reflect rename + * plugins/mac/PluginViewMac.cpp: Renamed to PluginViewMac.mm + and fix bug by getting the Carbon windowRef from the NSWindow. + * wscript: Reflect rename + +2010-06-02 Nico Weber + + Reviewed by Simon Fraser. + + Scroll events are sent twice per keypress for ports that don't have a platformWidget scrollbar + https://bugs.webkit.org/show_bug.cgi?id=39918 + + This was regressed by http://trac.webkit.org/changeset/58615 . Fix this by slightly tweaking + that patch. + + Test: editing/input/page-up-down-scrolls.html + + * page/FrameView.cpp: + (WebCore::FrameView::scrollPositionChanged): + * page/FrameView.h: + * platform/ScrollView.cpp: + (WebCore::ScrollView::valueChanged): + * platform/ScrollView.h: + (WebCore::ScrollView::repaintFixedElementsAfterScrolling): + +2010-06-02 Jocelyn Turcotte + + Reviewed by Simon Hausmann. + + [Qt] Fix make install on Symbian for headers in package builds when INSTALL_HEADERS is not defined + + First we wrote inst_headers.output with $$[QT_INSTALL_HEADERS] and then + overwrote it with the $$INSTALL_HEADERS variant without checking if the + variable was set. + + Fixed and cleaned up the logic of falling back to $$[QT_INSTALL_HEADERS]. + + * WebCore.pro: + +2010-06-01 No'am Rosenthal + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] GraphicsLayer: warnings when reloading page + https://bugs.webkit.org/show_bug.cgi?id=39694 + + Made sure recaching and masks aren't attempted on zero-size layers. + + No new tests. Old tests (e.g. LayoutTests/compositing/masks) show the problem. + + * platform/graphics/qt/GraphicsLayerQt.cpp: + (WebCore::MaskEffectQt::draw): + (WebCore::GraphicsLayerQtImpl::recache): + +2010-05-10 Rodrigo Belem + + Reviewed by Kenneth Christiansen , Simon Hausmann and Gustavo Noronha. + + [Qt, Gtk] Allows build-webkit script to receive an install prefix as parameter + https://bugs.webkit.org/show_bug.cgi?id=26224 + + This patch adds the ability, in the QtWebkit build system, to change + the installation path. + + * WebCore.pro: + 2010-06-01 Simon Hausmann Reviewed by Laszlo Gombos. diff --git a/src/3rdparty/webkit/WebCore/WebCore.gypi b/src/3rdparty/webkit/WebCore/WebCore.gypi index 1e92f1f..94a6052 100644 --- a/src/3rdparty/webkit/WebCore/WebCore.gypi +++ b/src/3rdparty/webkit/WebCore/WebCore.gypi @@ -2920,7 +2920,7 @@ 'plugins/gtk/xembed.h', 'plugins/mac/PluginDataMac.mm', 'plugins/mac/PluginPackageMac.cpp', - 'plugins/mac/PluginViewMac.cpp', + 'plugins/mac/PluginViewMac.mm', 'plugins/qt/PluginDataQt.cpp', 'plugins/qt/PluginPackageQt.cpp', 'plugins/qt/PluginViewQt.cpp', diff --git a/src/3rdparty/webkit/WebCore/WebCore.pro b/src/3rdparty/webkit/WebCore/WebCore.pro index 2a1536c..ba669bd 100644 --- a/src/3rdparty/webkit/WebCore/WebCore.pro +++ b/src/3rdparty/webkit/WebCore/WebCore.pro @@ -2166,7 +2166,7 @@ contains(DEFINES, ENABLE_NETSCAPE_PLUGIN_API=1) { mac { SOURCES += \ plugins/mac/PluginPackageMac.cpp \ - plugins/mac/PluginViewMac.cpp + plugins/mac/PluginViewMac.mm OBJECTIVE_SOURCES += \ platform/text/mac/StringImplMac.mm \ platform/mac/WebCoreNSStringExtras.mm @@ -2852,8 +2852,12 @@ CONFIG(QTDIR_build) { !symbian { headers.files = $$WEBKIT_INSTALL_HEADERS - headers.path = $$[QT_INSTALL_HEADERS]/QtWebKit - target.path = $$[QT_INSTALL_LIBS] + + !isEmpty(INSTALL_HEADERS): headers.path = $$INSTALL_HEADERS/QtWebKit + else: headers.path = $$[QT_INSTALL_HEADERS]/QtWebKit + + !isEmpty(INSTALL_LIBS): target.path = $$INSTALL_LIBS + else: target.path = $$[QT_INSTALL_LIBS] modfile.files = $$moduleFile modfile.path = $$[QMAKE_MKSPECS]/modules @@ -2863,7 +2867,10 @@ CONFIG(QTDIR_build) { # INSTALLS is not implemented in qmake's s60 generators, copy headers manually inst_headers.commands = $$QMAKE_COPY ${QMAKE_FILE_NAME} ${QMAKE_FILE_OUT} inst_headers.input = WEBKIT_INSTALL_HEADERS - inst_headers.output = $$[QT_INSTALL_HEADERS]/QtWebKit/${QMAKE_FILE_BASE}${QMAKE_FILE_EXT} + + !isEmpty(INSTALL_HEADERS): inst_headers.output = $$INSTALL_HEADERS/QtWebKit/${QMAKE_FILE_BASE}${QMAKE_FILE_EXT} + else: inst_headers.output = $$[QT_INSTALL_HEADERS]/QtWebKit/${QMAKE_FILE_BASE}${QMAKE_FILE_EXT} + QMAKE_EXTRA_COMPILERS += inst_headers inst_modfile.commands = $$inst_headers.commands diff --git a/src/3rdparty/webkit/WebCore/page/FrameView.cpp b/src/3rdparty/webkit/WebCore/page/FrameView.cpp index 39c92de..bc0519f 100644 --- a/src/3rdparty/webkit/WebCore/page/FrameView.cpp +++ b/src/3rdparty/webkit/WebCore/page/FrameView.cpp @@ -1060,7 +1060,11 @@ void FrameView::setScrollPosition(const IntPoint& scrollPoint) void FrameView::scrollPositionChanged() { frame()->eventHandler()->sendScrollEvent(); + repaintFixedElementsAfterScrolling(); +} +void FrameView::repaintFixedElementsAfterScrolling() +{ // For fixed position elements, update widget positions and compositing layers after scrolling, // but only if we're not inside of layout. // FIXME: we could skip this if we knew the page had no fixed position elements. diff --git a/src/3rdparty/webkit/WebCore/page/FrameView.h b/src/3rdparty/webkit/WebCore/page/FrameView.h index 7119975..71e2966 100644 --- a/src/3rdparty/webkit/WebCore/page/FrameView.h +++ b/src/3rdparty/webkit/WebCore/page/FrameView.h @@ -139,7 +139,8 @@ public: virtual void scrollRectIntoViewRecursively(const IntRect&); virtual void setScrollPosition(const IntPoint&); - virtual void scrollPositionChanged(); + void scrollPositionChanged(); + virtual void repaintFixedElementsAfterScrolling(); String mediaType() const; void setMediaType(const String&); diff --git a/src/3rdparty/webkit/WebCore/platform/ScrollView.cpp b/src/3rdparty/webkit/WebCore/platform/ScrollView.cpp index e50ab55..5753e1d 100644 --- a/src/3rdparty/webkit/WebCore/platform/ScrollView.cpp +++ b/src/3rdparty/webkit/WebCore/platform/ScrollView.cpp @@ -292,7 +292,7 @@ void ScrollView::valueChanged(Scrollbar* scrollbar) if (scrollbarsSuppressed()) return; - scrollPositionChanged(); + repaintFixedElementsAfterScrolling(); scrollContents(scrollDelta); } diff --git a/src/3rdparty/webkit/WebCore/platform/ScrollView.h b/src/3rdparty/webkit/WebCore/platform/ScrollView.h index 118a310..0f79fa8 100644 --- a/src/3rdparty/webkit/WebCore/platform/ScrollView.h +++ b/src/3rdparty/webkit/WebCore/platform/ScrollView.h @@ -303,7 +303,7 @@ private: void updateScrollbars(const IntSize& desiredOffset); // Called when the scroll position within this view changes. FrameView overrides this to generate repaint invalidations. - virtual void scrollPositionChanged() {} + virtual void repaintFixedElementsAfterScrolling() {} void platformInit(); void platformDestroy(); diff --git a/src/3rdparty/webkit/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp b/src/3rdparty/webkit/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp index 02bf25e..43c9245 100644 --- a/src/3rdparty/webkit/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp +++ b/src/3rdparty/webkit/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp @@ -57,7 +57,12 @@ public: // It's more efficient to do it this way because // (a) we don't need the QBrush abstraction - we always end up using QGraphicsItem::paint from the mask layer // (b) QGraphicsOpacityEffect detaches the pixmap, which is inefficient on OpenGL. - QPixmap maskPixmap(sourceBoundingRect().toAlignedRect().size()); + const QSize maskSize = sourceBoundingRect().toAlignedRect().size(); + if (!maskSize.isValid() || maskSize.isEmpty()) { + drawSource(painter); + return; + } + QPixmap maskPixmap(maskSize); // we need to do this so the pixmap would have hasAlpha() maskPixmap.fill(Qt::transparent); @@ -294,7 +299,7 @@ const GraphicsLayerQtImpl* GraphicsLayerQtImpl::rootLayer() const QPixmap GraphicsLayerQtImpl::recache(const QRegion& regionToUpdate) { - if (!m_layer->drawsContent()) + if (!m_layer->drawsContent() || m_size.isEmpty() ||!m_size.isValid()) return QPixmap(); QRegion region = regionToUpdate; diff --git a/src/3rdparty/webkit/WebCore/plugins/mac/PluginViewMac.cpp b/src/3rdparty/webkit/WebCore/plugins/mac/PluginViewMac.cpp deleted file mode 100644 index 1fd4676..0000000 --- a/src/3rdparty/webkit/WebCore/plugins/mac/PluginViewMac.cpp +++ /dev/null @@ -1,830 +0,0 @@ -/* - * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. - * Copyright (C) 2008 Collabora Ltd. All rights reserved. - * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) - * Copyright (C) 2009 Girish Ramakrishnan - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. 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. - * - * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. - */ - -#include "config.h" -#include "PluginView.h" - -#include "Bridge.h" -#include "Document.h" -#include "DocumentLoader.h" -#include "Element.h" -#include "EventNames.h" -#include "FocusController.h" -#include "FrameLoader.h" -#include "FrameLoadRequest.h" -#include "FrameTree.h" -#include "Frame.h" -#include "FrameView.h" -#include "GraphicsContext.h" -#include "HostWindow.h" -#include "HTMLNames.h" -#include "HTMLPlugInElement.h" -#include "Image.h" -#include "JSDOMBinding.h" -#include "KeyboardEvent.h" -#include "MouseEvent.h" -#include "NotImplemented.h" -#include "Page.h" -#include "PlatformMouseEvent.h" -#include "PlatformKeyboardEvent.h" -#include "PluginDebug.h" -#include "PluginPackage.h" -#include "PluginMainThreadScheduler.h" -#include "RenderLayer.h" -#include "ScriptController.h" -#include "Settings.h" -#include "npruntime_impl.h" -#include "runtime_root.h" -#include -#include -#include - - -using JSC::ExecState; -using JSC::Interpreter; -using JSC::JSLock; -using JSC::JSObject; -using JSC::JSValue; -using JSC::UString; - -#if PLATFORM(QT) -#include -#include -#include -#include "QWebPageClient.h" -QT_BEGIN_NAMESPACE -extern Q_GUI_EXPORT OSWindowRef qt_mac_window_for(const QWidget* w); -QT_END_NAMESPACE -#endif - -#if PLATFORM(WX) -#include -#include -#endif - -using std::min; - -using namespace WTF; - -namespace WebCore { - -using namespace HTMLNames; - -#ifndef NP_NO_CARBON -static int modifiersForEvent(UIEventWithKeyState *event); -#endif - -static inline WindowRef nativeWindowFor(PlatformWidget widget) -{ -#if PLATFORM(QT) - if (widget) - return static_cast(qt_mac_window_for(widget)); -#endif -#if PLATFORM(WX) - if (widget) - return (WindowRef)widget->MacGetTopLevelWindowRef(); -#endif - return 0; -} - -static inline CGContextRef cgHandleFor(PlatformWidget widget) -{ -#if PLATFORM(QT) - if (widget) - return (CGContextRef)widget->macCGHandle(); -#endif -#if PLATFORM(WX) - if (widget) - return (CGContextRef)widget->MacGetCGContextRef(); -#endif - return 0; -} - -static inline IntPoint topLevelOffsetFor(PlatformWidget widget) -{ -#if PLATFORM(QT) - if (widget) { - PlatformWidget topLevel = widget->window(); - return widget->mapTo(topLevel, QPoint(0, 0)) + topLevel->geometry().topLeft() - topLevel->pos(); - } -#endif -#if PLATFORM(WX) - if (widget) { - PlatformWidget toplevel = wxGetTopLevelParent(widget); - return toplevel->ScreenToClient(widget->GetScreenPosition()); - } -#endif - return IntPoint(); -} - -// --------------- Lifetime management ----------------- - -bool PluginView::platformStart() -{ - ASSERT(m_isStarted); - ASSERT(m_status == PluginStatusLoadedSuccessfully); - - if (m_drawingModel == NPDrawingModel(-1)) { - // We default to QuickDraw, even though we don't support it, - // since that's what Safari does, and some plugins expect this - // behavior and never set the drawing model explicitly. -#ifndef NP_NO_QUICKDRAW - m_drawingModel = NPDrawingModelQuickDraw; -#else - // QuickDraw not available, so we have to default to CoreGraphics - m_drawingModel = NPDrawingModelCoreGraphics; -#endif - } - - if (m_eventModel == NPEventModel(-1)) { - // If the plug-in did not specify an event model - // we default to Carbon, when it is available. -#ifndef NP_NO_CARBON - m_eventModel = NPEventModelCarbon; -#else - m_eventModel = NPEventModelCocoa; -#endif - } - - // Gracefully handle unsupported drawing or event models. We can do this - // now since the drawing and event model can only be set during NPP_New. -#ifndef NP_NO_CARBON - NPBool eventModelSupported; - if (getValueStatic(NPNVariable(NPNVsupportsCarbonBool + m_eventModel), &eventModelSupported) != NPERR_NO_ERROR - || !eventModelSupported) { -#endif - m_status = PluginStatusCanNotLoadPlugin; - LOG(Plugins, "Plug-in '%s' uses unsupported event model %s", - m_plugin->name().utf8().data(), prettyNameForEventModel(m_eventModel)); - return false; -#ifndef NP_NO_CARBON - } -#endif - -#ifndef NP_NO_QUICKDRAW - NPBool drawingModelSupported; - if (getValueStatic(NPNVariable(NPNVsupportsQuickDrawBool + m_drawingModel), &drawingModelSupported) != NPERR_NO_ERROR - || !drawingModelSupported) { -#endif - m_status = PluginStatusCanNotLoadPlugin; - LOG(Plugins, "Plug-in '%s' uses unsupported drawing model %s", - m_plugin->name().utf8().data(), prettyNameForDrawingModel(m_drawingModel)); - return false; -#ifndef NP_NO_QUICKDRAW - } -#endif - -#if PLATFORM(QT) - // Set the platformPluginWidget only in the case of QWebView so that the context menu appears in the right place. - // In all other cases, we use off-screen rendering - if (QWebPageClient* client = m_parentFrame->view()->hostWindow()->platformPageClient()) { - if (QWidget* widget = qobject_cast(client->pluginParent())) - setPlatformPluginWidget(widget); - } -#endif -#if PLATFORM(WX) - if (wxWindow* widget = m_parentFrame->view()->hostWindow()->platformPageClient()) - setPlatformPluginWidget(widget); -#endif - - // Create a fake window relative to which all events will be sent when using offscreen rendering - if (!platformPluginWidget()) { -#ifndef NP_NO_CARBON - // Make the default size really big. It is unclear why this is required but with a smaller size, mouse move - // events don't get processed. Resizing the fake window to flash's size doesn't help. - ::Rect windowBounds = { 0, 0, 1000, 1000 }; - CreateNewWindow(kDocumentWindowClass, kWindowStandardDocumentAttributes, &windowBounds, &m_fakeWindow); - // Flash requires the window to be hilited to process mouse move events. - HiliteWindow(m_fakeWindow, true); -#endif - } - - show(); - - // TODO: Implement null timer throttling depending on plugin activation - m_nullEventTimer.set(new Timer(this, &PluginView::nullEventTimerFired)); - m_nullEventTimer->startRepeating(0.02); - - m_lastMousePos.h = m_lastMousePos.v = 0; - - return true; -} - -void PluginView::platformDestroy() -{ - if (platformPluginWidget()) - setPlatformPluginWidget(0); - else { - CGContextRelease(m_contextRef); -#ifndef NP_NO_CARBON - if (m_fakeWindow) - DisposeWindow(m_fakeWindow); -#endif - } -} - -// Used before the plugin view has been initialized properly, and as a -// fallback for variables that do not require a view to resolve. -bool PluginView::platformGetValueStatic(NPNVariable variable, void* value, NPError* result) -{ - switch (variable) { - case NPNVToolkit: - *static_cast(value) = 0; - *result = NPERR_NO_ERROR; - return true; - - case NPNVjavascriptEnabledBool: - *static_cast(value) = true; - *result = NPERR_NO_ERROR; - return true; - -#ifndef NP_NO_CARBON - case NPNVsupportsCarbonBool: - *static_cast(value) = true; - *result = NPERR_NO_ERROR; - return true; - -#endif - case NPNVsupportsCocoaBool: - *static_cast(value) = false; - *result = NPERR_NO_ERROR; - return true; - - // CoreGraphics is the only drawing model we support - case NPNVsupportsCoreGraphicsBool: - *static_cast(value) = true; - *result = NPERR_NO_ERROR; - return true; - -#ifndef NP_NO_QUICKDRAW - // QuickDraw is deprecated in 10.5 and not supported on 64-bit - case NPNVsupportsQuickDrawBool: -#endif - case NPNVsupportsOpenGLBool: - case NPNVsupportsCoreAnimationBool: - *static_cast(value) = false; - *result = NPERR_NO_ERROR; - return true; - - default: - return false; - } -} - -// Used only for variables that need a view to resolve -bool PluginView::platformGetValue(NPNVariable variable, void* value, NPError* error) -{ - return false; -} - -void PluginView::setParent(ScrollView* parent) -{ - LOG(Plugins, "PluginView::setParent(%p)", parent); - - Widget::setParent(parent); - - if (parent) - init(); -} - -// -------------- Geometry and painting ---------------- - -void PluginView::show() -{ - LOG(Plugins, "PluginView::show()"); - - setSelfVisible(true); - - Widget::show(); -} - -void PluginView::hide() -{ - LOG(Plugins, "PluginView::hide()"); - - setSelfVisible(false); - - Widget::hide(); -} - -void PluginView::setFocus() -{ - LOG(Plugins, "PluginView::setFocus()"); - - if (platformPluginWidget()) -#if PLATFORM(QT) - platformPluginWidget()->setFocus(Qt::OtherFocusReason); -#else - platformPluginWidget()->SetFocus(); -#endif - else - Widget::setFocus(); - - // TODO: Also handle and pass on blur events (focus lost) - -#ifndef NP_NO_CARBON - EventRecord record; - record.what = getFocusEvent; - record.message = 0; - record.when = TickCount(); - record.where = globalMousePosForPlugin(); - record.modifiers = GetCurrentKeyModifiers(); - - if (!dispatchNPEvent(record)) - LOG(Events, "PluginView::setFocus(): Get-focus event not accepted"); -#endif -} - -void PluginView::setParentVisible(bool visible) -{ - if (isParentVisible() == visible) - return; - - Widget::setParentVisible(visible); -} - -void PluginView::setNPWindowRect(const IntRect&) -{ - setNPWindowIfNeeded(); -} - -void PluginView::setNPWindowIfNeeded() -{ - if (!m_isStarted || !parent() || !m_plugin->pluginFuncs()->setwindow) - return; - - CGContextRef newContextRef = 0; - WindowRef newWindowRef = 0; - if (platformPluginWidget()) { - newContextRef = cgHandleFor(platformPluginWidget()); - newWindowRef = nativeWindowFor(platformPluginWidget()); - m_npWindow.type = NPWindowTypeWindow; - } else { - newContextRef = m_contextRef; - newWindowRef = m_fakeWindow; - m_npWindow.type = NPWindowTypeDrawable; - } - - if (!newContextRef || !newWindowRef) - return; - - m_npWindow.window = (void*)&m_npCgContext; -#ifndef NP_NO_CARBON - m_npCgContext.window = newWindowRef; -#endif - m_npCgContext.context = newContextRef; - - m_npWindow.x = m_windowRect.x(); - m_npWindow.y = m_windowRect.y(); - m_npWindow.width = m_windowRect.width(); - m_npWindow.height = m_windowRect.height(); - - // TODO: (also clip against scrollbars, etc.) - m_npWindow.clipRect.left = max(0, m_windowRect.x()); - m_npWindow.clipRect.top = max(0, m_windowRect.y()); - m_npWindow.clipRect.right = m_windowRect.x() + m_windowRect.width(); - m_npWindow.clipRect.bottom = m_windowRect.y() + m_windowRect.height(); - - LOG(Plugins, "PluginView::setNPWindowIfNeeded(): window=%p, context=%p," - " window.x:%d window.y:%d window.width:%d window.height:%d window.clipRect size:%dx%d", - newWindowRef, newContextRef, m_npWindow.x, m_npWindow.y, m_npWindow.width, m_npWindow.height, - m_npWindow.clipRect.right - m_npWindow.clipRect.left, m_npWindow.clipRect.bottom - m_npWindow.clipRect.top); - - PluginView::setCurrentPluginView(this); - JSC::JSLock::DropAllLocks dropAllLocks(JSC::SilenceAssertionsOnly); - setCallingPlugin(true); - m_plugin->pluginFuncs()->setwindow(m_instance, &m_npWindow); - setCallingPlugin(false); - PluginView::setCurrentPluginView(0); -} - -void PluginView::updatePluginWidget() -{ - if (!parent()) - return; - - ASSERT(parent()->isFrameView()); - FrameView* frameView = static_cast(parent()); - - IntRect oldWindowRect = m_windowRect; - IntRect oldClipRect = m_clipRect; - - m_windowRect = frameView->contentsToWindow(frameRect()); - IntPoint offset = topLevelOffsetFor(platformPluginWidget()); - m_windowRect.move(offset.x(), offset.y()); - - if (!platformPluginWidget()) { - if (m_windowRect.size() != oldWindowRect.size()) { - CGContextRelease(m_contextRef); -#if PLATFORM(QT) - m_pixmap = QPixmap(m_windowRect.size()); - m_pixmap.fill(Qt::transparent); - m_contextRef = m_pixmap.isNull() ? 0 : qt_mac_cg_context(&m_pixmap); -#endif - } - } - - m_clipRect = windowClipRect(); - m_clipRect.move(-m_windowRect.x(), -m_windowRect.y()); - - if (platformPluginWidget() && (m_windowRect != oldWindowRect || m_clipRect != oldClipRect)) - setNPWindowIfNeeded(); -} - -void PluginView::paint(GraphicsContext* context, const IntRect& rect) -{ - if (!m_isStarted || m_status != PluginStatusLoadedSuccessfully) { - paintMissingPluginIcon(context, rect); - return; - } - - if (context->paintingDisabled()) - return; - - setNPWindowIfNeeded(); - - CGContextRef cgContext = m_npCgContext.context; - if (!cgContext) - return; - - CGContextSaveGState(cgContext); - if (platformPluginWidget()) { - IntPoint offset = frameRect().location(); - CGContextTranslateCTM(cgContext, offset.x(), offset.y()); - } - - IntRect targetRect(frameRect()); - targetRect.intersects(rect); - - // clip the context so that plugin only updates the interested area. - CGRect r; - r.origin.x = targetRect.x() - frameRect().x(); - r.origin.y = targetRect.y() - frameRect().y(); - r.size.width = targetRect.width(); - r.size.height = targetRect.height(); - CGContextClipToRect(cgContext, r); - - if (!platformPluginWidget() && m_isTransparent) { // clean the pixmap in transparent mode -#if PLATFORM(QT) - QPainter painter(&m_pixmap); - painter.setCompositionMode(QPainter::CompositionMode_Clear); - painter.fillRect(QRectF(r.origin.x, r.origin.y, r.size.width, r.size.height), Qt::transparent); -#endif - } - -#ifndef NP_NO_CARBON - EventRecord event; - event.what = updateEvt; - event.message = (long unsigned int)m_npCgContext.window; - event.when = TickCount(); - event.where.h = 0; - event.where.v = 0; - event.modifiers = GetCurrentKeyModifiers(); - - if (!dispatchNPEvent(event)) - LOG(Events, "PluginView::paint(): Paint event not accepted"); -#endif - - CGContextRestoreGState(cgContext); - - if (!platformPluginWidget()) { -#if PLATFORM(QT) - QPainter* painter = context->platformContext(); - painter->drawPixmap(targetRect.x(), targetRect.y(), m_pixmap, - targetRect.x() - frameRect().x(), targetRect.y() - frameRect().y(), targetRect.width(), targetRect.height()); -#endif - } -} - -void PluginView::invalidateRect(const IntRect& rect) -{ - if (platformPluginWidget()) -#if PLATFORM(QT) - platformPluginWidget()->update(convertToContainingWindow(rect)); -#else - platformPluginWidget()->RefreshRect(convertToContainingWindow(rect)); -#endif - else - invalidateWindowlessPluginRect(rect); -} - -void PluginView::invalidateRect(NPRect* rect) -{ - IntRect r(rect->left, rect->top, rect->right - rect->left, rect->bottom - rect->top); - invalidateRect(r); -} - -void PluginView::invalidateRegion(NPRegion region) -{ - // TODO: optimize - invalidate(); -} - -void PluginView::forceRedraw() -{ - notImplemented(); -} - - -// ----------------- Event handling -------------------- - -void PluginView::handleMouseEvent(MouseEvent* event) -{ - if (!m_isStarted) - return; - -#ifndef NP_NO_CARBON - EventRecord record; - - if (event->type() == eventNames().mousemoveEvent) { - // Mouse movement is handled by null timer events - m_lastMousePos = mousePosForPlugin(event); - return; - } else if (event->type() == eventNames().mouseoverEvent) { - record.what = adjustCursorEvent; - } else if (event->type() == eventNames().mouseoutEvent) { - record.what = adjustCursorEvent; - } else if (event->type() == eventNames().mousedownEvent) { - record.what = mouseDown; - // The plugin needs focus to receive keyboard events - if (Page* page = m_parentFrame->page()) - page->focusController()->setFocusedFrame(m_parentFrame); - m_parentFrame->document()->setFocusedNode(m_element); - } else if (event->type() == eventNames().mouseupEvent) { - record.what = mouseUp; - } else { - return; - } - record.where = mousePosForPlugin(event); - record.modifiers = modifiersForEvent(event); - - if (!event->buttonDown()) - record.modifiers |= btnState; - - if (event->button() == 2) - record.modifiers |= controlKey; - - if (!dispatchNPEvent(record)) { - if (record.what == adjustCursorEvent) - return; // Signals that the plugin wants a normal cursor - - LOG(Events, "PluginView::handleMouseEvent(): Mouse event type %d at %d,%d not accepted", - record.what, record.where.h, record.where.v); - } else { - event->setDefaultHandled(); - } -#endif -} - -void PluginView::handleKeyboardEvent(KeyboardEvent* event) -{ - if (!m_isStarted) - return; - - LOG(Plugins, "PluginView::handleKeyboardEvent() ----------------- "); - - LOG(Plugins, "PV::hKE(): KE.keyCode: 0x%02X, KE.charCode: %d", - event->keyCode(), event->charCode()); - -#ifndef NP_NO_CARBON - EventRecord record; - - if (event->type() == eventNames().keydownEvent) { - // This event is the result of a PlatformKeyboardEvent::KeyDown which - // was disambiguated into a PlatformKeyboardEvent::RawKeyDown. Since - // we don't have access to the text here, we return, and wait for the - // corresponding event based on PlatformKeyboardEvent::Char. - return; - } else if (event->type() == eventNames().keypressEvent) { - // Which would be this one. This event was disambiguated from the same - // PlatformKeyboardEvent::KeyDown, but to a PlatformKeyboardEvent::Char, - // which retains the text from the original event. So, we can safely pass - // on the event as a key-down event to the plugin. - record.what = keyDown; - } else if (event->type() == eventNames().keyupEvent) { - // PlatformKeyboardEvent::KeyUp events always have the text, so nothing - // fancy here. - record.what = keyUp; - } else { - return; - } - - const PlatformKeyboardEvent* platformEvent = event->keyEvent(); - int keyCode = platformEvent->nativeVirtualKeyCode(); - - const String text = platformEvent->text(); - if (text.length() < 1) { - event->setDefaultHandled(); - return; - } - - WTF::RetainPtr cfText(WTF::AdoptCF, text.createCFString()); - - LOG(Plugins, "PV::hKE(): PKE.text: %s, PKE.unmodifiedText: %s, PKE.keyIdentifier: %s", - text.ascii().data(), platformEvent->unmodifiedText().ascii().data(), - platformEvent->keyIdentifier().ascii().data()); - - char charCodes[2] = { 0, 0 }; - if (!CFStringGetCString(cfText.get(), charCodes, 2, CFStringGetSystemEncoding())) { - LOG_ERROR("Could not resolve character code using system encoding."); - event->setDefaultHandled(); - return; - } - - record.where = globalMousePosForPlugin(); - record.modifiers = modifiersForEvent(event); - record.message = ((keyCode & 0xFF) << 8) | (charCodes[0] & 0xFF); - record.when = TickCount(); - - LOG(Plugins, "PV::hKE(): record.modifiers: %d", record.modifiers); - -#if PLATFORM(QT) - LOG(Plugins, "PV::hKE(): PKE.qtEvent()->nativeVirtualKey: 0x%02X, charCode: %d", - keyCode, int(uchar(charCodes[0]))); -#endif - - if (!dispatchNPEvent(record)) - LOG(Events, "PluginView::handleKeyboardEvent(): Keyboard event type %d not accepted", record.what); - else - event->setDefaultHandled(); -#endif -} - -#ifndef NP_NO_CARBON -void PluginView::nullEventTimerFired(Timer*) -{ - EventRecord record; - - record.what = nullEvent; - record.message = 0; - record.when = TickCount(); - record.where = m_lastMousePos; - record.modifiers = GetCurrentKeyModifiers(); - if (!Button()) - record.modifiers |= btnState; - - if (!dispatchNPEvent(record)) - LOG(Events, "PluginView::nullEventTimerFired(): Null event not accepted"); -} -#endif - -#ifndef NP_NO_CARBON -static int modifiersForEvent(UIEventWithKeyState* event) -{ - int modifiers = 0; - - if (event->ctrlKey()) - modifiers |= controlKey; - - if (event->altKey()) - modifiers |= optionKey; - - if (event->metaKey()) - modifiers |= cmdKey; - - if (event->shiftKey()) - modifiers |= shiftKey; - - return modifiers; -} -#endif - -#ifndef NP_NO_CARBON -static bool tigerOrBetter() -{ - static SInt32 systemVersion = 0; - - if (!systemVersion) { - if (Gestalt(gestaltSystemVersion, &systemVersion) != noErr) - return false; - } - - return systemVersion >= 0x1040; -} -#endif - -#ifndef NP_NO_CARBON -Point PluginView::globalMousePosForPlugin() const -{ - Point pos; - GetGlobalMouse(&pos); - - float scaleFactor = tigerOrBetter() ? HIGetScaleFactor() : 1; - - pos.h = short(pos.h * scaleFactor); - pos.v = short(pos.v * scaleFactor); - -#if PLATFORM(WX) - // make sure the titlebar/toolbar size is included - WindowRef windowRef = nativeWindowFor(platformPluginWidget()); - ::Rect content, structure; - - GetWindowBounds(windowRef, kWindowStructureRgn, &structure); - GetWindowBounds(windowRef, kWindowContentRgn, &content); - - int top = content.top - structure.top; - pos.v -= top; -#endif - - return pos; -} -#endif - -#ifndef NP_NO_CARBON -Point PluginView::mousePosForPlugin(MouseEvent* event) const -{ - ASSERT(event); - if (platformPluginWidget()) - return globalMousePosForPlugin(); - - if (event->button() == 2) { - // always pass the global position for right-click since Flash uses it to position the context menu - return globalMousePosForPlugin(); - } - - Point pos; - IntPoint postZoomPos = roundedIntPoint(m_element->renderer()->absoluteToLocal(event->absoluteLocation())); - pos.h = postZoomPos.x() + m_windowRect.x(); - // The number 22 is the height of the title bar. As to why it figures in the calculation below - // is left as an exercise to the reader :-) - pos.v = postZoomPos.y() + m_windowRect.y() - 22; - return pos; -} -#endif - -#ifndef NP_NO_CARBON -bool PluginView::dispatchNPEvent(NPEvent& event) -{ - PluginView::setCurrentPluginView(this); - JSC::JSLock::DropAllLocks dropAllLocks(JSC::SilenceAssertionsOnly); - setCallingPlugin(true); - - bool accepted = m_plugin->pluginFuncs()->event(m_instance, &event); - - setCallingPlugin(false); - PluginView::setCurrentPluginView(0); - return accepted; -} -#endif - -// ------------------- Miscellaneous ------------------ - -NPError PluginView::handlePostReadFile(Vector& buffer, uint32 len, const char* buf) -{ - String filename(buf, len); - - if (filename.startsWith("file:///")) - filename = filename.substring(8); - - if (!fileExists(filename)) - return NPERR_FILE_NOT_FOUND; - - FILE* fileHandle = fopen((filename.utf8()).data(), "r"); - - if (fileHandle == 0) - return NPERR_FILE_NOT_FOUND; - - int bytesRead = fread(buffer.data(), 1, 0, fileHandle); - - fclose(fileHandle); - - if (bytesRead <= 0) - return NPERR_FILE_NOT_FOUND; - - return NPERR_NO_ERROR; -} - -void PluginView::halt() -{ -} - -void PluginView::restart() -{ -} - -} // namespace WebCore diff --git a/src/3rdparty/webkit/WebCore/plugins/mac/PluginViewMac.mm b/src/3rdparty/webkit/WebCore/plugins/mac/PluginViewMac.mm new file mode 100644 index 0000000..57d74ab --- /dev/null +++ b/src/3rdparty/webkit/WebCore/plugins/mac/PluginViewMac.mm @@ -0,0 +1,833 @@ +/* + * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. + * Copyright (C) 2008 Collabora Ltd. All rights reserved. + * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) + * Copyright (C) 2009 Girish Ramakrishnan + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. + */ + +#include "config.h" +#include "PluginView.h" + +#include "Bridge.h" +#include "Document.h" +#include "DocumentLoader.h" +#include "Element.h" +#include "EventNames.h" +#include "FocusController.h" +#include "FrameLoader.h" +#include "FrameLoadRequest.h" +#include "FrameTree.h" +#include "Frame.h" +#include "FrameView.h" +#include "GraphicsContext.h" +#include "HostWindow.h" +#include "HTMLNames.h" +#include "HTMLPlugInElement.h" +#include "Image.h" +#include "JSDOMBinding.h" +#include "KeyboardEvent.h" +#include "MouseEvent.h" +#include "NotImplemented.h" +#include "Page.h" +#include "PlatformMouseEvent.h" +#include "PlatformKeyboardEvent.h" +#include "PluginDebug.h" +#include "PluginPackage.h" +#include "PluginMainThreadScheduler.h" +#include "RenderLayer.h" +#include "ScriptController.h" +#include "Settings.h" +#include "npruntime_impl.h" +#include "runtime_root.h" +#include +#include +#include + + +using JSC::ExecState; +using JSC::Interpreter; +using JSC::JSLock; +using JSC::JSObject; +using JSC::JSValue; +using JSC::UString; + +#if PLATFORM(QT) +#include +#include +#include +#include "QWebPageClient.h" +QT_BEGIN_NAMESPACE +extern Q_GUI_EXPORT OSWindowRef qt_mac_window_for(const QWidget* w); +QT_END_NAMESPACE +#endif + +#if PLATFORM(WX) +#include +#include +#endif + +using std::min; + +using namespace WTF; + +namespace WebCore { + +using namespace HTMLNames; + +#ifndef NP_NO_CARBON +static int modifiersForEvent(UIEventWithKeyState *event); +#endif + +static inline WindowRef nativeWindowFor(PlatformWidget widget) +{ +#if PLATFORM(QT) + if (widget) +#if QT_MAC_USE_COCOA + return static_cast([qt_mac_window_for(widget) windowRef]); +#else + return static_cast(qt_mac_window_for(widget)); +#endif +#elif PLATFORM(WX) + if (widget) + return (WindowRef)widget->MacGetTopLevelWindowRef(); +#endif + return 0; +} + +static inline CGContextRef cgHandleFor(PlatformWidget widget) +{ +#if PLATFORM(QT) + if (widget) + return (CGContextRef)widget->macCGHandle(); +#endif +#if PLATFORM(WX) + if (widget) + return (CGContextRef)widget->MacGetCGContextRef(); +#endif + return 0; +} + +static inline IntPoint topLevelOffsetFor(PlatformWidget widget) +{ +#if PLATFORM(QT) + if (widget) { + PlatformWidget topLevel = widget->window(); + return widget->mapTo(topLevel, QPoint(0, 0)) + topLevel->geometry().topLeft() - topLevel->pos(); + } +#endif +#if PLATFORM(WX) + if (widget) { + PlatformWidget toplevel = wxGetTopLevelParent(widget); + return toplevel->ScreenToClient(widget->GetScreenPosition()); + } +#endif + return IntPoint(); +} + +// --------------- Lifetime management ----------------- + +bool PluginView::platformStart() +{ + ASSERT(m_isStarted); + ASSERT(m_status == PluginStatusLoadedSuccessfully); + + if (m_drawingModel == NPDrawingModel(-1)) { + // We default to QuickDraw, even though we don't support it, + // since that's what Safari does, and some plugins expect this + // behavior and never set the drawing model explicitly. +#ifndef NP_NO_QUICKDRAW + m_drawingModel = NPDrawingModelQuickDraw; +#else + // QuickDraw not available, so we have to default to CoreGraphics + m_drawingModel = NPDrawingModelCoreGraphics; +#endif + } + + if (m_eventModel == NPEventModel(-1)) { + // If the plug-in did not specify an event model + // we default to Carbon, when it is available. +#ifndef NP_NO_CARBON + m_eventModel = NPEventModelCarbon; +#else + m_eventModel = NPEventModelCocoa; +#endif + } + + // Gracefully handle unsupported drawing or event models. We can do this + // now since the drawing and event model can only be set during NPP_New. +#ifndef NP_NO_CARBON + NPBool eventModelSupported; + if (getValueStatic(NPNVariable(NPNVsupportsCarbonBool + m_eventModel), &eventModelSupported) != NPERR_NO_ERROR + || !eventModelSupported) { +#endif + m_status = PluginStatusCanNotLoadPlugin; + LOG(Plugins, "Plug-in '%s' uses unsupported event model %s", + m_plugin->name().utf8().data(), prettyNameForEventModel(m_eventModel)); + return false; +#ifndef NP_NO_CARBON + } +#endif + +#ifndef NP_NO_QUICKDRAW + NPBool drawingModelSupported; + if (getValueStatic(NPNVariable(NPNVsupportsQuickDrawBool + m_drawingModel), &drawingModelSupported) != NPERR_NO_ERROR + || !drawingModelSupported) { +#endif + m_status = PluginStatusCanNotLoadPlugin; + LOG(Plugins, "Plug-in '%s' uses unsupported drawing model %s", + m_plugin->name().utf8().data(), prettyNameForDrawingModel(m_drawingModel)); + return false; +#ifndef NP_NO_QUICKDRAW + } +#endif + +#if PLATFORM(QT) + // Set the platformPluginWidget only in the case of QWebView so that the context menu appears in the right place. + // In all other cases, we use off-screen rendering + if (QWebPageClient* client = m_parentFrame->view()->hostWindow()->platformPageClient()) { + if (QWidget* widget = qobject_cast(client->pluginParent())) + setPlatformPluginWidget(widget); + } +#endif +#if PLATFORM(WX) + if (wxWindow* widget = m_parentFrame->view()->hostWindow()->platformPageClient()) + setPlatformPluginWidget(widget); +#endif + + // Create a fake window relative to which all events will be sent when using offscreen rendering + if (!platformPluginWidget()) { +#ifndef NP_NO_CARBON + // Make the default size really big. It is unclear why this is required but with a smaller size, mouse move + // events don't get processed. Resizing the fake window to flash's size doesn't help. + ::Rect windowBounds = { 0, 0, 1000, 1000 }; + CreateNewWindow(kDocumentWindowClass, kWindowStandardDocumentAttributes, &windowBounds, &m_fakeWindow); + // Flash requires the window to be hilited to process mouse move events. + HiliteWindow(m_fakeWindow, true); +#endif + } + + show(); + + // TODO: Implement null timer throttling depending on plugin activation + m_nullEventTimer.set(new Timer(this, &PluginView::nullEventTimerFired)); + m_nullEventTimer->startRepeating(0.02); + + m_lastMousePos.h = m_lastMousePos.v = 0; + + return true; +} + +void PluginView::platformDestroy() +{ + if (platformPluginWidget()) + setPlatformPluginWidget(0); + else { + CGContextRelease(m_contextRef); +#ifndef NP_NO_CARBON + if (m_fakeWindow) + DisposeWindow(m_fakeWindow); +#endif + } +} + +// Used before the plugin view has been initialized properly, and as a +// fallback for variables that do not require a view to resolve. +bool PluginView::platformGetValueStatic(NPNVariable variable, void* value, NPError* result) +{ + switch (variable) { + case NPNVToolkit: + *static_cast(value) = 0; + *result = NPERR_NO_ERROR; + return true; + + case NPNVjavascriptEnabledBool: + *static_cast(value) = true; + *result = NPERR_NO_ERROR; + return true; + +#ifndef NP_NO_CARBON + case NPNVsupportsCarbonBool: + *static_cast(value) = true; + *result = NPERR_NO_ERROR; + return true; + +#endif + case NPNVsupportsCocoaBool: + *static_cast(value) = false; + *result = NPERR_NO_ERROR; + return true; + + // CoreGraphics is the only drawing model we support + case NPNVsupportsCoreGraphicsBool: + *static_cast(value) = true; + *result = NPERR_NO_ERROR; + return true; + +#ifndef NP_NO_QUICKDRAW + // QuickDraw is deprecated in 10.5 and not supported on 64-bit + case NPNVsupportsQuickDrawBool: +#endif + case NPNVsupportsOpenGLBool: + case NPNVsupportsCoreAnimationBool: + *static_cast(value) = false; + *result = NPERR_NO_ERROR; + return true; + + default: + return false; + } +} + +// Used only for variables that need a view to resolve +bool PluginView::platformGetValue(NPNVariable variable, void* value, NPError* error) +{ + return false; +} + +void PluginView::setParent(ScrollView* parent) +{ + LOG(Plugins, "PluginView::setParent(%p)", parent); + + Widget::setParent(parent); + + if (parent) + init(); +} + +// -------------- Geometry and painting ---------------- + +void PluginView::show() +{ + LOG(Plugins, "PluginView::show()"); + + setSelfVisible(true); + + Widget::show(); +} + +void PluginView::hide() +{ + LOG(Plugins, "PluginView::hide()"); + + setSelfVisible(false); + + Widget::hide(); +} + +void PluginView::setFocus() +{ + LOG(Plugins, "PluginView::setFocus()"); + + if (platformPluginWidget()) +#if PLATFORM(QT) + platformPluginWidget()->setFocus(Qt::OtherFocusReason); +#else + platformPluginWidget()->SetFocus(); +#endif + else + Widget::setFocus(); + + // TODO: Also handle and pass on blur events (focus lost) + +#ifndef NP_NO_CARBON + EventRecord record; + record.what = getFocusEvent; + record.message = 0; + record.when = TickCount(); + record.where = globalMousePosForPlugin(); + record.modifiers = GetCurrentKeyModifiers(); + + if (!dispatchNPEvent(record)) + LOG(Events, "PluginView::setFocus(): Get-focus event not accepted"); +#endif +} + +void PluginView::setParentVisible(bool visible) +{ + if (isParentVisible() == visible) + return; + + Widget::setParentVisible(visible); +} + +void PluginView::setNPWindowRect(const IntRect&) +{ + setNPWindowIfNeeded(); +} + +void PluginView::setNPWindowIfNeeded() +{ + if (!m_isStarted || !parent() || !m_plugin->pluginFuncs()->setwindow) + return; + + CGContextRef newContextRef = 0; + WindowRef newWindowRef = 0; + if (platformPluginWidget()) { + newContextRef = cgHandleFor(platformPluginWidget()); + newWindowRef = nativeWindowFor(platformPluginWidget()); + m_npWindow.type = NPWindowTypeWindow; + } else { + newContextRef = m_contextRef; + newWindowRef = m_fakeWindow; + m_npWindow.type = NPWindowTypeDrawable; + } + + if (!newContextRef || !newWindowRef) + return; + + m_npWindow.window = (void*)&m_npCgContext; +#ifndef NP_NO_CARBON + m_npCgContext.window = newWindowRef; +#endif + m_npCgContext.context = newContextRef; + + m_npWindow.x = m_windowRect.x(); + m_npWindow.y = m_windowRect.y(); + m_npWindow.width = m_windowRect.width(); + m_npWindow.height = m_windowRect.height(); + + // TODO: (also clip against scrollbars, etc.) + m_npWindow.clipRect.left = max(0, m_windowRect.x()); + m_npWindow.clipRect.top = max(0, m_windowRect.y()); + m_npWindow.clipRect.right = m_windowRect.x() + m_windowRect.width(); + m_npWindow.clipRect.bottom = m_windowRect.y() + m_windowRect.height(); + + LOG(Plugins, "PluginView::setNPWindowIfNeeded(): window=%p, context=%p," + " window.x:%d window.y:%d window.width:%d window.height:%d window.clipRect size:%dx%d", + newWindowRef, newContextRef, m_npWindow.x, m_npWindow.y, m_npWindow.width, m_npWindow.height, + m_npWindow.clipRect.right - m_npWindow.clipRect.left, m_npWindow.clipRect.bottom - m_npWindow.clipRect.top); + + PluginView::setCurrentPluginView(this); + JSC::JSLock::DropAllLocks dropAllLocks(JSC::SilenceAssertionsOnly); + setCallingPlugin(true); + m_plugin->pluginFuncs()->setwindow(m_instance, &m_npWindow); + setCallingPlugin(false); + PluginView::setCurrentPluginView(0); +} + +void PluginView::updatePluginWidget() +{ + if (!parent()) + return; + + ASSERT(parent()->isFrameView()); + FrameView* frameView = static_cast(parent()); + + IntRect oldWindowRect = m_windowRect; + IntRect oldClipRect = m_clipRect; + + m_windowRect = frameView->contentsToWindow(frameRect()); + IntPoint offset = topLevelOffsetFor(platformPluginWidget()); + m_windowRect.move(offset.x(), offset.y()); + + if (!platformPluginWidget()) { + if (m_windowRect.size() != oldWindowRect.size()) { + CGContextRelease(m_contextRef); +#if PLATFORM(QT) + m_pixmap = QPixmap(m_windowRect.size()); + m_pixmap.fill(Qt::transparent); + m_contextRef = m_pixmap.isNull() ? 0 : qt_mac_cg_context(&m_pixmap); +#endif + } + } + + m_clipRect = windowClipRect(); + m_clipRect.move(-m_windowRect.x(), -m_windowRect.y()); + + if (platformPluginWidget() && (m_windowRect != oldWindowRect || m_clipRect != oldClipRect)) + setNPWindowIfNeeded(); +} + +void PluginView::paint(GraphicsContext* context, const IntRect& rect) +{ + if (!m_isStarted || m_status != PluginStatusLoadedSuccessfully) { + paintMissingPluginIcon(context, rect); + return; + } + + if (context->paintingDisabled()) + return; + + setNPWindowIfNeeded(); + + CGContextRef cgContext = m_npCgContext.context; + if (!cgContext) + return; + + CGContextSaveGState(cgContext); + if (platformPluginWidget()) { + IntPoint offset = frameRect().location(); + CGContextTranslateCTM(cgContext, offset.x(), offset.y()); + } + + IntRect targetRect(frameRect()); + targetRect.intersects(rect); + + // clip the context so that plugin only updates the interested area. + CGRect r; + r.origin.x = targetRect.x() - frameRect().x(); + r.origin.y = targetRect.y() - frameRect().y(); + r.size.width = targetRect.width(); + r.size.height = targetRect.height(); + CGContextClipToRect(cgContext, r); + + if (!platformPluginWidget() && m_isTransparent) { // clean the pixmap in transparent mode +#if PLATFORM(QT) + QPainter painter(&m_pixmap); + painter.setCompositionMode(QPainter::CompositionMode_Clear); + painter.fillRect(QRectF(r.origin.x, r.origin.y, r.size.width, r.size.height), Qt::transparent); +#endif + } + +#ifndef NP_NO_CARBON + EventRecord event; + event.what = updateEvt; + event.message = (long unsigned int)m_npCgContext.window; + event.when = TickCount(); + event.where.h = 0; + event.where.v = 0; + event.modifiers = GetCurrentKeyModifiers(); + + if (!dispatchNPEvent(event)) + LOG(Events, "PluginView::paint(): Paint event not accepted"); +#endif + + CGContextRestoreGState(cgContext); + + if (!platformPluginWidget()) { +#if PLATFORM(QT) + QPainter* painter = context->platformContext(); + painter->drawPixmap(targetRect.x(), targetRect.y(), m_pixmap, + targetRect.x() - frameRect().x(), targetRect.y() - frameRect().y(), targetRect.width(), targetRect.height()); +#endif + } +} + +void PluginView::invalidateRect(const IntRect& rect) +{ + if (platformPluginWidget()) +#if PLATFORM(QT) + platformPluginWidget()->update(convertToContainingWindow(rect)); +#else + platformPluginWidget()->RefreshRect(convertToContainingWindow(rect)); +#endif + else + invalidateWindowlessPluginRect(rect); +} + +void PluginView::invalidateRect(NPRect* rect) +{ + IntRect r(rect->left, rect->top, rect->right - rect->left, rect->bottom - rect->top); + invalidateRect(r); +} + +void PluginView::invalidateRegion(NPRegion region) +{ + // TODO: optimize + invalidate(); +} + +void PluginView::forceRedraw() +{ + notImplemented(); +} + + +// ----------------- Event handling -------------------- + +void PluginView::handleMouseEvent(MouseEvent* event) +{ + if (!m_isStarted) + return; + +#ifndef NP_NO_CARBON + EventRecord record; + + if (event->type() == eventNames().mousemoveEvent) { + // Mouse movement is handled by null timer events + m_lastMousePos = mousePosForPlugin(event); + return; + } else if (event->type() == eventNames().mouseoverEvent) { + record.what = adjustCursorEvent; + } else if (event->type() == eventNames().mouseoutEvent) { + record.what = adjustCursorEvent; + } else if (event->type() == eventNames().mousedownEvent) { + record.what = mouseDown; + // The plugin needs focus to receive keyboard events + if (Page* page = m_parentFrame->page()) + page->focusController()->setFocusedFrame(m_parentFrame); + m_parentFrame->document()->setFocusedNode(m_element); + } else if (event->type() == eventNames().mouseupEvent) { + record.what = mouseUp; + } else { + return; + } + record.where = mousePosForPlugin(event); + record.modifiers = modifiersForEvent(event); + + if (!event->buttonDown()) + record.modifiers |= btnState; + + if (event->button() == 2) + record.modifiers |= controlKey; + + if (!dispatchNPEvent(record)) { + if (record.what == adjustCursorEvent) + return; // Signals that the plugin wants a normal cursor + + LOG(Events, "PluginView::handleMouseEvent(): Mouse event type %d at %d,%d not accepted", + record.what, record.where.h, record.where.v); + } else { + event->setDefaultHandled(); + } +#endif +} + +void PluginView::handleKeyboardEvent(KeyboardEvent* event) +{ + if (!m_isStarted) + return; + + LOG(Plugins, "PluginView::handleKeyboardEvent() ----------------- "); + + LOG(Plugins, "PV::hKE(): KE.keyCode: 0x%02X, KE.charCode: %d", + event->keyCode(), event->charCode()); + +#ifndef NP_NO_CARBON + EventRecord record; + + if (event->type() == eventNames().keydownEvent) { + // This event is the result of a PlatformKeyboardEvent::KeyDown which + // was disambiguated into a PlatformKeyboardEvent::RawKeyDown. Since + // we don't have access to the text here, we return, and wait for the + // corresponding event based on PlatformKeyboardEvent::Char. + return; + } else if (event->type() == eventNames().keypressEvent) { + // Which would be this one. This event was disambiguated from the same + // PlatformKeyboardEvent::KeyDown, but to a PlatformKeyboardEvent::Char, + // which retains the text from the original event. So, we can safely pass + // on the event as a key-down event to the plugin. + record.what = keyDown; + } else if (event->type() == eventNames().keyupEvent) { + // PlatformKeyboardEvent::KeyUp events always have the text, so nothing + // fancy here. + record.what = keyUp; + } else { + return; + } + + const PlatformKeyboardEvent* platformEvent = event->keyEvent(); + int keyCode = platformEvent->nativeVirtualKeyCode(); + + const String text = platformEvent->text(); + if (text.length() < 1) { + event->setDefaultHandled(); + return; + } + + WTF::RetainPtr cfText(WTF::AdoptCF, text.createCFString()); + + LOG(Plugins, "PV::hKE(): PKE.text: %s, PKE.unmodifiedText: %s, PKE.keyIdentifier: %s", + text.ascii().data(), platformEvent->unmodifiedText().ascii().data(), + platformEvent->keyIdentifier().ascii().data()); + + char charCodes[2] = { 0, 0 }; + if (!CFStringGetCString(cfText.get(), charCodes, 2, CFStringGetSystemEncoding())) { + LOG_ERROR("Could not resolve character code using system encoding."); + event->setDefaultHandled(); + return; + } + + record.where = globalMousePosForPlugin(); + record.modifiers = modifiersForEvent(event); + record.message = ((keyCode & 0xFF) << 8) | (charCodes[0] & 0xFF); + record.when = TickCount(); + + LOG(Plugins, "PV::hKE(): record.modifiers: %d", record.modifiers); + +#if PLATFORM(QT) + LOG(Plugins, "PV::hKE(): PKE.qtEvent()->nativeVirtualKey: 0x%02X, charCode: %d", + keyCode, int(uchar(charCodes[0]))); +#endif + + if (!dispatchNPEvent(record)) + LOG(Events, "PluginView::handleKeyboardEvent(): Keyboard event type %d not accepted", record.what); + else + event->setDefaultHandled(); +#endif +} + +#ifndef NP_NO_CARBON +void PluginView::nullEventTimerFired(Timer*) +{ + EventRecord record; + + record.what = nullEvent; + record.message = 0; + record.when = TickCount(); + record.where = m_lastMousePos; + record.modifiers = GetCurrentKeyModifiers(); + if (!Button()) + record.modifiers |= btnState; + + if (!dispatchNPEvent(record)) + LOG(Events, "PluginView::nullEventTimerFired(): Null event not accepted"); +} +#endif + +#ifndef NP_NO_CARBON +static int modifiersForEvent(UIEventWithKeyState* event) +{ + int modifiers = 0; + + if (event->ctrlKey()) + modifiers |= controlKey; + + if (event->altKey()) + modifiers |= optionKey; + + if (event->metaKey()) + modifiers |= cmdKey; + + if (event->shiftKey()) + modifiers |= shiftKey; + + return modifiers; +} +#endif + +#ifndef NP_NO_CARBON +static bool tigerOrBetter() +{ + static SInt32 systemVersion = 0; + + if (!systemVersion) { + if (Gestalt(gestaltSystemVersion, &systemVersion) != noErr) + return false; + } + + return systemVersion >= 0x1040; +} +#endif + +#ifndef NP_NO_CARBON +Point PluginView::globalMousePosForPlugin() const +{ + Point pos; + GetGlobalMouse(&pos); + + float scaleFactor = tigerOrBetter() ? HIGetScaleFactor() : 1; + + pos.h = short(pos.h * scaleFactor); + pos.v = short(pos.v * scaleFactor); + +#if PLATFORM(WX) + // make sure the titlebar/toolbar size is included + WindowRef windowRef = nativeWindowFor(platformPluginWidget()); + ::Rect content, structure; + + GetWindowBounds(windowRef, kWindowStructureRgn, &structure); + GetWindowBounds(windowRef, kWindowContentRgn, &content); + + int top = content.top - structure.top; + pos.v -= top; +#endif + + return pos; +} +#endif + +#ifndef NP_NO_CARBON +Point PluginView::mousePosForPlugin(MouseEvent* event) const +{ + ASSERT(event); + if (platformPluginWidget()) + return globalMousePosForPlugin(); + + if (event->button() == 2) { + // always pass the global position for right-click since Flash uses it to position the context menu + return globalMousePosForPlugin(); + } + + Point pos; + IntPoint postZoomPos = roundedIntPoint(m_element->renderer()->absoluteToLocal(event->absoluteLocation())); + pos.h = postZoomPos.x() + m_windowRect.x(); + // The number 22 is the height of the title bar. As to why it figures in the calculation below + // is left as an exercise to the reader :-) + pos.v = postZoomPos.y() + m_windowRect.y() - 22; + return pos; +} +#endif + +#ifndef NP_NO_CARBON +bool PluginView::dispatchNPEvent(NPEvent& event) +{ + PluginView::setCurrentPluginView(this); + JSC::JSLock::DropAllLocks dropAllLocks(JSC::SilenceAssertionsOnly); + setCallingPlugin(true); + + bool accepted = m_plugin->pluginFuncs()->event(m_instance, &event); + + setCallingPlugin(false); + PluginView::setCurrentPluginView(0); + return accepted; +} +#endif + +// ------------------- Miscellaneous ------------------ + +NPError PluginView::handlePostReadFile(Vector& buffer, uint32 len, const char* buf) +{ + String filename(buf, len); + + if (filename.startsWith("file:///")) + filename = filename.substring(8); + + if (!fileExists(filename)) + return NPERR_FILE_NOT_FOUND; + + FILE* fileHandle = fopen((filename.utf8()).data(), "r"); + + if (fileHandle == 0) + return NPERR_FILE_NOT_FOUND; + + int bytesRead = fread(buffer.data(), 1, 0, fileHandle); + + fclose(fileHandle); + + if (bytesRead <= 0) + return NPERR_FILE_NOT_FOUND; + + return NPERR_NO_ERROR; +} + +void PluginView::halt() +{ +} + +void PluginView::restart() +{ +} + +} // namespace WebCore diff --git a/src/3rdparty/webkit/WebKit/qt/ChangeLog b/src/3rdparty/webkit/WebKit/qt/ChangeLog index 39f2cf3..61cee76 100644 --- a/src/3rdparty/webkit/WebKit/qt/ChangeLog +++ b/src/3rdparty/webkit/WebKit/qt/ChangeLog @@ -1,3 +1,27 @@ +2010-03-24 Viatcheslav Ostapenko + + Reviewed by Laszlo Gombos. + + Auto-uppercase and predictive text need to be disabled for S60 (as for maemo) + https://bugs.webkit.org/show_bug.cgi?id=33176 + + * WebCoreSupport/EditorClientQt.cpp: + +2010-06-01 Noam Rosenthal + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Add documentation to the QtWebkit bridge + https://bugs.webkit.org/show_bug.cgi?id=35861 + + This patch includes comprehensive qdoc documentation for the QtWebkit bridge. + + * docs/qtwebkit-bridge.qdoc: Added. + * docs/qtwebkit.qdoc: + * docs/webkitsnippets/doc_src_qtscript.qdoc: Added. + * docs/webkitsnippets/qtwebkit_bridge_snippets.cpp: Added. + (wrapInFunction): + 2010-06-01 Simon Hausmann Reviewed by Laszlo Gombos. diff --git a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/EditorClientQt.cpp b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/EditorClientQt.cpp index 7b7f610..0ce6383 100644 --- a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/EditorClientQt.cpp +++ b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/EditorClientQt.cpp @@ -613,11 +613,11 @@ void EditorClientQt::setInputMethodState(bool active) } } webPageClient->setInputMethodHint(Qt::ImhHiddenText, isPasswordField); -#ifdef Q_WS_MAEMO_5 - // Maemo 5 MicroB Browser disables auto-uppercase and predictive text, thus, so do we. +#if defined(Q_WS_MAEMO_5) || defined(Q_OS_SYMBIAN) + // disables auto-uppercase and predictive text for mobile devices webPageClient->setInputMethodHint(Qt::ImhNoAutoUppercase, true); webPageClient->setInputMethodHint(Qt::ImhNoPredictiveText, true); -#endif // Q_WS_MAEMO_5 +#endif // Q_WS_MAEMO_5 || Q_OS_SYMBIAN #endif // QT_VERSION check webPageClient->setInputMethodEnabled(active); } diff --git a/src/3rdparty/webkit/WebKit/qt/docs/qtwebkit-bridge.qdoc b/src/3rdparty/webkit/WebKit/qt/docs/qtwebkit-bridge.qdoc new file mode 100644 index 0000000..4f41d29 --- /dev/null +++ b/src/3rdparty/webkit/WebKit/qt/docs/qtwebkit-bridge.qdoc @@ -0,0 +1,425 @@ +/*! + \inmodule QtWebKit + \page qtwebkit-bridge.html + \title The QtWebKit Bridge + \contentspage QtWebKit + \section1 Overview + \section2 The technology + + The QtWebKit bridge is a mechanism that extends WebKit's JavaScript environment to access native + objects that are represented as QObjects. It takes advantage of the inherent introspection of the + \l{Qt Object Model}, which has a natural alignment to the way JavaScript worked. + + For example, both JavaScript and QObjects have properties: a construct that represent a getter/setter + pair under one name. + + \section2 Use Cases + + There are two main use cases for the QtWebKit bridge. Web content in a native application, and Thin Client. + + \section3 Web Content in a Native Application + + This is a common use case in classic Qt application, and a design pattern used by several modern + applications. For example, an application that contains both a media-player, playlist manager, and + a music store. The playlist manager is usually best authored as a classic desktop application, + with the native-looking robust \l{QWidget}s helping with producing that application. + The media-player control, which usually looks custom, can be written using \l{The Graphics View framework} + or with in a declarative way with \l{QtDeclarative}. The music store, which shows dynamic content + from the internet, and gets modified rapidly, is best authored in HTML and maintained on the server. + + With the QtWebKit bridge, that music store component can interact with native parts of the application, + for example, if a file needs to be saved to a specific location. + + \section3 Thin Client + + Another use case is using Qt as a native backend to a full web application, + referred to here as a thin client. In this use-case, the entire UI is driven by + HTML, JavaScript and CSS, and native Qt-based components are used to allow that application + access to native features not usually exposed to the web, or to enable helper components that + are best written with C++. + + An example for such client is a UI for a video-on-demand service on a TV. The entire content and + UI can be kept on the server, served dynamically through HTTP and rendered with WebKit, with additional + native components for accessing hardware-specific features like extracting the list of images + out of the video. + + \section2 Difference from Other Bridge Technologies + + Of course QtWebKit is not the only bridge technology out there. NPAPI, for example, + is a long-time standard or web-native bridging. Due to Qt's meta-object system, full applications + built partially with web-technologies are much easier to develop. NPAPI, however, is more geared + towards cross-browser plugins, due to it being an accepted standard. + + When developing a plugin for a browser, NPAPI is recommended. When developing a full application + that utilizes HTML-rendering, the QtWebKit bridge is recommended. + + \section2 Relationship with QtScript + + The QtWebKit bridge is similar to \l{QtScript}, especially to some of the features described in the + \l{Making Applications Scriptable} page. However, as of Qt 4.7, full QtScript API is not supported for web applications. + That is planned as an enhancement for future versions. You might notice that some of the features + described here are an exact copy of the ones described in the \l{Making Applications Scriptable} page. That is because + the QtWebKit bridge is a subset of that functionality, and this page tries to capture the full + capabilities available through the QtWebKit bridge specifically. + + \section1 Accessing QObjects + + \section2 Creating the link via QWebFrame + + By default, no QObjects are accessible through the web environment, for security reasons. + To enable web content access to a native QObject, the application has to explicitly grant it access, + using the following call: + + \snippet webkitsnippets/qtwebkit_bridge_snippets.cpp 0 + + See \l{QWebFrame::addToJavaScriptWindowObject()} for more information. + + \section2 Using Signals and Slots + + Qt Script adapts Qt's central \l{Signals and Slots} feature for + scripting. There are three principal ways to use signals and slots + with Qt Script: + + \list + \i \bold{Hybrid C++/script}: C++ application code connects a + signal to a script function. The script function can, for example, be + a function that the user has typed in, or one that you have read from a + file. This approach is useful if you have a QObject but don't want + to expose the object itself to the scripting environment; you just + want a script to be able to define how a signal should be reacted + to, and leave it up to the C++ side of your application to establish + the connection. + + \i \bold{Hybrid script/C++}: A script can connect signals and slots + to establish connections between pre-defined objects that the + application exposes to the scripting environment. In this scenario, + the slots themselves are still written in C++, but the definition of + the connections is fully dynamic (script-defined). + + \i \bold{Purely script-defined}: A script can both define signal + handler functions (effectively "slots written in Qt Script"), + \e{and} set up the connections that utilize those handlers. For + example, a script can define a function that will handle the + QLineEdit::returnPressed() signal, and then connect that signal to the + script function. + \endlist + + Note that QtScript functions such as qScriptConnect are unavilable in the web environment. + + \section3 Signal to Function Connections + + \c{connect(function)} + + In this form of connection, the argument to \c{connect()} is the + function to connect to the signal. + + \snippet webkitsnippets/doc_src_qtscript.qdoc 2 + + The argument can be a Qt Script function, as in the above + example, or it can be a QObject slot, as in + the following example: + + \snippet webkitsnippets/doc_src_qtscript.qdoc 3 + + When the argument is a QObject slot, the argument types of the + signal and slot do not necessarily have to be compatible; + the QtWebKit bridge will, if necessary, perform conversion of the signal + arguments to match the argument types of the slot. + + To disconnect from a signal, you invoke the signal's + \c{disconnect()} function, passing the function to disconnect + as argument: + + \snippet webkitsnippets/doc_src_qtscript.qdoc 4 + + When a script function is invoked in response to a signal, the + \c this object will be the Global Object. + + \section3 Signal to Member Function Connections + + \c{connect(thisObject, function)} + + In this form of the \c{connect()} function, the first argument + is the object that will be bound to the variable, \c this, when + the function specified using the second argument is invoked. + + If you have a push button in a form, you typically want to do + something involving the form in response to the button's + \c{clicked} signal; passing the form as the \c this object + makes sense in such a case. + + \snippet webkitsnippets/doc_src_qtscript.qdoc 5 + + To disconnect from the signal, pass the same arguments to \c{disconnect()}: + + \snippet webkitsnippets/doc_src_qtscript.qdoc 6 + + \section3 Signal to Named Member Function Connections + + \c{connect(thisObject, functionName)} + + In this form of the \c{connect()} function, the first argument is + the object that will be bound to the variable, \c this, when + a function is invoked in response to the signal. The second argument + specifies the name of a function that is connected to the signal, + and this refers to a member function of the object passed as the + first argument (\c thisObject in the above scheme). + + Note that the function is resolved when the connection is made, not + when the signal is emitted. + + \snippet webkitsnippets/doc_src_qtscript.qdoc 7 + + To disconnect from the signal, pass the same arguments to \c{disconnect()}: + + \snippet webkitsnippets/doc_src_qtscript.qdoc 8 + + \section3 Error Handling + + When \c{connect()} or \c{disconnect()} succeeds, the function will + return \c{undefined}; otherwise, it will throw a script exception. + You can obtain an error message from the resulting \c{Error} object. + Example: + + \snippet webkitsnippets/doc_src_qtscript.qdoc 9 + + \section3 Emitting Signals from Scripts + + To emit a signal from script code, you simply invoke the signal + function, passing the relevant arguments: + + \snippet webkitsnippets/doc_src_qtscript.qdoc 10 + + It is currently not possible to define a new signal in a script; + i.e., all signals must be defined by C++ classes. + + \section3 Overloaded Signals and Slots + + When a signal or slot is overloaded, the QtWebKit bridge will attempt to + pick the right overload based on the actual types of the QScriptValue arguments + involved in the function invocation. For example, if your class has slots + \c{myOverloadedSlot(int)} and \c{myOverloadedSlot(QString)}, the following + script code will behave reasonably: + + \snippet webkitsnippets/doc_src_qtscript.qdoc 11 + + You can specify a particular overload by using array-style property access + with the \l{QMetaObject::normalizedSignature()}{normalized signature} of + the C++ function as the property name: + + \snippet webkitsnippets/doc_src_qtscript.qdoc 12 + + If the overloads have different number of arguments, the QtWebKit bridge will + pick the overload with the argument count that best matches the + actual number of arguments passed to the slot. + + For overloaded signals, JavaScript will throw an error if you try to connect + to the signal by name; you have to refer to the signal with the full + normalized signature of the particular overload you want to connect to. + + \section3 Invokable Methods + + Both slots and signals are invokable from script by default. In addition, it's also + possible to define a method that's invokable from script without it being a signal or a slot. + This is especially useful for functions with return types, as slots normally do not return anything + (it would be meaningless to return values from a slot, as the connected signals don't handle the returned data). + To make a non-slot method invokable, simply add the Q_INVOKABLE macro before its definition: + + \snippet webkitsnippets/doc_src_qtscript.qdoc 20 + + \section2 Accessing Properties + + The properties of the QObject are available as properties + of the corresponding JavaScript object. When you manipulate + a property in script code, the C++ get/set method for that + property will automatically be invoked. For example, if your + C++ class has a property declared as follows: + + \snippet webkitsnippets/doc_src_qtscript.qdoc 13 + + then script code can do things like the following: + + \snippet webkitsnippets/doc_src_qtscript.qdoc 14 + + \section2 Accessing Child QObjects + + Every named child of the QObject (that is, for which + QObject::objectName() is not an empty string) is by default available as + a property of the JavaScript wrapper object. For example, + if you have a QDialog with a child widget whose \c{objectName} property is + \c{"okButton"}, you can access this object in script code through + the expression + + \snippet webkitsnippets/doc_src_qtscript.qdoc 15 + + Since \c{objectName} is itself a Q_PROPERTY, you can manipulate + the name in script code to, for example, rename an object: + + \snippet webkitsnippets/doc_src_qtscript.qdoc 16 + + \section2 Data types + + When calling slots, receiving signals or accessing properties, usually some payload is involved. + For example, a property "text" might return a \l{QString} parameter. + The QtWebKit bridge does the job of converting between a given JavaScript data-type, and the + expected or given Qt type. Each Qt type has a coresponding set of rules of how JavaScript treats it. + + The data type conversions are also applicable for the data returned from non-void invokable methods. + + \section3 Numbers + + All Qt numeric data types are converted to or from a JavaScript number. These include int, short, float, + double, and the porable Qt types (qreal, qint etc). A special case is \l{QChar}; + If a slot expects a QChar, the QtWebKit bridge would use the unicode value in case of a number, + or the first character in a string. + + Note that non-standard (typedefed) number types are not automatically converted to + or from a JavaScript number - it's advised to use standard number types for signal, slots + and properties. + + When a non-number is passed as an argument to a method or property that expects a number, + the appropriate JavaScript conversion function (parseInt / parseFloat) would be used. + + \section3 Strings + + When JavaScript accesses methods or properties that expect a \l{QString}, the QtWebKit bridge + will automatically convert the value to a string (if it's not already a string), using the + built-in JavaScript toString method. + + When a QString is passed to JavaScript from a signal or a property, The QtWebKit bridge will + convert it into a JavaScript string. + + \section3 Date & Time + + Both \l{QDate}, \l{QTime} and \l{QDateTime} are automatically translated to or from the JavaScript + Date object. If a number is passed as an argument to a method that expects one of the date/time + types, the QtWebKit bridge would treat it as a timestamp. If a sting is passed, QtWebKit would + try different Qt date parsing functions to find the right one. + + \section3 Regular Expressions + + The QtWebKit bridge would automatically convert JavaScript RegEx object to a \l{QRegExp}. + If a string is passed to a method expecting a \l{QRegExp}, the string would be converted + to that \l{QRegExp}. + + \section3 Lists + + The QtWebKit bridge treats several types of lists in a special way: \l{QVariantList}, \l{QStringList}, + \l{QObjectList} and \l{QList}. When a slot or property expects one of those list types, + the QtWebKit bridge would try to convert a JavaScript array into that type, converting each of + the array's elements to the single-element type of the list. + + The most useful type of list is perhaps \l{QVariantList}, which can be converted to from any + JavaScript array. + + \section3 Compound (JSON) objects + + JavaScript compound objects, also known as JSON objects, are variables which hold a list + of key-value pairs, where all the keys are strings and the values can have any type. + This translates very well to \l{QVariantMap}, which is nothing more than a \l{QMap} of \l{QString} + to \l{QVariant}. + + The seamless conversion between JSON objects and \l{QVariantMap} allows for a very convenient + way of passing arbitrary structured data between C++ and the JavaScript environment. The native \l{QObject} has + to make sure that compound values are converted to \l{QVariantMap}s and \l{QVariantList}s, and JavaScript is + guaranteed to receive them in a meaningful way. + + Note that types that are not supported by JSON, such as JavaScript functions and getters/setters, + are not converted. + + \section3 QVariants + + When a slot or property accepts a \l{QVariant}, the QtWebKit bridge would create a \l{QVariant} that best + matches the argument passed by JavaScript. A string, for example, would become a \l{QVariant} holding a \l{QString}, + a normal JSON object would become a \l{QVariantMap}, and a JavaScript array would become a \l{QVariantList}. + + Using \l{QVariant}s generously in C++ in that way makes C++ programming feel a bit more like JavaScript programming, + as it adds another level of indirection - passing \l{QVariant}s around is very flexible, as the program can figure out + the type of argument in runtime just like JavaScript would do, but it also takes away from the type-safety and robust + nature of C++. It's recommended to use \l{QVariant}s only for convenience high-level functions, and to keep most of your + \l{QObject}s somewhat type-safe. + + \section3 QObjects + + A pointer to a \l{QObject} or a \l{QWidget} can be passed as payload in signals, slots and properties. That object + can then be used like an object that's exposed directly; i.e. its slots can be invoked, its signals connected to etc. + However, this functionality is fairly limited - the type used has to be \l{QObject}* or \l{QWidget}*. If the type + specified is a pointer to a non-\l{QWidget} subclass of \l{QObject}, the QtWebKit bridge would not recognize it to be + a \l{QObject}. + + In general its advised to use care when passing \l{QObject}s as arguments, as those objects don't become owned by + the Javascipt engine; That means that the application developer has to be extra careful not to try to access + \l{QObject}s that have already been deleted by the native environment. + + \section3 Pixmaps and Images + + \since 4.7 + + The QtWebKit bridge handles \l{QPixmap}s and \l{QImage}s in a special way. Since QtWebKit stores \l{QPixmap}s to + represent HTML images, \l{QPixmap}s coming from the native environment can be used directly inside WebKit. + A \l{QImage} or a \l{QPixmap} coming from the Qt environment would convert to an intermediate JavaScript object, + that can be represented like this: + + \snippet webkitsnippets/qtwebkit_bridge_snippets.cpp 1 + + The JavaScript environment can then use the pixmap it gets from Qt and display it inside the HTML environment, + by assigning it to an existing element using assignToHTMLImageElement. It can also use the toDataURL() function, + which allows using the pixmap as the src attribute of an image or as a background-image url. Note that the toDataURL() + function is costly and should be used with caution. + + Example code: + + C++: + \snippet webkitsnippets/qtwebkit_bridge_snippets.cpp 2 + + HTML: + \snippet webkitsnippets/qtwebkit_bridge_snippets.cpp 3 + + When a Qt object expects a \l{QImage} or a \l{QPixmap} as input, and the argument passed is an HTML image element, + the QtWebKit bridge would convert the pixmap assigned to that image element into a \l{QPixmap} or a \l{QImage}. + + \since 4.7 + + \section3 QWebElement + + A signal, slot or property that expects or returns a \l{QWebElement} can work seamlessly with JavaScript references + to DOM elements. The JavaScript environment can select DOM elements, keep them in variables, then pass them to Qt as + a \l{QWebElement}, and receive them back. Example: + + C++: + \snippet webkitsnippets/qtwebkit_bridge_snippets.cpp 4 + + HTML: + \snippet webkitsnippets/qtwebkit_bridge_snippets.cpp 5 + + This is specifically useful to create custom renderers or extensions to the web environment. Instead of forcing Qt + to select the element, the web environment already selects the element and then send the selected element directly to Qt. + + Note that \l{QWebElement}s are not thread safe - an object handling them has to live in the UI thread. + + \section1 Architecture issues + + \section2 Limiting the Scope of the Hybrid Layer + + When using QtWebKit's hybrid features, it's a common pitfall to make the API exposed to JavaScript very rich and + use all its features. This, however, leads to complexity and can create bugs that are hard to trace. + Instead, it's advisable to keep the hybrid layer small and manageable: create a gate only when + there's an actual need for it, i.e. there's a new native enabler that requires a direct interface + to the application layer. Sometimes new functionality is better handled internally in the native layer + or in the web layer; simplicity is your friend. + + This usually becomes more apparent when the hybrid layer can create or destroy objects, or uses + signals slots or properties with a \l{QObject}* argument. It's advised to be very careful and to treat + an exposed \l{QObject} as a system - with careful attention to memory management and object ownership. + + \section2 Internet Security + + When exposing native object to an open web environment, it's important to understand the security + implications. Think whether the exposed object enables the web environment access to things that + shouldn't be open, and whether the web content loaded by that web page comes from a trusted. In general, when + exposing native QObjects that give the web environment access to private information or to functionality + that's potentially harmful to the client, such exposure should be balanced by limiting the web page's + access to trusted URLs only with HTTPS and other security measures. + + +*/ diff --git a/src/3rdparty/webkit/WebKit/qt/docs/qtwebkit.qdoc b/src/3rdparty/webkit/WebKit/qt/docs/qtwebkit.qdoc index c6dd550..d3f5502 100644 --- a/src/3rdparty/webkit/WebKit/qt/docs/qtwebkit.qdoc +++ b/src/3rdparty/webkit/WebKit/qt/docs/qtwebkit.qdoc @@ -20,8 +20,9 @@ scripted with JavaScript. A bridge between the JavaScript execution environment and the Qt object - model makes it possible for custom QObjects to be scripted. Integration - with the Qt networking module enables Web pages to be transparently loaded + model makes it possible for custom QObjects to be scripted. For detailed + documentation see \l{The QtWebkit Bridge}. + Integration with the Qt networking module enables Web pages to be transparently loaded from Web servers, the local file system or even the Qt resource system. In addition to providing pure rendering features, HTML documents can be diff --git a/src/3rdparty/webkit/WebKit/qt/docs/webkitsnippets/qtwebkit_bridge_snippets.cpp b/src/3rdparty/webkit/WebKit/qt/docs/webkitsnippets/qtwebkit_bridge_snippets.cpp new file mode 100644 index 0000000..d83ab3f --- /dev/null +++ b/src/3rdparty/webkit/WebKit/qt/docs/webkitsnippets/qtwebkit_bridge_snippets.cpp @@ -0,0 +1,83 @@ + +void wrapInFunction() +{ + +//! [0] + // ... + QWebFrame *frame = myWebPage->mainFrame(); + frame->addToJavaScriptWindowObject("someNameForMyObject", myObject); + // ... +//! [0] +#if 0 + //! [1] + { + width: ..., + height: ..., + toDataURL: function() { ... }, + assignToHTMLImageElement: function(element) { ... } + } + //! [1] +#endif + //! [2] + class MyObject : QObject { + Q_OBJECT + Q_PROPERTY(QPixmap myPixmap READ getPixmap) + + public: + QPixmap getPixmap() const; + }; + + /* ... */ + + MyObject myObject; + myWebPage.mainFrame()->addToJavaScriptWindowObject("myObject", &myObject); + + //! [2] + #if 0 + //! [3] + + + + + + + + + //! [3] + #endif + //! [4] + class MyObject : QObject { + Q_OBJECT + + public slots: + void doSomethingWithWebElement(const QWebElement&); + }; + + /* ... */ + + MyObject myObject; + myWebPage.mainFrame()->addToJavaScriptWindowObject("myObject", &myObject); + + //! [4] + #if 0 + //! [5] + + + + + + Text + + + //! [5] + #endif +} + -- cgit v0.12 From a978ce3d7c6f6825e723df2a986ad17c9cb6af31 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Fri, 4 Jun 2010 10:44:04 +0200 Subject: Add a note to the Linguist docs stating XLIFF 1.0 is not supported The earliest version we support is XLIFF 1.1, so now this is made clearer. Task-number: QTBUG-9193 Reviewed-by: Morten Engvoldsen --- doc/src/internationalization/linguist-manual.qdoc | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/doc/src/internationalization/linguist-manual.qdoc b/doc/src/internationalization/linguist-manual.qdoc index 424dec2..4493deb 100644 --- a/doc/src/internationalization/linguist-manual.qdoc +++ b/doc/src/internationalization/linguist-manual.qdoc @@ -252,6 +252,9 @@ can also process Localization Interchange File Format (XLIFF) format files; files in this format typically have file names that end with the \c .xlf suffix. + + \note The minimum supported version for XLIFF format files is + 1.1. XLIFF 1.0 version files are not supported. Pass the \c -help option to \c lupdate to obtain the list of supported options: @@ -962,8 +965,10 @@ application. \o \c .xlf \e {XLIFF files} \BR are human-readable XML files that adhere to the international XML Localization Interchange File Format. \QL - can be used to edit XLIFF files generated by other programs. For standard - Qt projects, however, only the TS file format is used. + can be used to edit XLIFF files generated by other programs. However, for + standard Qt projects, only the TS file format is used. \note The minimum + supported version for XLIFF format files is 1.1. XLIFF 1.0 version files + are not supported. \o QM \e {Qt message files} \BR are binary files that contain translations used by an application at run-time. These files are generated by \l lrelease, but can also be generated by \QL. -- cgit v0.12 From b32122f90157de39367a4a4363da1c7f8a891211 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Garami=20G=C3=A1bor?= Date: Fri, 4 Jun 2010 10:48:12 +0200 Subject: Adding correct hungarian translation translations/assistant_hu.ts: Translated: 231 of 231 (100%) translations/designer_hu.ts: Translated: 85 of 1248 (6%) translations/linguist_hu.ts: Translated: 393 of 393 (100%) translations/qtconfig_hu.ts: Translated: 73 of 168 (43%) translations/qt_help_hu.ts: Translated: 80 of 81 (98%) translations/qt_hu.ts: Translated: 2402 of 2464 (97%) translations/qvfb_hu.ts: Translated: 65 of 65 (100%) Merge-request: 659 Reviewed-by: Andreas Aardal Hanssen --- tools/linguist/phrasebooks/hungarian.qph | 744 +++ translations/assistant_hu.ts | 685 ++- translations/designer_hu.ts | 2959 +++++---- translations/linguist_hu.ts | 989 +-- translations/qt_help_hu.ts | 229 +- translations/qt_hu.ts | 9772 +++++++++++++++++++----------- translations/qtconfig_hu.ts | 633 +- translations/qvfb_hu.ts | 175 +- 8 files changed, 9935 insertions(+), 6251 deletions(-) create mode 100644 tools/linguist/phrasebooks/hungarian.qph diff --git a/tools/linguist/phrasebooks/hungarian.qph b/tools/linguist/phrasebooks/hungarian.qph new file mode 100644 index 0000000..0bf3fbe --- /dev/null +++ b/tools/linguist/phrasebooks/hungarian.qph @@ -0,0 +1,744 @@ + + + + OK + OK + + + Bookmarks + Könyvjelzők + + + Remove + Törlés + + + New Folder + Új könyvtár + + + Add + Hozzáadás + + + Previous + Előző + + + Font + Betűtípus + + + Help + Segítség + + + Done + Kész + + + Install + Telepítés + + + Cancel + Mégsem + + + Installation Path: + Telepítési útvonal: + + + Index + Index + + + Contents + Tartalom + + + Search + Keresés + + + Print Preview... + Nyomtatási kép... + + + About... + Névjegy... + + + Toolbars + Eszköztárak + + + Address: + Cím: + + + Open Source Edition + Nyíltforrású kiadás + + + Yes + Igen + + + No + Nem + + + Apply + Alkalmaz + + + Ignore + Kihagyás + + + Abort + Megszakítás + + + Play + Lejátszás + + + Pause + Szünet + + + File + Fájl + menu + + + file + fájl + + + directory + könyvtár + + + Symlink + Szimbolikus link + + + Delete + Törlés + + + Rename + Átnevezés + + + Back + Vissza + + + Forward + Előre + + + Finish + Befejezés + + + Quit + Kilépés + + + Exit + Kilépés + + + Close + Bezárás + + + Close All + Mindent bezár + + + Error + Hiba + + + Warning + Figyelmeztetés + + + Information + Információ + + + Question + Kérdés + + + document + dokumentum + + + author + szerző + + + subsidiary(-ies) + leányvállalata(i) + + + Help + Súgó + + + Undo + Visszavonás + + + Redo + Újra + + + Open + Megnyitás + + + Save + Mentés + + + Save all + Mindet menti + + + click + kattintás + noun + + + click + kattintson + ask + + + Recent + Előző + Recent files/Előző fájlok + + + Window + Ablak + + + Cascade + Lépcsőzetes + + + Tile + Mozaikszerű + + + Game + Játék + + + New Game + Új játék + + + Untitled + Névtelen + + + Unknown error + Ismeretlen hiba + + + New Folder + Új mappa + + + folder + mappa + + + New Directory + Új könyvtár + + + unknown + ismeretlen + + + Copy + Másolás + + + Cut + Kivágás + + + Paste + Beillesztés + + + Paste special + Speciális beillesztés + + + Insert + Beszúrás + + + Copy here + Másolás ide + + + Minimize + Minimalizálás + + + Zoom + Nagyítás + + + &Edit + S&zerkesztés + + + &View + &Nézet + + + Application + Alkalmazás + + + Documentation + Dokumentáció + + + Network + Hálózat + + + Current Page + Aktuális oldal + + + Find + Keresés + + + Locale + Nyelv + + + Cannot open '%1'. + '%1' nem nyitható meg. + + + Cannot find the string '%1'. + A szöveg nem található: '%1'. + + + A file called '%1' already exists. Please choose another name. + '%1' nevű fájl már létezik. Válasszon egy másik nevet. + + + The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + Ez a program abban a reményben került közreadásra, hogy hasznos lesz, de minden egyéb GARANCIA NÉLKÜL, az ELADHATÓSÁGRA vagy VALAMELY CÉLRA VALÓ ALKALMAZHATÓSÁGRA való származtatott garanciát is beleértve. + License text in most Qt programs + + + Open Link + Link megnyitása + + + Next + Következő + + + Case Sensitive + Kis/nagybetű érzékeny + + + Whole words + Teljes szó + + + Open Link in New Tab + Link megnyitása új lapon + + + Download canceled. + Letöltés megszakítva. + + + The file %1 already exists. Do you want to overwrite it? + A(z) '%1' nevű fájl már létezik. Felülírja? + + + Qt Assistant + Qt Asszisztens + + + Preferences... + Beállítások... + + + &File + &Fájl + + + Browser + Böngésző + + + Filters + Szűrők + + + Delete Folder + Mappa törlése + + + Rename Folder + Mappa átnevezése + + + You need a commercial Qt license for development of proprietary (closed source) applications. Please see <a href="http://www.trolltech.com/company/model.html">www.trolltech.com/company/model.html</a> for an overview of Qt licensing. + Amennyiben zárt forrású alkalmazás fejlesztéséhez kívánja a Qt-t felhasználni, szüksége lesz a Qt kereskedelmi verziójára. Kérem tekintse meg az <tt>http://www.trolltech.com/company/model.html</tt> oldalt a Qt licenszelésének áttekintéséhez. + + + New Tab + Új fül + + + Close Tab + Fül bezárása + + + Close Other Tabs + A többi fül bezárása + + + True + Igaz + + + False + Hamis + + + Update + Frissítés + + + Normal + Normál + + + Bold + Félkövér + + + Italic + Dőlt + + + Greek + Görög + + + Cyrillic + Cirill + + + Armenian + Örmény + + + Hebrew + Héber + + + Arabic + Arab + + + Syriac + Szír + + + Permission denied + Hozzáférés megtagadva + + + Too many open files + Túl sok fájl van nyitva + + + No such file or directory + Nincs ilyen fájl vagy könyvtár + + + No space left on device + Nincs több hely az eszközön + + + Width: + Szélesség: + + + Height: + Magasság: + + + Margins + Margók + + + top margin + felső margó + + + left margin + bal margó + + + right margin + jobb margó + + + bottom margin + alsó margó + + + Next page + Következő oldal + + + Previous page + Előző oldal + + + First page + Első oldal + + + Last page + Utolsó oldal + + + Fit width + Szélesség igazítása + + + Fit page + Oldal igazítása + + + Zoom in + Nagyítás + + + Zoom out + Kicsinyítés + + + Portrait + Álló + + + Landscape + Fekvő + + + Print + Nyomtatás + + + Page setup + Oldalbeállítás + + + Color + Szín + + + Grayscale + Szürkeárnyalatos + + + None + Nincs + + + ... + ... + + + Menu + Menü + + + Keep + Meghagy + + + Pause + Megállít + + + Log + Napló + + + Mi&nimize + &Kis méret + + + Press + Nyomja meg + + + Submit + Küldés + + + Underline + Aláhúzott + + + Outline + Áthúzott + + + Direction + Irány + + + Configuration + Konfiguráció + + + None + Semmi + + + Save As... + Mentés másként... + + + Context + Környezet + + + Edit + Szerkesztés + + + Toolbar + Eszköztár + + + &Print... + &Nyomtatás... + + + E&xit + &Kilépés + + + Sidebar + Oldalsáv + + + Bookmark + Könyvjelző + + + Save As + Mentés másként + + + Select All + Összes kijelölése + + + Name + Név + + + Type + Típus + + + Date + Dátum + + + Name + Név + + + Unknown + Ismeretlen + + + Value + Érték + + + Default + Alapértelmezett + + + New + Új + + + Level + Szint + + + Location + Hely + + + Reload + Újratöltés + + + Pictures + Képek + + + Battery + Elem + + + No error + Nincs hiba + + + Whole words + Teljes szó + + + (Új bejegyzés) + + + + Horizontal + Vízszintes + + + Enabled + Engedélyezve + + diff --git a/translations/assistant_hu.ts b/translations/assistant_hu.ts index e43070c..1081435 100644 --- a/translations/assistant_hu.ts +++ b/translations/assistant_hu.ts @@ -1,18 +1,18 @@ - + AboutDialog - + &Close - &Bezárás + Be&zárás AboutLabel - + Warning Figyelmeztetés @@ -20,17 +20,91 @@ Unable to launch external application. - Nem lehet külső alkalmazást elindítani. + A külső alkalmazás elindítása sikertelen. + - + OK OK + Assistant + + + Error registering documentation file '%1': %2 + Hiba a(z) '%1' dokumentáció fájl regisztrálásakor: %2 + + + + Error: %1 + Hiba: %1 + + + + Could not register documentation file +%1 + +Reason: +%2 + A dokumentációs fájl regisztrálása sikertelen +%1 + +Oka: +%2 + + + + Documentation successfully registered. + A dokumentáció regisztrálása sikerült. + + + + Could not unregister documentation file +%1 + +Reason: +%2 + A dokumentációs fájl eltávolítása sikertelen +%1 + +Oka: +%2 + + + + Documentation successfully unregistered. + A dokumentáció eltávolítása sikerült. + + + + Error reading collection file '%1': %2. + Hiba a(z) '%1' gyűjteményfájl olvasásakor: %2. + + + + Error creating collection file '%1': %2. + Hiba a(z) '%1' gyűjteményfájl létrehozásakor: %2. + + + + Error reading collection file '%1': %2 + Hiba a(z) '%1' gyűjteményfájl olvasásakor: %2 + + + + Cannot load sqlite database driver! + Az sqlite adatbázisdriver nem tölthető be! + + + BookmarkDialog + Bookmarks + Könyvjelzők + + Add Bookmark Könyvjelző hozzáadása @@ -43,96 +117,85 @@ Add in Folder: - Hozzáadás dossziéban: + Hozzáadás ide: - New Folder - Új dosszié - - - - - - - - Bookmarks - Könyvjelzők - - - + + - + + New Folder + Új mappa + + Delete Folder - Dosszié törlése + Mappa törlése - Rename Folder - Dosszié átnevezése + Mappa átnevezése BookmarkManager - Bookmarks - Könyvjelzők + Könyvjelzők - + + Untitled + Névtelen + + + Remove - Áthelyezés + Törlés You are going to delete a Folder, this will also<br>remove it's content. Are you sure to continue? - Egy olyan dossziét fog törölni, ami <br> törli annak tartalmát is. Biztos benne, hogy folytatja? + A mappa törlésekor a tartalma is megsemmisül.<br>Biztosan folytatja? - - - New Folder - Új Dosszié + + Manage Bookmarks... + Könyvjelzők kezelése... - - - BookmarkWidget - - Filter: - Szűrő: + + Add Bookmark... + Könyvjelző hozzáadása... - - Remove - Eltávolítás + + Ctrl+D + - + Delete Folder - Dosszié törlése + Mappa törlése Rename Folder - Dosszié átnevezése + Mappa átnevezése Show Bookmark - Könyvjelző megjelenítése + Könyvjelző megnyitása Show Bookmark in New Tab - Könyvjelző megjelenítése új lapon + Könyvjelző megnyitása új fülön - + Delete Bookmark Könyvjelző törlése @@ -142,64 +205,165 @@ Könyvjelző átnevezése - + New Folder + Új mappa + + + + BookmarkWidget + + Filter: + Szűrő: + + + Remove + Törlés + + + Delete Folder + Mappa törlése + + + Rename Folder + Mappa átnevezése + + + Show Bookmark + Könyvjelző megnyitása + + + Show Bookmark in New Tab + Könyvjelző megnyitása új fülön + + + Delete Bookmark + Könyvjelző törlése + + + Rename Bookmark + Könyvjelző átnevezése + + Add - Hozzáadás + Hozzáadás CentralWidget - + Add new page - Új lap hozzáadása + Új fül hozzáadása Close current page - Aktuális lap bezárása + Az aktuális fül bezárása - + Print Document Dokumentum nyomtatása - + unknown ismeretlen - + Add New Page - Új lap hozzáadása + Új fül hozzáadása Close This Page - Lap bezárása + Az aktuális fül bezárása Close Other Pages - Többi lap bezárása + A többi fül bezárása Add Bookmark for this Page... - Könyvjelző hozzáadása ehhez a laphoz... + A lap mentése könyvjelzőként... - + Search Keresés + CmdLineParser + + + Unknown option: %1 + Ismeretlen opció: %1 + + + + The collection file '%1' does not exist. + A(z) '%1' gyűjteményfájl nem található. + + + + Missing collection file. + Hiányzó gyűjteményfájl. + + + + Invalid URL '%1'. + Érvénytelen URL: '%1'. + + + + Missing URL. + Hiányzó URL. + + + + Unknown widget: %1 + Ismeretlen elem: %1 + + + + Missing widget. + Hiányzó elem. + + + + The Qt help file '%1' does not exist. + A(z) '%1' Qt súgófájl nem létezik. + + + + Missing help file. + Hiányzó súgófájl. + + + + Missing filter argument. + Hiányzó szűrőparaméter. + + + + Error + Hiba + + + + Notice + Információ + + + ContentWindow - + Open Link Link megnyitása @@ -214,40 +378,35 @@ Add Filter Name - Szűrő név hozzáadása + Szűrőnév hozzáadása Filter Name: - Szűrő név: + Szűrő neve: FindWidget - Previous - Előző + Előző - Next - Következő + Következő - Case Sensitive - Kis és nagybetű érzékeny + Kis/nagybetű érzékeny - Whole words - Egész szavakat + Teljes szó - <img src=":/trolltech/assistant/images/wrap.png">&nbsp;Search wrapped - <img src=":/trolltech/assistant/images/wrap.png">&nbsp;Keresés tördelése + <img src=":/trolltech/assistant/images/wrap.png">&nbsp;A keresés megszakítva @@ -255,77 +414,77 @@ Font - Betű + Betűtípus &Writing system - Rendszer &írása + Írás&rendszer &Family - &Család + Betű&típus &Style - &Stílus + Betű&stílus &Point size - &Pont méret + Betű&méret HelpViewer - Help - Segítség + Súgó - OK - OK + OK - + + <title>about:blank</title> + + + + <title>Error 404...</title><div align="center"><br><br><h1>The page could not be found</h1><br><h3>'%1'</h3></div> - <title>404-es hiba...</title><div align="center"><br><br><h1>A lap nem található </h1><br><h3>'%1'</h3></div> + <title>404-es hiba...</title><div align="center"><br><br><h1>A lap nem található</h1><br><h3>'%1'</h3></div> - Copy &Link Location - &Link címének másolása + &Link címének másolása - Open Link in New Tab Ctrl+LMB - Link megnyitása új lapon Ctrl+LMB + Link megnyitása új lapon Ctrl+LMB - Open Link in New Tab - Link megnyitása új lapon + Link megnyitása új lapon - Unable to launch external application. - Nem lehet külső alkalmazást indítani. + A külső alkalmazás elindítása sikertelen. + IndexWindow - + &Look for: - &Keresés: + &Amit keres: - + Open Link Link megnyitása @@ -339,36 +498,36 @@ InstallDialog - + Install Documentation - + Dokumentáció telepítése - + Downloading documentation info... - Dokumentum információ letöltése... + A dokumentáció információinak letöltése... - + Download canceled. - Letöltés vmegszakítva. + Letöltés megszakítva. - - + + Done. Kész. - + The file %1 already exists. Do you want to overwrite it? - A(z) %1 fájl már létezik. Felül szeretné írni? + A(z) '%1' nevű fájl már létezik. Felülírja? Unable to save the file %1: %2. - Nem lehet elmenteni a(z) %1 fájlt: %2. + A(z) %1 mentése sikertelen: %2. @@ -376,37 +535,38 @@ %1 letöltése... - + - + Download failed: %1. - Nem sikerült a letöltés: %1. + A letöltés sikertelen: %1. - + Documentation info file is corrupt! - Dokumentum információ sérült! + A dokumentáció információs fájlja sérült! Download failed: Downloaded file is corrupted. - Nem sikerült letölteni: A letöltött fájl sérült. + A letöltés sikertelen: a letöltött fájl sérült. Installing documentation %1... - %1 dokumentáció telepítése... + Dokumentáció telepítése %1... - + Error while installing documentation: %1 - Hiba történt a dokumentáció telepítése közben: %1 + Hiba a dokumentáció telepítésekor: +%1 Available Documentation: - Elérhető dokumentáció: + Elérhető dokumentációk: @@ -416,7 +576,7 @@ Cancel - Mégse + Mégsem @@ -437,20 +597,20 @@ MainWindow - - + + Index Index - - + + Contents Tartalom - - + + Bookmarks Könyvjelzők @@ -460,27 +620,25 @@ Keresés - - - + + + Qt Assistant - Qt Assistant + Qt Asszisztens - - Unfiltered - Szűrés nélküli + Szűrő kikapcsolása - + Page Set&up... - Lap Beállí&tás... + &Oldalbeállítás... Print Preview... - Nyomtatási előnézet... + Nyomtatási kép... @@ -490,12 +648,12 @@ New &Tab - Új &Lap + Új &fül &Close Tab - Lap &bezárása + Fül be&zárása @@ -503,14 +661,19 @@ &Kilépés - + + CTRL+Q + + + + &Copy selected Text - Kiválasztott szöveg &másolása + A kijelölés &másolása &Find in Text... - &Keresés szövegben... + Ke&resés a szövegben... @@ -520,12 +683,12 @@ Find &Next - &Következő keresés + Követke&ző keresése Find &Previous - &Előző keresés + &Előző keresése @@ -535,42 +698,42 @@ Zoom &in - &Nagyítás + Na&gyítás Zoom &out - &Kicsinyítés + Ki&csinyítés Normal &Size - Normál &méret + Normá&l méret Ctrl+0 - Ctrl + 0 + ALT+C - ALT + C + ALT+I - ALT + l + ALT+S - ALT + S + &Home - &Otthon + Kezdőla&p @@ -585,7 +748,7 @@ Sync with Table of Contents - Tartalomjegyzékkel való szinkronizálás + Szinkronizálás a tartalomjegyzékkel @@ -595,30 +758,34 @@ Next Page - Következő lap + Következő oldal Ctrl+Alt+Right - Ctrl+Alt+Right + Previous Page - Előző lap + Előző oldal Ctrl+Alt+Left - Ctrl+Alt+Left + + + + + Could not register file '%1': %2 + A(z) '%1' fájl regisztrálása sikertelen: %2 - Add Bookmark... - Könyvjelző hozzáadása... + Könyvjelző hozzáadása... - + About... Névjegy... @@ -628,24 +795,24 @@ Navigációs eszköztár - + Toolbars - Eszköztár + Eszköztárak - + Filter Toolbar - Eszköztár szűrő + Szűrő eszköztár Filtered by: - Szűrési feltétel: + Szűrés alapja: - + Address Toolbar - Eszköztár cím + Cím eszköztár @@ -653,27 +820,27 @@ Cím: - + Could not find the associated content item. - Nem sikerült az összekapcsolt tartalom elemet megtalálni. + A hozzárendelt tartalom nem található. - + About %1 - %1-ről + %1 névjegye - + Updating search index Keresési index frissítése - + Looking for Qt Documentation... Qt dokumentáció keresése... - + &Window &Ablak @@ -685,22 +852,22 @@ Ctrl+M - Ctrl + M + Zoom - Zoomolás + Nagyítás - + &File &Fájl - + &Edit - &Szerkesztés + S&zerkesztés @@ -710,51 +877,46 @@ &Go - &Gyerünk + &Előre ALT+Home - ALT+Home + - + &Bookmarks - &Könyvjelzők + Könyv&jelzők - + &Help - &Segítség + &Súgó - + ALT+O - ALT + 0 - - - - CTRL+D - CTRL+D + PreferencesDialog - - + + Add Documentation Dokumentáció hozzáadása - + Qt Compressed Help Files (*.qch) - Qt tömörített súgó fájlok (*.qch) + Qt tömörített súgófájlok (*.qch) - + The specified file is not a valid Qt Help File! - A meghatározott fájl egy érvénytelen Qt Súgó fájl! + A megadott fájl nem Qt súgófájl! @@ -762,19 +924,19 @@ A(z) %1 névtér már regisztrálva van! - + Remove Documentation Dokumentáció eltávolítása Some documents currently opened in Assistant reference the documentation you are attempting to remove. Removing the documentation will close those documents. - Néhány dokumentum jelenleg az Assistant hivatkozásban lett megnyitva, amely az a dokumentum, amit megpróbál eltávolítani. A dokumentum eltávolítása be fogja zárni azokat a dokumentumokat. + Az eltávolítani kívánt dokumentációból néhány dokumentum jelenleg meg van nyitva az Asszisztensben. A dokumentáció eltávolításával ezen dokumentumok automatikusan bezárulnak. Cancel - Mégse + Mégsem @@ -782,9 +944,9 @@ OK - + Use custom settings - Szokásos beállítások használata + Egyéni beállítások használata @@ -797,12 +959,12 @@ Fonts - Betűk + Betűtípus Font settings: - Betű beállítások: + Betűtípus beállítása: @@ -822,17 +984,17 @@ Filter: - Szűrők: + Szűrő: Attributes: - Attrubútumok: + Attribútumok: 1 - 1 + @@ -842,7 +1004,7 @@ Remove - Eltávolítás + Törlés @@ -867,37 +1029,38 @@ Current Page - Aktuális lap + Aktuális oldal Restore to default - Alapértelmezett beállítások visszaállítása + Alapértelmezés Homepage - Honlap + Kezdőlap On help start: - Súgó indításra: + A súgó indításakor: Show my home page - Honlapom megjelenítése + Mutassa a kezdőlapomat Show a blank page - Egy üres lap megjelenítése + Mutasson egy üres lapot Show my tabs from last session - A lapjaim megjelenításe a legutolsó szakaszból + Too long... + Mutassa az előzőleg megnyitott füleket @@ -908,131 +1071,111 @@ QObject - The specified collection file does not exist! - A meghatározott gyűjtemény fájl nem létezik! + A megadott gyűjtemény nem található! - Missing collection file! - Hiányzó gyűjtemény fájl! + A gyűjtemény fájl hiányzik! - Invalid URL! - Érvénytelen URL! + Az URL érvénytelen! - Missing URL! - Hiányzó URL! + Az URL hiányzik! - - - Unknown widget: %1 - Ismeretlen widget: %1 + Ismeretlen elem: %1 - - - Missing widget! - Hiányzó widget! + Az elem hiányzik! - - The specified Qt help file does not exist! - A meghatározott Qt súgó fájl nem létezik! + A megadott Qt súgófájl nem található! - - Missing help file! - Hiányzó súgó fájl! + A súgófájl hiányzik! - Missing filter argument! - Hiányzó szűrő argumentum! + A szűrőparaméter hiányzik! - Unknown option: %1 - Ismeretlen opció: %1 + Ismeretlen opció: %1 - - Qt Assistant - Qt Assistant + Qt Asszisztens - Could not register documentation file %1 Reason: %2 - Nem sikerült a dokumentációs fájl regisztrálása + A dokumentációs fájl regisztrálása sikertelen %1 -Ok: +Oka: %2 - Documentation successfully registered. - A dokumentáció regisztrálása sikeresen megtörtént. + A dokumentáció regisztrálása sikerült. - Could not unregister documentation file %1 Reason: %2 - Nem sikerült regisztrálni a dokumentációs fájlt + A dokumentációs fájl eltávolítása sikertelen %1 -Ok: +Oka: %2 - Documentation successfully unregistered. - Dokumentáció regisztrációjának megszűntetése sikeresen megtörtént. + A dokumentáció eltávolítása sikerült. - Cannot load sqlite database driver! - Nem lehet betölteni az sqlite adatbázis vezérlőt! + Az sqlite adatbázisdriver nem tölthető be! - The specified collection file could not be read! - A meghatározott gyűjtemény fájlt nem lehet olvasni! + A megadott gyűjtemény nem olvasható! + + + Bookmark + Könyvjelző RemoteControl - + Debugging Remote Control - Debuggolás Távoli Vezérlő + Hibakövetés távoli vezérlése Received Command: %1 %2 - Elfogadott parancs: %1 %2 + A kapott parancs: %1 %2 SearchWidget - + &Copy &Másolás @@ -1044,40 +1187,44 @@ Ok: Open Link in New Tab - Link megnyitása új lapon + Link megnyitása új fülön Select All - Az összes kiválasztása + Mindent kijelöl + + + Open Link + Link megnyitása TopicChooser - + Choose a topic for <b>%1</b>: - Topik választása a következőhöz: <b>%1</b>: + Téma választása ehhez: <b>%1</b>: Choose Topic - Topik választása + Téma választása &Topics - &Topikok + &Témák &Display - &Kijelzés + Meg&jelenítés &Close - &Bezárás + Be&zárás diff --git a/translations/designer_hu.ts b/translations/designer_hu.ts index c2960bc..bb32725 100644 --- a/translations/designer_hu.ts +++ b/translations/designer_hu.ts @@ -1,6 +1,6 @@ - + AbstractFindWidget @@ -16,33 +16,33 @@ &Case sensitive - &Kis ér nagybetű érzékeny + Kis/&nagybetű érzékeny Whole &words - Egész &szavakat + &Teljes szó <img src=":/trolltech/shared/images/wrap.png">&nbsp;Search wrapped - <img src=":/trolltech/shared/images/wrap.png">&nbsp;Keresés tördelve + <img src=":/trolltech/shared/images/wrap.png">&nbsp;A keresés befejeződött AddLinkDialog - + Insert Link Link beszúrása - + Title: Cím: - + URL: URL: @@ -52,7 +52,7 @@ Additional Fonts - További betűl + További betűtípusok @@ -60,37 +60,37 @@ '%1' is not a file. - %1 nem egy fájl. + '%1' nem egy fájl. The font file '%1' does not have read permissions. - '%1' betű fájlnak nincsen olvasási engedélye. + A(z) '%1' font fájlon nincs olvasási jog. The font file '%1' is already loaded. - '%1' font fájl már be van töltve. + A(z) '%1' betűtípus már be van töltve. The font file '%1' could not be loaded. - '%1' font fájlt nem sikerült betölteni. + A(z) '%1' betűtípus nem tölthető be. '%1' is not a valid font id. - '%1' nem egy érvényes betű azonosító. + '%1' nem egy érvényes betűtípus azonosító. There is no loaded font matching the id '%1'. - Nincsen '%1' azonosítóval megegyező betöltött betű. + Nincs '%1' azonosítójú betűtípus betöltve. The font '%1' (%2) could not be unloaded. - '%1' betűt (%2) nem lehetett kirakni. + A(z) '%1' (%2) betűtípus nem távolítható el. @@ -98,65 +98,65 @@ Fonts - Betűk + Betűtípusok Add font files - Betű fájlok hozzáadása + Betűtípus fájl hozzáadása Remove current font file - Aktuális betű fájl eltávolítása + A jelenlegi betűtípus fájl eltávolítása Remove all font files - Az összes betű fájl eltávolítása + Minden betűtłpus fájl eltávolítása Add Font Files - Betű fájlok hozzáadása + Betűtípus fájl hozzáadása Font files (*.ttf) - Betű fájlok (*.ttf) + Betűtípus fájlok (*.ttf) Error Adding Fonts - Hiba történt a betűk hozzáadásakor + Hiba a betűtípus fájlok hozzáadásakor Error Removing Fonts - Hiba történt a betűk eltávolításakor + Hiba a betűtípus fájlok eltávolításakor Remove Fonts - Betűk eltávolítása + Betűtípus fájl eltávolítása Would you like to remove all fonts? - El szeretné távolítani az összes betűt? + Minden betűtípust eltávolít? AppearanceOptionsWidget - + Form - + User Interface Mode - Felhasználói interfész mód + Felhasználói felület mód @@ -164,17 +164,17 @@ Unable to send request: Assistant is not responding. - Nem lehet elküldeni a kérést, az Assistant nem válaszol. + A kérés elküldése nem sikerült: az Assistant nem válaszol. The binary '%1' does not exist. - '%1' bináris nem létezik. + A(z) '%1' bináris nem létezik. Unable to launch assistant (%1). - Nem lehet elindítani a(z) %1 assistant. + Az Assistant (%1) elindítása sikertelen. @@ -182,12 +182,12 @@ No brush - Nincs kefe + Nincs ecset Solid - Szolid + Lágy @@ -227,12 +227,12 @@ Horizontal - Horizontális + Vízszintes Vertical - Vertikális + Függőleges @@ -242,17 +242,17 @@ Backward diagonal - Visszafele átlós + Fordított átlós Forward diagonal - Előre átlós + Átlós Crossing diagonal - Kereszt átlós + Keresztátlós @@ -267,7 +267,7 @@ [%1, %2] - [%1, %2] + @@ -276,66 +276,66 @@ Change signal - Jel változtatás + Jelzés megváltoztatása Change slot - Szlot változtatás + Slot megváltoztatása Change signal-slot connection - Jel szlot kapcsolat változtatása + Jelzés-slot kapcsolat megváltoztatása Change sender - Küldő változtatás + Küldő megváltoztatása Change receiver - Fogadó változtatás + Fogadó megváltoztatása Create button group - Gomb csoport létrehozása + Gombcsoport létrehozása Break button group - Gomb csoport törése + Gombcsoport széttörése Break button group '%1' - '%1' gomb csoport törése + A(z) '%1' gombcsoport széttörése Add buttons to group - Gomb hozzáadása a csoporthoz + Gomb(ok) hozzáadása a csoporthoz Add '%1' to '%2' Command description for adding buttons to a QButtonGroup - '%1' hozzáadása '%2'-höz + '%1' hozzáadása ehhez: '%2' Remove buttons from group - Gomb eltávolítása a csoportból + Gomb(ok) eltávolítása a csoportból Remove '%1' from '%2' Command description for removing buttons from a QButtonGroup - '%1' eltávolítása '%2'-ból + '%1' eltávolítása innen: '%2' @@ -345,7 +345,7 @@ Adjust connection - Kapcsolat beállítása + Kapcsolat módosítása @@ -355,18 +355,18 @@ Change source - Forrás változtatása + Forrás megváltoztatása Change target - Cél változtatása + Cél megváltoztatása Morph %1/'%2' into %3 MorphWidgetCommand description - %1/'%2' alakváltoztatása %3-re + %1/'%2' átalakítása erre: %3 @@ -381,12 +381,12 @@ Raise '%1' - '%1' növelése + '%1' előrehozása Lower '%1' - Alsó '%1' + '%1' hátrébbküldése @@ -396,49 +396,49 @@ Reparent '%1' - '%1' újra szülősítése + '%1' szülőjének megváltoztatása Promote to custom widget - Egyéni widget elősegítése + Demote from custom widget - Egyéni widget lefokozása + Lay out using grid - Tervraj rácsok használatával + Lay out vertically - Tervrajz vertikálisan + Lay out horizontally - Tervrajz horizontálisan + Break layout - Tervrajz törése + Simplify Grid Layout - Egyszerűsített rács tervrajz + Move Page - Lap mozgatása + @@ -446,18 +446,18 @@ Delete Page - Lap törlése + Page - Lap + page - lap + @@ -465,251 +465,249 @@ Insert Page - Lap beszúrása + Change Tab order - Tab sorrend változtatása + Create Menu Bar - Menü sáv + Delete Menu Bar - Menü sáv törlése + Create Status Bar - Státusz sáv létrehozása + Delete Status Bar - Státusz sáv törlése + Add Tool Bar - Eszköz sáv hozzáadása + Add Dock Window - Dokk ablak hozzáadása + Adjust Size of '%1' - '%1' méretének igazítása + Change Form Layout Item Geometry - Űrlap tervrajz elem geometriájának megváltoztatása + Change Layout Item Geometry - Tervrajz elem geometriájának megváltoztatása + Delete Subwindow - Alablak törlése + Insert Subwindow - Alablak beszúrása + subwindow - alablak + Subwindow - Alablak + Change Table Contents - Táblázat tartalom megváltoztatása + Change Tree Contents - Fa tartalom megváltoztatása + Add action - Tevékenység hozzáadása + Remove action - Tevékenység eltávolítása + Add menu - Menü hozzáadása + Remove menu - Menü eltávolítása + Create submenu - Almenü létrehozása + Delete Tool Bar - Eszköz sáv törlése + Change layout of '%1' from %2 to %3 - '%1' tervrajz megváltoztatása %2-ről %3-ra + - + Set action text - Tevékenység szöveg beállítása + Insert action - Tevékenység beszúrása + - + Move action - Tevékenység mozgatása + - + Change Title - Cím megváltoztatása + Insert Menu - Menü beszúrása + - + Changed '%1' of '%2' - '%2' '%1'-ének megváltoztatása + Changed '%1' of %n objects - - %n objektum %1-ének megváltoztatása + + - + Reset '%1' of '%2' - '%2' '%1'-ének megváltoztatása + Reset '%1' of %n objects - - %n objektum '%1'-ének újraindítása + + Add dynamic property '%1' to '%2' - '%2' '%1' dinamikus tulajdonságának hozzáadása + Add dynamic property '%1' to %n objects - - %n objektum' '%1' dinamikus tulajdonságának hozzáadása + + Remove dynamic property '%1' from '%2' - '%1' dinamikus tulajdonság eltávolítáas '%2'-ből + Remove dynamic property '%1' from %n objects - - '%1' dinamikus tulajdonság eltávolítása %n objektumból + + Change script - Szkript megváltoztatása + Change signals/slots - Jelek/Szlotok megváltoztatása + ConnectDialog - + Configure Connection - Kapcsolat konfigurálása + - - + GroupBox - CsoportDoboz + - - + Edit... - Szerkesztés... + - + Show signals and slots inherited from QWidget - QWidget-ből örökölt jelek és szlotok megjelenítése + ConnectionDelegate - + <object> - <objekttum> + <signal> - <jel> + <slot> - <szlot> + @@ -718,19 +716,19 @@ Standard (96 x 96) Embedded device standard screen resolution - Szabványos (96 x 96) + Greenphone (179 x 185) Embedded device screen resolution - Greenphone (179 x 185) + High (192 x 192) Embedded device high definition screen resolution - Magasság (192 x 192) + @@ -738,89 +736,88 @@ Qt Designer - Qt Designer + This file contains top level spacers.<br>They have <b>NOT</b> been saved into the form. - Ez a fájl felső szintű távtartókat tartalmaz.<br> Nem tartalmaznak <b>SEMMIT</b>, ami el lenne mentve az űrlapba. + Perhaps you forgot to create a layout? - Talán elfelejtette létrehozni a tervrajzot? + Invalid UI file: The root element <ui> is missing. - Érvénytelen UI fájl. A rendszergazda elem <ui> hiányzik. + An error has occurred while reading the UI file at line %1, column %2: %3 - Hiba történt az UI fájl olvasás közben %1 sorban, %2 oszlopban: %3 + This file cannot be read because it was created using %1. - A fájl nem olvasható, mert %1 használatával hozták létre. + This file was created using Designer from Qt-%1 and cannot be read. - A fájlt a(z) %1 Qt Designer-rel hozták létre és nem olvasható. + The converted file could not be read. - A konvertált fájlt nem sikerült olvasni. + This file was created using Designer from Qt-%1 and will be converted to a new form by Qt Designer. - A fájlt a(z) %1 Qt Designer-rel hozták létre és a Qt Designer egy új űrlapra fogja konvertálni. + The old form has not been touched, but you will have to save the form under a new name. - A régi űrlap nem lett érintve, de az űrlapot új néven kell majd elmentenie. + This file was created using Designer from Qt-%1 and could not be read: %2 - A fájl a(z) %1 Qt Designer-rel lett létrehozva és nem olvasható: -%2 + Please run it through <b>uic3&nbsp;-convert</b> to convert it to Qt-4's ui format. - Kérem futtassa a <br>uic3&nbsp;-convert</b> Qt 4-s ui formára konvertáláshoz. + This file cannot be read because the extra info extension failed to load. - Ez a fájl nem olvasható, mert az extra információ kiterjesztést nem sikerült betölteni. + Custom Widgets - Egyéni Widgetek + Promoted Widgets - Támogatott Widgetek + Unable to launch %1. - Nem lehet elindítani %1-t. + %1 timed out. - %1 időtúllépés. + @@ -828,12 +825,12 @@ %1 is not a valid enumeration value of '%2'. - %1 nem egy érvényes '%2' felsorolási érték. + '%1' could not be converted to an enumeration value of type '%2'. - '%1' nem konvertálható egy '%2' típusú felsorolási értékre. + @@ -841,7 +838,7 @@ '%1' could not be converted to a flag value of type '%2'. - '%1' nem konvertálható egy '%2' típusú jelző értékre. + @@ -850,40 +847,40 @@ '%1' is not a number. Reading a number for an embedded device profile - '%1' nem egy szám. + An invalid tag <%1> was encountered. - Egy érvénytelen címkét <%1> talált. + DeviceProfileDialog - + &Family - &Család + - + &Point Size - &Pont méret + - + Style - Stílus + - + Device DPI - Eszköz DPI + - + Name - Név + Név @@ -891,57 +888,57 @@ The image file '%1' could not be loaded. - Nem sikerült betölteni a(z) '%1' kép fájlt. + The skin directory '%1' does not contain a configuration file. - A(z) '%1' szkin könyvtár nem tartalmaz egy konfigurációs fájlt sem. + The skin configuration file '%1' could not be opened. - A(z) '%1' szkin konfigurációs fájlt nem sikerült megnyitni. + The skin configuration file '%1' could not be read: %2 - A(z) '%1' szkin konfigurációs fájlt nem sikerült olvasni: %2 + Syntax error: %1 - Szintakszis hiba: %1 + The skin "up" image file '%1' does not exist. - A(z) '%1' szkin 'fel' kép fájl nem létezik. + The skin "down" image file '%1' does not exist. - A(z) '%1' szkin 'le' kép fájl nem létezik. + The skin "closed" image file '%1' does not exist. - A(z) '%1' szkin 'zárt' kép fájl nem létezik. + The skin cursor image file '%1' does not exist. - A(z) '%1' szkin kurzor kép fájl nem létezik. + Syntax error in area definition: %1 - Szintakszis hiba a terület definícióban: %1 + Mismatch in number of areas, expected %1, got %2. - Rossz párosítás a területek számában, várt %1, kapot %2. + @@ -950,7 +947,7 @@ <html><table><tr><td><b>Font</b></td><td>%1, %2</td></tr><tr><td><b>Style</b></td><td>%3</td></tr><tr><td><b>Resolution</b></td><td>%4 x %5</td></tr></table></html> Format embedded device profile description - <html><table><tr><td><b>Betű</b></td><td>%1, %2</td></tr><tr><td><b>Stílus</b></td><td>%3</td></tr><tr><td><b>Felbontás</b></td><td>%4 x %5</td></tr></table></html> + @@ -959,13 +956,13 @@ Embedded Design Tab in preferences dialog - Tab a beállítások párbeszéd ablakban + Device Profiles EmbeddedOptionsControl group box" - BeágyazottOpciókVezérlő csoport doboz" + @@ -973,27 +970,27 @@ Font - Betű + Betűtípus &Writing system - Rendszer &írása + &Family - &Család + &Style - &Stílus + &Point size - &Pont méret + @@ -1001,37 +998,37 @@ PreferDefault - AlapértelmezettPreferálása + NoAntialias - NincsÁtlapolás + PreferAntialias - ÁtlapolásPreferálása + Antialiasing - Átlapolás + FormBuilder - + Invalid stretch value for '%1': '%2' Parsing layout stretch values - Érvénytelen érték kiterjesztés '%1'-re: '%2' + Invalid minimum size for '%1': '%2' Parsing grid layout minimum size values - Érvénytelen minimum méret '%1'-re: '%2' + @@ -1039,144 +1036,142 @@ %1 % - %1 % + Preview Zoom - Zoom előnézet + Default Zoom - Alapértelmezett zoom + Forms Tab in preferences dialog - Űrlapok + Default Grid - Alapértelmezett rács + FormLayoutRowDialog - + Add Form Layout Row - нелепица какая-то - Űrlap szerkezet sor hozzaadása + - + &Label text: - &Címke szöveg: + - + Field &type: - Mező &típus: + - + &Field name: - &Mező név: + - + &Buddy: - &Haver: + - + &Row: - &Sor: + - + Label &name: - Címke &név: + FormWindow - + Unexpected element <%1> - Váratlan elem <%1> + Error while pasting clipboard contents at line %1, column %2: %3 - Hiba történt a vágólap tartalom beillesztése közben a(z) %1 sorban, %2 oszlopban: %3 + FormWindowSettings - + Form Settings - Űrlap beállítások + - + Layout &Default - &Alapértelmezett elrendezés + - + &Spacing: - &Ritkítás: + - + &Margin: - &Margó: + - + &Layout Function - &Elrendezés függvény - + - + Ma&rgin: - Ma&rgó: + - + Spa&cing: - Rit&kítás: + - - &Author - &Szerző + + &Pixmap Function + - + &Include Hints - Célzások &beleértése - - - - &Pixmap Function - &Pixmap függvény + - + Grid - Rács + - + Embedded Design - Beágyazott terv + + + + + &Author + @@ -1184,7 +1179,7 @@ All Pixmaps ( - Az összes Pixmap ( + @@ -1193,7 +1188,7 @@ XX Icon Selected off Sample string to determinate the width for the first column of the list item property browser - XX ikon kiválasztásának kikapcsolása + @@ -1202,85 +1197,85 @@ Main Not currently used (main tool bar) - + File - Fájl + Fájl Edit - Szerkesztés + Szerkesztés Tools - Eszközök + Form - Űrlap + Qt Designer - Qt Designer + NewForm - + + Show this Dialog on Startup + + + + C&reate - &Létrehozás + Recent - Utóbbi + Előző - + + New Form + + + + &Close - &Bezárás + &Open... - &Megnyitás... + &Recent Forms - &Utóbbi űrlapok + Read error - Olvasási hiba - - - - New Form - Űj űrlap - - - - Show this Dialog on Startup - Párbeszédablak megjelenítése betöltéskor + - + A temporary form file could not be created in %1. - Egy átmeneti űrlap fájlt nem sikerült létrehozni %1-ben. + The temporary form file %1 could not be written. - A(z) %1 átmeneti űrlap fájlt nem sikerült írni. + @@ -1288,22 +1283,22 @@ Object - Objektum + Class - Osztály + separator - Elválasztó + <noname> - <noname> + @@ -1311,68 +1306,66 @@ Change Object Name - Objektum nevének megváltoztatása + Object Name - Objektum név + PluginDialog - + Plugin Information - Beépülő modul információ + - + 1 - 1 + PreferencesDialog - + Preferences - Beállítások + PreviewConfigurationWidget - + Form - Űrlap + - + Print/Preview Configuration - Nyomtatás/Előnézet konfiguráció + - + Style - Stílus + - + Style sheet - Stíluslap + - - - + ... - ... + ... - + Device skin - Eszköz szkin + @@ -1381,7 +1374,7 @@ Not used Usage of promoted widgets - Nincs használva + @@ -1390,7 +1383,7 @@ Page - Lap + @@ -1398,59 +1391,58 @@ Unexpected element <%1> - Váratlan elem <%1> + An error has occurred while reading the UI file at line %1, column %2: %3 - Hiba történt az UI fájl olvasása közben a(z) %1 sorban, %2 oszlopban: %3 + Invalid UI file: The root element <ui> is missing. - Érvénytelen UI fájl. A rendszergazda elem <ui> hiányzik. + - + The creation of a widget of the class '%1' failed. - A(z) '%1' osztály egy widget-ének létrehozása nem sikerült. + Attempt to add child that is not of class QWizardPage to QWizard. - Gyermek hozzáadásának megkísérelése QWizard-hoz, amely nem egy QWizardPage osztály. + Attempt to add a layout to a widget '%1' (%2) which already has a layout of non-box type %3. This indicates an inconsistency in the ui-file. - Egy elrendezés hozzáadásának megprónálás egy "%1' widgethez (%2), melynek már egy %3 típusú nem doboz elrendezése van. -Ez ellentmondást mutat az ui fájlban. + Empty widget item in %1 '%2'. - Üres widget elem %1-ben '%2'. + Flags property are not supported yet. - Jelző tulajdonság még nem támogatott. + While applying tab stops: The widget '%1' could not be found. - Tab stops alkalmazásakor: A(z) '%1' widget nem található. + Invalid QButtonGroup reference '%1' referenced by '%2'. - Érvénytelen '%1' QButtonGroup hivatkozásra hivatkozik a(z) '%2'. + This version of the uitools library is linked without script support. - Az uitools könyvtár ezen verziója szkript támogatás nélkül linkelt. + @@ -1458,12 +1450,12 @@ Ez ellentmondást mutat az ui fájlban. ActiveX control - ActiveX vezérlő + ActiveX control widget - ActiveX vezérlő widget + @@ -1471,22 +1463,22 @@ Ez ellentmondást mutat az ui fájlban. Set Control - Vezérlő beállítása + Reset Control - Vezérlő újraindítása + Licensed Control - Felhatalmazott vezérlő + The control requires a design-time license - A vezérlő egy tervezés idejű felhatalmazást igényel + @@ -1494,70 +1486,68 @@ Ez ellentmondást mutat az ui fájlban. %1 is not a promoted class. - %1 nem egy támogatott osztály. + The base class %1 is invalid. - A(z) %1 alap osztály érvénytelen. + The class %1 already exists. - A(z) %1 osztály már létezik. + Promoted Widgets - Támogatott Widget-ek + The class %1 cannot be removed - A(z) %1 osztályt nem lehet eltávolítani + The class %1 cannot be removed because it is still referenced. - A(z) %1 osztályt nem lehet eltávolítani, mert még mindig hivatkozott. + The class %1 cannot be renamed - A(z) %1 osztályt nem lehet átnevezni + The class %1 cannot be renamed to an empty name. - A(z) %1 osztályt nem lehet átnevezni egy üres névűre. + There is already a class named %1. - Már van egy %1 nevű osztály. + Cannot set an empty include file. - перевод близко к тексту - буквальный совсем глаз режет - Nem lehet beállítani egy üres bennefoglalt fájlt. + Exception at line %1: %2 - Kivétel a(z) %1 sorban: %2 + Unknown error - Ismeretlen hiba + Ismeretlen hiba An error occurred while running the script for %1: %2 Script: %3 - Hiba történt a szkript futtása közben %1-re: %2 -Szkript: %3 + @@ -1565,17 +1555,17 @@ Szkript: %3 %1 - warning - %1 -figyelmeztetés + Qt Designer - Qt Designer + This application cannot be used for the Console edition of Qt - Ezt alkalmazást nem lehet a Qt konzol szerkesztésére használni + @@ -1583,314 +1573,308 @@ Szkript: %3 Saved %1. - Mentve: %1. + - + + %1 already exists. +Do you want to replace it? + + + + Edit Widgets - Widget-ek szerkesztése + - + + &New... + + + + + &Open... + + + + + &Save + + + + + Save &As... + + + + + Save A&ll + + + + + Save As &Template... + + + + + + &Close + + + + + Save &Image... + + + + + &Print... + &Nyomtatás... + + + &Quit - &Bezárás + - + + View &Code... + + + + &Minimize - &Minimalizálás + Bring All to Front - Az összes előre hozása + Preferences... - Beállítások... + Beállítások... - - Clear &Menu - &Menü tisztítása + + Additional Fonts... + + + + + ALT+CTRL+S + - + CTRL+SHIFT+S - CTRL+SHIFT+S + CTRL+R - CTRL+R + CTRL+M - CTRL+M + Qt Designer &Help - Qt Designer &Súgó + Current Widget Help - Aktuális Widget Súgó + What's New in Qt Designer? - Mi az újdonság a Qt Designer-ben? + About Plugins - Beépülő modulokról + About Qt Designer - Qt Designer-ről + About Qt - Qt-ról + - + + Clear &Menu + + + + + &Recent Forms + + + + Open Form - Űrlap megnyitása + Designer UI files (*.%1);;All Files (*) - Designer UI fájlok (*.%1);;Az összes fájl (*) - - - - %1 already exists. -Do you want to replace it? - %1 már létezik. -Le szeretné cserélni? - - - - Additional Fonts... - További betűk... + - - &Recent Forms - &Utóbbi űrlapok + + + Save Form As + - + Designer - Designer + Feature not implemented yet! - A tulajdonság még nincs implementálva! + - + + Code generation failed + + + + Read error - Olvasási hiba + %1 Do you want to update the file location or generate a new form? - %1 -Szeretné frissíteni a fájl helyét vagy generálni egy új űrlapot? + &Update - &Frissítés + &New Form - &Új űrlap + Save Form? - Menti az űrlapot? + Could not open file - Nem sikerült megnyitni a fájlt + - + + The file %1 could not be opened. +Reason: %2 +Would you like to retry or select a different file? + + + + Select New File - Új fájl kiválasztása + Could not write file - Nem sikerült írni a fájlt - - - - &Close Preview - Előnézet &bezárása - - - - &New... - &Új... - - - - &Open... - &Megnyitás... - - - - &Save - &Mentés - - - - Save &As... - Mentés &másként... - - - - Save A&ll - Az ö&sszes mentése - - - - Save As &Template... - Mentés &sablonként... - - - - - &Close - &Bezárás - - - - Save &Image... - &Kép mentése... - - - - &Print... - &Nyomtatás... + - View &Code... - &Kód nézet... - - - - ALT+CTRL+S - ALT+CTRL+S - - - - - Save Form As - Mentés űrlapként - - - - Preview failed - Előnézet hiba - - - - Code generation failed - Kód generálási hiba - - - - The file %1 could not be opened. -Reason: %2 -Would you like to retry or select a different file? - Nem sikerült megnyitni a(z) %1 fájlt. -Ok: %2 -Meg szeretné újra próbálni vagy kiválasztani egy különböző fájlt? - - - It was not possible to write the entire file %1 to disk. Reason:%2 Would you like to retry? - Nem lehetett az egész %1 fájlt a lemezre írni. -Ok: %2 -Meg szeretné próbálni újra? + Assistant - Assistant + - + + &Close Preview + + + + The backup file %1 could not be written. - Nem sikerült írni az archivált %1 fájlt. + The backup directory %1 could not be created. - Nem sikerült létrehozni a(z) %1 archivált könyvtárat. + The temporary backup directory %1 could not be created. - Nem sikerült létrehozni az átmeneti archivált %1 könyvtárat. + - + + Preview failed + + + + Image files (*.%1) - Kép fájlok (*.%1) + Save Image - Kép mentése + Saved image %1. - Mentett kép: %1. + The file %1 could not be written. - Nem sikerült írni a(z) %1 fájlt. + Please close all forms to enable the loading of additional fonts. - Kérem zárja be az összes űrlapot további betűk betöltéséhez. + Printed %1. - Kinyomtatva: %1. + @@ -1899,7 +1883,7 @@ Meg szeretné próbálni újra? Appearance Tab in preferences dialog - Megjelenés + @@ -1907,17 +1891,17 @@ Meg szeretné próbálni újra? Docked Window - Dokkolt ablak + Multiple Top-Level Windows - Összes felső szintű ablakok + Toolwindow Font - Eszköz ablak betű + @@ -1925,22 +1909,22 @@ Meg szeretné próbálni újra? Reset control - Vezérlés újraindítása + Set control - Vezérlés beállítása + Control loaded - Vezérlés betöltve + A COM exception occurred when executing a meta call of type %1, index %2 of "%3". - Egy COM kivétel történt a(z) %1 típusú meta hívás végrehajtása közben, '%3' %2 indexe. + @@ -1948,17 +1932,17 @@ Meg szeretné próbálni újra? Script errors occurred: - Szkript hiba történt: + The preview failed to build. - Nem sikerült az előnézetet felépíteni. + Designer - Designer + @@ -1966,61 +1950,61 @@ Meg szeretné próbálni újra? %1 - %2[*] - %1 - %2[*] + Save Form? - Űrlap mentése? + Do you want to save the changes to this document before closing? - El szeretné menteni a változtatásokat ebbe a dokumentumba a bezárás előtt? + If you don't save, your changes will be lost. - Ha nem menti el, a változtatásai el fognak veszni. + QDesignerMenu - + Type Here - Gépelje be ide + Add Separator - Elválasztó hozzáadása + Insert separator - Elválasztó beszúrása + Remove separator - Elválasztó eltávolítása + Remove action '%1' - '%1' tevékenység eltávolítása + - + Add separator - Elválasztó hozzáadása + Insert action - Tevékenység beszúrása + @@ -2028,22 +2012,22 @@ Meg szeretné próbálni újra? Type Here - Gépelje be ide + Remove Menu '%1' - '%1' menü eltávolítása + Remove Menu Bar - Menü sáv eltávolítása + Menu - Menü + Menü @@ -2051,45 +2035,45 @@ Meg szeretné próbálni újra? An XML error was encountered when parsing the XML of the custom widget %1: %2 - Egy XML hiba történt az egyéni %1 widget XML-ének elemzése közben: %2 + A required attribute ('%1') is missing. - Egy szükséges attribútum ('%1') hiányzik. + An invalid property specification ('%1') was encountered. Supported types: %2 - Egy érvénytelen tulajdonság specifikációt ('%1') talált. Támogatott típusok: %2 + '%1' is not a valid string property specification. - '%1' nem egy érvényes sztring tulajdonság specifikáció. + The XML of the custom widget %1 does not contain any of the elements <widget> or <ui>. - Az egyéni %1 widget XML-je nem tartalmaz semmilyen elemet <widget> vagy <ui>. + The class attribute for the class %1 is missing. - Az osztály attribútum %1 osztályra hiányzik. + The class attribute for the class %1 does not match the class name %2. - Az osztály attribútum %1 osztályra nem egyezik meg a(z) %2 osztály nevével. + QDesignerPropertySheet - + Dynamic Properties - Dinamikus tulajdonságok + @@ -2097,32 +2081,31 @@ Meg szeretné próbálni újra? The layout type '%1' is not supported, defaulting to grid. - A(z) '%1' elrendezés típus nem támogatott, alapértelmezett rács. + The container extension of the widget '%1' (%2) returned a widget not managed by Designer '%3' (%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. - A(z) '%1' (%2) widget konténer kiterjesztése egy olyan widget-et adott vissza, amelyet a(z) '%3' (%4) Designer nem kezel, %5 lap lekéréskor. -Konténer lapokat XML-ben való specifikációjuk által kellene hozzáadni, az egyéni widget domXML() eljárása által. + Unexpected element <%1> Parsing clipboard contents - Váratlan elem <%1> + Error while pasting clipboard contents at line %1, column %2: %3 Parsing clipboard contents - Hiba történt a vágólap tartalmának beillesztése közben a(z) %1 sorban, %2 oszlopban: %3 + Error while pasting clipboard contents: The root element <ui> is missing. Parsing clipboard contents - Hiba történt a vágólap tartalmának beillesztése közben. A rendszergazda elem <ui> hiányzik. + @@ -2130,12 +2113,12 @@ Konténer lapokat XML-ben való specifikációjuk által kellene hozzáadni, az The template path %1 could not be created. - Nem sikerült létrehozni a(z) %1 sablon útvonalat. + An error has been encountered while parsing device profile XML: %1 - Hiba történt az eszköz profil %1 XML elemzése közben + @@ -2143,32 +2126,32 @@ Konténer lapokat XML-ben való specifikációjuk által kellene hozzáadni, az Property Editor - Tulajdonság szerkesztő + Action Editor - Tevékenység szerkesztő + Object Inspector - Objektum felügyelő + Resource Browser - Erőforrás böngésző + Signal/Slot Editor - Jel/Szlot szerkesztő + Widget Box - Widget doboz + @@ -2176,143 +2159,153 @@ Konténer lapokat XML-ben való specifikációjuk által kellene hozzáadni, az &File - &Fájl + &Fájl - + + Edit + Szerkesztés + + + F&orm - &Űrlap + Preview in - Előnézetben + - + + &View + &Nézet + + + + &Settings + + + + &Window - &Ablak + &Help - &Súgó + - - Edit - Szerkesztés + + Toolbars + Eszköztárak - - Toolbars - Eszközsávok + + Widget Box + - + Save Forms? - Űrlap mentése? + There are %n forms with unsaved changes. Do you want to review these changes before quitting? - - %n űrlapban vannak el nem mentett változtatások. Át szeretné tekintei ezeket a változtatásokat a kilépés előtt? + + - - &View - &Nézet - - - - &Settings - &Beállítások - - - - Widget Box - Widget doboz - - - + If you do not review your documents, all your changes will be lost. - Ha nem tekinti át újra a dokumentumokat, az összes változtatása el fog veszni. + Discard Changes - Változtatások eldobása + Review Changes - Változtatások áttekintése + Backup Information - Archiválási információ + The last session of Designer was not terminated correctly. Backup files were left behind. Do you want to load them? - A Designer utolsó szakasza nem megfelelően állt le. Archivált fájlok hagyott maga után. Be szeretné tölteni őket? + The file <b>%1</b> could not be opened. - A(z) <b>%1</b> fájlt nem sikerült megnyitni. + The file <b>%1</b> is not a valid Designer UI file. - A(z) <b>%1</b> fájl nem egy érvényes Designer UI fájl. + QFormBuilder - + An empty class name was passed on to %1 (object name: '%2'). Empty class name passed to widget factory method - Egy üres osztály név volt %1-ra (objektum név: '%2'). + QFormBuilder was unable to create a custom widget of the class '%1'; defaulting to base class '%2'. - QFormBuilder-nek nem sikerült létrehozni egy '%1' osztály egyéni widget-et, alapértelmezés a(z) '%2' alap osztályra. + QFormBuilder was unable to create a widget of the class '%1'. - QFormBuilder-nak nem sikerült létrehoznia egy '%1' osztály widget-et. + The layout type `%1' is not supported. - A(z) '%1' elrendezés terv nem támogatott. + The set-type property %1 could not be read. - Nem sikerült olvasni a(z) %1 beállított típusú tulajdonságot. + The enumeration-type property %1 could not be read. - A(z) %1 felsorolási típus tulajdonságot nem sikerült olvasni. + Reading properties of the type %1 is not supported yet. - '%1' típus tulajdonságok olvasása még nem támogatott. + The property %1 could not be written. The type %2 is not supported yet. - A(z) %1 tulajdonságot nem sikerült írni. A(z) %2 típus nem támogatott még. + + + + + The enumeration-value '%1' is invalid. The default value '%2' will be used instead. + + + + + The flag-value '%1' is invalid. Zero will be used instead. + @@ -2320,48 +2313,48 @@ Konténer lapokat XML-ben való specifikációjuk által kellene hozzáadni, az Previous Page - Előző lap + Next Page - Következő lap + Delete - Törlés + Törlés Before Current Page - Aktuális lap előtt + After Current Page - Aktuális lap után + Change Page Order... - Lap sorrend megváltoztatása... + Change Page Order - Lap sorrend megváltoztatása + Page %1 of %2 - %2 %1 lapja + Insert Page - Lap beszúrása + @@ -2369,12 +2362,12 @@ Konténer lapokat XML-ben való specifikációjuk által kellene hozzáadni, az Go to previous page of %1 '%2' (%3/%4). - Ugrás a(z) %1 '%2' (%3/%4) előző lapjára. + Go to next page of %1 '%2' (%3/%4). - Ugrás a(z) %1 '%2' (%3/%4) következő lapjára. + @@ -2382,28 +2375,28 @@ Konténer lapokat XML-ben való specifikációjuk által kellene hozzáadni, az Delete - Törlés + Törlés Before Current Page - Aktuális lap előtt + After Current Page - Aktuális lap után + Page %1 of %2 - %2 %1 lapja + Insert Page - Lap beszúrása + @@ -2411,74 +2404,74 @@ Konténer lapokat XML-ben való specifikációjuk által kellene hozzáadni, az Delete Page - Lap törlése + Before Current Page - Aktuális lap előtt + After Current Page - Aktuális lap után + Change Page Order... - Lap sorrend megváltoztatása... + Change Page Order - Lap sorrend megváltoztatása + Page %1 of %2 - %2 %1 lapja + Insert Page - Lap beszúrása + QtBoolEdit - + True - Igaz + Igaz False - Hamis + Hamis QtBoolPropertyManager - + True - Igaz + Igaz False - Hamis + Hamis QtCharEdit - + Clear Char - Karakter ürítése + @@ -2486,128 +2479,128 @@ Konténer lapokat XML-ben való specifikációjuk által kellene hozzáadni, az ... - ... + ... QtColorPropertyManager - + Red - Piros + Green - Zöld + Blue - Kék + Alpha - Alfa + QtCursorDatabase - + Arrow - Nyíl + Up Arrow - Felfele nyíl + Cross - Kereszt + Wait - Várakozás + IBeam - IBeam + Size Vertical - Vertikális méret + Size Horizontal - Horizontális méret + Size Backslash - Visszaper méret + Size Slash - Per méret + Size All - Az összes méret + Blank - Üres + Split Vertical - Vertikális feldarabolás + Split Horizontal - Horizontális feldarabolás + Pointing Hand - Mutató kéz + Forbidden - Tiltott + Open Hand - Nyitott kéz + Closed Hand - Zárt kéz + What's This - Mi ez + Busy - Elfoglalt + @@ -2615,12 +2608,12 @@ Konténer lapokat XML-ben való specifikációjuk által kellene hozzáadni, az ... - ... + ... Select Font - Betű kiválasztása + @@ -2628,45 +2621,45 @@ Konténer lapokat XML-ben való specifikációjuk által kellene hozzáadni, az Family - Család + Point Size - Pont méret + Bold - Félkövér + Félkövér Italic - Dőlt + Dőlt Underline - Aláhúzás + Aláhúzott Strikeout - Kitalálás + Kerning - Szóközökkel feltöltés + QtGradientDialog - + Edit Gradient - Meredekség szerkesztése + @@ -2674,316 +2667,304 @@ Konténer lapokat XML-ben való specifikációjuk által kellene hozzáadni, az Start X - X indítása + Start Y - Y indítása + Final X - Végső X + Final Y - Végső Y + Central X - X középpont + Central Y - Y középpont + Focal X - X gyújtópont + Focal Y - Y gyújtópont + Radius - Sugár + Angle - Szög + Linear - Lineáris + Radial - Sugárirányú + Conical - Kúp alakú + Pad - Lyuk + Repeat - Megismétlés + Reflect - Prizma + - + Form - Űrlap + - + Gradient Editor - Meredekség szerkesztő + - + This area shows a preview of the gradient being edited. It also allows you to edit parameters specific to the gradient's type such as start and final point, radius, etc. by drag & drop. - Ez a mező jeleníti meg a meredekség egy előzetének szerkesztését. Ez engedélyezi a meredekség típusához tartozó paraméter specifikus dolgok szerkesztését, mint a kezdő és végpont, sugár, stb. a fogd & vidd módszerrel. + - + 1 - 1 + - + 2 - 2 + - + 3 - 3 + - + 4 - 4 + - + 5 - 5 + - + Gradient Stops Editor - Meredekség leállítás szerkesztő + - + 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 & drop the handle to reposition it. Use right mouse button to popup context menu with extra actions. - Ez a mező engedélyezi a meredekség leállításának szerkesztését.Dupla kattintás a létező leállítás kezelőn duplikálja ezt. Dupla kattintás a létező leállítás kezelőn kívül létrehoz egy új leállítást. Fogd & vidd az újrapozíciónálo kezelőt. Használja a jobb egér gombot a felugró menü összefüggéshez extra tevékenységekkel. + - + Zoom - Zoom + Nagyítás - - + Reset Zoom - Újraindítás zoom + - + Position - Pozíció + - - - + Hue - Színárnyalat + - + H - H + - - + Saturation - Telítettség + - + S - S + - + Sat - Sat + - - + Value - Érték + Érték - + V - V + - + Val - Val + - - - + Alpha - Alfa + - + A - A + - + Type - Típus + Típus - + Spread - Kiterjedés + - + Color - Szín + Szín - + Current stop's color - Aktuális leállítás színe + - + Show HSV specification - HSV specifikáció megjelenítése + - + HSV - HSV + - + Show RGB specification - RGB specifikáció megjelenítése + - + RGB - RGB + - + Current stop's position - Aktuális leállítás pozíciója + - + % - % + - + Zoom In - Nagyítás + - + Zoom Out - Kicsinyítés + - + Toggle details extension - Részlet kiterjesztések kapcsolgatása + - + > - > + - + Linear Type - Lineáris típus + - - - - - - + ... - ... + ... - + Radial Type - Sugárirányú típus + - + Conical Type - Kúp alakú típus + - + Pad Spread - Lyuk kiterjedés + - + Repeat Spread - Ismétlési kiterjedés + - + Reflect Spread - Prizma kiterjedés + @@ -2991,37 +2972,37 @@ Konténer lapokat XML-ben való specifikációjuk által kellene hozzáadni, az New Stop - Új leállítás + Delete - Törlés + Törlés Flip All - Az összes feldobása + Select All - Az összes kiválasztása + Összes kijelölése Zoom In - Nagyítás + Zoom Out - Kicsinyítés + Reset Zoom - Zoom újraindítása + @@ -3029,62 +3010,63 @@ Konténer lapokat XML-ben való specifikációjuk által kellene hozzáadni, az Grad - Diplomás + Remove Gradient - Meredekség eltávolítása + Are you sure you want to remove the selected gradient? - El szeretné távolítani a kiválasztott meredekséget? + - + New... - Új... + - + Edit... - Szerkesztés... + - + Rename - Átnevezés + Átnevezés - + Remove - Eltávolítás + Törlés - + Gradient View - Meredekség nézet + QtGradientViewDialog - + + Select Gradient - Meredekség kiválasztása + QtKeySequenceEdit - + Clear Shortcut - Gyorsbillentyű kitisztítása + @@ -3092,17 +3074,17 @@ Konténer lapokat XML-ben való specifikációjuk által kellene hozzáadni, az %1, %2 - %1, %2 + Language - Nyelv + Country - Ország + @@ -3110,17 +3092,17 @@ Konténer lapokat XML-ben való specifikációjuk által kellene hozzáadni, az (%1, %2) - (%1, %2) + X - X + Y - Y + @@ -3128,30 +3110,30 @@ Konténer lapokat XML-ben való specifikációjuk által kellene hozzáadni, az (%1, %2) - (%1, %2) + X - X + Y - Y + QtPropertyBrowserUtils - + [%1, %2, %3] (%4) - [%1, %2, %3] (%4) + [%1, %2] - [%1, %2] + @@ -3159,27 +3141,27 @@ Konténer lapokat XML-ben való specifikációjuk által kellene hozzáadni, az [(%1, %2), %3 x %4] - [(%1, %2), %3 x %4] + X - X + Y - Y + Width - Szélesség + Height - Magasság + @@ -3187,27 +3169,27 @@ Konténer lapokat XML-ben való specifikációjuk által kellene hozzáadni, az [(%1, %2), %3 x %4] - [(%1, %2), %3 x %4] + X - X + Y - Y + Width - Szélesség + Height - Magasság + @@ -3216,71 +3198,70 @@ Konténer lapokat XML-ben való specifikációjuk által kellene hozzáadni, az %1 already exists. Do you want to replace it? - %1 már létezik. -Le szeretné cserélni? + The file does not appear to be a resource file; element '%1' was found where '%2' was expected. - A fájl nem egy erőforrás fájl, '%1' elem található, ahol '%2' a várt. + %1 [read-only] - %1 [csak olvasható] + %1 [missing] - %1 [hiányzik] + <no prefix> - <nincs előtag> + New Resource File - Új erőforrás fájl + Resource files (*.qrc) - Erőforrás fájlok (*.qrc) + Import Resource File - Erőforrás fájl importálása + newPrefix - újElőtag + <p><b>Warning:</b> The file</p><p>%1</p><p>is outside of the current resource file's parent directory.</p> - <p><b>Figyelmeztetés:</b> A(z)</p><p>%1</p><p>fájl az aktuális erőforrás fájl szülő könyvtárán kívül helyezkedik el.</p> + <p>To resolve the issue, press:</p><table><tr><th align="left">Copy</th><td>to copy the file to the resource file's parent directory.</td></tr><tr><th align="left">Copy As...</th><td>to copy the file into a subdirectory of the resource file's parent directory.</td></tr><tr><th align="left">Keep</th><td>to use its current location.</td></tr></table> - <p>A hiba megoldásához, nyomja le a következőt:</p><table><tr><th align="left">Másolás</th><td>a fájl erőforrás fájljának szülőkönyvtárába másoláshoz.</td></tr><tr><th align="left">Másolás másként...</th><td>a fájl erőforrás fájljának szülőkönyvtárának egy alkönyvtárába másoláshoz.</td></tr><tr><th align="left">Megtartás</th><td>az aktuális helyének használatához. </td></tr></table> + Add Files - Fájlok hozzáadása + Incorrect Path - Helytelen útvonal + @@ -3288,50 +3269,49 @@ Le szeretné cserélni? Copy - Másolás + Másolás Copy As... - Másolás, mint... + Keep - Megtartás + Meghagy Skip - Kihagyás + Clone Prefix - Előtag klónozása + Enter the suffix which you want to add to the names of the cloned files. This could for example be a language extension like "_de". - Gépelje be az utótagot, melyet hozzá akar adni a klónozott fájl nevekhez. -Ez például egy nyelv kiterjesztés lenne, úgy mint "_de". + Copy As - Másolás, mint + <p>The selected file:</p><p>%1</p><p>is outside of the current resource file's directory:</p><p>%2</p><p>Please select another path within this directory.<p> - <p>A kiválaszott fájl:</p><p>%1</p><p>az aktuális erőforrás fájl könytárán kívül helyezkedik el:</p><p>%2</p><p>Kérem válasszon másik útvonalat ezen a könyvtáron belül.<p> + Could not overwrite %1. - Nem sikerült felülírni %1. + @@ -3339,163 +3319,157 @@ Ez például egy nyelv kiterjesztés lenne, úgy mint "_de". - Nem sikerült másolni -%1 -ide -%2 + A parse error occurred at line %1, column %2 of %3: %4 - Egy elemzési hiba történt %3 %1 sorában, %2 oszlopában: -%4 + Save Resource File - Erőforrás fájl mentése + Could not write %1: %2 - Nem sikerült írni %1: %2 + Edit Resources - Erőforrások szerkesztése + New... - Új... + Open... - Megnyitás... + Open Resource File - Erőforrás fájl megnyitása + Remove - Eltávolítás + Törlés Move Up - Mozgatás felfelé + Move Down - Mozgatás lefelé + Add Prefix - Előtag hozzáadása + Add Files... - Fájlok hozzáadása... + Change Prefix - Előtag megváltoztatása + Change Language - Nyelv megváltoztatása + Change Alias - Álnév megváltoztatása + Clone Prefix... - Előtag klónozása... + Prefix / Path - Előtag / Útvonal + Language / Alias - Nyelv / Álnév + <html><p><b>Warning:</b> There have been problems while reloading the resources:</p><pre>%1</pre></html> - <html><p><b>Figyelmeztetés:</b> Hibák történtek az erőforrások újra töltése közben:</p><pre>%1</pre></html> + Resource Warning - Erőforrás figyelmeztetés + - + Dialog - Párbeszéd ablak + - + New File - Új fájl + - - + N - N + - + Remove File - Fájl eltávolítása + - - + R - R + - + I - I + - + New Resource - Új erőforrás + - + A - A + - + Remove Resource or File - Erőforrás vagy fájl eltávolítása + @@ -3504,31 +3478,30 @@ ide Size: %1 x %2 %3 - Méret: %1 x %2 -%3 + Edit Resources... - Erőforrások szerkesztése... + Reload - Újratöltés + Újratöltés Copy Path - Útvonal másolása + QtResourceViewDialog - + Select Resource - Erőforrás kiválasztása + @@ -3536,17 +3509,17 @@ ide %1 x %2 - %1 x %2 + Width - Szélesség + Height - Magasság + @@ -3555,32 +3528,32 @@ ide <Invalid> - <Érvénytelen> + [%1, %2, %3, %4] - [%1, %2, %3, %4] + Horizontal Policy - Horizontális irányvonal + Vertical Policy - Vertikális irányelv + Horizontal Stretch - Horizontális terjedelem + Vertical Stretch - Vertikális terjedelem + @@ -3588,17 +3561,17 @@ ide %1 x %2 - %1 x %2 + Width - Szélesség + Height - Magasság + @@ -3606,107 +3579,107 @@ ide Custom Toolbar - Egyéni eszköz sáv + < S E P A R A T O R > - < E L V Á L A S Z T Ó > + - + Customize Toolbars - Eszköz sávok testreszabása + - + 1 - 1 + - + Actions - Tevékenységek + - + Toolbars - Eszköz sávok + Eszköztárak - + Add new toolbar - Új eszköz sáv hozzáadása + - + New - Új + Új - + Remove selected toolbar - Kiválaszott eszköz sáv eltávolítás + - + Remove - Eltávolítás + Törlés - + Rename toolbar - Eszköz sáv átnevezése + - + Rename - Átnevezés + Átnevezés - + Move action up - Tevékenység mozgatása felfelé + - + Up - Fel + - + Remove action from toolbar - Tevékenység eltávolítása az eszköz sávról + - + <- - <- + - + Add action to toolbar - Tevékenység hozzáadása az eszközsávhoz + - + -> - -> + - + Move action down - Tevékenység mozgatása felfele + - + Down - Le + - + Current Toolbar Actions - Aktuális eszköz sáv tevékenységek + @@ -3714,12 +3687,12 @@ ide Property - Tulajdonság + Value - Érték + Érték @@ -3727,64 +3700,63 @@ ide Add path... - Útvonal hozzáadása... + Template Exists - A sablon létezik + A template with the name %1 already exists. Do you want overwrite the template? - Egy %1 nevű sablon már létezik. -Felül szeretné írni a sablont? + Overwrite Template - Sablom felülírása + Open Error - Megnyitási hiba + There was an error opening template %1 for writing. Reason: %2 - Hiba történt a(z) %1 sablon írásra megnyitása közben. Ok: %2 + Write Error - Írása hiba + There was an error writing the template %1 to disk. Reason: %2 - Hiba történt a(z) %1 sablon lemezre írása közben. Ok: %2 + Pick a directory to save templates in - Egy könyvtár gondos kiválasztása, melybe a könytárak lesznek elmentve + - + Save Form As Template - Az űrlap sablonként mentése + - - &Category: - &Kategória: + + &Name: + - - &Name: - &Név: + + &Category: + @@ -3793,30 +3765,30 @@ Felül szeretné írni a sablont? An error occurred while running the scripts for "%1": - Hiba történt a szkriptek futtatása közben '%1'-re: + SelectSignalDialog - + Go to slot - Szlotra ugrás + - + Select signal - Jel kiválasztása + - + signal - jel + - + class - osztály + @@ -3824,45 +3796,40 @@ Felül szeretné írni a sablont? SENDER(%1), SIGNAL(%2), RECEIVER(%3), SLOT(%4) - KÜLDŐ(%1), JEL(%2), FOGADÓ(%3), SZLOT(%4) + SignalSlotDialogClass - + Signals and slots - Jelek és szlotok + - + Slots - Szlotok + - - + Add - Hozzáadás + Hozzáadás - - - - + ... - ... + ... - - + Delete - Törlés + Törlés - + Signals - Jelek + @@ -3870,12 +3837,12 @@ Felül szeretné írni a sablont? Horizontal Spacer '%1', %2 x %3 - Horizontális távtartók '%1', %2 x %3 + Vertical Spacer '%1', %2 x %3 - Vertikális távtartók '%1', %2 x %3 + @@ -3884,8 +3851,7 @@ Felül szeretné írni a sablont? Template Paths Tab in preferences dialog - Слово "пути" опустил, т.к. с другими вкладками не перепутать, а длинная вкладка не смотрится. - Sablon útvonalak + @@ -3893,55 +3859,55 @@ Felül szeretné írni a sablont? Configure Toolbars... - Eszköz sávok konfigurálása... + Window - Ablak + Ablak Help - Súgó + Segítség Style - Stílus + Dock views - Dokk nézetek + Toolbars - Eszköz sávok + Eszköztárak VersionDialog - + <h3>%1</h3><br/><br/>Version %2 - <h3>%1</h3><br/><br/>Verzió %2 + Qt Designer - Qt Designer + <br/>Qt Designer is a graphical user interface designer for Qt applications.<br/> - <br/>Qt Designer egy grafikus felhasználói felület tervező Qt alkalmazásokhoz.<br/> + %1<br/>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). - %1<br/>Szerzői jog (C) 2010 Nokia vállalat és/vagy leányvállalata(i). + @@ -3949,7 +3915,7 @@ Felül szeretné írni a sablont? The file contains a custom widget '%1' whose base class (%2) differs from the current entry in the widget database (%3). The widget database is left unchanged. - A fájl egy egyéni '%1' widget-t tartalmaz, aminek az alap osztálya (%2) különbözik az aktuális beviteltől a widget adatbázisban (%3). A widget adatbázis változatlanul lett hagyva. + @@ -3957,120 +3923,120 @@ Felül szeretné írni a sablont? New... - Új... + Edit... - Szerkesztés... + Go to slot... - Ugrás a szlotra... + Copy - Másolás + Másolás Cut - Kivágás + Kivágás Paste - Beillesztés + Beillesztés Select all - Az összes kiválasztása + Delete - Törlés + Törlés Actions - Tevékenységek + Configure Action Editor - Tevékenység szerkesztő konfigurálása + Icon View - Ikon nézet + Detailed View - Részletezett nézet + New action - Új tevékenység + Edit action - Tevékenység szerkesztése + Remove action '%1' - '%1' tevékenység eltávolítása + Remove actions - Tevékenységek eltávolítása + Used In - Használva ebben + qdesigner_internal::ActionModel - + Name - Név + Név Used - Használt + Text - Szöveg + Shortcut - Rövidebb út + Checkable - Leellenőrizhető + ToolTip - Eszköz tipp + @@ -4078,27 +4044,27 @@ Felül szeretné írni a sablont? The element '%1' is missing the required attribute '%2'. - A(z) '%1' elem hiányzik, a szükséges attribútum '%2'. + Empty brush name encountered. - Üres kefe nevet talált. + An unexpected element '%1' was encountered. - Egy '%1' váratlan elemet talált. + An error occurred when reading the brush definition file '%1' at line line %2, column %3: %4 - Hiba történt a(z) '%1' ecset definíciós fájl olvasása közben %2 sorban, %3 oszlopban: %4 + An error occurred when reading the resource file '%1' at line %2, column %3: %4 - Hiba történt a(z) '%1' erőforrás fájl olvasása közben, %2 sorban, %3 oszlopban: %4 + @@ -4106,31 +4072,31 @@ Felül szeretné írni a sablont? Add buddy - Haver hozzáadása + Remove buddies - Haverok eltávolítása + Remove %n buddies - - %n haverok eltávolítása + + Add %n buddies - - %n haver hozzáadása + + Set automatically - Automatikus beállítás + @@ -4138,7 +4104,7 @@ Felül szeretné írni a sablont? Edit Buddies - Haverok szerkesztése + @@ -4146,7 +4112,7 @@ Felül szeretné írni a sablont? Edit Buddies - Haverok szerkesztése + @@ -4154,12 +4120,12 @@ Felül szeretné írni a sablont? Select members - Tagok kiválasztása + Break - Törés + @@ -4167,32 +4133,32 @@ Felül szeretné írni a sablont? Assign to button group - Gomb csoporthoz rendelés + Button group - Gomb csoport + New button group - Új gomb csoport + Change text... - Szöveg megváltoztatása... + None - Semmi + Nincs Button group '%1' - '%1' gomb csoport + @@ -4205,22 +4171,22 @@ Felül szeretné írni a sablont? Copy All - Az összes másolása + Mindent másol &Find in Text... - &Keresés szövegben... + &Keresés a szövegben... A temporary form file could not be created in %1. - Egy átmeneti űrlap fájlt nem sikerült létrehozni %1-ben. + Az ideiglenes űrlap fájl nem hozható létre a(z) %1 helyen. The temporary form file %1 could not be written. - A(z) %1 átmeneti űrlap fájlt nem sikerült írni. + A(z) %1 ideiglenes űrlap fájl nem írható. @@ -4235,17 +4201,17 @@ Felül szeretné írni a sablont? Header Files (*.%1) - Fejállományok (*.%1) + Fejléc fájlok (*.%1) The file %1 could not be opened: %2 - A(z) %1 fájlt nem sikerült megnyitni: %2 + A(z) %1 fájl nem nyitható meg: %2 The file %1 could not be written: %2 - A(z) %1 fájlt nem sikerült írni: %2 + A(z) %1 fájl nem írható: %2 @@ -4258,7 +4224,7 @@ Felül szeretné írni a sablont? Text Color - Szöveg szín + Szövegszín @@ -4266,12 +4232,13 @@ Felül szeretné írni a sablont? Edit Items... - Elemek szerkesztése... + Elem szerkesztése... Change Combobox Contents - Combobox tartalmának megváltoztatása + CHECKIT: too long... + Legördülő doboz tartalmának megváltoztatása @@ -4279,7 +4246,7 @@ Felül szeretné írni a sablont? Change description... - Leírás megváltoztatása... + @@ -4287,17 +4254,17 @@ Felül szeretné írni a sablont? Select All - Az összes kiválasztása + Összes kijelölése Deselect All - Az összes kijelölés eltűntetése + Delete - Törlés + Törlés @@ -4305,52 +4272,52 @@ Felül szeretné írni a sablont? Sender - Küldő + Signal - Jel + Receiver - Fogadó + Slot - Szlot + <sender> - <küldő> + <signal> - <jel> + <receiver> - <fogadó> + <slot> - <szlot> + The connection already exists!<br>%1 - A kapcsolat már létezik!<br>%1 + Signal and Slot Editor - Jel és Szlot szerkesztő + @@ -4358,42 +4325,42 @@ Felül szeretné írni a sablont? Delete - Törlés + Törlés Insert - Beszúrás + Beszúrás Insert Page Before Current Page - Lap beszúrása az aktuális lap elé + Insert Page After Current Page - Lap beszúrása az aktuális lap után + Add Subwindow - Alablak hozzáadása + Subwindow - Al ablak + Page - Lap + Page %1 of %2 - %2 %1 lapja + @@ -4402,18 +4369,18 @@ Felül szeretné írni a sablont? System (%1 x %2) System resolution - Rendszer (%1 x %2) + User defined - Felhasználó által definiált + x DPI X/Y separator - x + @@ -4422,123 +4389,123 @@ Felül szeretné írni a sablont? AlignLeft - IgazításBalra + AlignHCenter - IgazításHKözépre + AlignRight - IgazításJobbra + AlignJustify - IgazításFeloldása + AlignTop - IgazításTetejére + AlignVCenter - IgazításVKözépre + AlignBottom - IgazításAlulra + %1, %2 - %1, %2 + Customized (%n roles) - - Testreszabva (%n szabály) + + Inherited - Örökölt + Horizontal - Horizontális + Vertical - Vertikális + Normal Off - Normál ki + Normal On - Normál be + Disabled Off - Tiltás ki + Disabled On - Tiltás be + Active Off - Aktív ki + Active On - Aktív be + Selected Off - Kiválasztás ki + Selected On - Kiválasztás be + translatable - fordítható + disambiguation - Nem félreérthető + comment - megjegyzés + @@ -4546,106 +4513,106 @@ Felül szeretné írni a sablont? Device Profiles (*.%1) - Eszköz profilok (*.%1) + Default - Alapértelmezett + Alapértelmezett Save Profile - Profil mentése + Save Profile - Error - Profil mentése - Hiba + Unable to open the file '%1' for writing: %2 - Nem lehet megnyitni a(z) '%1' fájlt írásra: %2 + Open profile - Profil megnyitása + Open Profile - Error - Profil megnyitása - Hiba + Unable to open the file '%1' for reading: %2 - Nem lehet megnyitni a(z) '%1' fájlt olvasásra: %2 + '%1' is not a valid profile: %2 - '%1' nem egy érvényes profil: %2 + qdesigner_internal::Dialog - + Dialog - Párbeszéd ablak + - + StringList - Sztring lista + - + New String - Új Sztring + - + &New - &Új + - + Delete String - Sztring törlése + - + &Delete - &Törlés + - + &Value: - &Érték: + - + Move String Up - Sztring felfelé mozgatása + - + Up - Fel + - + Move String Down - Sztring lefelé mozgatása + - + Down - Le + @@ -4653,52 +4620,52 @@ Felül szeretné írni a sablont? None - Semmi + Nincs Add a profile - Egy profil hozzáadása + Edit the selected profile - A kiválasztott profil szerkesztése + Delete the selected profile - A kiválasztott profil törlése + Add Profile - Profil hozzáadása + New profile - Új profil + Edit Profile - Profil szerkesztése + Delete Profile - Profil törlése + Would you like to delete the profile '%1'? - Törölni szeretné a(z) '%1' profilet? + Default - Alapértelmezett + Alapértelmezett @@ -4706,7 +4673,7 @@ Felül szeretné írni a sablont? <Filter> - <Szűrő> + @@ -4714,12 +4681,12 @@ Felül szeretné írni a sablont? Resource File Changed - Erőforrás fájl megváltoztatva + The file "%1" has changed outside Designer. Do you want to reload it? - A(z) '%1' fájl megváltoztatták a Designer-en kívül. Újra szeretné tölteni? + @@ -4727,101 +4694,105 @@ Felül szeretné írni a sablont? Add form layout row... - Űrlap elrendezési sor hozzáadása... + qdesigner_internal::FormWindow - + Edit contents - Tartalom szerkesztése + F2 - F2 + - + Insert widget '%1' - '%1' widget beszúrása + - + Resize - Átméretezés + - - + Key Move - Kulcs mozgatás + + + + + Key Resize + - + Paste %n action(s) - - %n tevékenység beillesztése + + Paste %n widget(s) - - %n widget beillesztése + + Paste (%1 widgets, %2 actions) - Beillesztés (%1 widget-ek, %2 tevékenységek) + Cannot paste widgets. Designer could not find a container without a layout to paste into. - Nem lehet beilleszteni a widget-eket. A Designer nem talált egy tárolót sem elrendezés nélküli beillesztéshez. + Break the layout of the container you want to paste into, select this container and then paste again. - A tároló elrendezésének megtörése, ahová be akarja illeszteni, válassza ki ezt a tárolót és aztán illessze e újra. + Paste error - Beillesztési hiba + - + Raise widgets - Widget-ek növelése + Lower widgets - Alsó widget-ek + Select Ancestor - Ős kiválasztása + - + Lay out - Elrendezés + - + Drop widget - Widget ejtése + A QMainWindow-based form does not contain a central widget. - Egy QMainWindow alapú űrlap nem tartalmaz egy központi widget-et. + @@ -4829,213 +4800,213 @@ Felül szeretné írni a sablont? Delete '%1' - '%1' törlése + Delete - Törlés + Törlés qdesigner_internal::FormWindowManager - + Cu&t - &Kivágás + Cuts the selected widgets and puts them on the clipboard - A kiválaszott widget-ek kivágása és vágólapra helyezése + &Copy - &Másolás + Copies the selected widgets to the clipboard - A kiválasztott widget-ek vágólapra másolása + &Paste - &Beillesztés + Pastes the clipboard's contents - A vágólap tartalmának beillesztése + &Delete - &Törlés + Deletes the selected widgets - A kiválasztott widget-ek törlése + Select &All - Az &összes kiválasztása + Selects all widgets - Az összes widget kiválasztása + Bring to &Front - &Előre hozás + Raises the selected widgets - A kiválaszott widget-ek növelése + Send to &Back - &Visszaküldés + Lowers the selected widgets - Alsó kiválasztott widget-ek + Adjust &Size - &Méret igazítása + Adjusts the size of the selected widget - A kiválasztott widget méretének igazítása + Lay Out &Horizontally - Elrendezés &Horizontálisan + Lays out the selected widgets horizontally - A kiválaszott widget-ek horizontális elrendezése + Lay Out &Vertically - Elrendezés &vertikálisan + Lays out the selected widgets vertically - A kiválaszott widget-ek vertikális elrendezése + Lay Out in a &Form Layout - Elrendezés egy &Űrlap elrendezésben + Lays out the selected widgets in a form layout - A kiválaszott widget-ek elrendezése egy űrlap elrendezésben + Lay Out in a &Grid - Elrendezés egy &rácsban + Lays out the selected widgets in a grid - A kiválasztott widget-ek elrendezése egy rácsban + Lay Out Horizontally in S&plitter - Elrendezés Horizontálisan a &csúszkában + Lays out the selected widgets horizontally in a splitter - A kiválasztott widget-ek horizontális elrendezése egy csúszkában + Lay Out Vertically in Sp&litter - Elrendezés vertikálisan egy &csúszkában + Lays out the selected widgets vertically in a splitter - A kiválaszott widget-ek vertikális elrendezése egy csúszkában + &Break Layout - Elrendezés &törése + Breaks the selected layout - A kiválaszott elrendezés törése + Si&mplify Grid Layout - Egy&szerűsített rács elrendezés + Removes empty columns and rows - Üres oszlopok és sorok eltávolítása + &Preview... - &Előnézet... + Preview current form - Aktuális űrlap előnézet + Form &Settings... - Űrlap &beállítások... + Break Layout - Elrendezés törése + Adjust Size - Méret igazítása + Could not create form preview Title of warning message box - Nem sikerült létrehozni az űrlap előnézetet + Form Settings - %1 - Űrlap beállítások - %1 + @@ -5043,51 +5014,50 @@ Felül szeretné írni a sablont? None - Semmi + Nincs Device Profile: %1 - Eszköz profil: %1 + qdesigner_internal::GridPanel - + Form - Űrlap + - + Grid - Rács + - + Visible - Látható + - + Grid &X - Rács &X + - - + Snap - Bepattintás + - + Reset - Újraindítás + - + Grid &Y - Rács &Y + @@ -5095,7 +5065,7 @@ Felül szeretné írni a sablont? Change title... - Cím változtatása... + @@ -5103,7 +5073,7 @@ Felül szeretné írni a sablont? Insert HTML entity - HTML entitás beszúrása + @@ -5111,92 +5081,92 @@ Felül szeretné írni a sablont? The pixmap file '%1' cannot be read. - A(z) '%1' pixmap fájlt nem lehet olvasni. + The file '%1' does not appear to be a valid pixmap file: %2 - A(z) '%1' fájlt nem egy érvényes pixmap fájl: %2 + The file '%1' could not be read: %2 - A(z) '%1' fájlt nem sikerült olvasni: %2 + Choose a Pixmap - Egy pixmap kiválasztása + Pixmap Read Error - Pixmap olvasási hiba + ... - ... + ... Normal Off - Normál ki + Normal On - Normál be + Disabled Off - Tiltás ki + Disabled On - Tiltás be + Active Off - Aktív ki + Active On - Aktív be + Selected Off - Kiválaszott ki + Selected On - Kiválaszott be + Choose Resource... - Erőforrás kiválasztása... + Choose File... - Fájl kiválasztása... + Reset - Újraindítás + Reset All - Az összes újraindítása + @@ -5204,58 +5174,58 @@ Felül szeretné írni a sablont? Properties &<< - Tulajdonságok &<< + - + Properties &>> - Tulajdonságok &>> + - + Items List - Elem lista + - + New Item - Új elem + - + &New - &Új + - + Delete Item - Elem törlése + - + &Delete - &Törlés + - + Move Item Up - Elem mozgatása felfelé + - + U - U + - + Move Item Down - Elem mozgatása lefelé + - + D - D + @@ -5263,12 +5233,12 @@ Felül szeretné írni a sablont? Change rich text... - Gazdag szöveg választása... + Change plain text... - Egyszerű szöveg választása... + @@ -5276,7 +5246,7 @@ Felül szeretné írni a sablont? Choose Resource - Erőforrás kiválasztása + @@ -5284,7 +5254,7 @@ Felül szeretné írni a sablont? Change text... - Szöveg kiválasztása... + @@ -5292,17 +5262,17 @@ Felül szeretné írni a sablont? New Item - Új elem + Edit List Widget - Widget szerkesztési lista + Edit Combobox - Combobox szerkesztése + @@ -5310,12 +5280,12 @@ Felül szeretné írni a sablont? Edit Items... - Elemek szerkesztése... + Change List Contents - Tartalom változtatási lista + @@ -5323,22 +5293,22 @@ Felül szeretné írni a sablont? Next Subwindow - Új alablak + Previous Subwindow - Előző alablak + Tile - Cserép + Mozaikszerű Cascade - Kaszkád + Lépcsőzetes @@ -5346,7 +5316,7 @@ Felül szeretné írni a sablont? Remove - Eltávolítás + Törlés @@ -5354,51 +5324,50 @@ Felül szeretné írni a sablont? Morph into - Morph into + qdesigner_internal::NewActionDialog - + New Action... - Új tevékenység... + - + &Text: - &Szöveg: + - + Object &name: - Objektum &név: + - + &Icon: - &Ikon: + - + Shortcut: - Rövidebb út: + - + Checkable: - Ellenőrizhető: + - + ToolTip: - Eszköz tipp: + - - + ... - ... + ... @@ -5406,41 +5375,39 @@ Felül szeretné írni a sablont? Set Property Name - Tulajdonság nevének beállítása + The current object already has a property named '%1'. Please select another, unique one. - Az aktuális objektumnak már van egy '%1' nevű tulajdonsága. -Kérem válasszon másikat, egy egyedülállót. + The '_q_' prefix is reserved for the Qt library. Please select another name. - Az '_q_' előtag foglalt a Qt könyvtárhoz. -Kérem válasszon másikat. + - + Create Dynamic Property - Dinamikus tulajdonság létrehozása + - + Property Name - Tulajdonság Neve + - + horizontalSpacer - horizontálisTávtartó + - + Property Type - Tulajdonság Típusa + @@ -5448,83 +5415,83 @@ Kérem válasszon másikat. Default size - Alapértelmezett méret + QVGA portrait (240x320) - QVGA portré (240x320) + QVGA landscape (320x240) - QVGA tájkép (320x240) + VGA portrait (480x640) - VGA portré (480x640) + VGA landscape (640x480) - VGA tájkép: (640x480) + Widgets New Form Dialog Categories - Widget-ek + Custom Widgets - Egyéni Widget-ek + None - Semmi + Nincs Error loading form - Hiba történt az űrlap betöltése közben + Unable to open the form template file '%1': %2 - Nem lehet megnyitni a(z) '%1' űrlap sablon fájlt: %2 + Internal error: No template selected. - Belső hiba: Nincsen sablon kiválasztva. + - + 0 - 0 + - + Choose a template for a preview - Válasszon egy sablont egy előnézetre + - + Embedded Design - Beágyazott tervezés + - + Device: - Eszköz: + - + Screen Size: - Képernyő méret: + @@ -5532,53 +5499,50 @@ Kérem válasszon másikat. Add - Hozzáadás + Hozzáadás New Promoted Class - Új támogatott osztály + Base class name: - Alap osztály név: + Promoted class name: - Támogatott osztály neve: + Header file: - Fejállomány: + Global include - Globális include + Reset - Újraindítás + qdesigner_internal::ObjectInspector - - &Find in Text... - &Keresés a szövegben... + + Change Current Page + - - - qdesigner_internal::ObjectInspector::ObjectInspectorPrivate - - Change Current Page - Aktuális lap megváltoztatása + + &Find in Text... + @@ -5586,80 +5550,80 @@ Kérem válasszon másikat. Index %1 (%2) - Index %1 (%2) + %1 %2 - %1 %2 + - + Change Page Order - Lap sorrend megváltoztatása + - + Page Order - Lap sorrend + - + Move page up - Lap mozgatása felfelé + - + Move page down - Lap mozgatása lefelé + qdesigner_internal::PaletteEditor - + Edit Palette - Paletta szerkesztése + - + Tune Palette - Paletta finomhangolása + - + Show Details - Részletek megjelenítése + - + Compute Details - Számítási részletek + - + Quick - Gyors + - + Preview - Előnézet + - + Disabled - Tiltott + - + Inactive - Inaktív + - + Active - Aktív + @@ -5667,7 +5631,7 @@ Kérem válasszon másikat. Change Palette - Paletta megváltoztatása + @@ -5675,22 +5639,22 @@ Kérem válasszon másikat. Color Role - Szín szabály + Active - Aktív + Inactive - Inaktív + Disabled - Tiltott + @@ -5698,28 +5662,28 @@ Kérem válasszon másikat. Choose Resource... - Erőforrás kiválasztása... + Choose File... - Fájl kiválasztása... + Copy Path - Útvonal kiválasztása + Paste Path - Útvonal beillesztése + ... - ... + ... @@ -5727,7 +5691,7 @@ Kérem válasszon másikat. Edit text - Szöveg szerkesztése + @@ -5735,37 +5699,37 @@ Kérem válasszon másikat. Components - Komponensek + Plugin Information - Beépülő modul információ + Refresh - Felfrissítés + Scan for newly installed custom widget plugins. - Újonnan telepített egyéni widget beépülő modulok letapogatása. + Qt Designer couldn't find any plugins - Qt Designer nem talált egyetlen beépülő modult sem + Qt Designer found the following plugins - Qt Designer a következő beépülő modulokat találta + New custom widget plugins have been found. - Új egyéni widget betöltő modul talált. + @@ -5773,7 +5737,7 @@ Kérem válasszon másikat. %1 Style - %1 Stílus + @@ -5781,52 +5745,48 @@ Kérem válasszon másikat. Default - Alapértelmezett + Alapértelmezett None - Semmi + Nincs Browse... - Böngészés... + - - - qdesigner_internal::PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate Load Custom Device Skin - Egyéni eszköz szkin betöltése + All QVFB Skins (*.%1) - Az összes QVFB szkin (*.%1) + %1 - Duplicate Skin - %1 - Duplikált szkin + The skin '%1' already exists. - A(z) '%1' szkin már létezik. + %1 - Error - %1 - Hiba + %1 is not a valid skin directory: %2 - %1 nem egy érvényes szkin könyvtár: -%2 + @@ -5851,7 +5811,7 @@ Kérem válasszon másikat. &Close - &Bezárás + @@ -5875,57 +5835,57 @@ ate the goose who was loose. qdesigner_internal::PreviewWidget - + Preview Window - + LineEdit - + ComboBox - + PushButton - + ButtonGroup2 - + CheckBox1 - + CheckBox2 - + ButtonGroup - + RadioButton1 - + RadioButton2 - + RadioButton3 @@ -5935,7 +5895,7 @@ ate the goose who was loose. Name - + Név @@ -6296,7 +6256,7 @@ Class: %2 Value - + Érték @@ -6362,7 +6322,7 @@ Class: %2 Bold - + Félkövér @@ -6372,7 +6332,7 @@ Class: %2 Italic - + Dőlt @@ -6382,7 +6342,7 @@ Class: %2 Underline - + Aláhúzott @@ -6506,7 +6466,7 @@ Class: %2 Remove - + Törlés @@ -6603,49 +6563,49 @@ Class: %2 qdesigner_internal::TableWidgetEditor - - - Properties &>> + + New Column - - Edit Table Widget + + New Row - - &Items + + &Columns - - Table Items + + &Rows - - New Column + + Properties &<< - - New Row + + + Properties &>> - - &Columns + + Edit Table Widget - - &Rows + + &Items - - Properties &<< + + Table Items @@ -6665,20 +6625,19 @@ Class: %2 - + Form - + Additional Template Paths - - + ... - + ... @@ -6719,7 +6678,7 @@ Class: %2 ... - + ... @@ -6778,13 +6737,13 @@ Class: %2 - + New Item - + New Subitem @@ -6795,88 +6754,88 @@ Class: %2 - + Properties &>> - + Edit Tree Widget - + &Items - + Tree Items - + 1 - + &New - + New &Subitem - + Delete Item - + &Delete - + Move Item Left (before Parent Item) - + L - + Move Item Right (as a First Subitem of the Next Sibling Item) - + R - + Move Item Up - + U - + Move Item Down - + D @@ -6932,7 +6891,7 @@ Class: %2 Remove - + Törlés @@ -6995,12 +6954,12 @@ This indicates an inconsistency in the ui-file. Next - + Következő Back - + Vissza diff --git a/translations/linguist_hu.ts b/translations/linguist_hu.ts index aaff893..cb1bfa6 100644 --- a/translations/linguist_hu.ts +++ b/translations/linguist_hu.ts @@ -1,10 +1,17 @@ - + + + + + (New Entry) + (Új bejegyzés) + + AboutDialog - + Qt Linguist Qt Linguist @@ -14,7 +21,7 @@ Batch Translation of '%1' - Qt Linguist - '%1' Qt Linguist egy adat fordítása + '%1' kötegelt fordítása - Qt Linguist @@ -24,24 +31,24 @@ &Cancel - &Mégse + &Mégsem Linguist batch translator - Linguist köteg fordító + Linguist kötegelt fordító Batch translated %n entries - %n adat belépés lefordítva + %n üzenet sikeresen lefordítva Qt Linguist - Batch Translation - Qt Linguist adat fordítás + Qt Linguist - Kötegelt fordítás @@ -51,32 +58,40 @@ Set translated entries to finished - Lefordított bevitelek befejezettre állítása + A lefordított szövegek véglegesítése Retranslate entries with existing translation - Bevitelek újrafordítása létező fordításokkal + A módosított bejegyzések fordítása + + + Note that the modified entries will be reset to unfinished if 'Set translated entries to finished' above is unchecked. + A módosított bejegyzések fordítatlanra lesznek állítva, ha az "A lefordított szövegek véglegesítése" nincs bejelölve. Translate also finished entries - Befejezett belépéseknek is a lefordítása + A véglegesített bejegyzéseket is fordítsa Phrase book preference - Fázis könyv beállítások + Kifejezéstár sorrend Move up - Felfelé mozgatás + Fel Move down - Lefelé mozgatás + Le + + + The batch translator will search through the selected phrase books in the order given above. + A kötegelt fordító ebben a sorrendben keresi végig a kifejezéskönyveket. @@ -86,17 +101,17 @@ Cancel - Mégse + Mégsem Note that the modified entries will be reset to unfinished if 'Set translated entries to finished' above is unchecked - Ne felejtse el, hogy a módosított belépések újra lesznek indítva befejezetlenre, ha a 'lefordított bevitelek befejezettre állítása' felül meg van jelölve + A módosított bejegyzések fordítatlanra lesznek állítva, ha az "A lefordított szövegek véglegesítése" nincs bejelölve The batch translator will search through the selected phrase books in the order given above - A köteg fordító a kiválasztott fázis könyvek között fog keresni, a fent megadott sorrendben + A kötegelt fordító ebben a sorrendben keresi végig a kifejezéskönyveket @@ -104,23 +119,23 @@ <qt>Duplicate messages found in '%1': - <qt>Dupliált üzenetek találhatóak a(z) '%1'-ben: + <qt>Duplikált üzenetek a(z) '%1' fájlban: <p>[more duplicates omitted] - <p>[többi duplikáció kihagyása] + <p>[a többi duplikátum kihagyva] <p>* ID: %1 - <p>* Azonosító: %1 + <p>* ID: %1 <p>* Context: %1<br>* Source: %2 - <p>* Szövegösszefüggés: %1<br>* Forrás: %2 + <p>* Környezet: %1<br>* Forrás: %2 @@ -131,17 +146,18 @@ Linguist does not know the plural rules for '%1'. Will assume a single universal form. - A Linguist nem ismeri a többes számú szabályokat a '%1'-re. Egy egyszerű univerzális formát fog feltételezni. + A Linguist nem ismer többesszámképzést a(z) '%1'-hez. +Az egyes számú általános forma lesz alkalmazva. Cannot create '%2': %1 - Nem lehet létrehozni '%2': %1 + '%2' létrehozása sikertelen: %1 Universal Form - Univerzális forma + Általános forma @@ -149,32 +165,32 @@ Will assume a single universal form. Accelerator possibly superfluous in translation. - A gyorsítás valószínűleg nélkülözhető a fordításban. + Felesleges gyorsbillentyű van a fordításban. Accelerator possibly missing in translation. - A gyorsítás valószínűleg hiányzik a fordításban. + Egy gyorsbillentyű valószínűleg hiányzik a fordításból. Translation does not end with the same punctuation as the source text. - A fordítás nem ugyanazzal az írásjellel végződik, mint a forrás szöveg. + A lefordított mondat nem ugyanazzal az írásjellel végződik, mint a forrás. A phrase book suggestion for '%1' was ignored. - A(z) '%1'-re tett fáziskönyv ajánlat mellőzve lett. + A '%1' kifejezéskönyvi ajánlás figyelmen kívül lett hagyva. Translation does not refer to the same place markers as in the source text. - Nem ugyanazok a hely megjelölők találhatóak a fordításban, mint a forrás szövegben. + A fordítás nem tartalmazza az összes %n helyfoglalót a szövegből. Translation does not contain the necessary %n place marker. - A fordítás nem tartalmazza a szükséges %n hely megjelölőket. + A fordításból kimaradt egy szükséges %n helyfoglaló. @@ -187,12 +203,12 @@ Will assume a single universal form. This window allows you to search for some text in the translation source file. - Ez az ablak engedélyezi, hogy szöveget keresses a fordítás forrás fájlban. + Itt lehet keresni egy szöveget a fordítás alatt álló fájlban. Type in the text to search for. - Gépelje be szövegbe, amit keres.. + A keresendő szöveg helye. @@ -202,68 +218,67 @@ Will assume a single universal form. Source texts are searched when checked. - Forrás szövegek keresési ellenőrzéskor. + A forrásszövegek is keresve lesznek. Translations are searched when checked. - Fordítások keresése ellenőrzéskor. + A fordítások is keresve lesznek. Texts such as 'TeX' and 'tex' are considered as different when checked. - 'TeX' és 'tex' szövegek különbözőként kezelése bejelöléskor. + A kis/nagybetű különbseg figyelembe lesz véve. Comments and contexts are searched when checked. - Megjegyzések és tartalmak keresése bejelöléskor. + A megjegyzések és környezetek is keresve lesznek. Find - Keresés - + Keresés &Find what: - Ennek &keresése: + Amit &keres: &Source texts - &Forrás szövegek + Fo&rrásszöveg &Translations - &Fordítások + For&dítások &Match case - &Egyezés + K&is/nagybetű &Comments - &Kommentek + &Megjegyzések Ignore &accelerators - &Gyorsítások mellőzése + &Gyorsbillentyűk kihagyása Click here to find the next occurrence of the text you typed in. - Kattintson ide a begépelt szöveg következő előfordulásának megkereséséhez. + A következő találat megjelenítéséhez kattintson ide. Find Next - Következő keresése + Következő @@ -273,37 +288,34 @@ Will assume a single universal form. Cancel - Mégse + Mégsem - + Choose Edit|Find from the menu bar or press Ctrl+F to pop up the Find dialog - Válassza ki a Szerkesztés/Keresés opciót a menüből vagy nyomja le a Ctrl+F billentyűket a keresési párbeszédablak felugrásához FormMultiWidget - + Alt+Delete translate, but don't change - fordítsd, de ne változtasd - ALT+Delete + Shift+Alt+Insert translate, but don't change - Fordítsd, de ne változtasd. - Shift+Alt+Insert + Alt+Insert translate, but don't change - Alt+Insert + @@ -313,23 +325,23 @@ Will assume a single universal form. Delete non-empty length variant? - Törölje az 0 hosszúságú változatok? + Biztosan törli ezt a hosszú változatot? LRelease - + Dropped %n message(s) which had no ID. - %n üzenez eldobva, melyek nem rendelkeztek azonosítóval. + %n azonosító nélküli üzenet eldobva. Excess context/disambiguation dropped from %n message(s). - Fölösleges szövegösszefüggés/egyértelműsítés törlése %n üzenetből. + A többlet kontextus/egyértelmüsítés eltávolítva %n üzenetből. @@ -337,7 +349,8 @@ Will assume a single universal form. Generated %n translation(s) (%1 finished and %2 unfinished) - %n fordítás legenerálása (%1 befejezett és %2 befejezetlen) + %n fordítás legenerálva (%1 végleges és %2 nem végleges) + @@ -345,7 +358,8 @@ Will assume a single universal form. Ignored %n untranslated source text(s) - %n lefordítatlan forrás szöveg mellőzése + %n lefordítatlan szöveg kihagyva + @@ -354,32 +368,32 @@ Will assume a single universal form. MainWindow - FőAblak + MainWindow &Phrases - &Fázisok + &Kifejezések &Close Phrase Book - &Fázis könyvek bezárása + Kifejezéstár &bezárása &Edit Phrase Book - Fázis könyvek &szerkesztése + Kifejezéstár sz&erkesztése &Print Phrase Book - &Fázis könyvek nyomtatása + Kifejezéstár &nyomtatása V&alidation - &Érvényesítés + &Ellenőrzés @@ -394,7 +408,7 @@ Will assume a single universal form. &Toolbars - &Eszköztár + &Eszköztárak @@ -404,7 +418,7 @@ Will assume a single universal form. &Translation - &Fordítások + F&ordítás @@ -413,23 +427,23 @@ Will assume a single universal form. - &Edit - &Szerkesztés + Recently Opened &Files + Előzőleg megnyitott &fájlok - &Open... - &Megnyitás... + &Edit + Sz&erkesztés Open a Qt translation source file (TS file) for editing - Egy Qt fordítási forrás fájl (TS fájl) megnyitása szerkesztésre + Qt fordytási forrás (TS fájl) megnyitása szerkesztésre Ctrl+O - Ctrl+O + @@ -439,170 +453,95 @@ Will assume a single universal form. Close this window and exit. - Ablak bezárása és kilépés. + Kilépés, és az ablak bezárása. Ctrl+Q - Ctrl+Q + &Save - &Mentés + Menté&s Save changes made to this Qt translation source file - Változtatások elmentése a Qt fordítási forrás fájlban - - - - Move to the previous unfinished item. - Az előző befejezetlen elemre mozgatás. - - - - Move to the next unfinished item. - A következő befejezetlen elemre mozgatás. - - - - Move to the previous item. - Az előző elemre mozgatás. - - - - Move to the next item. - A következő elemre mozgatás. - - - - Mark this item as done and move to the next unfinished item. - Az elem készre jelölése és a következő befejezetlen elemre mozgás. - - - - Copy from source text - Másolás forrás szövegből - - - - 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. - Gyorsítások érvényesség ellenőrzésének kapcsolgatása, lásd vajon az et jelek száma megegyezik-e a a forrás és lefordított szövegben. Ha ez az ellenőrzés hibásan zárul le, a figyelmeztető ablakban egy üzenet tűnik fel. - - - - Toggle the validity check of ending punctuation. If the check fails, a message is shown in the warnings window. - A végződő írásjelek érvényesség ellenőrzésének kapcsolgatása. Ha ez az ellenőrzés nem sikerült, akkor egy üzenet bukkan fel a figyelmeztető ablakban. - - - - Toggle checking that phrase suggestions are used. If the check fails, a message is shown in the warnings window. - Fázis ajánlások ellenőrzésének kapcsolgatása. Ha az ellenőrzés sikertelen, akkor egy üzenet bukkan fel a figyelmeztető ablakban. - - - - 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. - A hely megjelelölők érvényesség ellenőrzésének kapcsolgatása, lásd vajon a(z) %1, %2.. következetesen vannak-e használva a forrás és lefordított szövegben. Ha az ellenőrzés sikertelen, egy üzenet bukkan fel a figyelmeztető ablakban. + A fordításon végzett változtatások elmentése Open Read-O&nly... - &Csak olvasható megnyitása... + Megnyitás csak &olvasásra... &Save All - Az összes &mentése + Mind&et menti Ctrl+S - Ctrl+S + Save &As... - &Másként mentés... + Mentés má&sként... Save As... - Másként mentés... + Mentés másként... Save changes made to this Qt translation source file into a new file. - A változtatások egy új fájlba mentése, amik ebben a Qt fordítási forrás fájlban keletkeztek. + A fordításon végzett változtatások elmentése egy új fájlba. &Release - &Kiadás + Kia&dás Create a Qt message file suitable for released applications from the current message file. - Qt üzenez fájl létrehozása az aktuális üzenet fájlból, ami alkalmas a kiadásra. - - - - &Print... - &Nyomtatás... + Az alkalmazások számára használható Qt üzenetfájl létrehozása a jelenlegi fájlból. Ctrl+P - Ctrl+P + &Undo - &Visszacsinálás - - - - Recently Opened &Files - &Utoljára megnyitott &fájlok - - - - Save - Mentés - - - - Print a list of all the translation units in the current translation source file. - Az összes fordítási egység kinyomtatása az aktuális fordítási forrás fájlban. - - - - Undo the last editing operation performed on the current translation. - Az utoljára szerkesztett művelet visszavonása az aktuális fordításon. + &Visszavonás Ctrl+Z - Ctrl+Z + &Redo - &Helyreállítás + Új&ra Redo an undone editing operation performed on the translation. - Szerkesztő művelet helyreállítása és visszavonása, ami az aktuális fordításon lett végrehajtva. + Egy visszavont szerkesztési művelet újra végrehajtása a fordításon. Ctrl+Y - Ctrl+Y + @@ -612,12 +551,12 @@ Will assume a single universal form. Copy the selected translation text to the clipboard and deletes it. - A kiválasztott fordítási szöveg vágólapra másolása és törlése. + A kijelölt szöveg vágólapra másolása és törlése. Ctrl+X - Ctrl+X + @@ -627,12 +566,12 @@ Will assume a single universal form. Copy the selected translation text to the clipboard. - A kiválaszott fordítási szöveg vágólapra másolása. + A kijelölt szöveg vágólapra másolása. Ctrl+C - Ctrl+C + @@ -642,42 +581,37 @@ Will assume a single universal form. Paste the clipboard text into the translation. - A vágólapon levő szöveg fordításba illesztése. + A vágólap tartalmának beillesztése a fordításba. Ctrl+V - Ctrl+V + Select &All - Az &összes kiválasztása + Ö&sszes kijelölése Select the whole translation text. - Az egész fordítási szöveg kiválasztása. + A fordítás teljes szövegét kijelöli. Ctrl+A - Ctrl+A - - - - &Find... - &Keresés... + Search for some text in the translation source file. - Néhány szövegre keresés a fordítási forrás fájlban. + Szöveg keresése a fordítás alatt levő fájlban. Ctrl+F - Ctrl+F + @@ -687,182 +621,150 @@ Will assume a single universal form. Continue the search where it was left. - A keresés folytatása ott, ahol abba lett hagyva. + Az előző keresés folytatása. F3 - F3 + &Prev Unfinished - Az &előző befejezetlen - - - - Close - Bezárás - - - - &Close All - Az összes &bezárása - - - - Ctrl+W - Ctrl+W + &Előző befejezetlen Ctrl+K - Ctrl+K + &Next Unfinished - &Következő befejezetlen + Következő befejezetle&n P&rev - &Előző + E&lőző Ctrl+Shift+K - Ctrl+Shift+K + Ne&xt - &Következő + Kö&vetkező &Done and Next - &Kész és Következő + Vé&glegesítés és ugrás Copies the source text into the translation field. - Forrás szövegek fordítási mezőbe másolása. + A forrás szöveg bemásolása a fordításba. Ctrl+B - Ctrl+B + &Accelerators - &Gyorsítások + &Gyorsbillentyűk &Ending Punctuation - &Vég írásjelek + &Záró írásjelek &Phrase matches - &Fázis egyezés + &Kifejezés egyezések - - Place &Marker Matches - Hely &megjelölők egyezései + Toggle checking that phrase suggestions are used. + A kifejezéstár ajánlásainak használatának engedélyezése. - &New Phrase Book... - &Új fázis könyv... + Place &Marker Matches + &Helyfoglalók egyezése Create a new phrase book. - Egy új fázis könyv létrehozása. + Kifejezéstár létrehozása. Ctrl+N - Ctrl+N - - - - &Open Phrase Book... - Fázis könyv &megnyitása... + Open a phrase book to assist translation. - Fáris könyv megnyitása a fordítás támogatásával. + Kifejezéstár megnyitása a fordításhoz. Ctrl+H - Ctrl+H - - - - &Reset Sorting - &Rendezés helyreállítása + Sort the items back in the same order as in the message file. - Az elemek visszarendezése ugyanabba a sorrendben, ahogy az üzenet fájlban található. + Az üzenetfájlbeli sorrend visszaállítása. &Display guesses - Feltételezések &kijelzése + &Tippek megjelenítése Set whether or not to display translation guesses. - Annak beállítása, hogy vajon kijelezze a fordítási feltételezéseket vagy sem. + Fordítási tippek megjelenítése vagy elrejtése. &Statistics - &Statisztikák - - - - Display translation statistics. - Fordítási statisztikák kijelzése. + &Statisztika &Manual - &Kézi + &Kézikönyv F1 - F1 + About Qt Linguist - Qt Linguist-ról + A Qt Linguist névjegye About Qt - Qt-ról + A Qt névjegye - Display information about the Qt toolkit by Trolltech. - Információ megjelenítése a Trolltech Qt eszközrendszeréről. + Információk a Trolltech Qt eszközkészletéről. &What's This? - &Mi ez? + Mi e&z? @@ -872,52 +774,44 @@ Will assume a single universal form. Enter What's This? mode. - Mi ez? beviteli mód. + Átlépés "Mi ez?" módba. Shift+F1 - Shift+F1 - - - - &Search And Translate... - &Keresés és fordítás... + Replace the translation on all entries that matches the search source text. - A fordítások kicserélése az összes olyan helyen, ahol az megegyezik a keresett forrás szöveggel. - - - - - &Batch Translation... - &Köteg fordítás... + A fordítás cseréje minden olyan előfordulásnál, ahol a forrásszöveg illeszkedik a keresett szóra. Batch translate all entries using the information in the phrase books. - Köteg fordítás mindenhol, ahol az információ a fázis könyvekben van haszálva. + Az összes bejegyzés automatikus fordítása a kifejezéstárak alapján. - + Release As... - Kiadás, mint... + Kiadás másként... + + + 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. + Az alkalmazások számára használható Qt üzenetfájl létrehozása a jelenlegi fájlból. A fájlnév a jelenlegi ts fájl nevéből lesz megállapítva. - + This is the application's main window. - Ez az alkalmazás fő ablaka. - + Source text - Forrás szöveg + Forrás @@ -929,7 +823,7 @@ Will assume a single universal form. Context - Összefüggés + Környezet @@ -939,22 +833,22 @@ Will assume a single universal form. This panel lists the source contexts. - Ez a panel kilistázza a forrás összefüggéseket. + Ez a panel a környezeteket listázza. - + Strings - Sztringek + Szövegek - + Phrases and guesses - Kommunikációk és feltételezések + Kifejezések és tippek Sources and Forms - Források és formák + Források és űrlapok @@ -965,10 +859,10 @@ Will assume a single universal form. MOD status bar: file(s) modified - MOD + MOD - + Loading... Betöltés... @@ -983,30 +877,30 @@ Will assume a single universal form. The file '%1' does not seem to be related to the currently open file(s) '%2'. Close the open file(s) first? - A(z) '%1' fájl nem tartozik hozzá egyetlen aktuálisan megnyitott '%2' fájlhoz sem. + A(z) '%1' fájl nem kapcsolható a jelenleg megnyitott fájlokhoz (%2). -Bezárja először a megnyitott fájl(oka)t? +Bezárja a nyitott fájlokat? The file '%1' does not seem to be related to the file '%2' which is being loaded as well. Skip loading the first named file? - A(z) '%1' fájl nem tartozik egyetlen '%2' fájlhoz sem, amelyik ugyanúgy be lett töltve. + A(z) '%1' fájl nem a '%2' fájlhoz tartozónak tűnik. -Azt első megnevezett fájl betöltésének kihagyása? +Kihagyja ennek a fájlnak a betöltését? %n translation unit(s) loaded. - %n fordítási egység betöltése. + %n fordítási egység betöltve. - + Related files (%1);; - Hozzákapcsolodó fájlok (%1);; + Hozzátartozó fájlok (%1);; @@ -1017,7 +911,7 @@ Azt első megnevezett fájl betöltésének kihagyása? File saved. - Fájl elmentve. + A fájl elmentve. @@ -1030,14 +924,14 @@ Azt első megnevezett fájl betöltésének kihagyása? Qt message files for released applications (*.qm) All files (*) - Qt üzenet fájlok a kiadott alkalmazásra (*.qm) -Az összes fájl(*) + Qt üzenetfájlok a kiadott alkalmazásokhoz (*.qm) +Minden fájl (*) File created. - Fál létrehozva. + A fájl létrehozva. @@ -1048,34 +942,34 @@ Az összes fájl(*) Context: %1 - Összefüggés: %1 + Környezet: %1 finished - Befejezve + végleges unresolved - Nincs megoldva + hibás obsolete - Elavulás + elavult Printing... (page %1) - Nyomtatás... (%1 lap) + Nyomtatás... (oldal %1) Printing completed - Nyomtatás teljesítve + Nyomtatás befejezve @@ -1086,7 +980,7 @@ Az összes fájl(*) Search wrapped. - Keresés elrejtése. + A keresés befejeződött. @@ -1106,64 +1000,64 @@ Az összes fájl(*) Cannot find the string '%1'. - A(z) '%1' sztring nem található. + A szöveg nem található: '%1'. Search And Translate in '%1' - Qt Linguist - Keresés és fordítás a(z) '%1'-ben - Qt Linguist + Keresés és fordítás itt: '%1' - Qt Linguist Translate - Qt Linguist - Qt Linguist fordítása + Fordítás - Qt Linguist Translated %n entry(s) - %n bevitel lefordítva + %n bejegyzés lefordítva No more occurrences of '%1'. Start over? - Nem található '%1' több előfordulása. Előlről kezdi? + Nincs több találat erre: '%1'. Kezdjük elölről? Create New Phrase Book - Új kommunikációs könyv létrehozása + Kifejezéstár létrehozása Qt phrase books (*.qph) All files (*) - Qt kommunikációs könyv (*.qph) -Az összes fájl (*) + Qt kifejezéstárak (*.qph) +Minden fájl (*) Phrase book created. - Kommunikációs könyv létrehozva. + A kifejezéstár létrehozva. Open Phrase Book - Kommunikációs könyv megnyitása + Kifejezéstár megnyitása Qt phrase books (*.qph);;All files (*) - Qt kommunikációs könyvek (*.qpm);;Az összes fájl (*) + Qt kifejezéstárak (*.qph);;Minden fájl (*) %n phrase(s) loaded. - %n kommunikáció betöltése. + %n kifejezés betöltve. @@ -1171,47 +1065,56 @@ Az összes fájl (*) Add to phrase book - Kommunikációs könyv hozzáadása + Hozzáadás a kifejezéstárhoz No appropriate phrasebook found. - Nem található megfelelő kommunikációs könyv. + Nincs megfelelő kifejezéstár. Adding entry to phrasebook %1 - Új elem hozzáadása a(z) %1 fázis fáziskönyvhöz + Hozzáadás ehhez kifejezéstárhoz: '%1' Select phrase book to add to - Kommunikációs könyv kiválasztása hozzáadásra + Válassza ki a bővítendő kifejezéstárat Unable to launch Qt Assistant (%1) - Nem lehet elindítani a Qt Assistant (%1) + A Qt Asszisztens elindítása sikertelen (%1) Version %1 - %1 Verzió + Verzió %1 <center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist is a tool for adding translations to Qt applications.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). - <center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist egy olyan eszköz, amelyekkel fordítások adhat hozzá a Qt alkalmazásokhoz.</p><p>Szerzői jog(C) 2010 Nokia Vállalat és/vagy leányvállalatai. + <center><img src=":/images/splash.png"/></img><p>%1</p></center><p>A Qt Linguist a Qt alkalmazások fordítását segítő eszköz.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). + + + <center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist is a tool for adding translations to Qt applications.</p><p>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + </p> + <center><img src=":/images/splash.png"/></img><p>%1</p></center><p>A Qt Linguist a Qt alkalmazások fordítását segítő eszköz.</p><p>Copyright (C) 2009 Nokia Corporation és leányvállalata(i). + + + <center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist is a tool for adding translations to Qt applications.</p><p>%2</p><p>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</p><p>The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.</p> + <center><img src=":/images/splash.png"/></img><p>%1</p></center><p>A Qt Linguist a Qt alkalmazások fordítását segítő eszköz.</p><p>%2</p><p>Copyright (C) 2000-2007 Trolltech ASA. Minden jog fenntartva.</p><p>Ez a program abban a reményben került közreadásra, hogy hasznos lesz, de minden egyéb GARANCIA NÉLKÜL, az ELADHATÓSÁGRA vagy VALAMELY CÉLRA VALÓ ALKALMAZHATÓSÁGRA való származtatott garanciát is beleértve.</p> Do you want to save the modified files? - El szeretné menteni a módosított fájlokat? + Menti a módosított fájlokat? Do you want to save '%1'? - El szeretné menteni a(z) %1-t ? + Menti ezt a fájlt '%1'? @@ -1227,7 +1130,7 @@ Az összes fájl (*) No untranslated translation units left. - Nem maradtak lefordítatlan fordítások. + Nincs több lefordítandó kifejezés. @@ -1242,27 +1145,27 @@ Az összes fájl (*) Ctrl+M - Ctrl+M + Display the manual for %1. - A manuál megjelenítése %1-re vonatkozóan. + %1 kézikönyvének megtekintése. Display information about %1. - Információ megjelenítése a(z) %1-ről. + Információk megjelenítése erről: %1. &Save '%1' - '%1' &mentése + '%1' menté&se Save '%1' &As... - '%1' &másként mentése... + '%1' mentése máské&nt... @@ -1272,12 +1175,12 @@ Az összes fájl (*) Release '%1' As... - '%1' másként kiadása... + '%1' kiadása mint... &Close '%1' - '%1' &bezárása + '%1' be&zárása @@ -1288,33 +1191,33 @@ Az összes fájl (*) Save All - Az összes mentése + Mindet menti &Release All - Az összes &kiadása + Összes k&iadása Close All - Az összes bezárása + Mindet bezár Translation File &Settings for '%1'... - Fordítási fájlok &beállítása erre '%1'... + Fordításfájl beállítá&sok ehhez: '%1'... &Batch Translation of '%1'... - A(z) '%1' &köteg fordítása... + '%1' köte&gelt fordítása... Search And &Translate in '%1'... - Keresés és &fordítás '%1'-ben... + Keresés és fordí&tás itt: '%1'... @@ -1343,7 +1246,7 @@ Az összes fájl (*) Validation - Érvényesítés + Ellenőrzés @@ -1354,151 +1257,313 @@ Az összes fájl (*) Cannot read from phrase book '%1'. - Nem lehet a(z) '%1' kommunikációs könyvből olvasni. + Nem lehet a(z) '%1' kifejezéstárból olvasni. Close this phrase book. - A kommunikációs könyv bezárása. + Kifejezéstár bezárása. Enables you to add, modify, or delete entries in this phrase book. - Hozzáadás, módosítás, vagy törlés engedélyezése ebben a kommunikációs könyvben. + Lehetővé teszi a bejegyzések szerkesztését a kifejezéskönyvben. Print the entries in this phrase book. - Az összes bevitel kinyomtatása ebben a társalgási szótárban. + A kifejezéskönyv tartalmának nyomtatása. Cannot create phrase book '%1'. - Nem lehet a '%1' társalgási szótárat létrehozni. + A(z) '%1' kifejezéstár létrehozása sikertelen. Do you want to save phrase book '%1'? - El szeretné menteni a '%1' társalgási szótárat? + Biztosan menti a(z) '%1' kifejezéskönyvet? - + All - Mind + Minden Open/Refresh Form &Preview - Forma megnyitása/felfrissítése &nézet + Form &előnézet megnyitása/frissítése Form Preview Tool - Forma előnézeti eszköz + Form előnézeti eszköz F5 - F5 + + + + + &Open... + Meg&nyitás... + + + + Save + Mentés + + + + &Print... + &Nyomtatás... - + Print a list of all the translation units in the current translation source file. + A fordítási egységeket listázza a jelenlegi fordításfájlban. + + + + Undo the last editing operation performed on the current translation. + A legutolsó szerkesztő művelet visszavonása a fordításon. + + + + &Find... + K&eresés... + + + Previous unfinished item. + Előző lefordítatlan bejegyzés. + + + + Move to the previous unfinished item. + Ugrás a előző lefordítatlan bejegyzésre. + + + Next unfinished item. + Következő lefordítatlan bejegyzés. + + + + Move to the next unfinished item. + Ugrás a következő lefordítatlan bejegyzésre. + + + Move to previous item. + Ugrás az előző bejegyzésre. + + + + Move to the previous item. + Ugrás az előző bejegyzésre. + + + Next item. + Következő bejegyzés. + + + + Move to the next item. + Ugrás a következő bejegyzésre. + + + Mark item as done and move to the next unfinished item. + Az aktuális bejegyzés késznek jelölése és ugrás a következő lefordítatlanra. + + + + Mark this item as done and move to the next unfinished item. + Ezt a bejegyzést késznek jelöli és a következő lefordítatlanra ugrik. + + + + Copy from source text + Forrásszöveg másolása + + + Toggle the validity check of accelerators. + A gyorsbillentyűk meglétének ellenőrzése. + + + + 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. + A gyorsbillentyűk meglétének ellenőrzése, vagyis hogy a forrás és célszövegben található && jelek száma megegyezik-e. Ha nem, akkor a figyelmeztetések közt jelezve lesz. + + + Toggle the validity check of ending punctuation. + A mondatvégi írásjelek ellenőrzése. + + + + Toggle the validity check of ending punctuation. If the check fails, a message is shown in the warnings window. + A mondatvégi írásjelek ellenőrzése. Ha nem, akkor a figyelmeztetések közt jelezve lesz. + + + + Toggle checking that phrase suggestions are used. If the check fails, a message is shown in the warnings window. + Az ajánlásokhoz való igazodás ellenőrzése. Ha van ajánlás, mégsincs felhasználva a fordításban, akkor a figyelmeztetések közt jelezve lesz. + + + Toggle the validity check of place markers. + A helyfoglalók ellenőrzése. + + + + 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. + A helyfoglalók ellenőrzése, vagyis a %1, %2, ... helyfoglalók konzisztensen vannak-e használva a fordításban. Ha nem, akkor a figyelmeztetések közt jelezve lesz. + + + + &New Phrase Book... + Ú&j kifejezéstár... + + + + &Open Phrase Book... + Kifejezéstár meg&nyitása... + + + + &Reset Sorting + Rendezés &visszaállítása + + + + Display translation statistics. + Fordítási statisztikák megjelenítése. + + + + &Search And Translate... + Keresés és &fordítás... + + + + Close + Bezárás + + + + &Close All + Mind&et bezár + + + + Ctrl+W + + + + + + &Batch Translation... + &Kötegelt fordítás... + + + + Translation File &Settings... - Fordítási fájl &beállítások... + Fordítási fájl beállítá&sai... &Add to Phrase Book - Társalgási szótárhoz &hozzáadás + Hozzá&adás a kifejezéstárhoz Ctrl+T - Ctrl+T + Ctrl+J - Ctrl+J + Ctrl+Shift+J - Ctrl+Shift+J + Previous unfinished item - Előző befejezetlen elem + Előző lefordítatlan bejegyzés Next unfinished item - Következő befejezetlen elem + Következő lefordítatlan bejegyzés Move to previous item - Az előző befejezetlen elemre mozgás + Ugrás az előző bejegyzésre Next item - Következő elem + Következő bejegyzés Mark item as done and move to the next unfinished item - Az elem készként jelölése és a következő befejezetlen elemre mozgatás + Az aktuális bejegyzés késznek jelölése és ugrás a következő lefordítatlanra Copies the source text into the translation field - A forrás szöveg fordítási szövegbe másolása + A forrás szöveg bemásolása a fordításba Toggle the validity check of accelerators - Gyorsítások érvényesség ellenőrzésének kapcsolgatása + A gyorsbillentyűk meglétének ellenőrzése Toggle the validity check of ending punctuation - Vég írásjelek érvényesség ellenőrzésének kapcsolgatása + A mondatvégi írásjelek ellenőrzése Toggle checking that phrase suggestions are used - A használt társalgási ajánlások ellenőrzésének kapcsolgatása + A kifejezéstár ajánlásainak használatának engedélyezése Toggle the validity check of place markers - Hely megjelölők érvényesség vizsgálatának kapcsolgatása + A helyfoglalók ellenőrzése 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. - Egy Qt üzenet fájl létrehozása az aktuális üzenet fájlból, amely megfelelő az alkalmazás kiadásaira. A fájlnév TS fájl nevéből lesz automatikusan meghatározva. + Az alkalmazások számára használható Qt üzenetfájl létrehozása a jelenlegi fájlból. A fájlnév a jelenlegi ts fájl nevéből lesz megállapítva. Length Variants - Hossz változatok + Hosszú változat + + + + Display information about the Qt toolkit by Nokia. + Információk a Nokia Qt eszközkészletéről. MessageEditor - + This is the right panel of the main window. - Ez a fő ablak jobb panelja. - + Russian Orosz @@ -1528,14 +1593,14 @@ Az összes fájl (*) Kínai - + This whole panel allows you to view and edit the translation of some source text. - Ez az egész pabel engedélyezi néhány forrás szöveg fordításának megtekintését és szerkesztését. + Ezen a panelen tekinthetőek meg és szerkeszthetők a fordítások. - + Source text - Forrás szöveg + Forrásszöveg @@ -1545,12 +1610,12 @@ Az összes fájl (*) Source text (Plural) - Forrás szöveg (Többesszám) + Forrásszöveg (többes szám) This area shows the plural form of the source text. - Ez a terület mutatja a forrás szöveg többesszámú formáját. + Ez a terület mutatja a forrás szöveg többesszámát. @@ -1560,22 +1625,22 @@ Az összes fájl (*) This area shows a comment that may guide you, and the context in which the text occurs. - Ez a terület mutatja a megjegyzéseket, ami segítheti Önt, és az összefüggéseket, hogy melyik szövegben fordul elő. + Ez a rész mutatja meg a fejlesztő segítő megjegyzéseit, és a szövegkörnyezet részleteit. Here you can enter comments for your own use. They have no effect on the translated applications. - Itt hozzáadhatja a saját megjegyzését saját használatra. Nincsen hatásuk a lefordított alkalmazásokon. + Ide lehet beírni a fordításhoz tartozó megjegyzéseket. Ez nincs hatással a lefordított alkalmazásokra. - + %1 translation (%2) %1 fordítás (%2) This is where you can enter or modify the translation of the above source text. - Ez az a hely, ahol beviheti és módosíthatja a fentebb található forrás szöveg fordítását. + Itt írható be, vagy módosítható a forrás szöveg fordítása. @@ -1585,62 +1650,54 @@ Az összes fájl (*) %1 translator comments - %1 fordító megjegyzések + %1 fordítói megjegyzés '%1' Line: %2 - '%1' + '%1' Sor: %2 MessageModel - + Completion status for %1 - %1 elkészítési státusza + Készültségi állapot %1 nyelvhez <file header> - <file header> + <fájl fejléc> <context comment> - <context comment> + <környezet megjegyzés> <unnamed context> - <unnamed context> + <névtelen környezet> MsgEdit - + This is the right panel of the main window. - Ez a fő ablak jobb panelja. PhraseBookBox - - - Go to Phrase > Edit Phrase Book... The dialog that pops up is a PhraseBookBox. - Társalgás -> Társalgási szótár szerkesztése... A felbukkanó ablak egy TársalgásiSzótárDoboz. - - - - + (New Entry) - (Új bevitel) + (Új bejegyzés) @@ -1655,17 +1712,12 @@ Sor: %2 Cannot save phrase book '%1'. - Nem lehet elmenteni a(z) '%1' társalgási szótárat. + Nem lehet ezt a kifejezéstárat elmenteni: '%1'. Edit Phrase Book - Társalgási szótár szerkesztése - - - - This window allows you to add, modify, or delete entries in a phrase book. - Ez az ablak engedélyezi új bevitelek hozzáadását, módosítását, vagy törlését egy társalgási szótárban. + Kifejezéstár szerkesztése @@ -1675,22 +1727,22 @@ Sor: %2 This is the phrase in the target language corresponding to the source phrase. - Ez a forrás társalgás megfelelője a cél nyelvben. + A forrás nyelvi kifejezés célnyelvi megfelelője. S&ource phrase: - &Forrás társalgás: + F&orrás kifejezés: This is a definition for the source phrase. - Ez egy forrás fordítás definíció. + Ez a forráskifejezés meghatározása. This is the phrase in the source language. - Ez egy társalgás a forrás nyelvben. + Ez a forrás nyelvi kifejezés. @@ -1700,22 +1752,37 @@ Sor: %2 Click here to add the phrase to the phrase book. - Kattintson ide a társalgás hozzáadásához a társalgási könyvben. + Kattintson ide a kifejezés kifejezéstárba vételéhez. + + + + &Save + Menté&s + + + + Click here to save the changes made. + Kattintson ide a változások mentéséhez. + + + + This window allows you to add, modify, or delete entries in a phrase book. + Ebben az ablakban nyílik lehetőség a kifejezéstár bővítésére, szűkítésére és módosítására. &New Entry - &Új bevitel + Ú&j bejegyzés Click here to remove the entry from the phrase book. - Kattintson ide a bevitel társalgási könyvből való eltávolításához. + Kattintson ide a kifejezés törléséhez a kifejezéstárból. &Remove Entry - Bevitel &eltávolítása + Bejegyzés tö&rlése @@ -1724,13 +1791,8 @@ Sor: %2 - Click here to save the changes made. - Kattintson ide a változtatások elmentéséhez. - - - - &Save - &Mentés + Close + Bezárás @@ -1738,9 +1800,10 @@ Sor: %2 Kattintson ide az ablak bezárásához. - - Close - Bezárás + + + Go to Phrase > Edit Phrase Book... The dialog that pops up is a PhraseBookBox. + @@ -1748,7 +1811,7 @@ Sor: %2 Source phrase - Forrás társalgás + Forrás kifejezés @@ -1776,12 +1839,12 @@ Sor: %2 Guess (%1) - Feltételezés (%1) + Tipp (%1) Guess - Feltételezés + Tipp @@ -1789,6 +1852,7 @@ Sor: %2 Compiled Qt translations + Released files (*.qm) Lefordított Qt fordítások @@ -1799,10 +1863,10 @@ Sor: %2 All files (*) - Fájlok hozzáadása ( *) + Minden fájl (*) - + @@ -1813,24 +1877,44 @@ Sor: %2 Qt Linguist + C++ source files + C++ forrásfájlok + + + Java source files + Java forrásfájlok + + GNU Gettext localization files GNU Gettext lokalizációs fájlok + Qt Script source files + Qt szkript fájlok + + Qt translation sources (format 1.1) - Qt fordítási forrása (1.1 formátum) + Qt fordítási fájlok (1.1-es formátum) Qt translation sources (format 2.0) - Qt fordítás források (2.0 formátum) + Qt fordítási fájlok (2.0-ás formátum) Qt translation sources (latest format) - Qt fordítási források (legutolsó formátum) + Qt fordítási fájlok (legújabb formátum) + + + Qt Designer form files + Qt Designer űrlapfájlok + + + Qt Jambi form files + Qt Jambi űrlapfájlok @@ -1838,9 +1922,9 @@ Sor: %2 XLIFF lokalizációs fájlok - + Qt Linguist 'Phrase Book' - Qt Linguist 'Társalgási Könyv' + Qt Linguist 'Kifejezéstár' @@ -1848,17 +1932,17 @@ Sor: %2 <i>Source code not available</i> - <i>A forrás kód nem elérhető</i> + <i>A forráskód nem elérhető</i> <i>File %1 not available</i> - <i>A(z) %1 fájl nem elérhető</i> + <i>A fájl (%1) nem elérhető</i> <i>File %1 not readable</i> - <i>A(z) %1 fájl nem olvasható</i> + <i>A fájl (%1) nem olvasható</i> @@ -1886,17 +1970,17 @@ Sor: %2 Words: - Szavak: + Szavak száma: Characters: - Karakterek: + Karakterek száma: Characters (with spaces): - Karakterek (szóközökkel): + Karakterek száma (szóközökkel): @@ -1905,16 +1989,25 @@ Sor: %2 + TrWindow + + + + This is the application's main window. + + + + TranslateDialog This window allows you to search for some text in the translation source file. - Ez az ablak engedélyezi, hogy rákeressen néhány szövegre a fordítási forrás fájlban. + Ebben az ablakban kereshetsz a fordítás forrásfájljában. Type in the text to search for. - Gépelje be a keresni kívánt szöveget. + Írd be a keresett szöveget. @@ -1924,32 +2017,32 @@ Sor: %2 &Translate to: - &Fordítás erre: + Fordí&tása: Search options - Keresés opciók + Keresési opciók Texts such as 'TeX' and 'tex' are considered as different when checked. - 'TeX' és 'text' szövegek különbözően kezelése bejelöléskor. + Kis- és nagybetű érzékeny keresés. Match &case - Megegyező &eset + Kis/nagy&betű Mark new translation as &finished - Új fordítások &befejezettként jelölése + Új fordítás megjelölése be&fejezettként Click here to find the next occurrence of the text you typed in. - Kattintson ide a begépelt szöveg következő előfordulásának megkereséséhez. + Kattints ide a megadott szöveg következő előfordulásának megkereséséhez. @@ -1964,31 +2057,31 @@ Sor: %2 Translate All - Az összes fordítása + Összes fordítása Click here to close this window. - Kattintson ide az ablak bezárásához. + Kattints ide az ablak bezárásához. Cancel - Mégse + Mégsem TranslationSettingsDialog - + Any Country - Bármeny ország + Bármely ország - + Settings for '%1' - Qt Linguist - '%1'-re állítás - Qt Linguist + '%1' beállításai - Qt Linguist @@ -2003,7 +2096,7 @@ Sor: %2 Country/Region - OrszágRégió + Ország/Régió diff --git a/translations/qt_help_hu.ts b/translations/qt_help_hu.ts index 3fbe0e9..3e04223 100644 --- a/translations/qt_help_hu.ts +++ b/translations/qt_help_hu.ts @@ -4,85 +4,108 @@ QCLuceneResultWidget + Search Results - Keresési eredmény + Keresési eredmények + Note: + CHECKIT Megjegyzés: + The search results may not be complete since the documentation is still being indexed! - A keresési eredmény lehet, hogy nem teljes, mivel a dokumentáció még mindig indexelvan van! + A keresés eredménye hiányos lehet, mert a dokumentáció indexelés alatt van! + Your search did not match any documents. - A keresési feltételeknek megfelően nincs találat. + Nincs a keresési feltételeknek megfelelő dokumentum. + (The reason for this might be that the documentation is still being indexed.) - (Ennek az oka az lehet, hogy a dokumentáció még mindig indexelve van.) + (Ez amiatt lehet, hogy a dokumentáció indexelése még nincs befejezve.) QHelpCollectionHandler + The collection file '%1' is not set up yet! - A(z) '%1'gyűjtemény fájl még nincs beállítva! + CHECKIT + A(z) '%1'gyűjteményfájl még nincs beállítva! + Cannot load sqlite database driver! - Nem lehet betölteni az sqlite adatbázis vezérlőt! + Az sqlite adatbázisvezérlő nem tölthető be! + + Cannot open collection file: %1 Nem lehet megnyitni a gyűjtemény fájlt: %1 + Cannot create tables in file %1! - Nem lehet lehet a(z) %1 fájlban táblákat létrehozni! + Nem sikerült táblákat létrehozni a(z) %1 fájlban! + The collection file '%1' already exists! A(z) '%1' gyűjtemény fájl már létezik! + Unknown filter '%1'! - Ismeretlen szűrő '%1'! + Ismeretlen szűrő: '%1'! + Invalid documentation file '%1'! Érvénytelen dokumentációs fájl '%1'! + Cannot register namespace '%1'! - Nem lehet regisztrálni a(z) '%1' névteret! + A(z) '%1' névtér regisztrálása nem sikerült! + Cannot open database '%1' to optimize! Nem lehet optimalizálásra megnyitni a(z) '%1' adatbázist! + Cannot create directory: %1 - Nem lehet a könyvtárat létrehozni: %1 + A könyvtár létrehozása sikertelen: %1 + Cannot copy collection file: %1 - Nem lehet a gyűjtemény fájlt másolni: %1 + A gyűjtemény fájl másolása sikertelen: %1 + Cannot register filter %1! - Nem lehet regisztrálni a(z) %1 szűrőt! + A(z) %1 szűrő regisztrálása sikertelen! + Cannot open documentation file %1! - Nem lehet megnyitni a(z) %1 dokumentációs fájlt! + A(z) %1 dokumentációs fájl megnyitása sikertelen! + The namespace %1 was not registered! A(z) %1 névteret nem regisztrálták! + Namespace %1 already exists! A(z) %1 névtér már létezik! @@ -90,209 +113,325 @@ QHelpDBReader + Cannot open database '%1' '%2': %3 + 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 Nem lehet megnyitni az adatbázist '%1' '%2': %3 QHelpEngineCore + + Cannot open documentation file %1: %2! + Nem lehet megnyitni a(z) %1 fájlt: %2! + + + The specified namespace does not exist! - A meghatározott névtér nem létezik! + A megadott névtér nem létezik! QHelpEngineCorePrivate Cannot open documentation file %1: %2! - Nem lehet megnyitni a(z) %1 fájlt: %2! + Nem lehet megnyitni a(z) %1 fájlt: %2! QHelpGenerator + Invalid help data! - Érvénytelen segítség adat! + Érvénytelen súgó adat! + No output file name specified! - Nincsen kimeneti fájl meghatározva! + Nincsen kimeneti fájl megadva! + Building up file structure... Fájl struktúra felépítése... + The file %1 cannot be overwritten! - Nem lehet felülírni a(z) %1 fájlt! + A(z) %1 fájl felülírása sikertelen! + Cannot open data base file %1! - Nem lehet megnyitni a(z) %1 adatbázis fájlt! + A(z) %1 adatbázis fájl megnyitása sikertelen! + Cannot register namespace %1! Nem lehet regisztrálni a(z) %1 névteret! + Insert custom filters... - Szokásos szűrő beszúrása... + Egyedi szűrő hozzáadása... + Insert help data for filter section (%1 of %2)... - Segítség adatok beszúrása a szűrő szegmens számára (%1 %2-től)... + + Documentation successfully generated. - A dokumentáció legenerálása sikeresen lezajlott. + A dokumentáció generálása sikerült. + Some tables already exist! Néhány tábla már létezik! + Cannot create tables! - Nem lehet a táblákat létrehozni! + Nem lehet táblákat létrehozni! + Cannot register virtual folder! - Nem lehet registrálni a virtuális dossziét! + Nem lehet regisztrálni virtuális mappát! + Insert files... Fájlok beszúrása... + The referenced file %1 must be inside or within a subdirectory of (%2). Skipping it. - A(z) %1 hivatkozott fájlnak a(z) (%2) alkönyvtárán belül kell elhelyezkednie. Ennek kihagyása. + A(z) %1 hivatkozott fájlnak a(z) (%2) alkönyvtárán belül kell elhelyezkednie. A fájl kihagyása. + The file %1 does not exist! Skipping it. - A(z) %1 fájl nem létezik! Ennek kihagyása. + A(z) %1 fájl nem létezik! A fájl kihagyása. + Cannot open file %1! Skipping it. - Nem lehet megnyitni a(z) %1 fájlt! Ennek kihagyása. + Nem lehet megnyitni a(z) %1 fájlt! A fájl kihagyása. + The filter %1 is already registered! A(z) %1 szűrő már regisztrálva van! + Cannot register filter %1! - Nem lehet regisztrálni a(z) %1 szűrőt! + Az) %1 szűrő regisztrálása sikertelen! + Insert indices... Indexek beszúrása... + Insert contents... Tartalom beszúrása... + Cannot insert contents! - Nem lehet beszúrni a tartalmat! + A tartalom beszúrása sikertelen! + Cannot register contents! - Nem lehet regisztrálni a tartalmat! + A tartalom regisztrálása sikertelen! + + + + File '%1' does not exist. + A(z) '%1' fájl nem létezik. + + + + File '%1' cannot be opened. + A(z) '%1' nem nyitható meg. + + + + File '%1' contains an invalid link to file '%2' + A(z) '%1' érvénytelen hivatkozást tartalmaz a(z) '%2' fájlra + + + + Invalid links in HTML files. + Érvénytelen hivatkozások a HTML fájlokban. + + + + QHelpProject + + + Unknown token. + Ismeretlen token. + + + + Unknown token. Expected "QtHelpProject"! + Ismeretlen token. A várt: "QtHelpProject"! + + + + Error in line %1: %2 + Hiba a(z) %1. sorban: %2 + + + + A virtual folder must not contain a '/' character! + A virtuális mappa neve nem tartalmazhat '/' karaktert! + + + + A namespace must not contain a '/' character! + A névtér neve nem tartalmazhat '/' karaktert! + + + + Missing namespace in QtHelpProject. + Hiányzó névtér a QtHelpProject-ben. + + + + Missing virtual folder in QtHelpProject + Hiányzó virtuális mappa a QtHelpProject-ben + + + + Missing attribute in keyword at line %1. + Hiányzó attirbútum a kulcsszóban a(z) %1 sorban. + + + + The input file %1 could not be opened! + A(z) %1 bemeneti fájl megnyitása sikertelen! QHelpSearchQueryWidget + Search for: - Keresés erre: + Ezt keresi: + Previous search - Előző keresése + Előző találat + Next search - Következő keresése + Következő találat + Search Keresés + Advanced search Összetett keresés + words <B>similar</B> to: - szavak <B>hasonlóak</B> ehhez: + szavak, melyek <B>hasonlóak</B> ehhez: + <B>without</B> the words: Ezen szavak <B>nélkül</B>: + with <B>exact phrase</B>: <B>Pontos kifejezés</B>: + with <B>all</B> of the words: Ezen szavak<B>mindegyikével</B>: + with <B>at least one</B> of the words: <B>Legalább egy</B> a következő szavak közül: QHelpSearchResultWidget + + + %1 - %2 of %n Hits + + %1 - %2. a(z) %3 találatból + + + 0 - 0 of 0 Hits - 0 találat 0 - 0 + 0 - 0. a 0 találatból QHelpSearchResultWidgetPrivate %1 - %2 of %3 Hits - %3 Találat %1 - %2 + %1 - %2. a(z) %3 találatból QObject Unknown token. - Ismeretlen jel. + Ismeretlen token. Unknown token. Expected "QtHelpProject"! - Ismeretlen hel. "QtSegítségProjekt" várt! + Ismeretlen token. "QtHelpProject" várt! Error in line %1: %2 - Hiba a(z) %1 sorban: %2 + Hiba a(z) %1. sorban: %2 A virtual folder must not contain a '/' character! - A virtuális dosszié nem tartalmazhat '/' karaktert! + A virtuális mappa neve nem tartalmazhat '/' karaktert! A namespace must not contain a '/' character! - A névtér nem tartalmazhat '/' karaktert! + A névtér neve nem tartalmazhat '/' karaktert! Missing namespace in QtHelpProject. - Hiányzó névtér a QtSegítségProjektben. + Hiányzó névtér a QtHelpProject-ben. Missing virtual folder in QtHelpProject - Hiányzó virtuális dosszié a QtSegítségProjektben + Hiányzó virtuális mappa a QtHelpProject-ben. Missing attribute in keyword at line %1. - Hiányzó attirbútum a kulcsszóban a(z) %1 sorban. + Hiányzó attirbútum a kulcsszóban a(z) %1 sorban. The input file %1 could not be opened! - Nem sikerült megnyitni a(z) %1 bemeneti fájlt! + A(z) %1 bemeneti fájl megnyitása sikertelen! diff --git a/translations/qt_hu.ts b/translations/qt_hu.ts index ecc9826..7400bd5 100644 --- a/translations/qt_hu.ts +++ b/translations/qt_hu.ts @@ -2,19 +2,30 @@ + AudioOutput + + <html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html> + <html>A hangeszköz <b>%1</b> most nem használható.<br/>Visszaállás erre: <b>%2</b>.</html> + + + Revert back to device '%1' + Visszaállás a(z) '%1' eszközre + + + CloseButton - + Close Tab - Lap bezárása + Fül bezárása FakeReply - + Fake error ! - Hamisítási hiba ! + Teszt hiba ! @@ -23,11 +34,22 @@ + PPDOptionsModel + + Name + Név + + + Value + Érték + + + Phonon:: Notifications - Értesítések + Figyelmeztetések @@ -42,7 +64,7 @@ Communication - Kommunikáció + Társalgás @@ -52,7 +74,7 @@ Accessibility - Hozzáférhetőség + Kisegítő lehetőségek @@ -60,17 +82,17 @@ <html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html> - <html>Az audió visszajátszó eszköz <b>%1</b> nem működik.<br/>Visszavonul ide: <b>%2</b>.</html> + <html>A hangeszköz <b>%1</b> most nem használható.<br/>Visszaállítás erre: <b>%2</b>.</html> <html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html> - <html>Az audió visszajátszó eszközre kapcsolás <b>%1</b><br/>amely éppen elérhetővé vált és magasabb prioritása van.</html> + <html>Visszaállás a(z)<b>%1</b><br/>hangeszközre, mert az újra elérhető, és jobban preferált.</html> Revert back to device '%1' - Visszatérés a(z) '%1' eszközre + Visszaállás a(z) '%1' eszközre @@ -79,20 +101,30 @@ Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. Some video features have been disabled. - Figyelmeztetés: Úgy tűnik nem telepítette megfelelően a gstreamer0.10-plugins csomagot. - Néhány videó tulajdonság tiltva van. + Figyelmeztetés: Úgy tűnik, a gstreamer0.10-plugins-good nincs telepítve. + Néhány videóval kapcsolatos lehetőség le lesz tiltva. Warning: You do not seem to have the base GStreamer plugins installed. All audio and video support has been disabled - Figyelmeztetés: Úgy tűnik nem telepítette az alap GStreamer beépülő modulokat. - Az összes audió és videó támogatás tiltva van + Figyelmeztetés: Úgy tűnik nincs semmilyen GStreamer plugin telepítve. + Minden hang és videótámogatás le lesz tiltva Phonon::Gstreamer::MediaObject + Cannot start playback. + +Check your Gstreamer installation and make sure you +have libgstreamer-plugins-base installed. + A lejátszás elindítása sikertelen. + +Kérem, ellenőrizze, hogy a libgstreamer-plugins-base +telepített-e, és a gstreamer beállításai megfelelők-e. + + Cannot start playback. @@ -100,12 +132,12 @@ Check your GStreamer installation and make sure you have libgstreamer-plugins-base installed. Nem lehet elindítani a visszajátszást. -Ellenőrizze le a GStreamer telepítését és győzödjön meg róla, hogy installálta a libgstreamer-plugins-base csomagot. +Ellenőrizze le a GStreamer-t és győzödjön meg róla, hogy telepłtette-e a libgstreamer-plugins-base csomagot. A required codec is missing. You need to install the following codec(s) to play this content: %0 - Egy szükséges kódek hiányzik. A következő kódek(ek) telepítése szükséges ennek a tartalomnak a lejátszásához: %0 + Hiányzik egy kodek a lejátszáshoz. Kérem telepítse a következő kodek(eket): %0 @@ -117,95 +149,370 @@ Ellenőrizze le a GStreamer telepítését és győzödjön meg róla, hogy inst Could not open media source. - Nem sikerült megnyitni a média forrást. + A médiaforrás megnyitása sikertelen. Invalid source type. - Érvénytelen forrás típus. + Érvénytelen forrás. Could not locate media source. - Nem sikerült telepíteni a média forrást. + A médiaforrás nem található. Could not open audio device. The device is already in use. - Nem sikerült megnyitni az audió eszközt. Az eszköz már használatban van. + A hangeszköz megnyitása sikertelen, mert valami már használja. Could not decode media source. - Nem sikerült dekódolni a forrást. + A médiaforrás dekódolása sikertelen. Phonon::MMF - + Audio Output Audio kimenet The audio output device - A kimeneti audió eszköz + Audio kimenet - - - Phonon::MMF::AudioEqualizer - - Frequency band, %1 Hz - Frekvencia sáv, '%1' Hz + + No error + Nincs hiba + + + + Not found + Nem található - - - Phonon::MMF::EffectFactory - - Audio Equalizer - Audió hangszínszabályozó + + Out of memory + A memória elfogyott - Bass Boost - Basszus erősítés + Not supported + Nem támogatott + + + + Overflow + Túlcsordulás + + + + Underflow + Alulcsordulás + + + + Already exists + Már létezik + + + + Path not found + Az útvonal nem található + + + + In use + Használatban van + + + + Not ready + Nincs kész + + + + Access denied + Hozzáférés megtagadva + + + + Could not connect + Nem lehet kapcsolódni + + + + Disconnected + CHECKIT + Szétkapcsolva - Distance Attenuation - Távcsillapítás + Permission denied + Hozzáférés megtagadva + + + + Insufficient bandwidth + Elégtelen sávszélesség + + + + Network unavailable + A hálózat nem érhető el + + + + Network communication error + Hálózati kommunikációs hiba + + + + Streaming not supported + A streaming nem támogatott + + + + Server alert + Szerver probléma + + + + Invalid protocol + Érvénytelen protokoll + + + + Invalid URL + Érvénytelen URL + + + + Multicast error + Multicast hiba + + + + Proxy server error + Proxy szerver hiba + + + + Proxy server not supported + A proxy szerver nem támogatott + Audio output error + Hang kimeneti hiba + + - Environmental Reverb - Környezeti visszhang + Video output error + Video kimeneti hiba - Loudness - Hangosság + Decoder error + Dekódolási hiba - Source Orientation - Forrás orientáció + Audio or video components could not be played + A hang vagy a video komponens nem játszható le - Stereo Widening - Sztereó szélesség + DRM error + DRM hiba + + + + Unknown error (%1) + Ismeretlen hiba (%1) + + + + Phonon::MMF::AbstractMediaPlayer + + + Not ready to play + Nem tud még lejátszani + + + + + Error opening file + Hiba a fájl megnyitásakor + + + + Error opening URL + Hiba az URL megnyitásakor + + + + Setting volume failed + A hangerő beállítása sikertelen + + + + Playback complete + A lejátszás befejeződött + + + + Phonon::MMF::AudioEqualizer + + + %1 Hz + %1 Hz + + + + Phonon::MMF::AudioPlayer + + + Getting position failed + A pozíció megállapítása sikertelen + + + + Opening clip failed + A klip megnyitása sikertelen + + + + Phonon::MMF::EffectFactory + + + Enabled + Engedélyezve + + + + Phonon::MMF::EnvironmentalReverb + + + Decay HF ratio (%) + DecayHFRatio: Ratio of high-frequency decay time to the value specified by DecayTime. + NF lecsengés arány (%) + + + + Decay time (ms) + DecayTime: Time over which reverberation is diminished. + NF lecsengés idő (ms) + + + + Density (%) + 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. + Visszaverődési sűrűség (%) + + + + Diffusion (%) + 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. + Visszaverődési diffúzió (%) + + + + Reflections delay (ms) + ReflectionsDelay: Amount of delay between the arrival the direct path from the source and the arrival of the first reflection. + Visszaverődés késleltetése (ms) + + + + Reflections level (mB) + ReflectionsLevel: Amplitude of reflections. This value is corrected by the RoomLevel to give the final reflection amplitude. + Visszaverődés szintje (mB) + + + + Reverb delay (ms) + ReverbDelay: Amount of time between arrival of the first reflection and start of the late reverberation. + Visszhang késleltetés (ms) + + + + Reverb level (mB) + ReverbLevel Amplitude of reverberations. This value is corrected by the RoomLevel to give the final reverberation amplitude. + Visszhang szint (mB) + + + + Room HF level + RoomHFLevel: Amplitude of low-pass filter used to attenuate the high frequency component of reflected sound. + Szoba NF elnyelés szint + + + + Room level (mB) + RoomLevel: Master volume control for all reflected sound. + Szoba szint (mB) Phonon::MMF::MediaObject - - Media type could not be determined - Nem lehetet meghatározni a média típust + + Error opening source: type not supported + Hiba a forrás megnyitásakor: a típus nem támogatott + + + + Error opening source: media type could not be determined + Hiba a forrás megnyitásakor: a média típusa nem állapítható meg + + + + Phonon::MMF::StereoWidening + + + Level (%) + Szint (%) + + + + Phonon::MMF::VideoPlayer + + + Pause failed + A megállítás sikertelen + + + + Seek failed + A tekerés sikertelen + + + + Getting position failed + A pozíció megállapłtása sikertelen + + + + Opening clip failed + A klip megnyitása sikertelen + + + + Buffering clip failed + A klip pufferelése sikertelen + + + + + + + + Video display error + Videó megjelenítési hiba @@ -223,12 +530,12 @@ Ellenőrizze le a GStreamer telepítését és győzödjön meg róla, hogy inst Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1% - Használja ezt a csúszkát a hangerő szabályozásához. A legbaloldalib pozíció: 0%, a legjobboldalibb %1% + A csúszka segítségével állíthatja be a hangerőt. A bal szélső pozíció 0%-ot, a jobb szélső %1%-ot jelent Muted - Elnémított + Elnémítva @@ -241,7 +548,7 @@ Ellenőrizze le a GStreamer telepítését és győzödjön meg róla, hogy inst Ambiguous %1 not handled - Félreérthető %1 nincs lekezelve + A nem egyértelmű %1 nem lesz kezelve @@ -275,9 +582,9 @@ Ellenőrizze le a GStreamer telepítését és győzödjön meg róla, hogy inst Q3FileDialog - + Copy or Move a File - Egy fájl másolása vagy mozgatása + Fájl másolása vagy áthelyezése @@ -294,15 +601,15 @@ Ellenőrizze le a GStreamer telepítését és győzödjön meg róla, hogy inst Cancel - Mégse + Mégsem - + All Files (*) - Az összes fájl (*) + Minden fájl (*) @@ -338,19 +645,19 @@ Ellenőrizze le a GStreamer telepítését és győzödjön meg róla, hogy inst Look &in: - &Benéz: + Keresés &itt: File &name: - Fájl &név: + Fájl &neve: File &type: - Fájl &típus: + Fájl &típusa: @@ -360,12 +667,12 @@ Ellenőrizze le a GStreamer telepítését és győzödjön meg róla, hogy inst One directory up - Egy könyvtárral kintebb + Egy szinttel feljebb Create New Folder - Új mappa létrehozása + Új könyvtár létrehozása @@ -380,17 +687,17 @@ Ellenőrizze le a GStreamer telepítését és győzödjön meg róla, hogy inst Preview File Info - Fájl információ előnézet + Fájlinformációk előnézete Preview File Contents - Fájl tartalom előnézet + Fájltartalom előnézete Read-write - Írás olvasás + Írható-olvasható @@ -405,22 +712,22 @@ Ellenőrizze le a GStreamer telepítését és győzödjön meg róla, hogy inst Inaccessible - Hozzáférhetetlen + Nem elérhető Symlink to File - Szimlink a fájlra + Szimbolikus link a fájlra Symlink to Directory - Szimlink a könyvtárra + Szimbolikus link a könyvtárra Symlink to Special - Szimlink egy speciálisra + Szimbolikus link a speciális fájlra @@ -435,7 +742,7 @@ Ellenőrizze le a GStreamer telepítését és győzödjön meg róla, hogy inst Special - Speciális + Speciális fájl @@ -461,12 +768,12 @@ Ellenőrizze le a GStreamer telepítését és győzödjön meg róla, hogy inst &Save - &Mentés + Menté&s &Rename - &Átnevezés + Át&nevezés @@ -476,27 +783,27 @@ Ellenőrizze le a GStreamer telepítését és győzödjön meg róla, hogy inst R&eload - &Újratöltés + B&etöltés újra Sort by &Name - Rendezés &Név alapján + Rendezés &név szerint Sort by &Size - Rendezés &Méret alapján + Rendezés &méret szerint Sort by &Date - Rendezés &Dátum alapján + Rendezés &dátum szerint &Unsorted - &Rendezetlen + Nin&cs rendezés @@ -521,7 +828,7 @@ Ellenőrizze le a GStreamer telepítését és győzödjön meg róla, hogy inst the symlink - a szimlink + a szimbolikus link @@ -531,7 +838,7 @@ Ellenőrizze le a GStreamer telepítését és győzödjön meg róla, hogy inst <qt>Are you sure you wish to delete %1 "%2"?</qt> - <qt>Biztos benne, hogy törölni kívánja a(z) %1 "%2"?</qt> + <qt>Biztosan törölni akarja ezt: %1 "%2"?</qt> @@ -546,22 +853,22 @@ Ellenőrizze le a GStreamer telepítését és győzödjön meg róla, hogy inst New Folder 1 - Új mappa 1 + Új könyvtár 1 New Folder - Új mappa + Új könyvtár New Folder %1 - Új mappa %1 + Új könyvtár %1 Find Directory - Könyvtár keresése + Keresés a könyvtárban @@ -586,23 +893,23 @@ Ellenőrizze le a GStreamer telepítését és győzödjön meg róla, hogy inst File not found. Check path and filename. %1 -Fájl nem található -Útvonal és fájlnév ellenőrzése. +A fájl nem található. +Ellenőrizze a fájl nevét és elérési útját. All Files (*.*) - Az összes fájl (*.*) + Minden fájl (*.*) Open - Megnyitás + Megnyitás Select a Directory - Egy könyvtár kiválasztása + Könyvtár kiválasztása @@ -612,21 +919,21 @@ Fájl nem található Could not read directory %1 - Nem sikerült a könytárat olvasni + A könyvtár nem olvasható: %1 Could not create directory %1 - Nem sikerült létrehozni a könyvtárat + A könyvtár nem hozható létre: %1 Could not remove file or directory %1 - Nem sikerült eltávolítani egy fájlt vag könyvtárat + A fájl vagy könyvtár nem törölhető: %1 @@ -635,23 +942,23 @@ Fájl nem található %1 to %2 - Nem sikerült átnevezni ezt + Nem nevezhető át %1 -erre +erre: %2 Could not open %1 - Nem sikerült megnyitni + Nem nyitható meg: %1 Could not write %1 - Nem sikerült írni + Nem írható: %1 @@ -660,12 +967,12 @@ erre Line up - Egy sorral feljebb + Igazítás Customize... - Egyéni... + Testreszabás... @@ -673,7 +980,7 @@ erre Operation stopped by the user - A felhasználó leállította a műveletet + A műveletet a felhasználó megszakította @@ -682,7 +989,7 @@ erre Cancel - Mégse + Mégsem @@ -696,7 +1003,7 @@ erre Apply - Alkalmazza + Alkalmaz @@ -706,12 +1013,12 @@ erre Defaults - Alapértelemett + Alapértelmezések Cancel - Mégse + Mégsem @@ -724,7 +1031,7 @@ erre &Redo - &Helyreállítás + Új&ra @@ -744,13 +1051,13 @@ erre Clear - Kiürítés + Törlés Select All - Az összes kiválasztása + Összes kijelölése @@ -763,7 +1070,7 @@ erre Restore up - Felállítás + Visszaállítás @@ -773,12 +1080,12 @@ erre Restore down - Leállítás + Előző méret Maximize - Maximalizálás + Teljes méret @@ -788,37 +1095,41 @@ erre Contains commands to manipulate the window - Tartalmazza az ablak manipulációs parancsokat + Parancsokat tartalmaz az ablak kezeléséhez Puts a minimized window back to normal - Egy minimalizált ablak normálra visszatétele + Helyreállítja a kis méretre tett ablakot + + + Puts a minimized back to normal + A kis méretű ablakot normál méretűre állítja vissza Moves the window out of the way - Az ablak félreeső helyre mozgatása + Elmozgatja az ablakot az útból Puts a maximized window back to normal - Maximalizált ablak normálra visszatétele + A teljes méretű ablakot normál méretűre állítja vissza Makes the window full screen - Az ablak maximális méretűvé tétele + Az ablakot teljes képernyő méretűre növeli Closes the window - Az ablak bezárása + Bezárja az ablakot Displays the name of the window and contains controls to manipulate it - Az ablak nevének megjelenítése és manipuláláshoz szükséges vezérlő elemek tartalmazása + Megjeleníti az ablak nevét, és kezelőket a megváltoztatásukhoz @@ -826,7 +1137,7 @@ erre More... - További... + Továbbiak... @@ -836,43 +1147,43 @@ erre The protocol `%1' is not supported - A(z) '%1' protokoll nem támogatott + A(z) `%1' protokoll nem támogatott The protocol `%1' does not support listing directories - A(z) '%1' protokoll nem támogatja a könyvtár listázást + A(z) `%1' protokoll nem támogatja a könyvtárak tartalmának listázását The protocol `%1' does not support creating new directories - A(z) '%1' protokoll nem támogatja az új könyvtárak létrehozását + A(z) `%1' protokoll nem támogatja könyvtárak létrehozását The protocol `%1' does not support removing files or directories - A(z) '%1' protokoll nem támogatja fájlok vagy könyvtárat áthelyezését + A(z) '%1' protokoll nem támogatja a fájlok vagy könyvtárak törlését The protocol `%1' does not support renaming files or directories - A(z) '%1' protokoll nem támogatja fájlok vagy könyvtárat átnevezését + A(z) '%1' protokoll nem támogatja a fájlok vagy könyvtárak átnevezését The protocol `%1' does not support getting files - A(z) '%1' protokoll nem támogatja fájlok szerzését + A(z) '%1' protokoll nem támogatja a fájlok letöltését The protocol `%1' does not support putting files - A(z) '%1' protokoll nem támogatja fájlok betevését + A(z) '%1' protokoll nem támogatja a fájlok feltöltését The protocol `%1' does not support copying or moving files or directories - A(z) '%1' protokoll nem támogatja fájlok vagy könyvtárak mozgatását vagy másolását + A(z) '%1' protokoll nem támogatja a fájlok vagy könyvtárak másolását vagy áthelyezését @@ -886,7 +1197,7 @@ erre &Cancel - &Mégse + &Mégsem @@ -912,64 +1223,65 @@ erre QAbstractSocket - - + + + + Operation on socket is not supported + A művelet nem támogatott socketeken + + + + Host not found - A hoszt nem található + A kiszolgáló nem található Connection refused - A kapcsolódás elutasítva + A kapcsolat elutasítva Connection timed out - Kapcsolódási időtúllépés - - - - - - Operation on socket is not supported - A socket művelet nem támogatott + A kapcsolat várakozási ideje lejárt - + + Socket operation timed out Socket művelet időtúllépés - + Socket is not connected - Socket nincs csatlakoztatva + A socket nem kapcsolódott Network unreachable - A hálózat nem elérhető + A hálózat nem érhető el QAbstractSpinBox - + &Step up - &Növelés + Lépés &felfelé Step &down - &Csökkentés + Lépés &lefelé &Select All - Az összes &kiválasztása + Ö&sszes kijelölése @@ -977,36 +1289,75 @@ erre Press - Megnyomás + Nyomja meg + + + + QAction + + Options + Opciók + + + Select + Kiválasztás + + + Back + Vissza + + + Next + Előre + + + Previous + Előző + + + Ok + Ok + + + Cancel + Mégsem + + + Edit + Szerkesztés + + + View + Nézet QApplication - - QT_LAYOUT_DIRECTION - Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout. - QT_LAYOUT_DIRECTION + + Activate + Aktiválás Executable '%1' requires Qt %2, found Qt %3. - A(z) '%1' futtatható fájl igényli a Qt %2, de Qt %3.-t talált. + '%1' program Qt %2-t igényel (Qt %3 van telepítve). Incompatible Qt Library Error - Inkompatibilis Qt könyvtár hiba + Hiba: inkompatíbilis Qt függvénykönyvtár - - Activate - Aktiválás + + QT_LAYOUT_DIRECTION + Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout. + LTR - + Activates the program's main window - A program fő ablakának aktiválása + Aktívvá teszi a program főablakát @@ -1024,12 +1375,12 @@ erre &Cancel - &Mégse + &Mégsem COM &Object: - COM &Objektum: + COM &objektum: @@ -1037,40 +1388,40 @@ erre Uncheck - Nincs bejelölve + Kijelölés megszüntetése Check - Bejelölve + Kijelölés Toggle - Kapcsolgatás + Váltás QColorDialog - + Hu&e: - &Színárnyalat: + Á&rnyalat: &Sat: - &Sat: + &Telítettség: &Val: - &Érték: + &Fényerő: &Red: - &Piros: + &Vörös: @@ -1090,22 +1441,38 @@ erre Select Color - Szín kiválasztása + Szín választás - + &Basic colors - &Alap színek + Ala&p színek &Custom colors - &Egyéni színek + &Saját színek + + + &Define Custom Colors >> + Saját színek &megadása >> + + + OK + OK + + + Cancel + Mégsem &Add to Custom Colors - &Egyéni színek hozzáadása + Hozzá&adás a saját színekhez + + + Select color + Szín kiválasztása @@ -1135,22 +1502,9 @@ erre QCoreApplication - - %1: key is empty - QSystemSemaphore - %1:kulcs üres - - - - %1: unable to make key - QSystemSemaphore - %1: nem lehet kulcsot csinálni - - - - %1: ftok failed + %1: permission denied QSystemSemaphore - %1: ftok hiba + %1: hozzáférés megtagadva @@ -1159,16 +1513,21 @@ erre %1: már létezik + %1: doesn't exists + QSystemSemaphore + %1: nem található + + %1: does not exist QSystemSemaphore - %1: nem létezik + %1: még nem létezik %1: out of resources QSystemSemaphore - %1: elfogytak az erőforrások + %1: az erőforrások elfogytak @@ -1176,62 +1535,80 @@ erre QSystemSemaphore %1: ismeretlen hiba %2 + + + %1: key is empty + QSystemSemaphore + %1: a kulcs hiányzik + + + + %1: unable to make key + QSystemSemaphore + %1: a kulcs elkészítése sikertelen + + + + %1: ftok failed + QSystemSemaphore + %1: ftok hibát adott vissza + QDB2Driver - + Unable to connect - Nem lehet csatlakozni + Nem sikerült kapcsolódni Unable to commit transaction - Nem lehet kommitolni a tranzakciót + A tranzakció nem véglegesíthető Unable to rollback transaction - Nem lehet visszagörgetni a tranzakciót + A tranzakció nem görgethető vissza Unable to set autocommit - Nem lehet beállítani az automatikus kommitolást + Az automatikus véglegesítés nem állítható be QDB2Result - + Unable to execute statement - Nem lehet végrehajtani a műveletet + A művelet nem hajtható végre Unable to prepare statement - Nem lehet felkészülni a műveletre + A művelet előkészítése nem lehetséges Unable to bind variable - Nem lehet összekötni a változót + A változó nem rögzíthető Unable to fetch record %1 - Nem lehet letölteni a(z) %1 felvételt + A(z) %1. rekord nem olvasható ki Unable to fetch next - Nem lehet letölteni a következőt + A következő rekord nem olvasható ki Unable to fetch first - Nem lehet letölteni az elsőt + Az első rekord nem érhető el @@ -1239,2552 +1616,4549 @@ erre AM - AM + DE am - am + de PM - PM + DU pm - pm + du - QDial - - - QDial - QDial - + QDeclarativeAbstractAnimation - - SpeedoMeter - Sebességmérő + + Cannot animate non-existent property "%1" + Nem lehet animálni a hiányzó "%1" tulajdonság nélkül - - SliderHandle - CsúszkaKezelő + + Cannot animate read-only property "%1" + Nem lehet animálni a csak olvasható "%1" tulajdonsággal - QDialog + QDeclarativeAnchors - - What's This? - Mi ez? + + Possible anchor loop detected on fill. + Lehetséges horgony hurok észlelhető egy festésen. - - Done - Kész + + Possible anchor loop detected on centerIn. + Lehetséges horgony hurok észlelhető a középvonalon. - - - QDialogButtonBox - - - - OK - OK + + + + + Cannot anchor to an item that isn't a parent or sibling. + Nem lehet egy olyan elemhez horgonyozni, mely nem szülő vagy gyermek. - - Save - Mentés + + Possible anchor loop detected on vertical anchor. + Lehetséges horgony hurok észlelhető egy függőleges horgonyon. - - &Save - &Mentés + + Possible anchor loop detected on horizontal anchor. + Lehetséges horgony hurok észlelhető egy vízszintes horgonyon. - - Open - Megnyitás + + Cannot specify left, right, and hcenter anchors. + Nem lehet egyszerre bal, jobb, és vízszintes közép horgonyokat megadni. - - Cancel - Mégse + + + Cannot anchor to a null item. + Nem lehet egy null elemhez horgonyozni. - - &Cancel - &Mégse + + Cannot anchor a horizontal edge to a vertical edge. + Nem lehet a vízszintes vagy a függőleges szélekhez horgonyozni. - - Close - Bezárás + + + Cannot anchor item to self. + Nem lehet egy elemet önmagához horgonyozni. - - &Close - &Bezárás + + Cannot specify top, bottom, and vcenter anchors. + Nem lehet egyszerre felső, alsó, és függőleges közép horgonyokat megadni. - - Apply - Alkalmazza + + Baseline anchor cannot be used in conjunction with top, bottom, or vcenter anchors. + Alapvonali horgonyt nem lehet összekapcsolni felső, alsó, vagy függőleges közép horgonyokkal. - - Reset - Visszaállítás + + Cannot anchor a vertical edge to a horizontal edge. + Nem lehet a vízszintes szélt a függőlegeshez horgonyozni. + + + QDeclarativeBehavior - - Help - Súgó + + Cannot change the animation assigned to a Behavior. + Nem lehet egy Behavior elemhez rendelt animációt módosítani. + + + QDeclarativeBinding - - Don't Save - Ne mentse + + Binding loop detected for property "%1" + Kötési hurok észlelhető a(z) "%1" tulajdonságon + + + QDeclarativeCompiler - - Discard - Eldob + + + + + Invalid property assignment: "%1" is a read-only property + Érvénytelen tulajdonság-hozzárendelés: "%1" egy csak olvasható tulajdonság - - &Yes - &Igen + + Invalid property assignment: unknown enumeration + Érvénytelen tulajdonság-hozzárendelés: ismeretlen felsorolás - - Yes to &All - Igen az &összesre + + Invalid property assignment: string expected + Érvénytelen tulajdonság-hozzárendelés: szöveges érték szükséges - &No - &Nem + Invalid property assignment: url expected + Érvénytelen tulajdonság-hozzárendelés: URL szükséges - - N&o to All - &Nem az összesre + + Invalid property assignment: unsigned int expected + Érvénytelen tulajdonság-hozzárendelés: előjel nélküli egész érték szükséges - - Save All - Az összes mentése + + Invalid property assignment: int expected + Érvénytelen tulajdonság-hozzárendelés: egész érték szükséges - - Abort - Megszakítás + + Invalid property assignment: float expected + Érvénytelen tulajdonság-hozzárendelés: lebegőpontos érték szükséges - - Retry - Újra próbálkozás + + Invalid property assignment: double expected + Érvénytelen tulajdonság-hozzárendelés: duplapontos érték szükséges - - Ignore - Mellőzés + + Invalid property assignment: color expected + Érvénytelen tulajdonság-hozzárendelés: szín szükséges - - Restore Defaults - Alapértelemezett beállítások visszaállítása + + Invalid property assignment: date expected + Érvénytelen tulajdonság-hozzárendelés: dátum szükséges - - Close without Saving - Bezárás mentés nélkül + + Invalid property assignment: time expected + Érvénytelen tulajdonság-hozzárendelés: idő szükséges - - &OK - &OK + + Invalid property assignment: datetime expected + Érvénytelen tulajdonság-hozzárendelés: datetime érték szükséges - - - QDirModel - - Name - Név + + Invalid property assignment: point expected + Érvénytelen tulajdonság-hozzárendelés: pont szükséges - - Size - Méret + + Invalid property assignment: size expected + Érvénytelen tulajdonság-hozzárendelés: méret szükséges - - Kind - Match OS X Finder - Fajta + + Invalid property assignment: rect expected + Érvénytelen tulajdonság-hozzárendelés: téglalap szükséges - - Type - All other platforms - Típus + + Invalid property assignment: boolean expected + Érvénytelen tulajdonság-hozzárendelés: boolean érték szükséges - - Date Modified - Dátum módosítva + + Invalid property assignment: 3D vector expected + Érvénytelen tulajdonság-hozzárendelés: 3D vektor szükséges - - - QDockWidget - - Close - Bezárás + + Invalid property assignment: unsupported type "%1" + Érvénytelen tulajdonság-hozzárendelés: nem támogatott típus: "%1" - - Dock - Dokkolás + + Component elements may not contain properties other than id + A Component elemek nem tartalmazhatnak az id-n kívűl más tulajdonságot - - Float - Lebegtetés + + Component elements may not contain script blocks + A Component elemek nem tartalmazhatnak parancsblokkokat - - - QDoubleSpinBox - - More - Több + + Invalid component id specification + Érvénytelen komponens azonosító megadás - - Less - Kevesebb + + + id is not unique + Az azonosító nem egyedi - - - QErrorMessage - - &Show this message again - Az üzenet újbóli &megjelenítése + + Invalid component body specification + Érvénytelen komponens-törzs megadás - - &OK - &OK + + Cannot create empty component specification + Nem lehet üres komponenst megadni - - Debug Message: - Debug üzenet: + + Invalid Script block. Specify either the source property or inline script + Érvénytelen Script blokk. Adja meg a source tulajdonságot vagy ágyazzon be parancsokat - - Warning: - Figyelmeztetés: + + Invalid Script source value + Érvénytelen Script source érték - - Fatal Error: - Végzetes hiba: + + Properties cannot be set on Script block + A tulajdonságok nem módosíthatók Script blokkból - - - QFile - - - Destination file exists - A cél fájl létezik + + Invalid Script block + Érvénytelen Script blokk - - Will not rename sequential file using block copy - Blokkos másolásnál nem lesznek átnevezve az egymást követő fájlok + + Incorrectly specified signal + Hibásan megadott jelzés (signal) - - Cannot remove source file - Nem lehet a forrás fájlt eltávolítani + + Empty signal assignment + Üres jelzés (signal) hozzárendelés - - Cannot open %1 for input - Nem lehet megnyitni %1-t bementre + + Empty property assignment + Üres tulajdonság hozzárendelés - - Cannot open for output - Nem lehet megnyitni a kimenetre + + Attached properties cannot be used here + A csatolt tulajdonságok nem használhatók - - Failure to write block - Hiba történt a blokk írás közben + + + Non-existent attached object + Nem létező csatolt objektum - - Cannot create %1 for output - Nem lehet létrehozni a(z) %1-t kimenetre + + + Invalid attached object assignment + Érvénytelen objektumcsatolás - - - QFileDialog - - - All Files (*) - Az összes fájl (*) + + Cannot assign to non-existent default property + Nem lehet hozzárendelni egy nem létező alapértelmezett tulajdonságot - - - Back - Vissza + + + Cannot assign to non-existent property "%1" + Nem lehet hozzárendelni a nem létező "%1" tulajdonságot - - - List View - Lista nézet + + Invalid use of namespace + Érvénytelen névtérhasználat - - - Detail View - Részletes nézet + + Not an attached property name + Ez nem egy csatolt tulajdonságnév - - - File - Fájl + + Invalid use of id property + Az id tulajdonság érvénytelen használata - - Open - Megnyitás + + "%1" is not a valid object id + "%1" nem érvényes objektumazonosító + + + + id conflicts with type name + Az id ütközik a típus nevével - Save As - Mentés másként + id conflicts with namespace prefix + Az id ütközik a névtér előtaggal - - - - &Open - &Megnyitás + + Invalid value in grouped property + Érvénytelen érték a csoportos tulajdonságon - - - &Save - &Mentés + + + Invalid grouped property access + Érvénytelen csoportos tulajdonság-hozzáférés - - Recent Places - Utolsó helyek + + Invalid property use + Tulajdonság érvénytelen használata - - &Rename - &Átnevezés + + Property assignment expected + Tulajdonság hozzárendelés szükséges - - &Delete - &Törlés + + Single property assignment expected + Egyetlen tulajdonság hozzárendelése szükséges - - Show &hidden files - &Rejtett fájlok megjelenítése + + Unexpected object assignment + Váratlan objektum-hozzárendelés - - New Folder - Új mappa + + Cannot assign object to list + Nem lehet objektumot listához rendelni - - Find Directory - Könyvtár keresése + + Can only assign one binding to lists + - - Directories - Könyvtárak + + Cannot assign primitives to lists + Nem lehet primitiv típusokat listához rendelni - - All Files (*.*) - Az összes fájl (*.*) + + Cannot assign multiple values to a script property + Nem lehet több értéket rendelni script tulajdonsághoz - - - Directory: - Könyvtár: + + Invalid property assignment: script expected + Érvénytelen tulajdonság-hozzárendelés: script szükséges - - %1 already exists. -Do you want to replace it? - A(z) %1 már létezik. -Szeretné lecserélni? + + Cannot assign object to property + CHECKIT + Nem lehet objektumot rendelni tulajdonsághoz - - %1 -File not found. -Please verify the correct file name was given. - %1 -Fájl nem található. -Kérem ellenőrizze, hogy helyes fájlnevet adott meg. + + Duplicate default property + CHECKIT + Dupla alapértelmezett tulajdonság - - My Computer - Sajátgép + + Duplicate property name + CHECKIT + Dupla tulajdonságnév - - - Parent Directory - Szülő könyvtár + + Duplicate signal name + CHECKIT + Dupla jelzés név - - - Files of type: - Típusfájlok: + + Duplicate method name + CHECKIT + Dupla metódus név - - - %1 -Directory not found. -Please verify the correct directory name was given. - %1 -A könyvtár nem található. -Kérem ellenőrizze le, hogy helyes könyvtár nevet adott meg. + + Invalid property nesting + Érvénytelen tulajdonság illesztés - - '%1' is write protected. -Do you want to delete it anyway? - A(z) '%1' írásvédett. -Mégis törölni szeretné? + + Cannot override FINAL property + Nem lehet FINAL tulajdonságot felülbírálni - - Are sure you want to delete '%1'? - Törölni szeretné '%1'? + + Invalid property type + Érvénytelen tulajdonság típus - - Could not delete directory. - Nem sikerült törölni a könyvtárat. + + + No property alias location + - - Drive - Vezérlő + + + Invalid alias location + - - File Folder - Match Windows Explorer - Fájl mappa + + Invalid alias reference. An alias reference must be specified as <id> or <id>.<property> + Érvénytelen álnév-referencia. Az álnév-referenciának <id> vagy <id>.<property> formátumúnak kell lennie - - Folder - All other platforms - Mappa + + Invalid alias reference. Unable to find id "%1" + Érvénytelen álnév-referencia. A(z) "%1" azonosító nem létezik + + + QDeclarativeCompositeTypeManager - - Alias - Mac OS X Finder - Álnév + + + Resource %1 unavailable + A(z) %1 erőforrás nem érhető el + + + + Import %1 unavailable + A(z) %1 import nem érhető el + + + + Namespace %1 cannot be used as a type + A(z) %1 névtér nem használható típusként - Shortcut - All other platforms - Gyorsbillentyű + %1 is not a type + %1 nem típus + + + + Type %1 unavailable + A(z) %1 típus nem érhető el + + + QDeclarativeConnections + + - Unknown - Ismeretlen + Cannot assign to non-existent property "%1" + Nem lehet hozzárendelni a nem létező "%1" tulajdonsághoz - - Show - Megjelenítés + + Connections: nested objects not allowed + Kapcsolatok: az illesztett objektumok nem engedélyezettek - - - Forward - Előre + + Connections: syntax error + Kapcsolatok: szintakszishiba - - &New Folder - &Új mappa + + Connections: script expected + Kapcsolatok: script szükséges + + + QDeclarativeEngine - - - &Choose - &Kiválasztás + + executeSql called outside transaction() + Az executeSql a transaction()-on kívülről lett meghívva - - Remove - Eltávolítás + + Read-only Transaction + Csak olvasható tranzakció - - - File &name: - Fájl &név: + + Version mismatch: expected %1, found %2 + Verzió eltérés: várt: %1, kapott: %2 - - - Look in: - Benéz: + + SQL transaction failed + Az SQL tranzakció sikertelen - - - Create New Folder - Új mappa létrehozása + + transaction: missing callback + tranzakció: hiányzó callback + + + + + SQL: database version mismatch + SQL: adatbázis verzió eltérés - QFileSystemModel + QDeclarativeFlipable - - - %1 TB - %1 TB + + front is a write-once property + a front csak egyszer írható tulajdonság - - - %1 GB - %1 GB + + back is a write-once property + a back csak egyszer írható tulajdonság + + + QDeclarativeInfo - - - %1 MB - %1 MB + + + unknown location + ismeretlen hely + + + QDeclarativeListModel - - - %1 KB - %1 KB + + remove: index %1 out of range + remove: a(z) %1 index túl nagy - - %1 bytes - %1 bájt + + insert: value is not an object + insert: az érték nem objektum - - Invalid filename - Érvénytelen fájlnév + + insert: index %1 out of range + insert: a(z) %1 index túl nagy - - <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. - <b>A(z) "%1" név nem használható.</b><p>Próbáljon meg más nevet használni, kevesebb karakterrel vagy írásjelekek nélkül. + + move: out of range + move: határokon kívül - - Name - Név + + append: value is not an object + append: az érték nem objektum - - Size - Méret + + get: index %1 out of range + get: a(z) %1 index túl nagy - - Kind - Match OS X Finder - Fajta + + set: value is not an object + set: az érték nem objektum - - Type - All other platforms - Típus + + + set: index %1 out of range + set: a(z) %1 index túl nagy - - Date Modified - Dátum módosítva + + ListElement: cannot use default property + ListElement: nem lehet az alapértelmezett tulajdonságot használni - - My Computer - Sajátgép + + ListElement: cannot use reserved "id" property + ListElement: nem lehet a lefoglalt "id" tulajdonságot használni - - Computer - Számítógép + + ListElement: cannot use script for property value + ListElement: nem lehet scriptet használni tulajdonság értéknek - - %1 byte(s) - %1 bájt + + ListModel: undefined property '%1' + ListModel: nem definiált tulajdonság: '%1' - QFontDatabase + QDeclarativeParentAnimation - - - Normal - Normál + + Unable to preserve appearance under complex transform + Nem lehet a kinézetet megőrizni a komplex transzformáció alatt - - - - Bold - Kövér + + + Unable to preserve appearance under non-uniform scale + Nem lehet a kinézetet megőrizni a nem-uniform skálázás alatt - - - Demi Bold - Félkövér + + Unable to preserve appearance under scale of 0 + + + + QDeclarativeParentChange - - - - Black - Fekete + + Unable to preserve appearance under complex transform + - - Demi - Fél + + + Unable to preserve appearance under non-uniform scale + - - - Light - Világos + + Unable to preserve appearance under scale of 0 + + + + QDeclarativeParser - - - Italic - Dőlt + + Illegal character + - - - Oblique - Homályos + + Unclosed string at end of line + - - Any - Bármilyen + + Illegal escape squence + - - Latin - Latin + + Illegal unicode escape sequence + - - Greek - Görög + + Unclosed comment at end of file + - - Cyrillic - Ciril + + Illegal syntax for exponential number + - - Armenian - Örmény + + Identifier cannot start with numeric literal + - - Hebrew - Héber + + Unterminated regular expression literal + - - Arabic - Arab + + Invalid regular expression flag '%0' + - - Syriac - Szíriai + + + Syntax error + - - Thaana - Thana + + Unexpected token `%1' + - - Devanagari - Dévanágari + + + Expected token `%1' + - - Bengali - Bengáli + + Expected type name + - - Gurmukhi - Gurmukhi + + Invalid use of Script block + - - Gujarati - Gujarati + + Invalid import qualifier ID + - - Oriya - Oriya + + Library import requires a version + - - Tamil - Tamil + + Expected parameter type + - - Telugu - Telugu + + Invalid property type modifier + - - Kannada - Kanadai + + Unexpected property type modifier + - - Malayalam - Maláj + + Expected property type + - - Sinhala - Sinhala + + Readonly not yet supported + - - Thai - Tájföldi + + JavaScript declaration outside Script element + - - Lao - Lao + + Variable declarations not allow in inline Script blocks + + + + QDeclarativePauseAnimation - - Tibetan - Tibeti + + Cannot set a duration of < 0 + + + + QDeclarativePropertyAnimation - - Myanmar - Mianmari + + Cannot set a duration of < 0 + + + + QDeclarativePropertyChanges - - Georgian - Grúz + + Cannot assign to non-existent property "%1" + - Khmer - Khmer + Cannot assign to read-only property "%1" + + + + QDeclarativeTextInput - - Simplified Chinese - Egyszerűsített kínai + + + Could not load cursor delegate + - - Traditional Chinese - Hagyományos kínai + + Could not instantiate cursor delegate + + + + QDeclarativeVME - - Japanese - Japán + + Unable to create object of type %1 + - - Korean - Koreai + + Cannot assign value %1 to property %2 + - - Vietnamese - Vietnámi + + Cannot assign object type %1 with no default method + - Symbol - Szimbólum + Cannot connect mismatched signal/slot %1 %vs. %2 + - - Ogham - Ogham + + Cannot assign an object to signal property %1 + - - Runic - Székely + + Cannot assign object to list + - - N'Ko - N'Ko + + Cannot assign object to interface property + + + + + Unable to create attached object + + + + + Cannot set properties on %1 as it is null + - QFontDialog + QDeclarativeVisualDataModel - - &Font - &Betű + + Delegate component must be Item type. + + + + QDeclarativeXmlListModelRole - - Font st&yle - Betű st&ílus + + An XmlRole query must not start with '/' + + + + QDeclarativeXmlRoleList - - &Size - &Méret + + An XmlListModel query must start with '/' or "//" + + + + QDial - - Effects - Hatások + + QDial + - Stri&keout - Ki&talál - - - - &Underline - &Aláhúzás + SpeedoMeter + - - Sample - Minta + + SliderHandle + + + + QDialog - - - Select Font - Betű kiválasztása + + What's This? + Mi ez? - - Wr&iting System - Rendszer &írása + + Done + Kész - QFtp + QDialogButtonBox - - Host %1 found - %1 host megtalálva + + + + OK + OK - - Host found - Hoszt megtalálva + + Save + Mentés - - - - Connected to host %1 - %1 hosztra csatlkoztatva + + &Save + Menté&s - - Connected to host - Hosztra csatlakoztatva + + Open + Megnyitás - - Connection to %1 closed - %1-re csatlakoztatása bezárva + + Cancel + Mégsem - - - - Connection closed - Kapcsolat bezárva + + &Cancel + &Mégsem - - - Host %1 not found - %1 host nem található + + Close + Bezárás - - - Connection refused to host %1 - Kapcsolat elutasítva a(z) %1 hoszttal + + &Close + &Bezárás - - Connection timed out to host %1 - Kapcsolati időtúllépés a %1 hoszttal + + Apply + Alkalmaz - - - - - Unknown error - Ismeretlen hiba + + Reset + Törlés - - - Connecting to host failed: -%1 - A hoszthoz kapcsolódás nem sikerült: -%1 + + Help + Súgó - - Login failed: -%1 - Bejelentkezési hiba: -%1 + Don't Save + Nincs mentés - - Listing directory failed: -%1 - Könyvtár listázási hiba: -%1 + Discard + Elvetés - - - Changing directory failed: -%1 - Könyvtár változtatási hiba: -%1 + + &Yes + &Igen - - - Downloading file failed: -%1 - Fájl letöltési hiba: -%1 + + Yes to &All + &Mindent elfogad - - - Uploading file failed: -%1 - Fájl feltöltési hiba: -%1 + + &No + &Nem - - - Removing file failed: -%1 - Fájl eltávolítási hiba: -%1 + + N&o to All + Mindent &kihagy - - - Creating directory failed: -%1 - Könyvtár létrehozási hiba: + + Save All + Mindet menti + + + + Abort + Megszakítás + + + + Retry + Újra + + + + Ignore + Kihagyás + + + + Restore Defaults + Alapértelmezések visszaállítása + + + + Close without Saving + Bezárás mentés nélkül + + + + &OK + &OK + + + + QDirModel + + + Name + Név + + + + Size + Méret + + + + Kind + Match OS X Finder + Kind + + + + Type + All other platforms + Típus + + + + Date Modified + Módosítás dátuma + + + + QDockWidget + + + Close + Bezárás + + + + Dock + + + + + Float + + + + + QDoubleSpinBox + + + More + Több + + + + Less + Kevesebb + + + + QErrorMessage + + + Debug Message: + Debug üzenet: + + + + Warning: + Figyelmeztetés: + + + + Fatal Error: + Végzetes hiba: + + + + &Show this message again + Üzenet megjelenítése i&smét + + + + &OK + &OK + + + + QFile + + + + Destination file exists + A célfájl már létezik + + + + Will not rename sequential file using block copy + A szekvenciális fájlok nem nevezhetők át másolással + + + + Cannot remove source file + A forrás nem törölhető + + + + Cannot open %1 for input + A(z) %1 nem nyitható meg bemenetként + + + + Cannot open for output + Nem nyitható meg kimenetként + + + + Failure to write block + Hiba a blokk írásakor + + + + Cannot create %1 for output + A(z) %1 nem hozható létre + + + + QFileDialog + + + + All Files (*) + Minden fájl (*) + + + + Directories + Könyvtárak + + + + + + &Open + &Megnyitás + + + + + &Save + Menté&s + + + + Open + Megnyitás + + + + %1 already exists. +Do you want to replace it? + %1 már létezik. +Lecseréli? + + + + %1 +File not found. +Please verify the correct file name was given. + %1 +A fájl nem található. +Ellenőrizze, hogy jól adta-e meg a fájl nevét. + + + + My Computer + Számítógép + + + + &Rename + Át&nevezés + + + + &Delete + &Törlés + + + + Show &hidden files + &Rejtett fájlok megjelenítése + + + + + Back + Vissza + + + + + Parent Directory + Szülőkönyvtár + + + + + List View + Lista nézet + + + + + Detail View + Részletes nézet + + + + + Files of type: + Fájlok típusa: + + + + + Directory: + Könyvtár: + + + +File not found. +Please verify the correct file name was given + +A fájl nem található. +Ellenőrizze, hogy jól adta-e meg a fájl nevét + + + + + %1 +Directory not found. +Please verify the correct directory name was given. + %1 +A könyvtár nem található. +Ellenőrizze, hogy jól adta-e meg a könyvtár nevét. + + + + '%1' is write protected. +Do you want to delete it anyway? + '%1' írásvédett. +Biztosan törölni akarja? + + + + Are sure you want to delete '%1'? + Biztosan törölni akarja '%1'-t? + + + + Could not delete directory. + A könyvtár nem törölhető. + + + + Recent Places + Legutóbbi helyek + + + + All Files (*.*) + Minden fájl (*.*) + + + + Save As + Mentés másként + + + + Drive + Meghajtó + + + + + File + Fájl + + + + File Folder + Match Windows Explorer + Mappa + + + + Folder + All other platforms + Mappa + + + + Alias + Mac OS X Finder + Link + + + + Shortcut + All other platforms + Parancsikon + + + + Unknown + Ismeretlen + + + + Find Directory + Keresés a könyvtárban + + + + Show + Megjelenítés + + + + + Forward + Előre + + + + New Folder + Új könyvtár + + + + &New Folder + Ú&j könyvtár + + + + + &Choose + &Kiválasztás + + + + Remove + Törlés + + + + + File &name: + Fájl &neve: + + + + + Look in: + Keresés itt: + + + + + Create New Folder + Új könyvtár létrehozása + + + + QFileSystemModel + + + Invalid filename + Érvénytelen fájlnév + + + + <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. + <b>A(z) "%1" név nem használható.</b><p>Próbálja meg másik névvel, kevesebb karakterrel vagy írásjelek nélkül. + + + + Name + Név + + + + Size + Méret + + + + Kind + Match OS X Finder + Kind + + + + Type + All other platforms + Típus + + + + Date Modified + Módosítás dátuma + + + + My Computer + Számítógép + + + + Computer + Számítógép + + + + + %1 TB + %1 TB + + + + + %1 GB + %1 GB + + + + + %1 MB + %1 MB + + + + + %1 KB + %1 KB + + + + %1 bytes + %1 byte + + + + %1 byte(s) + %1 bájt + + + + QFontDatabase + + + + Normal + Normál + + + + + + Bold + Kövér + + + + + Demi Bold + Félkövér + + + + + + Black + Fekete + + + + Demi + Félkövér + + + + + Light + Világos + + + + + Italic + Dőlt + + + + + Oblique + Ferde + + + + Any + Bármelyik + + + + Latin + Latin + + + + Greek + Görög + + + + Cyrillic + Cirill + + + + Armenian + Örmény + + + + Hebrew + Héber + + + + Arabic + Arab + + + + Syriac + Szír + + + + Thaana + Thaana + + + + Devanagari + Dévangári + + + + Bengali + Bengáli + + + + Gurmukhi + Gurmukhi + + + + Gujarati + Gujarati + + + + Oriya + Oriya + + + + Tamil + Tamil + + + + Telugu + Telugu + + + + Kannada + Kannada + + + + Malayalam + Malayalam + + + + Sinhala + Sinhala + + + + Thai + Thai + + + + Lao + Lao + + + + Tibetan + Tibeti + + + + Myanmar + Miannmari + + + + Georgian + Gergely + + + + Khmer + Khmer + + + + Simplified Chinese + Egyszerűsített kínai + + + + Traditional Chinese + Hagyományos kínai + + + + Japanese + Japán + + + + Korean + Koreai + + + + Vietnamese + Vietnám + + + + Symbol + Szimbolum + + + + Ogham + Ogham + + + + Runic + Rúna + + + + N'Ko + N'Ko + + + + QFontDialog + + + &Font + &Betűtípus + + + + Font st&yle + Betűtípu&s stílusa + + + + &Size + &Méret + + + + Effects + Hatások + + + + Stri&keout + Á&thúzott + + + + &Underline + &Aláhúzott + + + + Sample + Példa + + + + Wr&iting System + Í&rásmód + + + + + Select Font + Betűtípus kiválasztása + + + + QFtp + + + + Not connected + Nincs kapcsolat + + + + + Host %1 not found + %1 kiszolgáló nem található + + + + + Connection refused to host %1 + A kapcsolódás %1 kiszolgálóhoz elutasítva + + + + Connection timed out to host %1 + A várakozási idő lejárt a(z) %1 kiszolgálóhoz + + + + + + Connected to host %1 + Kapcsolódva %1 kiszolgálóhoz + + + + + Connection refused for data connection + Az adatkapcsolat elutasítva + + + + + + + Unknown error + Ismeretlen hiba + + + + + Connecting to host failed: +%1 + A kapcsolódás a kiszolgálóhoz nem sikerült: +%1 + + + + + Login failed: +%1 + A bejelentkezés nem sikerült: +%1 + + + + + Listing directory failed: +%1 + A könyvtár listázása nem sikerült: +%1 + + + + + Changing directory failed: +%1 + A könyvtárváltás nem sikerült: +%1 + + + + + Downloading file failed: +%1 + A fájl letöltése nem sikerült: +%1 + + + + + Uploading file failed: +%1 + A fájl feltöltése nem sikerült: +%1 + + + + + Removing file failed: +%1 + A fájl törlése nem sikerült: +%1 + + + + + Creating directory failed: +%1 + A könyvtár létrehozása nem sikerült: %1 - - Removing directory failed: -%1 - Könyvtár eltávolítása hiba: -%1 + + Removing directory failed: +%1 + A könyvtár törlése nem sikerült: +%1 + + + + + + Connection closed + A kapcsolat bezárult + + + + Host %1 found + %1 kiszolgálót megtaláltam + + + + Connection to %1 closed + A kapcsolat %1 kiszolgálóval bezárult + + + + Host found + A kiszolgálót megtaláltam + + + + Connected to host + Kapcsolódva a kiszolgálóhoz + + + + QGstreamerPlayerSession + + + + Unable to play %1 + Nem lehet lejátszani: %1 + + + + QHostInfo + + + Unknown error + Ismeretlen hiba + + + + No host name given + Nem adott meg gépnevet + + + + QHostInfoAgent + + + + + + Host not found + A kiszolgáló nem található + + + + + + + Unknown address type + Ismeretlen címtípus + + + + + No host name given + Nem adott meg gépnevet + + + + + Invalid hostname + Érvénytelen gépnév + + + + + + Unknown error + Ismeretlen hiba + + + + QHttp + + + + + + Unknown error + Ismeretlen hiba + + + + + Request aborted + A kérés megszakítva + + + + + No server set to connect to + Nincs szerver megadva + + + + + Wrong content length + Rossz tartalomhossz + + + + + Server closed connection unexpectedly + A szerver váratlanul bezárta a kapcsolatot + + + + Error writing response to device + Hiba a válasz eszközre írása során + + + + + Connection refused + A kapcsolat elutasítva + + + + + + Host %1 not found + %1 kiszolgáló nem található + + + + + HTTP request failed + A HTTP kérés nem sikerült + + + + + Invalid HTTP response header + Érvénytelen HTTP válasz-fejléc + + + + Unknown authentication method + Ismeretlen azonosítási mód + + + + + + + Invalid HTTP chunked body + Érvénytelen HTTP törzsrészlet + + + + Host %1 found + %1 kiszolgálót megtaláltam + + + + Connected to host %1 + Kapcsolódva %1 kiszolgálóhoz + + + + Connection to %1 closed + A kapcsolat %1 kiszolgálóval bezárult + + + + Host found + A kiszolgálót megtaláltam + + + + Connected to host + Kapcsolódva a kiszolgálóhoz + + + + + Connection closed + A kapcsolat bezárult + + + + Proxy authentication required + A proxy azonosítást követel + + + + Authentication required + Azonosítás szükséges + + + + HTTPS connection requested but SSL support not compiled in + HTTPS kapcsolat kiépítése szükséges, de nincs SSL támogatás + + + + Connection refused (or timed out) + A kapcsolat elutasítva (vagy időtúllépés történt) + + + + Proxy requires authentication + A proxy azonosítást követel + + + + Host requires authentication + A gép azonosítást követel + + + + Data corrupted + Az adatok megsérültek + + + + Unknown protocol specified + Ismeretlen protokoll + + + + SSL handshake failed + Az SSL kézfogás sikertelen volt + + + + QHttpSocketEngine + + + Did not receive HTTP response from proxy + A proxy nem küldött HTTP választ + + + + Error parsing authentication request from proxy + Hiba a proxy azonosítási kérelmének értelmezésekor + + + + Authentication required + Azonosítás szükséges + + + + Proxy denied connection + A proxy megtagadta a kapcsolatot + + + + Error communicating with HTTP proxy + Hiba a HTTP proxyval való kommunikáció során + + + + Proxy server not found + A proxy nem található + + + + Proxy connection refused + A proxy elutasította a kapcsolatot + + + + Proxy server connection timed out + A kapcslat időtúllépés miatt megszakadt a proxxyval + + + + Proxy connection closed prematurely + A proxy váratlanul lezárta a kapcsolatot + + + + QIBaseDriver + + + Error opening database + Adatbázis megnyitási hiba + + + + Could not start transaction + A tranzakció nem indítható + + + + Unable to commit transaction + A tranzakció nem véglegesíthető + + + + Unable to rollback transaction + A tranzakció nem görgethető vissza + + + + QIBaseResult + + + Unable to create BLOB + A BLOB nem hozható létre + + + + Unable to write BLOB + A BLOB nem írható + + + + Unable to open BLOB + A BLOB nem nyitható meg + + + + Unable to read BLOB + A BLOB nem olvasható + + + + + Could not find array + A tömb nem található + + + + Could not get array data + A tömbbeli adatok nem érhetők el + + + + Could not get query info + A lekérdezés-információ nem érhető el + + + + Could not start transaction + A tranzakció nem indítható + + + + Unable to commit transaction + A tranzakció nem véglegesíthető + + + + Could not allocate statement + A művelet helyfoglalása sikertelen + + + + Could not prepare statement + A művelet előkészítése sikertelen + + + + + Could not describe input statement + A bemeneti művelet leírása sikertelen + + + + Could not describe statement + A művelet leírása sikertelen + + + + Unable to close statement + A művelet lezárása sikertelen + + + + Unable to execute query + A művelet nem hajtható végre + + + + Could not fetch next item + A következő adat nem olvasható ki + + + + Could not get statement info + A következő művelet információi nem érhetők el + + + + QIODevice + + + Permission denied + Hozzáférés megtagadva + + + + Too many open files + Túl sok fájl van nyitva + + + + No such file or directory + Nincs ilyen fájl vagy könyvtár + + + + No space left on device + Nincs több hely az eszközön + + + + Unknown error + Ismeretlen hiba + + + + QInputContext + + + XIM + XIM + + + + FEP + + + + + XIM input method + XIM beviteli mód + + + + Windows input method + Windows beviteli mód + + + + Mac OS X input method + Mac OS X beviteli mód + + + + S60 FEP input method + S60 FEP beviteli mód + + + + QInputDialog + + + Enter a value: + Írjon be egy értéket: + + + + QLibrary + + QLibrary::load_sys: Cannot load %1 (%2) + QLibrary::load_sys: %1 nem tölthető be (%2) + + + QLibrary::unload_sys: Cannot unload %1 (%2) + QLibrary::load_sys: %1 nem távolítható el (%2) + + + QLibrary::resolve_sys: Symbol "%1" undefined in %2 (%3) + QLibrary::load_sys: "%1" szimbólum nem definiált ebben: %2 (%3) + + + + Could not mmap '%1': %2 + Nem sikerült mmap-olni a(z) '%1'-t: %2 + + + + Plugin verification data mismatch in '%1' + Plugin ellenőrző adat eltérés: '%1' + + + + Could not unmap '%1': %2 + Nem sikerült unmap-olni a(z) '%1'-t: %2 + + + + The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] + A(z) '%1' plugin inkompatíbilis Qt függvénykönyvtárat használ. (%2.%3.%4) [%5] + + + + The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" + A(z) '%1' plugin inkompatíbilis Qt függvénykönyvtárat használ. A várt build kucs "%2", a kapott "%3" + + + + Unknown error + Ismeretlen hiba + + + + + The shared library was not found. + Az osztott függvénykönyvtár nem található. + + + + The file '%1' is not a valid Qt plugin. + A(z) '%1' fájl nem érvényes Qt plugin. + + + + The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) + A(z) '%1' plugin inkompatíbilis Qt könyvtárat használ. (A debug és a release könyvtárak nem keverhetők.) + + + + + Cannot load library %1: %2 + A(z) %1 könyvtár nem tölthető be: %2 + + + + + Cannot unload library %1: %2 + A(z) %1 könyvtár nem távolítható el: %2 + + + + + Cannot resolve symbol "%1" in %2: %3 + A(z) "%1" szimbólum nem oldható fel a(z) %2 könyvtárban: %3 + + + + QLineEdit + + + &Undo + &Visszavonás + + + + &Redo + Új&ra + + + + Cu&t + &Kivágás + + + + &Copy + &Másolás + + + + &Paste + &Beillesztés + + + + Delete + Törlés + + + + Select All + Összes kijelölése + + + + QLocalServer + + + + %1: Name error + %1: Hibás név + + + + %1: Permission denied + %1: hozzáférés megtagadva + + + + %1: Address in use + %1: A cím már használatban van + + + + %1: Unknown error %2 + %1: ismeretlen hiba %2 + + + + QLocalSocket + + + + %1: Connection refused + %1: A kapcsolat elutasítva + + + + + %1: Remote closed + %1: A szerver lezárta a kapcsolatot + + + + + + + %1: Invalid name + %1: Érvénytelen név + + + + + %1: Socket access error + %1: Socket elérési hiba + + + + + %1: Socket resource error + %1: Socket erőforrás probléma + + + + + %1: Socket operation timed out + %1: Időtúllépés a socketen + + + + + %1: Datagram too large + %1: A csomag túl nagy + + + + + + %1: Connection error + %1: Kapcsolódási hiba + + + + + %1: The socket operation is not supported + %1: A kívánt socket művelet nem támogatott + + + + %1: Unknown error + %1: Ismeretlen hiba + + + + + %1: Unknown error %2 + %1: Ismeretlen hiba %2 + + + + QMYSQLDriver + + + Unable to open database ' + Az adatbázis nem nyitható meg: ' + + + + Unable to connect + Nem sikerült kapcsolódni + + + + Unable to begin transaction + A tranzakció nem indítható + + + + Unable to commit transaction + A tranzakció nem véglegesíthető + + + + Unable to rollback transaction + A tranzakció nem görgethető vissza + + + + QMYSQLResult + + + + Unable to fetch data + Az adat nem olvasható ki + + + + Unable to execute query + A lekérdezés nem hajtható végre + + + + Unable to store result + Az eredmény nem tárolható + + + + + Unable to prepare statement + A művelet előkészítése nem lehetséges + + + + Unable to reset statement + A művelet visszaállítása nem lehetséges + + + + Unable to bind value + A változó kötése sikertelen + + + + Unable to execute statement + A művelet nem hajtható végre + + + + + Unable to bind outvalues + A kimenő érték kötése sikertelen + + + + Unable to store statement results + A művelet eredményének tárolása sikertelen + + + + Unable to execute next query + A következő lekérdezés nem hajtható végre + + + + Unable to store next result + A következő eredmény nem tárolható + + + + QMdiArea + + + (Untitled) + (Névtelen) + + + + QMdiSubWindow + + + %1 - [%2] + %1 - [%2] + + + + Close + Bezárás + + + + Minimize + Kis méret + + + + Restore Down + Előző méret + + + + &Restore + &Visszaállítás + + + + &Move + Á&thelyezés + + + + &Size + &Méret + + + + Mi&nimize + &Kis méret + + + + Ma&ximize + Te&ljes méret + + + + Stay on &Top + Mindig leg&felül + + + + &Close + &Bezárás + + + + - [%1] + - [%1] + + + + Maximize + Teljes méret + + + + Unshade + Legördítés + + + + Shade + Felgördítés + + + + Restore + Visszaállítás + + + + Help + Súgó + + + + Menu + Menü + + + + QMediaPlayer + + + The QMediaPlayer object does not have a valid service + A QMediaPlayer objektumnak nincs érvényes szolgáltatása + + + + QMediaPlaylist + + + + Could not add items to read only playlist. + Csak olvasható lejátszólistához nem lehet elemeket hozzáadni. + + + + + Playlist format is not supported + A lejátszólista formátuma nem támogatott + + + + The file could not be accessed. + A fájl nem elérhető. + + + + Playlist format is not supported. + A lejátszólista formátuma nem támogatott. + + + + QMenu + + + + Close + Bezárás + + + + + Open + Megnyitás + + + + + + Execute + Végrehajtás + + + + QMenuBar + + About + Névjegy + + + Config + Konfiguráció + + + Preference + Beállítások + + + Options + Opciók + + + Setting + Beállítás + + + Setup + Beállítás + + + Quit + Kilépés + + + Exit + Kilépés + + + About %1 + %1 névjegye + + + About Qt + A Qt névjegye + + + Preferences + Beállítások + + + Quit %1 + Kilépés: %1 + + + + Actions + Műveletek + + + + QMessageBox + + + Help + Súgó + + + + + + + OK + OK + + + <p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&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.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>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.</p><p>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.</p><p>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.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p> + <p>A Qt egy C++ eszközkészlet keresztplatformos alkalmazások fejlesztéséhez, mely egyetlen, MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, és minden főbb kereskedelmi Unix változat között hordozható forrást ad; valamint elérhető még beágyazott eszközökhöz is, mint Qt beágyazott Linuxhoz és Qt Windows CE-hez.</p> +<p>A Qt három különböző licensz alatt érhető el, hogy illeszkedjen a különbőző felhasználói igényekhez: +<p>A kereskedelmi licenszünk alkalmas saját/kereskedelmi szoftver fejlesztéséhez, ha nem akarja megosztani a forráskódot harmadik partnerrel vagy nem kívánja teljesíteni GNU LGPL v2.1 vagy GNU GPL v3.0 feltételeit.</p> +<p>A GNU LGPL v2.1 alá tartozó Qt licensz alkalmas Qt-n alapuló programok fejlesztéséhez (zárt vagy nyílt forrású), amennyiben betartja a GNU LGPL v2.1 kikötéseit és feltételeit.</p> +<p>A GNU General Public License v3.0 alá tartozó Qt licensz pedig alkalmas Qt-n alapuló programok fejlesztésére, ahol olyan programok kombinációját kívánja használni, melyek megfelelnek a GNU GPL version 3.0 feltételeinek vagy ahol hajlandó teljesíteni a GNU GPL v3.0 feltételeit.</p> +<p>Tekintse át a <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> oldalon a Qt licenszeit.</p> +<p>Copyright (C) 2009 Nokia Corporation és/vagy annak leányvállalat(-ai).</p> +<p>A Qt a Nokia terméke. További információért látogassa meg a <a href="http://qt.nokia.com/">qt.nokia.com</a> honlapot.</p> + + + + About Qt + A Qt névjegye + + + <p>This program uses Qt version %1.</p> + <p>A program a Qt %1 verzióját használja.</p> + + + <h3>About Qt</h3>%1<p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qtopia Core.</p><p>Qt is a Trolltech product. See <a href="http://www.trolltech.com/qt/">www.trolltech.com/qt/</a> for more information.</p> + <h3>A Qt névjegye</h3>%1<p>A Qt egy C++ eszközkészlet a kereszt-platformos alkalmazásfejlesztéshez.</p><p>A Qt egy-forrású hordozhatóságot biztosít az MS&nbsp;Windows, a Mac&nbsp;OS&nbsp;X, a Linux, és az összes nagyobb kereskedelmi Unix változat között. A Qt mobileszközökhöz is elérhető, pl. Qtopia Core.</p><p>A Qt a Trolltech terméke. További információk: <a href="http://www.trolltech.com/qt/">www.trolltech.com/qt/</a> .</p> + + + + Show Details... + Részletek megjelenítése... + + + + Hide Details... + Részletek elrejtése... + + + + <h3>About Qt</h3><p>This program uses Qt version %1.</p> + <h3>Qt névjegye</h3><p>Ez a program a Qt %1 verzióját használja.</p> + + + + <p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&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.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>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.</p><p>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.</p><p>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.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p> + <p>A Qt egy C++ eszközkészlet keresztplatformos alkalmazások fejlesztéséhez, mely egyetlen, MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, és minden főbb kereskedelmi Unix változat között hordozható forrást ad; valamint elérhető még beágyazott eszközökhöz is, mint Qt beágyazott Linuxhoz és Qt Windows CE-hez.</p> +<p>A Qt három különböző licensz alatt érhető el, hogy illeszkedjen a különbőző felhasználói igényekhez: +<p>A kereskedelmi licenszünk alkalmas saját/kereskedelmi szoftver fejlesztéséhez, ha nem akarja megosztani a forráskódot harmadik partnerrel vagy nem kívánja teljesíteni GNU LGPL v2.1 vagy GNU GPL v3.0 feltételeit.</p> +<p>A GNU LGPL v2.1 alá tartozó Qt licensz alkalmas Qt-n alapuló programok fejlesztéséhez (zárt vagy nyílt forrású), amennyiben betartja a GNU LGPL v2.1 kikötéseit és feltételeit.</p> +<p>A GNU General Public License v3.0 alá tartozó Qt licensz pedig alkalmas Qt-n alapuló programok fejlesztésére, ahol olyan programok kombinációját kívánja használni, melyek megfelelnek a GNU GPL version 3.0 feltételeinek vagy ahol hajlandó teljesíteni a GNU GPL v3.0 feltételeit.</p> +<p>Tekintse át a <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> oldalon a Qt licenszeit.</p> +<p>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</p> +<p>A Qt a Nokia terméke. További információért látogassa meg a <a href="http://qt.nokia.com/">qt.nokia.com</a> honlapot.</p> + + + <p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&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.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>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.</p><p>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.</p><p>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.</p><p>Please see <a href="http://www.qtsoftware.com/products/licensing">www.qtsoftware.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://www.qtsoftware.com/qt/">www.qtsoftware.com/qt</a> for more information.</p> + Needing review, but basically accepted string. + <p>A Qt egy C++ eszközkészlet keresztplatformos alkalmazások fejlesztéséhez, mely egyetlen, MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, és minden főbb kereskedelmi Unix változat között hordozható forrást ad; valamint elérhető még beágyazott eszközökhöz is, mint Qt beágyazott Linuxhoz és Qt Windows CE-hez.</p> +<p>A Qt három különböző licensz alatt érhető el, hogy illeszkedjen a különbőző felhasználói igényekhez: +<p>A kereskedelmi licenszünk alkalmas saját/kereskedelmi szoftver fejlesztéséhez, ha nem akarja megosztani a forráskódot harmadik partnerrel vagy nem kívánja teljesíteni GNU LGPL v2.1 vagy GNU GPL v3.0 feltételeit.</p> +<p>A GNU LGPL v2.1 alá tartozó Qt licensz alkalmas Qt-n alapuló programok fejlesztéséhez (zárt vagy nyílt forrású), amennyiben betartja a GNU LGPL v2.1 kikötéseit és feltételeit.</p> +<p>A GNU General Public License v3.0 alá tartozó Qt licensz pedig alkalmas Qt-n alapuló programok fejlesztésére, ahol olyan programok kombinációját kívánja használni, melyek megfelelnek a GNU GPL version 3.0 feltételeinek vagy ahol hajlandó teljesíteni a GNU GPL v3.0 feltételeit.</p> +<p>Tekintse át a <a href="http://www.qtsoftware.com/products/licensing">www.qtsoftware.com/products/licensing</a> oldalon a Qt licenszeit.</p> +<p>Copyright (C) 2009 Nokia Corporation és/vagy annak leányvállalat(-ai).</p> +<p>A Qt a Nokia terméke. További információért látogassa meg a <a href="http://www.qtsoftware.com/qt/">www.qtsoftware.com/qt</a> honlapot.</p> + + + <p>This program uses Qt Open Source Edition version %1.</p><p>Qt Open Source Edition is intended for the development of Open Source applications. You need a commercial Qt license for development of proprietary (closed source) applications.</p><p>Please see <a href="http://www.trolltech.com/company/model/">www.trolltech.com/company/model/</a> for an overview of Qt licensing.</p> + <p>A programa Qt Open Source Edition %1 verziót használja.</p><p>A Qt Open Source Edition az Open Source (nyílt forrású) alkalmazások fejlesztéséhez készült. Zárt forrású alkalmazások fejlesztéséhez a kereskedelmi Qt licenszre van szükség.</p><p>A Qt licenszeléséről további információ a <a href="http://www.trolltech.com/company/model/">www.trolltech.com/company/model/</a> oldalon található.</p> + + + <h3>About Qt</h3>%1<p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt Embedded.</p><p>Qt is a Trolltech product. See <a href="http://www.trolltech.com/qt/">www.trolltech.com/qt/</a> for more information.</p> + <h3>A Qt névjegye</h3>%1<p>A Qt egy átfogó C++ környezet keresztplatformos alkalmazások fejlesztéséhez.</p><p>A Qt kódhordozhatóságot biztosít MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, és a legtöbb kereskedelmi Unix-variáns között. A Qt Embedded lehetővá teszi a Qt-t beágyazott eszközön való használatát.</p><p>A Qt a Trolltech cég terméke. További információkért tekintse meg a <a href="http://www.trolltech.com/qt/">www.trolltech.com/qt/</a> oldalt.</p> + + + + QMultiInputContext + + + Select IM + Beviteli mód kiválasztása + + + + QMultiInputContextPlugin + + + Multiple input method switcher + Beviteli mód választó + + + + Multiple input method switcher that uses the context menu of the text widgets + A szöveg elemeken megjelenítendő felbukkanó beviteli mód választó + + + + QNativeSocketEngine + + + The remote host closed the connection + A távoli kiszolgáló bezárta a kapcsolatot + + + + Network operation timed out + Időtúllépés hálózati művelet során + + + + Out of resources + Az erőforrások elfogytak + + + + Unsupported socket operation + Nem támogatott socket művelet + + + + Protocol type not supported + Nem támogatott protokoll + + + + Invalid socket descriptor + Érvénytelen socket leíró + + + + Network unreachable + A hálózat nem érhető el + + + + Permission denied + Hozzáférés megtagadva + + + + Connection timed out + A kapcsolat várakozási ideje lejárt + + + + Connection refused + A kapcsolat elutasítva + + + + The bound address is already in use + A lefoglalandó cím használatban van + + + + The address is not available + A cím nem elérhető + + + + The address is protected + A cím védett + + + + Unable to send a message + Nem küldhető üzenet + + + + Unable to receive a message + Nem fogadható üzenet + + + + Unable to write + Nem írható + + + + Network error + Hálózati hiba + + + + Another socket is already listening on the same port + Egy másik socket már figyel ezen a porton + + + + Unable to initialize non-blocking socket + A nem-blokkolo socket előkészítése sikertelen + + + + Unable to initialize broadcast socket + A broadcast socket előkészítése sikertelen + + + + Attempt to use IPv6 socket on a platform with no IPv6 support + IPv6 socket használatának kísérlete IPv6 támogatás nélküli platformon + + + + Host unreachable + A kiszolgáló nem érhető el + + + + Datagram was too large to send + A csomag mérete miatt nem küldhető el + + + + Operation on non-socket + Socket művelet érvénytelen eszközön + + + + Unknown error + Ismeretlen hiba + + + + The proxy type is invalid for this operation + A proxy típusa nem megfelelő a művelethez + + + + QNetworkAccessCacheBackend + + + Error opening %1 + Hiba %1 megnyitásakor + + + + QNetworkAccessDataBackend + + + Operation not supported on %1 + A művelett nem támogatott a(z) %1-n + + + + Invalid URI: %1 + Érvénytelen cím: %1 + + + + QNetworkAccessDebugPipeBackend + + + Write error writing to %1: %2 + Hiba a(z) %1 kiírásakor: %2 + + + + Socket error on %1: %2 + Socket hiba a(z) %1-n: %2 + + + + Remote host closed the connection prematurely on %1 + A(z) %1 gép idő előtt megszakította a kapcsolatot + + + + QNetworkAccessFileBackend + + + + Request for opening non-local file %1 + Nem helyi fájl megnyitásának kísérlete: %1 + + + + + Error opening %1: %2 + Hiba a(z) %1 megnyitásakor: %2 + + + + Write error writing to %1: %2 + Hiba a(z) %1 kiírásakor: %2 + + + + + Cannot open %1: Path is a directory + Sikertelen megnyitás: %1 egy könyvtár + + + + Read error reading from %1: %2 + Hiba a(z) %1 olvasása közben: %2 + + + + QNetworkAccessFtpBackend + + + No suitable proxy found + Nincs megfelelő proxy + + + + Cannot open %1: is a directory + Sikertelen megnyitás: %1 egy könyvtár + + + + Logging in to %1 failed: authentication required + A bejelentkezés sikertelen ide: %1, hitelesítés szükséges + + + + Error while downloading %1: %2 + Hiba a(z) %1 letöltésekor: %2 + + + + Error while uploading %1: %2 + Hiba a(z) %1 feltöltésekor: %2 + + + + QNetworkAccessHttpBackend + + + No suitable proxy found + Nincs megfelelő proxy + + + + QNetworkAccessManager + + + Network access is disabled. + A hozzáférés a hálózathoz le van tiltva. + + + + QNetworkReply + + + Error downloading %1 - server replied: %2 + Hiba %1 letöltésekor - a szerver válasza: %2 + + + + Protocol "%1" is unknown + Ismeretlen protokoll: "%1" + + + + Temporary network failure. + Ideiglenes hálózati hiba. + + + + QNetworkReplyImpl + + + + Operation canceled + A művelet megszakítva + + + + QNetworkSession + + + Invalid configuration. + Érvénytelen konfiguráció. + + + + QNetworkSessionPrivateImpl + + + Roaming error + Roaming hiba + + + + Session aborted by user or system + A munkamenetet a felhasználó vagy a rendszer megszakította + + + + Unidentified Error + Azonosítatlan hiba - - - Not connected - Nincs csatlakoztatva + + + Unknown session error. + Ismeretlen hiba a munkamenetben. + + + + + The session was aborted by the user or system. + A munkamenetet a felhasználó vagy a rendszer megszakította. + + + + + The requested operation is not supported by the system. + A kért műveletet a rendszer nem támogatja. + + + + + The specified configuration cannot be used. + A megadott konfiguráció nem használható. + + + + + Roaming was aborted or is not possible. + A roaming megszakadt, vagy nem lehetséges. + + + + QOCIDriver + + + Unable to initialize + QOCIDriver + Az inicializálás nem lehetséges + + + + Unable to logon + A bejelentkezés nem lehetséges + + + + Unable to begin transaction + A tranzakció nem indítható + + + + Unable to commit transaction + A tranzakció nem véglegesíthető - - - Connection refused for data connection - Adat kapcsolat érdekében történő csatlakozás megtagadva + + Unable to rollback transaction + A tranzakció nem görgethető vissza - QHostInfo + QOCIResult - - Unknown error - Ismeretlen hiba + + + + Unable to bind column for batch execute + Az oszlop kötegelt végrehajtáshoz kötése sikertelen - - - QHostInfoAgent - - - - - Host not found - A hoszt nem található + + Unable to execute batch statement + A kötegelt utasítások végrehajtása sikertelen - - - - - Unknown address type - Ismeretlen cím típus + + Unable to alloc statement + Az utasítás lefoglalása sikertelen - - - - Unknown error - Ismeretlen hiba + + Unable to prepare statement + Az utasítás előkészítése sikertelen - - No host name given - Nincs hoszt név megadva + + Unable to get statement type + Az utasítás típusa nem ismert - - Invalid hostname - Érvénytelen hoszt név + + Unable to bind value + A változó kötése sikertelen + + + + Unable to execute statement + Az utasítás nem végrehajtható + + + + Unable to goto next + Nem lehet a következőre lépni - QHttp + QODBCDriver - - - Connection refused - Kapcsolat megtagadva + + Unable to connect + Nem sikerült kapcsolódni - - - - Host %1 not found - A(z) %1 hoszt nem található + + Unable to disable autocommit + Az automatikus véglegesítés nem tiltható le - - - Wrong content length - Hibás tartalom hossz + + Unable to commit transaction + A tranzakció nem véglegesíthető - - - - - HTTP request failed - HTTP kérési hiba + + Unable to rollback transaction + A tranzakció nem görgethető vissza - - Host %1 found - A(z) %1 hoszt nem található + + Unable to enable autocommit + Az automatikus véglegesítés nem engedélyezhető - - Host found - Hoszt megtalálható + + Unable to connect - Driver doesn't support all functionality required + Nem sikerült kapcsolódni - A driver nem támogat minden szükséges szolgáltatást + + + QODBCResult - - Connected to host %1 - %1 hoszthoz csatlakozva van + + + QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration + QODBCResult::reset: Nem lehet a 'SQL_CURSOR_STATIC' attribútumot beállítani a parancson. Ellenőrizze az ODBC driver beállítását - - Connected to host - Hosztra csatlakoztatva + + + Unable to execute statement + A parancs nem hajtható végre - - Connection to %1 closed - %1-re csatlkozás bezárva + + Unable to fetch next + A következő nem olvasható ki - - - Connection closed - Kapcsolat bezárva + + Unable to prepare statement + A parancs előkészítése nem lehetséges - - - - - Unknown error - Ismeretlen hiba + + Unable to bind variable + A változó nem rögzíthető - - - Request aborted - Kérés megszakítva + + Unable to fetch + Az eredmény nem elérhető - - - No server set to connect to - Nincsen szerver beállítva, amire csatlakozni lehetne + + Unable to fetch first + Az első eredmény nem érhető el - - - Server closed connection unexpectedly - A szerver váratlanul bezárta a kapcsolatot + + Unable to fetch previous + Az előző eredmény nem érhető el - - - Invalid HTTP response header - Érvénytelen HTTP válasz fejléc + + + + Unable to fetch last + Az utolsó eredmény nem érhető el + + + QObject - - Unknown authentication method - Ismeretlen hitelesítési eljárás + Invalid hostname + Érvénytelen gépnév - - - - - Invalid HTTP chunked body - Érvénytelen nagy HTTP törzs + Home + Saját könyvtár - - Error writing response to device - Hiba történt a válasz eszközre írása közben + Operation not supported on %1 + A művelett nem támogatott a(z) %1-n - - Proxy authentication required - Proxy hitelesítés szükséges + Invalid URI: %1 + Érvénytelen cím: %1 - - Authentication required - Hitelesítés szükséges + Write error writing to %1: %2 + Hiba a(z) %1 kiírásakor: %2 - - Proxy requires authentication - A proxy a hitelesítést kéri + Read error reading from %1: %2 + Hiba a(z) %1 olvasása közben: %2 - - Host requires authentication - A hoszt hitelesítést kér + Socket error on %1: %2 + Socket hiba a(z) %1-n: %2 - - Data corrupted - Sérült adat + Remote host closed the connection prematurely on %1 + A(z) %1 gép idő előtt megszakította a kapcsolatot - - SSL handshake failed - SSL kézfogási hiba + Protocol error: packet of size 0 received + Protokoll hiba: 0 méretű csomag érkezett - - Unknown protocol specified - Ismeretlen protokoll van megadva + No host name given + Nem adott meg gépnevet - - Connection refused (or timed out) - Kapcsolat megtagadva (vagy időtúllépés) + Exit + Kilépés - - HTTPS connection requested but SSL support not compiled in - HTTP kapcsolat lett kérve, de az SSL támogatás nincs beleforgatva + + "%1" duplicates a previous role name and will be disabled. + CHECKIT: role == ? + A(z) "%1" neve ütközik egy, már létező szabály nevével, így le lesz tiltva. - QHttpSocketEngine + QPPDOptionsModel - - Did not receive HTTP response from proxy - Nem kapott HTTP választ a proxy-tól + + Name + Név - - Error parsing authentication request from proxy - Hiba történt a proxy hitelesítés kérésének elemzése közben + + Value + Érték + + + QPSQLDriver - - Authentication required - Hitelesítés szükséges + + Unable to connect + Nem sikerült kapcsolódni - - Proxy denied connection - A proxy megtagadta a kapcsolatot + + Could not begin transaction + A tranzakció nem indítható - - Error communicating with HTTP proxy - Hiba történt a HTTP proxy-val történő kommunikáció közben + + Could not commit transaction + A tranzakció nem véglegesíthető - - Proxy server not found - A proxy szerver nem található + + Could not rollback transaction + A tranzakció nem görgethető vissza - - Proxy connection refused - A proxy kapcsolat elutasítva + + Unable to subscribe + A feliratkozás sikertelen - - Proxy server connection timed out - Proxy szerver kapcsolódási időtúllépés + + Unable to unsubscribe + A leiratkozás sikertelen + + + QPSQLResult - - Proxy connection closed prematurely - Proxy kapcsolódás túl korán be lett zárva + + Unable to create query + A lekérdezés nem készíthető el + + + + Unable to prepare statement + A parancs előkészítése nem lehetséges - QIBaseDriver + QPageSetupWidget - - Error opening database - Hiba történt az adatbázis megnyitása közben + + Centimeters (cm) + Centiméter (cm) - - Could not start transaction - Nem sikerült elindítani a tranzakciót + + Millimeters (mm) + Milliméter (mm) - - Unable to commit transaction - Nem lehet kommitolni a tranzakciót + + Inches (in) + Inch (in) - - Unable to rollback transaction - Nem lehet visszagörgetni a tranzakciót + + Points (pt) + Pont (pt) - - - QIBaseResult - - Unable to create BLOB - Nem lehet BLOB-t létrehozni + + Form + Formátum - - Unable to write BLOB - Nem lehet írni a BLOB-t + + Paper + Papír - - Unable to open BLOB - Nem lehet megnyitni a BLOB-t + + Page size: + Papírméret: - - Unable to read BLOB - Nem lehet olvasni a BLOB-t + + Width: + Szélesség: - - - Could not find array - Nem sikerült megtalálni a tömböt + + Height: + Magasság: - - Could not get array data - Nem sikerüét megszerezni a tömb adatokat + + Paper source: + Papírforrás: + + + + Orientation + Orientáció + + + + Portrait + Álló + + + + Landscape + Fekvő + + + + Reverse landscape + Fordított fekvő - - Could not get query info - Nem sikerült megszerezni a lekérdezi információt + + Reverse portrait + Fordított álló - - Could not start transaction - Nem sikerült elindítani a tranzakciót + + Margins + Margók - - Unable to commit transaction - Nem lehet kommitolni a tranzakciót + + top margin + felső margó - - Could not allocate statement - Nem sikerült lefoglalni a műveletet + + left margin + bal margó - - Could not prepare statement - Nem sikerült felkészülni a műveletre + + right margin + jobb margó - - - Could not describe input statement - Nem sikerült leírni a bemeneti állítást + + bottom margin + alsó margó + + + QPatternist::QtXmlPatterns - - Could not describe statement - Nem sikerült leírni az állítást + An %1-attribute with value %2 has already been declared. + Egy %1-attribútum %2 értékkel már deklarálva van. - - Unable to close statement - Nem lehet megnyitni az állítást + An %1-attribute must have a valid %2 as value, which %3 isn't. + Egy %1-attribútumnak érvényes %2 értékkel kell rendelkeznie, azonban %3 nem az. - - Unable to execute query - Nem lehet végrehajtani a lekérdezést + %1 is an unsupported encoding. + %1 nem támogatott kódolás. - - Could not fetch next item - Nem lehet letölteni a következő elemet + %1 contains octets which are disallowed in the requested encoding %2. + %1 olyan okteteket tartalmaz, amelyek nem megengedettek a kért %2 kódolásban. - - Could not get statement info - Nem lehet az művelet információkat megszerezni + The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. + %1 kódrészlet %2 helyen, %3 kódolással érvénytelen XML karakter. - - - QIODevice - - Permission denied - Beleegyezés megtagadva + Network timeout. + Időtúllépés. - - Too many open files - Túl sok fájl megnyitása + Element %1 can't be serialized because it appears outside the document element. + %1 elem nem szerializálható, mert a document elemen kívül szerepel. - - No such file or directory - Nincs ilyen fájl vagy könyvtár + Attribute %1 can't be serialized because it appears at the top level. + %1 attribútum nem szerializálható, mert legfelső szinten szerepel. - - No space left on device - Nincs több hely a lemezen + Year %1 is invalid because it begins with %2. + %1 év érvénytelen, mert nem kezdődhet %2-val. - - Unknown error - Ismeretlen hiba + Day %1 is outside the range %2..%3. + A(z) %1. nap nem esik %2 és %3 közé. - - - QInputContext - - XIM - XIM + Month %1 is outside the range %2..%3. + A(z) %1. hónap nem esik %2 és %3 közé. - - FEP - FEP + Overflow: Can't represent date %1. + Túlcsordulás: A(z) %1 dátum nem reprezentálható. - - XIM input method - XIM beviteli eljárás + Day %1 is invalid for month %2. + Nincs %1 nap %2 hónapban. - - Windows input method - Windows beviteli eljárás + Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; + Az 24:%1:%2.%3 időpont érvénytelen, mert az óra értéke 24, de a többi érték nem 0; - - Mac OS X input method - Mac OS X beviteli eljárás + Time %1:%2:%3.%4 is invalid. + Az %1:%2:%3.%4 időpont érvénytelen. - - S60 FEP input method - S60 FEP beviteli eljárás + Overflow: Date can't be represented. + Túlcsordulás: A dátum nem reprezentálható. - - - QInputDialog - - Enter a value: - Egy értél bevitele: + At least one component must be present. + Legalább egy komponenst meg kell adni. - - - QLibrary - - Could not mmap '%1': %2 - Nem sikerült az mmap '%1': %2 + At least one time component must appear after the %1-delimiter. + Legalább egy időkomponenst meg kell adni a(z) %1 elválasztó után. - - Plugin verification data mismatch in '%1' - Beépülő modul igazoló adata nem megfelelő a(z) '%1'-ben + No operand in an integer division, %1, can be %2. + Nincs operandus az egészosztásnál (%1), akár %2 is lehet. - - Could not unmap '%1': %2 - Nem lehet eltávolítani a letérképezést '%1': %2 + The first operand in an integer division, %1, cannot be infinity (%2). + Az egészosztás (%1) első operandusa nem lehet végtelen (%2). - - The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] - A(z) '%1' beépülő modul inkompatibilis Qt könyvtárat használ. (%2.%3.%4) [%5] + The second operand in a division, %1, cannot be zero (%2). + Az osztás (%1) második operandusa nem lehet nulla (%2). - - The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" - A(z) '%1' beépülő modul inkompatibilis Qt könyvtárat használ. A várt építési kulcs '%2', kapott '%3' + %1 is not a valid value of type %2. + %1 nem érvényes érték %2 típusnak. - - Unknown error - Ismeretlen hiba + When casting to %1 from %2, the source value cannot be %3. + Ha %2-t %1-re kényszerítünk, a kiinduló érték nem lehet %3. - - - The shared library was not found. - A megosztott könyvtár nem található. + Integer division (%1) by zero (%2) is undefined. + A nullával (%2) való egészosztás (%1) nincs értelmezve. - - The file '%1' is not a valid Qt plugin. - A(z) '%1' fájl nem egy érvényes Qt beépülő modul. + Division (%1) by zero (%2) is undefined. + A nullával (%2) való osztás (%1) nincs értelmezve. - - The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) - A(z) '%1' beépülő modul inkompatibilis Qt könyvtárat használ. (Nem lehet a debug és kiadási könyvtárakat keverni.) + Modulus division (%1) by zero (%2) is undefined. + A nullával (%2) való maradékos osztás (%1) nincs értelmezve. - - - Cannot load library %1: %2 - Nem lehet betölteni a(z) %1 könyvtárat: %2 + Dividing a value of type %1 by %2 (not-a-number) is not allowed. + %1 %2-vel osztása nem engedélyezett, mert az nem szám. - - - Cannot unload library %1: %2 - Nem lehet kirakni a(z) %1 könyvtárat: %2 + Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. + %1 típusú érték osztása %2 vagy %3 (pozitív vagy negatív nulla) értékkel nem megengedett. - - - Cannot resolve symbol "%1" in %2: %3 - Nem lehet megfejteni a(z) '%1' szimbólumot a(z) %2-ben: %3 + Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. + %1 típusú érték szorzása %2 vagy %3 (pozitív vagy negatív végtelen) típusú értékkel nem megengedett. - - - QLineEdit - - Select All - Az összes kiválasztása + A value of type %1 cannot have an Effective Boolean Value. + %1 típusú érték nem kaphat effektív logikai értéket. - - &Undo - &Visszavonás + Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. + Effektív logikai érték nem számítható olyan sorozatra, melyben kettő vagy több atomi érték szerepel. - - &Redo - &Helyreállítás + Value %1 of type %2 exceeds maximum (%3). + A(z) %2 típusú %1 érték meghaladja a maximumot (%3). - - Cu&t - &Kivágás + Value %1 of type %2 is below minimum (%3). + A(z) %2 típusú %1 érték kisebb, mint a minimum (%3). - - &Copy - &Másolás + A value of type %1 must contain an even number of digits. The value %2 does not. + %1 típusú értékben páros számú számjegynek kell szerepelnie. A %2 érték nem megfelelő. - - &Paste - &Beillesztés + %1 is not valid as a value of type %2. + %1 nem érvényes %2 típusú érték. - - Delete - Törlés + Ambiguous rule match. + Nem egyértelmű szabály illeszkedés. - - - QLocalServer - - - %1: Name error - %1: Név hiba + Operator %1 cannot be used on type %2. + %1 operátor nem használható %2 típuson. - - %1: Permission denied - %1: Engedély megtagadva + Operator %1 cannot be used on atomic values of type %2 and %3. + %1 operátor nem használható %2 és %3 típusok atomi értékein. - - %1: Address in use - %1: Cím használatban + The namespace URI in the name for a computed attribute cannot be %1. + Egy számított attribútum nevében szereplő névtér URI-je nem lehet %1. - - %1: Unknown error %2 - %1: Ismeretlen hiba %2 + The name for a computed attribute cannot have the namespace URI %1 with the local name %2. + Számított attribútum névtér URI-je nem lehet %1 a(z) %2 lokális névvel. - - - QLocalSocket - - - %1: Connection refused - %1: Kapcsolat elutasítva + Type error in cast, expected %1, received %2. + Típushiba a konverzió során, várt %1, kapott %2. - - - %1: Remote closed - %1: Távol bezárva + 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. + %1 vagy belőle származó típusra való konverziókor a kiindulási értéknek azonos típusúnak vagy sztring literálnak kell lennie. %2 típus nem engedélyezett. - - - - - %1: Invalid name - %1: Érvénytelen név + No casting is possible with %1 as the target type. + %1 típusra való konverzió nem lehetséges. - - - %1: Socket access error - %1: Socket hozzáférési hiba + It is not possible to cast from %1 to %2. + Nem lehetséges %1 típusról %2 típusra konvertálni. - - - %1: Socket resource error - %1: Socket erőforrás hiba + Casting to %1 is not possible because it is an abstract type, and can therefore never be instantiated. + %1 típusra való konverzió nem lehetséges, mivel absztrakt típus és emiatt nem példányosítható. - - - %1: Socket operation timed out - %1: Socker művelet időtúllépés + It's not possible to cast the value %1 of type %2 to %3 + A(z) %2 típusú %1 érték konverziója %3 típusra nem lehetséges - - - %1: Datagram too large - %1: Túl nagy datagram + Failure when casting from %1 to %2: %3 + Hiba történt %1 típus %2 típusra történő konvertálásakor: %3 - - - - %1: Connection error - %1: Kapcsolat hiba + A comment cannot contain %1 + Egy megjegyzés nem tartalmazhatja a következőt: %1 - - - %1: The socket operation is not supported - %1: A socket művelet nem támogatott + A comment cannot end with a %1. + Egy megjegyzés nem végződhet a következőre: %1. - - %1: Unknown error - %1: Ismeretlen hiba + No comparisons can be done involving the type %1. + %1 típus nem szerepelhet összehasonlításban. - - - %1: Unknown error %2 - %1: Ismeretlen hiba %2 + Operator %1 is not available between atomic values of type %2 and %3. + %1 operátor nem használható %2 és %3 típusok atomi értékei között. - - - QMYSQLDriver - - Unable to open database ' - Nem lehet megnyitni az adatbázist + In a namespace constructor, the value for a namespace cannot be an empty string. + Egy névtér konstruktorában a névtér értéke nem lehet üres karaktersorozat. - - Unable to connect - Nem lehet kapcsolódni + The prefix must be a valid %1, which %2 is not. + A prefixum érvényes %1 kell legyen, aminek %2 nem tesz eleget. - - Unable to begin transaction - Nem lehet megkezdeni a tranzakciót + The prefix %1 cannot be bound. + %1 prefixum nem köthető. - - Unable to commit transaction - Nem lehet kommitolni a tranzakciót + Only the prefix %1 can be bound to %2 and vice versa. + Csak %1 prefixum köthető %2 kifejezéshez és fordítva. - - Unable to rollback transaction - Nem lehet visszagörgetni a tranzakciót + An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. + Attribútum csomópont nem lehet egy document csomópont gyermeke. Emiatt a(z) %1 attribútum nem ide való. - - - QMYSQLResult - - Unable to fetch data - Nem lehet letölteni az adatot + Circularity detected + Körkörös hivatkozás - - Unable to execute query - Nem lehet végrehajtani a lekérdezést + A library module cannot be evaluated directly. It must be imported from a main module. + Egy könyvtár modult nem lehet közvetlenül kiértékelni. Mindenképp egy fő modulból kell importálni. - - Unable to store result - Nem lehet tárolni az eredményt + No template by name %1 exists. + Nem létezik %1 nevű sablon. - - - Unable to prepare statement - Nem lehet felkészülni a műveletre + A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. + Egy %1 típusú érték nem lehet predikátum. Egy predikátumnak szám vagy effektív logikai érték típusúnak kell lennie. - - Unable to reset statement - Nem lehet visszaállítani a műveleteket + The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid. + A célnév egy feldolgozó utasításban nem lehet %1, kis és nagybetűk semmilyen kombinációjában. Ennek okán %2 érvénytelen. - - Unable to bind value - Nem lehet összekötni az értéket + %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. + %1 érvénytelen célnév egy feldolgozó utasításban. Értéke %2 típusú kell legyen, mint pl. %3. - - Unable to execute statement - Nem lehet végrehajtani az állítást + The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. + Egy útvonal utolsó lépésének vagy csomópontokat vagy atomi értékeket kell tartalmaznia. A kettő nem keveredhet. - - - Unable to bind outvalues - Nem lehet összekötni a kiértékeléseket + The data of a processing instruction cannot contain the string %1 + Egy feldolgozó utasítás adata nem tartalmazhatja a következő sztringet: %1 - - Unable to store statement results - Nem lehet letárolni a művelet eredményeket + No namespace binding exists for the prefix %1 + Nincs névtér kötés a(z) %1 prefixumhoz - - Unable to execute next query - Nem lehet végrehajtani a következő lekérdezést + No namespace binding exists for the prefix %1 in %2 + Nincs névtér kötés a(z) %1 prefixumhoz %2 helyen - - Unable to store next result - Nem lehet letárolni a következő eredményt + %1 is an invalid %2 + %1 egy érvénytelen %2 - - - QMdiArea - - (Untitled) - (Címtelen) + The parameter %1 is passed, but no corresponding %2 exists. + Az átadott érték %1, de nincs megfelelő %2. - - - QMdiSubWindow - - %1 - [%2] - %1 - [%2] + The parameter %1 is required, but no corresponding %2 is supplied. + %1 paraméter kötelező, de nincs megadva megfelelő %2. - - - Close - Bezárás + + %1 takes at most %n argument(s). %2 is therefore invalid. + + %1 maximum %n argumentumot fogad, így %2 érvénytelen. + + + + %1 requires at least %n argument(s). %2 is therefore invalid. + + %1 legalább %n argumentumot fogad, így %2 érvénytelen. + - - Minimize - Minimalizálás + The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. + %1 első paramétere nem lehet %2 típusú. Csak numerikus típus, xs:yearMonthDuration vagy dayTimeDuration lehet. - - Restore Down - Leállítás + The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + %1 első argumentuma nem lehet %2 típusú. Csak %3, %4 vagy %5 megengedett. - - &Restore - &Letárolás + The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + %1 második paramétere nem lehet %2 típusú. Csak %3, %4 vagy %5 megengedett. - - &Move - &Mozgatás + %1 is not a valid XML 1.0 character. + %1 érvénytelen XML 1.0 karakter. - - &Size - &Méret + The first argument to %1 cannot be of type %2. + %1 első argumentuma nem lehet %2 típusú. - - Mi&nimize - &Minimalizálás + The root node of the second argument to function %1 must be a document node. %2 is not a document node. + %1 függvény második argumentumának gyökér csomópontja document típusú kell legyen. %2 nem document csomópont. - - Ma&ximize - Ma&ximalizálás + If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. + Ha mindkét értékben zóna eltolás van, akkor annak azonosnak kell lennie. %1 és %2 nem egyezik. - - Stay on &Top - &Tetején maradni + %1 was called. + %1 meghívva. - - &Close - &Bezárás + %1 must be followed by %2 or %3, not at the end of the replacement string. + %1-t %2 vagy %3 kell kövesse, nem a helyettesítő végén. - - Maximize - Maximalizálás + In the replacement string, %1 must be followed by at least one digit when not escaped. + A(z) %1 csereszöveget legalább egy számjegy kell kövesse, amennyiben az nincs escapelve. - - Unshade - Árnyékolás megszüntetése + In the replacement string, %1 can only be used to escape itself or %2, not %3 + A csereszövegben %1 csak önmaga vagy %2 escapelésére használható, %3-ra nem - - Shade - Árnyákolás + %1 matches newline characters + %1 illeszkedik az újsor karakterekre - - Restore - Visszaállítás + %1 and %2 match the start and end of a line. + %1 és %2 a sor elejére és végére is illeszkedik. - - Help - Súgó + Matches are case insensitive + Az illeszkedések nem nagybetű-érzékenyek - - Menu - Menü + Whitespace characters are removed, except when they appear in character classes + A nem nyomtatható karakterek törlésre kerülnek, kivétel ha karakter osztályokban szerepelnek - - - [%1] - - [%1] + %1 is an invalid regular expression pattern: %2 + %1 érvénytelen reguláris kifejezés minta: %2 - - - QMenu - - - Close - Bezárás + %1 is an invalid flag for regular expressions. Valid flags are: + %1 érvénytelen kapcsoló reguláris kifejezésekhez. Az érvényes kapcsolók: - - - Open - Megnyitás + If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. + Ha az első argumentum az üres szekvencia vagy egy nulla hosszúságú sztring (névtér nélkül), akkor nem adható meg prefixum. %1 prefixum lett megadva. - - - - Execute - Végrehajtás + It will not be possible to retrieve %1. + Nem lesz lehetséges %1 lekérése. - - - QMenuBar - - Actions - Tevékenységek + The default collection is undefined + Nincs meghatározva az alapértelmezett kollekció - - - QMessageBox - - - - - OK - OK + %1 cannot be retrieved + %1-t nem lehet lekérni - - <h3>About Qt</h3><p>This program uses Qt version %1.</p> - <h3>Qt-ról</h3><p>Ez a program a(z) %1 Qt verziót használja.</p> + The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). + none ==? semmi, valamelyest félreérthető + %1 normalizált formája nem támogatott. A támogatott formák %2, %3, %4 és %5 vagy semmi, pl. az üres sztring (normalizálás nélkül). - - <p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&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.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>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.</p><p>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.</p><p>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.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p> - + A zone offset must be in the range %1..%2 inclusive. %3 is out of range. + Egy zónaeltolásnak a(z) %1..%2 nyílt intervallumba kell esnie. %3 az értékhatáron kívül van. - - About Qt - Qt-ról + %1 is not a whole number of minutes. + %1 nem egész számú perc. - - Help - Súgó + The URI cannot have a fragment + A URI nem tartalmazhat töredéket - - Show Details... - Részletek megjelenítése... + Required cardinality is %1; got cardinality %2. + Az elvárt kardinalitás %1, azonban %2 lett megadva. - - Hide Details... - Részletek elrejtése... + The item %1 did not match the required type %2. + %1 elem nem egyezik a várt %2 típussal. - - - QMultiInputContext - - Select IM - IM kiválasztása + Attribute %1 cannot appear on the element %2. Only the standard attributes can appear. + A(z) %1 attribútum nem jelenhet meg %2 elemben. Csak szabványos attribútumok szerepelhetnek. - - - QMultiInputContextPlugin - - Multiple input method switcher - Összetett beviteli eljárás kapcsoló + Attribute %1 cannot appear on the element %2. Only %3 is allowed, and the standard attributes. + A(z) %1 attribútum nem jelenhet meg %2 elemben. Csak %3 és a szabványos attribútumok szerepelhetnek. - - Multiple input method switcher that uses the context menu of the text widgets - Összetett beviteli eljárás kapcsoló, ami a szöveg widgetek menü összefüggéseit használja + Attribute %1 cannot appear on the element %2. Allowed is %3, %4, and the standard attributes. + A(z) %1 attribútum nem jelenhet meg %2 elemben. Csak %3, %4 és a szabványos attribútumok szerepelhetnek. - - - QNativeSocketEngine - - The remote host closed the connection - A távoli hoszt bezárta a kapcsolatot + Attribute %1 cannot appear on the element %2. Allowed is %3, and the standard attributes. + A(z) %1 attribútum nem jelenhet meg %2 elemben. Csak %3 és a szabványos attribútumok szerepelhetnek. - - Network operation timed out - Hálózati művelet időtúllépése + XSL-T attributes on XSL-T elements must be in the null namespace, not in the XSL-T namespace which %1 is. + Az XSL-T elemekhez tartozó XSL-T attribútumoknak a null névtérben kell szerepelniük, nem a(z) %1 XSL-T névtérben. - - Out of resources - Kifogytak az erőforrások + The attribute %1 must appear on element %2. + A(z) %1 attribútumnak %2 elemben kell megjelennie. - - Unsupported socket operation - Nem támogatott socket művelet + The element with local name %1 does not exist in XSL-T. + %1 lokális nevű elem nem létezik az XSL-T-ben. - - Protocol type not supported - Nem támogatott protokoll típus + The variable %1 is unused + A(z) %1 változó nincs használva - - Invalid socket descriptor - Érvénytelen socket leíró + A construct was encountered which only is allowed in XQuery. + Olyan szerkezetet találtam, ami csak XQuery-ben engedélyezett. - - Network unreachable - A hálózat nem elérhető + W3C XML Schema identity constraint selector + W3C XML séma azonosító szabály kiválasztó - - Permission denied - Engedély megtagadva + W3C XML Schema identity constraint field + W3C XML séma azonosító szabály mező - - Connection timed out - Kapcsolat időtúllépés + %1 is an unknown schema type. + %1 ismeretlen séma típus. - - Connection refused - Kapcsolat elutasítva + A template by name %1 has already been declared. + %1 néven már lett sablon deklarálva. - - The bound address is already in use - A cím összeköttetés már használatban van + %1 is not a valid numeric literal. + %1 érvénytelen numerikus literál. - - The address is not available - A cím nem elérhető + Only one %1 declaration can occur in the query prolog. + Csak egy %1 deklaráció szerepelhet a lekérdezés bevezetésben. - - The address is protected - A cím védett + The initialization of variable %1 depends on itself + %1 változó inicializálása önmagától függ - - Unable to send a message - Nem lehet üzenetet küldeni + No variable by name %1 exists + Nem létezik %1 nevű változó - - Unable to receive a message - Nem lehet megkapni az üzeneteket + Version %1 is not supported. The supported XQuery version is 1.0. + A(z) %1 verzió nem támogatott. A támogatott verzió XQuery 1.0. - - Unable to write - Nem lehet írni + The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. + %1 kódolás érvénytelen. Csak Latin karaktereket tartalmazhat, nem nyomtatható karakterek nélkül és illeszkednie kell %2 reguláris kifejezésre. - - Network error - Hálózati hiba + No function with signature %1 is available + %1 nevű függvény nem található - - Another socket is already listening on the same port - Egy másik socker már ugyanazon a porton figyel + A default namespace declaration must occur before function, variable, and option declarations. + Egy alapértelmezett névtér deklarációnak meg kell előznie a függvény-, változó- és opció deklarációkat. - - Unable to initialize non-blocking socket - Nem lehet inicializálni egy nem blokkoló socketet + Namespace declarations must occur before function, variable, and option declarations. + A névtér deklarációknak meg kell előzniük a függvény-, változó- és opció deklarációkat. - - Unable to initialize broadcast socket - Nem lehet inicializálni a socket közvetítőt + Module imports must occur before function, variable, and option declarations. + Modul importoknak meg kell előzniük a függvény-, változó- és opció deklarációkat. - - Attempt to use IPv6 socket on a platform with no IPv6 support - IPv6 socket használatának kipróbálása olyan platformon, amelyik nem támogatja az IPv6-t + The keyword %1 cannot occur with any other mode name. + %1 kulcsszó nem szerepelhet együtt semmilyen más mód névvel. - - Host unreachable - A hoszt nem elérhető + The value of attribute %1 must of type %2, which %3 isn't. + %1 attribútumának %2 típusúnak kell lennie, aminek %3 nem felel meg. - - Datagram was too large to send - A datagram túl nagy volt elküldésre + It is not possible to redeclare prefix %1. + %1 prefixum újradeklarálása nem lehetséges. - - Operation on non-socket - Nem socketen végzett művelet + The prefix %1 can not be bound. By default, it is already bound to the namespace %2. + %1 prefixum nem köthető. Alapértelmezés szerint már kötve van %2 névtérhez. - - Unknown error - Ismeretlen hiba + Prefix %1 is already declared in the prolog. + %1 prefixum már deklarálva van a bevezetésben. - - The proxy type is invalid for this operation - A proxy típusa ismeretlen erre a műveletre + The name of an option must have a prefix. There is no default namespace for options. + Egy opció nevének kötelező prefixumot megadni. Nics alapértelmezett névetér az opciók számára. - - - QNetworkAccessCacheBackend - - Error opening %1 - Hiba történt a(z) %1 megnyitása közben + The Schema Import feature is not supported, and therefore %1 declarations cannot occur. + A Schema Import szolgáltatás nem támogatott, így %1 deklarációk nem fogadhatók el. - - - QNetworkAccessDebugPipeBackend - - Write error writing to %1: %2 - Írása hiba történt a(z) %1-be történő írás közben: %2 + The target namespace of a %1 cannot be empty. + %1 cél névtere nem lehet üres. - - - QNetworkAccessFileBackend - - - Request for opening non-local file %1 - Kérés a(z) %1 nem helyi fál megnyitására + The module import feature is not supported + A modul import szolgáltatás nem támogatott - - - Error opening %1: %2 - Hiba történt a(z) %1 megnyitása közben: %2 + A variable by name %1 has already been declared. + %1 nevű változó már deklarálva van. - - Write error writing to %1: %2 - Írási hiba történt a(z) %1-be írás közben: %2 + No value is available for the external variable by name %1. + A(z) %1 nevű külső változóhoz nem érhető el érték. - - - Cannot open %1: Path is a directory - Nem lehet megnyitni a(z) %1-t: az útvonal egy könyvtár + A stylesheet function must have a prefixed name. + Egy stíluslap függvénynek prefixummal ellátott neve kell legyen. - - Read error reading from %1: %2 - Olvasási hiba történt a(z) %1-ból való olvasás közben: %2 + The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) + Egy felhasználói függvény névtere nem lehet üres (próbálja meg a(z) %1 prefixumot, ami ilyen esetekre van fenntartva) - - - QNetworkAccessFtpBackend - - No suitable proxy found - Nem található megfelelő proxy + The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. + A(z) %1 névtér fenntartott, így felhasználói függvények nem használhatják. Próbálja meg a(z) %2 prefixumot, ami ilyen esetekre van. - - Cannot open %1: is a directory - Nem lehet megnyitni a(z) %1 t, mert az egy könyvtár + 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 + Egy függvénytár modulban definiált felhasználói függvény névtere meg kell egyezzen a modul névterével. Más szóval %1 kellene legyen %2 helyett - - Logging in to %1 failed: authentication required - A(z) %1-be történő loggolás nem sikerült: hitelesítés szükséges + A function already exists with the signature %1. + %1 szignatúrájú függvény már létezik. - - Error while downloading %1: %2 - Hiba történt a(z) %1 letöltése közben: %2 + No external functions are supported. All supported functions can be used directly, without first declaring them as external + Külső függvények nem támogatottak. Minden támogatott függvény használható, külső függvényként való deklarálás nélkül - - Error while uploading %1: %2 - Hiba történt a(z) %1 feltöltése közben: %2 + An argument by name %1 has already been declared. Every argument name must be unique. + %1 nevű argumentum már deklarálva lett. Minden argumentumnak egyedinek kell lennie. - - - QNetworkAccessHttpBackend - - No suitable proxy found - Nem található megfelelő proxy + When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. + %1 függvény minta belsejében történő illesztésekor, az argumentumnak változó referenciának vagy szöveges literálnak kell lennie. - - - QNetworkReply - - Error downloading %1 - server replied: %2 - Hiba történt a(z) %1 letöltése közben - a szerver válasza: %2 + In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. + Egy XSL-T mintában %1 függvény első argumentumának szöveges literálnak kell lennie, ha illesztéshez használjuk. - - Protocol "%1" is unknown - A(z) '%1' protokoll ismeretlen + In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. + Egy XSL-T mintában %1 függvény első argumentumának szöveges literálnak vagy változó referenciának kell lennie, ha illesztéshez használjuk. - - - QNetworkReplyImpl - - - Operation canceled - Művelet visszavonása + In an XSL-T pattern, function %1 cannot have a third argument. + Egy XSL-T mintában %1 függénynek nem lehet harmadik argumentuma. - - - QOCIDriver - - Unable to logon - Nem lehet bejelentkezni + In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. + Egy XSL-T mintában csak %1 és %2 függvények használhatók illesztéshez, %3 nem. - - Unable to initialize - QOCIDriver - Nem lehet inicializálni + In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. + Egy XSL-T mintában %1 tengely nem, csak %2 vagy %3 tengely használható. - - Unable to begin transaction - Nem lehet megkezdeni a tranzakciót + %1 is an invalid template mode name. + %1 érvénytelen sablon mód név. - - Unable to commit transaction - Nem lehet kommitolni a tranzakciót + The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. + Egy for-kifejezésben kötött változó nevének különbözőnek kell lennie, mint a pozicionális változó neve. Így a két %1 nevű változó ütközik. - - Unable to rollback transaction - Nem lehet visszagörgetni a tranzakciót + The Schema Validation Feature is not supported. Hence, %1-expressions may not be used. + A Schema Validation szolgáltatás nem támogatott. Ennélfogva %1-kifejezések nem használhatók. - - - QOCIResult - - - - Unable to bind column for batch execute - Nem lehet összekötni az oszlopot köteg végrehajtásra + None of the pragma expressions are supported. Therefore, a fallback expression must be present + Pragma kifejezések egyike sem támogatott. Ennélfogva léteznie kell egy alapértelmezett kifejezésnek - - Unable to execute batch statement - Nem lehet végrehajtani a köteg állítást + Each name of a template parameter must be unique; %1 is duplicated. + Minden sablonparaméter neve egyedi kell legyen, %1 azonban duplán szerepel. - - Unable to goto next - Nem lehet a következőre ugrani + The %1-axis is unsupported in XQuery + A(z) %1-tengely nem támogatott XQuery-ben - - Unable to alloc statement - Nem lehet helyet lefoglalni az állításnak + No function by name %1 is available. + Nincs %1 nevű függvény. - - Unable to prepare statement - Nem lehet felkészülni a műveletre + The namespace URI cannot be the empty string when binding to a prefix, %1. + Prefixumhoz kötés esetén a névtér URI nem lehet az üres sztring, %1. - - Unable to get statement type - Nem lehet megszerezni az állítás típusát + %1 is an invalid namespace URI. + %1 érvénytelen névtér URI. - - Unable to bind value - Nem lehet összekötni az értéket + It is not possible to bind to the prefix %1 + Nem lehet kötni %1 prefixumhoz - - Unable to execute statement - Nem lehet végrehajtani az állítást + Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared). + %1 névtér csak %2-hoz köthető (és minden esetben előre deklarált). - - - QODBCDriver - - Unable to connect - Nem lehet kapcsolódni + Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared). + %1 prefixum csak %2-hoz köthető (és minden esetben előre deklarált). - - Unable to disable autocommit - Nem lehet letiltani az automatikus kommitolást + Two namespace declaration attributes have the same name: %1. + Két névtér-deklaráció attribútum neve azonos: %1. - - Unable to commit transaction - Nem lehet kommitolni a tranzakciót + The namespace URI must be a constant and cannot use enclosed expressions. + Egy névtér URI-nek konstansnak kell lennie és nem használhat bennfoglalt kifejezéseket. - - Unable to rollback transaction - Nem lehet visszagörgetni a tranzakciót + An attribute by name %1 has already appeared on this element. + %1 nevű attribútum már szerepel ezen az elemen. - - Unable to enable autocommit - Nem lehet engedélyezni az automatikus kommitolást + A direct element constructor is not well-formed. %1 is ended with %2. + Egy közvetlen elem konstruktor nem jól formázott. %1-t %2 zárja le. - - Unable to connect - Driver doesn't support all functionality required - Nem lehet csatlakozni- A vezérlő nem támogatja az összes szükséges funkciót + The name %1 does not refer to any schema type. + A(z) %1 név nem mutat semmilyen séma típusra. - - - QODBCResult - - - QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration - QODBCEredmény::Visszaállítás: Nen lehet beállítani az 'SQL_CURSOR_STATIC' állítás attribútumra. Kérem ellenőrizze le az ODBC vezérlő konfigurációt + %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. + %1 komplex típus. Komplex típusra való konvertálás nem lehetséges. Azonban atomi típusokra, mint pl. %2 történő konvertálás igen. - - - Unable to execute statement - Nem lehet végrehajtani az állítást + %1 is not an atomic type. Casting is only possible to atomic types. + %1 nem atomi típus. Típuskonverzió csak atomi típusra történhet. - - Unable to fetch next - Nem lehet letölteni a következőt + %1 is not a valid name for a processing-instruction. + %1 érvénytelen feldogozó-utasítás név. - - Unable to prepare statement - Nem lehet felkészülni az állításra + %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. + in-scope mint XML kulcsszó vagy ~láthatósági kör??? + %1 nem a láthatóságon belüli attribútum deklarációk között van. A séma import szolgáltatás nem támogatott. - - Unable to bind variable - Nem lehet összekötni a változót + The name of an extension expression must be in a namespace. + Egy kiterjesztés kifejezés nevének névtérben kell lennie. - - - - Unable to fetch last - Nem lehet letölteni az utolsót + Element %1 is not allowed at this location. + %1 elem nem engedélyezett ezen a helyen. - - Unable to fetch - Nem lehet letölteni + Text nodes are not allowed at this location. + Szöveg csomópontok nem engedélyezettek ezen a helyen. - - Unable to fetch first - Nem letölteni az elsőt + Parse error: %1 + Értelmezési hiba: %1 - - Unable to fetch previous - Nem lehet letölteni az előzőt + The value of the XSL-T version attribute must be a value of type %1, which %2 isn't. + Az XSL-T verzió attribútum értékének %1 típusúnak kell lennie, %2 pedig nem az. - - - QObject - - Invalid hostname - Érvénytelen hoszt név + Running an XSL-T 1.0 stylesheet with a 2.0 processor. + XSL-T 1.0 stíluslap futtatása 2.0 verziójú feldolgozóval. - - Operation not supported on %1 - A művelet nem támogatott a(z) %1-n + Unknown XSL-T attribute %1. + Ismeretlen XSLT attributum: %1. - - Invalid URI: %1 - Érvénytelen URI: %1 + Attribute %1 and %2 are mutually exclusive. + %1 és %2 attribútumok kölcsönösen kizáróak. - - Socket error on %1: %2 - Socket hiba a(z) %1-n: %2 + In a simplified stylesheet module, attribute %1 must be present. + Egy egyszerűsített stíluslap modulban a(z) %1 attribútumnak jelen kell lennie. - - Remote host closed the connection prematurely on %1 - A távoli hoszt túl korán bezárta a kapcsolatot a(z) %1-n + If element %1 has no attribute %2, it cannot have attribute %3 or %4. + Ha %1 elemnek nincs %2 attribútuma, akkor %3 vagy %4 attribútuma sem lehet. - - - No host name given - Nincs hoszt név megadva + Element %1 must have at least one of the attributes %2 or %3. + %1 elemnek valamelyik attribútumát meg kell adni %2 vagy %3 közül. - - - QPPDOptionsModel - - Name - Név + At least one mode must be specified in the %1-attribute on element %2. + %2 elem %1-attribútumában legalább egy módot meg kell adni. - - Value - Érték + Element %1 must come last. + %1 elemnek az utolsónak kell lennie. - - - QPSQLDriver - - Unable to connect - Nem lehet csatlakozni + At least one %1-element must occur before %2. + Legalább egy %1-elemnek szerepelnie kell %2 előtt. - - Could not begin transaction - Nem sikerült megkezdeni a tranzakciót + Only one %1-element can appear. + Csak egy %1-elem jelenhet meg. - - Could not commit transaction - Nem lehet kommitolni a tranzakciót + At least one %1-element must occur inside %2. + Legalább egy %1-elemnek meg kell jelennie %2-n belül. - - Could not rollback transaction - Nem lehet visszagörgetni a tranzakciót + When attribute %1 is present on %2, a sequence constructor cannot be used. + Ha %2-n meg van adva %1 attribútum, akkor nem használható szekvencia konstruktor. - - Unable to subscribe - Nem lehet feliratkozni + Element %1 must have either a %2-attribute or a sequence constructor. + %1 elemnek vagy %2-attribútumának vagy szekvencia konstruktorának lennie kell. - - Unable to unsubscribe - Nem lehet leiratkozni + When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. + Ha paraméter az elvárt, akkor alapértelmezett értéket nem lehet %1-attribútumon vagy szekvencia konstruktoron keresztül átadni. - - - QPSQLResult - - Unable to create query - Nem lehet létrehozni a lekérdezést + Element %1 cannot have children. + %1 elemnek nem lehetnek gyermekei. - - Unable to prepare statement - Nem lehet felkészülni az állításra + Element %1 cannot have a sequence constructor. + %1 elemnek nem lehet szekvencia konstruktora. - - - QPageSetupWidget - - Centimeters (cm) - Centiméter (cm) + The attribute %1 cannot appear on %2, when it is a child of %3. + %1 attribútum nem szerepelhet %2-n, ha az %3 gyermeke. - - Millimeters (mm) - Milliméter (mm) + A parameter in a function cannot be declared to be a tunnel. + Egy függvényparaméter nem definiálható mint tunnel. - - Inches (in) - Incs (in) + This processor is not Schema-aware and therefore %1 cannot be used. + Ez a feldolgozó nem séma függő, ezért %1 nem használható. - - Points (pt) - Pont (pt) + Top level stylesheet elements must be in a non-null namespace, which %1 isn't. + Felső szintű stíluslap elemeknek egy nem üres névtérben kell lenniük, ezért %1 nem jó. - - Form - + The value for attribute %1 on element %2 must either be %3 or %4, not %5. + %2 elem %1 attribútumának értéke %3 vagy %4 kell legyen, de nem %5. - - Paper - Papír + Attribute %1 cannot have the value %2. + %1 attribútum értéke nem lehet %2. - - Page size: - Lap méret: + The attribute %1 can only appear on the first %2 element. + %1 attribútum csak az első %2 elem esetén jelenhet meg. - - Width: - Szélesség: + At least one %1 element must appear as child of %2. + Legalább egy %1 elemnek %2 gyermekének kell lennie. - - Height: - Magasság: + empty + üres - - Paper source: - Papír forrás: + zero or one + nulla vagy egy - - Orientation - Elhelyezkedés + exactly one + pontosan egy - - Portrait - Portré + one or more + egy vagy több - - Landscape - Tájkép + zero or more + nulla vagy több - - Reverse landscape - Fordított tájkép + Required type is %1, but %2 was found. + Az elvárt típus %1, de a kapott %2. - - Reverse portrait - Fordított portré + Promoting %1 to %2 may cause loss of precision. + %1 átalakítása %2 típusra a pontosság elvesztését okozhatja. - - Margins - Margó + The focus is undefined. + A fókusz nincs definiálva. - - top margin - Felső margó + It's not possible to add attributes after any other kind of node. + Semmilyen más csomópont után nem adható meg attribútum. - - left margin - Bal margó + An attribute by name %1 has already been created. + %1 nevű attribútum már létre van hozva. - - right margin - Jobb margó + Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. + Csak a Unicode Codepoint Collation támogatott(%1). %2 nem támogatott. - - bottom margin - Alsó margó + derived element %1 has weaker value constraint than base particle + %1 leszármazott elem értékére vonatkozó megszorítás gyengébb, mint az ősre vonatkozó @@ -3797,15 +6171,15 @@ Mégis törölni szeretné? The plugin was not loaded. - A beépülő modult nem sikerült betölteni. + A plugin nem lett betöltve. QPrintDialog - + locally connected - Helyileg csatlakoztatva + helyben csatlakoztatva @@ -3820,22 +6194,15 @@ Mégis törölni szeretné? ismeretlen - - OK - OK - - - - Print all - Az összes kinyomtatása + Portrait + Álló - - Print range - Egy tartomány kinyomtatása + Landscape + Fekvő - + A0 (841 x 1189 mm) A0 (841 x 1189 mm) @@ -3855,7 +6222,12 @@ Mégis törölni szeretné? A3 (297 x 420 mm) - + + A4 (210 x 297 mm, 8.26 x 11.7 inches) + A4 (210 x 297 mm, 8.26 x 11.7 inch) + + + A5 (148 x 210 mm) A5 (148 x 210 mm) @@ -3905,7 +6277,12 @@ Mégis törölni szeretné? B4 (250 x 353 mm) - + + B5 (176 x 250 mm, 6.93 x 9.84 inches) + B5 (176 x 250 mm, 6.93 x 9.84 inch) + + + B6 (125 x 176 mm) B6 (125 x 176 mm) @@ -3940,54 +6317,65 @@ Mégis törölni szeretné? DLE (110 x 220 mm) - + + Executive (7.5 x 10 inches, 191 x 254 mm) + Executive (7.5 x 10 inch, 191 x 254 mm) + + + Folio (210 x 330 mm) - Fólió (210 x 330 mm) + Folio (210 x 330 mm) Ledger (432 x 279 mm) - Főkönyv (432 x 279 mm) + Ledger (432 x 279 mm) - + + Legal (8.5 x 14 inches, 216 x 356 mm) + Legal (8.5 x 14 inch, 216 x 356 mm) + + + + Letter (8.5 x 11 inches, 216 x 279 mm) + Letter (8.5 x 11 inch, 216 x 279 mm) + + + Tabloid (279 x 432 mm) - Tabletta (279 x 432 mm) + Tabloïd (279 x 432 mm) US Common #10 Envelope (105 x 241 mm) - US közös #10 bélyeg (105 x 241 mm) + US Common #10 Envelope (105 x 241 mm) - - A4 (210 x 297 mm, 8.26 x 11.7 inches) - A4 (210 x 297 mm, 8.26 x 11.7 inches) + + The 'From' value cannot be greater than the 'To' value. + Az első oldal száma nem lehet nagyobb, mint az utolsó oldalé. - - B5 (176 x 250 mm, 6.93 x 9.84 inches) - B5 (176 x 250 mm, 6.93 x 9.84 inches) + + OK + OK - - Executive (7.5 x 10 inches, 191 x 254 mm) - Vezető (7.5 x 10 inches, 191 x 254 mm) + Cancel + Mégsem - - Legal (8.5 x 14 inches, 216 x 356 mm) - Legális (8.5 x 14 inches, 216 x 356 mm) + Page size: + Oldalméret: - - Letter (8.5 x 11 inches, 216 x 279 mm) - Levél (8.5 x 11 inches, 216 x 279 mm) + Orientation: + Tájolás: - - Print selection - Nyomtatási kiválasztás + Paper source: + Papírforrás: @@ -3997,165 +6385,251 @@ Mégis törölni szeretné? Nyomtatás + File + Fájl + + + Printer + Nyomtató + + Print To File ... - Fájlba nyomtatás ... + Nyomtatás fájlba... - + Print dialog + Nyomtatási ablak + + + Paper format + Papírformátum + + + Size: + Méret: + + + Properties + Tulajdonságok + + + Printer info: + Nyomtató információ: + + + Browse + Böngészés + + + Print to file + Nyomtatás fájlba + + + + Print range + Nyomtatási tartomány + + + + Print all + Összes nyomtatása + + + Pages from + Kezőoldal + + + to + utolsó oldal + + + Selection + Kijelölés + + + Copies + Másolatok + + + Number of copies: + Másolatok száma: + + + Collate + Egyeztetés + + + Print last page first + Először az utolsó oldal nyomtatása + + + Other + Egyéb + + + Print in color if available + Színes nyomtatás, ha lehetséges + + + Double side printing + Kétszeres méretű nyomtatás + + + File %1 is not writable. Please choose a different file name. - A(z) %1 fájl nem írható. -Kérem válasszon különböző fájl nevet. + %1 fájl nem írható. +Válasszon másik fájlnevet. %1 already exists. Do you want to overwrite it? - A(z) %1 már létezik. -Felül szeretné írni? + %1 már létezik. +Felülírja? - + File exists - Fájl létezik + A fájl létezik <qt>Do you want to overwrite it?</qt> - <qt>Felül szeretné írni?</qt> + <qt>Felülírja?</qt> + + + + Print selection + Kijelölés nyomtatása %1 is a directory. Please choose a different file name. - A(z) %1 egy könyvtár. -Kérem válasszon egy különböző fájl nevet. - - - - The 'From' value cannot be greater than the 'To' value. - A '-Tól' érték nem lehet nagyobb az '-Ig' értéknél. + %1 egy könyvtár. +Válasszon másik fájlnevet. A0 - A0 + A1 - A1 + A2 - A2 + A3 - A3 + A4 - A4 + A5 - A5 + A6 - A6 + A7 - A7 + A8 - A8 + A9 - A9 + B0 - B0 + B1 - B1 + B2 - B2 + B3 - B3 + B4 - B4 + B5 - B5 + B6 - B6 + B7 - B7 + B8 - B8 + B9 - B9 + B10 - B10 + C5E - C5E + DLE - DLE + Executive - Vezető + @@ -4165,12 +6639,12 @@ Kérem válasszon egy különböző fájl nevet. Ledger - Főkönyv + Legal - Legális + @@ -4180,12 +6654,12 @@ Kérem válasszon egy különböző fájl nevet. Tabloid - Tabletta + US Common #10 Envelope - US közös #10 bélyeg + US általános #10-es boríték @@ -4199,19 +6673,24 @@ Kérem válasszon egy különböző fájl nevet. &Opciók >> - + + &Print + &Nyomtatás + + + &Options << &Opciók << Print to File (PDF) - Fájlba nyomtatás (PDF) + Nyomtatás fájlba (PDF) Print to File (Postscript) - Fájlba nyomtatás (Postscript) + Nyomtatás fájlba (PostScript) @@ -4221,55 +6700,56 @@ Kérem válasszon egy különböző fájl nevet. Write %1 file - %1 fájlba írás - - - - &Print - &Nyomtatás + írás %1 fájlba QPrintPreviewDialog - + + + Page Setup + Oldalbeállítás + + + %1% %1% - + Print Preview - Nyomtatási előnézet + Nyomtatási kép Next page - Következő lap + Következő oldal Previous page - Előző lap + Előző oldal First page - Első lap + Első oldal Last page - Utolsó lap + Utolsó oldal Fit width - Megfelelő szélesség + Szélesség igazítása Fit page - Megfelelő lap + Oldal igazítása @@ -4284,27 +6764,27 @@ Kérem válasszon egy különböző fájl nevet. Portrait - Portré + Álló Landscape - Tájkép + Fekvő Show single page - Egyetlen lap megjelenítése + Egy oldalas megjelenítés Show facing pages - Lapok megjelenítése szemből + Kétoldalas megjelenítés Show overview of all pages - Az összes lap áttekintésének megjelenítése + Az összes oldal megjelenítése @@ -4314,23 +6794,37 @@ Kérem válasszon egy különböző fájl nevet. Page setup - Lap beállítás + Oldalbeállítás - + + Close + Bezárás + + + Export to PDF - PDF-be exportálás + Exportálás PDF-be Export to PostScript - PostScript-be exportálás + Exportálás PostScript-be + + + QPrintPropertiesDialog - - - Page Setup - Lap beállítás + PPD Properties + PPD beállítások + + + Save + Mentés + + + OK + OK @@ -4338,17 +6832,17 @@ Kérem válasszon egy különböző fájl nevet. Form - Forma + Formátum Page - Lap + Papír Advanced - Speciális + Egyebek @@ -4356,57 +6850,57 @@ Kérem válasszon egy különböző fájl nevet. Form - Forma + Formátum Copies - Másolás + Másolatok Print range - Tartomány nyomtatása + Nyomtatási tartomány Print all - Az összes nyomtatása + Összes nyomtatása Pages from - Lapok ettől + Kezőoldal to - eddig + utolsó oldal Selection - Kiválasztás + Kijelölés Output Settings - Kimeneti beállítások + Kimenet beállítása Copies: - Másolatok: + Másolat: Collate - Egyeztet + Egyeztetés Reverse - Fordítva + Fordított @@ -4416,7 +6910,7 @@ Kérem válasszon egy különböző fájl nevet. Color Mode - Színes mód + Színmód @@ -4426,27 +6920,27 @@ Kérem válasszon egy különböző fájl nevet. Grayscale - Szürkeárnyalat + Szürkeárnyalatos Duplex Printing - Dupla nyomtatás + Duplex nyomtatás None - Semmi + Nincs Long side - Hosszú oldal + Hosszabb oldal Short side - Rövid oldal + Rövidebb oldal @@ -4454,7 +6948,7 @@ Kérem válasszon egy különböző fájl nevet. Form - Űrlap + Formátum @@ -4469,12 +6963,12 @@ Kérem válasszon egy különböző fájl nevet. P&roperties - Tu&lajdonságok + Tula&jdonságok Location: - Elhelyezkedés: + Hely: @@ -4500,21 +6994,46 @@ Kérem válasszon egy különböző fájl nevet. QProcess + + + + + Error reading from process + Hiba a folyamat kimenetéről olvasáskor + + + + + + Error writing to process + Hiba a folyamat bemenetére íráskor + + + + Process crashed + A folyamat összeomlott + + + + No program defined + A programnév nincs megadva + + - + Could not open input redirection for reading - Nem sikerült megnyitni a bevitel olvasásra irányítását + Az átirányított bemenet megnyitása olvasásra sikertelen Could not open output redirection for writing - Nem sikerült megnyitni a kimenet írásra irányítását + Az átirányított kimenet megnyitása írásra sikertelen Resource error (fork failure): %1 - Erőforrás hiba (Szétágazás hiba): %1 + A forkolás sikertelen: %1 @@ -4527,37 +7046,16 @@ Kérem válasszon egy különböző fájl nevet. Process operation timed out - Folyamat művelet időtúllépés - - - - - - - Error reading from process - Hiba történt a folyamat olvasása közben - - - - - - Error writing to process - Hiba történt a folyamat írása közben - - - - Process crashed - A folyamat összeomlott + A művelet időtúllépés miatt megszakadt - - No program defined - Nincs program definiálva + Process failed to start + A folyamat nem indult el - + Process failed to start: %1 - Nem sikerült elindítani a folyamatot: %1 + A művelet előkészítése nem lehetséges: %1 @@ -4565,7 +7063,7 @@ Kérem válasszon egy különböző fájl nevet. Cancel - Mégse + Mégsem @@ -4581,7 +7079,7 @@ Kérem válasszon egy különböző fájl nevet. Check - Ellenőrzés + Kijelölés @@ -4594,22 +7092,22 @@ Kérem válasszon egy különböző fájl nevet. disabled feature used - tiltás tulajdonság használva + letiltott lehetőség használata bad char class syntax - rossz karakter osztály szintakszis + rossz karakterosztály-szintaxis bad lookahead syntax - rossz előreolvasási szintakszis + rossz lookahead-szintaxis bad repetition syntax - rossz ismétlési szintakszis + rossz ismétlés-szintaxis @@ -4619,17 +7117,17 @@ Kérem válasszon egy különböző fájl nevet. missing left delim - hiányzó bal határolójel + hiányzó baloldali határoló unexpected end - váratlan vég + váratlan befejezés met internal limit - találkozott belső korlát + belső korlát elérve @@ -4645,100 +7143,112 @@ Kérem válasszon egy különböző fájl nevet. QSQLite2Driver - + Error to open database + Adatbázis megnyitási hiba + + + Error opening database - Hiba történt az adatbázis megnyitása közben + Adatbázis megnyitási hiba Unable to begin transaction - Nem lehet elkezdeni a tranzakciót + A tranzakció nem indítható Unable to commit transaction - Nem lehet kommitolni a tranzakciót + A tranzakció nem véglegesíthető Unable to rollback transaction - Nem lehet visszagörgetni a tranzakciót + A tranzakció nem görgethető vissza + + + Unable to rollback Transaction + A tranzakció nem görgethető vissza QSQLite2Result - + Unable to fetch results - Nem lehet letölteni az eredményeket + Az eredmények nem olvashatók ki - + Unable to execute statement - Nem lehet végrehajtani az állítást + A parancs nem hajtható végre QSQLiteDriver - + Error opening database - Hiba történt az adatbázis megnyitása közben + Adatbázis megnyitási hiba Error closing database - Hiba történt az adatbázis bezárása közben + Adatbázis bezárási hiba Unable to begin transaction - Nem lehet elkezdeni a tranzakciót + A tranzakció nem indítható Unable to commit transaction - Nem lehet kommitolni a tranzakciót + A tranzakció nem véglegesíthető + + + Unable to roll back transaction + A tranzakció nem görgethető vissza Unable to rollback transaction - Nem lehet visszagörgetni a tranzakciót + A tranzakció nem görgethető vissza QSQLiteResult - + Unable to fetch row - Nem lehet leszedni a sort + A sor nem olvasható ki Unable to execute statement - Nem lehet végrehajtani az állítást + A parancs nem hajtható végre Unable to reset statement - Nem lehet visszaállítani az állítást + A parancs nem vonható vissza Unable to bind parameters - Nem lehet összekötni a paramétereket + A paraméterek kötése sikertelen Parameter count mismatch - A paraméter számláló nem megfelelő + A paraméterek száma nem megfelelő No query - Nincs lekérdezés + Üres lekérdezés @@ -4746,12 +7256,12 @@ Kérem válasszon egy különböző fájl nevet. ID - Azonosító + ID Location - Elhelyezkedés + Hely @@ -4761,17 +7271,17 @@ Kérem válasszon egy különböző fájl nevet. Ignore-count - Számítás mellőzése + Kihagyások száma Single-shot - Egylövetű + Hit-count - Leütés számítás + Találatok száma @@ -4793,7 +7303,7 @@ Kérem válasszon egy különböző fájl nevet. Go to Line - Ugrás erre a sorra + Sorra ugrás @@ -4808,7 +7318,7 @@ Kérem válasszon egy különböző fájl nevet. Shift+F5 - Shift+F5 + @@ -4818,97 +7328,97 @@ Kérem válasszon egy különböző fájl nevet. F5 - F5 + Step Into - Belelépés + Beleugrás F11 - F11 + Step Over - Átlépés + Átugrás F10 - F10 + Step Out - Kilép + Kiugrás Shift+F11 - Shift+F11 + Run to Cursor - Kurzorra futás + Futtatás a kurzortól Ctrl+F10 - Ctrl+F10 + Run to New Script - Az új Szkriptre futás + Toggle Breakpoint - Töréspont kapcsolgatása + Töréspont beállítása F9 - F9 + Clear Debug Output - Debug kimenet kiürítése + Debug kimenet törlése Clear Error Log - Error Log kiürítése + Hibanapló törlése Clear Console - Konzol kiürítése + Konzol törlése &Find in Script... - Szkriptben &keresés... + &Keresés a parancsfájlban... Ctrl+F - Ctrl+F + Find &Next - &Következő keresése + Kö&vetkező keresése F3 - F3 + @@ -4918,17 +7428,17 @@ Kérem válasszon egy különböző fájl nevet. Shift+F3 - Shift+F3 + Ctrl+G - Ctrl+G + Debug - Debug + Hibakeresés @@ -4951,23 +7461,23 @@ Kérem válasszon egy különböző fájl nevet. Case Sensitive - Kis és nagybetű érzékeny + Kis/nagybetű érzékeny Whole words - Egész szavakat + Teljes szó <img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Search wrapped - <img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Keresés tördelve + <img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;A keresés befejeződött QScriptDebuggerLocalsModel - + Name Név @@ -4992,7 +7502,7 @@ Kérem válasszon egy különböző fájl nevet. Location - Elhelyezkedés + Hely @@ -5000,12 +7510,12 @@ Kérem válasszon egy különböző fájl nevet. Toggle Breakpoint - Töréspont kapcsolgatása + Töréspont beállítása Disable Breakpoint - Töréspont tiltása + Töréspont letiltása @@ -5015,7 +7525,7 @@ Kérem válasszon egy különböző fájl nevet. Breakpoint Condition: - Töréspont feltétel: + Töréspont állapota: @@ -5023,7 +7533,7 @@ Kérem válasszon egy különböző fájl nevet. Loaded Scripts - Betöltött szkriptek + Betöltött parancsfájlok @@ -5053,7 +7563,7 @@ Kérem válasszon egy különböző fájl nevet. Error Log - Hiba Log + Hibanapló @@ -5068,7 +7578,7 @@ Kérem válasszon egy különböző fájl nevet. Qt Script Debugger - Qt szkript debugger + Qt parancsfájl-hibakereső @@ -5089,44 +7599,44 @@ Kérem válasszon egy különböző fájl nevet. Left edge - Bal szegély + Bal szélen Top - Tető + Fent Right edge - Jobb szegély + Jobb szélen Bottom - Alja + Lent Page left - Lapzoás balra + Oldal balra Page up - Lapozás felfele + Oldal felfelé Page right - Lapozás jobbra + Oldal jobbra Page down - Lapozás lefele + Oldal lefelé @@ -5136,7 +7646,7 @@ Kérem válasszon egy különböző fájl nevet. Scroll up - Görgetés felfele + Görgetés felfelé @@ -5146,48 +7656,53 @@ Kérem válasszon egy különböző fájl nevet. Scroll down - Görgetés lefele + Görgetés lefelé Line up - Egy sorral feljebb + Sor felfelé Position - Pozíció + Helyzet Line down - Egy sorral lejjebb + Sor lefelé QSharedMemory - + + %1: unable to set key on lock + %1:a kulcs beállítása sikertelen a zároláson + + + %1: create size is less then 0 - %1: 0-nál kisebb méret létrehozása + %1: a megadott méret kissebb mint 0 %1: unable to lock - %1: Nem lehet zárolni + %1: a zárolás sikertelen %1: unable to unlock - %1: Nem lehet kinyitni + %1: a feloldás sikertelen - + %1: permission denied - %1: engedély megtagadva + %1: hozzáférés megtagadva @@ -5199,14 +7714,14 @@ Kérem válasszon egy különböző fájl nevet. %1: doesn't exists - %1: nem létezik + %1: nem tatlálható %1: out of resources - %1: Kifogyott az erőforrásból + %1: az erőforrások elfogytak @@ -5218,19 +7733,23 @@ Kérem válasszon egy különböző fájl nevet. %1: key is empty - %1: Üres kulcs + %1: a kulcs hiányzik + + + %1: unix key file doesn't exists + %1: az unix kulcsfájl hiányzik %1: ftok failed - %1: ftok hiba + %1: ftok hibát adott vissza %1: unable to make key - %1: Nem lehet kulcsot csinálni + %1: a kulcs elkészítése sikertelen @@ -5241,23 +7760,23 @@ Kérem válasszon egy különböző fájl nevet. %1: UNIX key file doesn't exist - %1: UNIX kulcs fájl nem létezik + %1: az UNIX kulcsfájl nem létezik %1: system-imposed size restrictions - %1: a rendszer rárakott méretének korlátozásai + %1: a rendszer méretkorlátokat állított fel %1: not attached - %1: nincs hozzácsatolva + %1: nem lesz csatolva %1: invalid size - %1: érvénytelen méret + %1: hibás méret @@ -5268,12 +7787,7 @@ Kérem válasszon egy különböző fájl nevet. %1: size query failed - %1: méret lekérdezési hiba - - - - %1: unable to set key on lock - %1: nem lehet beállítani a kulcsot a záron + %1: hiba a méret lekérdezésekor @@ -5281,117 +7795,117 @@ Kérem válasszon egy különböző fájl nevet. Space - Space + Szóköz Esc - Esc + Tab - Tab + Backtab - Backtab + Backspace - Backspace + Return - Return + Enter - Enter + Ins - Ins + Del - Del + Pause - Pause + Print - Print + SysReq - SysReq + Home - Home + End - End + Left - Left + Bal Up - Up + Fel Right - Right + Jobb Down - Down + Le PgUp - PgUp + PgDown - PgDown + CapsLock - CapsLock + NumLock - NumLock + ScrollLock - ScrollLock + @@ -5416,57 +7930,57 @@ Kérem válasszon egy különböző fájl nevet. Stop - Leállítás + Stop Refresh - Felfrissítés + Frissítés Volume Down - Hangerő lehalkítása + Hangerő csökkentése Volume Mute - Hangerő Elnémítás + Némítás Volume Up - Hangerő hangosítása + Hangerő növelése Bass Boost - Basszus erősítés + Mély hang kiemelése Bass Up - Basszus növelése + Mély hang növelése Bass Down - Basszus csökkentése + Mély hang csökkentése Treble Up - Felháromszorozás + Magas hang növelése Treble Down - Leharmadolás + Magas hang csökkentése Media Play - Média elindítása + Média lejátszása @@ -5491,7 +8005,7 @@ Kérem válasszon egy különböző fájl nevet. Favorites - Kedvcencek + Kedvencek @@ -5501,127 +8015,127 @@ Kérem válasszon egy különböző fájl nevet. Standby - Készenlét + Standby Open URL - URL megnyitása + URL megynyitása Launch Mail - Mail indítása + Levelezőprogram indítása Launch Media - Média indítása + Médialejátszó indítása Launch (0) - Elindítás (0) + (0) indítása Launch (1) - Elindítás (1) + (1) indítása Launch (2) - Elindítás (2) + (2) indítása Launch (3) - Elindítás (3) + (3) indítása Launch (4) - Elindítás (4) + (4) indítása Launch (5) - Elindítás (5) + (5) indítása Launch (6) - Elindítás (6) + (6) indítása Launch (7) - Elindítás (7) + (7) indítása Launch (8) - Elindítás (8) + (8) indítása Launch (9) - Elindítás (9) + (9) indítása Launch (A) - Elindítás (A) + (A) indítása Launch (B) - Elindítás (B) + (B) indítása Launch (C) - Elindítás (C) + (C) indítása Launch (D) - Elindítás (D) + (D) indítása Launch (E) - Elindítás (E) + (E) indítása Launch (F) - Elindítás (F) + (F) indítása Monitor Brightness Up - Monitorfény növelése + Fényesség növelése Monitor Brightness Down - Monitorfény csökkentése + Fényesség csökkentése Keyboard Light On/Off - Billentyű világítás be/ki + Billentyűzet világítás be/ki Keyboard Brightness Up - Billentyűfény növelése + Billentyűzet fényerő növelése Keyboard Brightness Down - Billentyűfény csökkentése + Billentyűzet fényerő csökkentése @@ -5631,27 +8145,27 @@ Kérem válasszon egy különböző fájl nevet. Wake Up - Felébresztés + Ébresztés Eject - Kidobás + Tálcanyitás Screensaver - Képernyővédő + Képernyőkímélő WWW - WWW + Sleep - Alvás + Altatás @@ -5666,22 +8180,22 @@ Kérem válasszon egy különböző fájl nevet. History - Történelem + Előzmények Add Favorite - Hozzáadás a kedvencekhez + Kedvenc hozzáadása Hot Links - Hot linkek + Gyorslinkek Adjust Brightness - Fényszabályozás + Fényerő beállítása @@ -5696,22 +8210,25 @@ Kérem válasszon egy különböző fájl nevet. Audio Rewind - Audió áttekercselés + Visszatekerés Back Forward - Előre hátra + CHECKIT + Előre-hátra Application Left - Alkalmazás balra + CHECKIT + Alkalmazás bal Application Right - Alkalmazás jobbra + CHECKIT + Alkalmazás jobb @@ -5731,12 +8248,12 @@ Kérem válasszon egy különböző fájl nevet. Clear - Tiszta + Törlés Clear Grab - Tiszta megmarkolás + Elfogás törlése @@ -5756,6 +8273,7 @@ Kérem válasszon egy különböző fájl nevet. Display + CHECKIT - Kijelző? Megjelenítés @@ -5771,7 +8289,7 @@ Kérem válasszon egy különböző fájl nevet. Spreadsheet - Táblázatkezelő + Táblázat @@ -5786,7 +8304,7 @@ Kérem válasszon egy különböző fájl nevet. Go - Gyerünk + Ugrás @@ -5801,7 +8319,7 @@ Kérem válasszon egy különböző fájl nevet. Market - Piac + Piactér @@ -5811,17 +8329,18 @@ Kérem válasszon egy különböző fájl nevet. Keyboard Menu - Billlentyű menü + Billentyűzet menü Menu PB - PB menü + CHECKIT + PB menü My Sites - Oldalam + Weboldalaim @@ -5836,7 +8355,7 @@ Kérem válasszon egy különböző fájl nevet. Option - Opció + Opciók @@ -5866,12 +8385,14 @@ Kérem válasszon egy különböző fájl nevet. Rotation PB - PB forgatás + CHECKIT + PB forgatás Rotation KB - KB forgatás + CHECKIT + KB forgatás @@ -5886,12 +8407,12 @@ Kérem válasszon egy különböző fájl nevet. Spellchecker - Helyesírás ellenőrző + Nyelvi ellenörző Split Screen - Képernyő felosztása + Képernyő kettéosztása @@ -5901,7 +8422,8 @@ Kérem válasszon egy különböző fájl nevet. Task Panel - Feladat panel + CHECKIT - WTF? + Taszk panel @@ -5926,12 +8448,12 @@ Kérem válasszon egy különböző fájl nevet. Word Processor - Szó feldolgozó + Szövegszerkesztő XFer - XFer + Átvitel @@ -5951,17 +8473,17 @@ Kérem válasszon egy különböző fájl nevet. Messenger - Hírnök + Üzenetküldő WebCam - WebCam + Webkamera Mail Forward - Mail továbbítása + Levél továbbítás @@ -5986,37 +8508,37 @@ Kérem válasszon egy különböző fájl nevet. Wireless - Vezeték nélküli + Wireless Ultra Wide Band - Ultra széles sáv + Szélessáv Audio Forward - Audio továbbítás + Előretekerés Audio Repeat - Audió ismétlés + Ismétlés Audio Random Play - Audió véletlenszerű lejátszása + Random lejátszás Subtitle - Alcím + Felirat Audio Cycle Track - Audió ciklikus követése + Sávismétlés @@ -6031,12 +8553,13 @@ Kérem válasszon egy különböző fájl nevet. Top Menu - Felső menü + CHECKIT + Legfelső menü Suspend - Felfüggesztés + Altatás @@ -6046,63 +8569,63 @@ Kérem válasszon egy különböző fájl nevet. Print Screen - Képernyő másolás + Page Up - Feljebb lapozás + Page Down - Lejjebb lapozás + Caps Lock - Caps Lock + Num Lock - Num Lock + Number Lock - Number Lock + Scroll Lock - Scroll Lock + Insert - Insert + Delete - Delete + Escape - Escape + System Request - System Request + Select - Kiválsztás + Kiválasztás @@ -6117,22 +8640,22 @@ Kérem válasszon egy különböző fájl nevet. Context1 - Tartalom1 + Kontextus1 Context2 - Tartalom2 + Kontextus2 Context3 - Tartalom3 + Kontextus3 Context4 - Tartalom4 + Kontextus4 @@ -6142,41 +8665,41 @@ Kérem válasszon egy különböző fájl nevet. Hangup - Felfüggeszt + Hívás vége Flip - Feldobás + Csere - + Ctrl - Ctrl + Shift - Shift + Alt - Alt + Meta - Meta + + - + + @@ -6184,9 +8707,9 @@ Kérem válasszon egy különböző fájl nevet. F%1 - + Home Page - Honlap + Kezdőoldal @@ -6194,106 +8717,110 @@ Kérem válasszon egy különböző fájl nevet. Page left - Lapozás balra + Oldal balra Page up - Lapozás felfele + Oldal felfelé Position - Pozíció + Helyzet Page right - Lapozás jobbra + Oldal jobbra Page down - Lapozás lefele + Oldal lefelé QSocks5SocketEngine + Socks5 timeout error connecting to socks server + Időtúllépés a socks szerverhez kapcsolódáskor + + Connection to proxy refused - Proxyhoz kapcsolódás elutasítva + A proxy elutasította a kapcsolatot Connection to proxy closed prematurely - A proxyhoz való csatlakozás túl korán be lett zárva + A proxy váratlanul lezárta a kapcsolatot Proxy host not found - Proxy hoszt nem található + A proxy nem található Connection to proxy timed out - Proxyhoz való csatlakozásnál időtúllépés történt + A várakozási idő lejárt a proxyhoz Proxy authentication failed - Proxy hitelesítési hiba + A proxy azonosítás sikertelen Proxy authentication failed: %1 - Proxy hitelesítési hiba: %1 + A proxy azonosítás sikertelen: %1 SOCKS version 5 protocol error - SOCKS verzió 5-s protokoll hiba + SOCKS verzió 5-ös protokoll hiba General SOCKSv5 server failure - Általános SOCKSv5 szerver hiba + Általános SOCKSv5 szerverhiba Connection not allowed by SOCKSv5 server - A csatlakozást nem engedi a SOCKSv5 szerver + A kapcsolódást nem engedi a SOCKSv5 szerver TTL expired - Lejárt a TTL + A TTL lejárt SOCKSv5 command not supported - SOCKSv5 parancs nincs támogatva + A SOCKSv5 parancs nem támogatott Address type not supported - Cím típus nincs támogatva + A címtípus nem támogatott Unknown SOCKSv5 proxy error code 0x%1 - Ismeretlen SOCKSv5 proxy hiba kód 0x%1 + Ismeretlen SOCKSv5 proxy hibakód: 0x%1 Network operation timed out - Hálózat műveleti időtúllépés + Időtúllépés hálózati művelet során QSoftKeyManager - + Ok Ok @@ -6315,10 +8842,10 @@ Kérem válasszon egy különböző fájl nevet. Cancel - Mégse + Mégsem - + Exit Kilépés @@ -6333,7 +8860,7 @@ Kérem válasszon egy különböző fájl nevet. Less - Kevés + Kevesebb @@ -6346,7 +8873,7 @@ Kérem válasszon egy különböző fájl nevet. Delete this record? - Törölni szeretné ezt a felvételt? + Rekord törlése? @@ -6375,12 +8902,12 @@ Kérem válasszon egy különböző fájl nevet. Save edits? - Szerkesztések mentése? + Módosítások mentése? Cancel - Mégse + Mégsem @@ -6390,7 +8917,7 @@ Kérem válasszon egy különböző fájl nevet. Cancel your edits? - Szerkesztések visszavonása? + Módosítások elvetése? @@ -6398,57 +8925,66 @@ Kérem válasszon egy különböző fájl nevet. Unable to write data: %1 - Nem lehet adatot írni: %1 + Az adat nem írható: %1 - + + Unable to decrypt data: %1 + Az adat nem visszafejthető: %1 + + + Error while reading: %1 - Hiba történt olvasás közben: %1 + Olvasási hiba: %1 Error during SSL handshake: %1 - Hiba történt az SSL kézfogás közben: %1 + SSL kézfogás hiba: %1 - + Error creating SSL context (%1) - Hiba történt az SSL összefüggés (%1) létrehozása közben + Az SSL kontextus létrehozása sikertelen (%1) Invalid or empty cipher list (%1) - Érvénytelen vagy üres számjegy lista (%1) + Érvénytelen vagy üres a titkosítók listája (%1) Private key does not certify public key, %1 - A privát kulcs nem igazolja a publikus kulcsot, %1 + A privát és a publikus kulcs nem illik össze: %1 Error creating SSL session, %1 - Hiba történt az SSL szakasz létrehozása közben, %1 + Hiba az SSL munkamenet létrehozásakor, %1 Error creating SSL session: %1 - Hiba történt az SSL szakasz létrehozása közben: %1 + Hiba az SSL munkamenet létrehozásakor: %1 Cannot provide a certificate with no key, %1 - Nem lehet biztosítani egy igazolást kulcs nélkül, %1 + Kulcs nélkül nem állítható ki tanusítvány, %1 Error loading local certificate, %1 - Hiba történt a helyi igazolás betöltése közben, %1 + Hiba a helyi tanúsítvány betöltése közben, %1 Error loading private key, %1 - Hiba történt a privát kulcs betöltése közben, %1 + Hiba a titkos kulcs betöltése közben, %1 + + + Private key does not certificate public key, %1 + A privát és a publikus kulcs nem illik össze: %1 @@ -6458,107 +8994,109 @@ Kérem válasszon egy különböző fájl nevet. The issuer certificate could not be found - A problémás igazolás nem található + A kibocsátó tanusítványa nem található The certificate signature could not be decrypted - Az igazolás aláírás titkosítását nem sikerült feloldani + A tanusítvány aláírása nem visszafejthető The public key in the certificate could not be read - Az igazolásban található publikus kulcsot nem sikerült olvasni + A tanusítvány publikus kulcsa nem olvasható The signature of the certificate is invalid - Az igazolás aláírása érvénytelen + A tanusítvány aláírása érvénytelen The certificate is not yet valid - Az igazolás még nem érvényes + A tanusítvány még nem érvényes The certificate has expired - Az igazolás lejárt + A tanusítvány már lejárt The certificate's notBefore field contains an invalid time - A mező érvénytelen idő tartalmazása előtt nincsen igazolás + A tanusítvány notBefore mezője érvénytelen időpontot tartalmaz The certificate's notAfter field contains an invalid time - A mező érvénytelen idő tartalmazása után nincsen igazolás + A tanusítvány notAfter mezője érvénytelen időpontot tartalmaz The certificate is self-signed, and untrusted - Az igazolás ön jelölt, és megbízhatatlan + A tanusítvány önaláírt és nem megbízható The root certificate of the certificate chain is self-signed, and untrusted - Az igazolás lánc rendszergazda igazolása ön jelölt és megbízhatatlan + A tanusítványlánc gyökértanusítványa önaláírt, és nem megbízható The issuer certificate of a locally looked up certificate could not be found - Egy helyileg utánanézett igazolás problémás igazolása nem található + CHECKIT: looked up + A megtalált tanusítvány kibocsátójának tanusítványa nem található No certificates could be verified - Nem sikerült igazolást leellenőrizni + Nincs ellenőrizhető tanusítvány One of the CA certificates is invalid - A CA igazolások egyike érvénytelen + Az egyik tanusítványkibocsátó tanusítványa érvénytelen The basicConstraints path length parameter has been exceeded - Az alap megszorítási útvonal hossz paramétereket meghaladták + CHECKIT + A basicConstraints hosszának értéke túl nagy The supplied certificate is unsuitable for this purpose - A szolgáltatott igazolás nem alkalmas erre a célra + A megadott tanusítvány nem használható erre a célra The root CA certificate is not trusted for this purpose - A rendszergazda CA igazolás nem megbízható erre a célra + A tanusítványkibocsátó tanusítványa nem használható erre a célra The root CA certificate is marked to reject the specified purpose - A rendszergazda CA igazolás a specializást cél megtagadására lett megjelölve + A tanusítványkibocsátó tanusítványa nem engedi, hogy e célra használják The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate - Az aktuális jelölt problémás igazolása meg lett tagadva, mert a téma neve nem egyezett az aktuális igazolás problémás nevével + 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 - Az aktuális jelölt problémás igazolása el lett utasítva, mert a problémás név és sorszám benyűjtva és nem egyezett az aktuális igazolás hitelesítési kulcs azonosítójával + The peer did not present any certificate - A kortárs nem nyújtott be egyetlen igazolást sem + A partner nem szolgáltatott semmilyen tanusítványt The host name did not match any of the valid hosts for this certificate - A hoszt név nem egyezik egyetlen érvényes hoszttal sem erre az igazolásra + A gépnév nem felel meg a tanusítványon találha gépnevek egyikének sem @@ -6571,17 +9109,17 @@ Kérem válasszon egy különböző fájl nevet. Missing initial state in compound state '%1' - Hiányzó kezdeti állapot összetett helyzetben '%1' + A kezdeti állapot hiányzik egy összetett állapotnál '%1' Missing default state in history state '%1' - Hiányzó alapértelmezett állapot a történelmi állapotokban '%1' + Az alapértelmezett állapot nem található a(z) '%1' megelőző állapotban No common ancestor for targets and source of transition from state '%1' - Nincs közös őse az átmeneti céloknak és forrásnak a(z) '%1' helyzetből + Nincs közös őse a forrásállapotnak és a célállapotoknak a(z) '%1' állapotból való átmenetben @@ -6592,21 +9130,10 @@ Kérem válasszon egy különböző fájl nevet. QSystemSemaphore - - %1: does not exist - %1 : nem létezik - - - - - %1: out of resources - %1: kifogyott az erőforrásból - - - - + + %1: permission denied - %1: Engedély megtagadva + %1: hozzáférés megtagadva @@ -6614,8 +9141,19 @@ Kérem válasszon egy különböző fájl nevet. %1: már létezik - - + + %1: does not exist + %1: még nem létezik + + + + + %1: out of resources + %1: az erőforrások elfogytak + + + + %1: unknown error %2 %1: ismeretlen hiba %2 @@ -6625,12 +9163,12 @@ Kérem válasszon egy különböző fájl nevet. Unable to open connection - Nem lehet megnyitni a kapcsolatot + A kapcsolat nem nyitható meg Unable to use database - Nem lehet az adatbázist használni + Az adatbázis nem használható @@ -6643,28 +9181,32 @@ Kérem válasszon egy különböző fájl nevet. Scroll Right - Görgetésre jobbra + Görgetés jobbra QTcpServer + Socket operation unsupported + Socket művelet nem támogatott + + Operation on socket is not supported - A socketen végzett művelet nem támogatott + A művelet nem támogatott socketeken QTextControl - + &Undo &Visszavonás &Redo - &Megismétlés + Új&ra @@ -6679,7 +9221,7 @@ Kérem válasszon egy különböző fájl nevet. Copy &Link Location - &Link címének másolása + &Link helyének másolása @@ -6694,7 +9236,7 @@ Kérem válasszon egy különböző fájl nevet. Select All - Az összes kiválasztása + Összes kijelölése @@ -6703,7 +9245,7 @@ Kérem válasszon egy különböző fájl nevet. Press - Megnyomás + Nyomja meg @@ -6717,7 +9259,7 @@ Kérem válasszon egy különböző fájl nevet. This platform does not support IPv6 - Ez a platform nem támogatja az IPv6-t + A platform nem támogatja az IPv6-ot @@ -6730,7 +9272,7 @@ Kérem válasszon egy különböző fájl nevet. Redo - Megismétlés + Újra @@ -6751,7 +9293,7 @@ Kérem válasszon egy különböző fájl nevet. Redo - Megismétlés + Újra @@ -6759,57 +9301,57 @@ Kérem válasszon egy különböző fájl nevet. LRM Left-to-right mark - LRM balról jobbra jelölés + LRM Balról jobbra jelölő RLM Right-to-left mark - RLM jobbról balra jelölés + LRM Jobbról balra jelölő ZWJ Zero width joiner - ZWJ Nulla szélességű asztalos + ZWJ Nulla szélességű egyesítő jelölő ZWNJ Zero width non-joiner - ZWNJ Nulla szélességű nem asztalos + ZWN Nulla szélességű nem-egyesítő jelölő ZWSP Zero width space - ZWSP Nulla szélességű hely + ZWSP Nulla szélességű szóköz LRE Start of left-to-right embedding - LRE Balról jobbra beágyazás kezdete + LRE balról-jobbra beágyazás kezdete RLE Start of right-to-left embedding - RLE Jobbról balra beágyazás kezdete + RLE jobbról-balra beágyazás kezdete LRO Start of left-to-right override - LRO Balról jobbra megsemmisítés kezdete + LRO balról-jobbra felülbírálás kezdete RLO Start of right-to-left override - RLO Jobbról balra megsemmisítés kezdete + RLO Jobbról-balra felülbírálás kezdete PDF Pop directional formatting - PDF Kérirányú formázás benézése + PDF normál irányú formázási jelölő Insert Unicode control character - Unicode vezérlő karakter beszúrása + Unicode vezérlőkarakter beszúrása @@ -6817,27 +9359,31 @@ Kérem válasszon egy különböző fájl nevet. Request cancelled - Kérés visszavonva + A kérés megszakítva Request blocked - Kérés blokkolva + A kérést blokkolták Cannot show URL - Nem lehet megjeleníteni az URL-t + A cím nem megjeleníthető Frame load interrupted by policy change - Irányvonal megváltozása miatt a szerkezet töltése megszakítva + A keret betöltése szabályváltoztatás miatt megszakadt + + + Frame load interruped by policy change + A keret betöltése szabályváltoztatás miatt megszakadt Cannot show mimetype - Nem lehet megjeleníteni mime típust + Nem megjeleníthető fájltípus @@ -6848,34 +9394,45 @@ Kérem válasszon egy különböző fájl nevet. QWebPage + + Bad HTTP request + Hibás HTTP kérés + + Submit default label for Submit buttons in forms on web pages - Feltöltés + Küldés Submit Submit (input element) alt text for <input> elements with no alt, title, or value - Feltöltés + Küldés Reset default label for Reset buttons in forms on web pages - Helyreállítás + Törlés - + + This is a searchable index. Enter search keywords: + text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index' + Ez egy kereshető index. Írja be a keresendő szavakat: + + + Choose File title for file button used in HTML forms - Fájl kiválasztása + Fájl tallózása No file selected text to display in file button used in HTML forms when no file is selected - Nincsen egyetlen fájl sem kiválasztva + Nincs fájl kiválaszva @@ -6887,13 +9444,13 @@ Kérem válasszon egy különböző fájl nevet. Save Link... Download Linked File context menu item - Link mentése... + Link célpontjának mentése... Copy Link Copy Link context menu item - Link másolása + Link címének másolása @@ -6905,7 +9462,7 @@ Kérem válasszon egy különböző fájl nevet. Save Image Download Image context menu item - Kép elmentése + Kép mentése @@ -6917,7 +9474,7 @@ Kérem válasszon egy különböző fájl nevet. Open Frame Open Frame in New Window context menu item - Szerkezet megnyitása + Keret megnyitása új ablakban @@ -6929,25 +9486,25 @@ Kérem válasszon egy különböző fájl nevet. Go Back Back context menu item - Menj vissza + Vissza Go Forward Forward context menu item - Menj előre + Előre Stop Stop context menu item - Leállítás + Stop Reload Reload context menu item - Újratöltés + Frissítés @@ -6965,13 +9522,13 @@ Kérem válasszon egy különböző fájl nevet. No Guesses Found No Guesses Found context menu item - Nincs feltételezések találata + Nincs találat Ignore Ignore Spelling context menu item - Mellőzés + Kihagyás @@ -6989,7 +9546,7 @@ Kérem válasszon egy különböző fájl nevet. Look Up In Dictionary Look Up in Dictionary context menu item - Utánanézés szótárban + Keresés a szótárban @@ -7001,49 +9558,49 @@ Kérem válasszon egy különböző fájl nevet. Ignore Ignore Grammar context menu item - Mellőzés + Kihagyás Spelling Spelling and Grammar context sub-menu item - Helyesírás + Nyelvi eszközök Show Spelling and Grammar menu item title - Helyesírás és nyelvtan megjelenítése + Nyelvi eszközök megjelenítése Hide Spelling and Grammar menu item title - Helyesírás és nyelvtan elrejtése + Nyelvi eszközök elrejtése Check Spelling Check spelling context menu item - Helyesírás ellenőrzés + Nyelvhelyesség ellenőrzése Check Spelling While Typing Check spelling while typing context menu item - Helyesírás ellenőrzés gépelés közben + Nyelvhelyesség ellenőrzése gépeléskor Check Grammar With Spelling Check grammar with spelling context menu item - Nyelvtani ellenőrzés helyesírás ellenőrzéssel + Nyelvtan ellenőrzése Fonts Font context sub-menu item - Betű + Betűtípus @@ -7061,25 +9618,25 @@ Kérem válasszon egy különböző fájl nevet. Underline Underline context menu item - Aláhúzás + Aláhúzott Outline Outline context menu item - Kontúrozás + Áthúzott Direction Writing direction context sub-menu item - Irány összefüggések írás, menü elem + Irány Text Direction Text direction context sub-menu item - Szöveg irány + Szövegirány @@ -7109,31 +9666,31 @@ Kérem válasszon egy különböző fájl nevet. Live Broadcast Media controller status message when watching a live broadcast - Élő bejelentés + Élő adás Audio Element Media controller element - Audió elem + Hang elem Video Element Media controller element - Videó elem + Video elem Mute Button Media controller element - Elnémítás gomb + Némítás gomb Unmute Button Media controller element - Elnémítás megszűntetése gomb + Némítás feloldása gomb @@ -7145,7 +9702,7 @@ Kérem válasszon egy különböző fájl nevet. Pause Button Media controller element - Szünet gomb + Megállítás gomb @@ -7157,19 +9714,19 @@ Kérem válasszon egy különböző fájl nevet. Slider Thumb Media controller element - Csuszka ujj + Csúszka pozícionáló Rewind Button Media controller element - Áttekercselés gomb + Visszatekerés gomb Return to Real-time Button Media controller element - A valós idejűre visszatérés gomb + Valós időre visszatérés gombja @@ -7181,133 +9738,135 @@ Kérem válasszon egy különböző fájl nevet. Remaining Time Media controller element - Fennmaradó idő + Hátralévő idő Status Display Media controller element - Státusz kijelzés + Állapotkijelző Fullscreen Button Media controller element - Teljes képernyő gomb + Teljes méret gomb Seek Forward Button Media controller element - Keresés továbbítása gomb + Előre keresés gomb Seek Back Button Media controller element - Keresés visszafele gomb + Visszafele keresés gomb Audio element playback controls and status display Media controller element - Audió elem visszajátszás vezérlők és státusz kijelzés + Hang elem lejátszásvezérlői és állapotkijelzője Video element playback controls and status display Media controller element - Videó elem visszajátszás vezérlők és státusz kijelzés + Videó elem lejátszásvezérlői és állapotkijelzője Mute audio tracks Media controller element - Audió számok elnémítása + Hangsávok elnémítása Unmute audio tracks Media controller element - Audió számok elnémításának megszűntetése + Hangsávok visszakapcsolása Begin playback Media controller element - Visszajátszás megkezdése + Lejátszás indítása Pause playback Media controller element - Visszajátszás szüneteltetése + Lejátszás megállítása Movie time scrubber Media controller element - Film idő súroló + CHECKIT + Mozi idő csúszka sáv Movie time scrubber thumb Media controller element - Film idő súrolókörte + CHECKIT + Mozi idő csúszka Rewind movie Media controller element - Film visszatekerése + Videó visszatekerése Return streaming movie to real-time Media controller element - Özönlő filmek visszaadása a valós idő számára + Valós időbe váltás Current movie time Media controller element - Az aktuális filmidő + Eltelt lejátszási idő Remaining movie time Media controller element - Fennmaradó filmidő + Hátralevő lejátszási idő Current movie status Media controller element - Az aktuális film státusz + A lejátszás állapota Play movie in full-screen mode Media controller element - Film lejátszása teljes képernyős módban + Videó teljes képernyős lejátszása Seek quickly back Media controller element - Gyorsan visszafele keresés + Gyors visszaugrás Seek quickly forward Media controller element - Gyorsan előre keresés + Gyors előreugrás Indefinite time Media time description - Bizonytalan idő + Végtelen idő @@ -7334,28 +9893,38 @@ Kérem válasszon egy különböző fájl nevet. %1 másodperc + LTR + Left to Right context menu item + Balról jobbra + + + RTL + Right to Left context menu item + Jobbról balra + + Inspect Inspect Element context menu item - Megtekintés + Elemzés No recent searches Label for only item in menu that appears when clicking on the search field image, when no searches have been performed - Nincsenek utóbbi keresések + Nincs keresési előzmény Recent searches label for first item in the menu that appears when clicking on the search field image, used as embedded menu title - Utóbbi keresések + Keresési előzmények Clear recent searches menu item in Recent Searches menu that empties menu's contents - Utóbbi keresések kiürítése + Keresési előzmények ürítése @@ -7364,71 +9933,68 @@ Kérem válasszon egy különböző fájl nevet. Ismeretlen - - Web Inspector - %2 - Web felügyelő - %2 - - - + %1 (%2x%3 pixels) Title string for images - %1 (%2x%3 pixelek) + %1 (%2x%3 képpont) - - Bad HTTP request - Érvénytelen HTTP kérés + + Web Inspector - %2 + Web elemző - %2 - - - This is a searchable index. Enter search keywords: - text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index' - Ez egy kereshető index. Gépelje be a kívánt kulcsszavakat: + + + %n file(s) + number of chosen file + + %n fájl + Scroll here - Görgetés ide + Gördítés ide Left edge - Bal szegély + Bal szélre Top - Felül + Felülre Right edge - Jobb szegély + Jobb szélre Bottom - Alul + Alulra Page left - Lapozás balra + Egy oldalt balra Page up - Lapozás fel + Egy oldalt felfelé Page right - Lapozás jobbra + Egy oldalt jobbra Page down - Lapozás balra + Egy oldalt le @@ -7438,7 +10004,7 @@ Kérem válasszon egy különböző fájl nevet. Scroll up - Görgetés fel + Görgetés felfelé @@ -7448,200 +10014,192 @@ Kérem válasszon egy különböző fájl nevet. Scroll down - Görgetés lefele - - - - %n file(s) - number of chosen file - - %n fájl - + Görgetés le - + JavaScript Alert - %1 - JavaSzkript figyelmeztetés - %1 + JavaScript figyelmeztetés - %1 JavaScript Confirm - %1 - JavaSzkript megerősítés - %1 + JavaScript megerősítés - %1 - + JavaScript Prompt - %1 - JavaSzkript prompt - %1 + JavaScript Prompt kérdés - %1 JavaScript Problem - %1 - JavaSzkript probléma - %1 + JavaScript probléma - %1 The script on this page appears to have a problem. Do you want to stop the script? - Az ezen a lapon található szkriptnek úgy tűnik, hogy van egy problémája. Le szeretné állítani a szkriptet? + Az ezen a lapon levő parancsfájl hibásnak tűnik. Leállítja a parancsfájl futását? Move the cursor to the next character - Az egér mozgatása a következő karakterre + Tegye a kurzort a következő karakterhez Move the cursor to the previous character - Az egér mozgatása az előző karakterre + Tegye a kurzort az előző karakterhez Move the cursor to the next word - Az egér mozgatása a következő szóra + Tegye a kurzort a következő szóhoz Move the cursor to the previous word - Az egér mozgatása az előző szóra + Tegye a kurzort az előző szóhoz Move the cursor to the next line - Az egér mozgatása a következő sorra + Tegye a kurzort a következő sorba Move the cursor to the previous line - Az egér mozgatása az előző sorra + Tegye a kurzort az előző sorba Move the cursor to the start of the line - Az egér mozgatása a sor elejére + Tegye a kurzort a sor elejére Move the cursor to the end of the line - Az egér mozgatása a sor végére + Tegye a kurzort a sor végére Move the cursor to the start of the block - Az egér mozgatása a blokk elejére + Tegye a kurzort a blokk elejére Move the cursor to the end of the block - Az egér mozgatása a blokk végére + Tegye a kurzort a blokk végére Move the cursor to the start of the document - Az egér mozgatása a dokumentum elejére + Tegye a kurzort a dokumentum elejére Move the cursor to the end of the document - Az egér mozgatása a dokumentum végére + Tegye a kurzort a dokumentum végére Select all - Az összes kiválasztása + Összes kijelölése Select to the next character - A következő karakter kiválasztása + Kijelölés a következő karakterig Select to the previous character - Az előző karakter kiválasztása + Kijelölés az előző karakterig Select to the next word - A következő szó kiválasztása + Kijelölés a következő szóig Select to the previous word - Az előző szó kiválasztása + Kijelölés az előző szóig Select to the next line - A következő sor kiválasztása + Kijelölés a következő sorig Select to the previous line - Az előző sor kiválasztása + Kijelölés az előző sorig Select to the start of the line - A sor elejének kiválasztása + Kijelölés a sor elejéig Select to the end of the line - A sor végének kiválasztása + Kijelölés a sor végéig Select to the start of the block - A blokk elejének kiválsztása + Kijelölés a blokk elejéig Select to the end of the block - A blokk végének kiválasztása + Kijelölés a blokk végéig Select to the start of the document - A dokumentum elejének kiválasztása + Kijelölés a dokumentum elejéig Select to the end of the document - A dokumentum végének kiválasztása + Kijelölés a dokumentum végéig Delete to the start of the word - A szó elejének törlése + Törlés a szó elejéig Delete to the end of the word - A szó végének törlése + Törlés a szó végéig Insert a new paragraph - Egy új bekezdés beszúrása + Új bekezdés beszúrása Insert a new line - Egy új sor beszúrása + Új sor beszúrása Paste and Match Style - Stílus beillesztése és összepasszintása + Beillesztés stílusegyeztetéssel Remove formatting - Formázás eltávolítása + A formázás törlése Strikethrough - Áthúzás + Áthúzva @@ -7656,7 +10214,7 @@ Kérem válasszon egy különböző fájl nevet. Insert Bulleted List - Hivatalos közlemény lista beszúrása + Pontozott lista beszúrása @@ -7666,32 +10224,32 @@ Kérem válasszon egy különböző fájl nevet. Indent - Behúzás + Behúzás növelése Outdent - Behúzás kifelé + Behúzás csökkentése Center - Közép + Középre igazítás Justify - Igazolás + Sorkizárás Align Left - Balra állít + Balra igazítás Align Right - Jobbra állít + Jobbra igazítás @@ -7705,7 +10263,7 @@ Kérem válasszon egy különböző fájl nevet. QWidget - + * * @@ -7713,12 +10271,31 @@ Kérem válasszon egy különböző fájl nevet. QWizard - - Cancel - Mégse + + Go Back + Visszalépés + + + + Continue + Folytatás + + + + Commit + Véglegesítés + Done + Kész + + + Quit + Kilépés + + + Help Súgó @@ -7733,32 +10310,17 @@ Kérem válasszon egy különböző fájl nevet. &Befejezés - - &Help - &Súgó - - - - Go Back - Vissza ugrás - - - - Continue - Folytatás - - - - Commit - Kommit + + Cancel + Mégsem - Done - Kész + &Help + &Súgó - + &Next &Következő @@ -7778,7 +10340,7 @@ Kérem válasszon egy különböző fájl nevet. &Move - &Mozgatás + Á&thelyezés @@ -7788,12 +10350,12 @@ Kérem válasszon egy különböző fájl nevet. Mi&nimize - &Minimalizálás + &Kis méret Ma&ximize - Ma&ximalizálás + Te&ljes méret @@ -7803,17 +10365,29 @@ Kérem válasszon egy különböző fájl nevet. Stay on &Top - &Tetején maradni + Mindig leg&felül + + + + + Sh&ade + &Felcsukás + + + + + %1 - [%2] + %1 - [%2] - + Minimize - Minimalizálás + Kis méret Restore Down - Letárolás + Előző méret @@ -7821,21 +10395,9 @@ Kérem válasszon egy különböző fájl nevet. Bezárás - - - Sh&ade - Árnya&lat - - - - - %1 - [%2] - %1 - [%2] - - - + &Unshade - &Leeresztés + &Lenyitás @@ -7848,32 +10410,32 @@ Kérem válasszon egy különböző fájl nevet. error triggered by consumer - Ügyfél által előidézett hiba + feldolgozó által kiváltott hiba unexpected end of file - Váratlan fájlvég + váratlan fájlvég more than one document type definition - Több mint egy dokumentum típus definíció + több dokumentumtípus definíció error occurred while parsing element - Hiba történt az elem elemzése közben + hiba az elem értelmezésénél tag mismatch - Nem egyező címke + eltérő tag hiba error occurred while parsing content - Hiba történt a tartalom elemzése közben + hiba a tartalom értelmezésénél @@ -7883,77 +10445,77 @@ Kérem válasszon egy különböző fájl nevet. invalid name for processing instruction - érvénytelen név az utasítás feldolgozására + érvénytelen feldolgozási utasítás név version expected while reading the XML declaration - várt verzió az XML deklaráció olvasása közben + az XML deklaráció nem tartalmaz verzióinformációt wrong value for standalone declaration - Hibás egyedülálló deklaráció érték + érvénytelen érték önálló deklarációban - + + encoding declaration or standalone declaration expected while reading the XML declaration + az XML deklarációból hiányzik a kódolási információ vagy egy önálló deklaráció + + + + standalone declaration expected while reading the XML declaration + az XML deklarációból hiányzik az önálló deklaráció + + + error occurred while parsing document type definition - Hiba történt a dokumentum típus definíció elemzése közben + hiba a dokumentumtípus definíció értelmezésénél letter is expected - betű várt + a várt elem betű error occurred while parsing comment - hiba történt az elemző megjegyzés előfordulása közben + hiba a megjegyzés értelmezésénél error occurred while parsing reference - Hiba történt az elemző hivatkozás előfordulása közben + hiba a hivatkozás értelmezésénél internal general entity reference not allowed in DTD - A DTD-ben nem engedélyezett a belső általános valós hivatkozás + A DTD-ben nem engedélyezett belső általános entitás használata external parsed general entity reference not allowed in attribute value - Az attribútum értékben nem engedélyezett a külsőleg elemzett általános valós hivatkozás + külső feldolgozású általános entitáshivatkozás nem engedélyezett attribútum értékében external parsed general entity reference not allowed in DTD - A DTD-ben nem engedélyezett a külsőleg elemzett általános valós hivatkozás + külső feldolgozású általános entitáshivatkozás nem engedélyezett a DTD-ben unparsed entity reference in wrong context - Hivatkozás egy nem értelmezett entitásra hibás összefüggésben + nem értelmezett entitás referencia egy rossz kontextusban recursive entities - Rekurzív entitások + rekurzív entitások error in the text declaration of an external entity - Hiba egy külső entitás szöveg deklarációjában - - - - encoding declaration or standalone declaration expected while reading the XML declaration - Kódolása deklaráció vagy egyedülálló deklaráció várt az XML deklaráció olvasása közben - - - - standalone declaration expected while reading the XML declaration - Egyedülálló deklaráció várt az XML deklaráció olvasása közben + hiba egy külső entitás szövegdeklarációjában @@ -7961,27 +10523,27 @@ Kérem válasszon egy különböző fájl nevet. Warning in %1, at line %2, column %3: %4 - Figyelmeztetés %1-ben, %2 sorban, %3 oszlopban: %4 + Figyelmeztetés a(z) %1 helyen, sor %2, oszlop %3: %4 Warning in %1: %2 - Figyelmeztetés %1-ben: %2 + Figyelmeztetés a(z) %1 helyen: %2 Unknown location - Ismeretlen elhelyezkedés + Ismeretlen hely Error %1 in %2, at line %3, column %4: %5 - %1 hiba %2-ben, %3 sorban, %4 oszlopban: %5 + %1 hiba a(z) %2 %3. sorának %4. oszlopában: %5 Error %1 in %2: %3 - %1 hiba %2-ben: %3 + %1 hiba a(z) %2 helyen: %3 @@ -7990,7 +10552,7 @@ Kérem válasszon egy különböző fájl nevet. Extra content at end of document. - Extra tartalom a dokumentum végén. + Nem várt tartalom a dokumentum végén. @@ -8005,22 +10567,22 @@ Kérem válasszon egy különböző fájl nevet. Sequence ']]>' not allowed in content. - ']]>' sor nem engedélyezett a tartalomban. + ']]>' szekvencia nem megengedett a tartalomban. Namespace prefix '%1' not declared - '%1' névtér előtag nincsen deklarálva + A(z) '%1' névtér prefixum nincs deklarálva Attribute redefined. - Attribútum újradefiniálva. + Az attributum újra lett definiálva. Unexpected character '%1' in public id literal. - Váratlan karakter '%1' a publikus azonosító literál. + Váratlan '%1' karakter a publikus id literálban. @@ -8035,17 +10597,17 @@ Kérem válasszon egy különböző fájl nevet. %1 is an invalid encoding name. - %1 egy érvénytelen kódolási név. + %1 nem egy érvényes kódolás név. Encoding %1 is unsupported - %1 kódolás nem támogatva + %1 kódolás nem támogatott Standalone accepts only yes or no. - Egyedülálló elfogadás kizárólas igen vagy nem. + Csak igen vagy nem lehet az értéke. @@ -8055,7 +10617,7 @@ Kérem válasszon egy különböző fájl nevet. Premature end of document. - Túl korai dokumentum vég. + A dokumentum hirtelen véget ért. @@ -8065,12 +10627,12 @@ Kérem válasszon egy különböző fájl nevet. Expected - Várt + Várt , but got ' - , pedig megkapta ' + , de ezt kaptam: ' @@ -8080,37 +10642,37 @@ Kérem válasszon egy különböző fájl nevet. Expected character data. - Várt karakter adat. + Karakteres adat szükséges. Recursive entity detected. - Rekurzív entitás észlelve. + Rekurzív entitást találtam. Start tag expected. - Kezdő címke várva. + Kezdő tag szükséges. XML declaration not at start of document. - XML deklaráció nem a dokumentum elején található. + Az XML deklaráció nem a dokumentum elején kezdődik. NDATA in parameter entity declaration. - NDATA a paraméter entitás deklarációban. + NDATA a paraméter-entitás deklarációjában. %1 is an invalid processing instruction name. - %1 egy érvénytelen feldolgozó utasítás neve. + %1 érvénytelen feldolgozási utasítás név. Invalid processing instruction name. - Érvénytelen feldolgozó utasítás név. + Érvénytelen feldolgozási utasítás név. @@ -8118,7 +10680,7 @@ Kérem válasszon egy különböző fájl nevet. Illegal namespace declaration. - Illegális névtér deklarációk. + Érvénytelen névtér deklaráció. @@ -8128,1193 +10690,1208 @@ Kérem válasszon egy különböző fájl nevet. Opening and ending tag mismatch. - Nyitó és záró címkék nem egyeznek. + A nyitó és a záró tag nem egyezik. Reference to unparsed entity '%1'. - Hivatkozás egy nem értelmezett entitásra '%1'. + Hivatkozás egy nem értelmezett entitásra: '%1'. Entity '%1' not declared. - '%1' entitás nincsen deklarálva. + '%1' entitás nincs deklarálva. Reference to external entity '%1' in attribute value. - Hivatkozás egy külső entitásra '%1' az attribútum értékben. + Hivatkozás '%1' külső entitásra attribútum értékben. Invalid character reference. - Érvénytelen karakter hivatkozás. + Érvénytelen karakterhivatkozás. Encountered incorrectly encoded content. - Helytelen kódolási tartalommal találta szembe magát. + Hibás kódolású tartalom. The standalone pseudo attribute must appear after the encoding. - Az egyedülálló ál attribútumnak a kódolás után kell feltűnnie. + Az egyedülálló pszeudo-attribútumnak a kódolás után kell szerepelnie. %1 is an invalid PUBLIC identifier. - %1 egy érvénytelen PUBLIC-us azonosító. + %1 egy érvénytelen PUBLIC azonosító. QtXmlPatterns - - - At least one component must be present. - Legalább egy komponenset be kell nyújtani. + + %1 is an unsupported encoding. + %1 nem támogatott kódolás. - - %1 is not a valid value of type %2. - %1 nem egy érvény értéke a(z) %2 típusnak. + + %1 contains octets which are disallowed in the requested encoding %2. + %1 olyan okteteket tartalmaz, amelyek nem megengedettek a kért %2 kódolásban. - - When casting to %1 from %2, the source value cannot be %3. - A(z) %1-ről %2-re történő kasztoláskor, a forrás érték nem lehet %3. + + The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. + %1 kódrészlet %2 helyen, %3 kódolással érvénytelen XML karakter. - - Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. - Hatékony logikai értéket nem lehet egy sor számára kiszámítani, amely kettő vagy több atomikus értéket tartalmaz. + + Network timeout. + Hálózati időtúllépés. - - The data of a processing instruction cannot contain the string %1 - Egy feldolgozó utasítás adata nem tartalmazhat %1 sztringet + + Element %1 can't be serialized because it appears outside the document element. + %1 elem nem szerializálható, mert a document elemen kívül szerepel. - - - %1 is an invalid %2 - %1 egy érvénytelen %2 + + Attribute %1 can't be serialized because it appears at the top level. + %1 attribútum nem szerializálható, mert legfelső szinten szerepel. - - %1 is not a valid XML 1.0 character. - %1 egy érvénytelen 1.0 XML karakter. + + Year %1 is invalid because it begins with %2. + %1 év érvénytelen, mert %2-vel kezdődik. - - %1 was called. - %1 lett meghívva. + + Day %1 is outside the range %2..%3. + A(z) %1. nap nem esik %2 és %3 közé. + + + + Month %1 is outside the range %2..%3. + A(z) %1. hónap nem esik %2 és %3 közé. + + + + Overflow: Can't represent date %1. + Túlcsordulás: A(z) %1 dátum nem reprezentálható. + + + + Day %1 is invalid for month %2. + Nincs %1 nap %2 hónapban. + + + + Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; + Az 24:%1:%2.%3 időpont érvénytelen, mert az óra értéke 24, de a többi érték nem 0; + + + + Time %1:%2:%3.%4 is invalid. + Az %1:%2:%3.%4 időpont érvénytelen. + + + + Overflow: Date can't be represented. + Túlcsordulás: A dátum nem reprezentálható. + + + + + At least one component must be present. + Legalább egy komponenst meg kell adni. + + + + At least one time component must appear after the %1-delimiter. + Legalább egy időkomponenst meg kell adni a(z) %1 elválasztó után. - - In the replacement string, %1 must be followed by at least one digit when not escaped. - A kicserélési sztrinben, %1 -t legalább egy számnak kell követnie nem meneküléskor. + + %1 is not a valid value of type %2. + %1 nem érvényes %2 típusú érték. - - In the replacement string, %1 can only be used to escape itself or %2, not %3 - A kicserelési sztringben, %1-t csak magának a(z) %2 vagy %3 menekülésére lehet használni + + When casting to %1 from %2, the source value cannot be %3. + Ha %2-t %1-re kényszerítünk, a kiinduló érték nem lehet %3. - - %1 matches newline characters - %1 megegyező újsor karakterek + + Integer division (%1) by zero (%2) is undefined. + A nullával (%2) való egészosztás (%1) nincs értelmezve. - - Matches are case insensitive - Az egyezés kis és nagybetűre nem érzékeny + + Division (%1) by zero (%2) is undefined. + A nullával (%2) való osztás (%1) nincs értelmezve. - - %1 is an invalid regular expression pattern: %2 - %1 egy érvénytelen reguláris kifejezés minta: %2 + + Modulus division (%1) by zero (%2) is undefined. + A nullával (%2) való maradékos osztás (%1) nincs értelmezve. - - It will not be possible to retrieve %1. - Nem lesz lehetséges kinyerni %1. + + + Dividing a value of type %1 by %2 (not-a-number) is not allowed. + %1 típusú érték %2-vel osztása nem megengedett, mert az nem szám. - - The default collection is undefined - Az alapértelmezett gyűjtemény nincs definiálva + + Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. + %1 típusú érték osztása %2 vagy %3 (pozitív vagy negatív nulla) értékkel nem megengedett. - - %1 cannot be retrieved - %1 nem lehet megszerezni + + Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. + %1 típusú érték szorzása %2 vagy %3 (pozitív vagy negatív végtelen) típusú értékkel nem megengedett. - - The item %1 did not match the required type %2. - A(z) %1 elem nem egyezik a szükséges típussal %2. + + A value of type %1 cannot have an Effective Boolean Value. + %1 típusú érték nem kaphat effektív logikai értéket. - - - %1 is an unknown schema type. - %1 egy ismeretlen terv típus. + + Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. + Effektív logikai érték nem számítható olyan sorozatra, melyben kettő vagy több atomi érték szerepel. - - A template with name %1 has already been declared. - Egy %1 nevű sablon már deklarálva van. + + Value %1 of type %2 exceeds maximum (%3). + A(z) %2 típusú %1 érték meghaladja a maximumot (%3). - - Only one %1 declaration can occur in the query prolog. - Kizárólag egy %1 deklaráció fordulhat elő a kérdéses előszóban. + + Value %1 of type %2 is below minimum (%3). + A(z) %2 típusú %1 érték kisebb, mint a minimum (%3). - - The initialization of variable %1 depends on itself - A(z) %1 változó inicializálása önmagától függ + + A value of type %1 must contain an even number of digits. The value %2 does not. + %1 típusú értékben páros számú számjegynek kell szerepelnie. A(z) %2 érték nem megfelelő. - - The variable %1 is unused - A(z) %1 változó nincsen használva + + %1 is not valid as a value of type %2. + %1 nem érvényes %2 típusú érték. - - Version %1 is not supported. The supported XQuery version is 1.0. - %1-es verzió nem támogatott. A támogatott XQuery verzió az 1.0. + + Ambiguous rule match. + Nem egyértelmű szabály illeszkedés. - - No function with signature %1 is available - Nincs %1 aláírással rendelkező függvény + + Operator %1 cannot be used on type %2. + %1 operátor nem használható %2 típuson. - - It is not possible to redeclare prefix %1. - Nem lehetséges a(z) %1 előtag újradeklarálása. + + Operator %1 cannot be used on atomic values of type %2 and %3. + %1 operátor nem használható %2 és %3 típusok atomi értékein. - - Prefix %1 is already declared in the prolog. - %1 előtag már deklarálva van az előszóban. + + The namespace URI in the name for a computed attribute cannot be %1. + Egy számított attribútum nevében szereplő névtér URI-je nem lehet %1. - - The name of an option must have a prefix. There is no default namespace for options. - Az opció nevének tartalmaznia kell egy előtagot. Nincs alapértelmezett névtér ezekre az opciókra. + + The name for a computed attribute cannot have the namespace URI %1 with the local name %2. + Számított attribútum neve nem szerepelhet %1 névtér URI-ben %2 lokális névvel. - - The Schema Import feature is not supported, and therefore %1 declarations cannot occur. - A terv importálása tulajdonság nem támogatott, és ennek következtében a(z) %1 deklarációk nem fordulhatnak elő. + + Type error in cast, expected %1, received %2. + Típushiba a kényszerítés során, várt %1, kapott %2. - - The target namespace of a %1 cannot be empty. - Egy %1 cél névtere nem lehet üres. + + 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. + %1 vagy belőle származó típusra való kényszerítéskor a kiindulási értéknek azonos típusúnak vagy sztring literálnak kell lennie. %2 típus nem megengedett. - - The module import feature is not supported - A modul importáló tulajdonság nem támogatott + + A comment cannot contain %1 + Megjegyzésben nem szerepelhet %1 - - 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 - Egy felhasználó által definiált függvény névterének egy könyvtár modulban megfelelőnek kell lenni a modul névtérrel. Más szóval, %1-nek kellene lennie %2 helyett + + A comment cannot end with a %1. + Egy megjegyzés nem végződhet a következőre: %1. - - A function already exists with the signature %1. - Egy függvény már létezik ezzel az aláírással %1. + + In a namespace constructor, the value for a namespace cannot be an empty string. + Egy névtér konstruktorában a névtér értéke nem lehet üres karaktersorozat. - - No external functions are supported. All supported functions can be used directly, without first declaring them as external - Kulső függvények nincsenek támogatva. Az összes támogatott függvényt lehet közvetlenül haszálni, az első külső deklarálásuk nélkül + + The prefix must be a valid %1, which %2 is not. + A prefixum érvényes %1 kell legyen, aminek %2 nem tesz eleget. - - The %1-axis is unsupported in XQuery - A(z) %1 tengely nem támogatott az XQuery-ben + + The prefix %1 cannot be bound. + %1 prefixum nem köthető. - - The namespace URI cannot be the empty string when binding to a prefix, %1. - Az URI névtér nem lehet üres sztring egy előtaghoz való összeköttetéskor, %1. + + Only the prefix %1 can be bound to %2 and vice versa. + Csak %1 prefixum köthető %2 kifejezéshez és fordítva. - - %1 is an invalid namespace URI. - %1 egy érvénytelen URI névtér. + + An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. + Attribútum csomópont nem lehet egy document csomópont gyermeke. Emiatt a(z) %1 attribútum nem ide való. - - It is not possible to bind to the prefix %1 - Nem lehetséges a(z) %1 előtaggal összekötni + + A library module cannot be evaluated directly. It must be imported from a main module. + Egy könyvtár modult nem lehet közvetlenül kiértékelni. Mindenképp egy fő modulból kell importálni. - - Two namespace declaration attributes have the same name: %1. - Két névtér deklaráció attribútumnak ugyanaz a neve: %1. + + No template by name %1 exists. + Nem létezik %1 nevű sablon. - - The namespace URI must be a constant and cannot use enclosed expressions. - Az URI névtérnek állandónak kell lennie és nem használhat elhatárolt kifejezéseket. + + A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. + Egy %1 típusú érték nem lehet predikátum. Egy predikátumnak szám vagy effektív logikai érték típusúnak kell lennie. - - - %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. - %1 nem a hatókör attribútum deklarációin belül található. Vegye figyelembe, hogy a terv importáló tulajdonság nem támogatott. + + A positional predicate must evaluate to a single numeric value. + Egy pozicionális predikátumnak egyetlen numerikus értékké kell kiértékelődnie. - - empty - üres + + The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, %2 is invalid. + Feldolgozási utasításban a célnév nem lehet %1 semmilyen kis- vagy nagybetűs formában. Emiatt %2 érvénytelen. - - zero or one - nulla vagy egy + + %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. + %1 érvénytelen célnév egy feldolgozási utasításban. Értéke %2 típusú kell legyen, mint pl. %3. - - exactly one - pontosan egy + + The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. + Egy útvonal utolsó lépésének vagy csomópontokat vagy atomi értékeket kell tartalmaznia. Nem lehet a kettő keveréke. - - one or more - egy vagy több + + The data of a processing instruction cannot contain the string %1 + Egy feldolgozási utasítás adata nem tartalmazhatja %1 sztringet - - zero or more - nulla vagy több + + No namespace binding exists for the prefix %1 + Nincs névtér kötés a(z) %1 prefixumhoz - - The focus is undefined. - A fókusz nincs definiálva. + + No namespace binding exists for the prefix %1 in %2 + Nincs névtér kötés a(z) %1 prefixumhoz %2 helyen - - An attribute by name %1 has already been created. - Egy %1 nevű attribútum már létre lett hozva. + + + %1 is an invalid %2 + %1 egy érvénytelen %2 - - Network timeout. - Hálózati időtúllépés. + + The parameter %1 is passed, but no corresponding %2 exists. + Az átadott paraméter %1, de nincs megfelelő %2. - - Element %1 can't be serialized because it appears outside the document element. - %1 elemet nem lehet besorolni, mert úgy tűnik a dokumentum elem külső oldalán található. + + The parameter %1 is required, but no corresponding %2 is supplied. + %1 paraméter kötelező, de nincs megadva megfelelő %2. - - - Year %1 is invalid because it begins with %2. - %1 év érvénytelen, mert %2-vel kezdődik. + + + %1 takes at most %n argument(s). %2 is therefore invalid. + + %1 maximum %n argumentumot fogad, így %2 érvénytelen. + + + + + %1 requires at least %n argument(s). %2 is therefore invalid. + + %1 legalább %n argumentumot fogad, így %2 érvénytelen. + - - Day %1 is outside the range %2..%3. - %1 nap a tartomány külsp oldalán van %2..%3. + + The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. + %1 első paramétere nem lehet %2 típusú. Csak numerikus típus, xs:yearMonthDuration vagy xs:dayTimeDuration lehet. - - Month %1 is outside the range %2..%3. - %1 hónap a tartomány külső felületén van %2..%3. + + The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + %1 első argumentuma nem lehet %2 típusú. Csak %3, %4 vagy %5 megengedett. - - Overflow: Can't represent date %1. - Túlcsordulás: Nem lehet feltünteti a(z) %1 dátumot. + + The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + %1 második argumentuma nem lehet %2 típusú. Csak %3, %4 vagy %5 megengedett. - - Day %1 is invalid for month %2. - %1 nap érvénytelen a(z) %2 hónapra vonatkozólag. + + %1 is not a valid XML 1.0 character. + %1 érvénytelen XML 1.0 karakter. - - Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; - Idő 24:%1:%2:%3 érvénytelen. Az óra 24, de a perc, másodperc, és milliszekundum egyáltalán nem 0; + + The root node of the second argument to function %1 must be a document node. %2 is not a document node. + %1 függvény második argumentumának gyökér csomópontja document típusú kell legyen. %2 nem document csomópont. - - Time %1:%2:%3.%4 is invalid. - Idő %1:%2:%3.%4 érvénytelen. + + If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. + Ha mindkét értékben zóna eltolás van, akkor annak azonosnak kell lennie. %1 és %2 nem egyezik. - - Overflow: Date can't be represented. - Túlcsordulás: A dátumot nem lehet feltüntetni. + + %1 was called. + %1 meghívva. - - At least one time component must appear after the %1-delimiter. - Legalább egy idő komponensnek lennie kell a(z) %1 határolójel után. + + %1 must be followed by %2 or %3, not at the end of the replacement string. + %1-t %2 vagy %3 kell kövesse, nem a helyettesítő karakterlánc végén. - - - Dividing a value of type %1 by %2 (not-a-number) is not allowed. - %1 típus értékének osztása egy %2(nem szám)-mal nem engedélyezett. + + In the replacement string, %1 must be followed by at least one digit when not escaped. + A csereszövegben %1-t legalább egy számjegy kell kövesse, amennyiben az nincs escapelve. - - Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. - %1 típus értékének osztása egy %2 vagy %3(plusz vagy minusz nulla)-mal nem engedélyezett. + + In the replacement string, %1 can only be used to escape itself or %2, not %3 + A csereszövegben %1 csak önmaga vagy %2 escapelésére használható, %3-ra nem - - Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. - %1 típusú érték %2 vagy %3-mal való szorzása(plusz vagy minusz végtelen) nem engedélyezett. + + %1 matches newline characters + %1 illeszkedik az újsor karakterekre - - A value of type %1 cannot have an Effective Boolean Value. - %1 típusú értéknek nincsen hatékony logikai értéke. + + %1 and %2 match the start and end of a line. + %1 és %2 a sor elejére és végére is illeszkedik. - - Value %1 of type %2 exceeds maximum (%3). - %2 típus %1 értéke elérte a maxiumot (%3). + + Matches are case insensitive + Az illeszkedések nem nagybetű-érzékenyek - - Value %1 of type %2 is below minimum (%3). - %1 típus %2 értéke a minimum alatt van (%3). + + Whitespace characters are removed, except when they appear in character classes + A nem nyomtatható karakterek törlésre kerülnek, kivétel, ha karakter osztályokban szerepelnek - - A value of type %1 must contain an even number of digits. The value %2 does not. - %1 típus értékének tartalmaznia kell egy páratlan számú számot. A(z) %2 érték nem. + + %1 is an invalid regular expression pattern: %2 + %1 érvénytelen reguláris kifejezés minta: %2 - - %1 is not valid as a value of type %2. - %1 érvénytelen %2 típusú értékként. + + %1 is an invalid flag for regular expressions. Valid flags are: + %1 érvénytelen kapcsoló reguláris kifejezésekhez. Az érvényes kapcsolók: - - Operator %1 cannot be used on type %2. - %1 műveletet nem lehet a(z) %2 típuson használni. + + If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. + Ha az első argumentum az üres szekvencia vagy egy nulla hosszúságú sztring (névtér nélkül), akkor nem adható meg prefixum. %1 prefixum lett megadva. - - Operator %1 cannot be used on atomic values of type %2 and %3. - %1 műveletet nem lehet a %2 és %3-as típusú atomikus értéken használni. + + It will not be possible to retrieve %1. + Nem lesz lehetséges %1 lekérése. - - The namespace URI in the name for a computed attribute cannot be %1. - Az URI névtér a névben számított attribútumra nem lehet %1. + + The default collection is undefined + Nincs meghatározva az alapértelmezett kollekció - - The name for a computed attribute cannot have the namespace URI %1 with the local name %2. - Egy kiszámított attribútumnak nem lehet %1 URI névtere %2 helyi névvel. + + %1 cannot be retrieved + %1-t nem lehet lekérni - - Type error in cast, expected %1, received %2. - Típus hiba a kasztolásban, %1 várt, %2 kapott. + + The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). + %1 normalizáló formája nem támogatott. A támogatott formák %2, %3, %4 és %5 vagy semmi, pl. az üres sztring (normalizáció nélkül). - - 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. - %1-re kasztoláskor vagy típus származtatáskor, a forrás értéknek ugyanolyan típusúnak kell lennie, vagy sztring literálnak kell lennie. %2 típus nem engedélyezett. + + A zone offset must be in the range %1..%2 inclusive. %3 is out of range. + Egy zónaeltolásnak a(z) %1..%2 nyílt intervallumba kell esnie. %3 az értékhatáron kívül van. - - A comment cannot contain %1 - A megjegyzés nem tartalmazhat %1-t + + %1 is not a whole number of minutes. + %1 nem egész számú perc. - - A comment cannot end with a %1. - A megjegyzés nem végződget %1-gyel. + + The URI cannot have a fragment + A URI nem tartalmazhat töredéket - - An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. - Az attribútum csomópont egy dokumentum csomópont gyermeke. Ennek következtében a(z) %1 attribútum nem helyénvaló. + + Required cardinality is %1; got cardinality %2. + Az elvárt kardinalitás %1; azonban %2 lett megadva. - - A library module cannot be evaluated directly. It must be imported from a main module. - A köbyvtár modult nem lehet közvetlenül kiértékelni. A fő modulból kell importálni. + + The item %1 did not match the required type %2. + %1 elem nem egyezik a várt %2 típussal. - - No template by name %1 exists. - %1 nevű sablon nem létezik. + + The variable %1 is unused + A(z) %1 változó nincs használva - - A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. - A(z) %1 típus értéke egy állítmány. Egy állítmánynak tartalmaznia kell vagy egy szám típust vagy egy effektív logikai érték típust. + + W3C XML Schema identity constraint selector + W3C XML séma azonosító szabály kiválasztó - - A positional predicate must evaluate to a single numeric value. - A helyzet állítmányt egy egyetlen szám értékként kell kiértékelni. + + W3C XML Schema identity constraint field + W3C XML séma azonosító megszorítás mező - - The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, %2 is invalid. - A cél neve egy utasítás feldolgozásban nem lehet %1 kis és nagybetűk bármely kombinációjában. Ennek következtében a(z) %2 érvénytelen. + + A construct was encountered which is disallowed in the current language(%1). + Olyan szerkezetet találtam, ami az aktuális nyelvben nem megengedett(%1). - - %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. - %1 nem egy érvényes cél név az utasítás feldolgozásban. %2 vagy %3 értéknek kell lennie. + + + %1 is an unknown schema type. + %1 ismeretlen séma típus. - - The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. - Az utolsó lépésnek vagy csomópontokat vagy atomikus értékeket kell tartalmaznia. Ez nem lehet a kettő közötti keverék. + + A template with name %1 has already been declared. + %1 nevű sablon már van deklarálva. - - No namespace binding exists for the prefix %1 - Nem létezik névtér összeköttetés a(z) %1 előtagra + + %1 is not a valid numeric literal. + %1 érvénytelen numerikus literál. - - No namespace binding exists for the prefix %1 in %2 - Nem létezik névtér összeköttetés a(z) %1 előtagra %2-ben + + Only one %1 declaration can occur in the query prolog. + Csak egy %1 deklaráció szerepelhet a lekérdezés bevezetésben. - - The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. - Az első argumentum %1 nem lehet %2 típusú. Egy számos típusnak kelle lennie, xs:évHónapIdőtartam vagy xs:napIdőTartam. + + The initialization of variable %1 depends on itself + %1 változó inicializálása önmagától függ - - The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. - Az első argumentum %1 nem lehet %2 típusú. %3, %4 vagy %5 típusúnak kell lennie. + + No variable with name %1 exists + Nem létezik %1 nevű változó - - The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. - Az második argumentum %1 nem lehet %2 típusú. %3, %4 vagy %5 típusúnak kell lennie. + + Version %1 is not supported. The supported XQuery version is 1.0. + A(z) %1 verzió nem támogatott. A támogatott XQuery verzió 1.0. - - If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. - Ha mindkét értéknek zóna eltolása van, ugyanazt a zóna eltolást kell tartalmazniuk. %1 és %2 nem ugyanaz. + + The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. + %1 kódolás érvénytelen. Csak Latin karaktereket tartalmazhat, nem nyomtatható karakterek nélkül, és illeszkednie kell %2 reguláris kifejezésre. - - %1 must be followed by %2 or %3, not at the end of the replacement string. - %1-t %2 vagy %3-nak kell követnie, nem a kicserélési sztring végén. + + No function with signature %1 is available + %1 szignaturájú függvény nem található - - %1 and %2 match the start and end of a line. - %1 és %2 egyezik a sor elején és végén. + + + A default namespace declaration must occur before function, variable, and option declarations. + Egy alapértelmezett névtér deklarációnak meg kell előznie a függvény-, változó- és opció deklarációkat. - Whitespace characters are removed, except when they appear in character classes - Nem látható karakterek eltávolítva, kivéve mikor karakter osztályokban tűnnek fel + Namespace declarations must occur before function, variable, and option declarations. + A névtér deklarációknak meg kell előzniük a függvény-, változó- és opció deklarációkat. - - %1 is an invalid flag for regular expressions. Valid flags are: - %1 egy érvénytelen jelző reguláris kifejezésekre. Érvényes flagek: + + Module imports must occur before function, variable, and option declarations. + Modul importoknak meg kell előzniük a függvény-, változó- és opció deklarációkat. - - If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. - Ha az első argumentum üres sorozat vagy nulla hosszúságú sztring (nincsen névtér), egy előtagot nem lehet meghatározni. %1 előtag volt meghatározva. + + The keyword %1 cannot occur with any other mode name. + %1 kulcsszó nem szerepelhet együtt semmilyen más mód névvel. - - The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). - A(z) %1 szabványosítási forma nem támogatott. A támogatott formák %2, %3, %4 és %5 és semmi más, lásd az üres sztringet (nincs szabványosítás). + + The value of attribute %1 must be of type %2, which %3 isn't. + %1 attribútum értékének %2 típusúnak kell lennie, %3 nem az. - - A zone offset must be in the range %1..%2 inclusive. %3 is out of range. - A zóna eltolásnak a(z) %1..%2 tartományban kell benne lennie. %3 az tartományon kívüli. + + It is not possible to redeclare prefix %1. + %1 prefixum újradeklarálása nem lehetséges. - - Required cardinality is %1; got cardinality %2. - Szükséges számosság %1, szerzett számosság %2. + + The prefix %1 cannot be bound. By default, it is already bound to the namespace %2. + %1 prefixum nem köthető. Alapértelmezés szerint már kötött %2 névtérhez. - - The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. - A(z) %1 kódolás érvénytelen. Kizárólag latin karaktereket kell tartalmaznia, nem szabad látható karaktereket tartalmaznia, és a(z) %2 reguláris kifejezéssel kell megegyeznie. + + Prefix %1 is already declared in the prolog. + %1 prefixum már deklarálva van a bevezetésben. - - The keyword %1 cannot occur with any other mode name. - A(z) %1 kulcscszó nem fordulhat elő semmilyen más mód névvel. + + The name of an option must have a prefix. There is no default namespace for options. + Egy opció nevének kötelező prefixumot megadni. Nics alapértelmezett névetér az opciók számára. - - No variable with name %1 exists - %1 nevű változó nem létezik + + The Schema Import feature is not supported, and therefore %1 declarations cannot occur. + A Schema Import szolgáltatás nem támogatott, így %1 deklarációk nem fogadhatók el. - - The value of attribute %1 must be of type %2, which %3 isn't. - A(z) %1 attribútumnak %2 típusúnak kell lennie, amelyik nem %3-as. + + The target namespace of a %1 cannot be empty. + Egy %1 cél-névtere nem lehet üres. - - The prefix %1 cannot be bound. By default, it is already bound to the namespace %2. - A(z) %1 előtagot nem lehet összekötni. Alapértelmezetten, már hozzá van kötve a %2 névtérhez. + + The module import feature is not supported + A modul import szolgáltatás nem támogatott - + A variable with name %1 has already been declared. - %1 nevű változó már deklarálva van. + Egy %1 nevű változó már deklarálva van. No value is available for the external variable with name %1. - %1 nevű külső változóhoz nem érhető el érték. + %1 nevű külső változóhoz nem érhető el érték. A stylesheet function must have a prefixed name. - A stíluslap függvénynek tartalmaznia kell egy előtag nevet. + Egy stíluslap függvénynek prefixummal ellátott neve kell legyen. - + + The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) + Egy felhasználói függvény névtere nem lehet üres (próbálja meg a(z) %1 prefixumot, ami ilyen esetekre van fenntartva) + + + The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. - A(z) %1 névtér foglalt, ennek következtében a felhasználó által definiált függvényt nem lehet használni. Próbálja ki az előredefiniált %2 előtagot, amely erre az esetekre van kitalálva. + A(z) %1 névtér fenntartott, így felhasználói függvények nem használhatják. Próbálja meg a(z) %2 prefixumot, ami ilyen esetekre van. + + + + 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 + Egy függvénytár modulban definiált felhasználói függvény névtere meg kell egyezzen a modul névterével. Más szóval %1 kellene legyen %2 helyett + + + + A function already exists with the signature %1. + %1 szignaturájú függvény már létezik. + + + + No external functions are supported. All supported functions can be used directly, without first declaring them as external + Külső függvények nem támogatottak. Minden támogatott függvény használható, külső függvényként való deklarálás nélkül - + An argument with name %1 has already been declared. Every argument name must be unique. - Egy %1 nevű argumentum már deklarálva van. Minden argumentum névnek egyedülállónak kell lennie. + %1 nevű argumentum már deklarálva van. Minden argumentumnévnek egyedinek kell lennie. When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. - Mikor %1 függvény van használva egyeztetése egy mintán belül, az argumentumnak egy változó hivatkozásnak vagy egy sztring literálnak kell lennie. + %1 függvény minta belsejében történő illesztésekor, az argumentumnak változó hivatkozásnak vagy szöveges literálnak kell lennie. In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. - Egy XSLT mintában, az első argumentumnak a(z) %1 függvényre egy sztring literálnak kell lennie, amikor egyeztetésre használják. + Egy XSL-T mintában %1 függvény első argumentumának szöveges literálnak kell lennie, ha illesztéshez használjuk. In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. - Egy XSLT mintában, az első argumentumnak a(z) %1 függvény esetén egy literálnak vagy egy változó hibatkozásnak kell lennie, mikor egyeztetésre használják. + Egy XSL-T mintában %1 függvény első argumentumának szöveges literálnak vagy változó hivatkozásnak kell lennie, ha illesztéshez használjuk. In an XSL-T pattern, function %1 cannot have a third argument. - Egy XSLT mintában, %1 függvénynek nem lehet egy harmadik argumentuma. + Egy XSL-T mintában %1 függénynek nem lehet harmadik argumentuma. In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. - Egy XSLT mintában, kizárólag a(z) %1 és %2 függvényeket, és %3-at nem lehet egyeztetésre használni. + Egy XSL-T mintában csak %1 és %2 függvények használhatók illesztéshez, %3 nem. In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. - Egy XSLT mintában, %1 tengelyt nem lehet használni, kizárólag a(z) %2 vagy %3 tengelyeket. + Egy XSL-T mintában %1 tengely nem, csak %2 vagy %3 tengely használható. %1 is an invalid template mode name. - %1 egy érvénytelen sablon mód név. + %1 érvénytelen sablon mód név. The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. - Egy változó összeköttetés nevének egy for kifejezésben különböznie kell a pozícionális változótol. Ezért, a két %1 nevű változó ütközik. + Egy for-kifejezésben kötött változó nevének különbözőnek kell lennie, mint a pozicionális változó neve. Így a két %1 nevű változó ütközik. The Schema Validation Feature is not supported. Hence, %1-expressions may not be used. - A terv jóváhagyási tulajdonság nem támogatott. Ezért, %1 kifejezést nem lehet használni. + A Schema Validation szolgáltatás nem támogatott. Ennélfogva %1-kifejezések nem használhatók. None of the pragma expressions are supported. Therefore, a fallback expression must be present - A pragma kifejezések egyike sem támogatott. Ezért egy visszavonuló kifejezést kell nyújtani + Pragma kifejezések egyike sem támogatott. Ennélfogva léteznie kell egy alapértelmezett kifejezésnek Each name of a template parameter must be unique; %1 is duplicated. - Sablon paraméter mindegyik nevének egyedülállónak kell lennie, %1 az duplikáns. + Minden sablonparaméter neve egyedi kell legyen, %1 azonban duplán szerepel. - - No function with name %1 is available. - %1 nevű függvény nem elérhető. + + The %1-axis is unsupported in XQuery + A(z) %1-tengely nem támogatott XQuery-ben - - %1 is not a valid numeric literal. - %1 nem egy érvényes számos literál. + + No function with name %1 is available. + Nem létezik %1 nevű függvény. - - W3C XML Schema identity constraint selector - W3C XML terv azonosító megszorító kiválasztó + + The namespace URI cannot be the empty string when binding to a prefix, %1. + Prefixumhoz kötés esetén a névtér URI nem lehet az üres sztring, %1. - - W3C XML Schema identity constraint field - W3C XML Terv azonosító megszorító mező + + %1 is an invalid namespace URI. + %1 érvénytelen névtér URI. - - A construct was encountered which is disallowed in the current language(%1). - Egy olyan konstruktort talált amelyik nincsen engedélyezve az aktuális nyelvben(%1). + + It is not possible to bind to the prefix %1 + Nem lehet kötni %1 prefixumhoz - + Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared). - %1 névteret kizárólag a %2-vel lehet összekötni (és ennyi, vagy mindkét esetben, előre deklarált). + %1 névtér csak %2-hoz köthető (és minden esetben előre deklarált). Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared). - %1 előtagot kizárólag a %2-vel lehet összekötni (és ennyi, vagy mindkét esetben, előre deklarált). - - - - An attribute with name %1 has already appeared on this element. - %1 attribútum név már van ebben az elemben. - - - - A direct element constructor is not well-formed. %1 is ended with %2. - Egy közvetlen elem konstruktor, mely nincsen jól megformázva. %1 a(z) %2-ben végzőik. - - - - The name %1 does not refer to any schema type. - A(z) %1 név nem vonatkozik egyetlen terv típusra sem. - - - - %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. - %1 egy összetett típus. Összetett típusra kasztolás nem lehetséges. De egy atomikus típusra mint egy %2 működik. - - - - %1 is not an atomic type. Casting is only possible to atomic types. - %1 nem egy atomikus típus. Kaszolás kizárólag csak atomikus típusra lehetséges. - - - - %1 is not a valid name for a processing-instruction. - %1 nem egy érvényes név egy utasítás feldolgozásra. - - - - The name of an extension expression must be in a namespace. - Egy kifejezés kiterjesztés nevének egy névtérben kell lennie. - - - - Required type is %1, but %2 was found. - %1 a szükséges típus, de %2 található. - - - - Promoting %1 to %2 may cause loss of precision. - %1 elősegítése %2-re precíziós vesztést okozhat. - - - - It's not possible to add attributes after any other kind of node. - Nem lehetséges attribútumokat hozzáadni, bármely másik csomópont után. - - - - Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. - Kizárólag a Unicode Kódpontos összevetés támogatott(%1). %2 nem támogatott. - - - - Integer division (%1) by zero (%2) is undefined. - Egész számos (%1) osztás nullával (%2) nem definiált. - - - - Division (%1) by zero (%2) is undefined. - Osztás (%1) nullával (%2) nem definiált. - - - - Modulus division (%1) by zero (%2) is undefined. - Tényezős osztás (%1) nullával (%2) nem definiált. - - - - %1 takes at most %n argument(s). %2 is therefore invalid. - - %1 legalább %n argumentumot vár. A(z) %2 ennel következtében érvénytelen. - - - - - %1 requires at least %n argument(s). %2 is therefore invalid. - - %1 legalább %n argumentumot igényel. Ennek következtében a(z) %2 érvénytelen. - - - - - The root node of the second argument to function %1 must be a document node. %2 is not a document node. - A második argumentum rendszergazda csomópontja %1 függvényre dokumentum csomópontnak kell lenni. %2 nem egy dokumentum csomópont. - - - - The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) - A névtér a felhasználó által definiált függvényre nem lehet üres (próbálja ki az előredefiniált %1 előtagot, mely innen esetekre lett kitalálva) - - - - - A default namespace declaration must occur before function, variable, and option declarations. - Egy alapértelmezett névtér deklarációnak a függvény, változó, és opció deklarációk előtt kell elhelyezkednie. + %1 prefixum csak %2-hoz köthető (és minden esetben előre deklarált). - - Namespace declarations must occur before function, variable, and option declarations. - A névtér deklarációnak a függvény, változó, és opció deklarációk előtt kell elhelyezkednie. - - - - Module imports must occur before function, variable, and option declarations. - Modul importálásnak a függvény, változó, és opció deklarációk előtt kell elhelyezkednie. - - - - %1 is not a whole number of minutes. - %1 nem egy egész számú perc érték. - - - - Attribute %1 can't be serialized because it appears at the top level. - %1 attribtútumot nem lehet sorozatosítani, mert legfelső szinten tűnik fel. + + Two namespace declaration attributes have the same name: %1. + Két névtér-deklaráció attribútum neve azonos: %1. - - %1 is an unsupported encoding. - %1 egy nem támogatott kódolás. + + The namespace URI must be a constant and cannot use enclosed expressions. + Egy névtér URI-nek konstansnak kell lennie és nem használhat bennfoglalt kifejezéseket. - %1 contains octets which are disallowed in the requested encoding %2. - %1 oktálisokat tartalmat, melyek tiltva vannak a lekérdezett %2 kódolásban. - - - - The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. - A kódpont %1, mely a %2-ben fordul elő %3 kódolást használva, egy érvénytelen XML karakter. - - - - Ambiguous rule match. - Bizonytalan szabály egyezés. - - - - In a namespace constructor, the value for a namespace cannot be an empty string. - Egy névtér konstruktorban, egy névtér értéke nem lehet egy üres sztring. + An attribute with name %1 has already appeared on this element. + %1 nevű attribútum már szerepelt ebben az elemben. - - The prefix must be a valid %1, which %2 is not. - Az előtagnak egy érvényes %1-nek kell lennie, %2 nem lehet. + + A direct element constructor is not well-formed. %1 is ended with %2. + Egy közvetlen elem konstruktor nem jól formázott. %1-t %2 zárja le. - - The prefix %1 cannot be bound. - A(z) %1 előtagot nem lehet összekötni. + + The name %1 does not refer to any schema type. + A(z) %1 név nem mutat semmilyen séma típusra. - Only the prefix %1 can be bound to %2 and vice versa. - Kizárólag a(z) %1 előtagot lehet összekötni a %2-vel és fordítva. + %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. + %1 komplex típus. Komplex típusra való kényszerítés nem lehetséges. Azonban atomi típusokra, mint pl. %2 történő kényszerítés igen. - - The parameter %1 is required, but no corresponding %2 is supplied. - A(z) %1 paraméter követelik, de nincs megelelő %2 támogatás hozzá. + + %1 is not an atomic type. Casting is only possible to atomic types. + %1 nem atomi típus. Típuskényszerítés csak atomi típusra történhet. - - The parameter %1 is passed, but no corresponding %2 exists. - A(z) %1 paraméter teljesítve, de a megfelelő %2 nem létezik. + + %1 is not a valid name for a processing-instruction. + %1 érvénytelen feldogozási utasítás név. - - The URI cannot have a fragment - Az URI nem tartalmaz tördezettséget + + + %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. + %1 nem a láthatóságon belüli attribútum deklarációk között van. A séma import szolgáltatás nem támogatott. + + + + The name of an extension expression must be in a namespace. + Egy kiterjesztés kifejezés nevének névtérben kell lennie. Element %1 is not allowed at this location. - %1 elem nincs engedélyezve ezen a ponton. + %1 elem nem megengedett ezen a helyen. Text nodes are not allowed at this location. - Szöveg csomópontok nincsenek engedélyezve ezen a ponton. + Szöveg csomópontok nem megengedettek ezen a helyen. Parse error: %1 - Elemzési hiba: %1 + Értelmezési hiba: %1 The value of the XSL-T version attribute must be a value of type %1, which %2 isn't. - XSLT verzió attribútum értékének %1 típusú értéknek kell lennie, %2 nem lehet. + Az XSL-T verzió attribútum értékének %1 típusúnak kell lennie, %2 pedig nem az. Running an XSL-T 1.0 stylesheet with a 2.0 processor. - Egy XSLT 1.0 stíluslap egy 2.0 feldolgozóval való futtatása. + XSL-T 1.0 stíluslap futtatása 2.0 verziójú feldolgozóval. Unknown XSL-T attribute %1. - Ismeretlen XSLT attribútum %1. + Ismeretlen XSL-T attributum: %1. Attribute %1 and %2 are mutually exclusive. - A(z) %1 és %2 attribútum kölcsönösen kizárják egymást. + %1 és %2 attribútumok kölcsönösen kizáróak. In a simplified stylesheet module, attribute %1 must be present. - Egy leegyszerűsített stíluslap modulban, %1 attribútumot kell nyújtani. + Egy egyszerűsített stíluslap modulban a(z) %1 attribútumnak jelen kell lennie. If element %1 has no attribute %2, it cannot have attribute %3 or %4. - Ha a(z) %1 elem nem tartalmaz %2 attribútumot, akkor nem tartalmazhat %3 vagy %4 attribútumot. + Ha %1 elemnek nincs %2 attribútuma, akkor %3 vagy %4 attribútuma sem lehet. Element %1 must have at least one of the attributes %2 or %3. - %1 elemnek legalább egy %2 vagy %3 attribútumot kell tartalmaznia. + %1 elemnek valamelyik attribútumát meg kell adni %2 vagy %3 közül. At least one mode must be specified in the %1-attribute on element %2. - Legalább egy csomópontot meg kell határozni a(z) %1 attribútumban a(z) %2 elemen. + %2 elem %1-attribútumában legalább egy módot meg kell adni. Element %1 must come last. - %1 elemnek kell utoljára következnie. + %1 elemnek az utoljára kell szerepelnie. At least one %1-element must occur before %2. - Legalább egy %1 elemnek kell előfordulnia %2 előtt. + Legalább egy %1-elemnek szerepelnie kell %2 előtt. Only one %1-element can appear. - Csak egy %1 elem jelenhet meg. + Csak egy %1-elem jelenhet meg. At least one %1-element must occur inside %2. - Legalább egy %1 elem fordulhat elő %2-n belül. + Legalább egy %1-elemnek meg kell jelennie %2-n belül. When attribute %1 is present on %2, a sequence constructor cannot be used. - Mikor %1 attribútuk van benyújtva %2-n, egy sorozat konstruktort nem lehet használni. + Ha %2-n meg van adva %1 attribútum, akkor nem használható szekvencia konstruktor. Element %1 must have either a %2-attribute or a sequence constructor. - %1 elemnek vagy egy %2 attribútumot vagy egy sorozat konstruktort kell tartalmaznia. + %1 elemnek vagy %2-attribútumának vagy szekvencia konstruktorának lennie kell. When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. - Amikor egy paramétert igényel, egy alapértelmezett érték ellátni egy %1 attribútum vagy egy sorozat konstruktoron keresztül. + Ha paraméter az elvárt, akkor alapértelmezett értéket nem lehet %1-attribútumon vagy szekvencia konstruktoron keresztül átadni. Element %1 cannot have children. - %1 elem nem tartalmazhat gyereket. + %1 elemnek nem lehetnek gyermekei. Element %1 cannot have a sequence constructor. - %1 elem nem tartalmazhat egy sorozat konstruktort. + %1 elemnek nem lehet szekvencia konstruktora. The attribute %1 cannot appear on %2, when it is a child of %3. - A(z) %1 attribútum nem jelenhet meg %2-n, mikor egy %3 gyereke. + %1 attribútum nem szerepelhet %2-n, ha az %3 gyermeke. A parameter in a function cannot be declared to be a tunnel. - Egy paramétert nem lehet behangoltnak deklarálni egy függvényben. + Egy függvényparaméter nem definiálható mint tunnel. This processor is not Schema-aware and therefore %1 cannot be used. - Ez a feldolgozó nem terv biztos és ennek következtében a(z) %1-t nem lehet használni. + Ez a feldolgozó nem sémafüggő, ezért %1 nem használható. Top level stylesheet elements must be in a non-null namespace, which %1 isn't. - Felső szintű stíluslap elemeknek nem szabad egy nem nulla névtérnek lenniük, %1 nem jó. + Felső szintű stíluslap elemeknek egy nem üres névtérben kell lenniük, ezért %1 nem jó. The value for attribute %1 on element %2 must either be %3 or %4, not %5. - %1 attribútum értékének a(z) %2-s elemen vagy %3 vagy %4, vagy %5-nek kell lennie. + %2 elem %1 attribútumának értéke %3 vagy %4 kell legyen, de nem %5. Attribute %1 cannot have the value %2. - %1 attribútum nem tartalmazhat %2 értéket. + %1 attribútum értéke nem lehet %2. The attribute %1 can only appear on the first %2 element. - A(z) %1 attribútum kizárólag az első %2 elemen tűnhet fel. + %1 attribútum csak az első %2 elem esetén jelenhet meg. At least one %1 element must appear as child of %2. - Legalább egy %1 elemnek mutatkoznia %2 gyerekeként. + Legalább egy %1 elemnek %2 gyermekeként meg kell jelennie. + + + + Empty particle cannot be derived from non-empty particle. + Üres részecske nem származtatható nem üres részecskéből. + + + + Derived particle is missing element %1. + Származtatott részecskéből hiányzik %1 elem. + + + + Derived element %1 is missing value constraint as defined in base particle. + %1 származtatott elemből hiányzik az ős részecskében definiált érték megszorítás. + + + + Derived element %1 has weaker value constraint than base particle. + %1 származtatott elem érték megkötése gyengébb, mint az ős részecskéé. + + + + Fixed value constraint of element %1 differs from value constraint in base particle. + %1 elem rögzített érték megkötése különbözik az ős részecskében megadott érték megkötéstől. + + + + Derived element %1 cannot be nillable as base element is not nillable. + %1 elem nem lehet nil-feltételű, mert az ős eleme sem nil-feltételű. + + + + Block constraints of derived element %1 must not be more weaker than in the base element. + %1 származtatott elem blokk megkötései nem lehetnek gyengébbek, mint az ős elemben. + + + + Simple type of derived element %1 cannot be validly derived from base element. + %1 származtatott elem egyszerű típusa nem származtatható érvényesen az ős elemből. + + + + Complex type of derived element %1 cannot be validly derived from base element. + %1 származtatott elem komplex típusa nem származtatható érvényesen az ős elemből. + + + + Element %1 is missing in derived particle. + %1 elem hiányzik a származtatott részecskéből. + + + + Element %1 does not match namespace constraint of wildcard in base particle. + %1 elem nem illeszkedik az ős részecskében megadott névtér helyettesítő mintájára. + + + + Wildcard in derived particle is not a valid subset of wildcard in base particle. + Származtatott részecske helyettesítő mintája érvénytelen részhalmaza az ős részecske helyettesítő mintájának. + + + + processContent of wildcard in derived particle is weaker than wildcard in base particle. + Származtatott elem mintájának processContent értéke gyengébb, mint az ős részecske mintája. + + + + Derived particle allows content that is not allowed in the base particle. + Származtatott részecske olyan tartalmat is engedélyez, ami nem megengedett az ős részecskében. %1 has inheritance loop in its base type %2. - %1 tartalmaz egy öröklődési hurkot annak %2 alaptípusában. + %1 öröklődési hurkot tartalmaz %2 szülő típusában. Circular inheritance of base type %1. - A(z) %1 alaptípus cirkuláris öröklődése. + Körkörös %1 őstípusú öröklődés. Circular inheritance of union %1. - A(z) %1 union cirkuláris öröklődése. + %1 union körkörös öröklődése. %1 is not allowed to derive from %2 by restriction as the latter defines it as final. - A(z) %1 %2-ből való származtatása nem megengedett, azzal a korlátozassal, hogy az utóbbi utolsónak definiálja. + %1 nem származhat %2-ből megkötéssel, mert utóbbi final-ként definiálja. %1 is not allowed to derive from %2 by extension as the latter defines it as final. - %1-nek nem engedélyezett a %2-ből való származtatása, azzal a kiegészítéssel, hogy a utóbbi végsőnek definiálja. + %1 nem származhat %2-ből kiterjesztéssel, mert utóbbi final-ként definiálja. Base type of simple type %1 cannot be complex type %2. - A(z) %1 egyszerű típus alaptípusa nem lehet egy %2 összetett típus. + %1 egyszerű típus őstípusa nem lehet %2 komplex típus. Simple type %1 cannot have direct base type %2. - A(z) %1 egyszerű típus nem tartalmazhat közvetlen %2 alap típust. + %1 egyszerű típus közvetlen őstípusa nem lehet %2. Simple type %1 is not allowed to have base type %2. - %1 egyszerű típusnak nincs engedélyezve, hogy %2 alap típusokat tartalmazzon. + %1 egyszerű típus őstípusa nem lehet %2. Simple type %1 can only have simple atomic type as base type. - A(z) %1 egyszerű típus kizárólag egyszerű atomikus típusokat tartalmazhat alaptípusként. + %1 egyszerű típus őse csak egyszerű atomi típus lehet. Simple type %1 cannot derive from %2 as the latter defines restriction as final. - %1 egyszerű típus nem származtatható %2-ből, mint ahogy az utóbbi végső korlátozásokat definiál. + %1 nem származhat %2-ből, mert utóbbi final megkötést definiál. Variety of item type of %1 must be either atomic or union. - %1 elemtípus különbözőségeinek vagy vagy atomikus vagy unionnak kell lenni. + %1 elemtípus választéka csak atomic vagy union lehet. Variety of member types of %1 must be atomic. - %1 tagtípusok különbözőségének atomikusnak kell lennie. + %1 tagtípusok választéka csak atomi lehet. %1 is not allowed to derive from %2 by list as the latter defines it as final. - %1 származtatása a(z) %2-ből nem engedélyezett, listázva azt, hogy az utóbbi végsőként definiálja. + %1 nem származhat %2-ből listával, mert utóbbi final-ként definiálja. Simple type %1 is only allowed to have %2 facet. - %1 egyszerű típus kizárólag %2 oldalt tartalmazhat. + %1 egyszerű típusnak csak %2 facet-je lehet. Base type of simple type %1 must have variety of type list. - %1 egyszerű típus alap típusának különböző típus listákat kell tartalmaznia. + Base type of simple type %1 has defined derivation by restriction as final. - %1 egyszerű típus alaptípusa definiálja a számaztatást végső korlátozással. + %1 egyszerű típus őstípusa a megkötéssel történő származtatást final-ként definiálta. Item type of base type does not match item type of %1. - Az alap típus elem típusa nem egyezik a(z) %1 elemtípusával. + Az ős típusa nem egyezik %1 elemtípussal. Simple type %1 contains not allowed facet type %2. - %1 egyszerű típus nem engedélyezett oldal %2 típusokat tartalmaz. + %1 egyszerű típus nem megengedett %2 facet típust tartalmaz. %1 is not allowed to derive from %2 by union as the latter defines it as final. - %1 %2-ből történő származtatása nem engedélyezett az unió által, az utóbbi végsőként definiálja. + %1 nemm származhat %2-ből union-nal, mert utóbbi final-ként definiálta. %1 is not allowed to have any facets. - %1 nem tartalmazhat semmilyen oldalt. + %1 nem birtokolhat facet-eket. Base type %1 of simple type %2 must have variety of union. - %2 egyszerű típus %1 alap típusának különböző egységeket kell tartalmaznia. + %2 típusú %1 őstípusnak union választéka kell legyen. Base type %1 of simple type %2 is not allowed to have restriction in %3 attribute. - %2 egyszerű típus %1 alap típusa nem tartalmazhat korlátozásokat a %3 attribútumban. + %2 egyszerű típusú %1 őstípusnak nem lehet megkötést adni %3 attribútumban. Member type %1 cannot be derived from member type %2 of %3's base type %4. - %1 tag típus nem származtatható a(z) %3 %4 alap típusának %2 tagtípusából. + %1 tag típus nem származhat %2 tag típusból, %3-nak %4 őstípusából. Derivation method of %1 must be extension because the base type %2 is a simple type. - %1 származtatása eljárásának kiterjesztésnek kell lennie, mert %2 alap típus egy egyszerű típus. + %1 származtatási módja kiterjesztés kell legyen, mert %2 őstípus egyszerű típus. Complex type %1 has duplicated element %2 in its content model. - A(z) %1 összetett típusnak duplikáns %2 eleme van a tartalmi modellében. + %1 komplex típus tartalom modelljében %2 elem duplán szerepel. Complex type %1 has non-deterministic content. - %1 összetett típusnak nincsen meghatározott tartalma. + %1 komplex típus tartalma nem determinisztikus. Attributes of complex type %1 are not a valid extension of the attributes of base type %2: %3. - %1 összetett típus attribútumai a(z) %2 alap típus attribútumainak nem érvényes kiterjesztései: %3. + %1 komplex típus attribútumai nem érvényes kiterjesztései %2 őstípus attribútumainak: %3. Content model of complex type %1 is not a valid extension of content model of %2. - %1 komplex típus tartalmi modelle a(z) %2 tartalmi modellének nem egy érvényes kiterjesztése. + %1 komplex típus tartalom modellje nem érvényes kiterjesztése %2 tartalom modelljének. Complex type %1 must have simple content. - %1 komplex típusnak tartalmaznia kell egy egyszerű tartalmat. + %1 komplex típusnak egyszerű tartalma kell legyen. Complex type %1 must have the same simple type as its base class %2. - %1 komplex típusnak ugyanazt az egyszerű típust kell tartalmaznia a(z) %2 alap osztálya számára. + %1 komplex típusnak ugyanazzal az egyszerű típussal kell rendelkeznie, mint %2 ősosztályának. Complex type %1 cannot be derived from base type %2%3. - %1 komplex típus nem származtatható a(z) %2%3 alap típusból. + %1 komplex típus nem származhat %2%3 őstípusból. Attributes of complex type %1 are not a valid restriction from the attributes of base type %2: %3. - %1 komplex típus attribútumai nem egy érvényes korlátozások a(z) %2 alap típus attribútumaitól: %3. + %1 komplex típus attribútumai nem érvényes megszorítások %2 őstípus attribútumai alapján: %3. Complex type %1 with simple content cannot be derived from complex base type %2. - %1 komplex típus egyszerű tartalommal nem származtatható %2 komplex alap típusból. + %1 egyszerű tartalmú komplex típus nem származhat %2 komplex típusból. Item type of simple type %1 cannot be a complex type. - A(z) %1 egyszerű típus elemi típusa nem lehet egy komplex típus. + %1 egyszerű típusú elem típusa nem lehet komplex típus. Member type of simple type %1 cannot be a complex type. - %1 egyszerű típus tag típusa nem lehet egy komplex típus. + %1 egyszerű típusú tag típus nem lehet komplex típus. %1 is not allowed to have a member type with the same name as itself. - %1 nem engedélyzett, hogy tartalmazzon egy tag típust ugyanazzal a névvel, mint a saját neve. + %1 nem tartalmazhat olyan tag típust, melynek neve egyezik önmaga nevével. %1 facet collides with %2 facet. - %1 oldal ütközik a(z) %2 oldallal. + %1 facet ütközik %2 facet-tel. %1 facet must have the same value as %2 facet of base type. - %1 oldalnak ugyanazt az értéket kell tartalmaznia, mint az alap típus %2 oldalának. + %1 facet-nek %2 facet-ével azonos őstípusú értéke kell legyen. %1 facet must be equal or greater than %2 facet of base type. - %1 oldalnak nagyobbnak vagy egyenlőnek kell lennie, mint az alap típus %2 oldalának. + %1 facet-nek egyenlőnek vagy nagyobbnak kell lennie %2 facet-nél őstípus alapján. @@ -9326,541 +11903,319 @@ Kérem válasszon egy különböző fájl nevet. %1 facet must be less than or equal to %2 facet of base type. - %1 oldalnal kisebb vagy egyenlőnek kell lennie az alap típus %2 oldalánál. + %1 facet-nek egyenlőnek vagy kisebbnek kell lennie %2 facet-nél őstípus alapján. %1 facet contains invalid regular expression - %1 oldal érvénytelen reguláris kifejezéseket tartalmaz + %1 facet érvénytelen reguláris kifejezést tartalmaz Unknown notation %1 used in %2 facet. - %1 ismeretlen jelölési mód van használva a(z) %2 oldalon. + Ismeretlen jelölés %1 a(z) %2 facet-ben. %1 facet contains invalid value %2: %3. - %1 oldal érvénytelen %2 értéket tartalmaz: %3. + %1 facet értéke érvénytelen %2: %3. %1 facet cannot be %2 or %3 if %4 facet of base type is %5. - %1 oldal nem lehet %2 vagy %3, ha az alap típus %4 oldala %5. + %1 facet nem lehet %2 vagy %3, ha %4 facet, mint őstípus %5. %1 facet cannot be %2 if %3 facet of base type is %4. - %1 oldal nem lehet %2, ha az alap típus %3 oldala %4. + %1 facet nem lehet %2, ha %3 facet, mint őstípus %4. %1 facet must be less than or equal to %2 facet. - %1 oldalnak kisebb egyenlőnek kell lennie a(z) %2 oldalnál. + %1 facet-nek kisebbnek vagy egyenlőnek kell lennie, mint %2 facet. %1 facet must be less than %2 facet of base type. - %1 oldalnak kisebbnek kell lennie az alap típus %2 oldalánál. + %1 facet-nek kisebbnek kell lennie %2 facet-nél, mint őstípusnál. %1 facet and %2 facet cannot appear together. - %1 oldal és %2 oldal nem fordulhat elő együtt. + %1 és %2 facet-ek nem jelenhetnek meg együttesen. %1 facet must be greater than %2 facet of base type. - %1 oldalnak nagyobbnak kell lennie, mint az alaptípus %2 oldalának. + %1 facet-nek nagyobbnak kell lennei, %2 facet-nél, mint őstípusnál. %1 facet must be less than %2 facet. - %1 oldalnak kisebbnek kell lenni a(z) %2 oldalnál. + %1 facet kisebb kell legyen, mint %2 facet. %1 facet must be greater than or equal to %2 facet of base type. - %1 oldalnak nagyobb vagy egyenlőnek kell lennie az alap típus %2 oldalánál. + %1 facet-nek egyenlőnek vagy nagyobbnak kell lennie %2 facet-nél mint őstípusnál. Simple type contains not allowed facet %1. - Egyszerű típus nem tartalmazhat %1 oldalt. + Egyszerű típus nem megengedett %1 facet-et tartalmaz. %1, %2, %3, %4, %5 and %6 facets are not allowed when derived by list. - %1, %2, %3, %4, %5 és %6 oldalak nem engedélyezettek listáról származtatáskor. + %1, %2, %3, %4, %5 és %6 facet-ek nem megengedettek, ha lista alapján származtatunk. Only %1 and %2 facets are allowed when derived by union. - Csak a(z) %1 és %2 oldalak engedélyezettek union származtatásakor. + Csak %1 és %2 facet-ek engedélyezettek union típusú származtatás esetén. %1 contains %2 facet with invalid data: %3. - %1 %2 oldalt tartalmaz érvénytelen adattal: %3. + %1 érvénytelen adattartalmú %2 facet-et tartalmaz: %3. Attribute group %1 contains attribute %2 twice. - A(z) %1 attribútum csoport a(z) %2 attribútumot kétszer tartalmazza. + %1 attribútum csoport kétszer tartalmazza %2 attribútumot. Attribute group %1 contains two different attributes that both have types derived from %2. - A(z) %1 attribútum csoport két különböző attribútumot tartalmaz, melyek közül mindkettő %2-ból számaztatott típusokat tartalmaz. + %1 attribútum csoport két különböző attribútumot tartalmaz, melyek típusa %2-ből származtatott. Attribute group %1 contains attribute %2 that has value constraint but type that inherits from %3. - A(z) %1 attribútum csoport %2 attribútumot tartalmaz, amely olyan megszorított értéket tartalmaz, kivéve a típust, amit %3-ból örököl. + %1 attribútum csoport %2 attribútumot tartalmaz, aminek érték megkötése van, de típusa %3-ból származik. Complex type %1 contains attribute %2 twice. - A(z) %1 összetett típus %2 attribútumot tartalmazza kétszer. + %1 komplex típus %2 attribútumot kétszer tartalmazza. Complex type %1 contains two different attributes that both have types derived from %2. - %1 komplex típus két különböző attribútumot tartalmaz, amelyek közül mindkettő %2-ból származtatott típusokat tartalmaz. + %1 komplex típus két különböző attribútumot tartalmaz, melyek típusa %2-ből származtatott. Complex type %1 contains attribute %2 that has value constraint but type that inherits from %3. - %1 kompex típus %2 attribútumot tartalmaz, aminek megszorító értéke van, kivéve a típust, amit a(z) %3-ból örököl. + %1 komplex típus %2 attribútumot tartalmaz, aminek érték megkötése van, de típusa %3-ból származik. Element %1 is not allowed to have a value constraint if its base type is complex. - %1 elem nem tartalmazhat egy korlátozott értéket, ha az alaptípusa komplex. + %1 elemre nem lehet érték megkötés, ha őstípusa komplex. Element %1 is not allowed to have a value constraint if its type is derived from %2. - %1 elem nem tartalmazhat egy korlátozott értéket, ha a típusa a(z) %2-ből származik. + %1 elemre nem lehet érték megkötés, ha típusa %2-ből származtatott. Value constraint of element %1 is not of elements type: %2. - %1 elem korlátozó értéke nem elemi típus: %2. + %1 elem érték megkötése nem a következő elemtípusú: %2. Element %1 is not allowed to have substitution group affiliation as it is no global element. - %1 elem nem tartalmazhat helyettesítési csoport egyesítést, mert nem egy globális elem. + %1 elemnek nem lehet helyettesítő csoport kapcsolata, mivel nem globális elem. Type of element %1 cannot be derived from type of substitution group affiliation. - %1 elem típus nem származtatható helyettesítési csoport egyesítési típusból. + %1 elem típusa nem származhat helyettesítő csoport kapcsolat típusból. Value constraint of attribute %1 is not of attributes type: %2. - %1 attribútum korlátozó értéke nem attribútum típus: %2. + %1 attribútum érték megkötése nem az attribútum típusával egyező: %2. Attribute %1 has value constraint but has type derived from %2. - %1 attribútumnak korlátozó értéke van, de %2-ből származtatott típust tartalmaz. + %1 attribútumnak érték megkötése van, de típusa %2-ből származtatott. %1 attribute in derived complex type must be %2 like in base type. - %1 attribútum egy származtatott komplex típusban %2-nek kell lennie, mint az alap típusban. + %1 attribútumnak %2-nek kell lennie a származtatott komplex típusban, úgy mint az őstípusban. Attribute %1 in derived complex type must have %2 value constraint like in base type. - A származtatott komplex típusban levő %1 attribútumnak %2 érték korlátozót kell tartalmaznia, mint az alap típusban. + Származtatott komplex típusban %1 attribútumnak %2 érték megkötésének kell lennie, mint az őstípusban. Attribute %1 in derived complex type must have the same %2 value constraint like in base type. - Származtatott komplex típusban levő %1 attribútumnak ugyanazt a(z) %2 korlátozott értéket kell tartalmaznia, mint az alap típusban. + Származtatott komplex típusban %1 attribútumnak %2 érték megkötésének kell lennie, mint az őstípusban. Attribute %1 in derived complex type must have %2 value constraint. - Származtatott komplex típusban levő %1 attribútumnak %2 érték korlátozót kell tartalmaznia. + Származtatott komplex típus %1 attribútumának %2 érték megkötésének kell lennie. processContent of base wildcard must be weaker than derived wildcard. - Az alap helyettesítő jel folyamat tartalma gyengébb kell legyen, mint a származtatott helyettesítő jel. + Az ős helyettesítő kifejezésének processContent-je gyengébb kell legyen, mint a származtatott helyettesítő. Element %1 exists twice with different types. - %1 elem kétszer létezik különböző típusokkal. + %1 elem kétszer létezik eltérő típussal. Particle contains non-deterministic wildcards. - A részecske nem meghatározott helyettesítő jeleket tartalmaz. + A részecske nem determinisztikus helyettesítőket tartalmaz. Base attribute %1 is required but derived attribute is not. - A(z) %1 alap attribútum szükséges, de a származtatott attribútum nem. + %1 ős attribútum megkövetelt, de a származtatott nem. Type of derived attribute %1 cannot be validly derived from type of base attribute. - A(z) %1 származtatott attribútum típusa nem lehet érvényesen származtatni az alap attribútum típusból. + %1 származtatott attribútum típusa nem származtatható érvényesen az ős attribútum típusából. Value constraint of derived attribute %1 does not match value constraint of base attribute. - '%1 származtatott attribútum érték korlátozója nem egyezik az alap attribútum érték korlátozójával. + %1 származtatott attribútum érték megkötése nem egyezik az ős attribútuméval. Derived attribute %1 does not exist in the base definition. - %1 származtatott attribútum nem létezik az alap definícióban. + %1 származtatott attribútum nem létezik az ős definíciójában. Derived attribute %1 does not match the wildcard in the base definition. - %1 származtatott attribútum nem egyezik a helyettesítő jellel az alap definícióban. + %1 származtatott attribútum nem illeszkedik az ősben megadott helyettesítőre. Base attribute %1 is required but missing in derived definition. - %1 alap attribútum szükséges, de hiáynzik a származtatott definícióban. - - - - Derived definition contains an %1 element that does not exists in the base definition - A származtatot definíció egy %1 elemet tartalmaz, ami nem létezik az alap definícióban - - - - Derived wildcard is not a subset of the base wildcard. - Származtatott helyettesítőjel nem az alap helyettesítőjel egy részhalmaza. - - - - %1 of derived wildcard is not a valid restriction of %2 of base wildcard - Származtaott helyettesítő jel %1-e nem az alap helyettesítőjel %2-nek egy érvényes korlátozója - - - - Attribute %1 from base type is missing in derived type. - Az alap típus %1 attribútuma hiányzik a származtatott típusban. - - - - Type of derived attribute %1 differs from type of base attribute. - A(z) %1 származtatott típus az alap attribútum típusától különbözik. - - - - Base definition contains an %1 element that is missing in the derived definition - Az alap definíció egy %1 elemet tartalmaz, ami hiányzik a származtatott definícióból - - - - %1 references unknown %2 or %3 element %4. - %1 ismeretlen %2 vagy %3 elemre hivatkozik %4. - - - - %1 references identity constraint %2 that is no %3 or %4 element. - %1 %2 indentitás korlátozóra hivatkozik, ami nem %3 vagy %4 elem. - - - - %1 has a different number of fields from the identity constraint %2 that it references. - %1 mezők egy különböző számát tartalmazza a(z) %2 indetitás korlátozóbol, amelyik erre hivatkozik. - - - - Base type %1 of %2 element cannot be resolved. - %1 elem %2 alap típusát nem lehet megfejteni. - - - - Item type %1 of %2 element cannot be resolved. - %2 elem %1 elem típusát nem lehet megfejteni. - - - - Member type %1 of %2 element cannot be resolved. - %2 elem %1 tag típusát nem lehet megoldani. - - - - - - Type %1 of %2 element cannot be resolved. - %2 elem %1 típusát nem lehet megoldani. - - - - Base type %1 of complex type cannot be resolved. - Komplex típus %1 alap típusát nem lehet megfejteni. - - - - %1 cannot have complex base type that has a %2. - %1 nem tartalmazhat komplex alap típusokat, egy %2-t tartalmaz. - - - - Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type. - %1 komplex típus tartalmi modelle %2 elemet tartalmaz, tehát nem származtatható kiterjesztésben egy nem üres típusból. - - - - Complex type %1 cannot be derived by extension from %2 as the latter contains %3 element in its content model. - %1 komplex nem típus nem származtatható kiterjesztésben %2-ből, mert az utóbbi %3 elemet tartalmaz a tartalmi modellében. - - - - Type of %1 element must be a simple type, %2 is not. - %1 elem típusnak egy egyszerű típusnak kell, de %2 nem az. - - - - Substitution group %1 of %2 element cannot be resolved. - %2 elem %1 helyettesítési csoportját nem lehet megoldani. - - - - Substitution group %1 has circular definition. - %1 helyettesítési csoport cirkuláris definíciót tartalmaz. - - - - - Duplicated element names %1 in %2 element. - Duplikát %1 elemnév %2 elemben. - - - - - - - Reference %1 of %2 element cannot be resolved. - %2 elem %1 hivatkozását nem lehet megoldani. - - - - Circular group reference for %1. - Cirkuláris csoport hivatkozás %1-re. - - - - %1 element is not allowed in this scope - %1 elem nem engedélyezett ebben a hatókörben - - - - %1 element cannot have %2 attribute with value other than %3. - %1 elem nem tartalmazhat %2 attribútumot %3-tól eltérő értékkel. - - - - %1 element cannot have %2 attribute with value other than %3 or %4. - %1 element nem tartalmazhat %2 attribútumot %3 vagy %4-től eltérő értékkel. - - - - %1 or %2 attribute of reference %3 does not match with the attribute declaration %4. - %3 hivatkozás %1 vagy %2 attribútuma nem egyezik meg a(z) %4 attribútum deklarációval. - - - - Attribute group %1 has circular reference. - %1 attribútum csoport cirkuláris hivatkozást tartalmaz. - - - - %1 attribute in %2 must have %3 use like in base type %4. - %2-ben található %1 attribútumnak %3 használatát kell tartalmaznia, mint a(z) %4 alap típusban. - - - - Attribute wildcard of %1 is not a valid restriction of attribute wildcard of base type %2. - %1 attribútum helyettesítő jele nem a(z) %2 alap típus attribútum helyettesítő jelének egy érvényes korlátozása. - - - - %1 has attribute wildcard but its base type %2 has not. - %1 attribútum helyettesítő jelet tartalmaz, de a(z) %2 alap típusa nem. - - - - Union of attribute wildcard of type %1 and attribute wildcard of its base type %2 is not expressible. - %2 alaptípusának attribútum helyettesítő jele és a(z) %1 típus attribútum helyettesítő jelének union-ja nem kifejezhető. - - - - Enumeration facet contains invalid content: {%1} is not a value of type %2. - Felsorolás oldal érvénytelen tartalmat tartalmaz. {%1} nem egy érvényes %2 típus érték. - - - - Namespace prefix of qualified name %1 is not defined. - %1 minősített név névtér előtagja nincs definiálva. - - - - - %1 element %2 is not a valid restriction of the %3 element it redefines: %4. - %2 elem %1 nem a(z) %3 elem egy érvényes korlátozása, újradefininálja: %4. - - - - Empty particle cannot be derived from non-empty particle. - Üres részecskét nem lehet egy üres részecskéből származtatni. - - - - Derived particle is missing element %1. - Származtatott részecskének van egy %1 hiányzó eleme. - - - - Derived element %1 is missing value constraint as defined in base particle. - %1 származtatott elem hiányol egy érték korlátozót, ami az alap részecskében van definiálva. - - - - Derived element %1 has weaker value constraint than base particle. - %1 származtatott elem gyengébb érték korlátozót tartalmaz, mint az alap részecske. - - - - Fixed value constraint of element %1 differs from value constraint in base particle. - %1 elem fix érték korlátozója különbözik az alap részecskében található érték korlátozótól. - - - - Derived element %1 cannot be nillable as base element is not nillable. - %1 származtatott elem nem lehet nullázható, mint ahogy az alap elem sem nullázható. - - - - Block constraints of derived element %1 must not be more weaker than in the base element. - %1 származtatott elem blokk korlátozója nem lehet gyengébb, mint az alap elemben. + %1 ős attribútum megkövetelt, de hiányzik a leszármazott definíciójából. - - Simple type of derived element %1 cannot be validly derived from base element. - %1 származtatott elem egyszerű típusa nem származtatható érvényesen az alap elemből. + + Derived definition contains an %1 element that does not exists in the base definition + A leszármazott definíciója olyan %1 elemet tartalmaz, ami nem létezik az ős definíciójában - Complex type of derived element %1 cannot be validly derived from base element. - %1 származtatott elem komplex típusa nem származtatható érvényesen az alap elemből. - - - - Element %1 is missing in derived particle. - %1 elem hiányzik a származtott récseszkében. + Derived wildcard is not a subset of the base wildcard. + A származtatott helyettesítő nem részhalmaza az ősnek. - - Element %1 does not match namespace constraint of wildcard in base particle. - %1 elem nem egyezik meg az alap részecskében található helyettesítő jel névtér korlátozójával. + + %1 of derived wildcard is not a valid restriction of %2 of base wildcard + Leszármazott helyettesítő %1 része nem érvényes korlátozása az ős %2 részének - - Wildcard in derived particle is not a valid subset of wildcard in base particle. - Helyettesítő jel a származtatott részecskénen nem az alap részecskében található helyettesítő jel egy érvényes részhalmaza. + + Attribute %1 from base type is missing in derived type. + Az őstípus %1 attribútuma hiányzik a származtatott típusból. - processContent of wildcard in derived particle is weaker than wildcard in base particle. - A származtatott részecskében található helyettesítő jel folyamatTartalma gyengébb, mint az alap részecskében található helyettesítő jel. + Type of derived attribute %1 differs from type of base attribute. + %1 származtatott attribútum típusa eltér az ős attribútum típusától. - - Derived particle allows content that is not allowed in the base particle. - Származtatott részecske engedélyezi a tartalmat, ami nem engedélyezett az alap részecskében. + + Base definition contains an %1 element that is missing in the derived definition + Az ős definíciója tartalmaz olyan %1 elemet, ami hiányzik a leszármazott definíciójából Can not process unknown element %1, expected elements are: %2. - Nem lehet feldolgozni ismeretlen %1 elemet, várt elemek: %2. + %1 ismeretlen elemet nem lehet feldolgozni, a várt elemek: %2. Element %1 is not allowed in this scope, possible elements are: %2. - %1 elem nem engedélyezett ebben a hatórközben, lehetséges elemek: %2. + %1 elem nem megengedett ebben a hatókörben, a lehetséges elemek: %2. Child element is missing in that scope, possible child elements are: %1. - Gyermek elem hiányzik abban a hatókörben, lehetséges gyermek elemek: %1. + Gyermek elem hiányzik abból a hatókörből, lehetséges gyermek elemek: %1. Document is not a XML schema. - Dokumentum nem egy XML terv. + A dokumentum nem egy XML séma. %1 attribute of %2 element contains invalid content: {%3} is not a value of type %4. - %2 elem %1 attribútuma érvénytelen tartalmat tartalmaz: {%3} nem egy %4 típus érték. + %2 elem %1 attribútuma érvénytelen tartalmú: {%3} érvénytelen %4 típusú érték. %1 attribute of %2 element contains invalid content: {%3}. - %2 elem %1 attribútuma érvénytelen tartalmat tartalmaz: {%3}. + %2 elem %1 attribútuma érvénytelen tartalmú: {%3}. Target namespace %1 of included schema is different from the target namespace %2 as defined by the including schema. - A beleértett terv %1 cél névtere különbözik a %2 cél névtértől, amit a beleértett terv által lett definiálva. + %1 beemelt séma cél-névtere különbözik a beemelő sémában definiált %2 cél-névtértől. Target namespace %1 of imported schema is different from the target namespace %2 as defined by the importing schema. - Az importált terv %1 cél névtere különbözik a(z) %2 cél névtértől, ami az importált terv által van definiálva. + %1 importált séma cél-névtere különbözik az importáló sémában definiált %2 cél-névtértől. %1 element is not allowed to have the same %2 attribute value as the target namespace %3. - %1 elem nem tartalmazhatja ugyanazt a(z) %2 attribútum értéket, mint a(z) %3 cél névtér. + %1 elemnek nem lehet ugyanaz a %2 attribútum értéke, mint %3 cél-névtérnek. %1 element without %2 attribute is not allowed inside schema without target namespace. - %1 elem %2 attribútum nélkül nem engedélyezett a vázlaton belül cél névtér nélkül. + %2 attribútum nélküli %1 elem nem engedélyezett cél-névtér nélküli séma belsejében. %1 element is not allowed inside %2 element if %3 attribute is present. - %1 elem nem engedélyezett a(z) %2 elemen belül, ha %3 attribútum van nyújtva. + %1 elem nem megengedett %2 elemen belül, ha %3 attribútum meg van adva. %1 element has neither %2 attribute nor %3 child element. - %1 elem nem tartalmaz %2 attribútumot és %3 gyermek elemet sem. + %1 elemnek sem %2 attribútuma, sem %3 gyermek eleme nincs. @@ -9878,23 +12233,23 @@ Kérem válasszon egy különböző fájl nevet. %1 element with %2 child element must not have a %3 attribute. - %1 elem %2 gyermek elemmel nem tartalmazhat egy %3 attribútumot. + %2 gyermek elemmel rendelkező %1 elemnek nem lehet %3 attribútuma. %1 attribute of %2 element must be %3 or %4. - %2 elem %1 attribútumának %3 vagy %4-nek kell lennie. + %2 elem %1 attribútumának értéke %3 vagy %4 kell legyen. %1 attribute of %2 element must have a value of %3. - %2 elem %1 attribútumának %3 egy értékét tartalmaznia kell. + %2 elem %1 attribútumának értéke %3 kell legyen. %1 attribute of %2 element must have a value of %3 or %4. - %2 elem %1 attribútumának tartalmaznia kell %3 vagy %4 egy értékét. + %2 elem %1 attribútumának értéke %3 vagy %4 kell legyen. @@ -9912,81 +12267,81 @@ Kérem válasszon egy különböző fájl nevet. %1 element must not have %2 and %3 attribute together. - %1 elemnek tartalmaznia kell %2 és %3 attribútumokat együttesen. + %1 elemnek nem lehet egyidejűleg %2 és %3 attribútuma. Content of %1 attribute of %2 element must not be from namespace %3. - %2 elem %1 attribútumának tartalmának nem szabad a(z) %3 névtérből lennie. + %2 elem %1 attribútumának tartalma nem lehet %3 névtérből való. %1 attribute of %2 element must not be %3. - %2 elem %1 attribútumának nem szabad %3-nak lennie. + %2 elem %1 attribútuma nem lehet %3. %1 attribute of %2 element must have the value %3 because the %4 attribute is set. - %2 elem %1 attribútumának tartalmaznia kell %3 értéket, mert %4 attribútum be van állítva. + %2 elem %1 attribútumának értéke %3 kell legyen, mert a(z) %4 attribútum van megadva. Specifying use='prohibited' inside an attribute group has no effect. - Használat meghatározásának = 'tiltott' egy attribútum csoportját belül nincsen hatása. + use='prohibited' megadása egy attribútum csoporton belül hatástalan. %1 element must have either %2 or %3 attribute. - %1 elemnek vagy %2 vagy %3 attribútumot tartalmaznia kell. + %1 elemnek vagy %2 vagy %3 attribútumának lennie kell. %1 element must have either %2 attribute or %3 or %4 as child element. - %1 elemnek tartalmaznia kell vagy %2 vagy %3 vagy %4 attribútumot, mint ahogy a gyermek elem. + %1 elemnek vagy %2 attribútumának, vagy %3 vagy %4 gyermek elemének lennie kell. %1 element requires either %2 or %3 attribute. - %1 elem vagy %2 vagy %3 attribútumot igényli. + %1 elemnek %2 vagy %3 attribútumát meg kell adni. Text or entity references not allowed inside %1 element - Szöveg avgy entitás hivatkozás nem engedélyezett a(z) %1 elemen belül + Szöveg és entitás referenciák nem engedélyezettek %1 elemen belül %1 attribute of %2 element must contain %3, %4 or a list of URIs. - %2 elem %1 attribútumának tartalmaznia kell %3, %4 vagy URI-k egy listáját. + %2 elem %1 attribútumának %3-t, %4-t vagy URI-k listáját kell tartalmaznia. %1 element is not allowed in this context. - %1 elem nem engedélyezett ebben a szöveg környezetben. + %1 elem nem megengedett ebben a kontextusban. %1 attribute of %2 element has larger value than %3 attribute. - %2 elem %1 attribútuma nagyobb értéket tartalmaz, mint a %3 attribútum. + %2 elem %1 attribútumának értéka nagyobb, mint a(z) %3 attribútumé. Prefix of qualified name %1 is not defined. - A(z) %1 minősített név előtagja nem definiált. + %1 kvalifikált név prefixuma nincs definiálva. %1 attribute of %2 element must either contain %3 or the other values. - %2 elem %1 attribútumának vagy %3 vagy más értékeket kell tartalmaznia. + %2 elem %1 attribútumának vagy %3-t vagy a többi értéket kell tartalmaznia. Component with ID %1 has been defined previously. - %1 azonosítóval rendelkezővel komponens előzőleg definiálva lett. + %1 ID-jű komponens már lett definiálva korábban. @@ -10006,329 +12361,483 @@ Kérem válasszon egy különböző fájl nevet. Attribute group %1 already defined. - %1 csoport attribútum már definiálva van. + %1 attribútum csoport már definiálva van. Element group %1 already defined. - %1 csoport elem már definiálva van. + %1 elemcsoport már definiálva van. Notation %1 already defined. - %1 értesítés már definiálva van. + %1 jelölés már definiálva van. Identity constraint %1 already defined. - %1 azonosító korlátozó már definiálva van. + %1 identitás megkötés már definiálva van. Duplicated facets in simple type %1. - Duplikált oldalak %1 egyszerű típusban. + Duplikált facet-ek %1 egyszerű típusban. + + + + %1 references unknown %2 or %3 element %4. + CHECKIT + %1 érvénytelen %2 vagy %3 %4 elemre hivatkozik. + + + + %1 references identity constraint %2 that is no %3 or %4 element. + %1 %2 identitás megkötésre hivatkozik, ami nem %3 vagy %4 elem. + + + + %1 has a different number of fields from the identity constraint %2 that it references. + %1 eltérő számú mezőt tartalmaz, mint az általa hivatkozott %2 identitás megkötés. + + + + Base type %1 of %2 element cannot be resolved. + %2 elem %1 őstípusa nem feloldható. + + + + Item type %1 of %2 element cannot be resolved. + %2 elem %1 elemtípusa nem feloldható. + + + + Member type %1 of %2 element cannot be resolved. + %2 elem %1 tagtípusa nem feloldható. + + + + + + Type %1 of %2 element cannot be resolved. + %2 elem %1 típusa nem oldható fel. + + + + Base type %1 of complex type cannot be resolved. + Komplex típus %1 őstípusa nem oldható fel. + + + + %1 cannot have complex base type that has a %2. + %1-nek nem lehet %2-t tartalmazó komplex őstípusa. + + + + Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type. + %1 komplex típus tartalom modellje %2 elemet tartalmaz, ezáltal kiterjesztéssel nem származtatható nem üres típusból. + + + + Complex type %1 cannot be derived by extension from %2 as the latter contains %3 element in its content model. + %1 komplex típus nem származhat kiterjesztéssel %2-ból, mivel utóbbi %3 elemet tartalmaz a tartalom modelljében. + + + + Type of %1 element must be a simple type, %2 is not. + %1 elem típusának egyszerű típusnak kell lennie, %2 nem az. + + + + Substitution group %1 of %2 element cannot be resolved. + %2 elem %1 részcsoportja nem oldható fel. + + + + Substitution group %1 has circular definition. + %1 részcsoport körkörös definíciót tartalmaz. + + + + + Duplicated element names %1 in %2 element. + Duplikált %1 elemnevek a(z) %2 elemben. + + + + + + + Reference %1 of %2 element cannot be resolved. + %2 elem %1 referenciája nem oldható fel. + + + + Circular group reference for %1. + Körkörös csoport referencia %1-nél. + + + + %1 element is not allowed in this scope + %1 elem nem megengedett ebben a hatókörben + + + + %1 element cannot have %2 attribute with value other than %3. + %1 elem %2 attribútumának nem lehet más értéke, mint %3. + + + + %1 element cannot have %2 attribute with value other than %3 or %4. + %1 elem %2 attribútumának nem lehet más értéke, mint %3 vagy %4. + + + + %1 or %2 attribute of reference %3 does not match with the attribute declaration %4. + %3 referencia %1 vagy %2 attribútuma nem egyezik %4 attribútum deklarációval. + + + + Attribute group %1 has circular reference. + %1 attribútum csoport körkörös referenciát tartalmaz. + + + + %1 attribute in %2 must have %3 use like in base type %4. + %2 %1 attribútuma %3 kell legyen, úgy, mint %4 őstípusban. + + + + Attribute wildcard of %1 is not a valid restriction of attribute wildcard of base type %2. + %1 attribútum helyettesítője nem érvényes megkötése %2 őstípus helyettesítőjének. + + + + %1 has attribute wildcard but its base type %2 has not. + %1-nak van attribútum helyettesítője, de %2 őstípusnak nincs. + + + + Union of attribute wildcard of type %1 and attribute wildcard of its base type %2 is not expressible. + %1 típus attribútum helyettesítőjének és %2 őstípusa helyettesítőjének uniója nem kiefjezhető. + + + + Enumeration facet contains invalid content: {%1} is not a value of type %2. + Érvénytelen tartalom felsorolás facet-ben: {%1} érvénytelen érték %2 típusban. + + + + Namespace prefix of qualified name %1 is not defined. + %1 névtér prefixum vagy kvalifikált név nincs definiálva. + + + + + %1 element %2 is not a valid restriction of the %3 element it redefines: %4. + %1 elem érvénytelen %2 megkötése az általa felüldefiniált %3 elemre: %4. %1 is not valid according to %2. - %1 nem érvényes %2 szerint. + %2 alapján %1 érvénytelen. String content does not match the length facet. - Sztring tartalom nem egyezik a hossz oldallal. + A karakterlánc tartalom nem felel meg a hossz facet-nek. String content does not match the minLength facet. - Sztring tartalom nem egyezik a minimális hosszúságú felülettel. + A karakterlánc tartalom nem felel meg a minLength facet-nek. String content does not match the maxLength facet. - Sztring tartalom nem egyezik a maximális hosszúságú felülettel. + A karakterlánc tartalom nem felel meg a maxLength facet-nek. String content does not match pattern facet. - Sztrng tartalom nem egyezik a minta felülettel. + A karakterlánc tartalom nem felel meg a minta facet-nek. String content is not listed in the enumeration facet. - Sztring tartalom nincs listázva a felsorol felületben. + A karakterlánc tartalom nem szerepel a felsorolás facet-ben. Signed integer content does not match the maxInclusive facet. - Előjeles egész szám tartalom nem egyezik a maximális beleszámított felülettel. + Előjeles egész szám tartalom nem felel meg a maxInclusive facet-nek. Signed integer content does not match the maxExclusive facet. - Előjeles egész szám tartalom nem egyzik a maximális kizárólagos felülettel. + Előjeles egész szám tartalom nem felel meg a maxExclusive facet-nek. Signed integer content does not match the minInclusive facet. - Előjeles egész szám tartalom nem egyezik a minimális beleértet felülettel. + Előjeles egész szám tartalom nem felel meg a minInclusive facet-nek. Signed integer content does not match the minExclusive facet. - Előjeles egész szám tartalom nem egyezik a minimális kizárólagos felülettel. + Előjeles egész szám tartalom nem felel meg a minExclusive facet-nek. Signed integer content is not listed in the enumeration facet. - Előjeles egész szám tartalom nincsen kilistázva a felsorolási felületben. + Előjeles egész szám tartalom nem felel meg a felsorolás facet-nek. Signed integer content does not match pattern facet. - Előjeles egész szám tartalom nem egyezik a minta felületben. + Előjeles egész szám tartalom nem felel meg a minta facet-nek. Signed integer content does not match in the totalDigits facet. - Előjeles egész szám tartalom nem egyezik a teljesSzámos felület. + Előjeles egész szám tartalom nem felel meg a totalDigits facet-nek. Unsigned integer content does not match the maxInclusive facet. - Nem előjeles egész szám tartalom nem egyezik a maximális beleértett felülettel. + Előjel nélküli egész szám tartalom nem felel meg a maxInclusive facet-nek. Unsigned integer content does not match the maxExclusive facet. - Nem előjeles egész szám tartalom nem egyezik a maximális kizárólagos felülettel. + Előjel nélküli egész szám tartalom nem felel meg a maxExclusive facet-nek. Unsigned integer content does not match the minInclusive facet. - Nem előjeles tartalom nem egyezik a minimális beleértett felülettel. + Előjel nélküli egész szám tartalom nem felel meg a minInclusive facet-nek. Unsigned integer content does not match the minExclusive facet. - Nem előjeleg egész szám tartalom nem egyezik a beleértett minimális felülettel. + Előjel nélküli egész szám tartalom nem felel meg a minExclusive facet-nek. Unsigned integer content is not listed in the enumeration facet. - Nem előjeles egész szám tartalom nincsen kilistázva a felsorolási felületben. + Előjel nélküli egész szám tartalom nem szerepel a felsorolás facet-ben. Unsigned integer content does not match pattern facet. - Nem előjeles egész szám tartalom nem egyezik a minta felületben. + Előjel nélküli egész szám tartalom nem felel meg a minta facet-nek. Unsigned integer content does not match in the totalDigits facet. - Nem előjeles egész szám tartalom nem egyezik a teljesSzámos felületben. + Előjel nélküli egész szám tartalom nem felel meg a totalDigits facet-nek. Double content does not match the maxInclusive facet. - Dupla tartalom nem egyezik a maximális beleértett felületben. + Dupla pontosságú szám tartalom nem felel meg a maxInclusive facet-nek. Double content does not match the maxExclusive facet. - Dupla tartalom nem egyezik a maximális kizárólagos felülettel. + Dupla pontosságú szám tartalom nem felel meg a maxExclusive facet-nek. Double content does not match the minInclusive facet. - Dupla tartalom nem egyezik a minimális beleértett felülettel. + Dupla pontosságú szám tartalom nem felel meg a minInclusive facet-nek. Double content does not match the minExclusive facet. - Dupla tartalom nem egyezik a minimális kizárólag felülettel. + Dupla pontosságú szám tartalom nem felel meg a minExclusive facet-nek. Double content is not listed in the enumeration facet. - Dupla tartalom nincs listázva a felsorolási felületben. + Dupla pontosságú szám tartalom nem felel meg a felsorolás facet-nek. Double content does not match pattern facet. - Dupla tartalom nem egyezik a minta felületben. + Dupla pontosságú szám tartalom nem felel meg a minta facet-nek. Decimal content does not match in the fractionDigits facet. - Tizedes tartalom nem egyezik a szám tényezős felületben. + Decimális tartalom nem felel meg a fractionDigits facet-nek. Decimal content does not match in the totalDigits facet. - Tizedes tartalom nem egyezik a teljesenSzámos felületben. + Decimális tartalom nem felel meg a totalDigits facet-nek. Date time content does not match the maxInclusive facet. - Dátum idő tartalom nem egyezik a maximális beleértett felülettel. + Dátum-idő tartalom nem felel meg a maxInclusive facet-nek. Date time content does not match the maxExclusive facet. - Dátum idő tartalom nem egyezik a maximális kizárólagos felülettel. + Dátum-idő tartalom nem felel meg a maxExclusive facet-nek. Date time content does not match the minInclusive facet. - Dátum idő tartalom nem egyezik a minimális beleértett felülettel. + Dátum-idő tartalom nem felel meg a minInclusive facet-nek. Date time content does not match the minExclusive facet. - Dátum idő tartalom nem egyezik a minimális kizárólagos felülettel. + Dátum-idő tartalom nem felel meg a minExclusive facet-nek. Date time content is not listed in the enumeration facet. - Dátum idő tartalom nincsen kilistázva a felsorolási felületben. + Dátum-idő tartalom nem szerepel a felsorolás facet-ben. Date time content does not match pattern facet. - Dátum idő tartalom nem egyezik a minta felületben. + Dátum-idő tartalom nem felel meg a minta facet-nek. Duration content does not match the maxInclusive facet. - Tartalom időtartam nem egyezik a maximális beleértett felülettel. + Időtartam tartalom nem felel meg a maxInclusive facet-nek. Duration content does not match the maxExclusive facet. - Tartalom időtartam nem egyezik a maximális kizárólagos felülettel. + Időtartam tartalom nem felel meg a maxExclusive facet-nek. Duration content does not match the minInclusive facet. - Tartalom időtartam nem egyezik a minimális benne foglalt felülettel. + Időtartam tartalom nem felel meg a minInclusive facet-nek. Duration content does not match the minExclusive facet. - Tartalom időtartam nem egyezik a minimális kizárólagos felülettel. + Időtartam tartalom nem felel meg a minExclusive facet-nek. Duration content is not listed in the enumeration facet. - Tartalom időtartam nincs listázva a felsorolási felületben. + Időtartam tartalom nem szerepel a felsorolás facet-ben. Duration content does not match pattern facet. - Tartalom időtartam nem egyezik a felület mintában. + Időtartam tartalom nem felel meg a minta facet-nek. Boolean content does not match pattern facet. - Logikai tartalom nem egyezik a minta felületben. + Logikai tartalom nem felel meg a minta facet-nek. Binary content does not match the length facet. - Bináris tartalom nem egyezik a hossz felületben. + Bináris tartalom nem felel meg a hossz facet-nek. Binary content does not match the minLength facet. - Bináris tartalom nem egyezik a minimális hossz felületben. + Bináris tartalom nem felel meg a minLength facet-nek. Binary content does not match the maxLength facet. - Bináris tartalom nem egyezik a maximális hossz felületben. + Bináris tartalom nem felel meg a maxLength facet-nek. Binary content is not listed in the enumeration facet. - Bináris tartalom nincsen kilistázva a felsorolási felületben. + Bináris tartalom nem szerepel a felsorolás facet-ben. Invalid QName content: %1. - Érvénytelen QName tartalom: %1. + Érvénytelen QName tartalom: %1. QName content is not listed in the enumeration facet. - QName tartalom nincsen kilistázva a felsorolási felületben. + QName tartalom nem szerepel a felsorolás facet-ben. QName content does not match pattern facet. - QName tartalom nem egyezik a mintha felületben. + QName tartalom nem felel meg a minta facet-nek. Notation content is not listed in the enumeration facet. - Tartalom jelölés nincsen kilistázva a felsorolási felületben. + Jelölő tartalom nem szerepel a felsorolás facet-ben. List content does not match length facet. - Tartalom lista nem egyezik a hossz felületben. + Lista tartalom nem felel meg a hossz facet-nek. List content does not match minLength facet. - Tartalmi lista nem egyezik a minimális hossz felületben. + Lista tartalom nem felel meg a minLength facet-nek. List content does not match maxLength facet. - Tartalmi list nem egyezik a maximális hossz felületen. + Lista tartalom nem felel meg a maxLength facet-nek. List content is not listed in the enumeration facet. - Tartalmi lista nincsen kilistázva a felsorolási felületen. + Lista tartalom nem szerepl a felsorolás facet-ben. List content does not match pattern facet. - Tartalmi lista nem egyezik a minta felületen. + Lista tartalom nem felel meg a minta facet-nek. Union content is not listed in the enumeration facet. - Egység tartalom nincsen kilistázva a felsorolási felületen. + Union tartalom nem szerepel a felsorolás facet-ben. Union content does not match pattern facet. - Egység tartalom nem egyezik a minta felületen. + Union tartalom nem felel meg a minta facet-nek. Data of type %1 are not allowed to be empty. - %1 típus adata nem engedélyezett, hogy üres legyen. + %1 típusú adat nem lehet üres. Element %1 is missing child element. - %1 elem hiányzik a gyermek elemből. + Hiányzó gyermek elem %1 elemben. There is one IDREF value with no corresponding ID: %1. - Van egy IDREF érték nem megfelelő azonosítóval: %1. + Egy IDREF érték van hozzátartozó ID nélkül: %1. Loaded schema file is invalid. - Betöltött terv fájl nem létezik. + A betöltött sémafájl érvénytelen. + @@ -10338,128 +12847,128 @@ Kérem válasszon egy különböző fájl nevet. xsi:schemaLocation namespace %1 has already appeared earlier in the instance document. - xsi:tervElhelyezkedés %1 névtér már előfordult korábban a példa dokumentumban. + %1 xsi:schemaLocation névtér már szerepelt korábban a példány dokumentumban. xsi:noNamespaceSchemaLocation cannot appear after the first no-namespace element or attribute. - xsi:tervElhelyezkedés névtér nem fordulhat elő az első nem névtér elem vagy attribútum után. + xsi:noNamespaceSchemaLocation nem szerepelhet az első nem-névtérbeli elem vagy attribútum után. No schema defined for validation. - Nincsen terv definiálva jóváhagyásra. + Nincs megadva séma a validáláshoz. No definition for element %1 available. - Nincsen elérhető definíció a(z) %1 elemre. + %1 elem definíciója nem érhető el. Specified type %1 is not known to the schema. - %1 meghatározott típus ismeretlen a terv számára. + A megadott %1 típus ismeretlen a séma számára. Element %1 is not defined in this scope. - %1 elem nincs definiálva ebben a hatókörben. + %1 elem nem ebben a hatókörben lett definiálva. Declaration for element %1 does not exist. - %1 elem deklaráció nem létezik. + %1 elem deklarációja nem létezik. Element %1 contains invalid content. - %1 elem érvénytelen tartalmat tartalmaz. + %1 elemben érvénytelen tartalom van. Element %1 is declared as abstract. - %1 elem elvontkét lett deklarálva. + %1 elem absztraktként lett definiálva. Element %1 is not nillable. - %1 elem nem nullázható. + %1 elem nem nil-feltételű. Attribute %1 contains invalid data: %2 - %1 attribútum érvénytelen adatokat tartalmaz: %2 + %1 attribútum érvénytelen adatot tartalmaz: %2 Element contains content although it is nillable. - Elem nem nullázható elemeket tartalmaz. + Az elem annak ellenére tartalmaz adatot, hogy nil-feltételű. Fixed value constraint not allowed if element is nillable. - Fix érték korlátozó nem engedélyezett, ha az elem nullázható. - - - - Element %1 cannot contain other elements, as it has a fixed content. - %1 nem tartalmazhat másik elemeket, mint ennek is egy fix mérete van. + Az elemre rögzített érték megkötés nem adható, ha az nil-feltételű. - + Specified type %1 is not validly substitutable with element type %2. - %1 meghatározott típus nem helyettesíthető érvényesen %2 elem típussal. + A megadott %1 típus nem helyettesíthető érvényesen %2 elemtípussal. Complex type %1 is not allowed to be abstract. - %1 komplex típus nem engedélyezett, hogy elvont legyen. + %1 komplex típus nem lehet absztrakt. Element %1 contains not allowed attributes. - %1 nem engedélyezett attribútumokat tartalmaz. + %1 elem nem megengedett attribútumokat tartalmaz. Element %1 contains not allowed child element. - %1 nem engedélyezett gyermek attribútumokat tartalmaz. + %1 elem nem megengedett gyermek elemet tartalmaz. Content of element %1 does not match its type definition: %2. - %1 elem tartalma nem egyezik meg a típus definíciójával: %2. + %1 elem tartalma nem egyezik típusának definíciójával: %2. Content of element %1 does not match defined value constraint. - %1 elem tartalma nem egyezik meg a definiált érték korlátozóval. + %1 elem tartalma nem egyezik a definiált érték megkötéssel. Element %1 contains not allowed child content. - %1 nem engedélyezett gyermek tartalmat tartalmaz. + %1 elem nem megengedett gyermek tartalmat tartalmaz. Element %1 contains not allowed text content. - %1 nem engedélyezett szöveg tartalmat tartalmaz. + %1 elemben nem megengedett szövegtartalom található. - + + Element %1 cannot contain other elements, as it has a fixed content. + %1 elem nem tartalmazhat más elemeket, mert tartalma rögzített. + + + Element %1 is missing required attribute %2. - %1 hiányzik, %2 attribútum igényli. + %1 elemből hiányzik a kötelező %2 attribútum. Attribute %1 does not match the attribute wildcard. - %1 attribűtum nem egyezik meg az attribútum helyettesítő jellel. + %1 attribútum nem egyezik az attribútum helyettesítővel. @@ -10469,69 +12978,190 @@ Kérem válasszon egy különböző fájl nevet. Element %1 contains two attributes of type %2. - %1 elem %2 típus két attribútumát tartalmazza. + %1 elem két %2 típusú attribútumot tartalmaz. Attribute %1 contains invalid content. - %1 attribútum érvénytelen tartalmaz tartalmaz. + %1 attribútumban érvénytelen tartalom szerepel. Element %1 contains unknown attribute %2. - %1 elem ismeretlen %2 attribútumokat tartalmaz. + %1 elem a(z) %2 ismeretlen attribútumot tartalmazza. Content of attribute %1 does not match its type definition: %2. - %1 attribútum tartalma nem egyezik a típus definíciójával: %2. + %1 attribútum tartalma nem egyezik a típus definícióban megadottakkal: %2. Content of attribute %1 does not match defined value constraint. - %1 attribútum tartalma nem egyezik meg a definiált érték korlátozóval. + %1 attribútum tartalma nem egyezik a definiált érték megkötéssel. Non-unique value found for constraint %1. - Nem található egyedülálló érték a(z) %1 módosítóra. + %1 megkötés nem egyedi értéket tartalmaz. Key constraint %1 contains absent fields. - %1 kulcs korlátozó hiányzó mezőket tartalmaz. + %1 kulcs megkötés hiányzó mezőket tartalmaz. Key constraint %1 contains references nillable element %2. - %1 kulcs korlátozó hivatkozásokat nem tartalmaz nullázható %2 elemekre. + %1 kulcsfeltétel %2 nil-feltételű elemre vonatkozó hivatkozást tartalmaz. No referenced value found for key reference %1. - Nem található referencia érték a(z) %1 kulcs referenciára. + Nem található hivatkozott érték %1 kulcs referenciához. More than one value found for field %1. - Több mint egy érték található a(z) %1-es mezőre. + %1 mezőhöz egynél több érték létezik. Field %1 has no simple type. - %1 mezőnek nincsen egyszerű típusa. + %1 mezőnek nincs egyszerű típusa. ID value '%1' is not unique. - %1 azonosító érték nem egyedülálló. + '%1' ID érték nem egyedi. '%1' attribute contains invalid QName content: %2. - %1 attribútum érvénytelen QName tartalmaz tartalmaz: %2. + '%1% attribútum érvénytelen QName adatot tartalmaz: %2. + + + + empty + üres + + + + zero or one + nulla vagy egy + + + + exactly one + pontosan egy + + + + one or more + egy vagy több + + + + zero or more + nulla vagy több + + + + Required type is %1, but %2 was found. + Az elvárt típus %1, de a kapott %2. + + + + Promoting %1 to %2 may cause loss of precision. + %1 átalakítása %2 típusra a pontosság elvesztését okozhatja. + + + + The focus is undefined. + A fókusz nincs definiálva. + + + + It's not possible to add attributes after any other kind of node. + Semmilyen más csomópont után nem adható meg attribútum. + + + + An attribute by name %1 has already been created. + %1 nevű attribútum már létre van hozva. + + + + Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. + Csak a Unicode Codepoint Collation támogatott(%1). %2 nem támogatott. + + + + VolumeSlider + + Muted + Elnémítva + + + Volume: %1% + Hangerő: %1% + + + + WebCore::PlatformScrollbar + + Scroll here + Görgetés ide + + + Left edge + Bal szélre + + + Top + Felülre + + + Right edge + Jobb szélre + + + Bottom + Alulra + + + Page left + Egy oldalt balra + + + Page up + Egy oldalt felfelé + + + Page right + Egy oldalt jobbra + + + Page down + Egy oldalt lefelé + + + Scroll left + Görgetés balra + + + Scroll up + Görgetés felfelé + + + Scroll right + Görgetés jobbra + + + Scroll down + Görgetés lefelé diff --git a/translations/qtconfig_hu.ts b/translations/qtconfig_hu.ts index 0eaead0..2b32a9d 100644 --- a/translations/qtconfig_hu.ts +++ b/translations/qtconfig_hu.ts @@ -1,35 +1,35 @@ - + MainWindow - + Desktop Settings (Default) - Asztali beállítások (Alapértelmezett) + Az asztal beállításai (Alapértelmezett) Choose style and palette based on your desktop settings. - Stílus és paletta alapú kiválasztása az asztali beállításokban. + Stílus és paletta választása az asztal beállításai alapján. On The Spot - Azon nyomban + On The Spot - + Auto (default) Automatikus (alapértelmezett) - + Choose audio output automatically. - Audió kimenet automatikus kiválasztása. + Válasszon automatikusan egy hangkimenetet. @@ -40,17 +40,17 @@ Experimental aRts support for GStreamer. - Kísérleti aRts támogatás a GStreamerhez. + Kísérleti aRts támogatás GStreamer-hez. - + Phonon GStreamer backend not available. - Phonon GStreamer backend nem elérhető. + Phonon GStreamer segítő nem érhető el. Choose render method automatically - Render eljárás automatikus kiválasztása + Válasszon automatikusan egy renderelési módot @@ -61,7 +61,8 @@ Use X11 Overlays - X11 borítás használata + CHECKIT + Használja az X11 átlapolást @@ -72,70 +73,70 @@ Use OpenGL if avaiable - OpenGL használata, ha rendelkezésre áll + Használja az OpenGL-t ha elérhető Software - Szoftver + Szoftveres Use simple software rendering - Egyszerű szoftver adás használata + Használjon szoftveres renderelést No changes to be saved. - A változtatások nincsenek elmentve. + Nem történt változás. Saving changes... - Változtatások elmentése... + Változások mentése... Over The Spot - Célon túlmenően + Over The Spot Off The Spot - Elkalandozás + Off The Spot Root - Rendszergazda + Root Select a Directory - Egy könyvtár kiválasztása + Válasszon egy könyvtárat <h3>%1</h3><br/>Version %2<br/><br/>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). - <h3>%1</h3><br/>Verzió %2<br/><br/>Szerzői jog (C) 2010 Nokia vállalat és/vagy leányvállalata(i). + <h3>%1</h3><br/>Verzió %2<br/><br/>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). Qt Configuration - Qt Konfiguráció + Qt beállítás Save Changes - Változtatások elmentése + Változások mentése Save changes to settings? - Változtatások elmentése a beállításokba ? + Menti a beállítások változását? @@ -150,690 +151,660 @@ &Cancel - &Mégse + &Mégsem MainWindowBase - + Qt Configuration - Qt Konfiguráció - + Qt beállítás - + Appearance - Feltűnés + Megjelenés - + GUI Style - GUI Stílus + GUI stílus - + Select GUI &Style: - GUI &Stílus kiválasztása: + Válasszon egy &stílust: - - Build Palette - Építési paletta + + Preview + Előnézet - - &3-D Effects: - &3 D Hatások: + + Select &Palette: + Előnézet &választása: - - Window Back&ground: - Ablak Hát&tér: + + Active Palette + Aktív elemek - - &Tune Palette... - &Hangolási paletta... + + Inactive Palette + Inaktív elemek - - Please use the KDE Control Center to set the palette. - Kérem használja a KDE Vezérlő Központot a paletta beállításához. + + Disabled Palette + Letiltott elemek - - Preview - Előnézet + + Build Palette + - - Select &Palette: - &Paletta kiválasztása: + + &3-D Effects: + - - Active Palette - Aktív paletta + + Window Back&ground: + - - Inactive Palette - Inaktív paletta + + &Tune Palette... + - - Disabled Palette - Tiltott paletta + + Please use the KDE Control Center to set the palette. + - + Fonts - Betűk + - + Default Font - Alapértelmezett betű + - + &Style: - &Stílus: + - + &Point Size: - &Pont méret: + - + F&amily: - Csa&lád: + - + Sample Text - Minta szöveg + - + Font Substitution - Betű helyettesítés + - + S&elect or Enter a Family: - Egy család ki&választása vgy bevitele: + - + Current Substitutions: - Aktuális helyettesítés: + - - + Up - Fel + - - + Down - Le + - - + Remove - Eltávolítás + - + Select s&ubstitute Family: - Család &helyettesítésének kiválasztása: + - - + Add - Hozzáad + - + Interface - Interfész + - + Feel Settings - Érzet beállítások + - - + ms - ms + - + &Double Click Interval: - &Dupla kattintási intervallum: + - + No blinking - Nincs villogás + - + &Cursor Flash Time: - &Kurzor flash idő: + - + lines - sorok + - + Wheel &Scroll Lines: - Kerék sor &görgetés: + - + Resolve symlinks in URLs - URL-ben található szimlinkek megoldása + - + GUI Effects - GUI hatások + - + &Enable - &Engedélyezés + - + Alt+E - Alt+E + - + &Menu Effect: - &Menü hatás: + - + C&omboBox Effect: - C&omboBox hatás: + - + &ToolTip Effect: - &Eszköz tipp hatás: + - + Tool&Box Effect: - Eszköz&doboz hatás: + - - - - + Disable - Tiltás + - - - - + Animate - Animálás + - - + Fade - Elhalkulás + - + Global Strut - Globális struktúra + - + Minimum &Width: - Minimum &szélesség: + - + Minimum Hei&ght: - Minimum ma&gasség: + - - + pixels - pixelek + - + Enhanced support for languages written right-to-left - Kiterjesztett támogatás a jobbról balra írt nyelvek számára + - + XIM Input Style: XIM beviteli stílus: - + On The Spot - Azon nyomban + On The Spot - + Over The Spot - Célon túlmenően + Over The Spot - + Off The Spot - Elkalandozás + Off The Spot - + Root - Rendszergazda + - + Default Input Method: - Alapértelmezett beviteli eljárás: + - + Printer - Nyomtató + - + Enable Font embedding - Betű beágyazás engedélyezése + - + Font Paths - Betű útvonalak + - + Browse... - Böngészés... + - + Press the <b>Browse</b> button or enter a directory and press Enter to add them to the list. - Nyomja meg a <b>Böngészés</b> gombot vagy lépjen be egy könyvtárba és nyomja meg az Enter gombot hogy hozzáadja őket a listához. + - + Phonon - Phonon + - + About Phonon - Phonon-ról + - - + Current Version: - Aktuális verzió: + - - + Not available - Nem elérhető + - - + Website: - Weblap: + - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://phonon.kde.org"><span style=" text-decoration: underline; color:#0000ff;">http://phonon.kde.org</span></a></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://phonon.kde.org"><span style=" text-decoration: underline; color:#0000ff;">http://phonon.kde.org</span></a></p></body></html> + - + About GStreamer - GStreamer-ről + - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://gstreamer.freedesktop.org/"><span style=" text-decoration: underline; color:#0000ff;">http://gstreamer.freedesktop.org/</span></a></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://gstreamer.freedesktop.org/"><span style=" text-decoration: underline; color:#0000ff;">http://gstreamer.freedesktop.org/</span></a></p></body></html> + - + GStreamer backend settings - GStreamer backend beállítások + - + Preferred audio sink: - Preferrált audió tartály: + - + Preferred render method: - Preferrált render eljárás: + - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Note: changes to these settings may prevent applications from starting up correctly.</span></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Megjegyzés: Ezekben a beállításokban történő változtatások megakadályozhatják az alkalmazásokat a megfelelő betöltéstől.</span></p></body></html> + - + &File &Fájl - + &Help &Súgó - + &Save - &Mentés + M&entés - + Save Mentés - + Ctrl+S - Ctrl+S + - + E&xit &Kilépés - + Exit Kilépés - + &About &Névjegy - + About Névjegy - + About &Qt - &Qt-ról + &Qt névjegy - + About Qt - Qt-ról + A Qt névjegye PaletteEditorAdvancedBase - + Tune Palette - Hangoló paletta + - + <b>Edit Palette</b><p>Change the palette of the current widget or form.</p><p>Use a generated palette or select colors for each color group and each color role.</p><p>The palette can be tested with different widget layouts in the preview section.</p> - <b>Paletta szerkesztése</b><p>Az aktuális widget vagy űrlap palettájának megváltoztatása</p><p>Egy generált paletta használata vagy szín kiválasztás mindegyik színcsoport és szín szabályra.</p><p>A paletta tesztelhető különböző widget szerkezetekkel az előnézeti szegmensben.</p> + - + Select &Palette: - &Paletta kiválasztása: + - + Active Palette - Aktív paletta + - + Inactive Palette - Inaktív paletta + - + Disabled Palette - Paletta tiltása + - + Auto - Auto + - + Build inactive palette from active - Inaktív paletta építése aktívból + - + Build disabled palette from active - Tiltott paletta építése aktívból + - + Central color &roles - Központi szín &szabályok + - + Choose central color role - Központi szín szabályok kiválasztása + - + <b>Select a color role.</b><p>Available central roles are: <ul> <li>Window - general background color.</li> <li>WindowText - general foreground color. </li> <li>Base - used as background color for e.g. text entry widgets, usually white or another light color. </li> <li>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. </li> <li>Button - general button background color, where buttons need a background different from Window, as in the Macintosh style. </li> <li>ButtonText - a foreground color used with the Button color. </li> <li>Highlight - a color to indicate a selected or highlighted item. </li> <li>HighlightedText - a text color that contrasts to Highlight. </li> <li>BrightText - a text color that is very different from WindowText and contrasts well with e.g. black. </li> </ul> </p> - <b>Egy szín szabály kiválasztása.</b><p>Az elérhetp központi szabályok: <ul> <li>Ablak - általános háttér szín.</li> <li>AblakSzöveg - általános előtér szín. </li> <li>Alap - háttérszínként használva példul szöveg beviteli widgetekre, rendszerint fehér vagy más világos színekre. </li> <li>Szöveg - az előtér szín van haszálva a bázissal. Rendszerint ez ugyanaz, mint az AblakSzöveg, amilyen esetekben egy jó ellentétet kell biztosítania mindkettőre Ablakkal és Bázissal. </li> <li>Gomb - általános gomb háttér szín, ahol a gomboknak szüksége van egy háttére ami különbözik az ablakétól, mint a Macintosh stílusban. </li> <li>GombSzöveg - egy előtér szín van használva gomb színnel. </li> <li>Kihangsúlyozás - egy szín a kiválasztott vagy kihangsúlyozott elem jelölésére. </li> <li>KihangsúlyozottSzöveg - egy szöveg szín, ami ellentétes a kihangsúlyozással. </li> <li>VilágosSzöveg - egy szöveg szín, ami nagyon különböző az AblakSzövegtől és a kontrasztoktól jól van példul feketével. </li> </ul> </p> + - + Window - Ablak + - + WindowText - AblakSzöveg + - + Button - Gomb + - + Base - Bázis + - + Text Szöveg - + BrightText - VilágosSzöveg + - + ButtonText - GombSzöveg + - + Highlight - Kihangsúlyozás + - + HighlightedText - KihangsúlyozottSzöveg + - + &Select Color: - Szín &kiválasztása: + - - + Choose a color - Egy szín kiválasztása + - + Choose a color for the selected central color role. - Egy szín kiválasztása a kiválasztott központi szín szabályokra. + - + 3-D shadow &effects - 3 D árnyék &hatások + - + Build &from button color - Építés gomb szín&ből + - + Generate shadings - Árnyékolások generálása + - + Check to let 3D-effect colors be calculated from button-color. - + - + Choose 3D-effect color role - 3D hatás szín szabályok kiválasztása + - + <b>Select a color role.</b><p>Available effect roles are: <ul> <li>Light - lighter than Button color. </li> <li>Midlight - between Button and Light. </li> <li>Mid - between Button and Dark. </li> <li>Dark - darker than Button. </li> <li>Shadow - a very dark color. </li> </ul> - + - + Light Világos - + Midlight - Központi fény + Sötétebb - + Mid - Középső + Közepes - + Dark Sötét - + Shadow Árnyék - + Select Co&lor: &Szín kiválasztása: - + Choose a color for the selected effect color role. - Egy szín kiválasztása a kiválaszott hatás szín szabályra. + - + OK OK - + Close dialog and apply all changes. - Párbeszéd ablak bezárása és az összes változtatás alkalmazása. + - + Cancel - Mégse + Mégsem - + Close dialog and discard all changes. - Párbeszédablak bezárása és az összes változtatás eldobása. + @@ -841,68 +812,68 @@ p, li { white-space: pre-wrap; } Desktop settings will only take effect after an application restart. - Az asztal beállítások kizárólag az alkalmazás újraindítása utan lépnek érvénybe. + Az asztal új beállításai kizárólag az alkalmazás újraindítása utan lépnek érvénybe. PreviewWidgetBase - + Preview Window - Előnézet ablak + Előnézeti ablak - + ButtonGroup - GombCsoport + - + RadioButton1 - RádioGomb1 + - + RadioButton2 - RádioGomb2 + - + RadioButton3 - RádioGomb3 + - + ButtonGroup2 - GombCsoport2 + - + CheckBox1 - Jelölőnégyzet1 + - + CheckBox2 - Jelölőnégyzet2 + - + LineEdit - SorSzerkesztés + - + ComboBox - ComboBox + - + PushButton - NyomóGomb + - + <p> <a href="http://qt.nokia.com">http://qt.nokia.com</a> </p> diff --git a/translations/qvfb_hu.ts b/translations/qvfb_hu.ts index bb8c931..9e49d26 100644 --- a/translations/qvfb_hu.ts +++ b/translations/qvfb_hu.ts @@ -1,13 +1,13 @@ - + AnimationSaveWidget - + Record - Rekord + Felvétel @@ -22,24 +22,24 @@ Save in MPEG format (requires netpbm package installed) - MPEG formátumba mentés (netpbm csomag telepítése szükséges) + Mentés MPEG formátumban (a netpbm csomagnak telepítve kell lenni) Click record to begin recording. - Kattintson az írásra az írás megkezdéséhez. + Kattintson ide a felvétel indításához. Finished saving. - Befejezett mentés. + Mentés befejezve. Paused. Click record to resume, or save if done. - Szüneteltetve. Kattintson az írásra a folytatáshoz, vagy mentse el, ha kész. + Leállítva. Kattintson a felvétel gombra a folytatáshoz, vagy a mentéshez, ha végzett. @@ -65,204 +65,205 @@ Save canceled. - Megnés visszavonva. + Mentés megszakítva. Save failed! - Mentési hiba! + A mentés sikertelen! Config - + Configure - Konfigurálás + Beállítás - + Size Méret - + 176x220 "SmartPhone" - 176x220 "ÜgyesTelefon" + 176x220 "SmartPhone" - + 240x320 "PDA" 240x320 "PDA" - + 320x240 "TV" / "QVGA" 320x240 "TV" / "QVGA" - + 640x480 "VGA" 640x480 "VGA" - + 800x600 800x600 - + 1024x768 1024x768 - + Custom - Szokásos + Egyedi - + Depth - Mélység + Színmélység - + 1 bit monochrome - 1 bites egyszínű + 1 bites monokróm - + 2 bit grayscale - 2 bites szürke skálázás + 2 bites szürkeárnyalatos - + 4 bit grayscale - 4 bites szürke slálázás + 4 bites szürkeárnyalatos - + 8 bit 8 bites - + 12 (16) bit 12 (16) bites - + 15 bit - 15 bites + - + 16 bit 16 bites - + 18 bit - 18 bites + - + 24 bit - 24 bites + - + 32 bit - 32 bites + - + 32 bit ARGB - 32 bites ARGB + 32 bit ARGB-vel - + Swap red and blue channels - Piros és kék csatornák felcserélése + Cserélje fel a piros és kék csatornát - + BGR format BGR formátum - + Skin - Szkin + Téma - + None - Semmi + Nincs - + Emulate touch screen (no mouse move) - указателя? - Érintő képernyő emulálása (nincs egér mozgatás) + Érintőképernyő szimulálása (nincs egérmozgás) - + Emulate LCD screen (Only with fixed zoom of 3.0 times magnification) - LCD kijelző emulálása (Kizárólag egy fix 3-szoros nagyítással) + LCD képernyő emulálása (Kizárólag egy fix 3-szoros nagyítással) - + <p>Note that any applications using the virtual framebuffer will be terminated if you change the Size or Depth <i>above</i>. You may freely modify the Gamma <i>below</i>. - <p>Vegye figyelembe azt, hogy bármely alkalmazás, amely virtuális framebuffer-t használ, be lesz fejezve, ha megváltoztatja a méretet vagy a mélységet <i>felül</i>. Szabadon módosíthatja a Gamma-t <i>alul</i>. + <p>Bármely, a virtuális framebuffert használó alkalmazás leáll, ha <i>fent</i>megváltoztatja a méretet vagy a színmélységet. A Gamma értéket szabadon módosíthatja. - + Gamma Gamma - + Blue Kék - - - - + 1.0 - 1.0 + - + Green Zöld - + All Mind - + Red Piros - + Set all to 1.0 - Az összes 1.0-ra állítása + Mindegyik legyen 1.0 - + &OK &OK - + &Cancel - &Mégse + &Mégsem + + + + 800x480 + 800x480 @@ -270,75 +271,75 @@ The image file '%1' could not be loaded. - Nem sikerült betölteni a(z) '%1' kép fájlt. + A képfájl (%1) nem tölthető be. The skin directory '%1' does not contain a configuration file. - A(z) '%1' skin könyvtár nem tartalmaz egyetlen konfigurációs fájlt sem. + A téma könyvtár (%1) nem tartalmaz konfigurációs fájlt. The skin configuration file '%1' could not be opened. - Nem lehetett megnyitni a(z) '%1' skin konfigurációs fájlt. + A téma konfigurációs fájlja (%1) nem nyitható meg. The skin configuration file '%1' could not be read: %2 - Nem lehetett olvasni a(z) '%1' skin konfigurációs fájlt: %2 + A téma kofnigurációs fájlja (%1) nem olvasható: %2 Syntax error: %1 - Szintakszis hiba: %1 + Szintaxis hiba : %1 The skin "up" image file '%1' does not exist. - A(z) '%1 'fel' skinezett kép fájl nem létezik. + A témából hiányzik a "felfelé" kép (%1). The skin "down" image file '%1' does not exist. - A(z) '%1 'le' skinezett kép fájl nem létezik. + A témából hiányzik a "lefelé" kép (%1). The skin "closed" image file '%1' does not exist. - A(z) '%1' skin "bezárt" kép fájl nem létezik. + A témából hiányzik a "bezárva" kép (%1). The skin cursor image file '%1' does not exist. - A(z) '%1' skin kurzor kép fájl nem létezik. + A témából hiányzik a kurzor (%1). Syntax error in area definition: %1 - Szintaszis hiba a terület definícióban: %1 + Szintaxis hiba a területdefiníciónál: %1 Mismatch in number of areas, expected %1, got %2. - Nem megfelelő terület szám, %1 várt, %2 kapott. + A területek száma nem megfelelő, csak %1 van %2 helyett. QVFb - + Browse... - Böngészés... + Tallózás... - + Load Custom Skin... - Szokásos skin betöltése... + Egyedi téma betöltése... All QVFB Skins (*.skin) - Minden QVFB skin (*.skin) + Minden QVFB téma (*.skin) -- cgit v0.12 From aacba815ffb3c59ea50a41e3cf4931024a94ee13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Garami=20G=C3=A1bor?= Date: Fri, 4 Jun 2010 10:48:13 +0200 Subject: Synchronizing to latest tree Merge-request: 659 Reviewed-by: Andreas Aardal Hanssen --- tools/linguist/phrasebooks/hungarian.qph | 8 + translations/assistant_hu.ts | 46 +- translations/designer_hu.ts | 95 ++- translations/linguist_hu.ts | 25 +- translations/qt_help_hu.ts | 34 +- translations/qt_hu.ts | 1188 ++++++++++++++++++++++-------- translations/qtconfig_hu.ts | 148 ++-- 7 files changed, 1098 insertions(+), 446 deletions(-) diff --git a/tools/linguist/phrasebooks/hungarian.qph b/tools/linguist/phrasebooks/hungarian.qph index 0bf3fbe..0e1dd12 100644 --- a/tools/linguist/phrasebooks/hungarian.qph +++ b/tools/linguist/phrasebooks/hungarian.qph @@ -741,4 +741,12 @@ Enabled Engedélyezve + + Up + Fel + + + Down + Le + diff --git a/translations/assistant_hu.ts b/translations/assistant_hu.ts index 1081435..50e30d7 100644 --- a/translations/assistant_hu.ts +++ b/translations/assistant_hu.ts @@ -165,7 +165,7 @@ Oka: Könyvjelzők kezelése... - + Add Bookmark... Könyvjelző hozzáadása... @@ -251,7 +251,7 @@ Oka: CentralWidget - + Add new page Új fül hozzáadása @@ -272,7 +272,7 @@ Oka: ismeretlen - + Add New Page Új fül hozzáadása @@ -363,7 +363,7 @@ Oka: ContentWindow - + Open Link Link megnyitása @@ -448,7 +448,7 @@ Oka: OK - + <title>about:blank</title> @@ -598,19 +598,19 @@ Oka: MainWindow - + Index Index - - + + Contents Tartalom - - + + Bookmarks Könyvjelzők @@ -620,8 +620,8 @@ Oka: Keresés - - + + Qt Assistant Qt Asszisztens @@ -631,7 +631,7 @@ Oka: Szűrő kikapcsolása - + Page Set&up... &Oldalbeállítás... @@ -646,17 +646,17 @@ Oka: &Nyomtatás... - + New &Tab Új &fül - + &Close Tab Fül be&zárása - + &Quit &Kilépés @@ -776,7 +776,7 @@ Oka: - + Could not register file '%1': %2 A(z) '%1' fájl regisztrálása sikertelen: %2 @@ -785,12 +785,12 @@ Oka: Könyvjelző hozzáadása... - + About... Névjegy... - + Navigation Toolbar Navigációs eszköztár @@ -835,12 +835,12 @@ Oka: Keresési index frissítése - + Looking for Qt Documentation... Qt dokumentáció keresése... - + &Window &Ablak @@ -860,12 +860,12 @@ Oka: Nagyítás - + &File &Fájl - + &Edit S&zerkesztés diff --git a/translations/designer_hu.ts b/translations/designer_hu.ts index bb32725..6375cde 100644 --- a/translations/designer_hu.ts +++ b/translations/designer_hu.ts @@ -255,7 +255,7 @@ Keresztátlós - + Style Stílus @@ -734,7 +734,7 @@ Designer - + Qt Designer @@ -870,7 +870,7 @@ Style - + Stílus @@ -1194,7 +1194,7 @@ MainWindowBase - + Main Not currently used (main tool bar) @@ -1270,12 +1270,12 @@ A temporary form file could not be created in %1. - + Az ideiglenes űrlap fájl nem hozható létre a(z) %1 helyen. The temporary form file %1 could not be written. - + A(z) %1 ideiglenes űrlap fájl nem írható. @@ -1350,7 +1350,7 @@ Style - + Stílus @@ -1571,7 +1571,7 @@ Script: %3 QDesignerActions - + Saved %1. @@ -1618,12 +1618,12 @@ Do you want to replace it? - + &Close - + Save &Image... @@ -1663,7 +1663,7 @@ Do you want to replace it? - + ALT+CTRL+S @@ -1673,7 +1673,7 @@ Do you want to replace it? - + CTRL+R @@ -2071,7 +2071,7 @@ Would you like to retry? QDesignerPropertySheet - + Dynamic Properties @@ -2084,13 +2084,13 @@ Would you like to retry? - + The container extension of the widget '%1' (%2) returned a widget not managed by Designer '%3' (%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. - + Unexpected element <%1> Parsing clipboard contents @@ -2207,7 +2207,7 @@ Container pages should only be added by specifying them in XML returned by the d - + Save Forms? @@ -2520,7 +2520,7 @@ Container pages should only be added by specifying them in XML returned by the d Cross - + Kereszt @@ -3475,7 +3475,7 @@ to QtResourceView - + Size: %1 x %2 %3 @@ -3874,7 +3874,7 @@ Do you want overwrite the template? Style - + Stílus @@ -3883,6 +3883,26 @@ Do you want overwrite the template? + File + Fájl + + + + Edit + Szerkesztés + + + + Tools + + + + + Form + + + + Toolbars Eszköztárak @@ -4442,12 +4462,12 @@ Do you want overwrite the template? Horizontal - + Vízszintes Vertical - + Függőleges @@ -4671,8 +4691,13 @@ Do you want overwrite the template? qdesigner_internal::FilterWidget - - <Filter> + + Filter + + + + + Clear text @@ -4798,9 +4823,9 @@ Do you want overwrite the template? qdesigner_internal::FormWindowBase - + Delete '%1' - + '%1' törlése @@ -4988,7 +5013,7 @@ Do you want overwrite the template? - + Break Layout @@ -5280,7 +5305,7 @@ Do you want overwrite the template? Edit Items... - + Elem szerkesztése... @@ -5542,7 +5567,7 @@ Please select another name. &Find in Text... - + &Keresés a szövegben... @@ -5780,7 +5805,7 @@ Please select another name. %1 - Error - + %1 - Hiba @@ -5944,7 +5969,7 @@ ate the goose who was loose. qdesigner_internal::PropertyEditor - + Add Dynamic Property... @@ -5974,7 +5999,7 @@ ate the goose who was loose. - + String... @@ -5994,7 +6019,7 @@ ate the goose who was loose. - + Object: %1 Class: %2 @@ -6033,7 +6058,7 @@ Class: %2 %1 - Error - + %1 - Hiba @@ -6614,7 +6639,7 @@ Class: %2 Edit Items... - + Elem szerkesztése... @@ -6845,7 +6870,7 @@ Class: %2 Edit Items... - + Elem szerkesztése... diff --git a/translations/linguist_hu.ts b/translations/linguist_hu.ts index cb1bfa6..44c1e4a 100644 --- a/translations/linguist_hu.ts +++ b/translations/linguist_hu.ts @@ -461,7 +461,7 @@ Az egyes számú általános forma lesz alkalmazva. - + &Save Menté&s @@ -803,7 +803,7 @@ Az egyes számú általános forma lesz alkalmazva. Az alkalmazások számára használható Qt üzenetfájl létrehozása a jelenlegi fájlból. A fájlnév a jelenlegi ts fájl nevéből lesz megállapítva. - + This is the application's main window. @@ -916,12 +916,12 @@ Kihagyja ennek a fájlnak a betöltését? - + Release Kiadás - + Qt message files for released applications (*.qm) All files (*) Qt üzenetfájlok a kiadott alkalmazásokhoz (*.qm) @@ -988,7 +988,7 @@ Minden fájl (*) - + @@ -997,7 +997,7 @@ Minden fájl (*) Qt Linguist - + Cannot find the string '%1'. A szöveg nem található: '%1'. @@ -1133,7 +1133,7 @@ Minden fájl (*) Nincs több lefordítandó kifejezés. - + &Window &Ablak @@ -1856,7 +1856,7 @@ Sor: %2 Lefordított Qt fordítások - + Translation files (%1);; Fordítási fájlok (%1);; @@ -1885,11 +1885,16 @@ Sor: %2 Java forrásfájlok - + GNU Gettext localization files GNU Gettext lokalizációs fájlok + + GNU Gettext localization template files + GNU Gettext lokalizációs sablonfájlok + + Qt Script source files Qt szkript fájlok @@ -1917,7 +1922,7 @@ Sor: %2 Qt Jambi űrlapfájlok - + XLIFF localization files XLIFF lokalizációs fájlok diff --git a/translations/qt_help_hu.ts b/translations/qt_help_hu.ts index 3e04223..4107a2e 100644 --- a/translations/qt_help_hu.ts +++ b/translations/qt_help_hu.ts @@ -45,7 +45,7 @@ - + Cannot open collection file: %1 Nem lehet megnyitni a gyűjtemény fájlt: %1 @@ -60,7 +60,7 @@ A(z) '%1' gyűjtemény fájl már létezik! - + Unknown filter '%1'! Ismeretlen szűrő: '%1'! @@ -80,12 +80,12 @@ Nem lehet optimalizálásra megnyitni a(z) '%1' adatbázist! - + Cannot create directory: %1 A könyvtár létrehozása sikertelen: %1 - + Cannot copy collection file: %1 A gyűjtemény fájl másolása sikertelen: %1 @@ -167,7 +167,7 @@ A(z) %1 adatbázis fájl megnyitása sikertelen! - + Cannot register namespace %1! Nem lehet regisztrálni a(z) %1 névteret! @@ -275,7 +275,7 @@ QHelpProject - + Unknown token. Ismeretlen token. @@ -290,17 +290,25 @@ Hiba a(z) %1. sorban: %2 - A virtual folder must not contain a '/' character! - A virtuális mappa neve nem tartalmazhat '/' karaktert! + A virtuális mappa neve nem tartalmazhat '/' karaktert! - A namespace must not contain a '/' character! - A névtér neve nem tartalmazhat '/' karaktert! + A névtér neve nem tartalmazhat '/' karaktert! + + + + Virtual folder has invalid syntax. + + + + + Namespace has invalid syntax. + - + Missing namespace in QtHelpProject. Hiányzó névtér a QtHelpProject-ben. @@ -315,7 +323,7 @@ Hiányzó attirbútum a kulcsszóban a(z) %1 sorban. - + The input file %1 could not be opened! A(z) %1 bemeneti fájl megnyitása sikertelen! @@ -379,7 +387,7 @@ %1 - %2 of %n Hits - %1 - %2. a(z) %3 találatból + %1 - %2. a(z) %n találatból diff --git a/translations/qt_hu.ts b/translations/qt_hu.ts index 7400bd5..9ee3b32 100644 --- a/translations/qt_hu.ts +++ b/translations/qt_hu.ts @@ -15,7 +15,7 @@ CloseButton - + Close Tab Fül bezárása @@ -23,7 +23,7 @@ FakeReply - + Fake error ! Teszt hiba ! @@ -34,6 +34,44 @@ + MAC_APPLICATION_MENU + + + Services + Szolgáltatások + + + + Hide %1 + %1 elrejtése + + + + Hide Others + Minden más elrejtése + + + + Show All + Mindet mutat + + + + Preferences... + Beállítások... + + + + Quit %1 + Kilépés: %1 + + + + About %1 + %1 névjegye + + + PPDOptionsModel Name @@ -80,25 +118,32 @@ Phonon::AudioOutput - + + <html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html> <html>A hangeszköz <b>%1</b> most nem használható.<br/>Visszaállítás erre: <b>%2</b>.</html> - + <html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html> <html>Visszaállás a(z)<b>%1</b><br/>hangeszközre, mert az újra elérhető, és jobban preferált.</html> + Revert back to device '%1' Visszaállás a(z) '%1' eszközre + + + <html>Switching to the audio playback device <b>%1</b><br/>which has higher preference or is specifically configured for this stream.</html> + <html>Visszaállás a(z)<b>%1</b><br/>hangeszközre, mert az jobban preferált, vagy kimondottan ehhez a folyamhoz van konfigurálva.</html> + Phonon::Gstreamer::Backend - + Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. Some video features have been disabled. Figyelmeztetés: Úgy tűnik, a gstreamer0.10-plugins-good nincs telepítve. @@ -125,7 +170,7 @@ Kérem, ellenőrizze, hogy a libgstreamer-plugins-base telepített-e, és a gstreamer beállításai megfelelők-e. - + Cannot start playback. Check your GStreamer installation and make sure you @@ -135,29 +180,41 @@ have libgstreamer-plugins-base installed. Ellenőrizze le a GStreamer-t és győzödjön meg róla, hogy telepłtette-e a libgstreamer-plugins-base csomagot. - + + Missing codec helper script assistant. + CHECKIT + Hiányzó kodek-súgó script. + + + + Plugin codec installation failed for codec: %0 + CHECKIT + Plugin kodek telepítése sikertelen ehhez a kodekhez: %0 + + + A required codec is missing. You need to install the following codec(s) to play this content: %0 Hiányzik egy kodek a lejátszáshoz. Kérem telepítse a következő kodek(eket): %0 - - - - + - - + + + + + Could not open media source. A médiaforrás megnyitása sikertelen. - + Invalid source type. Érvénytelen forrás. - + Could not locate media source. A médiaforrás nem található. @@ -185,7 +242,7 @@ Ellenőrizze le a GStreamer-t és győzödjön meg róla, hogy telepłtette-e a Audio kimenet - + No error Nincs hiba @@ -360,12 +417,40 @@ Ellenőrizze le a GStreamer-t és győzödjön meg róla, hogy telepłtette-e a A hangerő beállítása sikertelen - + + Loading clip failed + A klip betöltése sikertelen + + + Playback complete A lejátszás befejeződött + Phonon::MMF::AbstractVideoPlayer + + + Pause failed + A megállítás sikertelen + + + + Seek failed + A tekerés sikertelen + + + + Getting position failed + A pozíció lekérése sikertelen + + + + Opening clip failed + A klip megnyitása sikertelen + + + Phonon::MMF::AudioEqualizer @@ -381,9 +466,20 @@ Ellenőrizze le a GStreamer-t és győzödjön meg róla, hogy telepłtette-e a A pozíció megállapítása sikertelen - Opening clip failed - A klip megnyitása sikertelen + A klip megnyitása sikertelen + + + + Phonon::MMF::DsaVideoPlayer + + + + + + + Video display error + Videó megjelenítési hiba @@ -460,7 +556,7 @@ Ellenőrizze le a GStreamer-t és győzödjön meg róla, hogy telepłtette-e a Phonon::MMF::MediaObject - + Error opening source: type not supported Hiba a forrás megnyitásakor: a típus nem támogatott @@ -479,40 +575,39 @@ Ellenőrizze le a GStreamer-t és győzödjön meg róla, hogy telepłtette-e a + Phonon::MMF::SurfaceVideoPlayer + + + + Video display error + Videó megjelenítési hiba + + + Phonon::MMF::VideoPlayer - Pause failed - A megállítás sikertelen + A megállítás sikertelen - Seek failed - A tekerés sikertelen + A tekerés sikertelen - Getting position failed - A pozíció megállapłtása sikertelen + A pozíció megállapłtása sikertelen - Opening clip failed - A klip megnyitása sikertelen + A klip megnyitása sikertelen - Buffering clip failed - A klip pufferelése sikertelen + A klip pufferelése sikertelen - - - - - Video display error - Videó megjelenítési hiba + Videó megjelenítési hiba @@ -1223,14 +1318,14 @@ erre: QAbstractSocket - + - + Operation on socket is not supported A művelet nem támogatott socketeken - + @@ -1250,8 +1345,8 @@ erre: A kapcsolat várakozási ideje lejárt - - + + Socket operation timed out Socket művelet időtúllépés @@ -1269,7 +1364,7 @@ erre: QAbstractSpinBox - + &Step up Lépés &felfelé @@ -1349,7 +1444,7 @@ erre: Hiba: inkompatíbilis Qt függvénykönyvtár - + QT_LAYOUT_DIRECTION Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout. LTR @@ -1404,7 +1499,7 @@ erre: QColorDialog - + Hu&e: Á&rnyalat: @@ -1478,7 +1573,7 @@ erre: QComboBox - + Open Megnyitás @@ -1637,7 +1732,7 @@ erre: QDeclarativeAbstractAnimation - + Cannot animate non-existent property "%1" Nem lehet animálni a hiányzó "%1" tulajdonság nélkül @@ -1646,23 +1741,36 @@ erre: Cannot animate read-only property "%1" Nem lehet animálni a csak olvasható "%1" tulajdonsággal + + + Animation is an abstract class + Az Animation absztrakt osztály + + + + QDeclarativeAnchorAnimation + + + Cannot set a duration of < 0 + + QDeclarativeAnchors - + Possible anchor loop detected on fill. Lehetséges horgony hurok észlelhető egy festésen. - + Possible anchor loop detected on centerIn. Lehetséges horgony hurok észlelhető a középvonalon. - + - + Cannot anchor to an item that isn't a parent or sibling. Nem lehet egy olyan elemhez horgonyozni, mely nem szülő vagy gyermek. @@ -1716,9 +1824,17 @@ erre: + QDeclarativeAnimatedImage + + + Qt was built without support for QMovie + + + + QDeclarativeBehavior - + Cannot change the animation assigned to a Behavior. Nem lehet egy Behavior elemhez rendelt animációt módosítani. @@ -1726,23 +1842,33 @@ erre: QDeclarativeBinding - + Binding loop detected for property "%1" Kötési hurok észlelhető a(z) "%1" tulajdonságon + QDeclarativeCompiledBindings + + + Binding loop detected for property "%1" + Kötési hurok észlelhető a(z) "%1" tulajdonságon + + + QDeclarativeCompiler - - - - + + + + + + Invalid property assignment: "%1" is a read-only property Érvénytelen tulajdonság-hozzárendelés: "%1" egy csak olvasható tulajdonság - + Invalid property assignment: unknown enumeration Érvénytelen tulajdonság-hozzárendelés: ismeretlen felsorolás @@ -1757,32 +1883,32 @@ erre: Érvénytelen tulajdonság-hozzárendelés: URL szükséges - + Invalid property assignment: unsigned int expected Érvénytelen tulajdonság-hozzárendelés: előjel nélküli egész érték szükséges - + Invalid property assignment: int expected Érvénytelen tulajdonság-hozzárendelés: egész érték szükséges - + Invalid property assignment: float expected Érvénytelen tulajdonság-hozzárendelés: lebegőpontos érték szükséges - + Invalid property assignment: double expected Érvénytelen tulajdonság-hozzárendelés: duplapontos érték szükséges - + Invalid property assignment: color expected Érvénytelen tulajdonság-hozzárendelés: szín szükséges - + Invalid property assignment: date expected Érvénytelen tulajdonság-hozzárendelés: dátum szükséges @@ -1797,7 +1923,7 @@ erre: Érvénytelen tulajdonság-hozzárendelés: datetime érték szükséges - + Invalid property assignment: point expected Érvénytelen tulajdonság-hozzárendelés: pont szükséges @@ -1827,68 +1953,82 @@ erre: Érvénytelen tulajdonság-hozzárendelés: nem támogatott típus: "%1" - + + Element is not creatable. + + + + Component elements may not contain properties other than id A Component elemek nem tartalmazhatnak az id-n kívűl más tulajdonságot - Component elements may not contain script blocks - A Component elemek nem tartalmazhatnak parancsblokkokat + A Component elemek nem tartalmazhatnak parancsblokkokat - + Invalid component id specification Érvénytelen komponens azonosító megadás - + id is not unique Az azonosító nem egyedi - + Invalid component body specification Érvénytelen komponens-törzs megadás + + Component objects cannot declare new properties. + + + + + Component objects cannot declare new signals. + + + + + Component objects cannot declare new functions. + + + Cannot create empty component specification Nem lehet üres komponenst megadni - Invalid Script block. Specify either the source property or inline script - Érvénytelen Script blokk. Adja meg a source tulajdonságot vagy ágyazzon be parancsokat + Érvénytelen Script blokk. Adja meg a source tulajdonságot vagy ágyazzon be parancsokat - Invalid Script source value - Érvénytelen Script source érték + Érvénytelen Script source érték - Properties cannot be set on Script block - A tulajdonságok nem módosíthatók Script blokkból + A tulajdonságok nem módosíthatók Script blokkból - Invalid Script block - Érvénytelen Script blokk + Érvénytelen Script blokk - Incorrectly specified signal - Hibásan megadott jelzés (signal) + Hibásan megadott jelzés (signal) - + Empty signal assignment Üres jelzés (signal) hozzárendelés - + Empty property assignment Üres tulajdonság hozzárendelés @@ -1899,29 +2039,29 @@ erre: - + Non-existent attached object Nem létező csatolt objektum - - + + Invalid attached object assignment Érvénytelen objektumcsatolás - + Cannot assign to non-existent default property Nem lehet hozzárendelni egy nem létező alapértelmezett tulajdonságot - + Cannot assign to non-existent property "%1" Nem lehet hozzárendelni a nem létező "%1" tulajdonságot - + Invalid use of namespace Érvénytelen névtérhasználat @@ -1931,43 +2071,60 @@ erre: Ez nem egy csatolt tulajdonságnév - + Invalid use of id property Az id tulajdonság érvénytelen használata - "%1" is not a valid object id - "%1" nem érvényes objektumazonosító + "%1" nem érvényes objektumazonosító - id conflicts with type name - Az id ütközik a típus nevével + Az id ütközik a típus nevével - id conflicts with namespace prefix - Az id ütközik a névtér előtaggal + Az id ütközik a névtér előtaggal - Invalid value in grouped property - Érvénytelen érték a csoportos tulajdonságon + Érvénytelen érték a csoportos tulajdonságon - - + + Incorrectly specified signal assignment + + + + + Cannot assign a value to a signal (expecting a script to be run) + + + + + + Property has already been assigned a value + + + + + Invalid grouped property access Érvénytelen csoportos tulajdonság-hozzáférés + + Cannot assign a value directly to a grouped property + + + Invalid property use Tulajdonság érvénytelen használata - + Property assignment expected Tulajdonság hozzárendelés szükséges @@ -1977,7 +2134,7 @@ erre: Egyetlen tulajdonság hozzárendelése szükséges - + Unexpected object assignment Váratlan objektum-hozzárendelés @@ -2007,13 +2164,18 @@ erre: Érvénytelen tulajdonság-hozzárendelés: script szükséges - + Cannot assign object to property CHECKIT Nem lehet objektumot rendelni tulajdonsághoz - + + "%1" cannot operate on "%2" + + + + Duplicate default property CHECKIT Dupla alapértelmezett tulajdonság @@ -2025,34 +2187,79 @@ erre: Dupla tulajdonságnév - + + Property names cannot begin with an upper case letter + + + + Duplicate signal name CHECKIT Dupla jelzés név + + Signal names cannot begin with an upper case letter + + + Duplicate method name CHECKIT Dupla metódus név - + + Method names cannot begin with an upper case letter + + + + + Property value set multiple times + + + + Invalid property nesting Érvénytelen tulajdonság illesztés - + Cannot override FINAL property Nem lehet FINAL tulajdonságot felülbírálni - + Invalid property type Érvénytelen tulajdonság típus - + + Invalid empty ID + + + + + IDs cannot start with an uppercase letter + + + + + IDs must start with a letter or underscore + + + + + IDs must contain only letters, numbers, and underscores + + + + + ID illegally masks global JavaScript property + + + + No property alias location @@ -2075,30 +2282,41 @@ erre: + QDeclarativeComponent + + + Invalid empty URL + + + + QDeclarativeCompositeTypeManager - - + + Resource %1 unavailable A(z) %1 erőforrás nem érhető el - + + %1 %2 + %1% {1 %2?} + + Import %1 unavailable - A(z) %1 import nem érhető el + A(z) %1 import nem érhető el - + Namespace %1 cannot be used as a type A(z) %1 névtér nem használható típusként - %1 is not a type - %1 nem típus + %1 nem típus - + Type %1 unavailable A(z) %1 típus nem érhető el @@ -2106,14 +2324,13 @@ erre: QDeclarativeConnections - - - + + Cannot assign to non-existent property "%1" Nem lehet hozzárendelni a nem létező "%1" tulajdonsághoz - + Connections: nested objects not allowed Kapcsolatok: az illesztett objektumok nem engedélyezettek @@ -2136,7 +2353,7 @@ erre: Az executeSql a transaction()-on kívülről lett meghívva - + Read-only Transaction Csak olvasható tranzakció @@ -2165,7 +2382,7 @@ erre: QDeclarativeFlipable - + front is a write-once property a front csak egyszer írható tulajdonság @@ -2176,82 +2393,184 @@ erre: + QDeclarativeImportDatabase + + + module "%1" definition "%2" not readable + + + + + plugin cannot be loaded for module "%1": %2 + + + + + module "%1" plugin "%2" not found + + + + + + module "%1" version %2.%3 is not installed + + + + + module "%1" is not installed + + + + + + "%1": no such directory + + + + + import "%1" has no qmldir and no namespace + + + + + - %1 is not a namespace + + + + + - nested namespaces not allowed + + + + + + local directory + + + + + is ambiguous. Found in %1 and in %2 + + + + + is ambiguous. Found in %1 in version %2.%3 and %4.%5 + + + + + is instantiated recursively + + + + + is not a type + + + + QDeclarativeInfo - - unknown location - ismeretlen hely + ismeretlen hely + + + + QDeclarativeKeyNavigationAttached + + + KeyNavigation is only available via attached properties + + + + + QDeclarativeKeysAttached + + + Keys is only available via attached properties + QDeclarativeListModel - + remove: index %1 out of range remove: a(z) %1 index túl nagy - + insert: value is not an object insert: az érték nem objektum - + insert: index %1 out of range insert: a(z) %1 index túl nagy - + move: out of range move: határokon kívül - + append: value is not an object append: az érték nem objektum - + + + ListElement: cannot contain nested elements + + + get: index %1 out of range - get: a(z) %1 index túl nagy + get: a(z) %1 index túl nagy - + set: value is not an object set: az érték nem objektum - + set: index %1 out of range set: a(z) %1 index túl nagy - ListElement: cannot use default property - ListElement: nem lehet az alapértelmezett tulajdonságot használni + ListElement: nem lehet az alapértelmezett tulajdonságot használni - + ListElement: cannot use reserved "id" property ListElement: nem lehet a lefoglalt "id" tulajdonságot használni - + ListElement: cannot use script for property value ListElement: nem lehet scriptet használni tulajdonság értéknek - + ListModel: undefined property '%1' ListModel: nem definiált tulajdonság: '%1' + QDeclarativeLoader + + + Loader does not support loading non-visual elements. + + + + QDeclarativeParentAnimation - + Unable to preserve appearance under complex transform Nem lehet a kinézetet megőrizni a komplex transzformáció alatt @@ -2270,15 +2589,15 @@ erre: QDeclarativeParentChange - + Unable to preserve appearance under complex transform - + Nem lehet a kinézetet megőrizni a komplex transzformáció alatt Unable to preserve appearance under non-uniform scale - + Nem lehet a kinézetet megőrizni a nem-uniform skálázás alatt @@ -2289,7 +2608,7 @@ erre: QDeclarativeParser - + Illegal character @@ -2304,17 +2623,19 @@ erre: - + + + Illegal unicode escape sequence - + Unclosed comment at end of file - + Illegal syntax for exponential number @@ -2324,17 +2645,28 @@ erre: - - Unterminated regular expression literal + + Unterminated regular expression literal + + + + + Invalid regular expression flag '%0' + + + + + + Unterminated regular expression backslash sequence - - Invalid regular expression flag '%0' + + Unterminated regular expression class - + Syntax error @@ -2351,27 +2683,44 @@ erre: - + Expected type name - - Invalid use of Script block + + + + Property value set multiple times - + Invalid import qualifier ID + + Reserved name "Qt" cannot be used as an qualifier + + + + + Script import qualifiers must be unique. + + + + + Script import requires a qualifier + + + Library import requires a version - + Expected parameter type @@ -2396,28 +2745,47 @@ erre: - + JavaScript declaration outside Script element + + + QDeclarativePauseAnimation - - Variable declarations not allow in inline Script blocks + + Cannot set a duration of < 0 - QDeclarativePauseAnimation + QDeclarativePixmapCache - - Cannot set a duration of < 0 + + Error decoding: %1: %2 + + + + + Failed to get image from provider: %1 + + + + + + Cannot open: %1 + + + + + Unknown Error loading %1 QDeclarativePropertyAnimation - + Cannot set a duration of < 0 @@ -2425,7 +2793,12 @@ erre: QDeclarativePropertyChanges - + + PropertyChanges does not support creating state-specific objects. + + + + Cannot assign to non-existent property "%1" @@ -2438,13 +2811,13 @@ erre: QDeclarativeTextInput - - + + Could not load cursor delegate - + Could not instantiate cursor delegate @@ -2452,12 +2825,12 @@ erre: QDeclarativeVME - + Unable to create object of type %1 - + Cannot assign value %1 to property %2 @@ -2477,9 +2850,9 @@ erre: - + Cannot assign object to list - + Nem lehet objektumot listához rendelni @@ -2500,15 +2873,24 @@ erre: QDeclarativeVisualDataModel - + Delegate component must be Item type. + QDeclarativeXmlListModel + + + + Qt was built without support for xmlpatterns + + + + QDeclarativeXmlListModelRole - + An XmlRole query must not start with '/' @@ -2516,7 +2898,7 @@ erre: QDeclarativeXmlRoleList - + An XmlListModel query must start with '/' or "//" @@ -2542,12 +2924,12 @@ erre: QDialog - + What's This? Mi ez? - + Done Kész @@ -2555,9 +2937,9 @@ erre: QDialogButtonBox - + - + OK OK @@ -2769,7 +3151,7 @@ erre: QFile - + Destination file exists A célfájl már létezik @@ -2808,8 +3190,8 @@ erre: QFileDialog - - + + All Files (*) Minden fájl (*) @@ -2832,12 +3214,12 @@ erre: Menté&s - + Open Megnyitás - + %1 already exists. Do you want to replace it? %1 már létezik. @@ -2858,7 +3240,7 @@ Ellenőrizze, hogy jól adta-e meg a fájl nevét. Számítógép - + &Rename Át&nevezés @@ -2904,7 +3286,7 @@ Ellenőrizze, hogy jól adta-e meg a fájl nevét. - + Directory: Könyvtár: @@ -2954,12 +3336,12 @@ Biztosan törölni akarja? Minden fájl (*.*) - + Save As Mentés másként - + Drive Meghajtó @@ -3015,17 +3397,17 @@ Biztosan törölni akarja? Előre - + New Folder Új könyvtár - + &New Folder Ú&j könyvtár - + &Choose &Kiválasztás @@ -3036,8 +3418,8 @@ Biztosan törölni akarja? Törlés - - + + File &name: Fájl &neve: @@ -3053,6 +3435,36 @@ Biztosan törölni akarja? Create New Folder Új könyvtár létrehozása + + + Go back + Vissza + + + + Go forward + Előre + + + + Go to the parent directory + Szülő mappába + + + + Create a New Folder + Új mappa létrehozása + + + + Change to list view mode + Váltás lista nézetre + + + + Change to detail view mode + Váltás részletes lista nézetre + QFileSystemModel @@ -3105,7 +3517,7 @@ Biztosan törölni akarja? - + %1 TB %1 TB @@ -3363,7 +3775,7 @@ Biztosan törölni akarja? QFontDialog - + &Font &Betűtípus @@ -3403,8 +3815,7 @@ Biztosan törölni akarja? Í&rásmód - - + Select Font Betűtípus kiválasztása @@ -3456,7 +3867,7 @@ Biztosan törölni akarja? Ismeretlen hiba - + Connecting to host failed: %1 @@ -3558,21 +3969,19 @@ Biztosan törölni akarja? QGstreamerPlayerSession - - Unable to play %1 - Nem lehet lejátszani: %1 + Nem lehet lejátszani: %1 QHostInfo - + Unknown error Ismeretlen hiba - + No host name given Nem adott meg gépnevet @@ -3580,9 +3989,9 @@ Biztosan törölni akarja? QHostInfoAgent - + - + Host not found A kiszolgáló nem található @@ -3933,7 +4342,7 @@ Biztosan törölni akarja? QIODevice - + Permission denied Hozzáférés megtagadva @@ -3953,7 +4362,7 @@ Biztosan törölni akarja? Nincs több hely az eszközön - + Unknown error Ismeretlen hiba @@ -3961,7 +4370,7 @@ Biztosan törölni akarja? QInputContext - + XIM XIM @@ -4029,7 +4438,7 @@ Biztosan törölni akarja? Nem sikerült unmap-olni a(z) '%1'-t: %2 - + The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] A(z) '%1' plugin inkompatíbilis Qt függvénykönyvtárat használ. (%2.%3.%4) [%5] @@ -4044,7 +4453,8 @@ Biztosan törölni akarja? Ismeretlen hiba - + + The shared library was not found. Az osztott függvénykönyvtár nem található. @@ -4081,7 +4491,7 @@ Biztosan törölni akarja? QLineEdit - + &Undo &Visszavonás @@ -4157,7 +4567,7 @@ Biztosan törölni akarja? - + %1: Invalid name %1: Érvénytelen név @@ -4214,7 +4624,7 @@ Biztosan törölni akarja? QMYSQLDriver - + Unable to open database ' Az adatbázis nem nyitható meg: ' @@ -4404,34 +4814,27 @@ Biztosan törölni akarja? QMediaPlayer - The QMediaPlayer object does not have a valid service - A QMediaPlayer objektumnak nincs érvényes szolgáltatása + A QMediaPlayer objektumnak nincs érvényes szolgáltatása QMediaPlaylist - - Could not add items to read only playlist. - Csak olvasható lejátszólistához nem lehet elemeket hozzáadni. + Csak olvasható lejátszólistához nem lehet elemeket hozzáadni. - - Playlist format is not supported - A lejátszólista formátuma nem támogatott + A lejátszólista formátuma nem támogatott - The file could not be accessed. - A fájl nem elérhető. + A fájl nem elérhető. - Playlist format is not supported. - A lejátszólista formátuma nem támogatott. + A lejátszólista formátuma nem támogatott. @@ -4507,7 +4910,7 @@ Biztosan törölni akarja? Kilépés: %1 - + Actions Műveletek @@ -4552,17 +4955,17 @@ Biztosan törölni akarja? <h3>A Qt névjegye</h3>%1<p>A Qt egy C++ eszközkészlet a kereszt-platformos alkalmazásfejlesztéshez.</p><p>A Qt egy-forrású hordozhatóságot biztosít az MS&nbsp;Windows, a Mac&nbsp;OS&nbsp;X, a Linux, és az összes nagyobb kereskedelmi Unix változat között. A Qt mobileszközökhöz is elérhető, pl. Qtopia Core.</p><p>A Qt a Trolltech terméke. További információk: <a href="http://www.trolltech.com/qt/">www.trolltech.com/qt/</a> .</p> - + Show Details... Részletek megjelenítése... - + Hide Details... Részletek elrejtése... - + <h3>About Qt</h3><p>This program uses Qt version %1.</p> <h3>Qt névjegye</h3><p>Ez a program a Qt %1 verzióját használja.</p> @@ -4854,7 +5257,7 @@ Biztosan törölni akarja? QNetworkAccessHttpBackend - + No suitable proxy found Nincs megfelelő proxy @@ -4862,7 +5265,7 @@ Biztosan törölni akarja? QNetworkAccessManager - + Network access is disabled. A hozzáférés a hálózathoz le van tiltva. @@ -4870,17 +5273,23 @@ Biztosan törölni akarja? QNetworkReply - + Error downloading %1 - server replied: %2 Hiba %1 letöltésekor - a szerver válasza: %2 - + Protocol "%1" is unknown Ismeretlen protokoll: "%1" - + + Network session error. + CHECKIT + Hálozati munkamenet hiba. + + + Temporary network failure. Ideiglenes hálózati hiba. @@ -4888,7 +5297,7 @@ Biztosan törölni akarja? QNetworkReplyImpl - + Operation canceled A művelet megszakítva @@ -4897,7 +5306,7 @@ Biztosan törölni akarja? QNetworkSession - + Invalid configuration. Érvénytelen konfiguráció. @@ -4905,7 +5314,7 @@ Biztosan törölni akarja? QNetworkSessionPrivateImpl - + Roaming error Roaming hiba @@ -4920,8 +5329,8 @@ Biztosan törölni akarja? Azonosítatlan hiba - - + + Unknown session error. Ismeretlen hiba a munkamenetben. @@ -5027,12 +5436,12 @@ Biztosan törölni akarja? QODBCDriver - + Unable to connect Nem sikerült kapcsolódni - + Unable to disable autocommit Az automatikus véglegesítés nem tiltható le @@ -5052,7 +5461,7 @@ Biztosan törölni akarja? Az automatikus véglegesítés nem engedélyezhető - + Unable to connect - Driver doesn't support all functionality required Nem sikerült kapcsolódni - A driver nem támogat minden szükséges szolgáltatást @@ -5060,19 +5469,19 @@ Biztosan törölni akarja? QODBCResult - + QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration QODBCResult::reset: Nem lehet a 'SQL_CURSOR_STATIC' attribútumot beállítani a parancson. Ellenőrizze az ODBC driver beállítását - + Unable to execute statement A parancs nem hajtható végre - + Unable to fetch next A következő nem olvasható ki @@ -5082,12 +5491,12 @@ Biztosan törölni akarja? A parancs előkészítése nem lehetséges - + Unable to bind variable A változó nem rögzíthető - + Unable to fetch Az eredmény nem elérhető @@ -5104,7 +5513,7 @@ Biztosan törölni akarja? - + Unable to fetch last Az utolsó eredmény nem érhető el @@ -5156,16 +5565,28 @@ Biztosan törölni akarja? Kilépés - + "%1" duplicates a previous role name and will be disabled. CHECKIT: role == ? A(z) "%1" neve ütközik egy, már létező szabály nevével, így le lesz tiltva. + + + + invalid query: "%1" + érvénytelen lekérdezés: "%1" + + + + + PulseAudio Sound Server + + QPPDOptionsModel - + Name Név @@ -6202,7 +6623,7 @@ Biztosan törölni akarja? Fekvő - + A0 (841 x 1189 mm) A0 (841 x 1189 mm) @@ -6352,7 +6773,12 @@ Biztosan törölni akarja? US Common #10 Envelope (105 x 241 mm) - + + Print current page + Jelenlegi oldal nyomtatása + + + The 'From' value cannot be greater than the 'To' value. Az első oldal száma nem lehet nagyobb, mint az utolsó oldalé. @@ -6378,7 +6804,7 @@ Biztosan törölni akarja? Papírforrás: - + Print @@ -6393,7 +6819,7 @@ Biztosan törölni akarja? Nyomtató - + Print To File ... Nyomtatás fájlba... @@ -6426,7 +6852,7 @@ Biztosan törölni akarja? Nyomtatás fájlba - + Print range Nyomtatási tartomány @@ -6490,7 +6916,7 @@ Do you want to overwrite it? Felülírja? - + File exists A fájl létezik @@ -6500,7 +6926,7 @@ Felülírja? <qt>Felülírja?</qt> - + Print selection Kijelölés nyomtatása @@ -6667,7 +7093,7 @@ Válasszon másik fájlnevet. Egyéni - + &Options >> &Opciók >> @@ -6683,7 +7109,7 @@ Válasszon másik fájlnevet. &Opciók << - + Print to File (PDF) Nyomtatás fájlba (PDF) @@ -6717,7 +7143,7 @@ Válasszon másik fájlnevet. %1% - + Print Preview Nyomtatási kép @@ -6942,6 +7368,11 @@ Válasszon másik fájlnevet. Short side Rövidebb oldal + + + Current Page + Jelenlegi oldal + QPrintWidget @@ -6994,7 +7425,7 @@ Válasszon másik fájlnevet. QProcess - + @@ -7187,7 +7618,7 @@ Válasszon másik fájlnevet. QSQLiteDriver - + Error opening database Adatbázis megnyitási hiba @@ -7219,8 +7650,8 @@ Válasszon másik fájlnevet. QSQLiteResult - - + + Unable to fetch row A sor nem olvasható ki @@ -7246,7 +7677,7 @@ Válasszon másik fájlnevet. A paraméterek száma nem megfelelő - + No query Üres lekérdezés @@ -7276,7 +7707,8 @@ Válasszon másik fájlnevet. Single-shot - + CHECKIT + @@ -7793,8 +8225,9 @@ Válasszon másik fájlnevet. QShortcut - + Space + This and all following "incomprehensible" strings in QShortcut context are key names. Please use the localized names appearing on actual keyboards or whatever is commonly used. Szóköz @@ -8673,6 +9106,156 @@ Válasszon másik fájlnevet. Csere + + Kanji + + + + + Muhenkan + + + + + Henkan + + + + + Romaji + + + + + Hiragana + + + + + Katakana + + + + + Hiragana Katakana + + + + + Zenkaku + + + + + Hankaku + + + + + Zenkaku Hankaku + + + + + Touroku + + + + + Massyo + + + + + Kana Lock + + + + + Kana Shift + + + + + Eisu Shift + + + + + Eisu toggle + + + + + Code input + + + + + Multiple Candidate + + + + + Previous Candidate + + + + + Hangul + + + + + Hangul Start + + + + + Hangul End + + + + + Hangul Hanja + + + + + Hangul Jamo + + + + + Hangul Romaja + + + + + Hangul Jeonja + + + + + Hangul Banja + + + + + Hangul PreHanja + + + + + Hangul PostHanja + + + + + Hangul Special + + + Ctrl @@ -8707,7 +9290,7 @@ Válasszon másik fájlnevet. F%1 - + Home Page Kezdőoldal @@ -8845,7 +9428,7 @@ Válasszon másik fájlnevet. Mégsem - + Exit Kilépés @@ -8923,7 +9506,7 @@ Válasszon másik fájlnevet. QSslSocket - + Unable to write data: %1 Az adat nem írható: %1 @@ -8943,7 +9526,7 @@ Válasszon másik fájlnevet. SSL kézfogás hiba: %1 - + Error creating SSL context (%1) Az SSL kontextus létrehozása sikertelen (%1) @@ -8953,7 +9536,7 @@ Válasszon másik fájlnevet. Érvénytelen vagy üres a titkosítók listája (%1) - + Private key does not certify public key, %1 A privát és a publikus kulcs nem illik össze: %1 @@ -8968,7 +9551,7 @@ Válasszon másik fájlnevet. Hiba az SSL munkamenet létrehozásakor: %1 - + Cannot provide a certificate with no key, %1 Kulcs nélkül nem állítható ki tanusítvány, %1 @@ -8978,7 +9561,7 @@ Válasszon másik fájlnevet. Hiba a helyi tanúsítvány betöltése közben, %1 - + Error loading private key, %1 Hiba a titkos kulcs betöltése közben, %1 @@ -9191,7 +9774,7 @@ Válasszon másik fájlnevet. Socket művelet nem támogatott - + Operation on socket is not supported A művelet nem támogatott socketeken @@ -9199,7 +9782,7 @@ Válasszon másik fájlnevet. QTextControl - + &Undo &Visszavonás @@ -9257,7 +9840,7 @@ Válasszon másik fájlnevet. QUdpSocket - + This platform does not support IPv6 A platform nem támogatja az IPv6-ot @@ -9357,7 +9940,7 @@ Válasszon másik fájlnevet. QWebFrame - + Request cancelled A kérés megszakítva @@ -9394,12 +9977,17 @@ Válasszon másik fájlnevet. QWebPage - + + Redirection limit reached + Átirányítási korlát elérve + + + Bad HTTP request Hibás HTTP kérés - + Submit default label for Submit buttons in forms on web pages Küldés @@ -9657,7 +10245,13 @@ Válasszon másik fájlnevet. Jobbról balra - + + Missing Plug-in + Label text to be used when a plug-in is missing + Egy plug-in hiányzik + + + Loading... Media controller status message when the media is loading Betöltés... @@ -9903,7 +10497,7 @@ Válasszon másik fájlnevet. Jobbról balra - + Inspect Inspect Element context menu item Elemzés @@ -9927,7 +10521,7 @@ Válasszon másik fájlnevet. Keresési előzmények ürítése - + Unknown Unknown filesize FTP directory listing item Ismeretlen @@ -9939,7 +10533,7 @@ Válasszon másik fájlnevet. %1 (%2x%3 képpont) - + Web Inspector - %2 Web elemző - %2 @@ -10017,22 +10611,22 @@ Válasszon másik fájlnevet. Görgetés le - + JavaScript Alert - %1 JavaScript figyelmeztetés - %1 - + JavaScript Confirm - %1 JavaScript megerősítés - %1 - + JavaScript Prompt - %1 JavaScript Prompt kérdés - %1 - + JavaScript Problem - %1 JavaScript probléma - %1 @@ -10042,7 +10636,7 @@ Válasszon másik fájlnevet. Az ezen a lapon levő parancsfájl hibásnak tűnik. Leállítja a parancsfájl futását? - + Move the cursor to the next character Tegye a kurzort a következő karakterhez @@ -10263,7 +10857,7 @@ Válasszon másik fájlnevet. QWidget - + * * @@ -10271,7 +10865,7 @@ Válasszon másik fájlnevet. QWizard - + Go Back Visszalépés @@ -12169,7 +12763,7 @@ Válasszon másik fájlnevet. Gyermek elem hiányzik abból a hatókörből, lehetséges gyermek elemek: %1. - + Document is not a XML schema. A dokumentum nem egy XML séma. @@ -12195,7 +12789,7 @@ Válasszon másik fájlnevet. %1 importált séma cél-névtere különbözik az importáló sémában definiált %2 cél-névtértől. - + %1 element is not allowed to have the same %2 attribute value as the target namespace %3. %1 elemnek nem lehet ugyanaz a %2 attribútum értéke, mint %3 cél-névtérnek. @@ -12205,7 +12799,7 @@ Válasszon másik fájlnevet. %2 attribútum nélküli %1 elem nem engedélyezett cél-névtér nélküli séma belsejében. - + %1 element is not allowed inside %2 element if %3 attribute is present. %1 elem nem megengedett %2 elemen belül, ha %3 attribútum meg van adva. @@ -12416,13 +13010,13 @@ Válasszon másik fájlnevet. - + Type %1 of %2 element cannot be resolved. %2 elem %1 típusa nem oldható fel. - + Base type %1 of complex type cannot be resolved. Komplex típus %1 őstípusa nem oldható fel. @@ -12432,7 +13026,7 @@ Válasszon másik fájlnevet. %1-nek nem lehet %2-t tartalmazó komplex őstípusa. - + Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type. %1 komplex típus tartalom modellje %2 elemet tartalmaz, ezáltal kiterjesztéssel nem származtatható nem üres típusból. diff --git a/translations/qtconfig_hu.ts b/translations/qtconfig_hu.ts index 2b32a9d..549a5d8 100644 --- a/translations/qtconfig_hu.ts +++ b/translations/qtconfig_hu.ts @@ -71,8 +71,12 @@ OpenGL - Use OpenGL if avaiable + Használja az OpenGL-t ha elérhető + + + + Use OpenGL if available Használja az OpenGL-t ha elérhető @@ -204,17 +208,17 @@ Build Palette - + Paletta felépítése &3-D Effects: - + &3-D effektek: Window Back&ground: - + Ablak &háttér: @@ -224,37 +228,37 @@ Please use the KDE Control Center to set the palette. - + Kérem, használja a KDE vezérlőközpontot a paletta beállításához. Fonts - + Betűtípusok Default Font - + Alapértelmezett betűtípus &Style: - + &Stílus: &Point Size: - + &Pontméret: F&amily: - + &Család: Sample Text - + Példa szöveg @@ -264,7 +268,7 @@ S&elect or Enter a Family: - + Válassza ki, vagy írja b&íe a betűcsaládot: @@ -274,17 +278,17 @@ Up - + Fel Down - + Le Remove - + Törlés @@ -294,12 +298,13 @@ Add - + Hozzáadás Interface - + CHECKIT + Interfész @@ -309,82 +314,83 @@ ms - + &Double Click Interval: - + CHECKIT + &Dupla kattintás sebessége: No blinking - + Nincs villogás &Cursor Flash Time: - + &Kurzor villogás sebessége: lines - + sor Wheel &Scroll Lines: - + Görgetett &sorok száma: Resolve symlinks in URLs - + Szimbolikus linkek feloldása az URL-ekben GUI Effects - + GUI effektek &Enable - + &Engedélyezés Alt+E - + &Menu Effect: - + &Menü effekt: C&omboBox Effect: - + &Legördülő lista effekt: &ToolTip Effect: - + &ToolTip effekt: Tool&Box Effect: - + Eszköz&tár effekt: Disable - + Letiltás Animate - + Animáció @@ -399,22 +405,23 @@ Minimum &Width: - + Minimum s&zélesség: Minimum Hei&ght: - + Minimum &magasság: pixels - + pixel Enhanced support for languages written right-to-left - + CHECKIT + Javított támogatás balról jobbra író nyelvekhez @@ -439,62 +446,62 @@ Root - + Root Default Input Method: - + Alapértelmezett beviteli mód: Printer - + Nyomtató Enable Font embedding - + Font beágyazás engedélyezése Font Paths - + Fontok útvonalai Browse... - + Tallózás... Press the <b>Browse</b> button or enter a directory and press Enter to add them to the list. - + Nyomja meg a <b>Tallózás<b> gombot, vagy írja be a mappa elérési útját, majd nyomja meg az Enter-t a listához adáshoz. Phonon - + About Phonon - + A Phonon névjegye Current Version: - + Jelenlegi verzió: Not available - + Nem érhető el Website: - + Weboldal: @@ -503,12 +510,12 @@ p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://phonon.kde.org"><span style=" text-decoration: underline; color:#0000ff;">http://phonon.kde.org</span></a></p></body></html> - + About GStreamer - + A GStreamer névjegye @@ -517,22 +524,23 @@ p, li { white-space: pre-wrap; } p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://gstreamer.freedesktop.org/"><span style=" text-decoration: underline; color:#0000ff;">http://gstreamer.freedesktop.org/</span></a></p></body></html> - + GStreamer backend settings - + A GStreamer backend beállításai Preferred audio sink: - + CHECKIT + Preferált hangrendszer: Preferred render method: - + Preferált renderelési mód: @@ -541,7 +549,11 @@ p, li { white-space: pre-wrap; } p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Note: changes to these settings may prevent applications from starting up correctly.</span></p></body></html> - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Figyelem: ezen beállítások megváltoztatása egyes alkalmazások indulásában gondokat okozhat.</span></p></body></html> @@ -614,22 +626,22 @@ p, li { white-space: pre-wrap; } Select &Palette: - + Előnézet &választása: Active Palette - + Aktív elemek Inactive Palette - + Inaktív elemek Disabled Palette - + Letiltott elemek @@ -664,7 +676,7 @@ p, li { white-space: pre-wrap; } Window - + Ablak @@ -689,32 +701,32 @@ p, li { white-space: pre-wrap; } BrightText - + ButtonText - + Highlight - + HighlightedText - + &Select Color: - + &Szín választás: Choose a color - + Válasszon színt @@ -724,7 +736,7 @@ p, li { white-space: pre-wrap; } 3-D shadow &effects - + 3D árnyék &effektek -- cgit v0.12 From bc11da163dc53860cf728b76dbb472bb2c9dadbf Mon Sep 17 00:00:00 2001 From: axis Date: Fri, 4 Jun 2010 10:41:47 +0200 Subject: Fixed def file usage for the makefile build system on the SDK plugin. RevBy: Thomas Zander --- src/plugins/s60/s60pluginbase.pri | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/plugins/s60/s60pluginbase.pri b/src/plugins/s60/s60pluginbase.pri index 1a6f4a2..4e15102 100644 --- a/src/plugins/s60/s60pluginbase.pri +++ b/src/plugins/s60/s60pluginbase.pri @@ -8,11 +8,16 @@ QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/s60 MMP_RULES += NOEXPORTLIBRARY -defBlock = \ - "$${LITERAL_HASH}ifdef WINSCW" \ - "DEFFILE ../bwins/qts60plugin.def" \ - "$${LITERAL_HASH}else" \ - "DEFFILE ../eabi/qts60plugin.def" \ - "$${LITERAL_HASH}endif" +symbian-abld|symbian-sbsv2 { + defBlock = \ + "$${LITERAL_HASH}ifdef WINSCW" \ + "DEFFILE ../bwins/qts60plugin.def" \ + "$${LITERAL_HASH}else" \ + "DEFFILE ../eabi/qts60plugin.def" \ + "$${LITERAL_HASH}endif" +} else { + CONFIG *= def_files + DEF_FILE = ../eabi/qts60pluginu.def +} MMP_RULES += defBlock \ No newline at end of file -- cgit v0.12 From cb59e56bc9f34c50dc4a2d01d2ea506c5d735225 Mon Sep 17 00:00:00 2001 From: axis Date: Fri, 4 Jun 2010 11:32:40 +0200 Subject: Fixed def file usage for Qt plugins under the makefile build system. Previously it would not use the autogenerated def files. RevBy: Thomas Zander --- .gitignore | 2 +- mkspecs/features/symbian/def_files.prf | 2 +- mkspecs/features/symbian/symbian_building.prf | 3 +++ qmake/generators/symbian/symbian_makefile.h | 2 ++ qmake/generators/symbian/symbiancommon.cpp | 36 +++++++++++++++++++++++++++ qmake/generators/symbian/symbiancommon.h | 2 ++ qmake/generators/symbian/symmake.cpp | 35 -------------------------- qmake/generators/symbian/symmake.h | 2 -- 8 files changed, 45 insertions(+), 39 deletions(-) diff --git a/.gitignore b/.gitignore index 4e3b130..d88e69a 100644 --- a/.gitignore +++ b/.gitignore @@ -205,7 +205,7 @@ bld.inf *.loc !s60main.rss *.pkg -plugin_commonU.def +plugin_commonu.def *.qtplugin *.sis *.sisx diff --git a/mkspecs/features/symbian/def_files.prf b/mkspecs/features/symbian/def_files.prf index eb17402..6a95763 100644 --- a/mkspecs/features/symbian/def_files.prf +++ b/mkspecs/features/symbian/def_files.prf @@ -41,7 +41,7 @@ symbian-abld|symbian-sbsv2 { } } -} else:contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) { +} else:contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib):!contains(CONFIG, plugin) { !isEmpty(DEF_FILE) { defFile = $$DEF_FILE } else { diff --git a/mkspecs/features/symbian/symbian_building.prf b/mkspecs/features/symbian/symbian_building.prf index c230272..92988aa 100644 --- a/mkspecs/features/symbian/symbian_building.prf +++ b/mkspecs/features/symbian/symbian_building.prf @@ -96,6 +96,9 @@ contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) { QMAKE_POST_LINK = $$replace(QMAKE_POST_LINK, "^@", "") QMAKE_POST_LINK = && $$QMAKE_POST_LINK } + + contains(CONFIG, plugin):QMAKE_ELF2E32_FLAGS += --definput=plugin_commonu.def + # The tee and grep at the end work around the issue that elf2e32 doesn't return non-null on error. # The comparison of dso files is to avoid extra building of modules that depend on this dso, in # case it has not changed. diff --git a/qmake/generators/symbian/symbian_makefile.h b/qmake/generators/symbian/symbian_makefile.h index 061866a..94f0145 100644 --- a/qmake/generators/symbian/symbian_makefile.h +++ b/qmake/generators/symbian/symbian_makefile.h @@ -94,6 +94,8 @@ public: } } + writeCustomDefFile(); + return T::writeMakefile(t); } }; diff --git a/qmake/generators/symbian/symbiancommon.cpp b/qmake/generators/symbian/symbiancommon.cpp index aa44afc..f8b3aa5 100644 --- a/qmake/generators/symbian/symbiancommon.cpp +++ b/qmake/generators/symbian/symbiancommon.cpp @@ -58,6 +58,8 @@ #define RSS_TAG_FOOTER "footer" #define RSS_TAG_DEFAULT "default_rules" // Same as just giving rules without tag +#define PLUGIN_COMMON_DEF_FILE_ACTUAL "plugin_commonu.def" + #define MANUFACTURER_NOTE_FILE "manufacturer_note.txt" #define DEFAULT_MANUFACTURER_NOTE \ "The package is not supported for devices from this manufacturer. Please try the selfsigned " \ @@ -775,6 +777,40 @@ void SymbianCommonGenerator::readRssRules(QString &numberOfIcons, } } +void SymbianCommonGenerator::writeCustomDefFile() +{ + if (targetType == TypePlugin && !generator->project->isActiveConfig("stdbinary")) { + // Create custom def file for plugin + QFile ft(Option::output_dir + QLatin1Char('/') + QLatin1String(PLUGIN_COMMON_DEF_FILE_ACTUAL)); + + if (ft.open(QIODevice::WriteOnly)) { + generatedFiles << ft.fileName(); + QTextStream t(&ft); + + t << "; ==============================================================================" << endl; + t << "; Generated by qmake (" << qmake_version() << ") (Qt " QT_VERSION_STR ") on: "; + t << QDateTime::currentDateTime().toString(Qt::ISODate) << endl; + t << "; This file is generated by qmake and should not be modified by the" << endl; + t << "; user." << endl; + t << "; Name : " PLUGIN_COMMON_DEF_FILE_ACTUAL << endl; + t << "; Part of : " << generator->project->values("TARGET").join(" ") << endl; + t << "; Description : Fixes common plugin symbols to known ordinals" << endl; + t << "; Version : " << endl; + t << ";" << endl; + t << "; ==============================================================================" << "\n" << endl; + + t << endl; + + t << "EXPORTS" << endl; + t << "\tqt_plugin_query_verification_data @ 1 NONAME" << endl; + t << "\tqt_plugin_instance @ 2 NONAME" << endl; + t << endl; + } else { + PRINT_FILE_CREATE_ERROR(QString(PLUGIN_COMMON_DEF_FILE_ACTUAL)) + } + } +} + QStringList SymbianCommonGenerator::symbianLangCodesFromTsFiles() { QStringList tsfiles; diff --git a/qmake/generators/symbian/symbiancommon.h b/qmake/generators/symbian/symbiancommon.h index 3efe5a4..dae1e4a 100644 --- a/qmake/generators/symbian/symbiancommon.h +++ b/qmake/generators/symbian/symbiancommon.h @@ -81,6 +81,8 @@ protected: QString &iconFile, QMap &userRssRules); + void writeCustomDefFile(); + QStringList symbianLangCodesFromTsFiles(); void fillQt2S60LangMapTable(); diff --git a/qmake/generators/symbian/symmake.cpp b/qmake/generators/symbian/symmake.cpp index 1006e39..6082aeb 100644 --- a/qmake/generators/symbian/symmake.cpp +++ b/qmake/generators/symbian/symmake.cpp @@ -55,7 +55,6 @@ #define RESOURCE_DIRECTORY_MMP "/resource/apps" #define REGISTRATION_RESOURCE_DIRECTORY_HW "/private/10003a3f/import/apps" #define PLUGIN_COMMON_DEF_FILE_FOR_MMP "./plugin_common.def" -#define PLUGIN_COMMON_DEF_FILE_ACTUAL "plugin_commonu.def" #define BLD_INF_FILENAME_LEN (sizeof(BLD_INF_FILENAME) - 1) #define BLD_INF_RULES_BASE "BLD_INF_RULES." @@ -264,40 +263,6 @@ bool SymbianMakefileGenerator::writeMakefile(QTextStream &t) return true; } -void SymbianMakefileGenerator::writeCustomDefFile() -{ - if (targetType == TypePlugin && !project->isActiveConfig("stdbinary")) { - // Create custom def file for plugin - QFile ft(Option::output_dir + QLatin1Char('/') + QLatin1String(PLUGIN_COMMON_DEF_FILE_ACTUAL)); - - if (ft.open(QIODevice::WriteOnly)) { - generatedFiles << ft.fileName(); - QTextStream t(&ft); - - t << "; ==============================================================================" << endl; - t << "; Generated by qmake (" << qmake_version() << ") (Qt " QT_VERSION_STR ") on: "; - t << QDateTime::currentDateTime().toString(Qt::ISODate) << endl; - t << "; This file is generated by qmake and should not be modified by the" << endl; - t << "; user." << endl; - t << "; Name : " PLUGIN_COMMON_DEF_FILE_ACTUAL << endl; - t << "; Part of : " << project->values("TARGET").join(" ") << endl; - t << "; Description : Fixes common plugin symbols to known ordinals" << endl; - t << "; Version : " << endl; - t << ";" << endl; - t << "; ==============================================================================" << "\n" << endl; - - t << endl; - - t << "EXPORTS" << endl; - t << "\tqt_plugin_query_verification_data @ 1 NONAME" << endl; - t << "\tqt_plugin_instance @ 2 NONAME" << endl; - t << endl; - } else { - PRINT_FILE_CREATE_ERROR(QString(PLUGIN_COMMON_DEF_FILE_ACTUAL)) - } - } -} - void SymbianMakefileGenerator::init() { MakefileGenerator::init(); diff --git a/qmake/generators/symbian/symmake.h b/qmake/generators/symbian/symmake.h index a584a9a..c5b6907 100644 --- a/qmake/generators/symbian/symmake.h +++ b/qmake/generators/symbian/symmake.h @@ -117,8 +117,6 @@ protected: void writeMmpFileBinaryVersionPart(QTextStream& t); void writeMmpFileRulesPart(QTextStream& t); - void writeCustomDefFile(); - void appendIfnotExist(QStringList &list, QString value); void appendIfnotExist(QStringList &list, QStringList values); -- cgit v0.12 From dbd16b3b6d2e6b030dd52e90eb3a38dc1a73c180 Mon Sep 17 00:00:00 2001 From: Zeno Albisser Date: Thu, 3 Jun 2010 16:54:31 +0200 Subject: fix for using .lnk files when running app from UNC Since "" is an invalid target for a .lnk file, we can return false for doStat() in case of resolving the .lnk to "". Notice that .lnk files only allow absolute paths for the target. "" is returned by readLink in case the .lnk file does not exist. Reviewed-by: Joao Task-Number: QTBUG-10863 --- src/corelib/io/qfsfileengine_win.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/corelib/io/qfsfileengine_win.cpp b/src/corelib/io/qfsfileengine_win.cpp index ec49f1a..21930e1 100644 --- a/src/corelib/io/qfsfileengine_win.cpp +++ b/src/corelib/io/qfsfileengine_win.cpp @@ -1162,7 +1162,15 @@ bool QFSFileEnginePrivate::doStat() const if (filePath.isEmpty()) return could_stat; - QString fname = filePath.endsWith(QLatin1String(".lnk")) ? readLink(filePath) : filePath; + QString fname; + if(filePath.endsWith(QLatin1String(".lnk"))) { + fname = readLink(filePath); + if(fname.isEmpty()) + return could_stat; + } + else + fname = filePath; + fname = fixIfRelativeUncPath(fname); UINT oldmode = SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX); -- cgit v0.12 From cd8a6d6836f04f66d3e7083c97f7873240afa433 Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Fri, 4 Jun 2010 12:53:36 +0200 Subject: Avoid timer starvation during high posted event activity Similar to commit bc01bb10da23d0d2308cf02a16947be836bc9a21, we need to avoid starvation of the idle time source by forcing a single, normal priority pass after processing posted events. Reviewed-by: ogoffart Task-number: QT-3467 --- src/corelib/kernel/qeventdispatcher_glib.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/corelib/kernel/qeventdispatcher_glib.cpp b/src/corelib/kernel/qeventdispatcher_glib.cpp index fd36be4..9c1c827 100644 --- a/src/corelib/kernel/qeventdispatcher_glib.cpp +++ b/src/corelib/kernel/qeventdispatcher_glib.cpp @@ -246,6 +246,7 @@ struct GPostEventSource GSource source; QAtomicInt serialNumber; int lastSerialNumber; + QEventDispatcherGlibPrivate *d; }; static gboolean postEventSourcePrepare(GSource *s, gint *timeout) @@ -274,6 +275,7 @@ static gboolean postEventSourceDispatch(GSource *s, GSourceFunc, gpointer) GPostEventSource *source = reinterpret_cast(s); source->lastSerialNumber = source->serialNumber; QCoreApplication::sendPostedEvents(); + source->d->runTimersOnceWithNormalPriority(); return true; // i dunno, george... } @@ -313,6 +315,7 @@ QEventDispatcherGlibPrivate::QEventDispatcherGlibPrivate(GMainContext *context) postEventSource = reinterpret_cast(g_source_new(&postEventSourceFuncs, sizeof(GPostEventSource))); postEventSource->serialNumber = 1; + postEventSource->d = this; g_source_set_can_recurse(&postEventSource->source, true); g_source_attach(&postEventSource->source, mainContext); -- cgit v0.12 From fec2bc79158a4d0c5aebf99429cfdd945d4e8341 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Fri, 4 Jun 2010 17:11:09 +0200 Subject: Updated WebKit to 903617844b4341f7098b63b54e5be16cd83af647 || || [Qt] Compilation fails when compiling against Qt 4.7 and Qt Mobility is installed || --- src/3rdparty/webkit/.tag | 2 +- src/3rdparty/webkit/VERSION | 2 +- src/3rdparty/webkit/WebCore/ChangeLog | 12 ++++++++++++ src/3rdparty/webkit/WebCore/WebCore.pro | 8 ++++++-- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/3rdparty/webkit/.tag b/src/3rdparty/webkit/.tag index 24fdc2a..67436cf 100644 --- a/src/3rdparty/webkit/.tag +++ b/src/3rdparty/webkit/.tag @@ -1 +1 @@ -903617844b4341f7098b63b54e5be16cd83af647 +6db5de6d18c3ab8b74809303e4d79abacfc570a8 diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION index 211921d..df9a5e8 100644 --- a/src/3rdparty/webkit/VERSION +++ b/src/3rdparty/webkit/VERSION @@ -4,4 +4,4 @@ This is a snapshot of the Qt port of WebKit from and has the sha1 checksum - de1e909b06cbc981d63e0fc0f6a3f84002dd1e80 + 903617844b4341f7098b63b54e5be16cd83af647 diff --git a/src/3rdparty/webkit/WebCore/ChangeLog b/src/3rdparty/webkit/WebCore/ChangeLog index 57e0e44..9d1d1b9 100644 --- a/src/3rdparty/webkit/WebCore/ChangeLog +++ b/src/3rdparty/webkit/WebCore/ChangeLog @@ -1,3 +1,15 @@ +2010-06-04 Simon Hausmann + + Reviewed by Tor Arne Vestbø. + + [Qt] Compilation fails when compiling against Qt 4.7 and Qt Mobility is installed + https://bugs.webkit.org/show_bug.cgi?id=40116 + + CONFIG += mobility has the side-effect of pulling in mobility includes, which conflict + with Qt 4.7's bearer managenent includes and break the build. + + * WebCore.pro: + 2010-06-03 Tor Arne Vestbø Reviewed by Simon Hausmann. diff --git a/src/3rdparty/webkit/WebCore/WebCore.pro b/src/3rdparty/webkit/WebCore/WebCore.pro index ba669bd..048fc93 100644 --- a/src/3rdparty/webkit/WebCore/WebCore.pro +++ b/src/3rdparty/webkit/WebCore/WebCore.pro @@ -2496,8 +2496,12 @@ contains(DEFINES, ENABLE_QT_BEARER=1) { SOURCES += \ platform/network/qt/NetworkStateNotifierQt.cpp - CONFIG += mobility - MOBILITY += bearer + # Bearer management is part of Qt 4.7, so don't accidentially + # pull in Qt Mobility when building against >= 4.7 + !greaterThan(QT_MINOR_VERSION, 6) { + CONFIG += mobility + MOBILITY += bearer + } } contains(DEFINES, ENABLE_SVG=1) { -- cgit v0.12 From 2b4d2fd1ada524f4780dd7633ca34bc72d823ff1 Mon Sep 17 00:00:00 2001 From: Robert Loehning Date: Fri, 4 Jun 2010 18:37:00 +0200 Subject: Fix in Addressbook tutorial Don't add if name or address is empty. Reviewed-by: Alessandro Portale --- examples/tutorials/addressbook/part3/addressbook.cpp | 1 + examples/tutorials/addressbook/part4/addressbook.cpp | 1 + examples/tutorials/addressbook/part5/addressbook.cpp | 1 + examples/tutorials/addressbook/part6/addressbook.cpp | 1 + examples/tutorials/addressbook/part7/addressbook.cpp | 1 + 5 files changed, 5 insertions(+) diff --git a/examples/tutorials/addressbook/part3/addressbook.cpp b/examples/tutorials/addressbook/part3/addressbook.cpp index adb87ef..28a570a 100644 --- a/examples/tutorials/addressbook/part3/addressbook.cpp +++ b/examples/tutorials/addressbook/part3/addressbook.cpp @@ -125,6 +125,7 @@ void AddressBook::submitContact() if (name == "" || address == "") { QMessageBox::information(this, tr("Empty Field"), tr("Please enter a name and address.")); + return; } if (!contacts.contains(name)) { diff --git a/examples/tutorials/addressbook/part4/addressbook.cpp b/examples/tutorials/addressbook/part4/addressbook.cpp index 1b7a6c4..55d551f 100644 --- a/examples/tutorials/addressbook/part4/addressbook.cpp +++ b/examples/tutorials/addressbook/part4/addressbook.cpp @@ -134,6 +134,7 @@ void AddressBook::submitContact() if (name == "" || address == "") { QMessageBox::information(this, tr("Empty Field"), tr("Please enter a name and address.")); + return; } //! [submitContact() function part1] if (currentMode == AddingMode) { diff --git a/examples/tutorials/addressbook/part5/addressbook.cpp b/examples/tutorials/addressbook/part5/addressbook.cpp index 80c18c3..1b3f451 100644 --- a/examples/tutorials/addressbook/part5/addressbook.cpp +++ b/examples/tutorials/addressbook/part5/addressbook.cpp @@ -141,6 +141,7 @@ void AddressBook::submitContact() if (name == "" || address == "") { QMessageBox::information(this, tr("Empty Field"), tr("Please enter a name and address.")); + return; } if (currentMode == AddingMode) { diff --git a/examples/tutorials/addressbook/part6/addressbook.cpp b/examples/tutorials/addressbook/part6/addressbook.cpp index fc41190..724971c 100644 --- a/examples/tutorials/addressbook/part6/addressbook.cpp +++ b/examples/tutorials/addressbook/part6/addressbook.cpp @@ -147,6 +147,7 @@ void AddressBook::submitContact() if (name == "" || address == "") { QMessageBox::information(this, tr("Empty Field"), tr("Please enter a name and address.")); + return; } if (currentMode == AddingMode) { diff --git a/examples/tutorials/addressbook/part7/addressbook.cpp b/examples/tutorials/addressbook/part7/addressbook.cpp index 3ab8702..bf00298 100644 --- a/examples/tutorials/addressbook/part7/addressbook.cpp +++ b/examples/tutorials/addressbook/part7/addressbook.cpp @@ -149,6 +149,7 @@ void AddressBook::submitContact() if (name == "" || address == "") { QMessageBox::information(this, tr("Empty Field"), tr("Please enter a name and address.")); + return; } if (currentMode == AddingMode) { -- cgit v0.12 From 09c6a81109d3978c1583c556202c01c1e774f11f Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 4 Jun 2010 20:47:46 +0200 Subject: Make qbswap() use glibc's fast bswap_*() functions if available. Reviewed-by: Thiago Macieira --- src/corelib/global/qendian.h | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/corelib/global/qendian.h b/src/corelib/global/qendian.h index 107854c..353e8b9 100644 --- a/src/corelib/global/qendian.h +++ b/src/corelib/global/qendian.h @@ -42,6 +42,16 @@ #ifndef QENDIAN_H #define QENDIAN_H +#ifdef Q_OS_LINUX +QT_BEGIN_INCLUDE_NAMESPACE +# include +QT_END_INCLUDE_NAMESPACE +#endif + +#ifdef __GLIBC__ +#include +#endif + #include QT_BEGIN_HEADER @@ -264,6 +274,21 @@ template <> inline qint16 qFromBigEndian(const uchar *src) * and it is therefore a bit more convenient and in most cases more efficient. */ template T qbswap(T source); + +#ifdef __GLIBC__ +template <> inline quint64 qbswap(quint64 source) +{ + return bswap_64(source); +} +template <> inline quint32 qbswap(quint32 source) +{ + return bswap_32(source); +} +template <> inline quint16 qbswap(quint16 source) +{ + return bswap_16(source); +} +#else template <> inline quint64 qbswap(quint64 source) { return 0 @@ -292,6 +317,7 @@ template <> inline quint16 qbswap(quint16 source) | ((source & 0x00ff) << 8) | ((source & 0xff00) >> 8) ); } +#endif // __GLIBC__ // signed specializations template <> inline qint64 qbswap(qint64 source) -- cgit v0.12 From 51fa7df978d71a366c95c732d6a8c2576690d63a Mon Sep 17 00:00:00 2001 From: David Faure Date: Sat, 5 Jun 2010 00:06:15 +0200 Subject: Add convenience constructor to QTextOption::Tab Merge-request: 1734 Reviewed-by: Simon Hausmann --- src/gui/text/qtextoption.cpp | 10 ++++++++-- src/gui/text/qtextoption.h | 2 ++ tests/auto/qtextformat/tst_qtextformat.cpp | 5 +---- tests/auto/qtextlayout/tst_qtextlayout.cpp | 9 ++------- tests/auto/qtextodfwriter/tst_qtextodfwriter.cpp | 9 ++------- 5 files changed, 15 insertions(+), 20 deletions(-) diff --git a/src/gui/text/qtextoption.cpp b/src/gui/text/qtextoption.cpp index c1e254c..a2b8022 100644 --- a/src/gui/text/qtextoption.cpp +++ b/src/gui/text/qtextoption.cpp @@ -145,7 +145,7 @@ QTextOption &QTextOption::operator=(const QTextOption &o) \sa tabArray(), setTabStop(), setTabs() */ -void QTextOption::setTabArray(QList tabStops) +void QTextOption::setTabArray(QList tabStops) // Qt5: const ref { if (!d) d = new QTextOptionPrivate; @@ -165,7 +165,7 @@ void QTextOption::setTabArray(QList tabStops) \sa tabStops() */ -void QTextOption::setTabs(QList tabStops) +void QTextOption::setTabs(QList tabStops) // Qt5: const ref { if (!d) d = new QTextOptionPrivate; @@ -391,6 +391,12 @@ QList QTextOption::tabs() const */ /*! + \fn Tab::Tab(qreal pos, TabType tabType, QChar delim = QChar()) + Creates a tab with the given position, tab type, and (for DelimiterTab) delimiter + \since 4.6 +*/ + +/*! \fn bool Tab::operator==(const Tab &other) const Returns true if tab \a other is equal to this tab; diff --git a/src/gui/text/qtextoption.h b/src/gui/text/qtextoption.h index 1381ed1..5af7834 100644 --- a/src/gui/text/qtextoption.h +++ b/src/gui/text/qtextoption.h @@ -68,6 +68,8 @@ public: struct Q_GUI_EXPORT Tab { inline Tab() : position(80), type(QTextOption::LeftTab) { } + inline Tab(qreal pos, TabType tabType, QChar delim = QChar()) + : position(pos), type(tabType), delimiter(delim) {} inline bool operator==(const Tab &other) const { return type == other.type diff --git a/tests/auto/qtextformat/tst_qtextformat.cpp b/tests/auto/qtextformat/tst_qtextformat.cpp index ee1f4b5..9b71481 100644 --- a/tests/auto/qtextformat/tst_qtextformat.cpp +++ b/tests/auto/qtextformat/tst_qtextformat.cpp @@ -308,10 +308,7 @@ void tst_QTextFormat::getSetTabs() format.setTabPositions(tabs); Comparator c2(tabs, format.tabPositions()); - QTextOption::Tab tab2; - tab2.position = 3456; - tab2.type = QTextOption::RightTab; - tab2.delimiter = QChar('x'); + QTextOption::Tab tab2(3456, QTextOption::RightTab, QChar('x')); tabs.append(tab2); format.setTabPositions(tabs); Comparator c3(tabs, format.tabPositions()); diff --git a/tests/auto/qtextlayout/tst_qtextlayout.cpp b/tests/auto/qtextlayout/tst_qtextlayout.cpp index 1a5f493..a631f3d 100644 --- a/tests/auto/qtextlayout/tst_qtextlayout.cpp +++ b/tests/auto/qtextlayout/tst_qtextlayout.cpp @@ -980,9 +980,7 @@ void tst_QTextLayout::testCenteredTab() // test if centering the tab works. We expect the center of 'Bar.' to be at the tab point. QTextOption option = layout.textOption(); QList tabs; - QTextOption::Tab tab; - tab.type = QTextOption::CenterTab; - tab.position = 150; + QTextOption::Tab tab(150, QTextOption::CenterTab); tabs.append(tab); option.setTabs(tabs); layout.setTextOption(option); @@ -1002,10 +1000,7 @@ void tst_QTextLayout::testDelimiterTab() // try the different delimiter characters to see if the alignment works there. QTextOption option = layout.textOption(); QList tabs; - QTextOption::Tab tab; - tab.type = QTextOption::DelimiterTab; - tab.delimiter = QChar('.'); - tab.position = 100; + QTextOption::Tab tab(100, QTextOption::DelimiterTab, QChar('.')); tabs.append(tab); option.setTabs(tabs); layout.setTextOption(option); diff --git a/tests/auto/qtextodfwriter/tst_qtextodfwriter.cpp b/tests/auto/qtextodfwriter/tst_qtextodfwriter.cpp index 64c42bb..a463d86 100644 --- a/tests/auto/qtextodfwriter/tst_qtextodfwriter.cpp +++ b/tests/auto/qtextodfwriter/tst_qtextodfwriter.cpp @@ -198,14 +198,9 @@ void tst_QTextOdfWriter::testWriteStyle2() { QTextBlockFormat bf; // = cursor.blockFormat(); QList tabs; - QTextOption::Tab tab1; - tab1.position = 40; - tab1.type = QTextOption::RightTab; + QTextOption::Tab tab1(40, QTextOption::RightTab); tabs << tab1; - QTextOption::Tab tab2; - tab2.position = 80; - tab2.type = QTextOption::DelimiterTab; - tab2.delimiter = 'o'; + QTextOption::Tab tab2(80, QTextOption::DelimiterTab, 'o'); tabs << tab2; bf.setTabPositions(tabs); -- cgit v0.12 From fad226e8a6354d89fad3dbee5ab6dd07e80534bc Mon Sep 17 00:00:00 2001 From: Lorn Potter Date: Mon, 7 Jun 2010 09:30:41 +1000 Subject: make corewlan more namespace friendly --- src/plugins/bearer/corewlan/qcorewlanengine.mm | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/plugins/bearer/corewlan/qcorewlanengine.mm b/src/plugins/bearer/corewlan/qcorewlanengine.mm index a9cb65b..6ba9504 100644 --- a/src/plugins/bearer/corewlan/qcorewlanengine.mm +++ b/src/plugins/bearer/corewlan/qcorewlanengine.mm @@ -70,9 +70,10 @@ #include #include -@interface QNSListener : NSObject + +@interface QT_MANGLE_NAMESPACE(QNSListener) : NSObject { - NSNotificationCenter *center; + NSNotificationCenter *notificationCenter; CWInterface *currentInterface; QCoreWlanEngine *engine; NSLock *locker; @@ -86,16 +87,16 @@ @end -@implementation QNSListener +@implementation QT_MANGLE_NAMESPACE(QNSListener) @synthesize engine; - (id) init { [locker lock]; QMacCocoaAutoReleasePool pool; - center = [NSNotificationCenter defaultCenter]; + notificationCenter = [NSNotificationCenter defaultCenter]; currentInterface = [CWInterface interfaceWithName:nil]; - [center addObserver:self selector:@selector(notificationHandler:) name:kCWPowerDidChangeNotification object:nil]; + [notificationCenter addObserver:self selector:@selector(notificationHandler:) name:kCWPowerDidChangeNotification object:nil]; [locker unlock]; return self; } @@ -116,7 +117,7 @@ -(void)remove { [locker lock]; - [center removeObserver:self]; + [notificationCenter removeObserver:self]; [locker unlock]; } @@ -126,7 +127,7 @@ } @end -QNSListener *listener = 0; +QT_MANGLE_NAMESPACE(QNSListener) *listener = 0; QT_BEGIN_NAMESPACE @@ -296,6 +297,9 @@ void QScanThread::getUserConfigurations() for(uint row=0; row < [wifiInterfaces count]; row++ ) { CWInterface *wifiInterface = [CWInterface interfaceWithName: [wifiInterfaces objectAtIndex:row]]; + if ( ![wifiInterface power] ) + continue; + NSString *nsInterfaceName = [wifiInterface name]; // add user configured system networks SCDynamicStoreRef dynRef = SCDynamicStoreCreate(kCFAllocatorSystemDefault, (CFStringRef)@"Qt corewlan", nil, nil); @@ -430,7 +434,7 @@ void QCoreWlanEngine::initialize() QMacCocoaAutoReleasePool pool; if([[CWInterface supportedInterfaces] count] > 0 && !listener) { - listener = [[QNSListener alloc] init]; + listener = [[QT_MANGLE_NAMESPACE(QNSListener) alloc] init]; listener.engine = this; hasWifi = true; } else { @@ -785,6 +789,11 @@ void QCoreWlanEngine::networksChanged() changed = true; } + if (ptr->bearer != cpPriv->bearer) { + ptr->bearer = cpPriv->bearer; + changed = true; + } + if (ptr->state != cpPriv->state) { ptr->state = cpPriv->state; changed = true; -- cgit v0.12 From 1b9b0b0e0e9f10420abc68825916195e54ba8a72 Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Mon, 7 Jun 2010 15:41:08 +1000 Subject: Fixed `make install' for qmediaplayer demo. `sources.path += qmediaplayer.pro' where `sources.files += qmediaplayer.pro' was intended. --- demos/qmediaplayer/qmediaplayer.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demos/qmediaplayer/qmediaplayer.pro b/demos/qmediaplayer/qmediaplayer.pro index cfe3905..9407a81 100644 --- a/demos/qmediaplayer/qmediaplayer.pro +++ b/demos/qmediaplayer/qmediaplayer.pro @@ -17,7 +17,7 @@ HEADERS += mediaplayer.h target.path = $$[QT_INSTALL_DEMOS]/qmediaplayer sources.files = $$SOURCES $$HEADERS $$FORMS $$RESOURCES *.pro *.html *.doc images -sources.path = $$[QT_INSTALL_DEMOS]/qmediaplayer qmediaplayer.pro +sources.path = $$[QT_INSTALL_DEMOS]/qmediaplayer INSTALLS += target sources wince*{ -- cgit v0.12 From 5eec7f6611075df526f30796378315c9cd469cd8 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Sat, 29 May 2010 20:51:57 +0200 Subject: Update the linux-icc mkspec --- mkspecs/linux-icc/qmake.conf | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/mkspecs/linux-icc/qmake.conf b/mkspecs/linux-icc/qmake.conf index 3353180..5e46498 100644 --- a/mkspecs/linux-icc/qmake.conf +++ b/mkspecs/linux-icc/qmake.conf @@ -21,12 +21,12 @@ QMAKE_LEX = flex QMAKE_LEXFLAGS = QMAKE_YACC = yacc QMAKE_YACCFLAGS = -d -QMAKE_CFLAGS = -wd654,1572 +QMAKE_CFLAGS = QMAKE_CFLAGS_DEPS = -M -QMAKE_CFLAGS_WARN_ON = +QMAKE_CFLAGS_WARN_ON = -w1 -Wcheck -wd654,1572,411,873,1125 QMAKE_CFLAGS_WARN_OFF = -w -QMAKE_CFLAGS_RELEASE = -O2 -QMAKE_CFLAGS_DEBUG = -g +QMAKE_CFLAGS_RELEASE = -O2 -falign-functions=16 -ansi-alias -fstrict-aliasing +QMAKE_CFLAGS_DEBUG = -O0 -g QMAKE_CFLAGS_SHLIB = -fPIC QMAKE_CFLAGS_STATIC_LIB = $$QMAKE_CFLAGS_SHLIB QMAKE_CFLAGS_YACC = @@ -60,9 +60,10 @@ QMAKE_LFLAGS_RELEASE = QMAKE_LFLAGS_DEBUG = QMAKE_LFLAGS_SHLIB = -shared QMAKE_LFLAGS_PLUGIN = $$QMAKE_LFLAGS_SHLIB -QMAKE_LFLAGS_SONAME = -Qoption,ld,-soname, +QMAKE_LFLAGS_SONAME = -Wl,-soname, QMAKE_LFLAGS_THREAD = -QMAKE_LFLAGS_RPATH = -Qoption,ld,-rpath, +QMAKE_LFLAGS_NOUNDEF = -Wl,-z,defs +QMAKE_LFLAGS_RPATH = -Wl,-rpath, QMAKE_LIBS = QMAKE_LIBS_DYNLOAD = -ldl @@ -99,8 +100,8 @@ QMAKE_CXXFLAGS_USE_PRECOMPILE = -pch-use ${QMAKE_PCH_OUTPUT} -include ${QMAKE_PC QMAKE_CXXFLAGS_PRECOMPILE = -c -pch-create ${QMAKE_PCH_OUTPUT} -include ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_TEMP_OBJECT} ${QMAKE_PCH_TEMP_SOURCE} # -Bsymbolic-functions (ld) support -QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Qoption,ld,-Bsymbolic-functions -QMAKE_LFLAGS_DYNAMIC_LIST = -Qoption,ld,--dynamic-list, +QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Wl,-Bsymbolic-functions +QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list, # Symbol visibility control QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden -- cgit v0.12 From 8a4d4c1f0d3761cbf46cf0fee076647ec4a6ac5a Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Sun, 30 May 2010 10:46:42 +0200 Subject: Update the mkspec for linux-icc: don't use jump tables in shlibs ICC generates jump table code that isn't PIC (i.e., it does absolute indirect jumps), so this increases the number of relocations in shared libraries by a huge amount. In QtCore it increased by 250% (from 3500 to 12000). --- mkspecs/linux-icc/qmake.conf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mkspecs/linux-icc/qmake.conf b/mkspecs/linux-icc/qmake.conf index 5e46498..3b26f7d 100644 --- a/mkspecs/linux-icc/qmake.conf +++ b/mkspecs/linux-icc/qmake.conf @@ -27,7 +27,7 @@ QMAKE_CFLAGS_WARN_ON = -w1 -Wcheck -wd654,1572,411,873,1125 QMAKE_CFLAGS_WARN_OFF = -w QMAKE_CFLAGS_RELEASE = -O2 -falign-functions=16 -ansi-alias -fstrict-aliasing QMAKE_CFLAGS_DEBUG = -O0 -g -QMAKE_CFLAGS_SHLIB = -fPIC +QMAKE_CFLAGS_SHLIB = -fPIC -fno-jump-tables QMAKE_CFLAGS_STATIC_LIB = $$QMAKE_CFLAGS_SHLIB QMAKE_CFLAGS_YACC = QMAKE_CFLAGS_THREAD = -D_REENTRANT @@ -58,7 +58,7 @@ QMAKE_LINK_SHLIB = icpc QMAKE_LFLAGS = QMAKE_LFLAGS_RELEASE = QMAKE_LFLAGS_DEBUG = -QMAKE_LFLAGS_SHLIB = -shared +QMAKE_LFLAGS_SHLIB = -shared -shared-intel QMAKE_LFLAGS_PLUGIN = $$QMAKE_LFLAGS_SHLIB QMAKE_LFLAGS_SONAME = -Wl,-soname, QMAKE_LFLAGS_THREAD = @@ -77,7 +77,7 @@ QMAKE_LIBS_THREAD = -lpthread QMAKE_MOC = $$[QT_INSTALL_BINS]/moc QMAKE_UIC = $$[QT_INSTALL_BINS]/uic -QMAKE_AR = ar cqs +QMAKE_AR = xiar cqs QMAKE_OBJCOPY = objcopy QMAKE_RANLIB = -- cgit v0.12 From 91fa2c1beb79124db4a70a37e2224c1de9b9ded4 Mon Sep 17 00:00:00 2001 From: Jens Bache-Wiig Date: Mon, 7 Jun 2010 12:33:27 +0200 Subject: Disabled item view items use incorrect background color This was a problem when using alternate row colors. We use a separate palette for base/alternate when using disabled colors. However, we should only use this if the entire view is disabled. To keep compatibility with style sheets we have to preserve the disabled state per item, but we now use the widget pointer to decide which palette role to use. Task-number: QTBUG-11263 Reviewed-by: ogoffart --- src/gui/styles/qcommonstyle.cpp | 4 ++-- src/gui/styles/qgtkstyle.cpp | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/gui/styles/qcommonstyle.cpp b/src/gui/styles/qcommonstyle.cpp index 4978565..039a6da 100644 --- a/src/gui/styles/qcommonstyle.cpp +++ b/src/gui/styles/qcommonstyle.cpp @@ -762,7 +762,7 @@ void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, Q #ifndef QT_NO_ITEMVIEWS case PE_PanelItemViewRow: if (const QStyleOptionViewItemV4 *vopt = qstyleoption_cast(opt)) { - QPalette::ColorGroup cg = vopt->state & QStyle::State_Enabled + QPalette::ColorGroup cg = (widget ? widget->isEnabled() : (vopt->state & QStyle::State_Enabled)) ? QPalette::Normal : QPalette::Disabled; if (cg == QPalette::Normal && !(vopt->state & QStyle::State_Active)) cg = QPalette::Inactive; @@ -775,7 +775,7 @@ void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, Q break; case PE_PanelItemViewItem: if (const QStyleOptionViewItemV4 *vopt = qstyleoption_cast(opt)) { - QPalette::ColorGroup cg = vopt->state & QStyle::State_Enabled + QPalette::ColorGroup cg = (widget ? widget->isEnabled() : (vopt->state & QStyle::State_Enabled)) ? QPalette::Normal : QPalette::Disabled; if (cg == QPalette::Normal && !(vopt->state & QStyle::State_Active)) cg = QPalette::Inactive; diff --git a/src/gui/styles/qgtkstyle.cpp b/src/gui/styles/qgtkstyle.cpp index b59a033..c989bd3 100644 --- a/src/gui/styles/qgtkstyle.cpp +++ b/src/gui/styles/qgtkstyle.cpp @@ -855,9 +855,10 @@ void QGtkStyle::drawPrimitive(PrimitiveElement element, key = QLS("a"); GTK_WIDGET_SET_FLAGS(gtkTreeView, GTK_HAS_FOCUS); } + bool isEnabled = (widget ? widget->isEnabled() : (vopt->state & QStyle::State_Enabled)); gtkPainter.paintFlatBox(gtkTreeView, detail, option->rect, option->state & State_Selected ? GTK_STATE_SELECTED : - option->state & State_Enabled ? GTK_STATE_NORMAL : GTK_STATE_INSENSITIVE, + isEnabled ? GTK_STATE_NORMAL : GTK_STATE_INSENSITIVE, GTK_SHADOW_OUT, gtkTreeView->style, key); if (isActive ) GTK_WIDGET_UNSET_FLAGS(gtkTreeView, GTK_HAS_FOCUS); -- cgit v0.12 From e82d6264571604357b28ccb8d1b079c7eaf6ba71 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 7 Jun 2010 13:42:13 +0200 Subject: remove somewhat misleading warning about x11 pixmap leak the only situation where it would be actually true are broken drivers (or a broken x server as a whole). qt is not the right place to worry about that problem. Reviewed-by: jbache --- src/gui/image/qpixmap_x11.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/gui/image/qpixmap_x11.cpp b/src/gui/image/qpixmap_x11.cpp index 6bebefc..e8dc5ae 100644 --- a/src/gui/image/qpixmap_x11.cpp +++ b/src/gui/image/qpixmap_x11.cpp @@ -1250,10 +1250,8 @@ void QX11PixmapData::release() pengine = 0; if (!X11) { -#ifndef QT_NO_DEBUG - qWarning("~QX11PixmapData(): QPixmap objects must be destroyed before the QApplication" - " object, otherwise the native pixmap object will be leaked."); -#endif + // At this point, the X server will already have freed our resources, + // so there is nothing to do. return; } -- cgit v0.12 From 3cf159b75f8a5e66edd8f6b4defbee2f4435b6ef Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 7 Jun 2010 13:42:34 +0200 Subject: add docu about pixmaps being invalidated on qapp destruction Reviewed-by: jbache --- src/gui/image/qpixmap.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp index 20e4b50..fd2c139 100644 --- a/src/gui/image/qpixmap.cpp +++ b/src/gui/image/qpixmap.cpp @@ -1766,6 +1766,9 @@ QPixmap QPixmap::transformed(const QMatrix &matrix, Qt::TransformationMode mode) function returns the actual matrix used for transforming the pixmap. + \note When using the native X11 graphics system, the pixmap + becomes invalid when the QApplication instance is destroyed. + \sa QBitmap, QImage, QImageReader, QImageWriter */ -- cgit v0.12 From 5f9fdaa5c82fa4529ad4352da6855a19be83c079 Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Mon, 7 Jun 2010 15:18:50 +0200 Subject: XQuery test suite (and others): remove p4 dependency --- tests/auto/xmlpatternsxqts/tst_suitetest.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/auto/xmlpatternsxqts/tst_suitetest.cpp b/tests/auto/xmlpatternsxqts/tst_suitetest.cpp index ec63858..6e10e3f 100644 --- a/tests/auto/xmlpatternsxqts/tst_suitetest.cpp +++ b/tests/auto/xmlpatternsxqts/tst_suitetest.cpp @@ -141,8 +141,6 @@ void tst_SuiteTest::checkTestSuiteResult() const /* Passed to ResultThreader so it knows what kind of file it is handling. */ ResultThreader::Type type = ResultThreader::Baseline; - QProcess::execute(QLatin1String("p4 edit ") + m_existingBaseline); - for(QFileInfoList::const_iterator it(list.constBegin()); it != end; ++it) { QFileInfo i(*it); @@ -167,8 +165,6 @@ void tst_SuiteTest::checkTestSuiteResult() const const int exitCode = eventLoop.exec(); - QProcess::execute(QLatin1String("p4 revert -a ") + m_existingBaseline); - QCOMPARE(exitCode, 0); } -- cgit v0.12 From 154bf4c4f58b3b4d012cd2ff57cd4709a2226464 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Mon, 7 Jun 2010 16:45:51 +0200 Subject: Fix incorrect \since tag Changed the since added in 51fa7df978d71a366c95c732d6a8c2576690d63a from 4.6 to 4.7 Pointed out by Thorbjoern :) Reviewed-by: Trust me --- src/gui/text/qtextoption.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/text/qtextoption.cpp b/src/gui/text/qtextoption.cpp index a2b8022..527b603 100644 --- a/src/gui/text/qtextoption.cpp +++ b/src/gui/text/qtextoption.cpp @@ -393,7 +393,7 @@ QList QTextOption::tabs() const /*! \fn Tab::Tab(qreal pos, TabType tabType, QChar delim = QChar()) Creates a tab with the given position, tab type, and (for DelimiterTab) delimiter - \since 4.6 + \since 4.7 */ /*! -- cgit v0.12 From 83c6f16a17ff5ddee23e752e0eebc014bbc10f01 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 7 Jun 2010 15:47:48 +0200 Subject: qt_ja_JP.ts => qt_ja.ts the other _ja files have no country qualification either, and it makes no sense anyway. --- translations/qt_ja.ts | 8070 +++++++++++++++++++++++++++++++++++++++++ translations/qt_ja_JP.ts | 8070 ----------------------------------------- translations/translations.pri | 2 +- 3 files changed, 8071 insertions(+), 8071 deletions(-) create mode 100644 translations/qt_ja.ts delete mode 100644 translations/qt_ja_JP.ts diff --git a/translations/qt_ja.ts b/translations/qt_ja.ts new file mode 100644 index 0000000..e6f92b7 --- /dev/null +++ b/translations/qt_ja.ts @@ -0,0 +1,8070 @@ + + + + + MAC_APPLICATION_MENU + + + Services + サービス + + + + Hide %1 + %1を隠す + + + + Hide Others + ほかを隠す + + + + Show All + すべてを表示 + + + + Preferences... + 環境設定... + + + + Quit %1 + %1 を終了 + + + + About %1 + %1 について + + + + CloseButton + + + Close Tab + ToolTip + タブを閉じる + + + + PPDOptionsModel + + Name + 名前 + + + Value + + + + + Phonon:: + + + Notifications + 通知 + + + + Music + 音楽 + + + + Video + 動画 + + + + Communication + コミュニケーション + + + + Games + ゲーム + + + + Accessibility + アクセシビリティ + + + + Phonon::AudioOutput + + + <html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html> + <html>オーディオ再生デバイス<b>%1</b>が動作しません。<br/><b>%2</b>を使用します。</html> + + + + <html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html> + <html>より高いパフォーマンスを得られるオーディオデバイス <b>%1</b> が使用可能となったので、使用します。</html> + + + + Revert back to device '%1' + デバイス '%1' に戻す + + + + Phonon::Gstreamer::Backend + + + Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. + Some video features have been disabled. + 警告: gstreamer0.10-plugins-good がインストールされていません。幾つかの動画機能は使用できません。 + + + + Warning: You do not seem to have the base GStreamer plugins installed. + All audio and video support has been disabled + 警告: GStreamer plugin がインストールされていません。すべての音声、動画機能は使用できません + + + + Phonon::Gstreamer::MediaObject + + + Cannot start playback. + +Check your Gstreamer installation and make sure you +have libgstreamer-plugins-base installed. + 再生できません。 + +Gstreamer と libgstreamer-plugins-base が正しくインストールされているか確認してください。 + + + + A required codec is missing. You need to install the following codec(s) to play this content: %0 + 必要なコーデックがみつかりません。このコンテンツを再生するためには、以下のコーデックをインストールする必要があります: %0 + + + + + + + + + + + Could not open media source. + メディアソースを開くことができません。 + + + + Invalid source type. + 無効なソースの形式です。 + + + + Could not locate media source. + メディアソースがみつかりません。 + + + + Could not open audio device. The device is already in use. + オーディオデバイスを開くことができません。デバイスは既に他のプロセスにより使用されています。 + + + + Could not decode media source. + メディアソースを開くことができません。見つからないか、未知の形式です。 + + + + Phonon::VolumeSlider + + + + + + Volume: %1% + 音量: %1% + + + + + + Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1% + スライダを用いて音量を指定してください。左端が0%、右端が%1%になります + + + + Muted + ミュート + + + + Q3Accel + + + %1, %2 not defined + %1, %2 は定義されていません + + + + Ambiguous %1 not handled + 曖昧な %1 は扱えません + + + + Q3DataTable + + + True + + + + + False + + + + + Insert + 挿入 + + + + Update + アップデート + + + + Delete + 削除 + + + + Q3FileDialog + + + All Files (*.*) + すべてのファイル(*.*) + + + + Open + オープン + + + + Select a Directory + ディレクトリを選択 + + + + Copy or Move a File + ファイルをコピーまたは移動 + + + + Read: %1 + 読み込み: %1 + + + + + Write: %1 + 書き込み: %1 + + + + + Cancel + キャンセル + + + + + + + All Files (*) + すべてのファイル(*) + + + + Name + 名前 + + + + Size + サイズ + + + + Type + タイプ + + + + Date + 日付 + + + + Attributes + 属性 + + + + + &OK + OK(&O) + + + + Look &in: + 検索する場所(&I): + + + + + + File &name: + ファイル名(&N): + + + + File &type: + ファイルタイプ(&T): + + + + Back + 戻る + + + + One directory up + 1つ上のディレクトリへ移動 + + + + Create New Folder + 新しいフォルダの作成 + + + + List View + 一覧表示 + + + + Detail View + 詳細表示 + + + + Preview File Info + ファイル情報のプレビュー + + + + Preview File Contents + ファイルの内容のプレビュー + + + + Read-write + 読み込み/書き込み + + + + Read-only + 読み込み専用 + + + + Write-only + 書き込み専用 + + + + Inaccessible + アクセス不可 + + + + Symlink to File + ファイルへのシンボリックリンク + + + + Symlink to Directory + ディレクトリへのシンボリックリンク + + + + Symlink to Special + スペシャルファイルへのシンボリックリンク + + + + File + ファイル + + + + Dir + ディレクトリ + + + + Special + スペシャル + + + + + + Open + オープン + + + + + Save As + 名前を付けて保存 + + + + + + &Open + オープン(&O) + + + + + &Save + 保存(&S) + + + + &Rename + 名前の変更(&R) + + + + &Delete + 削除(&D) + + + + R&eload + リロード(&E) + + + + Sort by &Name + 名前順にソート(&N) + + + + Sort by &Size + サイズ順にソート(&S) + + + + Sort by &Date + 日付順にソート(&D) + + + + &Unsorted + ソート解除(&U) + + + + Sort + ソート + + + + Show &hidden files + 隠しファイルの表示(&H) + + + + the file + ファイル + + + + the directory + ディレクトリ + + + + the symlink + シンボリックリンク + + + + Delete %1 + %1 の削除 + + + + <qt>Are you sure you wish to delete %1 "%2"?</qt> + <qt>%1 "%2" を削除しますか?</qt> + + + + &Yes + はい(&Y) + + + + &No + いいえ(&N) + + + + New Folder 1 + 新しいフォルダ1 + + + + New Folder + 新しいフォルダ + + + + New Folder %1 + 新しいフォルダ %1 + + + + Find Directory + ディレクトリの検索 + + + + + Directories + ディレクトリ + + + + Directory: + ディレクトリ: + + + + + Error + エラー + + + + %1 +File not found. +Check path and filename. + %1 +ファイルが見つかりませんでした。 +パスおよびファイル名を確認してください。 + + + + Q3LocalFs + + + + Could not read directory +%1 + ディレクトリを読み込めませんでした +%1 + + + + Could not create directory +%1 + ディレクトリを作成できませんでした +%1 + + + + Could not remove file or directory +%1 + ファイルまたはディレクトリを削除できませんでした +%1 + + + + Could not rename +%1 +to +%2 + 名前を変更できませんでした +%1 +を +%2 +へ + + + + Could not open +%1 + 開けませんでした +%1 + + + + Could not write +%1 + 書き込めませんでした +%1 + + + + Q3MainWindow + + + Line up + 整列 + + + + Customize... + カスタマイズ... + + + + Q3NetworkProtocol + + + Operation stopped by the user + 操作がユーザによって停止されました + + + + Q3ProgressDialog + + + + Cancel + キャンセル + + + + Q3TabDialog + + + + OK + OK + + + + Apply + 適用 + + + + Help + ヘルプ + + + + Defaults + デフォルト + + + + Cancel + キャンセル + + + + Q3TextEdit + + + &Undo + 元に戻す(&U) + + + + &Redo + やり直す(&R) + + + + Cu&t + 切り取り(&T) + + + + &Copy + コピー(&C) + + + + &Paste + 貼り付け(&P) + + + + Clear + 消去 + + + + + Select All + すべてを選択 + + + + Q3TitleBar + + + System + システム + + + + Restore up + 元に戻す + + + + Minimize + 最小化 + + + + Restore down + 元に戻す + + + + Maximize + 最大化 + + + + Close + 閉じる + + + + Contains commands to manipulate the window + ウィンドウを操作するコマンドを含みます + + + + Puts a minimized back to normal + 最小化されたウィンドウを元のサイズに戻します + + + + Moves the window out of the way + ウィンドウを隠します + + + + Puts a maximized window back to normal + 最大化されたウィンドウを元のサイズに戻します + + + + Makes the window full screen + ウィンドウをフルスクリーンにします + + + + Closes the window + ウィンドウを閉じます + + + + Displays the name of the window and contains controls to manipulate it + ウィンドウの名前と、ウィンドウを操作するコントロールを表示します + + + + Q3ToolBar + + + More... + その他... + + + + Q3UrlOperator + + + + + The protocol `%1' is not supported + プロトコル '%1' はサポートされていません + + + + The protocol `%1' does not support listing directories + プロトコル '%1' はディレクトリのリスティングをサポートしていません + + + + The protocol `%1' does not support creating new directories + プロトコル '%1' は新しいディレクトリの作成をサポートしていません + + + + The protocol `%1' does not support removing files or directories + プロトコル '%1' はファイルまたはディレクトリの削除をサポートしていません + + + + The protocol `%1' does not support renaming files or directories + プロトコル '%1' はファイルまたはディレクトリの名前の変更をサポートしていません + + + + The protocol `%1' does not support getting files + プロトコル '%1' はファイルの取得をサポートしていません + + + + The protocol `%1' does not support putting files + プロトコル '%1' はファイルの送信をサポートしていません + + + + + The protocol `%1' does not support copying or moving files or directories + プロトコル '%1' はファイルまたはディレクトリのコピーまたは移動をサポートしていません + + + + + (unknown) + (不明) + + + + Q3Wizard + + + &Cancel + キャンセル(&C) + + + + < &Back + < 戻る(&B) + + + + &Next > + 次へ(&N) > + + + + &Finish + 完了(&F) + + + + &Help + ヘルプ(&H) + + + + QAbstractSocket + + + + + + Host not found + ホストが見つかりませんでした + + + + + + Connection refused + 接続が拒否されました + + + + Connection timed out + 接続がタイムアウトしました + + + + + + Operation on socket is not supported + 抽象ソケットクラスでのソケットのエラー + このソケットへのこの操作はサポートされていません + + + + Socket operation timed out + ソケット操作がタイムアウトしました + + + + Socket is not connected + ソケットが接続されていません + + + + Network unreachable + ネットワークへ到達できません + + + + QAbstractSpinBox + + + &Step up + 上(&S) + + + + Step &down + 下(&D) + + + + &Select All + すべてを選択(&S) + + + + QApplication + + + Activate + アクティブに + + + + Activates the program's main window + メインウィンドウをアクティブにする + + + + Executable '%1' requires Qt %2, found Qt %3. + 実行可能ファイル '%1' には Qt %2 が必要です。Qt %3 が見つかりました。 + + + + Incompatible Qt Library Error + 互換性のないQtライブラリエラー + + + + QT_LAYOUT_DIRECTION + Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout. + LTR + + + + QAxSelect + + + Select ActiveX Control + ActiveX Control を選択 + + + + OK + OK + + + + &Cancel + キャンセル(&C) + + + + COM &Object: + COM オブジェクト(&O): + + + + QCheckBox + + + Uncheck + 選択解除 + + + + Check + 選択 + + + + Toggle + 反転 + + + + QColorDialog + + + Hu&e: + 色相(&E): + + + + &Sat: + 彩度(&S): + + + + &Val: + 明度(&V): + + + + &Red: + 赤(&R): + + + + &Green: + 緑(&G): + + + + Bl&ue: + 青(&U): + + + + A&lpha channel: + アルファチャネル(&L): + + + + Select Color + + + + + &Basic colors + 基本的なカラー(&B) + + + + &Custom colors + カスタムカラー(&C) + + + &Define Custom Colors >> + カスタムカラーの定義(&D) >> + + + OK + OK + + + Cancel + キャンセル + + + + &Add to Custom Colors + カスタムカラーに追加(&A) + + + Select color + カラーの選択 + + + + QComboBox + + + + Open + オープン + + + + False + + + + + True + + + + + Close + 閉じる + + + + QCoreApplication + + + %1: key is empty + QSystemSemaphore + %1: キーが空です + + + + %1: unable to make key + QSystemSemaphore + %1: キーを作成できません + + + + %1: ftok failed + QSystemSemaphore + %1: fork に失敗しました + + + + QDB2Driver + + + Unable to connect + 接続できません + + + + Unable to commit transaction + トランザクションをコミットできません + + + + Unable to rollback transaction + トランザクションをロールバックできません + + + + Unable to set autocommit + オートコミットを設定できません + + + + QDB2Result + + + + Unable to execute statement + ステートメントを実行できません + + + + Unable to prepare statement + プリペアステートメントを使えません + + + + Unable to bind variable + 変数をバインドできません + + + + Unable to fetch record %1 + レコード %1 をフェッチできません + + + + Unable to fetch next + 次のレコードをフェッチできません + + + + Unable to fetch first + 最初のレコードをフェッチできません + + + + QDateTimeEdit + + + AM + AM + + + + am + am + + + + PM + PM + + + + pm + pm + + + + QDial + + + QDial + ダイヤル + + + + SpeedoMeter + スピードメータ + + + + SliderHandle + スライダハンドル + + + + QDialog + + + What's This? + ヒント? + + + + Done + 終了 + + + + QDialogButtonBox + + + + + OK + OK + + + + Cancel + キャンセル + + + + Apply + 適用 + + + + Ignore + 無視 + + + + Retry + 再試行 + + + + Abort + 中止 + + + + Help + ヘルプ + + + + Save + 保存 + + + + &Save + 保存(&S) + + + + Open + オープン + + + + &Cancel + キャンセル(&C) + + + + Close + 閉じる + + + + &Close + 閉じる(&C) + + + + Reset + リセット + + + + Don't Save + 保存しない + + + + Close without Saving + 保存せずに閉じる + + + + Discard + 変更を破棄 + + + + &Yes + はい(&Y) + + + + Yes to &All + 全てにはい(&A) + + + + &No + いいえ(&N) + + + + N&o to All + 全てにいいえ(&O) + + + + Save All + すべて保存 + + + + Restore Defaults + デフォルトに戻す + + + + &OK + OK(&O) + + + + QDirModel + + + Name + 名前 + + + + Size + サイズ + + + + Date Modified + 更新日 + + + + Kind + Match OS X Finder + 種類 + + + + Type + All other platforms + タイプ + + + + QDockWidget + + + Close + 閉じる + + + + Dock + ドック + + + + Float + フロート + + + + QDoubleSpinBox + + + More + 増やす + + + + Less + 減らす + + + + QErrorMessage + + + Debug Message: + デバッグメッセージ: + + + + Warning: + 警告: + + + + Fatal Error: + 致命的なエラー: + + + + &Show this message again + 次回もこのメッセージを表示する(&S) + + + + &OK + OK(&O) + + + + QFile + + + + Destination file exists + 新しい名前のファイルは既に存在します + + + + Cannot remove source file + 元のファイルを削除できません + + + + Cannot open %1 for input + コピー元ファイル %1 を読めません + + + + Cannot open for output + コピー先のファイルをオープンできません + + + + Failure to write block + 書き込みに失敗しました + + + + Cannot create %1 for output + コピー先として %1 を作成できません + + + + QFileDialog + + + + All Files (*) + すべてのファイル(*) + + + + Directories + ディレクトリ + + + + + Directory: + ディレクトリ: + + + + + File &name: + ファイル名(&N): + + + + + + + &Open + オープン(&O) + + + + + &Save + 保存(&S) + + + + Open + オープン + + + Save + 保存 + + + +File not found. +Please verify the correct file name was given + +ファイルが見つかりません。 +正しいファイル名が入力されたかどうか確認してください + + + + %1 already exists. +Do you want to replace it? + %1 はすでに存在します。 +置き換えますか? + + + + %1 +File not found. +Please verify the correct file name was given. + %1 +ファイルが見つかりません。 +正しいファイル名が入力されたかどうか確認してください。 + + + + My Computer + マイ コンピュータ + + + + + %1 +Directory not found. +Please verify the correct directory name was given. + %1 +ディレクトリが見つかりません。 +正しいディレクトリ名が入力されたかどうか確認してください。 + + + Sort + ソート + + + + &Rename + 名前の変更(&R) + + + + &Delete + 削除(&D) + + + &Reload + リロード(&R) + + + Sort by &Name + 名前順にソート(&N) + + + Sort by &Size + サイズ順にソート(&S) + + + Sort by &Date + 日付順にソート(&D) + + + &Unsorted + ソート解除(&U) + + + + Show &hidden files + 隠しファイルの表示(&H) + + + + + Back + 戻る + + + + + Parent Directory + 親ディレクトリ + + + + + Create New Folder + 新しいフォルダの作成 + + + + + List View + 一覧表示 + + + + + Detail View + 詳細表示 + + + + + Look in: + 検索する場所: + + + + + Files of type: + ファイルの種類: + + + + Drive + ドライブ + + + + + File + ファイル + + + + File Folder + Match Windows Explorer + ファイルフォルダ + + + + Folder + All other platforms + フォルダ + + + + Alias + Mac OS X Finder + エイリアス + + + + Shortcut + All other platforms + ショートカット + + + + Unknown + 不明 + + + + All Files (*.*) + すべてのファイル(*.*) + + + + Save As + 名前を付けて保存 + + + Open + オープン + + + Select a Directory + ディレクトリを選択 + + + + '%1' is write protected. +Do you want to delete it anyway? + '%1' は書き込みが禁止されています。 +本当に削除しますか? + + + + Are sure you want to delete '%1'? + '%1' を本当に削除しますか? + + + + Could not delete directory. + ディレクトリを削除できませんでした。 + + + + Find Directory + ディレクトリの検索 + + + + Show + 表示 + + + + &New Folder + 新しいフォルダ(&N) + + + + + &Choose + 選択(&C) + + + + New Folder + 新しいフォルダ + + + + Recent Places + 履歴 + + + + + Forward + 進む + + + + Remove + 削除 + + + + QFileSystemModel + + + Name + 名前 + + + + Size + サイズ + + + + Date Modified + 更新日 + + + + Kind + Match OS X Finder + 種類 + + + + Type + All other platforms + タイプ + + + + + %1 TB + %1 TB + + + + + %1 GB + %1 GB + + + + + %1 MB + %1 MB + + + + + %1 KB + %1 KB + + + + + %1 bytes + %1 バイト + + + + Invalid filename + 無効なファイル名 + + + + <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. + <b>ファイル名 "%1" は使用できません。</b><p>名前を短くしたり、アクセント記号などを削除して再度試してください。 + + + + My Computer + マイ コンピュータ + + + + Computer + コンピュータ + + + + QFontDatabase + + + + Normal + ここはどう訳すべきか... + 明朝 + + + + + + Bold + ゴシック + + + + + Demi Bold + Demi Bold + + + + + + Black + 太字 + + + + Demi + Demi + + + + + Light + 細字 + + + + + Italic + イタリック + + + + + Oblique + 斜体 + + + + Any + すべて + + + + Latin + ラテン + + + + Greek + ギリシャ + + + + Cyrillic + キリル + + + + Armenian + アルメニア + + + + Hebrew + ヘブライ + + + + Arabic + アラビア + + + + Syriac + シリア + + + + Thaana + ターナ + + + + Devanagari + デーヴァナーガリー + + + + Bengali + ベンガル + + + + Gurmukhi + グルムキー + + + + Gujarati + グジャラート + + + + Oriya + オリヤー + + + + Tamil + タミル + + + + Telugu + テルグ + + + + Kannada + カンナダ + + + + Malayalam + マラヤーラム + + + + Sinhala + シンハラ + + + + Thai + タイ + + + + Lao + ラーオ + + + + Tibetan + チベット + + + + Myanmar + ビルマ + + + + Georgian + グルジア + + + + Khmer + クメール + + + + Simplified Chinese + 簡体中国 + + + + Traditional Chinese + 繁体中国 + + + + Japanese + 日本 + + + + Korean + ハングル + + + + Vietnamese + ベトナム + + + + Symbol + 記号 + + + + Ogham + オガム + + + + Runic + ルーン + + + + QFontDialog + + + &Font + フォント(&F) + + + + Font st&yle + フォントスタイル(&Y) + + + + &Size + サイズ(&S) + + + + Effects + 文字飾り + + + + Stri&keout + 取り消し線(&K) + + + + &Underline + 下線(&U) + + + + Sample + サンプル + + + + Wr&iting System + 言語(&I) + + + + + Select Font + フォントの選択 + + + + QFtp + + + + Not connected + 未接続です + + + + + Host %1 not found + ホスト %1 が見つかりませんでした + + + + + Connection refused to host %1 + ホスト %1 への接続が拒否されました + + + + Connection timed out to host %1 + ホスト %1 への接続がタイムアウトしました + + + + + + Connected to host %1 + ホスト %1 に接続しました + + + + + Connection refused for data connection + データ接続のための接続が拒否されました + + + + + + + Unknown error + 不明なエラー + + + + + Connecting to host failed: +%1 + ホストへの接続に失敗しました: +%1 + + + + + Login failed: +%1 + ログインに失敗しました: +%1 + + + + + Listing directory failed: +%1 + ディレクトリのリストに失敗しました: +%1 + + + + + Changing directory failed: +%1 + ディレクトリの変更に失敗しました: +%1 + + + + + Downloading file failed: +%1 + ファイルのダウンロードに失敗しました: +%1 + + + + + Uploading file failed: +%1 + ファイルのアップロードに失敗しました: +%1 + + + + + Removing file failed: +%1 + ファイルの削除に失敗しました: +%1 + + + + + Creating directory failed: +%1 + ディレクトリの作成に失敗しました: +%1 + + + + + Removing directory failed: +%1 + ディレクトリの削除に失敗しました: +%1 + + + + + + Connection closed + 接続が閉じられました + + + + Host %1 found + ホスト %1 が見つかりました + + + + Connection to %1 closed + %1 への接続が閉じられました + + + + Host found + ホストが見つかりました + + + + Connected to host + ホストに接続しました + + + + QHostInfo + + + Unknown error + 不明なエラー + + + + QHostInfoAgent + + + + + + + + + + Host not found + ホストが見つかりません + + + + + + + Unknown address type + 不明なアドレス型です + + + + + + Unknown error + 不明なエラー + + + + QHttp + + + HTTPS connection requested but SSL support not compiled in + HTTPSによる接続が要求されましたが、SSLのサポートがコンパイル時に組み込まれていないため、接続できません + + + + + + + Unknown error + 不明なエラー + + + + + Request aborted + 要求が中止されました + + + + + No server set to connect to + 接続が設定されているサーバがありません + + + + + Wrong content length + コンテンツの長さが正しくありません + + + + + Server closed connection unexpectedly + サーバの接続が予期せず閉じられました + + + + Unknown authentication method + 非対応の認証方法が要求されました + + + + Error writing response to device + デバイスへの書き込み時にエラーが発生しました + + + + + Connection refused + 接続が拒否されました + + + + + + Host %1 not found + ホスト %1 が見つかりませんでした + + + + + + + HTTP request failed + HTTP要求に失敗しました + + + + + Invalid HTTP response header + 無効なHTTP応答ヘッダです + + + + + + + Invalid HTTP chunked body + 無効なHTTPチャンクドボディです + + + + Host %1 found + ホスト %1 が見つかりました + + + + Connected to host %1 + ホスト %1 に接続しました + + + + Connection to %1 closed + %1 への接続が閉じられました + + + + Host found + ホストが見つかりました + + + + Connected to host + ホストに接続しました + + + + + Connection closed + 接続が閉じられました + + + + Proxy authentication required + プロキシーの認証が必要です + + + + Authentication required + 認証が必要です + + + + Connection refused (or timed out) + 接続が拒否されたか、タイムアウトしました + + + + Proxy requires authentication + プロキシーの認証が必要です + + + + Host requires authentication + ホストの認証が必要です + + + + Data corrupted + データが破損しています + + + + Unknown protocol specified + 未対応のプロトコルです + + + + SSL handshake failed + SSLのハンドシェークに失敗しました + + + + QHttpSocketEngine + + + Did not receive HTTP response from proxy + プロキシーからHTTPレスポンスを受信できませんでした + + + + Error parsing authentication request from proxy + プロキシーからの認証要求のパースに失敗しました + + + + Authentication required + 認証が必要です + + + + Proxy denied connection + プロキシーが接続を拒否しました + + + + Error communicating with HTTP proxy + HTTP プロキシーとの通信にて、エラーが発生しました + + + + Proxy server not found + プロキシーサーバが見つかりません + + + + Proxy connection refused + プロキシーが接続を拒否しました + + + + Proxy server connection timed out + プロキシーとの接続がタイムアウトしました + + + + Proxy connection closed prematurely + プロキシーの接続が通信の終了前に切断されました + + + + QIBaseDriver + + + Error opening database + データベースのオープンでエラーが発生しました + + + + Could not start transaction + トランザクションを開始できませんでした + + + + Unable to commit transaction + トランザクションをコミットできません + + + + Unable to rollback transaction + トランザクションをロールバックできません + + + + QIBaseResult + + + Unable to create BLOB + バイナリラージオブジェクトを作成できません + + + + Unable to write BLOB + バイナリラージオブジェクトを書き込めません + + + + Unable to open BLOB + バイナリラージオブジェクトをオープンできません + + + + Unable to read BLOB + バイナリラージオブジェクトを読み込めません + + + + + Could not find array + 配列が見つかりませんでした + + + + Could not get array data + 配列データを取得できませんでした + + + + Could not get query info + クエリー情報を取得できませんでした + + + + Could not start transaction + トランザクションを開始できませんでした + + + + Unable to commit transaction + トランザクションをコミットできません + + + + Could not allocate statement + ステートメントの領域を確保できませんでした + + + + Could not prepare statement + プリペアステートメントを使えませんでした + + + + + Could not describe input statement + INPUT ステートメントの情報を取得できませんでした + + + + Could not describe statement + ステートメントの情報を取得できませんでした + + + + Unable to close statement + ステートメントをクローズできません + + + + Unable to execute query + クエリーを実行できません + + + + Could not fetch next item + 次のレコードをフェッチできませんでした + + + + Could not get statement info + ステートメントの情報を取得できませんでした + + + + QIODevice + + + Permission denied + 許可されていません + + + + Too many open files + 開かれたファイルが多すぎます + + + + No such file or directory + そのようなファイルやディレクトリはありません + + + + No space left on device + デバイスの残り容量がありません + + + + Unknown error + 不明なエラー + + + + QInputContext + + + XIM + XIM + + + + XIM input method + XIM 入力メソッド + + + + Windows input method + Windows 入力メソッド + + + + Mac OS X input method + Mac OS X 入力メソッド + + + + QInputDialog + + + Enter a value: + 数値を入力: + + + + QLibrary + + + Could not mmap '%1': %2 + '%1' をメモリにマッピングできませんでした: %2 + + + + Plugin verification data mismatch in '%1' + '%1' でプラグイン検証データが一致しません + + + + Could not unmap '%1': %2 + '%1' のマッピングを解除できませんでした: %2 + + + + The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] + プラグイン '%1' は、互換性のない Qt ライブラリを使用しています。(%2.%3.%4) [%5] + + + + The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" + プラグイン '%1' は、互換性のない Qt ライブラリを使用しています。ビルドキー "%2" が必要ですが、"%3" しかありません + + + + Unknown error + 不明なエラー + + + QLibrary::load_sys: Cannot load %1 (%2) + QLibrary::load_sys: %1 をロードできません (%2) + + + QLibrary::unload_sys: Cannot unload %1 (%2) + QLibrary::unload_sys: %1 をアンロードできません (%2) + + + QLibrary::resolve_sys: Symbol "%1" undefined in %2 (%3) + QLibrary::resolve_sys: シンボル "%1" は %2 で定義されていません (%3) + + + + + The shared library was not found. + 共有ライブラリがみつかりません。 + + + + The file '%1' is not a valid Qt plugin. + ファイル '%1' は Qt プラグインではありません。 + + + + The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) + プラグイン '%1' はこの Qt と互換性のないライブラリを使用しています。 (デバック版とリリース版のライブラリを同時に使用することはできません) + + + + + Cannot load library %1: %2 + ライブラリ '%1' を読み込むことができません: %2 + + + + + Cannot unload library %1: %2 + ライブラリ %1 を解放することができません: %2 + + + + + Cannot resolve symbol "%1" in %2: %3 + '%2'に含まれる識別子 "%1" を解決できません: %3 + + + + QLineEdit + + + &Undo + 元に戻す(&U) + + + + &Redo + やり直す(&R) + + + + Cu&t + 切り取り(&T) + + + + &Copy + コピー(&C) + + + + &Paste + 貼り付け(&P) + + + + Delete + 削除 + + + + Select All + すべてを選択 + + + + QLocalServer + + + + %1: Name error + %1: 名前の解決に失敗 + + + + %1: Permission denied + %1: 許可されていません + + + + %1: Address in use + %1: アドレスは既に使用されています + + + + %1: Unknown error %2 + %1: 未知のエラー %2 + + + + QLocalSocket + + + + %1: Connection refused + %1: 接続が拒否されました + + + + + %1: Remote closed + %1: リモートにより接続が閉じられました + + + + + + + %1: Invalid name + %1: 無効な名前です + + + + + %1: Socket access error + %1: ソケットアクセスのエラーです + + + + + %1: Socket resource error + %1: ソケットリソースのエラーです + + + + + %1: Socket operation timed out + %1: ソケット操作がタイムアウトしました + + + + + %1: Datagram too large + %1: データグラムが大きすぎます + + + + + + %1: Connection error + %1: 接続のエラーが発生しました + + + + + %1: The socket operation is not supported + %1: そのソケット操作はサポートされていません + + + + %1: Unknown error + %1: 未知のエラーです + + + + + %1: Unknown error %2 + %1: 未知のエラー %2 + + + + QMYSQLDriver + + + Unable to open database ' + データベースをオープンできません ' + + + + Unable to connect + 接続できません + + + + Unable to begin transaction + トランザクションを開始できません + + + + Unable to commit transaction + トランザクションをコミットできません + + + + Unable to rollback transaction + トランザクションをロールバックできません + + + + QMYSQLResult + + + Unable to fetch data + データをフェッチできません + + + + Unable to execute query + クエリーを実行できません + + + + Unable to store result + 実行結果を記録できません + + + + + Unable to prepare statement + プリペアステートメントを使えません + + + + Unable to reset statement + ステートメントをリセットできません + + + + Unable to bind value + 値をバインドできません + + + + Unable to execute statement + ステートメントを実行できません + + + + + Unable to bind outvalues + 出力値をバインドできません + + + + Unable to store statement results + ステートメントの実行結果を記録できません + + + + Unable to execute next query + 次のクエリーを実行できません + + + + Unable to store next result + 次の結果を記録できません + + + + QMdiArea + + + (Untitled) + (タイトルなし) + + + + QMdiSubWindow + + + %1 - [%2] + %1 - [%2] + + + + Close + 閉じる + + + + Minimize + 最小化 + + + + Restore Down + 元に戻す + + + + &Restore + 元に戻す(&R) + + + + &Move + 移動(&M) + + + + &Size + サイズ(&S) + + + + Mi&nimize + 最小化(&N) + + + + Ma&ximize + 最大化(&X) + + + + Stay on &Top + 常に手前に表示(&T) + + + + &Close + 閉じる(&C) + + + + - [%1] + - [%1] + + + + Maximize + 最大化 + + + + Unshade + たぶん選択・非選択状態のウィンドウのことだと思うけど。fvwmなどのx11で使われている用語 + 非選択 + + + + Shade + 選択 + + + + Restore + 元に戻す + + + + Help + ヘルプ + + + + Menu + メニュー + + + + QMenu + + + + Close + 閉じる + + + + + Open + オープン + + + + + + Execute + 実行 + + + + QMenuBar + + About Qt + Qt について + + + + QMessageBox + + + Help + ヘルプ + + + + + + + OK + OK + + + <h3>About Qt</h3>%1<p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qtopia Core.</p><p>Qt is a Trolltech product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p> + <h3>Qt について</h3>%1 +<p>QtはクロスプラットフォームのC++ アプリケーション開発ツールキットです。</p> +<p>Qt は MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, 商用のUnix派生版でソースコード互換を実現します。また、Qtopia Coreのように、内蔵デバイスでも利用可能です。</p> +<p>QtはTrolltechの商品です。詳細は<tt>http://qt.nokia.com/</tt>を参照してください。</p> + + + <p>This program uses Qt version %1.</p> + <p>このプログラムは Qt バージョン %1 を使用しています。</p> + + + <p>This program uses Qt Open Source Edition version %1.</p><p>Qt Open Source Edition is intended for the development of Open Source applications. You need a commercial Qt license for development of proprietary (closed source) applications.</p><p>Please see <a href="http://qt.nokia.com/company/model/">qt.nokia.com/company/model/</a> for an overview of Qt licensing.</p> + <p>このプログラムは Qt オープンソース版バージョン %1 を使用しています。</p> +<p>Qt オープンソース版はオープンソースのアプリケーションの開発用です。ソースコードを公開しない商用アプリケーションを開発するには商用版のライセンスが必要です。</p><p>Qtのライセンスについては<tt>http://qt.nokia.com/company/model.html</tt>を参照してください。</p> + + + + About Qt + Qt について + + + + Show Details... + 詳細を表示... + + + + Hide Details... + 詳細を隠す... + + + + <h3>About Qt</h3><p>This program uses Qt version %1.</p><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&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.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p>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.</p><p>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.</p><p>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.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p> + <h3>Qtについて</h3> +<p>このプログラムは Qt バージョン %1 を使用しています。</p> +<p>Qt は、クロスプラットホームのアプリケーション開発に使用される C++ のツールキットです。</p> +<p>Qt は、 MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, そして多数の Unix 系OS環境に対して、単一のソースからバイナリを生成します。 +また、 Linux および Windows CE を元とした組み込み環境にも対応しています。</p> +<p>Qt は様々なユーザの要望に応じるために、3つの異なるライセンスで提供されています。</p> +<p> +Qt 商用ライセンスは、プロプライエタリまたは商用ソフトウェアに適用できます。 +この場合は、他者とのソースコードの共有を拒否し、 GNU LGP バージョン 2.1 または GNU GPL バージョン 3.0 を許容できないソフトウェアにおいて Qt を使用できます。 +</p> +<p> +Qt GNU LGPL バージョン 2.1 ライセンスは、プロプライエタリまたはオープンソースソフトウェアに適用できます。 +この場合は、 GNU LGPL バージョン 2.1 に従う必要があります。 +</p> +<p> +Qt GNU General Public License バージョン 3.0 ライセンスは、GNU GPL バージョン 3.0 または GPL 3.0 と互換性のあるライセンスを採用しているソフトウェアに適用されます。 +この場合は、GNU GPL バージョン 3.0 に従う必要があります。 +</p> +<p> +ライセンスの詳細については、<a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> +を参照してください。</p> +<p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p> +<p>Qt は Nokia の製品です。詳細については<a href="http://qt.nokia.com/">qt.nokia.com</a> を参照してください。</p> +<p> +訳注: ライセンスはここにある翻訳は参考のためのものであり、オリジナルの(英語の)ものが正式なものとなります。 +</p> + + + + QMultiInputContext + + + Select IM + インプットメソッドを選択 + + + + QMultiInputContextPlugin + + + Multiple input method switcher + 複数のインプットメソッドを切り替え + + + + Multiple input method switcher that uses the context menu of the text widgets + テキストウィジェットのコンテキストメニューを使った複数のインプットメソッドの切り替えです + + + + QNativeSocketEngine + + + Unable to initialize non-blocking socket + 非ブロック型ソケットを初期化できません + + + + Unable to initialize broadcast socket + ブロードキャストソケットを初期化できません + + + + Attempt to use IPv6 socket on a platform with no IPv6 support + IPv6 がサポートされていないプラットフォームで IPv6 ソケットを使用しようとしています + + + + The remote host closed the connection + リモートホストは接続を閉じました + + + + Network operation timed out + ネットワーク操作がタイムアウトしました + + + + Out of resources + リソースが足りません + + + + Unsupported socket operation + サポートされていないソケット操作です + + + + Protocol type not supported + プロトコル型がサポートされていません + + + + Invalid socket descriptor + 無効なソケット記述子です + + + + Host unreachable + ホストへ到達できません + + + + Network unreachable + ネットワークへ到達できません + + + + Permission denied + 許可されていません + + + + Connection timed out + 接続がタイムアウトしました + + + + Connection refused + 接続を拒否されました + + + + The bound address is already in use + バインドアドレスは既に使われています + + + + The address is not available + そのアドレスは使用できません + + + + The address is protected + そのアドレスへのアクセス権がありません + + + + Datagram was too large to send + データグラムが大き過ぎて送信できませんでした + + + + Unable to send a message + メッセージを送信できません + + + + Unable to receive a message + メッセージを受信できません + + + + Unable to write + 書き込みができません + + + + Network error + ネットワークエラー + + + + Another socket is already listening on the same port + 別のソケットが同じポートで既に待ち受けています + + + + Operation on non-socket + 非ソケットに対する操作です + + + + Unknown error + 不明なエラー + + + + The proxy type is invalid for this operation + このプロキシーは、この操作に対応していません + + + + QNetworkAccessCacheBackend + + + Error opening %1 + オープンのエラー %1 + + + + QNetworkAccessDebugPipeBackend + + + Write error writing to %1: %2 + %1 への書き込み時にエラーが発生しました: %2 + + + + QNetworkAccessFileBackend + + + Request for opening non-local file %1 + 非ローカルファイル %1 をオープンするよう要求されましたが、ローカルファイルのみオープンできます + + + + Error opening %1: %2 + %1 をオープンする時にエラーが発生しました: %2 + + + + Write error writing to %1: %2 + %1 への書き込み時にエラーが発生しました: %2 + + + + Cannot open %1: Path is a directory + %1 をオープンできません。指定されたパスはディレクトリです + + + + Read error reading from %1: %2 + %1 を読み込み時にエラーが発生しました: %2 + + + + QNetworkAccessFtpBackend + + + No suitable proxy found + 適切なプロキシーがみつかりません + + + + Cannot open %1: is a directory + %1 をオープンできません。指定されたパスはディレクトリです + + + + Logging in to %1 failed: authentication required + %1 へのログインに失敗しました。認証が必要です + + + + Error while downloading %1: %2 + %1 をダウンロード中にエラーが発生しました: %2 + + + + Error while uploading %1: %2 + %1 をアップロード中にエラーが発生しました: %2 + + + + QNetworkAccessHttpBackend + + + No suitable proxy found + 適切なプロキシーがみつかりません + + + + QNetworkReply + + + Error downloading %1 - server replied: %2 + %1 をダウンロード中にエラーが発生しました。サーバの返答: %2 + + + + Protocol "%1" is unknown + プロトコル "%1" はサポートされていません + + + + QNetworkReplyImpl + + + + Operation canceled + 操作はキャンセルされました + + + + QOCIDriver + + + Unable to initialize + QOCIDriver + 初期化できません + + + + Unable to logon + ログオンできません + + + + Unable to begin transaction + トランザクションを開始できません + + + + Unable to commit transaction + トランザクションをコミットできません + + + + Unable to rollback transaction + トランザクションをロールバックできません + + + + QOCIResult + + + + + Unable to bind column for batch execute + バッチ処理用にフィールドをバインドできません + + + + Unable to execute batch statement + バッチステートメントを実行できません + + + + Unable to goto next + 次のレコードへ進めません + + + + Unable to alloc statement + ステートメントの領域を確保できません + + + + Unable to prepare statement + プリペアステートメントを使えません + + + + Unable to bind value + 値をバインドできません + + + Unable to execute select statement + SELECT ステートメントを実行できません + + + + Unable to execute statement + ステートメントを実行できません + + + + QODBCDriver + + + Unable to connect + 接続できません + + + + Unable to connect - Driver doesn't support all needed functionality + 接続できません - ドライバは全ての必要な機能をサポートしていません + + + + Unable to disable autocommit + オートコミットを無効にできません + + + + Unable to commit transaction + トランザクションをコミットできません + + + + Unable to rollback transaction + トランザクションをロールバックできません + + + + Unable to enable autocommit + オートコミットを有効にできません + + + + QODBCResult + + + + Unable to execute statement + ステートメントを実行できません + + + + Unable to fetch next + 次のレコードをフェッチできません + + + + Unable to prepare statement + プリペアステートメントを使えません + + + + Unable to bind variable + 変数をバインドできません + + + + + QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration + QODBCResult::reset: ステートメントの属性として 'SQL_CURSOR_STATUS' を設定できません。ODBC ドライバの構成をチェックしてください + + + + + + Unable to fetch last + リストを取得できません + + + + Unable to fetch + フェッチできません + + + + Unable to fetch first + 最初のレコードをフェッチできません + + + + Unable to fetch previous + 前のレコードをフェッチできません + + + + QObject + + False + False + + + True + True + + + + Home + ホーム + + + + Operation not supported on %1 + %1 ではこの操作はサポートされていません + + + + Invalid URI: %1 + 無効なURIです: %1 + + + + Socket error on %1: %2 + %1 のソケットにおいてエラーが発生しました: %2 + + + + Remote host closed the connection prematurely on %1 + リモートホスト %1 との接続が通信の終了前に切断されました + + + + + No host name given + ホストネームが与えられていません + + + + QPPDOptionsModel + + + Name + 名前 + + + + Value + + + + + QPSQLDriver + + + Unable to connect + 接続できません + + + + Could not begin transaction + トランザクションを開始できませんでした + + + + Could not commit transaction + トランザクションをコミットできませんでした + + + + Could not rollback transaction + トランザクションをロールバックできませんでした + + + + Unable to subscribe + subscribe できません + + + + Unable to unsubscribe + unsubscribe できません + + + + QPSQLResult + + + Unable to create query + クエリーを作成できません + + + + Unable to prepare statement + プリペアステートメントを使えません + + + + QPageSetupWidget + + + Centimeters (cm) + センチメートル (cm) + + + + Millimeters (mm) + ミリメートル (mm) + + + + Inches (in) + インチ (in) + + + + Points (pt) + ポイント (pt) + + + + Form + 書式設定 + + + + Paper + 用紙 + + + + Page size: + ページサイズ: + + + + Width: + 幅: + + + + Height: + 高さ: + + + + Paper source: + 給紙装置: + + + + Orientation + 印刷方向 + + + + Portrait + 縦 (ポートレート) + + + + Landscape + 横 (ランドスケープ) + + + + Reverse landscape + 横 反転 (リバースランドスケープ) + + + + Reverse portrait + 縦 反転 (リバースポートレート) + + + + Margins + 余白 + + + + top margin + 上端余白 + + + + left margin + 左端余白 + + + + right margin + 右端余白 + + + + bottom margin + 下端余白 + + + + QPatternist::QtXmlPatterns + + + An %1-attribute with value %2 has already been declared. + 属性 %1 の値 %2 は既に宣言されています。 + + + + An %1-attribute must have a valid %2 as value, which %3 isn't. + 属性 %1 の値は %2 の型でなければなりませんが、 %3 が指定されました。 + + + + %1 is an unsupported encoding. + %1 はサポートされていないエンコーディングです。 + + + + %1 contains octets which are disallowed in the requested encoding %2. + エンコーディング %2 では許可されていないオクテットが %1 に含まれています。 + + + + The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. + %2 で使用されているエンコード %3 では、コードポイント %1 は有効な XML 表現ではありません。 + + + + Network timeout. + ネットワーク接続がタイムアウトしました。 + + + + Element %1 can't be serialized because it appears outside the document element. + エレメント %1 はシリアライズできません。このドキュメントの範囲を越えるエレメントを含んでいます。 + + + + Attribute %1 can't be serialized because it appears at the top level. + 属性 %1 はシリアライズできません。トップレベルに現れているためです。 + + + + Year %1 is invalid because it begins with %2. + %1 年はむこうです。%2 で始まっています。 + + + + Day %1 is outside the range %2..%3. + %1 日は、有効な範囲 %2..%3 を逸脱しています。 + + + + Month %1 is outside the range %2..%3. + %1 月は、有効な範囲 %2..%3 を逸脱しています。 + + + + Overflow: Can't represent date %1. + オーバーフロー: 日付 %1 を再現できません。 + + + + Day %1 is invalid for month %2. + %2 月には、%1 日は存在しません。 + + + + Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; + 24:%1:%2.%3 は無効です。24時0分0秒のみ使用できます + + + + Time %1:%2:%3.%4 is invalid. + 時刻 %1時%2分%3.%4秒は無効です。 + + + + Overflow: Date can't be represented. + オーバーフロー: 日付を再現できません。 + + + + + At least one component must be present. + 年、月、日のうちいずれかを指定しなければなりません。 + + + + At least one time component must appear after the %1-delimiter. + %1 の後には、時刻を指定しなければなりません。 + + + + No operand in an integer division, %1, can be %2. + ゼロ除算? NaN? + 整数の除算のためのオペランドが不足しています。%1 は %2 でなければなりません。 + + + + The first operand in an integer division, %1, cannot be infinity (%2). + 整数の除算における最初のオペランド %1 を認識できません (%2)。 + + + + The second operand in a division, %1, cannot be zero (%2). + 整数の除算における二つ目のオペランド %1 はゼロであってはいけまん(%2)。 + + + + %1 is not a valid value of type %2. + %1 は、%2 の型に対して有効な値ではありません。 + + + + When casting to %1 from %2, the source value cannot be %3. + %2 から %1 への型変換に際しては、値 %3 は有効な値ではありません。 + + + + Integer division (%1) by zero (%2) is undefined. + 整数の除算において %1 をゼロ (%2) で割った結果は定義されていません。 + + + + Division (%1) by zero (%2) is undefined. + 除算において %1 をゼロ (%2) で割った結果は定義されていません。 + + + + Modulus division (%1) by zero (%2) is undefined. + 剰余を求めるに際し、%1 をゼロ (%2) で除した結果は定義されていません。 + + + + + Dividing a value of type %1 by %2 (not-a-number) is not allowed. + 型 %1 を非数 %2 (NaN) で除すことはできません。 + + + + Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. + 型 %1 を%2 または %3 (正または負のゼロ) で除することはできません。 + + + + Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. + 型 %1 を %2 または %3 (正または負のゼロ)で乗ずることはできません。 + + + + A value of type %1 cannot have an Effective Boolean Value. + 型 %1 は有効な論理型(bool)ではありません。 + + + + Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. + ?? + 論理型は、論理型以外の複数の値からなる計算によって求めることはできません。 + + + + Value %1 of type %2 exceeds maximum (%3). + 型 %2 の値 %1 は、上限 (%3) を越えています。 + + + + Value %1 of type %2 is below minimum (%3). + 型 %2 の値 %1 は、下限 (%3) を越えています。 + + + + A value of type %1 must contain an even number of digits. The value %2 does not. + 型 %1 の値は偶数個の十進数文字を必要とします。しかし、%2 はそうではありません。 + + + + %1 is not valid as a value of type %2. + 型 %2 に対して、値 %1 は有効ではありません。 + + + + Ambiguous rule match. + 曖昧なルールにマッチしました。 + + + + Operator %1 cannot be used on type %2. + 型 %2 に対して、オペレータ %1 は使用できません。 + + + + Operator %1 cannot be used on atomic values of type %2 and %3. + アトミックな型 %2 と %3 に対して、オペレータ %1 は使用できません。 + + + + The namespace URI in the name for a computed attribute cannot be %1. + computed attrib. ってなんてやくすのが適当かな。 + 結合された属性に対する名前空間のURIとして、%1 を使用することはできません。 + + + + The name for a computed attribute cannot have the namespace URI %1 with the local name %2. + 結合された属性の名前空間URI %1 は、ローカルな名前である %2 と併用できません。 + + + + Type error in cast, expected %1, received %2. + 型変換時のエラーです。望んでいた %1 ではなく、%2 になりました。 + + + + 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. + %1 またはそれを継承している型への型変換においては、元の値の型は同じ型か、リテラルな文字列である必要があります。型 %2 は許可されていません。 + + + + No casting is possible with %1 as the target type. + 目標とする型に %1 を型変換することはできません。 + + + + It is not possible to cast from %1 to %2. + 型 %1 を型 %2 に型変換することはできません。 + + + + Casting to %1 is not possible because it is an abstract type, and can therefore never be instantiated. + 型 %1 への型変換はできません。抽象型であり、インスタンス化することができないからです。 + + + + It's not possible to cast the value %1 of type %2 to %3 + 型 %2 の値 %1 を、型 %3 に型変換することはできません + + + + Failure when casting from %1 to %2: %3 + %1 を %2 に型変換することができません: %3 + + + + A comment cannot contain %1 + コメントが %1 を含むことはできません + + + + A comment cannot end with a %1. + コメントは %1 で終了することはできません。 + + + + No comparisons can be done involving the type %1. + 型 %1 に対して比較を行うことはできません。 + + + + Operator %1 is not available between atomic values of type %2 and %3. + オペレータ %1 は、アトミックな型である %2 と %3 には適用できません。 + + + + In a namespace constructor, the value for a namespace cannot be an empty string. + 名前空間のスントラクトにおいて、空白の文字列を名前空間の値として使用することはできません。 + + + + The prefix must be a valid %1, which %2 is not. + プレフィックスは %1 でなければなりません。%2 は無効です。 + + + + The prefix %1 cannot be bound. + プレフィックス %1 はバウンドできません。 + + + + Only the prefix %1 can be bound to %2 and vice versa. + プレフィックス %1 は、%2 にのみバウンドできます。逆も同じです。 + + + + An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. + ドキュメントノードの子として属性ノードを指定することはできません。属性 %1 は誤った場所にあります。 + + + + Circularity detected + 循環を検出しました + + + + A library module cannot be evaluated directly. It must be imported from a main module. + ライブラリモジュールを直接評価することはできません。メインモジュールからインポートする必要があります。 + + + + No template by name %1 exists. + テンプレート名 %1 は存在しません。 + + + + A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. + 型 %1 は述部として使用できません。数値型か、論理型である必要があります。 + + + + A positional predicate must evaluate to a single numeric value. + positional? + 述部は評価されたとき、単一の数値になるようにしなければなりません。 + + + + The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid. + ターゲットとしている名前は、%1 であってはなりません。%2 は無効です。 + + + + %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. + %1 はターゲットとして無効です。%2 である必要があります。例えば "%3" のようにです。 + + + + The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. + バスの末端であるリーフは、単一のノードかアトミックな値である必要があります。複数の型の組み合わせであってはいけません。 + + + + The data of a processing instruction cannot contain the string %1 + 処理中のデータは、以下の文字列を含んでいてはなりません: %1 + + + + No namespace binding exists for the prefix %1 + プレフィックス %1 にバインドされたネームスペースがありません + + + + No namespace binding exists for the prefix %1 in %2 + %2 におけるプレフィックス %1 にバインディングされたネームスペースが存在しません + + + + + %1 is an invalid %2 + 型 %2 に対し、値 %1 は無効です + + + + The parameter %1 is passed, but no corresponding %2 exists. + パラメータ %1 を処理しました。しかし、対応する %2 が存在しません。 + + + + The parameter %1 is required, but no corresponding %2 is supplied. + パメータ %1 が必要です。しかし、対応する %2 がありません。 + + + + %1 takes at most %n argument(s). %2 is therefore invalid. + + %1 は、最大で %n 個の引数をとることができます。%2 は無効です。 + + + + + %1 requires at least %n argument(s). %2 is therefore invalid. + + %1 は、少くとも %n 個の引数を必要とします。%2 は無効です。 + + + + + The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. + %1 への最初の引数は、型 %2 であってはなりません。数値型、xs:yerMonthDuration、xs:dayTimeDurationである必要があります。 + + + + The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + %1 への最初の引数は、型 %2 であってはなりません。%3, %4, %5 のいずれかである必要があります。 + + + + The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + %1 への二つ目の引数は、型 %2 であってはなりません。%3, %4, %5 のいずれかである必要があります。 + + + + %1 is not a valid XML 1.0 character. + %1 は XML 1.0 において有効な文字ではありません。 + + + + The first argument to %1 cannot be of type %2. + %1 への最初の引数は、型 %2 であってはなりません。 + + + + The root node of the second argument to function %1 must be a document node. %2 is not a document node. + %1 への二つ目の引数のルートノードは、ドキュメントノードでなければなりません。しかし、%2 はドキュメントノードではありません。 + + + + If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. + ゾーンオフセットってなに? xmlにそんなのあったっけ? + もし二つの値がゾーンオフセットをもつ場合、両者は同じゾーンオフセットでなければなりません。%1 と %2 は同一ではありません。 + + + + %1 was called. + %1 が呼ばれました。 + + + + %1 must be followed by %2 or %3, not at the end of the replacement string. + %1 の後には、%2 か %3 が続かなければなりません。 + + + + In the replacement string, %1 must be followed by at least one digit when not escaped. + 置換操作において、%1 には少くとも一文字以上の数値が続く必要があります(エスケープされている場合を除く)。 + + + + In the replacement string, %1 can only be used to escape itself or %2, not %3 + 置換操作において、%1 はそれ自身または %2 をエスケープする為にのみ使用できます。%3 に対しては使用できません + + + + %1 matches newline characters + %1 は改行文字(列)にマッチしました + + + + %1 and %2 match the start and end of a line. + %1 と %2 は、行の先頭と末尾にマッチしました。 + + + + Matches are case insensitive + マッチは大文字小文字を区別しません + + + + Whitespace characters are removed, except when they appear in character classes + CDATA? + 空白文字は削除されました。ただし、キャラクタークラスに属するものは除きます + + + + %1 is an invalid regular expression pattern: %2 + %1 は有効な正規表現ではありません。: %2 + + + + %1 is an invalid flag for regular expressions. Valid flags are: + %1 は正規表現において無効なフラグです。使用可能なフラグは次の通りです: + + + + If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. + もし、最初の引数が空白からなる文字列か、長さが0 (名前空間をともなわない)である場合、プレフィックスを指定することはできません。しかし、プレフィックスとして %1 が指定されています。 + + + + It will not be possible to retrieve %1. + %1 を取得することはできないかもしれません。 + + + + The default collection is undefined + デフォルトのコレクションが定義されていません + + + + %1 cannot be retrieved + %1 を取得できません + + + + The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). + つまり、空白の文字です、はどうでもいいよね。 + 正規化された表現 %1 はサポートされていません。サポートされている表現は、%2, %3, %4, %5 のみです。 + + + + A zone offset must be in the range %1..%2 inclusive. %3 is out of range. + ゾーンオフセットは、%1 から %2 の範囲である必要があります(境界を含む)。%3 は範囲外です。 + + + + %1 is not a whole number of minutes. + %1 は、分を現す値ではありません。 + + + + The URI cannot have a fragment + この URI はフラグメントをもつことはできません + + + + Required cardinality is %1; got cardinality %2. + カーディナリティ %1 が必要です。%2 ではありません。 + + + + The item %1 did not match the required type %2. + アイテム %1 は、要求された型 %2 にマッチしません。 + + + + Attribute %1 cannot appear on the element %2. Only the standard attributes can appear. + エレメント %2 に属性 %1 を指定することはできません。標準の属性のみが許可されています。 + + + + Attribute %1 cannot appear on the element %2. Only %3 is allowed, and the standard attributes. + エレメント %2 に属性 %1 を指定することはできません。%3 と標準の属性のみが許可されています。 + + + + Attribute %1 cannot appear on the element %2. Allowed is %3, %4, and the standard attributes. + エレメント %2 に属性 %1 を指定することはできません。%3, %4 と標準の属性のみが許可されています。 + + + + Attribute %1 cannot appear on the element %2. Allowed is %3, and the standard attributes. + エレメント %2 に %1 は指定できません。%3 と標準の属性のみが指定できます。 + + + + XSL-T attributes on XSL-T elements must be in the null namespace, not in the XSL-T namespace which %1 is. + XSLT エレメントに対するXSLT属性は、名前空間がnullでなければなりません。%1 は使用できません。 + + + + The attribute %1 must appear on element %2. + 属性 %1 は、エレメント %2 にのみ記述できます。 + + + + The element with local name %1 does not exist in XSL-T. + ローカル名 %1 のエレメントは、XSLTに存在しません。 + + + + The variable %1 is unused + 値 %1 は使用されませんでした + + + + A construct was encountered which only is allowed in XQuery. + XQuery でのみ許可されている construct に遭遇しました。 + + + + + %1 is an unknown schema type. + %1 はサポートされていないスキーマのタイプです。 + + + + A template by name %1 has already been declared. + テンプレート名 '%1' は、既に宣言されています。 + + + + %1 is not a valid numeric literal. + %1 は数値リテラルとして無効です。 + + + + Only one %1 declaration can occur in the query prolog. + クェリーのプロローグでは、%1 は一回のみ宣言できます。 + + + + The initialization of variable %1 depends on itself + 再帰? + 値 %1 の初期化は、それ自身に依存しています + + + + No variable by name %1 exists + 変数 %1 は存在しません + + + + Version %1 is not supported. The supported XQuery version is 1.0. + バージョン %1 はサポートされていません。XQuery バージョン 1.0 のみサポートされています。 + + + + The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. + エンコーディング '%1' は無効です。ラテン文字 (空白を除く) からなるもので、正規表現 '%2' にマッチするもののみ使用できます。 + + + + No function with signature %1 is available + シグネチャ %1 をもつ関数がみつかりません + + + + + A default namespace declaration must occur before function, variable, and option declarations. + 標準の名前空間の宣言は、関数、変数、オプションの宣言の前にしなければなりません。 + + + + Namespace declarations must occur before function, variable, and option declarations. + 名前空間の宣言は、関数、変数、オプションの宣言の前にしなければなりません。 + + + + Module imports must occur before function, variable, and option declarations. + モジュールのインポートは、関数、変数、オプションの宣言の前にしなければなりません。 + + + + The keyword %1 cannot occur with any other mode name. + キーワード %1 は、他の名をともなって使用することはできません。 + + + + The value of attribute %1 must of type %2, which %3 isn't. + 属性 '%1' の値として '%3' が指定されましたが、型 '%2' でなければなりません。 + + + + It is not possible to redeclare prefix %1. + プレフィックス '%1' を再定義することはできません。 + + + + The prefix %1 can not be bound. By default, it is already bound to the namespace %2. + プレフィックス '%1' はバウンドできません。デフォルトでは、それは既に名前空間 '%2' にバウンドされています。 + + + + Prefix %1 is already declared in the prolog. + プロローグ部において、プレフィックス '%1' はすでに宣言されています。 + + + + The name of an option must have a prefix. There is no default namespace for options. + オプションの名前はプレフィックスをもたなければなりません。このオプションに対するデフォルトの名前空間は存在しません。 + + + + The Schema Import feature is not supported, and therefore %1 declarations cannot occur. + このスキーマのインポート機能は使用できません。また、'%1' 宣言も使用できません。 + + + + The target namespace of a %1 cannot be empty. + 名前空間 '%1' は、空であってはなりません。 + + + + The module import feature is not supported + モジュールインポートの機能はサポートされていません + + + + A variable by name %1 has already been declared. + 名前 '%1' の変数は、すでに宣言されています。 + + + + No value is available for the external variable by name %1. + 外部変数 '%1' の値がみつかりません。 + + + + A stylesheet function must have a prefixed name. + スタイルシート関数は、プレフィックス名を持たなければなりません。 + + + + The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) + ユーザ定義の関数の名前空間は、空であってはなりません。(すでに定義されているプレフィックス '%1' が使用できます) + + + + The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. + 名前空間 '%1' は予約済です。ユーザ定義の関数では使用することはできません。プレフィックス '%2' が使用できます。 + + + + 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 + ライブラリモジュールで使用されている名前空間は、モジュールの名前空間と同一でなければなりません。つまり、'%2' ではなく、'%1' でなければなりません + + + + A function already exists with the signature %1. + シグネチャー '%1' の関数はすでに存在しています。 + + + + No external functions are supported. All supported functions can be used directly, without first declaring them as external + 外部関数はサポートされていません。すべてのサポートされている関数は、外部宣言をすることなく、直接使用することができます + + + + An argument by name %1 has already been declared. Every argument name must be unique. + 引数名 '%1' は既に宣言されています。すべての引数名はユニークである必要があります。 + + + + When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. + パターン一致の内側で関数 '%1' を使用する場合、引数はリテラルな文字列を参照する値でなければなりません。 + + + + In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. + XSL-T パターンマッチングにおいて、関数 '%1' の最初の引数は、リテラルな文字列でなければなりません。 + + + + In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. + variable ref? + XSL-T パターンマッチングにおいて、関数 '%1' への最初の引数は、リテラルか変数でなければなりません。 + + + + In an XSL-T pattern, function %1 cannot have a third argument. + XSL-T パターンにおいて、関数 '%1' は三つの引数をもつことはできません。 + + + + In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. + XSL-T パターンマッチングにおいて、関数 '%1' と '%2' のみ使用できます。'%3' は使用できません。 + + + + In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. + XSL-T パターンにおいて、axis %1 は使用できません。%2 または %3 のみ使用できます。 + + + + %1 is an invalid template mode name. + %1 はテンプレートモジュール名として無効です。 + + + + The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. + for 構文において使用する変数は、場所に関する変数とは異なる必要があります。つまり、'%1' が重複して使用されています。 + + + + The Schema Validation Feature is not supported. Hence, %1-expressions may not be used. + スキーマの検証機能はサポートされていません。よって、'%1' 構文は使用できません。 + + + + None of the pragma expressions are supported. Therefore, a fallback expression must be present + pragma 構文はサポートされていません。fallback 構文でなければなりません + + + + Each name of a template parameter must be unique; %1 is duplicated. + テンプレートパラメータ名はユニークである必要があります。'%1' は重複しています。 + + + + The %1-axis is unsupported in XQuery + XQuery において、%1 axis はサポートされていません + + + + No function by name %1 is available. + 関数名 '%1' はみつかりません。 + + + + The namespace URI cannot be the empty string when binding to a prefix, %1. + プレフィックス '%1' にバインディングする名前空間の URI は、空であってはなりません。 + + + + %1 is an invalid namespace URI. + %1 は名前空間 URI として無効です。 + + + + It is not possible to bind to the prefix %1 + プレフィックス %1 にバインドすることはできません + + + + Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared). + ? + 名前空間 %1 は %2 にのみバウンドできます。 + + + + Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared). + プリフィックス %1 は %2 にのみバウンドできます。 + + + + Two namespace declaration attributes have the same name: %1. + 二つの名前空間宣言の属性が、同じ名前 '%1' をもっています。 + + + + The namespace URI must be a constant and cannot use enclosed expressions. + 名前空間 URI は、constantでなければなりません。式を含むことはできません。 + + + + An attribute by name %1 has already appeared on this element. + 属性名 '%1' は、すでにこのエレメントで使用されています。 + + + + A direct element constructor is not well-formed. %1 is ended with %2. + 直積的な指定のエレメントがwell formedではありません。'%1' が、'%2' で終わっています。 + + + + The name %1 does not refer to any schema type. + 名前 '%1' は、なんのスキーマタイプも参照していません。 + + + + %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. + '%1' は complex 型です。complex 型への型変換はできません。しかし、アトミックな型である '%2' への変換はできます。 + + + + %1 is not an atomic type. Casting is only possible to atomic types. + '%1' はアトミックな型ではありません。型変換はアトミックな型に対してのみ可能です。 + + + + %1 is not a valid name for a processing-instruction. + 処理指定において、'%1' は無効です。 + + + + + %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. + '%1' は、スコープ属性宣言ではありません。スキーマインポート機能はサポートされていません。 + + + + The name of an extension expression must be in a namespace. + 拡張式 (extension expression) の名前は、名前空間の中になければなりません。 + + + + Element %1 is not allowed at this location. + この場所にエレメント '%1' をおくことは許されていません。 + + + + Text nodes are not allowed at this location. + この場所にテキストノードをおくことは許されていません。 + + + + Parse error: %1 + パースエラー: %1 + + + + The value of the XSL-T version attribute must be a value of type %1, which %2 isn't. + XSL-T バージョン属性の値は、'%1' 型でなければなりません。'%2' はそうではありません。 + + + + Running an XSL-T 1.0 stylesheet with a 2.0 processor. + XSL-T 1.0 のスタイルシートを 2.0 のプロセッサで使用します。 + + + + Unknown XSL-T attribute %1. + 未知の XSL-T 属性 %1 があります。 + + + + Attribute %1 and %2 are mutually exclusive. + 属性 '%1' と '%2' は排他的にのみ使用できます。 + + + + In a simplified stylesheet module, attribute %1 must be present. + simplified stylesheet モジュールにおいては、属性 '%1' を指定されなければなりません。 + + + + If element %1 has no attribute %2, it cannot have attribute %3 or %4. + エレメント '%1' が属性 '%2' を持たない場合は、属性 '%3' や '%4' を使用することはできません。 + + + + Element %1 must have at least one of the attributes %2 or %3. + エレメント '%1' は、属性 '%2' か '%3' のいずれかを持たなければなりません。 + + + + At least one mode must be specified in the %1-attribute on element %2. + エレメント '%2' において、'%1' 属性は少くとも一つのモードを指定しなければなりません。 + + + + Element %1 must come last. + エレメント %1 は最後になければなりません。 + + + + At least one %1-element must occur before %2. + %2 の前に、少くとも一つは %1 エレメントが存在しなければなりません。 + + + + Only one %1-element can appear. + %1 エレメントは一つのみ存在しなければなりません。 + + + + At least one %1-element must occur inside %2. + %2 の内側には、少くとも一つの '%1' エレメントが存在しなければなりません。 + + + + When attribute %1 is present on %2, a sequence constructor cannot be used. + %2 に属性 %1 がある場合、sequence constructor は使用できません。 + + + + Element %1 must have either a %2-attribute or a sequence constructor. + エレメント %1 には、%2 属性またはsequence constructorがなければなりません。 + + + + When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. + パラメータが要求されているときには、デフォルトの値は、%1 属性または sequence constructor によって指定されていてはなりません。 + + + + Element %1 cannot have children. + エレメント %1 は、子要素を持つことができません。 + + + + Element %1 cannot have a sequence constructor. + エレメント %1 は、sequence constructor を含むことができません。 + + + + + The attribute %1 cannot appear on %2, when it is a child of %3. + %2 が %3 の子要素であるときは、属性 %1 を使用してはなりません。 + + + + A parameter in a function cannot be declared to be a tunnel. + 関数へのパラメータは、トンネルであってはなりません。 + + + + This processor is not Schema-aware and therefore %1 cannot be used. + この処理系は、Schema-aware ではありません。よって、%1 は使用できません。 + + + + Top level stylesheet elements must be in a non-null namespace, which %1 isn't. + トップレベルのスタイルシートのエレメントは、non-nullな名前空間を持っていなければなりません。しかし、%1 はそうではありません。 + + + + The value for attribute %1 on element %2 must either be %3 or %4, not %5. + エレメント %2 の属性 %1 の値は、%3 または %4 でなければなりません。%5 は異なります。 + + + + Attribute %1 cannot have the value %2. + 属性 %1 に、値 %2 を指定することはできません。 + + + + The attribute %1 can only appear on the first %2 element. + 属性 %1 は、最初の %2 エレメントにのみ指定できます。 + + + + At least one %1 element must appear as child of %2. + %2 の子要素としては、少くとも一つは %1 エレメントがなければなりません。 + + + + empty + + + + + zero or one + ゼロまたは一つ + + + + exactly one + 厳密に一つ + + + + one or more + 一つまたは複数 + + + + zero or more + ゼロまたはそれ以上 + + + + Required type is %1, but %2 was found. + 要求されている型は %1 ですが、 %2 があります。 + + + + Promoting %1 to %2 may cause loss of precision. + %1 を %2 に変換する際に、精度のロスが生じます。 + + + + The focus is undefined. + フォーカスが定義されていません。 + + + + It's not possible to add attributes after any other kind of node. + 他の種類のノードの中では、属性を追加することはできません。 + + + + An attribute by name %1 has already been created. + 名前 '%1' の属性は、すでに生成されています。 + + + + Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. + UNICODE Codepoint Collection のみ使用できます(%1)。 %2 はサポートされていません。 + + + + QPluginLoader + + + Unknown error + 不明なエラー + + + + The plugin was not loaded. + そのプラグインはロードされていません。 + + + + QPrintDialog + + Page size: + ページサイズ: + + + Orientation: + 方向: + + + Paper source: + 給紙装置: + + + + OK + OK + + + Cancel + キャンセル + + + Portrait + + + + Landscape + + + + + locally connected + ローカルに接続しています + + + + + Aliases: %1 + エイリアス: %1 + + + + + unknown + 不明 + + + Print in color if available + 可能であればカラーで印刷 + + + Print to file + ファイルに出力: + + + Browse + 参照... + + + + Print all + すべて印刷 + + + Selection + 選択した部分を印刷 + + + + Print range + 印刷範囲 + + + Pages from + 先頭のページ: + + + to + 末尾のページ: + + + Print last page first + 末尾のページから印刷 + + + Number of copies: + 部数: + + + Paper format + 用紙の形式 + + + + A0 (841 x 1189 mm) + A0 (841 x 1189mm) + + + + A1 (594 x 841 mm) + A1 (594 x 841mm) + + + + A2 (420 x 594 mm) + A2 (420 x 594mm) + + + + A3 (297 x 420 mm) + A3 (297 x 420mm) + + + + A4 (210 x 297 mm, 8.26 x 11.7 inches) + A4 (210 x 297mm、8.26 x 11.7インチ) + + + + A5 (148 x 210 mm) + A5 (148 x 210mm) + + + + A6 (105 x 148 mm) + A6 (105 x 148mm) + + + + A7 (74 x 105 mm) + A7 (74 x 105mm) + + + + A8 (52 x 74 mm) + A8 (52 x 74mm) + + + + A9 (37 x 52 mm) + A9 (37 x 52mm) + + + + B0 (1000 x 1414 mm) + B0 (1000 x 1414mm) + + + + B1 (707 x 1000 mm) + B1 (707 x 1000mm) + + + + B2 (500 x 707 mm) + B2 (500 x 707mm) + + + + B3 (353 x 500 mm) + B3 (353 x 500mm) + + + + B4 (250 x 353 mm) + B4 (250 x 353mm) + + + + B5 (176 x 250 mm, 6.93 x 9.84 inches) + B5 (176 x 250mm、6.93 x 9.84インチ) + + + + B6 (125 x 176 mm) + B6 (125 x 176mm) + + + + B7 (88 x 125 mm) + B7 (88 x 125mm) + + + + B8 (62 x 88 mm) + B8 (62 x 88mm) + + + + B9 (44 x 62 mm) + B9 (44 x 62mm) + + + + B10 (31 x 44 mm) + B10 (31 x 44mm) + + + + C5E (163 x 229 mm) + C5E (163 x 229mm) + + + + DLE (110 x 220 mm) + DLE (110 x 220mm) + + + + Executive (7.5 x 10 inches, 191 x 254 mm) + Executive (7.5 x 10インチ、191 x 254mm) + + + + Folio (210 x 330 mm) + Folio (210 x 330mm) + + + + Ledger (432 x 279 mm) + Ledger (432 x 279mm) + + + + Legal (8.5 x 14 inches, 216 x 356 mm) + Legal (8.5 x 14インチ、216 x 356mm) + + + + Letter (8.5 x 11 inches, 216 x 279 mm) + Letter (8.5 x 11インチ、216 x 279mm) + + + + Tabloid (279 x 432 mm) + Tabloid (279 x 432mm) + + + + US Common #10 Envelope (105 x 241 mm) + US Common #10 Envelope (105 x 241mm) + + + Print dialog + プリントダイアログ + + + Size: + サイズ: + + + Printer + プリンタ + + + Properties + プロパティ + + + Printer info: + プリンタ情報: + + + Copies + 印刷部数 + + + Collate + 丁合い + + + Other + その他 + + + Double side printing + 両面印刷 + + + + + + Print + 印刷 + + + File + ファイル + + + + Print To File ... + ファイルへ出力... + + + + File %1 is not writable. +Please choose a different file name. + ファイル %1 は書き込み可能ではありません。 +別のファイル名を選んでください。 + + + + %1 already exists. +Do you want to overwrite it? + %1 はすでに存在します。 +上書きしますか? + + + + File exists + ファイルは既に存在しています + + + + <qt>Do you want to overwrite it?</qt> + <qt>ファイルを上書きしてもよろしいですか?</qt> + + + + Print selection + 選択された範囲を印刷 + + + + %1 is a directory. +Please choose a different file name. + %1 はディレクトリです。 +ファイル名を指定してください。 + + + + A0 + A0 + + + + A1 + A1 + + + + A2 + A2 + + + + A3 + A3 + + + + A4 + A4 + + + + A5 + A5 + + + + A6 + A6 + + + + A7 + A7 + + + + A8 + A8 + + + + A9 + A9 + + + + B0 + B0 + + + + B1 + B1 + + + + B2 + B2 + + + + B3 + B3 + + + + B4 + B4 + + + + B5 + B5 + + + + B6 + B6 + + + + B7 + B7 + + + + B8 + B8 + + + + B9 + B9 + + + + B10 + B10 + + + + C5E + C5E + + + + DLE + DLE + + + + Executive + Exclusive + + + + Folio + Folio + + + + Ledger + Ledger + + + + Legal + リーガルサイズ + + + + Letter + レターサイズ + + + + Tabloid + タブロイドサイズ + + + + US Common #10 Envelope + US標準#10封筒 + + + + Custom + カスタム + + + + + &Options >> + オプション(&O) >> + + + + &Print + 印刷(&P) + + + + &Options << + オプション(&O) << + + + + Print to File (PDF) + PDFファイルに出力 + + + + Print to File (Postscript) + Postscriptファイルに出力 + + + + Local file + ローカルファイル + + + + Write %1 file + ファイル %1 に書き込みました + + + + The 'From' value cannot be greater than the 'To' value. + QPrintPropertiesWidgetにFromとToがあってそれを指している + 印刷開始ページ番号は、印刷終了ページ番号より小さくなければなりません。 + + + + QPrintPreviewDialog + + + + Page Setup + ページの設定 + + + + %1% + %1% + + + + Print Preview + 印刷のプレビュー + + + + Next page + 次のページ + + + + Previous page + 前のページ + + + + First page + 最初のページ + + + + Last page + 最後のページ + + + + Fit width + 幅をあわせる + + + + Fit page + 高さをあわせる + + + + Zoom in + 拡大 + + + + Zoom out + 縮小 + + + + Portrait + + + + + Landscape + + + + + Show single page + 一枚のページを表示する + + + + Show facing pages + 見開きのページを表示する + + + + Show overview of all pages + すべてのページを表示する + + + + Print + 印刷 + + + + Page setup + ページの設定 + + + Close + 閉じる + + + + Export to PDF + PDFに出力 + + + + Export to PostScript + Postscriptに出力 + + + + QPrintPropertiesDialog + + PPD Properties + 印刷プロパティのダイアログのプロパティ + + + Save + 保存 + + + OK + OK + + + + QPrintPropertiesWidget + + + Form + 書式 + + + + Page + ページ + + + + Advanced + 高度な設定 + + + + QPrintSettingsOutput + + + Form + 書式 + + + + Copies + 印刷部数 + + + + Print range + 印刷範囲 + + + + Print all + すべて印刷 + + + + Pages from + 先頭のページ + + + + to + 末尾のページ + + + + Selection + 選択した部分を印刷 + + + + Output Settings + 出力設定 + + + + Copies: + 印刷部数: + + + + Collate + 丁合い + + + + Reverse + 逆順 + + + + Options + オプション + + + + Color Mode + + + + + Color + カラー + + + + Grayscale + グレースケール + + + + Duplex Printing + 両面印刷 + + + + None + なし + + + + Long side + 長辺綴じ + + + + Short side + 短辺綴じ + + + + QPrintWidget + + + Form + 書式 + + + + Printer + プリンタ + + + + &Name: + 名前(&N): + + + + P&roperties + プロパティ(&r) + + + + Location: + 設置場所: + + + + Preview + プレビュー + + + + Type: + タイプ: + + + + Output &file: + 出力ファイル名(&f): + + + + ... + ... + + + + QProcess + + + + Could not open input redirection for reading + 標準入力リダイレクトを読み込みのためにオープンすることができません + + + + + Could not open output redirection for writing + 標準出力リダイレクトを書き込みのためにオープンすることができません + + + + Resource error (fork failure): %1 + リソースエラー (fork に失敗しました): %1 + + + + + + + + + + + + Process operation timed out + プロセス処理がタイムアウトしました + + + + + + + Error reading from process + プロセスからの読み込みにおいてエラーが発生しました + + + + + + Error writing to process + プロセスへの書き込みにおいてエラーが発生しました + + + + Process crashed + プロセスがクラッシュしました + + + + No program defined + プログラム名が指定されていません + + + + Process failed to start + プロセスのスタートに失敗しました + + + + QProgressDialog + + + Cancel + キャンセル + + + + QPushButton + + + Open + オープン + + + + QRadioButton + + + Check + 選択 + + + + QRegExp + + + no error occurred + エラーは発生しませんでした + + + + disabled feature used + 無効な機能が使用されました + + + + bad char class syntax + 不正なcharクラス構文 + + + + bad lookahead syntax + 不正なlookahead構文 + + + + bad repetition syntax + 不正なrepetition構文 + + + + invalid octal value + 無効な8進値 + + + + missing left delim + 左の区切り文字がありません + + + + unexpected end + 予期しない末尾です + + + + met internal limit + 内部制限を満たしました + + + + QSQLite2Driver + + + Error to open database + データベースのオープンでエラーが発生しました + + + + Unable to begin transaction + トランザクションを開始できません + + + + Unable to commit transaction + トランザクションをコミットできません + + + + Unable to rollback Transaction + トランザクションをロールバックできません + + + + QSQLite2Result + + + Unable to fetch results + 実行結果をフェッチできません + + + + Unable to execute statement + ステートメントを実行できません + + + + QSQLiteDriver + + + Error opening database + データベースのオープンでエラーが発生しました + + + + Error closing database + データベースのクローズでエラーが発生しました + + + + Unable to begin transaction + トランザクションを開始できません + + + + Unable to commit transaction + トランザクションをコミットできません + + + Unable to roll back transaction + トランザクションをロールバックできません + + + + Unable to rollback transaction + トランザクションをロールバックできません + + + + QSQLiteResult + + + + + Unable to fetch row + レコードをフェッチできません + + + + Unable to execute statement + ステートメントを実行できません + + + + Unable to reset statement + ステートメントをリセットできません + + + + Unable to bind parameters + パラメータをバインドできません + + + + Parameter count mismatch + パラメータの数が合っていません + + + + No query + クェリーがありません + + + + QScrollBar + + + Scroll here + ここにスクロール + + + + Left edge + 左端 + + + + Top + 上端 + + + + Right edge + 右端 + + + + Bottom + 下端 + + + + Page left + 1ページ左へスクロール + + + + + Page up + 1ページ戻る + + + + Page right + 1ページ右へスクロール + + + + + Page down + 1ページ進む + + + + Scroll left + 左へスクロール + + + + Scroll up + 上へスクロール + + + + Scroll right + 右へスクロール + + + + Scroll down + 下へスクロール + + + + Line up + 1行上へ + + + + Position + 位置 + + + + Line down + 1行下へ + + + + QSharedMemory + + + %1: unable to set key on lock + 共有メモリ関連 + %1: ロックするためのキーを設定できません + + + + %1: create size is less then 0 + %1: 0より小さいサイズの共有メモリは作成できません + + + + + %1: unable to lock + %1: ロックできません + + + + %1: unable to unlock + %1: アンロックできません + + + + + %1: permission denied + %1: 許可されていません + + + + + %1: already exists + %1: 既に存在します + + + + + %1: doesn't exists + %1: 存在しません + + + + + %1: out of resources + %1: リソース不足です + + + + + %1: unknown error %2 + %1: 未知のエラー %2 + + + + %1: key is empty + %1: キーが空です + + + + %1: unix key file doesn't exists + ? + %1: UNIX key file が存在しません + + + + %1: ftok failed + %1: fork に失敗しました + + + + + %1: unable to make key + %1: キーを作成できません + + + + %1: system-imposed size restrictions + EINVAL + %1: 指定されたサイズはシステムにより拒否されました + + + + %1: not attached + %1: アタッチしていません + + + + %1: invalid size + %1: 無効なサイズです + + + + %1: key error + safekey.isEmpty()==true + %1: キーかありません + + + + %1: size query failed + %1: サイズのクェリーに失敗しました + + + + QShortcut + + + Space + Space + + + + Esc + Esc + + + + Tab + Tab + + + + Backtab + Backtab + + + + Backspace + Backspace + + + + Return + Return + + + + Enter + Enter + + + + Ins + Ins + + + + Del + Del + + + + Pause + Pause + + + + Print + Print + + + + SysReq + SysReq + + + + Home + Home + + + + End + End + + + + Left + + + + + Up + + + + + Right + + + + + Down + + + + + PgUp + PgUp + + + + PgDown + PgDown + + + + CapsLock + CapsLock + + + + NumLock + NumLock + + + + ScrollLock + ScrollLock + + + + Menu + メニュー + + + + Help + ヘルプ + + + + Back + 戻る + + + + Forward + 進む + + + + Stop + 停止 + + + + Refresh + 更新間隔 + + + + Volume Down + 音量を下げる + + + + Volume Mute + 消音 + + + + Volume Up + 音量を上げる + + + + Bass Boost + 低音ブースト + + + + Bass Up + 低音を上げる + + + + Bass Down + 低音を下げる + + + + Treble Up + 高音を上げる + + + + Treble Down + 高音を下げる + + + + Media Play + メディアの再生 + + + + Media Stop + メディアの停止 + + + + Media Previous + 前のメディア + + + + Media Next + 次のメディア + + + + Media Record + メディアの録音 + + + + Home Page + ホームページ + + + + Favorites + お気に入り + + + + Search + 検索 + + + + Standby + スタンバイ + + + + Open URL + URLを開く + + + + Launch Mail + メールの起動 + + + + Launch Media + メディアの起動 + + + + Launch (0) + (0)の起動 + + + + Launch (1) + (1)の起動 + + + + Launch (2) + (2)の起動 + + + + Launch (3) + (3)の起動 + + + + Launch (4) + (4)の起動 + + + + Launch (5) + (5)の起動 + + + + Launch (6) + (6)の起動 + + + + Launch (7) + (7)の起動 + + + + Launch (8) + (8)の起動 + + + + Launch (9) + (9)の起動 + + + + Launch (A) + (A)の起動 + + + + Launch (B) + (B)の起動 + + + + Launch (C) + (C)の起動 + + + + Launch (D) + (D)の起動 + + + + Launch (E) + (E)の起動 + + + + Launch (F) + (F)の起動 + + + + Print Screen + Print Screen + + + + Page Up + Page Up + + + + Page Down + Page Down + + + + Caps Lock + Caps Lock + + + + Num Lock + Num Lock + + + + Number Lock + Number Lock + + + + Scroll Lock + Scroll Lock + + + + Insert + Insert + + + + Delete + Delete + + + + Escape + Escape + + + + System Request + System Request + + + + Select + Select + + + + Yes + はい + + + + No + いいえ + + + + Context1 + Context1 + + + + Context2 + Context2 + + + + Context3 + Context3 + + + + Context4 + Context4 + + + + Call + Call + + + + Hangup + Hangup + + + + Flip + Flip + + + + + Ctrl + Ctrl + + + + + Shift + Shift + + + + + Alt + Alt + + + + + Meta + Meta + + + + + + + + + + + F%1 + F%1 + + + + QSlider + + + Page left + 1ページ左へスクロール + + + + Page up + 1ページ戻る + + + + Position + 位置 + + + + Page right + 1ページ右へスクロール + + + + Page down + 1ページ進む + + + + QSocks5SocketEngine + + + Connection to proxy refused + プロキシーへの接続が拒否されました + + + + Connection to proxy closed prematurely + プロキシーの接続が通信の終了前に切断されました + + + + Proxy host not found + プロキシーホストが見つかりません + + + + Connection to proxy timed out + プロキシーとの接続がタイムアウトしました + + + + Proxy authentication failed + プロキシーの認証に失敗しました + + + + Proxy authentication failed: %1 + プロキシーの認証に失敗しました: %1 + + + + SOCKS version 5 protocol error + SOCKS バージョン 5 プロトコルのエラーです + + + + General SOCKSv5 server failure + SOCKS バージョン 5 サーバのエラーです + + + + Connection not allowed by SOCKSv5 server + SOCKSv5 サーバより接続を拒否されました + + + + TTL expired + 実際はホップ数です + 有効期限(TTL)がきれました + + + + SOCKSv5 command not supported + この SOCKSv5 コマンドはサポートされていません + + + + Address type not supported + 指定されたアドレスタイプはサポートされていません + + + + Unknown SOCKSv5 proxy error code 0x%1 + 未知の SOCKSv5 プロキシーエラーです: 0x%1 + + + Socks5 timeout error connecting to socks server + Socks5 はソックスサーバ接続しようとしてタイムアウトになりました + + + + Network operation timed out + ネットワーク操作がタイムアウトしました + + + + QSpinBox + + + More + 増やす + + + + Less + 減らす + + + + QSql + + + Delete + 削除 + + + + Delete this record? + このレコードを削除しますか? + + + + + + Yes + はい + + + + + + No + いいえ + + + + Insert + 挿入 + + + + Update + アップデート + + + + Save edits? + 編集内容を保存しますか? + + + + Cancel + キャンセル + + + + Confirm + 確認 + + + + Cancel your edits? + 編集をキャンセルしますか? + + + + QSslSocket + + + Error creating SSL context (%1) + SSL content の作成に失敗しました (%1) + + + + Invalid or empty cipher list (%1) + 暗号方式リストが無効または空です (%1) + + + + Cannot provide a certificate with no key, %1 + 鍵が指定されていないため、証明書を扱えません。 %1 + + + + Error loading local certificate, %1 + ローカルの証明書をロードできません。 %1 + + + + Error loading private key, %1 + プライベートキーをロードできません。 %1 + + + + Private key does not certificate public key, %1 + プライベートキーが、パブリックキーの証明書となっていません %1 + + + + Error creating SSL session, %1 + SSL セッションを作成できません。 %1 + + + + Error creating SSL session: %1 + SSL セッションを作成できません: %1 + + + + Unable to write data: %1 + 書き込みできません: %1 + + + + Error while reading: %1 + 読み込み時にエラーが発生しました: %1 + + + + Error during SSL handshake: %1 + SSL ハンドシェーク時にエラーが発生しました: %1 + + + + QSystemSemaphore + + + + %1: out of resources + %1: リソース不足です + + + + + %1: permission denied + %1: 許可されていません + + + + %1: already exists + %1: 既に存在します + + + + %1: does not exist + %1: 存在しません + + + + + %1: unknown error %2 + %1: 未知のエラーです %2 + + + + QTDSDriver + + + Unable to open connection + 接続をオープンできません + + + + Unable to use database + データベースを使用できません + + + + QTabBar + + + Scroll Left + 左へスクロール + + + + Scroll Right + 右へスクロール + + + + QTcpServer + + Socket operation unsupported + ソケット操作はサポートされていません + + + + Operation on socket is not supported + このソケットへの操作はサポートされていません + + + + QTextControl + + + &Undo + 元に戻す(&U) + + + + &Redo + やり直す(&R) + + + + Cu&t + 切り取り(&T) + + + + &Copy + コピー(&C) + + + + Copy &Link Location + リンクの場所をコピー(&L) + + + + &Paste + 貼り付け(&P) + + + + Delete + 削除 + + + + Select All + すべてを選択 + + + + QToolButton + + + + Press + 押す + + + + + Open + オープン + + + + QUdpSocket + + + This platform does not support IPv6 + このプラットフォームは IPv6 をサポートしていません + + + + QUndoGroup + + + Undo + 元に戻す + + + + Redo + やり直す + + + + QUndoModel + + + <empty> + <空> + + + + QUndoStack + + + Undo + 元に戻す + + + + Redo + やり直す + + + + QUnicodeControlCharacterMenu + + + LRM Left-to-right mark + LRM (左横書き指定) + + + + RLM Right-to-left mark + RLM (右横書き指定) + + + + ZWJ Zero width joiner + ZWJ (幅のない接続文字) + + + + ZWNJ Zero width non-joiner + ZWNJ (幅のない非接続文字) + + + + ZWSP Zero width space + ZWSP (幅の無い空白) + + + + LRE Start of left-to-right embedding + LRE (左横書き開始指定) + + + + RLE Start of right-to-left embedding + RLE (右横書き開始指定) + + + + LRO Start of left-to-right override + LRO (左横書き上書き開始指定) + + + + RLO Start of right-to-left override + RLO (右横書き上書き開始指定) + + + + PDF Pop directional formatting + PDF (方向上書きの終了指定) + + + + Insert Unicode control character + Unicode制御文字を挿入 + + + + QWebFrame + + + Request cancelled + リクエストはキャンセルされました + + + + Request blocked + リクエストはブロックされました + + + + Cannot show URL + URL を表示できません + + + + Frame load interruped by policy change + ポリシーの変更により、フレームのロードが中断しました + + + + Cannot show mimetype + MIME Type を表示できません + + + + File does not exist + ファイルが存在しません + + + + QWebPage + + + Bad HTTP request + 誤った HTTP のリクエストです + + + + Submit + default label for Submit buttons in forms on web pages + 送信 + + + + Submit + Submit (input element) alt text for <input> elements with no alt, title, or value + 送信 + + + + Reset + default label for Reset buttons in forms on web pages + リセット + + + + This is a searchable index. Enter search keywords: + text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index' + 検索が可能です。検索のためのキーワードを入力してください: + + + + Choose File + title for file button used in HTML forms + ファイルを選ぶ + + + + No file selected + text to display in file button used in HTML forms when no file is selected + ファイルが選択されていません + + + + Open in New Window + Open in New Window context menu item + 新しいウィンドウで開く + + + + Save Link... + Download Linked File context menu item + リンク先を保存... + + + + Copy Link + Copy Link context menu item + リンク先をコピー + + + + Open Image + Open Image in New Window context menu item + イメージを開く + + + + Save Image + Download Image context menu item + 画像を保存 + + + + Copy Image + Copy Link context menu item + 画像をコピー + + + + Open Frame + Open Frame in New Window context menu item + フレームを新しいウィンドウで開く + + + + Copy + Copy context menu item + コピー + + + + Go Back + Back context menu item + 戻る + + + + Go Forward + Forward context menu item + 進む + + + + Stop + Stop context menu item + 停止 + + + + Reload + Reload context menu item + リロード + + + + Cut + Cut context menu item + 切り取り + + + + Paste + Paste context menu item + 貼り付け + + + + No Guesses Found + No Guesses Found context menu item + 推測候補はありません + + + + Ignore + Ignore Spelling context menu item + 無視 + + + + Add To Dictionary + Learn Spelling context menu item + 辞書に追加 + + + + Search The Web + Search The Web context menu item + Web を検索 + + + + Look Up In Dictionary + Look Up in Dictionary context menu item + 辞書から探す + + + + Open Link + Open Link context menu item + リンクを開く + + + + Ignore + Ignore Grammar context menu item + 無視 + + + + Spelling + Spelling and Grammar context sub-menu item + スペル + + + + Show Spelling and Grammar + menu item title + スペルと文法を表示 + + + + Hide Spelling and Grammar + menu item title + スペルと文法を隠す + + + + Check Spelling + Check spelling context menu item + スペルをチェックする + + + + Check Spelling While Typing + Check spelling while typing context menu item + 入力中にスペルをチェックする + + + + Check Grammar With Spelling + Check grammar with spelling context menu item + スペルおよび文法をチェックする + + + + Fonts + Font context sub-menu item + フォント + + + + Bold + Bold context menu item + 太字 + + + + Italic + Italic context menu item + イタリック + + + + Underline + Underline context menu item + 下線 + + + + Outline + Outline context menu item + アウトライン + + + + Direction + Writing direction context sub-menu item + 方向 + + + + Text Direction + Text direction context sub-menu item + テキストの方向 + + + + Default + Default writing direction context menu item + デフォルト + + + + LTR + Left to Right context menu item + 左横書き + + + + RTL + Right to Left context menu item + 右横書き + + + + Inspect + Inspect Element context menu item + ? + 検査 + + + + No recent searches + Label for only item in menu that appears when clicking on the search field image, when no searches have been performed + 検索の履歴はありません + + + + Recent searches + label for first item in the menu that appears when clicking on the search field image, used as embedded menu title + 検索の履歴 + + + + Clear recent searches + menu item in Recent Searches menu that empties menu's contents + 検索の履歴をクリア + + + + Unknown + Unknown filesize FTP directory listing item + 不明 + + + + %1 (%2x%3 pixels) + Title string for images + %1 (%2x%3 ピクセル) + + + + Web Inspector - %2 + Web の検査 - %2 + + + + Scroll here + ここにスクロール + + + + Left edge + 左端 + + + + Top + 上端 + + + + Right edge + 右端 + + + + Bottom + 下端 + + + + Page left + 1ページ左へスクロール + + + + Page up + 1ページ戻る + + + + Page right + 1ページ右へスクロール + + + + Page down + 1ページ進む + + + + Scroll left + 左へスクロール + + + + Scroll up + 上へスクロール + + + + Scroll right + 右へスクロール + + + + Scroll down + 下へスクロール + + + + %n file(s) + number of chosen file + + %n 個のファイル + + + + + JavaScript Alert - %1 + JavaScript アラート - %1 + + + + JavaScript Confirm - %1 + JavaScript 確認 - %1 + + + + JavaScript Prompt - %1 + JavaScript 質問 - %1 + + + + Move the cursor to the next character + 次の文字へカーソルを移動 + + + + Move the cursor to the previous character + 前の文字にカーソルを移動 + + + + Move the cursor to the next word + 次の単語にカーソルを移動 + + + + Move the cursor to the previous word + 前の単語にカーソルを移動 + + + + Move the cursor to the next line + 次の行にカーソルを移動 + + + + Move the cursor to the previous line + 前の行にカーソルを移動 + + + + Move the cursor to the start of the line + 文なのか行なのか + 文頭にカーソルを移動 + + + + Move the cursor to the end of the line + 文末にカーソルを移動 + + + + Move the cursor to the start of the block + ブロックの先頭にカーソルを移動 + + + + Move the cursor to the end of the block + ブロックの末尾にカーソルを移動 + + + + Move the cursor to the start of the document + 文章の先頭にカーソルを移動 + + + + Move the cursor to the end of the document + 文章の末尾にカーソルを移動 + + + + Select all + すべてを選択 + + + + Select to the next character + 次の文字を選択 + + + + Select to the previous character + 前の文字を選択 + + + + Select to the next word + 次の単語を選択 + + + + Select to the previous word + 前の単語を選択 + + + + Select to the next line + 次の行を選択 + + + + Select to the previous line + 前の行を選択 + + + + Select to the start of the line + 文頭から選択 + + + + Select to the end of the line + 文末まで選択 + + + + Select to the start of the block + ブロックの先頭から選択 + + + + Select to the end of the block + ブロックの末尾まで選択 + + + + Select to the start of the document + ドキュメントの先頭から選択 + + + + Select to the end of the document + ドキュメントの末尾まで選択 + + + + Delete to the start of the word + 単語の先頭まで削除 + + + + Delete to the end of the word + 単語の末尾まで削除 + + + + Insert a new paragraph + 新しい段落を挿入 + + + + Insert a new line + 新しい行を挿入 + + + + QWhatsThisAction + + + What's This? + ヒント? + + + + QWidget + + + * + * + + + + QWizard + + + Go Back + 戻る + + + + Continue + 続き + + + + Commit + 適用 + + + + Done + 終了 + + + + Help + ヘルプ + + + + < &Back + < 戻る(&B) + + + + &Finish + 完了(&F) + + + + Cancel + キャンセル + + + + &Help + ヘルプ(&H) + + + + &Next + 次へ(&N) + + + + &Next > + 次へ(&N) > + + + + QWorkspace + + + &Restore + 元に戻す(&R) + + + + &Move + 移動(&M) + + + + &Size + サイズを変更(&S) + + + + Mi&nimize + 最小化(&N) + + + + Ma&ximize + 最大化(&X) + + + + &Close + 閉じる(&C) + + + + Stay on &Top + 常に手前に表示(&T) + + + + + Sh&ade + シェード(&A) + + + + + %1 - [%2] + %1 - [%2] + + + + Minimize + 最小化 + + + + Restore Down + 元に戻す + + + + Close + 閉じる + + + + &Unshade + シェードを解除(&U) + + + + QXml + + + no error occurred + エラーは発生しませんでした + + + + error triggered by consumer + 消費者によってエラーが誘発されました + + + + unexpected end of file + 予期せぬファイルの終りです + + + + more than one document type definition + ドキュメントタイプの定義が複数あります + + + + error occurred while parsing element + 要素の解析中にエラーが発生しました + + + + tag mismatch + タグが一致しません + + + + error occurred while parsing content + コンテンツの解析中にエラーが発生しました + + + + unexpected character + 予期しない文字です + + + + invalid name for processing instruction + 処理の指示に無効な名前です + + + + version expected while reading the XML declaration + XML宣言を読み込むにはバージョンが必要です + + + + wrong value for standalone declaration + スタンドアロン宣言として正しくない値です + + + + encoding declaration or standalone declaration expected while reading the XML declaration + XML宣言を読み込むにはエンコーディング宣言かスタンドアローン宣言が必要です + + + + standalone declaration expected while reading the XML declaration + XML宣言を読み込むにはスタンドアローン宣言が必要です + + + + error occurred while parsing document type definition + ドキュメントタイプの定義を解析中にエラーが発生しました + + + + letter is expected + 文字が必要です + + + + error occurred while parsing comment + コメントの解析中にエラーが発生しました + + + + error occurred while parsing reference + 参照の解析中にエラーが発生しました + + + + internal general entity reference not allowed in DTD + 内部一般エンティティ参照はDTDで許されていません + + + + external parsed general entity reference not allowed in attribute value + 解析された外部一般エンティティ参照は属性値で許されていません + + + + external parsed general entity reference not allowed in DTD + 解析された外部一般エンティティ参照はDTDで許されていません + + + + unparsed entity reference in wrong context + 不正な文脈で解析されないエンティティ参照です + + + + recursive entities + 再帰的エンティティ + + + + error in the text declaration of an external entity + 外部エンティティのテキスト宣言にエラーがあります + + + + QXmlStream + + + + Extra content at end of document. + ドキュメントの末尾に余計なものがついています。 + + + + Invalid entity value. + エンティティの値が無効です。 + + + + Invalid XML character. + 無効な XML 文字です。 + + + + Sequence ']]>' not allowed in content. + このコンテキストでは、']]>' は許可されていません。 + + + + + Encountered incorrectly encoded content. + 正しくないエンコードの文脈に遭遇しました。 + + + + Namespace prefix '%1' not declared + 名前空間のブリフィックス '%1' は宣言されていません + + + + Attribute redefined. + 属性が再度指定されています。 + + + + Unexpected character '%1' in public id literal. + DTD宣言の部分 + 公開 ID 指定に使用できない文字 '%1' が使用されています。 + + + + Invalid XML version string. + 無効な XML バージョン指定です。 + + + + Unsupported XML version. + この XML のバージョンはサポートされていません。 + + + + The standalone pseudo attribute must appear after the encoding. + &ddd; は、エンコーディングを指定していないと使えないということかな。utf8だとおもうけど。 + 仮想属性指定は、エンコーディング指定の後にのみ使用できます。 + + + + %1 is an invalid encoding name. + %1 は無効なエンコーディングの名前です。 + + + + Encoding %1 is unsupported + エンコーディング '%1' はサポートされていません + + + + Standalone accepts only yes or no. + standalone の指定は yes または no のみ指定できます。 + + + + Invalid attribute in XML declaration. + XML 宣言に無効な属性がついています。 + + + + Premature end of document. + ドキュメントが途中で終わっています。 + + + + Invalid document. + 無効なドキュメントです。 + + + + Expected + 予期していた表現は、 + + + + , but got ' + ですが、取得した表現は以下のものでした ' + + + + Unexpected ' + 予期していなかった表現 ' + + + + Expected character data. + 予期していた文字列。 + + + + Recursive entity detected. + 再帰しているエンティティを発見しました。 + + + + Start tag expected. + 開始タグをよきしていましたが、みつかりません。 + + + + NDATA in parameter entity declaration. + パラメータエンティティの宣言において NDATA があります。 + + + + XML declaration not at start of document. + XML 宣言がドキュメントの先頭にありません。 + + + + %1 is an invalid processing instruction name. + XMLにそんなのあったっけ? + %1 は無効な処理指定の名前です。 + + + + Invalid processing instruction name. + 無効な処理命令です。 + + + + %1 is an invalid PUBLIC identifier. + %1 は、公開 (PUBLIC) 識別子として無効です。 + + + + + + + Illegal namespace declaration. + 無効な名前空間の指定です。 + + + + Invalid XML name. + 無効な XML 名です。 + + + + Opening and ending tag mismatch. + 開始タグと、終了タグがマッチしません。 + + + + Reference to unparsed entity '%1'. + まだパースしていないエンティティ '%1' を参照しています。 + + + + + + Entity '%1' not declared. + エンティティ '%1' は宣言されていません。 + + + + Reference to external entity '%1' in attribute value. + 属性値として、外部エンティティ '%1' を再度指定しています。 + + + + Invalid character reference. + 無効な文字への参照です。 + + + diff --git a/translations/qt_ja_JP.ts b/translations/qt_ja_JP.ts deleted file mode 100644 index e6f92b7..0000000 --- a/translations/qt_ja_JP.ts +++ /dev/null @@ -1,8070 +0,0 @@ - - - - - MAC_APPLICATION_MENU - - - Services - サービス - - - - Hide %1 - %1を隠す - - - - Hide Others - ほかを隠す - - - - Show All - すべてを表示 - - - - Preferences... - 環境設定... - - - - Quit %1 - %1 を終了 - - - - About %1 - %1 について - - - - CloseButton - - - Close Tab - ToolTip - タブを閉じる - - - - PPDOptionsModel - - Name - 名前 - - - Value - - - - - Phonon:: - - - Notifications - 通知 - - - - Music - 音楽 - - - - Video - 動画 - - - - Communication - コミュニケーション - - - - Games - ゲーム - - - - Accessibility - アクセシビリティ - - - - Phonon::AudioOutput - - - <html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html> - <html>オーディオ再生デバイス<b>%1</b>が動作しません。<br/><b>%2</b>を使用します。</html> - - - - <html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html> - <html>より高いパフォーマンスを得られるオーディオデバイス <b>%1</b> が使用可能となったので、使用します。</html> - - - - Revert back to device '%1' - デバイス '%1' に戻す - - - - Phonon::Gstreamer::Backend - - - Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. - Some video features have been disabled. - 警告: gstreamer0.10-plugins-good がインストールされていません。幾つかの動画機能は使用できません。 - - - - Warning: You do not seem to have the base GStreamer plugins installed. - All audio and video support has been disabled - 警告: GStreamer plugin がインストールされていません。すべての音声、動画機能は使用できません - - - - Phonon::Gstreamer::MediaObject - - - Cannot start playback. - -Check your Gstreamer installation and make sure you -have libgstreamer-plugins-base installed. - 再生できません。 - -Gstreamer と libgstreamer-plugins-base が正しくインストールされているか確認してください。 - - - - A required codec is missing. You need to install the following codec(s) to play this content: %0 - 必要なコーデックがみつかりません。このコンテンツを再生するためには、以下のコーデックをインストールする必要があります: %0 - - - - - - - - - - - Could not open media source. - メディアソースを開くことができません。 - - - - Invalid source type. - 無効なソースの形式です。 - - - - Could not locate media source. - メディアソースがみつかりません。 - - - - Could not open audio device. The device is already in use. - オーディオデバイスを開くことができません。デバイスは既に他のプロセスにより使用されています。 - - - - Could not decode media source. - メディアソースを開くことができません。見つからないか、未知の形式です。 - - - - Phonon::VolumeSlider - - - - - - Volume: %1% - 音量: %1% - - - - - - Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1% - スライダを用いて音量を指定してください。左端が0%、右端が%1%になります - - - - Muted - ミュート - - - - Q3Accel - - - %1, %2 not defined - %1, %2 は定義されていません - - - - Ambiguous %1 not handled - 曖昧な %1 は扱えません - - - - Q3DataTable - - - True - - - - - False - - - - - Insert - 挿入 - - - - Update - アップデート - - - - Delete - 削除 - - - - Q3FileDialog - - - All Files (*.*) - すべてのファイル(*.*) - - - - Open - オープン - - - - Select a Directory - ディレクトリを選択 - - - - Copy or Move a File - ファイルをコピーまたは移動 - - - - Read: %1 - 読み込み: %1 - - - - - Write: %1 - 書き込み: %1 - - - - - Cancel - キャンセル - - - - - - - All Files (*) - すべてのファイル(*) - - - - Name - 名前 - - - - Size - サイズ - - - - Type - タイプ - - - - Date - 日付 - - - - Attributes - 属性 - - - - - &OK - OK(&O) - - - - Look &in: - 検索する場所(&I): - - - - - - File &name: - ファイル名(&N): - - - - File &type: - ファイルタイプ(&T): - - - - Back - 戻る - - - - One directory up - 1つ上のディレクトリへ移動 - - - - Create New Folder - 新しいフォルダの作成 - - - - List View - 一覧表示 - - - - Detail View - 詳細表示 - - - - Preview File Info - ファイル情報のプレビュー - - - - Preview File Contents - ファイルの内容のプレビュー - - - - Read-write - 読み込み/書き込み - - - - Read-only - 読み込み専用 - - - - Write-only - 書き込み専用 - - - - Inaccessible - アクセス不可 - - - - Symlink to File - ファイルへのシンボリックリンク - - - - Symlink to Directory - ディレクトリへのシンボリックリンク - - - - Symlink to Special - スペシャルファイルへのシンボリックリンク - - - - File - ファイル - - - - Dir - ディレクトリ - - - - Special - スペシャル - - - - - - Open - オープン - - - - - Save As - 名前を付けて保存 - - - - - - &Open - オープン(&O) - - - - - &Save - 保存(&S) - - - - &Rename - 名前の変更(&R) - - - - &Delete - 削除(&D) - - - - R&eload - リロード(&E) - - - - Sort by &Name - 名前順にソート(&N) - - - - Sort by &Size - サイズ順にソート(&S) - - - - Sort by &Date - 日付順にソート(&D) - - - - &Unsorted - ソート解除(&U) - - - - Sort - ソート - - - - Show &hidden files - 隠しファイルの表示(&H) - - - - the file - ファイル - - - - the directory - ディレクトリ - - - - the symlink - シンボリックリンク - - - - Delete %1 - %1 の削除 - - - - <qt>Are you sure you wish to delete %1 "%2"?</qt> - <qt>%1 "%2" を削除しますか?</qt> - - - - &Yes - はい(&Y) - - - - &No - いいえ(&N) - - - - New Folder 1 - 新しいフォルダ1 - - - - New Folder - 新しいフォルダ - - - - New Folder %1 - 新しいフォルダ %1 - - - - Find Directory - ディレクトリの検索 - - - - - Directories - ディレクトリ - - - - Directory: - ディレクトリ: - - - - - Error - エラー - - - - %1 -File not found. -Check path and filename. - %1 -ファイルが見つかりませんでした。 -パスおよびファイル名を確認してください。 - - - - Q3LocalFs - - - - Could not read directory -%1 - ディレクトリを読み込めませんでした -%1 - - - - Could not create directory -%1 - ディレクトリを作成できませんでした -%1 - - - - Could not remove file or directory -%1 - ファイルまたはディレクトリを削除できませんでした -%1 - - - - Could not rename -%1 -to -%2 - 名前を変更できませんでした -%1 -を -%2 -へ - - - - Could not open -%1 - 開けませんでした -%1 - - - - Could not write -%1 - 書き込めませんでした -%1 - - - - Q3MainWindow - - - Line up - 整列 - - - - Customize... - カスタマイズ... - - - - Q3NetworkProtocol - - - Operation stopped by the user - 操作がユーザによって停止されました - - - - Q3ProgressDialog - - - - Cancel - キャンセル - - - - Q3TabDialog - - - - OK - OK - - - - Apply - 適用 - - - - Help - ヘルプ - - - - Defaults - デフォルト - - - - Cancel - キャンセル - - - - Q3TextEdit - - - &Undo - 元に戻す(&U) - - - - &Redo - やり直す(&R) - - - - Cu&t - 切り取り(&T) - - - - &Copy - コピー(&C) - - - - &Paste - 貼り付け(&P) - - - - Clear - 消去 - - - - - Select All - すべてを選択 - - - - Q3TitleBar - - - System - システム - - - - Restore up - 元に戻す - - - - Minimize - 最小化 - - - - Restore down - 元に戻す - - - - Maximize - 最大化 - - - - Close - 閉じる - - - - Contains commands to manipulate the window - ウィンドウを操作するコマンドを含みます - - - - Puts a minimized back to normal - 最小化されたウィンドウを元のサイズに戻します - - - - Moves the window out of the way - ウィンドウを隠します - - - - Puts a maximized window back to normal - 最大化されたウィンドウを元のサイズに戻します - - - - Makes the window full screen - ウィンドウをフルスクリーンにします - - - - Closes the window - ウィンドウを閉じます - - - - Displays the name of the window and contains controls to manipulate it - ウィンドウの名前と、ウィンドウを操作するコントロールを表示します - - - - Q3ToolBar - - - More... - その他... - - - - Q3UrlOperator - - - - - The protocol `%1' is not supported - プロトコル '%1' はサポートされていません - - - - The protocol `%1' does not support listing directories - プロトコル '%1' はディレクトリのリスティングをサポートしていません - - - - The protocol `%1' does not support creating new directories - プロトコル '%1' は新しいディレクトリの作成をサポートしていません - - - - The protocol `%1' does not support removing files or directories - プロトコル '%1' はファイルまたはディレクトリの削除をサポートしていません - - - - The protocol `%1' does not support renaming files or directories - プロトコル '%1' はファイルまたはディレクトリの名前の変更をサポートしていません - - - - The protocol `%1' does not support getting files - プロトコル '%1' はファイルの取得をサポートしていません - - - - The protocol `%1' does not support putting files - プロトコル '%1' はファイルの送信をサポートしていません - - - - - The protocol `%1' does not support copying or moving files or directories - プロトコル '%1' はファイルまたはディレクトリのコピーまたは移動をサポートしていません - - - - - (unknown) - (不明) - - - - Q3Wizard - - - &Cancel - キャンセル(&C) - - - - < &Back - < 戻る(&B) - - - - &Next > - 次へ(&N) > - - - - &Finish - 完了(&F) - - - - &Help - ヘルプ(&H) - - - - QAbstractSocket - - - - - - Host not found - ホストが見つかりませんでした - - - - - - Connection refused - 接続が拒否されました - - - - Connection timed out - 接続がタイムアウトしました - - - - - - Operation on socket is not supported - 抽象ソケットクラスでのソケットのエラー - このソケットへのこの操作はサポートされていません - - - - Socket operation timed out - ソケット操作がタイムアウトしました - - - - Socket is not connected - ソケットが接続されていません - - - - Network unreachable - ネットワークへ到達できません - - - - QAbstractSpinBox - - - &Step up - 上(&S) - - - - Step &down - 下(&D) - - - - &Select All - すべてを選択(&S) - - - - QApplication - - - Activate - アクティブに - - - - Activates the program's main window - メインウィンドウをアクティブにする - - - - Executable '%1' requires Qt %2, found Qt %3. - 実行可能ファイル '%1' には Qt %2 が必要です。Qt %3 が見つかりました。 - - - - Incompatible Qt Library Error - 互換性のないQtライブラリエラー - - - - QT_LAYOUT_DIRECTION - Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout. - LTR - - - - QAxSelect - - - Select ActiveX Control - ActiveX Control を選択 - - - - OK - OK - - - - &Cancel - キャンセル(&C) - - - - COM &Object: - COM オブジェクト(&O): - - - - QCheckBox - - - Uncheck - 選択解除 - - - - Check - 選択 - - - - Toggle - 反転 - - - - QColorDialog - - - Hu&e: - 色相(&E): - - - - &Sat: - 彩度(&S): - - - - &Val: - 明度(&V): - - - - &Red: - 赤(&R): - - - - &Green: - 緑(&G): - - - - Bl&ue: - 青(&U): - - - - A&lpha channel: - アルファチャネル(&L): - - - - Select Color - - - - - &Basic colors - 基本的なカラー(&B) - - - - &Custom colors - カスタムカラー(&C) - - - &Define Custom Colors >> - カスタムカラーの定義(&D) >> - - - OK - OK - - - Cancel - キャンセル - - - - &Add to Custom Colors - カスタムカラーに追加(&A) - - - Select color - カラーの選択 - - - - QComboBox - - - - Open - オープン - - - - False - - - - - True - - - - - Close - 閉じる - - - - QCoreApplication - - - %1: key is empty - QSystemSemaphore - %1: キーが空です - - - - %1: unable to make key - QSystemSemaphore - %1: キーを作成できません - - - - %1: ftok failed - QSystemSemaphore - %1: fork に失敗しました - - - - QDB2Driver - - - Unable to connect - 接続できません - - - - Unable to commit transaction - トランザクションをコミットできません - - - - Unable to rollback transaction - トランザクションをロールバックできません - - - - Unable to set autocommit - オートコミットを設定できません - - - - QDB2Result - - - - Unable to execute statement - ステートメントを実行できません - - - - Unable to prepare statement - プリペアステートメントを使えません - - - - Unable to bind variable - 変数をバインドできません - - - - Unable to fetch record %1 - レコード %1 をフェッチできません - - - - Unable to fetch next - 次のレコードをフェッチできません - - - - Unable to fetch first - 最初のレコードをフェッチできません - - - - QDateTimeEdit - - - AM - AM - - - - am - am - - - - PM - PM - - - - pm - pm - - - - QDial - - - QDial - ダイヤル - - - - SpeedoMeter - スピードメータ - - - - SliderHandle - スライダハンドル - - - - QDialog - - - What's This? - ヒント? - - - - Done - 終了 - - - - QDialogButtonBox - - - - - OK - OK - - - - Cancel - キャンセル - - - - Apply - 適用 - - - - Ignore - 無視 - - - - Retry - 再試行 - - - - Abort - 中止 - - - - Help - ヘルプ - - - - Save - 保存 - - - - &Save - 保存(&S) - - - - Open - オープン - - - - &Cancel - キャンセル(&C) - - - - Close - 閉じる - - - - &Close - 閉じる(&C) - - - - Reset - リセット - - - - Don't Save - 保存しない - - - - Close without Saving - 保存せずに閉じる - - - - Discard - 変更を破棄 - - - - &Yes - はい(&Y) - - - - Yes to &All - 全てにはい(&A) - - - - &No - いいえ(&N) - - - - N&o to All - 全てにいいえ(&O) - - - - Save All - すべて保存 - - - - Restore Defaults - デフォルトに戻す - - - - &OK - OK(&O) - - - - QDirModel - - - Name - 名前 - - - - Size - サイズ - - - - Date Modified - 更新日 - - - - Kind - Match OS X Finder - 種類 - - - - Type - All other platforms - タイプ - - - - QDockWidget - - - Close - 閉じる - - - - Dock - ドック - - - - Float - フロート - - - - QDoubleSpinBox - - - More - 増やす - - - - Less - 減らす - - - - QErrorMessage - - - Debug Message: - デバッグメッセージ: - - - - Warning: - 警告: - - - - Fatal Error: - 致命的なエラー: - - - - &Show this message again - 次回もこのメッセージを表示する(&S) - - - - &OK - OK(&O) - - - - QFile - - - - Destination file exists - 新しい名前のファイルは既に存在します - - - - Cannot remove source file - 元のファイルを削除できません - - - - Cannot open %1 for input - コピー元ファイル %1 を読めません - - - - Cannot open for output - コピー先のファイルをオープンできません - - - - Failure to write block - 書き込みに失敗しました - - - - Cannot create %1 for output - コピー先として %1 を作成できません - - - - QFileDialog - - - - All Files (*) - すべてのファイル(*) - - - - Directories - ディレクトリ - - - - - Directory: - ディレクトリ: - - - - - File &name: - ファイル名(&N): - - - - - - - &Open - オープン(&O) - - - - - &Save - 保存(&S) - - - - Open - オープン - - - Save - 保存 - - - -File not found. -Please verify the correct file name was given - -ファイルが見つかりません。 -正しいファイル名が入力されたかどうか確認してください - - - - %1 already exists. -Do you want to replace it? - %1 はすでに存在します。 -置き換えますか? - - - - %1 -File not found. -Please verify the correct file name was given. - %1 -ファイルが見つかりません。 -正しいファイル名が入力されたかどうか確認してください。 - - - - My Computer - マイ コンピュータ - - - - - %1 -Directory not found. -Please verify the correct directory name was given. - %1 -ディレクトリが見つかりません。 -正しいディレクトリ名が入力されたかどうか確認してください。 - - - Sort - ソート - - - - &Rename - 名前の変更(&R) - - - - &Delete - 削除(&D) - - - &Reload - リロード(&R) - - - Sort by &Name - 名前順にソート(&N) - - - Sort by &Size - サイズ順にソート(&S) - - - Sort by &Date - 日付順にソート(&D) - - - &Unsorted - ソート解除(&U) - - - - Show &hidden files - 隠しファイルの表示(&H) - - - - - Back - 戻る - - - - - Parent Directory - 親ディレクトリ - - - - - Create New Folder - 新しいフォルダの作成 - - - - - List View - 一覧表示 - - - - - Detail View - 詳細表示 - - - - - Look in: - 検索する場所: - - - - - Files of type: - ファイルの種類: - - - - Drive - ドライブ - - - - - File - ファイル - - - - File Folder - Match Windows Explorer - ファイルフォルダ - - - - Folder - All other platforms - フォルダ - - - - Alias - Mac OS X Finder - エイリアス - - - - Shortcut - All other platforms - ショートカット - - - - Unknown - 不明 - - - - All Files (*.*) - すべてのファイル(*.*) - - - - Save As - 名前を付けて保存 - - - Open - オープン - - - Select a Directory - ディレクトリを選択 - - - - '%1' is write protected. -Do you want to delete it anyway? - '%1' は書き込みが禁止されています。 -本当に削除しますか? - - - - Are sure you want to delete '%1'? - '%1' を本当に削除しますか? - - - - Could not delete directory. - ディレクトリを削除できませんでした。 - - - - Find Directory - ディレクトリの検索 - - - - Show - 表示 - - - - &New Folder - 新しいフォルダ(&N) - - - - - &Choose - 選択(&C) - - - - New Folder - 新しいフォルダ - - - - Recent Places - 履歴 - - - - - Forward - 進む - - - - Remove - 削除 - - - - QFileSystemModel - - - Name - 名前 - - - - Size - サイズ - - - - Date Modified - 更新日 - - - - Kind - Match OS X Finder - 種類 - - - - Type - All other platforms - タイプ - - - - - %1 TB - %1 TB - - - - - %1 GB - %1 GB - - - - - %1 MB - %1 MB - - - - - %1 KB - %1 KB - - - - - %1 bytes - %1 バイト - - - - Invalid filename - 無効なファイル名 - - - - <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. - <b>ファイル名 "%1" は使用できません。</b><p>名前を短くしたり、アクセント記号などを削除して再度試してください。 - - - - My Computer - マイ コンピュータ - - - - Computer - コンピュータ - - - - QFontDatabase - - - - Normal - ここはどう訳すべきか... - 明朝 - - - - - - Bold - ゴシック - - - - - Demi Bold - Demi Bold - - - - - - Black - 太字 - - - - Demi - Demi - - - - - Light - 細字 - - - - - Italic - イタリック - - - - - Oblique - 斜体 - - - - Any - すべて - - - - Latin - ラテン - - - - Greek - ギリシャ - - - - Cyrillic - キリル - - - - Armenian - アルメニア - - - - Hebrew - ヘブライ - - - - Arabic - アラビア - - - - Syriac - シリア - - - - Thaana - ターナ - - - - Devanagari - デーヴァナーガリー - - - - Bengali - ベンガル - - - - Gurmukhi - グルムキー - - - - Gujarati - グジャラート - - - - Oriya - オリヤー - - - - Tamil - タミル - - - - Telugu - テルグ - - - - Kannada - カンナダ - - - - Malayalam - マラヤーラム - - - - Sinhala - シンハラ - - - - Thai - タイ - - - - Lao - ラーオ - - - - Tibetan - チベット - - - - Myanmar - ビルマ - - - - Georgian - グルジア - - - - Khmer - クメール - - - - Simplified Chinese - 簡体中国 - - - - Traditional Chinese - 繁体中国 - - - - Japanese - 日本 - - - - Korean - ハングル - - - - Vietnamese - ベトナム - - - - Symbol - 記号 - - - - Ogham - オガム - - - - Runic - ルーン - - - - QFontDialog - - - &Font - フォント(&F) - - - - Font st&yle - フォントスタイル(&Y) - - - - &Size - サイズ(&S) - - - - Effects - 文字飾り - - - - Stri&keout - 取り消し線(&K) - - - - &Underline - 下線(&U) - - - - Sample - サンプル - - - - Wr&iting System - 言語(&I) - - - - - Select Font - フォントの選択 - - - - QFtp - - - - Not connected - 未接続です - - - - - Host %1 not found - ホスト %1 が見つかりませんでした - - - - - Connection refused to host %1 - ホスト %1 への接続が拒否されました - - - - Connection timed out to host %1 - ホスト %1 への接続がタイムアウトしました - - - - - - Connected to host %1 - ホスト %1 に接続しました - - - - - Connection refused for data connection - データ接続のための接続が拒否されました - - - - - - - Unknown error - 不明なエラー - - - - - Connecting to host failed: -%1 - ホストへの接続に失敗しました: -%1 - - - - - Login failed: -%1 - ログインに失敗しました: -%1 - - - - - Listing directory failed: -%1 - ディレクトリのリストに失敗しました: -%1 - - - - - Changing directory failed: -%1 - ディレクトリの変更に失敗しました: -%1 - - - - - Downloading file failed: -%1 - ファイルのダウンロードに失敗しました: -%1 - - - - - Uploading file failed: -%1 - ファイルのアップロードに失敗しました: -%1 - - - - - Removing file failed: -%1 - ファイルの削除に失敗しました: -%1 - - - - - Creating directory failed: -%1 - ディレクトリの作成に失敗しました: -%1 - - - - - Removing directory failed: -%1 - ディレクトリの削除に失敗しました: -%1 - - - - - - Connection closed - 接続が閉じられました - - - - Host %1 found - ホスト %1 が見つかりました - - - - Connection to %1 closed - %1 への接続が閉じられました - - - - Host found - ホストが見つかりました - - - - Connected to host - ホストに接続しました - - - - QHostInfo - - - Unknown error - 不明なエラー - - - - QHostInfoAgent - - - - - - - - - - Host not found - ホストが見つかりません - - - - - - - Unknown address type - 不明なアドレス型です - - - - - - Unknown error - 不明なエラー - - - - QHttp - - - HTTPS connection requested but SSL support not compiled in - HTTPSによる接続が要求されましたが、SSLのサポートがコンパイル時に組み込まれていないため、接続できません - - - - - - - Unknown error - 不明なエラー - - - - - Request aborted - 要求が中止されました - - - - - No server set to connect to - 接続が設定されているサーバがありません - - - - - Wrong content length - コンテンツの長さが正しくありません - - - - - Server closed connection unexpectedly - サーバの接続が予期せず閉じられました - - - - Unknown authentication method - 非対応の認証方法が要求されました - - - - Error writing response to device - デバイスへの書き込み時にエラーが発生しました - - - - - Connection refused - 接続が拒否されました - - - - - - Host %1 not found - ホスト %1 が見つかりませんでした - - - - - - - HTTP request failed - HTTP要求に失敗しました - - - - - Invalid HTTP response header - 無効なHTTP応答ヘッダです - - - - - - - Invalid HTTP chunked body - 無効なHTTPチャンクドボディです - - - - Host %1 found - ホスト %1 が見つかりました - - - - Connected to host %1 - ホスト %1 に接続しました - - - - Connection to %1 closed - %1 への接続が閉じられました - - - - Host found - ホストが見つかりました - - - - Connected to host - ホストに接続しました - - - - - Connection closed - 接続が閉じられました - - - - Proxy authentication required - プロキシーの認証が必要です - - - - Authentication required - 認証が必要です - - - - Connection refused (or timed out) - 接続が拒否されたか、タイムアウトしました - - - - Proxy requires authentication - プロキシーの認証が必要です - - - - Host requires authentication - ホストの認証が必要です - - - - Data corrupted - データが破損しています - - - - Unknown protocol specified - 未対応のプロトコルです - - - - SSL handshake failed - SSLのハンドシェークに失敗しました - - - - QHttpSocketEngine - - - Did not receive HTTP response from proxy - プロキシーからHTTPレスポンスを受信できませんでした - - - - Error parsing authentication request from proxy - プロキシーからの認証要求のパースに失敗しました - - - - Authentication required - 認証が必要です - - - - Proxy denied connection - プロキシーが接続を拒否しました - - - - Error communicating with HTTP proxy - HTTP プロキシーとの通信にて、エラーが発生しました - - - - Proxy server not found - プロキシーサーバが見つかりません - - - - Proxy connection refused - プロキシーが接続を拒否しました - - - - Proxy server connection timed out - プロキシーとの接続がタイムアウトしました - - - - Proxy connection closed prematurely - プロキシーの接続が通信の終了前に切断されました - - - - QIBaseDriver - - - Error opening database - データベースのオープンでエラーが発生しました - - - - Could not start transaction - トランザクションを開始できませんでした - - - - Unable to commit transaction - トランザクションをコミットできません - - - - Unable to rollback transaction - トランザクションをロールバックできません - - - - QIBaseResult - - - Unable to create BLOB - バイナリラージオブジェクトを作成できません - - - - Unable to write BLOB - バイナリラージオブジェクトを書き込めません - - - - Unable to open BLOB - バイナリラージオブジェクトをオープンできません - - - - Unable to read BLOB - バイナリラージオブジェクトを読み込めません - - - - - Could not find array - 配列が見つかりませんでした - - - - Could not get array data - 配列データを取得できませんでした - - - - Could not get query info - クエリー情報を取得できませんでした - - - - Could not start transaction - トランザクションを開始できませんでした - - - - Unable to commit transaction - トランザクションをコミットできません - - - - Could not allocate statement - ステートメントの領域を確保できませんでした - - - - Could not prepare statement - プリペアステートメントを使えませんでした - - - - - Could not describe input statement - INPUT ステートメントの情報を取得できませんでした - - - - Could not describe statement - ステートメントの情報を取得できませんでした - - - - Unable to close statement - ステートメントをクローズできません - - - - Unable to execute query - クエリーを実行できません - - - - Could not fetch next item - 次のレコードをフェッチできませんでした - - - - Could not get statement info - ステートメントの情報を取得できませんでした - - - - QIODevice - - - Permission denied - 許可されていません - - - - Too many open files - 開かれたファイルが多すぎます - - - - No such file or directory - そのようなファイルやディレクトリはありません - - - - No space left on device - デバイスの残り容量がありません - - - - Unknown error - 不明なエラー - - - - QInputContext - - - XIM - XIM - - - - XIM input method - XIM 入力メソッド - - - - Windows input method - Windows 入力メソッド - - - - Mac OS X input method - Mac OS X 入力メソッド - - - - QInputDialog - - - Enter a value: - 数値を入力: - - - - QLibrary - - - Could not mmap '%1': %2 - '%1' をメモリにマッピングできませんでした: %2 - - - - Plugin verification data mismatch in '%1' - '%1' でプラグイン検証データが一致しません - - - - Could not unmap '%1': %2 - '%1' のマッピングを解除できませんでした: %2 - - - - The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] - プラグイン '%1' は、互換性のない Qt ライブラリを使用しています。(%2.%3.%4) [%5] - - - - The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" - プラグイン '%1' は、互換性のない Qt ライブラリを使用しています。ビルドキー "%2" が必要ですが、"%3" しかありません - - - - Unknown error - 不明なエラー - - - QLibrary::load_sys: Cannot load %1 (%2) - QLibrary::load_sys: %1 をロードできません (%2) - - - QLibrary::unload_sys: Cannot unload %1 (%2) - QLibrary::unload_sys: %1 をアンロードできません (%2) - - - QLibrary::resolve_sys: Symbol "%1" undefined in %2 (%3) - QLibrary::resolve_sys: シンボル "%1" は %2 で定義されていません (%3) - - - - - The shared library was not found. - 共有ライブラリがみつかりません。 - - - - The file '%1' is not a valid Qt plugin. - ファイル '%1' は Qt プラグインではありません。 - - - - The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) - プラグイン '%1' はこの Qt と互換性のないライブラリを使用しています。 (デバック版とリリース版のライブラリを同時に使用することはできません) - - - - - Cannot load library %1: %2 - ライブラリ '%1' を読み込むことができません: %2 - - - - - Cannot unload library %1: %2 - ライブラリ %1 を解放することができません: %2 - - - - - Cannot resolve symbol "%1" in %2: %3 - '%2'に含まれる識別子 "%1" を解決できません: %3 - - - - QLineEdit - - - &Undo - 元に戻す(&U) - - - - &Redo - やり直す(&R) - - - - Cu&t - 切り取り(&T) - - - - &Copy - コピー(&C) - - - - &Paste - 貼り付け(&P) - - - - Delete - 削除 - - - - Select All - すべてを選択 - - - - QLocalServer - - - - %1: Name error - %1: 名前の解決に失敗 - - - - %1: Permission denied - %1: 許可されていません - - - - %1: Address in use - %1: アドレスは既に使用されています - - - - %1: Unknown error %2 - %1: 未知のエラー %2 - - - - QLocalSocket - - - - %1: Connection refused - %1: 接続が拒否されました - - - - - %1: Remote closed - %1: リモートにより接続が閉じられました - - - - - - - %1: Invalid name - %1: 無効な名前です - - - - - %1: Socket access error - %1: ソケットアクセスのエラーです - - - - - %1: Socket resource error - %1: ソケットリソースのエラーです - - - - - %1: Socket operation timed out - %1: ソケット操作がタイムアウトしました - - - - - %1: Datagram too large - %1: データグラムが大きすぎます - - - - - - %1: Connection error - %1: 接続のエラーが発生しました - - - - - %1: The socket operation is not supported - %1: そのソケット操作はサポートされていません - - - - %1: Unknown error - %1: 未知のエラーです - - - - - %1: Unknown error %2 - %1: 未知のエラー %2 - - - - QMYSQLDriver - - - Unable to open database ' - データベースをオープンできません ' - - - - Unable to connect - 接続できません - - - - Unable to begin transaction - トランザクションを開始できません - - - - Unable to commit transaction - トランザクションをコミットできません - - - - Unable to rollback transaction - トランザクションをロールバックできません - - - - QMYSQLResult - - - Unable to fetch data - データをフェッチできません - - - - Unable to execute query - クエリーを実行できません - - - - Unable to store result - 実行結果を記録できません - - - - - Unable to prepare statement - プリペアステートメントを使えません - - - - Unable to reset statement - ステートメントをリセットできません - - - - Unable to bind value - 値をバインドできません - - - - Unable to execute statement - ステートメントを実行できません - - - - - Unable to bind outvalues - 出力値をバインドできません - - - - Unable to store statement results - ステートメントの実行結果を記録できません - - - - Unable to execute next query - 次のクエリーを実行できません - - - - Unable to store next result - 次の結果を記録できません - - - - QMdiArea - - - (Untitled) - (タイトルなし) - - - - QMdiSubWindow - - - %1 - [%2] - %1 - [%2] - - - - Close - 閉じる - - - - Minimize - 最小化 - - - - Restore Down - 元に戻す - - - - &Restore - 元に戻す(&R) - - - - &Move - 移動(&M) - - - - &Size - サイズ(&S) - - - - Mi&nimize - 最小化(&N) - - - - Ma&ximize - 最大化(&X) - - - - Stay on &Top - 常に手前に表示(&T) - - - - &Close - 閉じる(&C) - - - - - [%1] - - [%1] - - - - Maximize - 最大化 - - - - Unshade - たぶん選択・非選択状態のウィンドウのことだと思うけど。fvwmなどのx11で使われている用語 - 非選択 - - - - Shade - 選択 - - - - Restore - 元に戻す - - - - Help - ヘルプ - - - - Menu - メニュー - - - - QMenu - - - - Close - 閉じる - - - - - Open - オープン - - - - - - Execute - 実行 - - - - QMenuBar - - About Qt - Qt について - - - - QMessageBox - - - Help - ヘルプ - - - - - - - OK - OK - - - <h3>About Qt</h3>%1<p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qtopia Core.</p><p>Qt is a Trolltech product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p> - <h3>Qt について</h3>%1 -<p>QtはクロスプラットフォームのC++ アプリケーション開発ツールキットです。</p> -<p>Qt は MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, 商用のUnix派生版でソースコード互換を実現します。また、Qtopia Coreのように、内蔵デバイスでも利用可能です。</p> -<p>QtはTrolltechの商品です。詳細は<tt>http://qt.nokia.com/</tt>を参照してください。</p> - - - <p>This program uses Qt version %1.</p> - <p>このプログラムは Qt バージョン %1 を使用しています。</p> - - - <p>This program uses Qt Open Source Edition version %1.</p><p>Qt Open Source Edition is intended for the development of Open Source applications. You need a commercial Qt license for development of proprietary (closed source) applications.</p><p>Please see <a href="http://qt.nokia.com/company/model/">qt.nokia.com/company/model/</a> for an overview of Qt licensing.</p> - <p>このプログラムは Qt オープンソース版バージョン %1 を使用しています。</p> -<p>Qt オープンソース版はオープンソースのアプリケーションの開発用です。ソースコードを公開しない商用アプリケーションを開発するには商用版のライセンスが必要です。</p><p>Qtのライセンスについては<tt>http://qt.nokia.com/company/model.html</tt>を参照してください。</p> - - - - About Qt - Qt について - - - - Show Details... - 詳細を表示... - - - - Hide Details... - 詳細を隠す... - - - - <h3>About Qt</h3><p>This program uses Qt version %1.</p><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&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.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p>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.</p><p>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.</p><p>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.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p> - <h3>Qtについて</h3> -<p>このプログラムは Qt バージョン %1 を使用しています。</p> -<p>Qt は、クロスプラットホームのアプリケーション開発に使用される C++ のツールキットです。</p> -<p>Qt は、 MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, そして多数の Unix 系OS環境に対して、単一のソースからバイナリを生成します。 -また、 Linux および Windows CE を元とした組み込み環境にも対応しています。</p> -<p>Qt は様々なユーザの要望に応じるために、3つの異なるライセンスで提供されています。</p> -<p> -Qt 商用ライセンスは、プロプライエタリまたは商用ソフトウェアに適用できます。 -この場合は、他者とのソースコードの共有を拒否し、 GNU LGP バージョン 2.1 または GNU GPL バージョン 3.0 を許容できないソフトウェアにおいて Qt を使用できます。 -</p> -<p> -Qt GNU LGPL バージョン 2.1 ライセンスは、プロプライエタリまたはオープンソースソフトウェアに適用できます。 -この場合は、 GNU LGPL バージョン 2.1 に従う必要があります。 -</p> -<p> -Qt GNU General Public License バージョン 3.0 ライセンスは、GNU GPL バージョン 3.0 または GPL 3.0 と互換性のあるライセンスを採用しているソフトウェアに適用されます。 -この場合は、GNU GPL バージョン 3.0 に従う必要があります。 -</p> -<p> -ライセンスの詳細については、<a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> -を参照してください。</p> -<p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p> -<p>Qt は Nokia の製品です。詳細については<a href="http://qt.nokia.com/">qt.nokia.com</a> を参照してください。</p> -<p> -訳注: ライセンスはここにある翻訳は参考のためのものであり、オリジナルの(英語の)ものが正式なものとなります。 -</p> - - - - QMultiInputContext - - - Select IM - インプットメソッドを選択 - - - - QMultiInputContextPlugin - - - Multiple input method switcher - 複数のインプットメソッドを切り替え - - - - Multiple input method switcher that uses the context menu of the text widgets - テキストウィジェットのコンテキストメニューを使った複数のインプットメソッドの切り替えです - - - - QNativeSocketEngine - - - Unable to initialize non-blocking socket - 非ブロック型ソケットを初期化できません - - - - Unable to initialize broadcast socket - ブロードキャストソケットを初期化できません - - - - Attempt to use IPv6 socket on a platform with no IPv6 support - IPv6 がサポートされていないプラットフォームで IPv6 ソケットを使用しようとしています - - - - The remote host closed the connection - リモートホストは接続を閉じました - - - - Network operation timed out - ネットワーク操作がタイムアウトしました - - - - Out of resources - リソースが足りません - - - - Unsupported socket operation - サポートされていないソケット操作です - - - - Protocol type not supported - プロトコル型がサポートされていません - - - - Invalid socket descriptor - 無効なソケット記述子です - - - - Host unreachable - ホストへ到達できません - - - - Network unreachable - ネットワークへ到達できません - - - - Permission denied - 許可されていません - - - - Connection timed out - 接続がタイムアウトしました - - - - Connection refused - 接続を拒否されました - - - - The bound address is already in use - バインドアドレスは既に使われています - - - - The address is not available - そのアドレスは使用できません - - - - The address is protected - そのアドレスへのアクセス権がありません - - - - Datagram was too large to send - データグラムが大き過ぎて送信できませんでした - - - - Unable to send a message - メッセージを送信できません - - - - Unable to receive a message - メッセージを受信できません - - - - Unable to write - 書き込みができません - - - - Network error - ネットワークエラー - - - - Another socket is already listening on the same port - 別のソケットが同じポートで既に待ち受けています - - - - Operation on non-socket - 非ソケットに対する操作です - - - - Unknown error - 不明なエラー - - - - The proxy type is invalid for this operation - このプロキシーは、この操作に対応していません - - - - QNetworkAccessCacheBackend - - - Error opening %1 - オープンのエラー %1 - - - - QNetworkAccessDebugPipeBackend - - - Write error writing to %1: %2 - %1 への書き込み時にエラーが発生しました: %2 - - - - QNetworkAccessFileBackend - - - Request for opening non-local file %1 - 非ローカルファイル %1 をオープンするよう要求されましたが、ローカルファイルのみオープンできます - - - - Error opening %1: %2 - %1 をオープンする時にエラーが発生しました: %2 - - - - Write error writing to %1: %2 - %1 への書き込み時にエラーが発生しました: %2 - - - - Cannot open %1: Path is a directory - %1 をオープンできません。指定されたパスはディレクトリです - - - - Read error reading from %1: %2 - %1 を読み込み時にエラーが発生しました: %2 - - - - QNetworkAccessFtpBackend - - - No suitable proxy found - 適切なプロキシーがみつかりません - - - - Cannot open %1: is a directory - %1 をオープンできません。指定されたパスはディレクトリです - - - - Logging in to %1 failed: authentication required - %1 へのログインに失敗しました。認証が必要です - - - - Error while downloading %1: %2 - %1 をダウンロード中にエラーが発生しました: %2 - - - - Error while uploading %1: %2 - %1 をアップロード中にエラーが発生しました: %2 - - - - QNetworkAccessHttpBackend - - - No suitable proxy found - 適切なプロキシーがみつかりません - - - - QNetworkReply - - - Error downloading %1 - server replied: %2 - %1 をダウンロード中にエラーが発生しました。サーバの返答: %2 - - - - Protocol "%1" is unknown - プロトコル "%1" はサポートされていません - - - - QNetworkReplyImpl - - - - Operation canceled - 操作はキャンセルされました - - - - QOCIDriver - - - Unable to initialize - QOCIDriver - 初期化できません - - - - Unable to logon - ログオンできません - - - - Unable to begin transaction - トランザクションを開始できません - - - - Unable to commit transaction - トランザクションをコミットできません - - - - Unable to rollback transaction - トランザクションをロールバックできません - - - - QOCIResult - - - - - Unable to bind column for batch execute - バッチ処理用にフィールドをバインドできません - - - - Unable to execute batch statement - バッチステートメントを実行できません - - - - Unable to goto next - 次のレコードへ進めません - - - - Unable to alloc statement - ステートメントの領域を確保できません - - - - Unable to prepare statement - プリペアステートメントを使えません - - - - Unable to bind value - 値をバインドできません - - - Unable to execute select statement - SELECT ステートメントを実行できません - - - - Unable to execute statement - ステートメントを実行できません - - - - QODBCDriver - - - Unable to connect - 接続できません - - - - Unable to connect - Driver doesn't support all needed functionality - 接続できません - ドライバは全ての必要な機能をサポートしていません - - - - Unable to disable autocommit - オートコミットを無効にできません - - - - Unable to commit transaction - トランザクションをコミットできません - - - - Unable to rollback transaction - トランザクションをロールバックできません - - - - Unable to enable autocommit - オートコミットを有効にできません - - - - QODBCResult - - - - Unable to execute statement - ステートメントを実行できません - - - - Unable to fetch next - 次のレコードをフェッチできません - - - - Unable to prepare statement - プリペアステートメントを使えません - - - - Unable to bind variable - 変数をバインドできません - - - - - QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration - QODBCResult::reset: ステートメントの属性として 'SQL_CURSOR_STATUS' を設定できません。ODBC ドライバの構成をチェックしてください - - - - - - Unable to fetch last - リストを取得できません - - - - Unable to fetch - フェッチできません - - - - Unable to fetch first - 最初のレコードをフェッチできません - - - - Unable to fetch previous - 前のレコードをフェッチできません - - - - QObject - - False - False - - - True - True - - - - Home - ホーム - - - - Operation not supported on %1 - %1 ではこの操作はサポートされていません - - - - Invalid URI: %1 - 無効なURIです: %1 - - - - Socket error on %1: %2 - %1 のソケットにおいてエラーが発生しました: %2 - - - - Remote host closed the connection prematurely on %1 - リモートホスト %1 との接続が通信の終了前に切断されました - - - - - No host name given - ホストネームが与えられていません - - - - QPPDOptionsModel - - - Name - 名前 - - - - Value - - - - - QPSQLDriver - - - Unable to connect - 接続できません - - - - Could not begin transaction - トランザクションを開始できませんでした - - - - Could not commit transaction - トランザクションをコミットできませんでした - - - - Could not rollback transaction - トランザクションをロールバックできませんでした - - - - Unable to subscribe - subscribe できません - - - - Unable to unsubscribe - unsubscribe できません - - - - QPSQLResult - - - Unable to create query - クエリーを作成できません - - - - Unable to prepare statement - プリペアステートメントを使えません - - - - QPageSetupWidget - - - Centimeters (cm) - センチメートル (cm) - - - - Millimeters (mm) - ミリメートル (mm) - - - - Inches (in) - インチ (in) - - - - Points (pt) - ポイント (pt) - - - - Form - 書式設定 - - - - Paper - 用紙 - - - - Page size: - ページサイズ: - - - - Width: - 幅: - - - - Height: - 高さ: - - - - Paper source: - 給紙装置: - - - - Orientation - 印刷方向 - - - - Portrait - 縦 (ポートレート) - - - - Landscape - 横 (ランドスケープ) - - - - Reverse landscape - 横 反転 (リバースランドスケープ) - - - - Reverse portrait - 縦 反転 (リバースポートレート) - - - - Margins - 余白 - - - - top margin - 上端余白 - - - - left margin - 左端余白 - - - - right margin - 右端余白 - - - - bottom margin - 下端余白 - - - - QPatternist::QtXmlPatterns - - - An %1-attribute with value %2 has already been declared. - 属性 %1 の値 %2 は既に宣言されています。 - - - - An %1-attribute must have a valid %2 as value, which %3 isn't. - 属性 %1 の値は %2 の型でなければなりませんが、 %3 が指定されました。 - - - - %1 is an unsupported encoding. - %1 はサポートされていないエンコーディングです。 - - - - %1 contains octets which are disallowed in the requested encoding %2. - エンコーディング %2 では許可されていないオクテットが %1 に含まれています。 - - - - The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. - %2 で使用されているエンコード %3 では、コードポイント %1 は有効な XML 表現ではありません。 - - - - Network timeout. - ネットワーク接続がタイムアウトしました。 - - - - Element %1 can't be serialized because it appears outside the document element. - エレメント %1 はシリアライズできません。このドキュメントの範囲を越えるエレメントを含んでいます。 - - - - Attribute %1 can't be serialized because it appears at the top level. - 属性 %1 はシリアライズできません。トップレベルに現れているためです。 - - - - Year %1 is invalid because it begins with %2. - %1 年はむこうです。%2 で始まっています。 - - - - Day %1 is outside the range %2..%3. - %1 日は、有効な範囲 %2..%3 を逸脱しています。 - - - - Month %1 is outside the range %2..%3. - %1 月は、有効な範囲 %2..%3 を逸脱しています。 - - - - Overflow: Can't represent date %1. - オーバーフロー: 日付 %1 を再現できません。 - - - - Day %1 is invalid for month %2. - %2 月には、%1 日は存在しません。 - - - - Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; - 24:%1:%2.%3 は無効です。24時0分0秒のみ使用できます - - - - Time %1:%2:%3.%4 is invalid. - 時刻 %1時%2分%3.%4秒は無効です。 - - - - Overflow: Date can't be represented. - オーバーフロー: 日付を再現できません。 - - - - - At least one component must be present. - 年、月、日のうちいずれかを指定しなければなりません。 - - - - At least one time component must appear after the %1-delimiter. - %1 の後には、時刻を指定しなければなりません。 - - - - No operand in an integer division, %1, can be %2. - ゼロ除算? NaN? - 整数の除算のためのオペランドが不足しています。%1 は %2 でなければなりません。 - - - - The first operand in an integer division, %1, cannot be infinity (%2). - 整数の除算における最初のオペランド %1 を認識できません (%2)。 - - - - The second operand in a division, %1, cannot be zero (%2). - 整数の除算における二つ目のオペランド %1 はゼロであってはいけまん(%2)。 - - - - %1 is not a valid value of type %2. - %1 は、%2 の型に対して有効な値ではありません。 - - - - When casting to %1 from %2, the source value cannot be %3. - %2 から %1 への型変換に際しては、値 %3 は有効な値ではありません。 - - - - Integer division (%1) by zero (%2) is undefined. - 整数の除算において %1 をゼロ (%2) で割った結果は定義されていません。 - - - - Division (%1) by zero (%2) is undefined. - 除算において %1 をゼロ (%2) で割った結果は定義されていません。 - - - - Modulus division (%1) by zero (%2) is undefined. - 剰余を求めるに際し、%1 をゼロ (%2) で除した結果は定義されていません。 - - - - - Dividing a value of type %1 by %2 (not-a-number) is not allowed. - 型 %1 を非数 %2 (NaN) で除すことはできません。 - - - - Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. - 型 %1 を%2 または %3 (正または負のゼロ) で除することはできません。 - - - - Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. - 型 %1 を %2 または %3 (正または負のゼロ)で乗ずることはできません。 - - - - A value of type %1 cannot have an Effective Boolean Value. - 型 %1 は有効な論理型(bool)ではありません。 - - - - Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. - ?? - 論理型は、論理型以外の複数の値からなる計算によって求めることはできません。 - - - - Value %1 of type %2 exceeds maximum (%3). - 型 %2 の値 %1 は、上限 (%3) を越えています。 - - - - Value %1 of type %2 is below minimum (%3). - 型 %2 の値 %1 は、下限 (%3) を越えています。 - - - - A value of type %1 must contain an even number of digits. The value %2 does not. - 型 %1 の値は偶数個の十進数文字を必要とします。しかし、%2 はそうではありません。 - - - - %1 is not valid as a value of type %2. - 型 %2 に対して、値 %1 は有効ではありません。 - - - - Ambiguous rule match. - 曖昧なルールにマッチしました。 - - - - Operator %1 cannot be used on type %2. - 型 %2 に対して、オペレータ %1 は使用できません。 - - - - Operator %1 cannot be used on atomic values of type %2 and %3. - アトミックな型 %2 と %3 に対して、オペレータ %1 は使用できません。 - - - - The namespace URI in the name for a computed attribute cannot be %1. - computed attrib. ってなんてやくすのが適当かな。 - 結合された属性に対する名前空間のURIとして、%1 を使用することはできません。 - - - - The name for a computed attribute cannot have the namespace URI %1 with the local name %2. - 結合された属性の名前空間URI %1 は、ローカルな名前である %2 と併用できません。 - - - - Type error in cast, expected %1, received %2. - 型変換時のエラーです。望んでいた %1 ではなく、%2 になりました。 - - - - 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. - %1 またはそれを継承している型への型変換においては、元の値の型は同じ型か、リテラルな文字列である必要があります。型 %2 は許可されていません。 - - - - No casting is possible with %1 as the target type. - 目標とする型に %1 を型変換することはできません。 - - - - It is not possible to cast from %1 to %2. - 型 %1 を型 %2 に型変換することはできません。 - - - - Casting to %1 is not possible because it is an abstract type, and can therefore never be instantiated. - 型 %1 への型変換はできません。抽象型であり、インスタンス化することができないからです。 - - - - It's not possible to cast the value %1 of type %2 to %3 - 型 %2 の値 %1 を、型 %3 に型変換することはできません - - - - Failure when casting from %1 to %2: %3 - %1 を %2 に型変換することができません: %3 - - - - A comment cannot contain %1 - コメントが %1 を含むことはできません - - - - A comment cannot end with a %1. - コメントは %1 で終了することはできません。 - - - - No comparisons can be done involving the type %1. - 型 %1 に対して比較を行うことはできません。 - - - - Operator %1 is not available between atomic values of type %2 and %3. - オペレータ %1 は、アトミックな型である %2 と %3 には適用できません。 - - - - In a namespace constructor, the value for a namespace cannot be an empty string. - 名前空間のスントラクトにおいて、空白の文字列を名前空間の値として使用することはできません。 - - - - The prefix must be a valid %1, which %2 is not. - プレフィックスは %1 でなければなりません。%2 は無効です。 - - - - The prefix %1 cannot be bound. - プレフィックス %1 はバウンドできません。 - - - - Only the prefix %1 can be bound to %2 and vice versa. - プレフィックス %1 は、%2 にのみバウンドできます。逆も同じです。 - - - - An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. - ドキュメントノードの子として属性ノードを指定することはできません。属性 %1 は誤った場所にあります。 - - - - Circularity detected - 循環を検出しました - - - - A library module cannot be evaluated directly. It must be imported from a main module. - ライブラリモジュールを直接評価することはできません。メインモジュールからインポートする必要があります。 - - - - No template by name %1 exists. - テンプレート名 %1 は存在しません。 - - - - A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. - 型 %1 は述部として使用できません。数値型か、論理型である必要があります。 - - - - A positional predicate must evaluate to a single numeric value. - positional? - 述部は評価されたとき、単一の数値になるようにしなければなりません。 - - - - The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid. - ターゲットとしている名前は、%1 であってはなりません。%2 は無効です。 - - - - %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. - %1 はターゲットとして無効です。%2 である必要があります。例えば "%3" のようにです。 - - - - The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. - バスの末端であるリーフは、単一のノードかアトミックな値である必要があります。複数の型の組み合わせであってはいけません。 - - - - The data of a processing instruction cannot contain the string %1 - 処理中のデータは、以下の文字列を含んでいてはなりません: %1 - - - - No namespace binding exists for the prefix %1 - プレフィックス %1 にバインドされたネームスペースがありません - - - - No namespace binding exists for the prefix %1 in %2 - %2 におけるプレフィックス %1 にバインディングされたネームスペースが存在しません - - - - - %1 is an invalid %2 - 型 %2 に対し、値 %1 は無効です - - - - The parameter %1 is passed, but no corresponding %2 exists. - パラメータ %1 を処理しました。しかし、対応する %2 が存在しません。 - - - - The parameter %1 is required, but no corresponding %2 is supplied. - パメータ %1 が必要です。しかし、対応する %2 がありません。 - - - - %1 takes at most %n argument(s). %2 is therefore invalid. - - %1 は、最大で %n 個の引数をとることができます。%2 は無効です。 - - - - - %1 requires at least %n argument(s). %2 is therefore invalid. - - %1 は、少くとも %n 個の引数を必要とします。%2 は無効です。 - - - - - The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. - %1 への最初の引数は、型 %2 であってはなりません。数値型、xs:yerMonthDuration、xs:dayTimeDurationである必要があります。 - - - - The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. - %1 への最初の引数は、型 %2 であってはなりません。%3, %4, %5 のいずれかである必要があります。 - - - - The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. - %1 への二つ目の引数は、型 %2 であってはなりません。%3, %4, %5 のいずれかである必要があります。 - - - - %1 is not a valid XML 1.0 character. - %1 は XML 1.0 において有効な文字ではありません。 - - - - The first argument to %1 cannot be of type %2. - %1 への最初の引数は、型 %2 であってはなりません。 - - - - The root node of the second argument to function %1 must be a document node. %2 is not a document node. - %1 への二つ目の引数のルートノードは、ドキュメントノードでなければなりません。しかし、%2 はドキュメントノードではありません。 - - - - If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. - ゾーンオフセットってなに? xmlにそんなのあったっけ? - もし二つの値がゾーンオフセットをもつ場合、両者は同じゾーンオフセットでなければなりません。%1 と %2 は同一ではありません。 - - - - %1 was called. - %1 が呼ばれました。 - - - - %1 must be followed by %2 or %3, not at the end of the replacement string. - %1 の後には、%2 か %3 が続かなければなりません。 - - - - In the replacement string, %1 must be followed by at least one digit when not escaped. - 置換操作において、%1 には少くとも一文字以上の数値が続く必要があります(エスケープされている場合を除く)。 - - - - In the replacement string, %1 can only be used to escape itself or %2, not %3 - 置換操作において、%1 はそれ自身または %2 をエスケープする為にのみ使用できます。%3 に対しては使用できません - - - - %1 matches newline characters - %1 は改行文字(列)にマッチしました - - - - %1 and %2 match the start and end of a line. - %1 と %2 は、行の先頭と末尾にマッチしました。 - - - - Matches are case insensitive - マッチは大文字小文字を区別しません - - - - Whitespace characters are removed, except when they appear in character classes - CDATA? - 空白文字は削除されました。ただし、キャラクタークラスに属するものは除きます - - - - %1 is an invalid regular expression pattern: %2 - %1 は有効な正規表現ではありません。: %2 - - - - %1 is an invalid flag for regular expressions. Valid flags are: - %1 は正規表現において無効なフラグです。使用可能なフラグは次の通りです: - - - - If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. - もし、最初の引数が空白からなる文字列か、長さが0 (名前空間をともなわない)である場合、プレフィックスを指定することはできません。しかし、プレフィックスとして %1 が指定されています。 - - - - It will not be possible to retrieve %1. - %1 を取得することはできないかもしれません。 - - - - The default collection is undefined - デフォルトのコレクションが定義されていません - - - - %1 cannot be retrieved - %1 を取得できません - - - - The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). - つまり、空白の文字です、はどうでもいいよね。 - 正規化された表現 %1 はサポートされていません。サポートされている表現は、%2, %3, %4, %5 のみです。 - - - - A zone offset must be in the range %1..%2 inclusive. %3 is out of range. - ゾーンオフセットは、%1 から %2 の範囲である必要があります(境界を含む)。%3 は範囲外です。 - - - - %1 is not a whole number of minutes. - %1 は、分を現す値ではありません。 - - - - The URI cannot have a fragment - この URI はフラグメントをもつことはできません - - - - Required cardinality is %1; got cardinality %2. - カーディナリティ %1 が必要です。%2 ではありません。 - - - - The item %1 did not match the required type %2. - アイテム %1 は、要求された型 %2 にマッチしません。 - - - - Attribute %1 cannot appear on the element %2. Only the standard attributes can appear. - エレメント %2 に属性 %1 を指定することはできません。標準の属性のみが許可されています。 - - - - Attribute %1 cannot appear on the element %2. Only %3 is allowed, and the standard attributes. - エレメント %2 に属性 %1 を指定することはできません。%3 と標準の属性のみが許可されています。 - - - - Attribute %1 cannot appear on the element %2. Allowed is %3, %4, and the standard attributes. - エレメント %2 に属性 %1 を指定することはできません。%3, %4 と標準の属性のみが許可されています。 - - - - Attribute %1 cannot appear on the element %2. Allowed is %3, and the standard attributes. - エレメント %2 に %1 は指定できません。%3 と標準の属性のみが指定できます。 - - - - XSL-T attributes on XSL-T elements must be in the null namespace, not in the XSL-T namespace which %1 is. - XSLT エレメントに対するXSLT属性は、名前空間がnullでなければなりません。%1 は使用できません。 - - - - The attribute %1 must appear on element %2. - 属性 %1 は、エレメント %2 にのみ記述できます。 - - - - The element with local name %1 does not exist in XSL-T. - ローカル名 %1 のエレメントは、XSLTに存在しません。 - - - - The variable %1 is unused - 値 %1 は使用されませんでした - - - - A construct was encountered which only is allowed in XQuery. - XQuery でのみ許可されている construct に遭遇しました。 - - - - - %1 is an unknown schema type. - %1 はサポートされていないスキーマのタイプです。 - - - - A template by name %1 has already been declared. - テンプレート名 '%1' は、既に宣言されています。 - - - - %1 is not a valid numeric literal. - %1 は数値リテラルとして無効です。 - - - - Only one %1 declaration can occur in the query prolog. - クェリーのプロローグでは、%1 は一回のみ宣言できます。 - - - - The initialization of variable %1 depends on itself - 再帰? - 値 %1 の初期化は、それ自身に依存しています - - - - No variable by name %1 exists - 変数 %1 は存在しません - - - - Version %1 is not supported. The supported XQuery version is 1.0. - バージョン %1 はサポートされていません。XQuery バージョン 1.0 のみサポートされています。 - - - - The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. - エンコーディング '%1' は無効です。ラテン文字 (空白を除く) からなるもので、正規表現 '%2' にマッチするもののみ使用できます。 - - - - No function with signature %1 is available - シグネチャ %1 をもつ関数がみつかりません - - - - - A default namespace declaration must occur before function, variable, and option declarations. - 標準の名前空間の宣言は、関数、変数、オプションの宣言の前にしなければなりません。 - - - - Namespace declarations must occur before function, variable, and option declarations. - 名前空間の宣言は、関数、変数、オプションの宣言の前にしなければなりません。 - - - - Module imports must occur before function, variable, and option declarations. - モジュールのインポートは、関数、変数、オプションの宣言の前にしなければなりません。 - - - - The keyword %1 cannot occur with any other mode name. - キーワード %1 は、他の名をともなって使用することはできません。 - - - - The value of attribute %1 must of type %2, which %3 isn't. - 属性 '%1' の値として '%3' が指定されましたが、型 '%2' でなければなりません。 - - - - It is not possible to redeclare prefix %1. - プレフィックス '%1' を再定義することはできません。 - - - - The prefix %1 can not be bound. By default, it is already bound to the namespace %2. - プレフィックス '%1' はバウンドできません。デフォルトでは、それは既に名前空間 '%2' にバウンドされています。 - - - - Prefix %1 is already declared in the prolog. - プロローグ部において、プレフィックス '%1' はすでに宣言されています。 - - - - The name of an option must have a prefix. There is no default namespace for options. - オプションの名前はプレフィックスをもたなければなりません。このオプションに対するデフォルトの名前空間は存在しません。 - - - - The Schema Import feature is not supported, and therefore %1 declarations cannot occur. - このスキーマのインポート機能は使用できません。また、'%1' 宣言も使用できません。 - - - - The target namespace of a %1 cannot be empty. - 名前空間 '%1' は、空であってはなりません。 - - - - The module import feature is not supported - モジュールインポートの機能はサポートされていません - - - - A variable by name %1 has already been declared. - 名前 '%1' の変数は、すでに宣言されています。 - - - - No value is available for the external variable by name %1. - 外部変数 '%1' の値がみつかりません。 - - - - A stylesheet function must have a prefixed name. - スタイルシート関数は、プレフィックス名を持たなければなりません。 - - - - The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) - ユーザ定義の関数の名前空間は、空であってはなりません。(すでに定義されているプレフィックス '%1' が使用できます) - - - - The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. - 名前空間 '%1' は予約済です。ユーザ定義の関数では使用することはできません。プレフィックス '%2' が使用できます。 - - - - 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 - ライブラリモジュールで使用されている名前空間は、モジュールの名前空間と同一でなければなりません。つまり、'%2' ではなく、'%1' でなければなりません - - - - A function already exists with the signature %1. - シグネチャー '%1' の関数はすでに存在しています。 - - - - No external functions are supported. All supported functions can be used directly, without first declaring them as external - 外部関数はサポートされていません。すべてのサポートされている関数は、外部宣言をすることなく、直接使用することができます - - - - An argument by name %1 has already been declared. Every argument name must be unique. - 引数名 '%1' は既に宣言されています。すべての引数名はユニークである必要があります。 - - - - When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. - パターン一致の内側で関数 '%1' を使用する場合、引数はリテラルな文字列を参照する値でなければなりません。 - - - - In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. - XSL-T パターンマッチングにおいて、関数 '%1' の最初の引数は、リテラルな文字列でなければなりません。 - - - - In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. - variable ref? - XSL-T パターンマッチングにおいて、関数 '%1' への最初の引数は、リテラルか変数でなければなりません。 - - - - In an XSL-T pattern, function %1 cannot have a third argument. - XSL-T パターンにおいて、関数 '%1' は三つの引数をもつことはできません。 - - - - In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. - XSL-T パターンマッチングにおいて、関数 '%1' と '%2' のみ使用できます。'%3' は使用できません。 - - - - In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. - XSL-T パターンにおいて、axis %1 は使用できません。%2 または %3 のみ使用できます。 - - - - %1 is an invalid template mode name. - %1 はテンプレートモジュール名として無効です。 - - - - The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. - for 構文において使用する変数は、場所に関する変数とは異なる必要があります。つまり、'%1' が重複して使用されています。 - - - - The Schema Validation Feature is not supported. Hence, %1-expressions may not be used. - スキーマの検証機能はサポートされていません。よって、'%1' 構文は使用できません。 - - - - None of the pragma expressions are supported. Therefore, a fallback expression must be present - pragma 構文はサポートされていません。fallback 構文でなければなりません - - - - Each name of a template parameter must be unique; %1 is duplicated. - テンプレートパラメータ名はユニークである必要があります。'%1' は重複しています。 - - - - The %1-axis is unsupported in XQuery - XQuery において、%1 axis はサポートされていません - - - - No function by name %1 is available. - 関数名 '%1' はみつかりません。 - - - - The namespace URI cannot be the empty string when binding to a prefix, %1. - プレフィックス '%1' にバインディングする名前空間の URI は、空であってはなりません。 - - - - %1 is an invalid namespace URI. - %1 は名前空間 URI として無効です。 - - - - It is not possible to bind to the prefix %1 - プレフィックス %1 にバインドすることはできません - - - - Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared). - ? - 名前空間 %1 は %2 にのみバウンドできます。 - - - - Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared). - プリフィックス %1 は %2 にのみバウンドできます。 - - - - Two namespace declaration attributes have the same name: %1. - 二つの名前空間宣言の属性が、同じ名前 '%1' をもっています。 - - - - The namespace URI must be a constant and cannot use enclosed expressions. - 名前空間 URI は、constantでなければなりません。式を含むことはできません。 - - - - An attribute by name %1 has already appeared on this element. - 属性名 '%1' は、すでにこのエレメントで使用されています。 - - - - A direct element constructor is not well-formed. %1 is ended with %2. - 直積的な指定のエレメントがwell formedではありません。'%1' が、'%2' で終わっています。 - - - - The name %1 does not refer to any schema type. - 名前 '%1' は、なんのスキーマタイプも参照していません。 - - - - %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. - '%1' は complex 型です。complex 型への型変換はできません。しかし、アトミックな型である '%2' への変換はできます。 - - - - %1 is not an atomic type. Casting is only possible to atomic types. - '%1' はアトミックな型ではありません。型変換はアトミックな型に対してのみ可能です。 - - - - %1 is not a valid name for a processing-instruction. - 処理指定において、'%1' は無効です。 - - - - - %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. - '%1' は、スコープ属性宣言ではありません。スキーマインポート機能はサポートされていません。 - - - - The name of an extension expression must be in a namespace. - 拡張式 (extension expression) の名前は、名前空間の中になければなりません。 - - - - Element %1 is not allowed at this location. - この場所にエレメント '%1' をおくことは許されていません。 - - - - Text nodes are not allowed at this location. - この場所にテキストノードをおくことは許されていません。 - - - - Parse error: %1 - パースエラー: %1 - - - - The value of the XSL-T version attribute must be a value of type %1, which %2 isn't. - XSL-T バージョン属性の値は、'%1' 型でなければなりません。'%2' はそうではありません。 - - - - Running an XSL-T 1.0 stylesheet with a 2.0 processor. - XSL-T 1.0 のスタイルシートを 2.0 のプロセッサで使用します。 - - - - Unknown XSL-T attribute %1. - 未知の XSL-T 属性 %1 があります。 - - - - Attribute %1 and %2 are mutually exclusive. - 属性 '%1' と '%2' は排他的にのみ使用できます。 - - - - In a simplified stylesheet module, attribute %1 must be present. - simplified stylesheet モジュールにおいては、属性 '%1' を指定されなければなりません。 - - - - If element %1 has no attribute %2, it cannot have attribute %3 or %4. - エレメント '%1' が属性 '%2' を持たない場合は、属性 '%3' や '%4' を使用することはできません。 - - - - Element %1 must have at least one of the attributes %2 or %3. - エレメント '%1' は、属性 '%2' か '%3' のいずれかを持たなければなりません。 - - - - At least one mode must be specified in the %1-attribute on element %2. - エレメント '%2' において、'%1' 属性は少くとも一つのモードを指定しなければなりません。 - - - - Element %1 must come last. - エレメント %1 は最後になければなりません。 - - - - At least one %1-element must occur before %2. - %2 の前に、少くとも一つは %1 エレメントが存在しなければなりません。 - - - - Only one %1-element can appear. - %1 エレメントは一つのみ存在しなければなりません。 - - - - At least one %1-element must occur inside %2. - %2 の内側には、少くとも一つの '%1' エレメントが存在しなければなりません。 - - - - When attribute %1 is present on %2, a sequence constructor cannot be used. - %2 に属性 %1 がある場合、sequence constructor は使用できません。 - - - - Element %1 must have either a %2-attribute or a sequence constructor. - エレメント %1 には、%2 属性またはsequence constructorがなければなりません。 - - - - When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. - パラメータが要求されているときには、デフォルトの値は、%1 属性または sequence constructor によって指定されていてはなりません。 - - - - Element %1 cannot have children. - エレメント %1 は、子要素を持つことができません。 - - - - Element %1 cannot have a sequence constructor. - エレメント %1 は、sequence constructor を含むことができません。 - - - - - The attribute %1 cannot appear on %2, when it is a child of %3. - %2 が %3 の子要素であるときは、属性 %1 を使用してはなりません。 - - - - A parameter in a function cannot be declared to be a tunnel. - 関数へのパラメータは、トンネルであってはなりません。 - - - - This processor is not Schema-aware and therefore %1 cannot be used. - この処理系は、Schema-aware ではありません。よって、%1 は使用できません。 - - - - Top level stylesheet elements must be in a non-null namespace, which %1 isn't. - トップレベルのスタイルシートのエレメントは、non-nullな名前空間を持っていなければなりません。しかし、%1 はそうではありません。 - - - - The value for attribute %1 on element %2 must either be %3 or %4, not %5. - エレメント %2 の属性 %1 の値は、%3 または %4 でなければなりません。%5 は異なります。 - - - - Attribute %1 cannot have the value %2. - 属性 %1 に、値 %2 を指定することはできません。 - - - - The attribute %1 can only appear on the first %2 element. - 属性 %1 は、最初の %2 エレメントにのみ指定できます。 - - - - At least one %1 element must appear as child of %2. - %2 の子要素としては、少くとも一つは %1 エレメントがなければなりません。 - - - - empty - - - - - zero or one - ゼロまたは一つ - - - - exactly one - 厳密に一つ - - - - one or more - 一つまたは複数 - - - - zero or more - ゼロまたはそれ以上 - - - - Required type is %1, but %2 was found. - 要求されている型は %1 ですが、 %2 があります。 - - - - Promoting %1 to %2 may cause loss of precision. - %1 を %2 に変換する際に、精度のロスが生じます。 - - - - The focus is undefined. - フォーカスが定義されていません。 - - - - It's not possible to add attributes after any other kind of node. - 他の種類のノードの中では、属性を追加することはできません。 - - - - An attribute by name %1 has already been created. - 名前 '%1' の属性は、すでに生成されています。 - - - - Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. - UNICODE Codepoint Collection のみ使用できます(%1)。 %2 はサポートされていません。 - - - - QPluginLoader - - - Unknown error - 不明なエラー - - - - The plugin was not loaded. - そのプラグインはロードされていません。 - - - - QPrintDialog - - Page size: - ページサイズ: - - - Orientation: - 方向: - - - Paper source: - 給紙装置: - - - - OK - OK - - - Cancel - キャンセル - - - Portrait - - - - Landscape - - - - - locally connected - ローカルに接続しています - - - - - Aliases: %1 - エイリアス: %1 - - - - - unknown - 不明 - - - Print in color if available - 可能であればカラーで印刷 - - - Print to file - ファイルに出力: - - - Browse - 参照... - - - - Print all - すべて印刷 - - - Selection - 選択した部分を印刷 - - - - Print range - 印刷範囲 - - - Pages from - 先頭のページ: - - - to - 末尾のページ: - - - Print last page first - 末尾のページから印刷 - - - Number of copies: - 部数: - - - Paper format - 用紙の形式 - - - - A0 (841 x 1189 mm) - A0 (841 x 1189mm) - - - - A1 (594 x 841 mm) - A1 (594 x 841mm) - - - - A2 (420 x 594 mm) - A2 (420 x 594mm) - - - - A3 (297 x 420 mm) - A3 (297 x 420mm) - - - - A4 (210 x 297 mm, 8.26 x 11.7 inches) - A4 (210 x 297mm、8.26 x 11.7インチ) - - - - A5 (148 x 210 mm) - A5 (148 x 210mm) - - - - A6 (105 x 148 mm) - A6 (105 x 148mm) - - - - A7 (74 x 105 mm) - A7 (74 x 105mm) - - - - A8 (52 x 74 mm) - A8 (52 x 74mm) - - - - A9 (37 x 52 mm) - A9 (37 x 52mm) - - - - B0 (1000 x 1414 mm) - B0 (1000 x 1414mm) - - - - B1 (707 x 1000 mm) - B1 (707 x 1000mm) - - - - B2 (500 x 707 mm) - B2 (500 x 707mm) - - - - B3 (353 x 500 mm) - B3 (353 x 500mm) - - - - B4 (250 x 353 mm) - B4 (250 x 353mm) - - - - B5 (176 x 250 mm, 6.93 x 9.84 inches) - B5 (176 x 250mm、6.93 x 9.84インチ) - - - - B6 (125 x 176 mm) - B6 (125 x 176mm) - - - - B7 (88 x 125 mm) - B7 (88 x 125mm) - - - - B8 (62 x 88 mm) - B8 (62 x 88mm) - - - - B9 (44 x 62 mm) - B9 (44 x 62mm) - - - - B10 (31 x 44 mm) - B10 (31 x 44mm) - - - - C5E (163 x 229 mm) - C5E (163 x 229mm) - - - - DLE (110 x 220 mm) - DLE (110 x 220mm) - - - - Executive (7.5 x 10 inches, 191 x 254 mm) - Executive (7.5 x 10インチ、191 x 254mm) - - - - Folio (210 x 330 mm) - Folio (210 x 330mm) - - - - Ledger (432 x 279 mm) - Ledger (432 x 279mm) - - - - Legal (8.5 x 14 inches, 216 x 356 mm) - Legal (8.5 x 14インチ、216 x 356mm) - - - - Letter (8.5 x 11 inches, 216 x 279 mm) - Letter (8.5 x 11インチ、216 x 279mm) - - - - Tabloid (279 x 432 mm) - Tabloid (279 x 432mm) - - - - US Common #10 Envelope (105 x 241 mm) - US Common #10 Envelope (105 x 241mm) - - - Print dialog - プリントダイアログ - - - Size: - サイズ: - - - Printer - プリンタ - - - Properties - プロパティ - - - Printer info: - プリンタ情報: - - - Copies - 印刷部数 - - - Collate - 丁合い - - - Other - その他 - - - Double side printing - 両面印刷 - - - - - - Print - 印刷 - - - File - ファイル - - - - Print To File ... - ファイルへ出力... - - - - File %1 is not writable. -Please choose a different file name. - ファイル %1 は書き込み可能ではありません。 -別のファイル名を選んでください。 - - - - %1 already exists. -Do you want to overwrite it? - %1 はすでに存在します。 -上書きしますか? - - - - File exists - ファイルは既に存在しています - - - - <qt>Do you want to overwrite it?</qt> - <qt>ファイルを上書きしてもよろしいですか?</qt> - - - - Print selection - 選択された範囲を印刷 - - - - %1 is a directory. -Please choose a different file name. - %1 はディレクトリです。 -ファイル名を指定してください。 - - - - A0 - A0 - - - - A1 - A1 - - - - A2 - A2 - - - - A3 - A3 - - - - A4 - A4 - - - - A5 - A5 - - - - A6 - A6 - - - - A7 - A7 - - - - A8 - A8 - - - - A9 - A9 - - - - B0 - B0 - - - - B1 - B1 - - - - B2 - B2 - - - - B3 - B3 - - - - B4 - B4 - - - - B5 - B5 - - - - B6 - B6 - - - - B7 - B7 - - - - B8 - B8 - - - - B9 - B9 - - - - B10 - B10 - - - - C5E - C5E - - - - DLE - DLE - - - - Executive - Exclusive - - - - Folio - Folio - - - - Ledger - Ledger - - - - Legal - リーガルサイズ - - - - Letter - レターサイズ - - - - Tabloid - タブロイドサイズ - - - - US Common #10 Envelope - US標準#10封筒 - - - - Custom - カスタム - - - - - &Options >> - オプション(&O) >> - - - - &Print - 印刷(&P) - - - - &Options << - オプション(&O) << - - - - Print to File (PDF) - PDFファイルに出力 - - - - Print to File (Postscript) - Postscriptファイルに出力 - - - - Local file - ローカルファイル - - - - Write %1 file - ファイル %1 に書き込みました - - - - The 'From' value cannot be greater than the 'To' value. - QPrintPropertiesWidgetにFromとToがあってそれを指している - 印刷開始ページ番号は、印刷終了ページ番号より小さくなければなりません。 - - - - QPrintPreviewDialog - - - - Page Setup - ページの設定 - - - - %1% - %1% - - - - Print Preview - 印刷のプレビュー - - - - Next page - 次のページ - - - - Previous page - 前のページ - - - - First page - 最初のページ - - - - Last page - 最後のページ - - - - Fit width - 幅をあわせる - - - - Fit page - 高さをあわせる - - - - Zoom in - 拡大 - - - - Zoom out - 縮小 - - - - Portrait - - - - - Landscape - - - - - Show single page - 一枚のページを表示する - - - - Show facing pages - 見開きのページを表示する - - - - Show overview of all pages - すべてのページを表示する - - - - Print - 印刷 - - - - Page setup - ページの設定 - - - Close - 閉じる - - - - Export to PDF - PDFに出力 - - - - Export to PostScript - Postscriptに出力 - - - - QPrintPropertiesDialog - - PPD Properties - 印刷プロパティのダイアログのプロパティ - - - Save - 保存 - - - OK - OK - - - - QPrintPropertiesWidget - - - Form - 書式 - - - - Page - ページ - - - - Advanced - 高度な設定 - - - - QPrintSettingsOutput - - - Form - 書式 - - - - Copies - 印刷部数 - - - - Print range - 印刷範囲 - - - - Print all - すべて印刷 - - - - Pages from - 先頭のページ - - - - to - 末尾のページ - - - - Selection - 選択した部分を印刷 - - - - Output Settings - 出力設定 - - - - Copies: - 印刷部数: - - - - Collate - 丁合い - - - - Reverse - 逆順 - - - - Options - オプション - - - - Color Mode - - - - - Color - カラー - - - - Grayscale - グレースケール - - - - Duplex Printing - 両面印刷 - - - - None - なし - - - - Long side - 長辺綴じ - - - - Short side - 短辺綴じ - - - - QPrintWidget - - - Form - 書式 - - - - Printer - プリンタ - - - - &Name: - 名前(&N): - - - - P&roperties - プロパティ(&r) - - - - Location: - 設置場所: - - - - Preview - プレビュー - - - - Type: - タイプ: - - - - Output &file: - 出力ファイル名(&f): - - - - ... - ... - - - - QProcess - - - - Could not open input redirection for reading - 標準入力リダイレクトを読み込みのためにオープンすることができません - - - - - Could not open output redirection for writing - 標準出力リダイレクトを書き込みのためにオープンすることができません - - - - Resource error (fork failure): %1 - リソースエラー (fork に失敗しました): %1 - - - - - - - - - - - - Process operation timed out - プロセス処理がタイムアウトしました - - - - - - - Error reading from process - プロセスからの読み込みにおいてエラーが発生しました - - - - - - Error writing to process - プロセスへの書き込みにおいてエラーが発生しました - - - - Process crashed - プロセスがクラッシュしました - - - - No program defined - プログラム名が指定されていません - - - - Process failed to start - プロセスのスタートに失敗しました - - - - QProgressDialog - - - Cancel - キャンセル - - - - QPushButton - - - Open - オープン - - - - QRadioButton - - - Check - 選択 - - - - QRegExp - - - no error occurred - エラーは発生しませんでした - - - - disabled feature used - 無効な機能が使用されました - - - - bad char class syntax - 不正なcharクラス構文 - - - - bad lookahead syntax - 不正なlookahead構文 - - - - bad repetition syntax - 不正なrepetition構文 - - - - invalid octal value - 無効な8進値 - - - - missing left delim - 左の区切り文字がありません - - - - unexpected end - 予期しない末尾です - - - - met internal limit - 内部制限を満たしました - - - - QSQLite2Driver - - - Error to open database - データベースのオープンでエラーが発生しました - - - - Unable to begin transaction - トランザクションを開始できません - - - - Unable to commit transaction - トランザクションをコミットできません - - - - Unable to rollback Transaction - トランザクションをロールバックできません - - - - QSQLite2Result - - - Unable to fetch results - 実行結果をフェッチできません - - - - Unable to execute statement - ステートメントを実行できません - - - - QSQLiteDriver - - - Error opening database - データベースのオープンでエラーが発生しました - - - - Error closing database - データベースのクローズでエラーが発生しました - - - - Unable to begin transaction - トランザクションを開始できません - - - - Unable to commit transaction - トランザクションをコミットできません - - - Unable to roll back transaction - トランザクションをロールバックできません - - - - Unable to rollback transaction - トランザクションをロールバックできません - - - - QSQLiteResult - - - - - Unable to fetch row - レコードをフェッチできません - - - - Unable to execute statement - ステートメントを実行できません - - - - Unable to reset statement - ステートメントをリセットできません - - - - Unable to bind parameters - パラメータをバインドできません - - - - Parameter count mismatch - パラメータの数が合っていません - - - - No query - クェリーがありません - - - - QScrollBar - - - Scroll here - ここにスクロール - - - - Left edge - 左端 - - - - Top - 上端 - - - - Right edge - 右端 - - - - Bottom - 下端 - - - - Page left - 1ページ左へスクロール - - - - - Page up - 1ページ戻る - - - - Page right - 1ページ右へスクロール - - - - - Page down - 1ページ進む - - - - Scroll left - 左へスクロール - - - - Scroll up - 上へスクロール - - - - Scroll right - 右へスクロール - - - - Scroll down - 下へスクロール - - - - Line up - 1行上へ - - - - Position - 位置 - - - - Line down - 1行下へ - - - - QSharedMemory - - - %1: unable to set key on lock - 共有メモリ関連 - %1: ロックするためのキーを設定できません - - - - %1: create size is less then 0 - %1: 0より小さいサイズの共有メモリは作成できません - - - - - %1: unable to lock - %1: ロックできません - - - - %1: unable to unlock - %1: アンロックできません - - - - - %1: permission denied - %1: 許可されていません - - - - - %1: already exists - %1: 既に存在します - - - - - %1: doesn't exists - %1: 存在しません - - - - - %1: out of resources - %1: リソース不足です - - - - - %1: unknown error %2 - %1: 未知のエラー %2 - - - - %1: key is empty - %1: キーが空です - - - - %1: unix key file doesn't exists - ? - %1: UNIX key file が存在しません - - - - %1: ftok failed - %1: fork に失敗しました - - - - - %1: unable to make key - %1: キーを作成できません - - - - %1: system-imposed size restrictions - EINVAL - %1: 指定されたサイズはシステムにより拒否されました - - - - %1: not attached - %1: アタッチしていません - - - - %1: invalid size - %1: 無効なサイズです - - - - %1: key error - safekey.isEmpty()==true - %1: キーかありません - - - - %1: size query failed - %1: サイズのクェリーに失敗しました - - - - QShortcut - - - Space - Space - - - - Esc - Esc - - - - Tab - Tab - - - - Backtab - Backtab - - - - Backspace - Backspace - - - - Return - Return - - - - Enter - Enter - - - - Ins - Ins - - - - Del - Del - - - - Pause - Pause - - - - Print - Print - - - - SysReq - SysReq - - - - Home - Home - - - - End - End - - - - Left - - - - - Up - - - - - Right - - - - - Down - - - - - PgUp - PgUp - - - - PgDown - PgDown - - - - CapsLock - CapsLock - - - - NumLock - NumLock - - - - ScrollLock - ScrollLock - - - - Menu - メニュー - - - - Help - ヘルプ - - - - Back - 戻る - - - - Forward - 進む - - - - Stop - 停止 - - - - Refresh - 更新間隔 - - - - Volume Down - 音量を下げる - - - - Volume Mute - 消音 - - - - Volume Up - 音量を上げる - - - - Bass Boost - 低音ブースト - - - - Bass Up - 低音を上げる - - - - Bass Down - 低音を下げる - - - - Treble Up - 高音を上げる - - - - Treble Down - 高音を下げる - - - - Media Play - メディアの再生 - - - - Media Stop - メディアの停止 - - - - Media Previous - 前のメディア - - - - Media Next - 次のメディア - - - - Media Record - メディアの録音 - - - - Home Page - ホームページ - - - - Favorites - お気に入り - - - - Search - 検索 - - - - Standby - スタンバイ - - - - Open URL - URLを開く - - - - Launch Mail - メールの起動 - - - - Launch Media - メディアの起動 - - - - Launch (0) - (0)の起動 - - - - Launch (1) - (1)の起動 - - - - Launch (2) - (2)の起動 - - - - Launch (3) - (3)の起動 - - - - Launch (4) - (4)の起動 - - - - Launch (5) - (5)の起動 - - - - Launch (6) - (6)の起動 - - - - Launch (7) - (7)の起動 - - - - Launch (8) - (8)の起動 - - - - Launch (9) - (9)の起動 - - - - Launch (A) - (A)の起動 - - - - Launch (B) - (B)の起動 - - - - Launch (C) - (C)の起動 - - - - Launch (D) - (D)の起動 - - - - Launch (E) - (E)の起動 - - - - Launch (F) - (F)の起動 - - - - Print Screen - Print Screen - - - - Page Up - Page Up - - - - Page Down - Page Down - - - - Caps Lock - Caps Lock - - - - Num Lock - Num Lock - - - - Number Lock - Number Lock - - - - Scroll Lock - Scroll Lock - - - - Insert - Insert - - - - Delete - Delete - - - - Escape - Escape - - - - System Request - System Request - - - - Select - Select - - - - Yes - はい - - - - No - いいえ - - - - Context1 - Context1 - - - - Context2 - Context2 - - - - Context3 - Context3 - - - - Context4 - Context4 - - - - Call - Call - - - - Hangup - Hangup - - - - Flip - Flip - - - - - Ctrl - Ctrl - - - - - Shift - Shift - - - - - Alt - Alt - - - - - Meta - Meta - - - - + - + - - - - F%1 - F%1 - - - - QSlider - - - Page left - 1ページ左へスクロール - - - - Page up - 1ページ戻る - - - - Position - 位置 - - - - Page right - 1ページ右へスクロール - - - - Page down - 1ページ進む - - - - QSocks5SocketEngine - - - Connection to proxy refused - プロキシーへの接続が拒否されました - - - - Connection to proxy closed prematurely - プロキシーの接続が通信の終了前に切断されました - - - - Proxy host not found - プロキシーホストが見つかりません - - - - Connection to proxy timed out - プロキシーとの接続がタイムアウトしました - - - - Proxy authentication failed - プロキシーの認証に失敗しました - - - - Proxy authentication failed: %1 - プロキシーの認証に失敗しました: %1 - - - - SOCKS version 5 protocol error - SOCKS バージョン 5 プロトコルのエラーです - - - - General SOCKSv5 server failure - SOCKS バージョン 5 サーバのエラーです - - - - Connection not allowed by SOCKSv5 server - SOCKSv5 サーバより接続を拒否されました - - - - TTL expired - 実際はホップ数です - 有効期限(TTL)がきれました - - - - SOCKSv5 command not supported - この SOCKSv5 コマンドはサポートされていません - - - - Address type not supported - 指定されたアドレスタイプはサポートされていません - - - - Unknown SOCKSv5 proxy error code 0x%1 - 未知の SOCKSv5 プロキシーエラーです: 0x%1 - - - Socks5 timeout error connecting to socks server - Socks5 はソックスサーバ接続しようとしてタイムアウトになりました - - - - Network operation timed out - ネットワーク操作がタイムアウトしました - - - - QSpinBox - - - More - 増やす - - - - Less - 減らす - - - - QSql - - - Delete - 削除 - - - - Delete this record? - このレコードを削除しますか? - - - - - - Yes - はい - - - - - - No - いいえ - - - - Insert - 挿入 - - - - Update - アップデート - - - - Save edits? - 編集内容を保存しますか? - - - - Cancel - キャンセル - - - - Confirm - 確認 - - - - Cancel your edits? - 編集をキャンセルしますか? - - - - QSslSocket - - - Error creating SSL context (%1) - SSL content の作成に失敗しました (%1) - - - - Invalid or empty cipher list (%1) - 暗号方式リストが無効または空です (%1) - - - - Cannot provide a certificate with no key, %1 - 鍵が指定されていないため、証明書を扱えません。 %1 - - - - Error loading local certificate, %1 - ローカルの証明書をロードできません。 %1 - - - - Error loading private key, %1 - プライベートキーをロードできません。 %1 - - - - Private key does not certificate public key, %1 - プライベートキーが、パブリックキーの証明書となっていません %1 - - - - Error creating SSL session, %1 - SSL セッションを作成できません。 %1 - - - - Error creating SSL session: %1 - SSL セッションを作成できません: %1 - - - - Unable to write data: %1 - 書き込みできません: %1 - - - - Error while reading: %1 - 読み込み時にエラーが発生しました: %1 - - - - Error during SSL handshake: %1 - SSL ハンドシェーク時にエラーが発生しました: %1 - - - - QSystemSemaphore - - - - %1: out of resources - %1: リソース不足です - - - - - %1: permission denied - %1: 許可されていません - - - - %1: already exists - %1: 既に存在します - - - - %1: does not exist - %1: 存在しません - - - - - %1: unknown error %2 - %1: 未知のエラーです %2 - - - - QTDSDriver - - - Unable to open connection - 接続をオープンできません - - - - Unable to use database - データベースを使用できません - - - - QTabBar - - - Scroll Left - 左へスクロール - - - - Scroll Right - 右へスクロール - - - - QTcpServer - - Socket operation unsupported - ソケット操作はサポートされていません - - - - Operation on socket is not supported - このソケットへの操作はサポートされていません - - - - QTextControl - - - &Undo - 元に戻す(&U) - - - - &Redo - やり直す(&R) - - - - Cu&t - 切り取り(&T) - - - - &Copy - コピー(&C) - - - - Copy &Link Location - リンクの場所をコピー(&L) - - - - &Paste - 貼り付け(&P) - - - - Delete - 削除 - - - - Select All - すべてを選択 - - - - QToolButton - - - - Press - 押す - - - - - Open - オープン - - - - QUdpSocket - - - This platform does not support IPv6 - このプラットフォームは IPv6 をサポートしていません - - - - QUndoGroup - - - Undo - 元に戻す - - - - Redo - やり直す - - - - QUndoModel - - - <empty> - <空> - - - - QUndoStack - - - Undo - 元に戻す - - - - Redo - やり直す - - - - QUnicodeControlCharacterMenu - - - LRM Left-to-right mark - LRM (左横書き指定) - - - - RLM Right-to-left mark - RLM (右横書き指定) - - - - ZWJ Zero width joiner - ZWJ (幅のない接続文字) - - - - ZWNJ Zero width non-joiner - ZWNJ (幅のない非接続文字) - - - - ZWSP Zero width space - ZWSP (幅の無い空白) - - - - LRE Start of left-to-right embedding - LRE (左横書き開始指定) - - - - RLE Start of right-to-left embedding - RLE (右横書き開始指定) - - - - LRO Start of left-to-right override - LRO (左横書き上書き開始指定) - - - - RLO Start of right-to-left override - RLO (右横書き上書き開始指定) - - - - PDF Pop directional formatting - PDF (方向上書きの終了指定) - - - - Insert Unicode control character - Unicode制御文字を挿入 - - - - QWebFrame - - - Request cancelled - リクエストはキャンセルされました - - - - Request blocked - リクエストはブロックされました - - - - Cannot show URL - URL を表示できません - - - - Frame load interruped by policy change - ポリシーの変更により、フレームのロードが中断しました - - - - Cannot show mimetype - MIME Type を表示できません - - - - File does not exist - ファイルが存在しません - - - - QWebPage - - - Bad HTTP request - 誤った HTTP のリクエストです - - - - Submit - default label for Submit buttons in forms on web pages - 送信 - - - - Submit - Submit (input element) alt text for <input> elements with no alt, title, or value - 送信 - - - - Reset - default label for Reset buttons in forms on web pages - リセット - - - - This is a searchable index. Enter search keywords: - text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index' - 検索が可能です。検索のためのキーワードを入力してください: - - - - Choose File - title for file button used in HTML forms - ファイルを選ぶ - - - - No file selected - text to display in file button used in HTML forms when no file is selected - ファイルが選択されていません - - - - Open in New Window - Open in New Window context menu item - 新しいウィンドウで開く - - - - Save Link... - Download Linked File context menu item - リンク先を保存... - - - - Copy Link - Copy Link context menu item - リンク先をコピー - - - - Open Image - Open Image in New Window context menu item - イメージを開く - - - - Save Image - Download Image context menu item - 画像を保存 - - - - Copy Image - Copy Link context menu item - 画像をコピー - - - - Open Frame - Open Frame in New Window context menu item - フレームを新しいウィンドウで開く - - - - Copy - Copy context menu item - コピー - - - - Go Back - Back context menu item - 戻る - - - - Go Forward - Forward context menu item - 進む - - - - Stop - Stop context menu item - 停止 - - - - Reload - Reload context menu item - リロード - - - - Cut - Cut context menu item - 切り取り - - - - Paste - Paste context menu item - 貼り付け - - - - No Guesses Found - No Guesses Found context menu item - 推測候補はありません - - - - Ignore - Ignore Spelling context menu item - 無視 - - - - Add To Dictionary - Learn Spelling context menu item - 辞書に追加 - - - - Search The Web - Search The Web context menu item - Web を検索 - - - - Look Up In Dictionary - Look Up in Dictionary context menu item - 辞書から探す - - - - Open Link - Open Link context menu item - リンクを開く - - - - Ignore - Ignore Grammar context menu item - 無視 - - - - Spelling - Spelling and Grammar context sub-menu item - スペル - - - - Show Spelling and Grammar - menu item title - スペルと文法を表示 - - - - Hide Spelling and Grammar - menu item title - スペルと文法を隠す - - - - Check Spelling - Check spelling context menu item - スペルをチェックする - - - - Check Spelling While Typing - Check spelling while typing context menu item - 入力中にスペルをチェックする - - - - Check Grammar With Spelling - Check grammar with spelling context menu item - スペルおよび文法をチェックする - - - - Fonts - Font context sub-menu item - フォント - - - - Bold - Bold context menu item - 太字 - - - - Italic - Italic context menu item - イタリック - - - - Underline - Underline context menu item - 下線 - - - - Outline - Outline context menu item - アウトライン - - - - Direction - Writing direction context sub-menu item - 方向 - - - - Text Direction - Text direction context sub-menu item - テキストの方向 - - - - Default - Default writing direction context menu item - デフォルト - - - - LTR - Left to Right context menu item - 左横書き - - - - RTL - Right to Left context menu item - 右横書き - - - - Inspect - Inspect Element context menu item - ? - 検査 - - - - No recent searches - Label for only item in menu that appears when clicking on the search field image, when no searches have been performed - 検索の履歴はありません - - - - Recent searches - label for first item in the menu that appears when clicking on the search field image, used as embedded menu title - 検索の履歴 - - - - Clear recent searches - menu item in Recent Searches menu that empties menu's contents - 検索の履歴をクリア - - - - Unknown - Unknown filesize FTP directory listing item - 不明 - - - - %1 (%2x%3 pixels) - Title string for images - %1 (%2x%3 ピクセル) - - - - Web Inspector - %2 - Web の検査 - %2 - - - - Scroll here - ここにスクロール - - - - Left edge - 左端 - - - - Top - 上端 - - - - Right edge - 右端 - - - - Bottom - 下端 - - - - Page left - 1ページ左へスクロール - - - - Page up - 1ページ戻る - - - - Page right - 1ページ右へスクロール - - - - Page down - 1ページ進む - - - - Scroll left - 左へスクロール - - - - Scroll up - 上へスクロール - - - - Scroll right - 右へスクロール - - - - Scroll down - 下へスクロール - - - - %n file(s) - number of chosen file - - %n 個のファイル - - - - - JavaScript Alert - %1 - JavaScript アラート - %1 - - - - JavaScript Confirm - %1 - JavaScript 確認 - %1 - - - - JavaScript Prompt - %1 - JavaScript 質問 - %1 - - - - Move the cursor to the next character - 次の文字へカーソルを移動 - - - - Move the cursor to the previous character - 前の文字にカーソルを移動 - - - - Move the cursor to the next word - 次の単語にカーソルを移動 - - - - Move the cursor to the previous word - 前の単語にカーソルを移動 - - - - Move the cursor to the next line - 次の行にカーソルを移動 - - - - Move the cursor to the previous line - 前の行にカーソルを移動 - - - - Move the cursor to the start of the line - 文なのか行なのか - 文頭にカーソルを移動 - - - - Move the cursor to the end of the line - 文末にカーソルを移動 - - - - Move the cursor to the start of the block - ブロックの先頭にカーソルを移動 - - - - Move the cursor to the end of the block - ブロックの末尾にカーソルを移動 - - - - Move the cursor to the start of the document - 文章の先頭にカーソルを移動 - - - - Move the cursor to the end of the document - 文章の末尾にカーソルを移動 - - - - Select all - すべてを選択 - - - - Select to the next character - 次の文字を選択 - - - - Select to the previous character - 前の文字を選択 - - - - Select to the next word - 次の単語を選択 - - - - Select to the previous word - 前の単語を選択 - - - - Select to the next line - 次の行を選択 - - - - Select to the previous line - 前の行を選択 - - - - Select to the start of the line - 文頭から選択 - - - - Select to the end of the line - 文末まで選択 - - - - Select to the start of the block - ブロックの先頭から選択 - - - - Select to the end of the block - ブロックの末尾まで選択 - - - - Select to the start of the document - ドキュメントの先頭から選択 - - - - Select to the end of the document - ドキュメントの末尾まで選択 - - - - Delete to the start of the word - 単語の先頭まで削除 - - - - Delete to the end of the word - 単語の末尾まで削除 - - - - Insert a new paragraph - 新しい段落を挿入 - - - - Insert a new line - 新しい行を挿入 - - - - QWhatsThisAction - - - What's This? - ヒント? - - - - QWidget - - - * - * - - - - QWizard - - - Go Back - 戻る - - - - Continue - 続き - - - - Commit - 適用 - - - - Done - 終了 - - - - Help - ヘルプ - - - - < &Back - < 戻る(&B) - - - - &Finish - 完了(&F) - - - - Cancel - キャンセル - - - - &Help - ヘルプ(&H) - - - - &Next - 次へ(&N) - - - - &Next > - 次へ(&N) > - - - - QWorkspace - - - &Restore - 元に戻す(&R) - - - - &Move - 移動(&M) - - - - &Size - サイズを変更(&S) - - - - Mi&nimize - 最小化(&N) - - - - Ma&ximize - 最大化(&X) - - - - &Close - 閉じる(&C) - - - - Stay on &Top - 常に手前に表示(&T) - - - - - Sh&ade - シェード(&A) - - - - - %1 - [%2] - %1 - [%2] - - - - Minimize - 最小化 - - - - Restore Down - 元に戻す - - - - Close - 閉じる - - - - &Unshade - シェードを解除(&U) - - - - QXml - - - no error occurred - エラーは発生しませんでした - - - - error triggered by consumer - 消費者によってエラーが誘発されました - - - - unexpected end of file - 予期せぬファイルの終りです - - - - more than one document type definition - ドキュメントタイプの定義が複数あります - - - - error occurred while parsing element - 要素の解析中にエラーが発生しました - - - - tag mismatch - タグが一致しません - - - - error occurred while parsing content - コンテンツの解析中にエラーが発生しました - - - - unexpected character - 予期しない文字です - - - - invalid name for processing instruction - 処理の指示に無効な名前です - - - - version expected while reading the XML declaration - XML宣言を読み込むにはバージョンが必要です - - - - wrong value for standalone declaration - スタンドアロン宣言として正しくない値です - - - - encoding declaration or standalone declaration expected while reading the XML declaration - XML宣言を読み込むにはエンコーディング宣言かスタンドアローン宣言が必要です - - - - standalone declaration expected while reading the XML declaration - XML宣言を読み込むにはスタンドアローン宣言が必要です - - - - error occurred while parsing document type definition - ドキュメントタイプの定義を解析中にエラーが発生しました - - - - letter is expected - 文字が必要です - - - - error occurred while parsing comment - コメントの解析中にエラーが発生しました - - - - error occurred while parsing reference - 参照の解析中にエラーが発生しました - - - - internal general entity reference not allowed in DTD - 内部一般エンティティ参照はDTDで許されていません - - - - external parsed general entity reference not allowed in attribute value - 解析された外部一般エンティティ参照は属性値で許されていません - - - - external parsed general entity reference not allowed in DTD - 解析された外部一般エンティティ参照はDTDで許されていません - - - - unparsed entity reference in wrong context - 不正な文脈で解析されないエンティティ参照です - - - - recursive entities - 再帰的エンティティ - - - - error in the text declaration of an external entity - 外部エンティティのテキスト宣言にエラーがあります - - - - QXmlStream - - - - Extra content at end of document. - ドキュメントの末尾に余計なものがついています。 - - - - Invalid entity value. - エンティティの値が無効です。 - - - - Invalid XML character. - 無効な XML 文字です。 - - - - Sequence ']]>' not allowed in content. - このコンテキストでは、']]>' は許可されていません。 - - - - - Encountered incorrectly encoded content. - 正しくないエンコードの文脈に遭遇しました。 - - - - Namespace prefix '%1' not declared - 名前空間のブリフィックス '%1' は宣言されていません - - - - Attribute redefined. - 属性が再度指定されています。 - - - - Unexpected character '%1' in public id literal. - DTD宣言の部分 - 公開 ID 指定に使用できない文字 '%1' が使用されています。 - - - - Invalid XML version string. - 無効な XML バージョン指定です。 - - - - Unsupported XML version. - この XML のバージョンはサポートされていません。 - - - - The standalone pseudo attribute must appear after the encoding. - &ddd; は、エンコーディングを指定していないと使えないということかな。utf8だとおもうけど。 - 仮想属性指定は、エンコーディング指定の後にのみ使用できます。 - - - - %1 is an invalid encoding name. - %1 は無効なエンコーディングの名前です。 - - - - Encoding %1 is unsupported - エンコーディング '%1' はサポートされていません - - - - Standalone accepts only yes or no. - standalone の指定は yes または no のみ指定できます。 - - - - Invalid attribute in XML declaration. - XML 宣言に無効な属性がついています。 - - - - Premature end of document. - ドキュメントが途中で終わっています。 - - - - Invalid document. - 無効なドキュメントです。 - - - - Expected - 予期していた表現は、 - - - - , but got ' - ですが、取得した表現は以下のものでした ' - - - - Unexpected ' - 予期していなかった表現 ' - - - - Expected character data. - 予期していた文字列。 - - - - Recursive entity detected. - 再帰しているエンティティを発見しました。 - - - - Start tag expected. - 開始タグをよきしていましたが、みつかりません。 - - - - NDATA in parameter entity declaration. - パラメータエンティティの宣言において NDATA があります。 - - - - XML declaration not at start of document. - XML 宣言がドキュメントの先頭にありません。 - - - - %1 is an invalid processing instruction name. - XMLにそんなのあったっけ? - %1 は無効な処理指定の名前です。 - - - - Invalid processing instruction name. - 無効な処理命令です。 - - - - %1 is an invalid PUBLIC identifier. - %1 は、公開 (PUBLIC) 識別子として無効です。 - - - - - - - Illegal namespace declaration. - 無効な名前空間の指定です。 - - - - Invalid XML name. - 無効な XML 名です。 - - - - Opening and ending tag mismatch. - 開始タグと、終了タグがマッチしません。 - - - - Reference to unparsed entity '%1'. - まだパースしていないエンティティ '%1' を参照しています。 - - - - - - Entity '%1' not declared. - エンティティ '%1' は宣言されていません。 - - - - Reference to external entity '%1' in attribute value. - 属性値として、外部エンティティ '%1' を再度指定しています。 - - - - Invalid character reference. - 無効な文字への参照です。 - - - diff --git a/translations/translations.pri b/translations/translations.pri index 2edc89a..37295ff 100644 --- a/translations/translations.pri +++ b/translations/translations.pri @@ -13,7 +13,7 @@ LUPDATE += -locations relative -no-ui-lines ###### Qt Libraries -QT_TS = ar cs da de es fr he hu ja_JP pl pt ru sk sl sv uk zh_CN zh_TW +QT_TS = ar cs da de es fr he hu ja pl pt ru sk sl sv uk zh_CN zh_TW ts-qt.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \ -I../include -I../include/Qt \ -- cgit v0.12 From bf966d125d5c5fa7719ae9f9110db8742d5a4c85 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 7 Jun 2010 17:19:31 +0200 Subject: add check-ts target to auto-asses translation completeness --- translations/check-ts.pl | 85 +++++++++++++++++++++++++++++++++++++++++++ translations/check-ts.xq | 3 ++ translations/translations.pri | 5 ++- 3 files changed, 92 insertions(+), 1 deletion(-) create mode 100755 translations/check-ts.pl create mode 100644 translations/check-ts.xq diff --git a/translations/check-ts.pl b/translations/check-ts.pl new file mode 100755 index 0000000..7b46bf5 --- /dev/null +++ b/translations/check-ts.pl @@ -0,0 +1,85 @@ +#! /usr/bin/perl -w + +use strict; + +# "qt" must come last to avoid prefix matching. +my @groups = ("assistant", "designer", "linguist", "qt_help", "qtconfig", "qvfb", "qt"); + +my %scores = (); +my %langs = (); + +my $files = join("\n", <*.ts>); +my $res = `xmlpatterns -param files=\"$files\" check-ts.xq`; +for my $i (split(/ /, $res)) { + $i =~ /^([^.]+).ts:(.*)$/; + my ($fn, $pc) = ($1, $2); + for my $g (@groups) { + if ($fn =~ /^${g}_(.*)$/) { + my $lang = $1; + $scores{$g}{$lang} = $pc; + $langs{$lang} = 1; + last; + } + } +} + +# now we move "qt" to the front, as it should be the first column. +pop @groups; +unshift @groups, "qt"; + +my $code = ""; + +print "L10n "; +for my $g (@groups) { + print " ".$g." "; +} +print "\n"; +for my $lang (sort(keys(%langs))) { + printf "%-5s ", $lang; + my $qt = 1; + my $rest = 1; + my $line = ""; + for my $g (@groups) { + my $pc = $scores{$g}{$lang}; + $pc = "0" if !defined($pc); + if (int($pc) < 98 or !$qt) { + if ($g eq "qt") { + $qt = 0; + } else { + $rest = 0; + } + } else { + $line .= " ".$g."_".$lang.".ts"; + } + printf " %-".(length($g)+1)."s", $pc; + } + if ($qt) { + $code .= " \\\n ".$line; + if (!$rest) { + print " (partial)"; + } + } else { + print " (excluded)"; + } + print "\n"; +} + +my $fn = "translations.pro"; +my $nfn = $fn."new"; +open IN, $fn or die; +open OUT, ">".$nfn or die; +while (1) { + $_ = ; + last if (/^TRANSLATIONS /); + print OUT $_; +} +while ($_ =~ /\\\n$/) { + $_ = ; +} +print OUT "TRANSLATIONS =".$code."\n"; +while () { + print OUT $_; +} +close OUT; +close IN; +rename $nfn, $fn; diff --git a/translations/check-ts.xq b/translations/check-ts.xq new file mode 100644 index 0000000..2d6404c --- /dev/null +++ b/translations/check-ts.xq @@ -0,0 +1,3 @@ +for $file in tokenize($files, codepoints-to-string(10)) + let $fresh := doc($file)/TS/context/message[not (translation/@type = 'obsolete')] + return concat($file, ":", count($fresh/translation[not (@type = 'unfinished')]) * 100 idiv count($fresh)) diff --git a/translations/translations.pri b/translations/translations.pri index 37295ff..9ab72fc 100644 --- a/translations/translations.pri +++ b/translations/translations.pri @@ -73,5 +73,8 @@ ts-qvfb.depends = sub-tools ts.depends = ts-qt ts-designer ts-linguist ts-assistant ts-qtconfig ts-qvfb +check-ts.commands = (cd $$PWD && perl check-ts.pl) +check-ts.depends = ts + QMAKE_EXTRA_TARGETS += ts-qt ts-designer ts-linguist ts-assistant ts-qtconfig ts-qvfb \ - ts + ts check-ts -- cgit v0.12