From a1f0a650578b71fddae9db05435715338b15ba35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 6 Aug 2010 07:53:28 +0200 Subject: Make the GLX integration give more correct format Also create a correct window for the format. --- src/gui/kernel/qplatformwindowformat_qpa.cpp | 24 ++++ src/gui/kernel/qplatformwindowformat_qpa.h | 7 + src/opengl/qgl_qpa.cpp | 3 +- src/plugins/platforms/testlite/qglxintegration.cpp | 159 ++++++++++++--------- src/plugins/platforms/testlite/qglxintegration.h | 7 +- src/plugins/platforms/testlite/qtestlitewindow.cpp | 25 ++-- 6 files changed, 138 insertions(+), 87 deletions(-) diff --git a/src/gui/kernel/qplatformwindowformat_qpa.cpp b/src/gui/kernel/qplatformwindowformat_qpa.cpp index 1112ba9..d497e85 100644 --- a/src/gui/kernel/qplatformwindowformat_qpa.cpp +++ b/src/gui/kernel/qplatformwindowformat_qpa.cpp @@ -41,6 +41,8 @@ #include "qplatformwindowformat_qpa.h" +#include + Q_GLOBAL_STATIC(QPlatformWindowFormat, q_platformwindow_default_format); class QPlatformWindowFormatPrivate @@ -986,3 +988,25 @@ bool operator!=(const QPlatformWindowFormat& a, const QPlatformWindowFormat& b) { return !(a == b); } + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug dbg, const QPlatformWindowFormat &f) +{ + const QPlatformWindowFormatPrivate * const d = f.d; + + dbg.nospace() << "QGLFormat(" + << "options " << d->opts + << ", depthBufferSize " << d->depthSize + << ", accumBufferSize " << d->accumSize + << ", stencilBufferSize " << d->stencilSize + << ", redBufferSize " << d->redSize + << ", greenBufferSize " << d->greenSize + << ", blueBufferSize " << d->blueSize + << ", alphaBufferSize " << d->alphaSize + << ", samples " << d->numSamples + << ", swapInterval " << d->swapInterval + << ')'; + + return dbg.space(); +} +#endif diff --git a/src/gui/kernel/qplatformwindowformat_qpa.h b/src/gui/kernel/qplatformwindowformat_qpa.h index 37e628d..075e796 100644 --- a/src/gui/kernel/qplatformwindowformat_qpa.h +++ b/src/gui/kernel/qplatformwindowformat_qpa.h @@ -163,11 +163,18 @@ private: friend Q_GUI_EXPORT bool operator==(const QPlatformWindowFormat&, const QPlatformWindowFormat&); friend Q_GUI_EXPORT bool operator!=(const QPlatformWindowFormat&, const QPlatformWindowFormat&); +#ifndef QT_NO_DEBUG_STREAM + friend Q_GUI_EXPORT QDebug operator<<(QDebug, const QPlatformWindowFormat &); +#endif }; Q_GUI_EXPORT bool operator==(const QPlatformWindowFormat&, const QPlatformWindowFormat&); Q_GUI_EXPORT bool operator!=(const QPlatformWindowFormat&, const QPlatformWindowFormat&); +#ifndef QT_NO_DEBUG_STREAM +Q_OPENGL_EXPORT QDebug operator<<(QDebug, const QPlatformWindowFormat &); +#endif + Q_DECLARE_OPERATORS_FOR_FLAGS(QPlatformWindowFormat::FormatOptions) inline bool QPlatformWindowFormat::doubleBuffer() const diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index 3d5b74f..5f0bca3 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -105,7 +105,8 @@ static QPlatformWindowFormat qt_glformat_to_platformwindowformat(const QGLFormat retFormat.setRedBufferSize(format.redBufferSize()); retFormat.setRgba(format.rgba()); retFormat.setSampleBuffers(format.sampleBuffers()); - retFormat.setSamples(format.sampleBuffers()); + if (format.samples() >= 0) + retFormat.setSamples(format.samples()); retFormat.setStencil(format.stencil()); if (format.stencilBufferSize() >= 0) retFormat.setStencilBufferSize(format.stencilBufferSize()); diff --git a/src/plugins/platforms/testlite/qglxintegration.cpp b/src/plugins/platforms/testlite/qglxintegration.cpp index 57f9de4..47a4f5a 100644 --- a/src/plugins/platforms/testlite/qglxintegration.cpp +++ b/src/plugins/platforms/testlite/qglxintegration.cpp @@ -63,69 +63,94 @@ QVector QGLXGLContext::buildSpec(const QPlatformWindowFormat &format) { QVector spec(48); int i = 0; - int depthSize = 0; - int stencilSize = 0; - int sampleSize = 0; - - if (format.depth()) - depthSize = (format.depthBufferSize() == -1) ? 1 : format.depthBufferSize(); - if (format.stencil()) - stencilSize = (format.stencilBufferSize() == -1) ? 1 : format.stencilBufferSize(); - if (format.sampleBuffers()) - sampleSize = (format.samples() == -1) ? 1 : format.samples(); + spec[i++] = GLX_LEVEL; + spec[i++] = 0; spec[i++] = GLX_DRAWABLE_TYPE; spec[i++] = GLX_WINDOW_BIT; - spec[i++] = GLX_RENDER_TYPE; spec[i++] = GLX_RGBA_BIT; + + if (format.rgba()) { + spec[i++] = GLX_RENDER_TYPE; spec[i++] = GLX_RGBA_BIT; + spec[i++] = GLX_RED_SIZE; spec[i++] = (format.redBufferSize() == -1) ? 1 : format.redBufferSize(); + spec[i++] = GLX_GREEN_SIZE; spec[i++] = (format.greenBufferSize() == -1) ? 1 : format.greenBufferSize(); + spec[i++] = GLX_BLUE_SIZE; spec[i++] = (format.blueBufferSize() == -1) ? 1 : format.blueBufferSize(); + if (format.alpha()) { + spec[i++] = GLX_ALPHA_SIZE; spec[i++] = (format.alphaBufferSize() == -1) ? 1 : format.alphaBufferSize(); + } + + spec[i++] = GLX_ACCUM_RED_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 1 : format.accumBufferSize(); + spec[i++] = GLX_ACCUM_GREEN_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 1 : format.accumBufferSize(); + spec[i++] = GLX_ACCUM_BLUE_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 1 : format.accumBufferSize(); + + if (format.alpha()) { + spec[i++] = GLX_ACCUM_ALPHA_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 1 : format.accumBufferSize(); + } + + } else { + spec[i++] = GLX_RENDER_TYPE; spec[i++] = GLX_COLOR_INDEX_BIT; //I'm really not sure if this works.... + spec[i++] = GLX_BUFFER_SIZE; spec[i++] = 8; + } + spec[i++] = GLX_DOUBLEBUFFER; spec[i++] = format.doubleBuffer() ? True : False; spec[i++] = GLX_STEREO; spec[i++] = format.stereo() ? True : False; - spec[i++] = GLX_DEPTH_SIZE; spec[i++] = depthSize; - spec[i++] = GLX_STENCIL_SIZE; spec[i++] = stencilSize; - spec[i++] = GLX_SAMPLE_BUFFERS_ARB; spec[i++] = sampleSize; + if (format.depth()) { + spec[i++] = GLX_DEPTH_SIZE; spec[i++] = (format.depthBufferSize() == -1) ? 1 : format.depthBufferSize(); + } - spec[i++] = GLX_RED_SIZE; spec[i++] = (format.redBufferSize() == -1) ? 1 : format.redBufferSize(); - spec[i++] = GLX_GREEN_SIZE; spec[i++] = (format.greenBufferSize() == -1) ? 1 : format.greenBufferSize(); - spec[i++] = GLX_BLUE_SIZE; spec[i++] = (format.blueBufferSize() == -1) ? 1 : format.blueBufferSize(); - spec[i++] = GLX_ALPHA_SIZE; spec[i++] = (format.alphaBufferSize() == -1) ? 0 : format.alphaBufferSize(); + if (format.stencil()) { + spec[i++] = GLX_STENCIL_SIZE; spec[i++] = (format.stencilBufferSize() == -1) ? 1 : format.stencilBufferSize(); + } + if (format.sampleBuffers()) { + spec[i++] = GLX_SAMPLE_BUFFERS_ARB; + spec[i++] = 1; + spec[i++] = GLX_SAMPLES_ARB; + spec[i++] = format.samples() == -1 ? 4 : format.samples(); + } - spec[i++] = GLX_ACCUM_RED_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 0 : format.accumBufferSize(); - spec[i++] = GLX_ACCUM_GREEN_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 0 : format.accumBufferSize(); - spec[i++] = GLX_ACCUM_BLUE_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 0 : format.accumBufferSize(); - spec[i++] = GLX_ACCUM_ALPHA_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 0 : format.accumBufferSize(); spec[i++] = XNone; return spec; } -GLXFBConfig QGLXGLContext::findConfig(const GLXFBConfig *configs, int configCount, const QPlatformWindowFormat &format, const MyDisplay *xd) +GLXFBConfig QGLXGLContext::findConfig(const MyDisplay *xd, const QPlatformWindowFormat &format) { - if (!configs) - return 0; - + QVector spec = buildSpec(format); + int confcount = 0; + GLXFBConfig *configs; GLXFBConfig chosenConfig = 0; - for (int i = 0; i < configCount; ++i) { - chosenConfig = configs[i]; + configs = glXChooseFBConfig(xd->display,xd->screen,spec.constData(),&confcount); + if (confcount) + { + for (int i = 0; i < confcount; i++) { + chosenConfig = configs[i]; + + // Make sure we try to get an ARGB visual if the format asked for an alpha: + if (format.alpha()) { + int alphaSize; + glXGetFBConfigAttrib(xd->display,configs[i],GLX_ALPHA_SIZE,&alphaSize); + if (alphaSize > 0) + break; + } else { + break; // Just choose the first in the list if there's no alpha requested + } + } - // Make sure we try to get an ARGB visual if the format asked for an alpha: - if (format.alpha()) { - XVisualInfo* vi; - vi = glXGetVisualFromFBConfig(xd->display, configs[i]); - if (!vi) - continue; + XFree(configs); + } - XRenderPictFormat *pictFormat = XRenderFindVisualFormat(xd->display, vi->visual); - XFree(vi); + if (!chosenConfig) + qFatal("Warning no context created"); - if (pictFormat && (pictFormat->type == PictTypeDirect) && pictFormat->direct.alphaMask) { - // The pict format for the visual matching the FBConfig indicates ARGB - break; - } - } else - break; // Just choose the first in the list if there's no alpha requested - } return chosenConfig; } -QPlatformWindowFormat QGLXGLContext::platformWindowFromGLXFBConfig(Display *display, GLXFBConfig config) +XVisualInfo *QGLXGLContext::findVisualInfo(const MyDisplay *xd, const QPlatformWindowFormat &format) +{ + GLXFBConfig config = QGLXGLContext::findConfig(xd,format); + XVisualInfo *visualInfo = glXGetVisualFromFBConfig(xd->display,config); + return visualInfo; +} + +QPlatformWindowFormat QGLXGLContext::platformWindowFromGLXFBConfig(Display *display, GLXFBConfig config, GLXContext ctx) { QPlatformWindowFormat format; int redSize = 0; @@ -134,6 +159,7 @@ QPlatformWindowFormat QGLXGLContext::platformWindowFromGLXFBConfig(Display *disp int alphaSize = 0; int depthSize = 0; int stencilSize = 0; + int sampleBuffers = 0; int sampleCount = 0; int level = 0; int rgba = 0; @@ -143,15 +169,17 @@ QPlatformWindowFormat QGLXGLContext::platformWindowFromGLXFBConfig(Display *disp int accumSizeG = 0; int accumSizeB = 0; + XVisualInfo *vi = glXGetVisualFromFBConfig(display,config); + glXGetConfig(display,vi,GLX_RGBA,&rgba); + XFree(vi); glXGetFBConfigAttrib(display, config, GLX_RED_SIZE, &redSize); glXGetFBConfigAttrib(display, config, GLX_GREEN_SIZE, &greenSize); glXGetFBConfigAttrib(display, config, GLX_BLUE_SIZE, &blueSize); glXGetFBConfigAttrib(display, config, GLX_ALPHA_SIZE, &alphaSize); glXGetFBConfigAttrib(display, config, GLX_DEPTH_SIZE, &depthSize); glXGetFBConfigAttrib(display, config, GLX_STENCIL_SIZE, &stencilSize); - glXGetFBConfigAttrib(display, config, GLX_SAMPLES, &sampleCount); + glXGetFBConfigAttrib(display, config, GLX_SAMPLES, &sampleBuffers); glXGetFBConfigAttrib(display, config, GLX_LEVEL, &level); - glXGetFBConfigAttrib(display, config, GLX_RGBA, &rgba); glXGetFBConfigAttrib(display, config, GLX_STEREO, &stereo); glXGetFBConfigAttrib(display, config, GLX_ACCUM_ALPHA_SIZE, &accumSizeA); glXGetFBConfigAttrib(display, config, GLX_ACCUM_RED_SIZE, &accumSizeR); @@ -164,11 +192,16 @@ QPlatformWindowFormat QGLXGLContext::platformWindowFromGLXFBConfig(Display *disp format.setAlphaBufferSize(alphaSize); format.setDepthBufferSize(depthSize); format.setStencilBufferSize(stencilSize); - format.setSamples(sampleCount); - format.setDirectRendering(true); // We don't support anything else for now. + format.setSampleBuffers(sampleBuffers); + if (format.sampleBuffers()) { + glXGetFBConfigAttrib(display, config, GLX_SAMPLES_ARB, &sampleCount); + format.setSamples(sampleCount); + } + + format.setDirectRendering(glXIsDirect(display, ctx)); format.setRgba(rgba); format.setStereo(stereo); - format.setAccumBufferSize(accumSizeA + accumSizeB + accumSizeG + accumSizeR); + format.setAccumBufferSize(accumSizeB); return format; } @@ -199,19 +232,9 @@ QGLXGLContext::QGLXGLContext(Window window, MyDisplay *xd, const QPlatformWindow if (sharePlatformContext) shareGlxContext = static_cast(sharePlatformContext)->glxContext(); - QVector spec = buildSpec(format); - int confcount = 0; - GLXFBConfig *configs; - configs = glXChooseFBConfig(xd->display,xd->screen,spec.constData(),&confcount); - if (confcount) - { - GLXFBConfig config = findConfig(configs,confcount,format,xd); - m_context = glXCreateNewContext(xd->display,config,GLX_RGBA_TYPE,shareGlxContext,TRUE); - m_windowFormat = QGLXGLContext::platformWindowFromGLXFBConfig(xd->display,config); - XFree(configs); - } else { - qFatal("Warning no context created"); - } + GLXFBConfig config = findConfig(xd,format); + m_context = glXCreateNewContext(xd->display,config,GLX_RGBA_TYPE,shareGlxContext,TRUE); + m_windowFormat = QGLXGLContext::platformWindowFromGLXFBConfig(xd->display,config,m_context); #ifdef MYX11_DEBUG qDebug() << "QGLXGLContext::create context" << m_context; @@ -243,16 +266,10 @@ void QGLXGLContext::createDefaultSharedContex(MyDisplay *xd) x, y, w, h, 0 /*border_width*/, xd->blackPixel(), xd->whitePixel()); GLXContext context; - QPlatformWindowFormat format; - QVector spec = buildSpec(format); - int confcount = 0; - GLXFBConfig *configs; - configs = glXChooseFBConfig(xd->display,xd->screen,spec.constData(),&confcount); - if (confcount) - { - GLXFBConfig config = findConfig(configs,confcount,format,xd); + QPlatformWindowFormat format = QPlatformWindowFormat::defaultFormat(); + GLXFBConfig config = findConfig(xd,format); + if (config) { context = glXCreateNewContext(xd->display,config,GLX_RGBA_TYPE,0,TRUE); - XFree(configs); QPlatformGLContext *sharedContext = new QGLXGLContext(xd,sharedWindow,context); QPlatformGLContext::setDefaultSharedContext(sharedContext); } else { diff --git a/src/plugins/platforms/testlite/qglxintegration.h b/src/plugins/platforms/testlite/qglxintegration.h index 5a98e25..2f7c70e 100644 --- a/src/plugins/platforms/testlite/qglxintegration.h +++ b/src/plugins/platforms/testlite/qglxintegration.h @@ -69,10 +69,13 @@ public: GLXContext glxContext() {return m_context;} QPlatformWindowFormat platformWindowFormat() const; + + static XVisualInfo *findVisualInfo(const MyDisplay *xd, const QPlatformWindowFormat &format); private: + static GLXFBConfig findConfig(const MyDisplay *xd,const QPlatformWindowFormat &format); static QVector buildSpec(const QPlatformWindowFormat &format); - static GLXFBConfig findConfig(const GLXFBConfig *configs,int configCount, const QPlatformWindowFormat &format, const MyDisplay *xd); - static QPlatformWindowFormat platformWindowFromGLXFBConfig(Display *display, GLXFBConfig config); + static QPlatformWindowFormat platformWindowFromGLXFBConfig(Display *display, GLXFBConfig config, GLXContext context); + MyDisplay *m_xd; Drawable m_drawable; diff --git a/src/plugins/platforms/testlite/qtestlitewindow.cpp b/src/plugins/platforms/testlite/qtestlitewindow.cpp index fd02bc4..39b2cc0 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.cpp +++ b/src/plugins/platforms/testlite/qtestlitewindow.cpp @@ -56,7 +56,6 @@ #include #include -#include #include "qglxintegration.h" #include @@ -158,21 +157,21 @@ QTestLiteWindow::QTestLiteWindow(const QTestLiteIntegration *platformIntegration int w = window->width(); int h = window->height(); -// int n, i; -// if(window->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenGL) { -// x_visualInfo = QGLXGLContext::findVisual(window->platformWindowFormat(),xd); - -// XSetWindowAttributes a; -// a.background_pixel = xd->whitePixel(); -// a.border_pixel = xd->blackPixel(); -// x_window = XCreateWindow(xd->display, xd->rootWindow(),x, y, w, h, -// 0, visualInfo()->depth, InputOutput, visualInfo()->visual, -// CWBackPixel|CWBorderPixel, &a); -// } else { + if(window->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenGL) { + + XVisualInfo *visualInfo = QGLXGLContext::findVisualInfo(xd,window->platformWindowFormat()); + Colormap cmap = XCreateColormap(xd->display,xd->rootWindow(),visualInfo->visual,AllocNone); + + XSetWindowAttributes a; + a.colormap = cmap; + x_window = XCreateWindow(xd->display, xd->rootWindow(),x, y, w, h, + 0, visualInfo->depth, InputOutput, visualInfo->visual, + CWColormap, &a); + } else { x_window = XCreateSimpleWindow(xd->display, xd->rootWindow(), x, y, w, h, 0 /*border_width*/, xd->blackPixel(), xd->whitePixel()); -// } + } #ifdef MYX11_DEBUG qDebug() << "QTestLiteWindow::QTestLiteWindow creating" << hex << x_window << window; -- cgit v0.12 From a8530e5db7ae25ea0ab5df4681308374abf8b6ba Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Fri, 6 Aug 2010 12:35:47 +0200 Subject: Allow customizing the default fbo from the QPlatformGLContext. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Jørgen Lind --- src/gui/kernel/qplatformglcontext_qpa.cpp | 12 ++++++++++++ src/gui/kernel/qplatformglcontext_qpa.h | 1 + src/opengl/qgl_qpa.cpp | 1 + src/opengl/qglpaintdevice.cpp | 6 ++++++ 4 files changed, 20 insertions(+) diff --git a/src/gui/kernel/qplatformglcontext_qpa.cpp b/src/gui/kernel/qplatformglcontext_qpa.cpp index 36db2b0..4fcd9b8 100644 --- a/src/gui/kernel/qplatformglcontext_qpa.cpp +++ b/src/gui/kernel/qplatformglcontext_qpa.cpp @@ -44,6 +44,18 @@ QPlatformGLContext::~QPlatformGLContext() { } +/*! + The frame buffer object that a QGLWidget is painted to and that gets bound + when a QGLFramebufferObject is released. + + The default implementation returns 0, which denotes the default + window-system provided frame buffer. +*/ +GLuint QPlatformGLContext::defaultFBO() const +{ + return 0; +} + static QPlatformGLContext *staticSharedContext = 0; void QPlatformGLContext::setDefaultSharedContext(QPlatformGLContext *sharedContext) diff --git a/src/gui/kernel/qplatformglcontext_qpa.h b/src/gui/kernel/qplatformglcontext_qpa.h index d235848..9bfe676 100644 --- a/src/gui/kernel/qplatformglcontext_qpa.h +++ b/src/gui/kernel/qplatformglcontext_qpa.h @@ -57,6 +57,7 @@ public: virtual void doneCurrent() = 0; virtual void swapBuffers() = 0; virtual void* getProcAddress(const QString& procName) = 0; + virtual GLuint defaultFBO() const; virtual QPlatformWindowFormat platformWindowFormat() const = 0; diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index 5f0bca3..b05df64 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -139,6 +139,7 @@ bool QGLContext::chooseContext(const QGLContext* shareContext) } d->platformContext = widget->platformWindow()->glContext(); Q_ASSERT(d->platformContext); + d->default_fbo = d->platformContext->defaultFBO(); d->glFormat = qt_platformwindowformat_to_glformat(d->platformContext->platformWindowFormat()); d->valid =(bool) d->platformContext; } diff --git a/src/opengl/qglpaintdevice.cpp b/src/opengl/qglpaintdevice.cpp index e1dcbfd..e12fdae 100644 --- a/src/opengl/qglpaintdevice.cpp +++ b/src/opengl/qglpaintdevice.cpp @@ -166,6 +166,12 @@ void QGLWidgetGLPaintDevice::setWidget(QGLWidget* w) void QGLWidgetGLPaintDevice::beginPaint() { + // ### This should be in setWidget(), but the context of the QGLWidget + // hasn't been set there yet. +#ifdef Q_WS_QPA + m_thisFBO = context()->d_ptr->platformContext->defaultFBO(); +#endif + QGLPaintDevice::beginPaint(); if (!glWidget->d_func()->disable_clear_on_painter_begin && glWidget->autoFillBackground()) { if (glWidget->testAttribute(Qt::WA_TranslucentBackground)) -- cgit v0.12 From 4a0ecee1fca85468c1cbcf8abb68f3d066ca4f60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 6 Aug 2010 08:41:19 +0200 Subject: Make testlite work without glx --- src/plugins/platforms/testlite/qglxintegration.h | 2 -- src/plugins/platforms/testlite/qtestliteintegration.cpp | 5 +---- src/plugins/platforms/testlite/qtestlitewindow.cpp | 13 +++++++++++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/plugins/platforms/testlite/qglxintegration.h b/src/plugins/platforms/testlite/qglxintegration.h index 2f7c70e..562967a 100644 --- a/src/plugins/platforms/testlite/qglxintegration.h +++ b/src/plugins/platforms/testlite/qglxintegration.h @@ -87,8 +87,6 @@ private: static void createDefaultSharedContex(MyDisplay *xd); }; - - QT_END_NAMESPACE #endif diff --git a/src/plugins/platforms/testlite/qtestliteintegration.cpp b/src/plugins/platforms/testlite/qtestliteintegration.cpp index 3f500c0..a8e0fa7 100644 --- a/src/plugins/platforms/testlite/qtestliteintegration.cpp +++ b/src/plugins/platforms/testlite/qtestliteintegration.cpp @@ -52,10 +52,9 @@ #ifndef QT_NO_OPENGL #include -#include "qglxintegration.h" #include #include -#endif +#endif //QT_NO_OPENGL QT_BEGIN_NAMESPACE @@ -84,9 +83,7 @@ public: QTestLiteIntegration::QTestLiteIntegration(bool useOpenGL) -#ifndef QT_NO_OPENGL : mUseOpenGL(useOpenGL) -#endif { xd = new MyDisplay; diff --git a/src/plugins/platforms/testlite/qtestlitewindow.cpp b/src/plugins/platforms/testlite/qtestlitewindow.cpp index 39b2cc0..1f477db 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.cpp +++ b/src/plugins/platforms/testlite/qtestlitewindow.cpp @@ -42,6 +42,7 @@ #include "qtestliteintegration.h" #include #include +#include #include "qtestlitewindow.h" @@ -56,7 +57,9 @@ #include #include +#ifndef QT_NO_OPENGL #include "qglxintegration.h" +#endif #include #include @@ -157,8 +160,9 @@ QTestLiteWindow::QTestLiteWindow(const QTestLiteIntegration *platformIntegration int w = window->width(); int h = window->height(); - if(window->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenGL) { - + if(window->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenGL + && QApplicationPrivate::platformIntegration()->hasOpenGL() ) { +#ifndef QT_NO_OPENGL XVisualInfo *visualInfo = QGLXGLContext::findVisualInfo(xd,window->platformWindowFormat()); Colormap cmap = XCreateColormap(xd->display,xd->rootWindow(),visualInfo->visual,AllocNone); @@ -167,6 +171,7 @@ QTestLiteWindow::QTestLiteWindow(const QTestLiteIntegration *platformIntegration x_window = XCreateWindow(xd->display, xd->rootWindow(),x, y, w, h, 0, visualInfo->depth, InputOutput, visualInfo->visual, CWColormap, &a); +#endif //QT_NO_OPENGL } else { x_window = XCreateSimpleWindow(xd->display, xd->rootWindow(), x, y, w, h, 0 /*border_width*/, @@ -1012,9 +1017,13 @@ void QTestLiteWindow::setCursor(QCursor * cursor) QPlatformGLContext *QTestLiteWindow::glContext() const { + if (!QApplicationPrivate::platformIntegration()->hasOpenGL()) + return 0; if (!mGLContext) { QTestLiteWindow *that = const_cast(this); +#ifndef QT_NO_OPENGL that->mGLContext = new QGLXGLContext(x_window, xd, widget()->platformWindowFormat()); +#endif } return mGLContext; } -- cgit v0.12 From 783f218aac7c73837405af4893d8dd35b425a710 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 6 Aug 2010 13:23:06 +0200 Subject: Fixed Lighthouse tempcontext to reset to current context and made glxintegrations shared context use the correct window configuration --- src/opengl/qgl_qpa.cpp | 13 ++++++++----- src/plugins/platforms/testlite/qglxintegration.cpp | 17 ++++++++++++----- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index b05df64..ad125fe 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -244,20 +244,23 @@ void QGLContext::generateFontDisplayLists(const QFont & fnt, int listBase) class QGLTemporaryContextPrivate { public: - QWidget *widget; + QGLWidget *widget; + QGLContext *context; }; QGLTemporaryContext::QGLTemporaryContext(bool, QWidget *) : d(new QGLTemporaryContextPrivate) { - d->widget = new QWidget; - d->widget->setGeometry(0,0,3,3); - d->widget->winId(); - d->widget->platformWindow()->glContext()->makeCurrent(); + d->context = const_cast(QGLContext::currentContext()); + d->context->doneCurrent(); + d->widget = new QGLWidget; + d->widget->makeCurrent(); } QGLTemporaryContext::~QGLTemporaryContext() { + d->widget->doneCurrent(); + d->context->makeCurrent(); delete d->widget; } diff --git a/src/plugins/platforms/testlite/qglxintegration.cpp b/src/plugins/platforms/testlite/qglxintegration.cpp index 47a4f5a..050643c 100644 --- a/src/plugins/platforms/testlite/qglxintegration.cpp +++ b/src/plugins/platforms/testlite/qglxintegration.cpp @@ -262,20 +262,27 @@ void QGLXGLContext::createDefaultSharedContex(MyDisplay *xd) int w = 3; int h = 3; - Window sharedWindow = XCreateSimpleWindow(xd->display, xd->rootWindow(), - x, y, w, h, 0 /*border_width*/, - xd->blackPixel(), xd->whitePixel()); - GLXContext context; QPlatformWindowFormat format = QPlatformWindowFormat::defaultFormat(); + GLXContext context; GLXFBConfig config = findConfig(xd,format); if (config) { + XVisualInfo *visualInfo = glXGetVisualFromFBConfig(xd->display,config); + Colormap cmap = XCreateColormap(xd->display,xd->rootWindow(),visualInfo->visual,AllocNone); + XSetWindowAttributes a; + a.colormap = cmap; + Window sharedWindow = XCreateWindow(xd->display, xd->rootWindow(),x, y, w, h, + 0, visualInfo->depth, InputOutput, visualInfo->visual, + CWColormap, &a); + context = glXCreateNewContext(xd->display,config,GLX_RGBA_TYPE,0,TRUE); QPlatformGLContext *sharedContext = new QGLXGLContext(xd,sharedWindow,context); QPlatformGLContext::setDefaultSharedContext(sharedContext); } else { - qFatal("Warning no shared context created"); + qWarning("Warning no shared context created"); } + + } void QGLXGLContext::makeCurrent() -- cgit v0.12 From 1d8ce23abdb0bd980292e4a9c8d87c019585150a Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Fri, 6 Aug 2010 13:42:43 +0200 Subject: Add missing null check to lighthouse's QGLTemporaryContext. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Jørgen Lind --- src/opengl/qgl_qpa.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index ad125fe..d87e668 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -252,7 +252,8 @@ QGLTemporaryContext::QGLTemporaryContext(bool, QWidget *) : d(new QGLTemporaryContextPrivate) { d->context = const_cast(QGLContext::currentContext()); - d->context->doneCurrent(); + if (d->context) + d->context->doneCurrent(); d->widget = new QGLWidget; d->widget->makeCurrent(); } @@ -260,7 +261,8 @@ QGLTemporaryContext::QGLTemporaryContext(bool, QWidget *) QGLTemporaryContext::~QGLTemporaryContext() { d->widget->doneCurrent(); - d->context->makeCurrent(); + if (d->context) + d->context->makeCurrent(); delete d->widget; } -- cgit v0.12 From 47bed030ffedded5914d8309bf2e1cccc1fd78d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 6 Aug 2010 15:10:20 +0200 Subject: Added reduced config to glxconfig should help if there are not many glxconfigs available. Also made QGLTemporaryContext use a QWidget again instead of a QGLWidget; This allows us to ask for a smaller window size before making the context. --- src/opengl/qgl_qpa.cpp | 14 +++-- src/plugins/platforms/testlite/qglxintegration.cpp | 68 ++++++++++++++++------ src/plugins/platforms/testlite/qglxintegration.h | 1 + 3 files changed, 60 insertions(+), 23 deletions(-) diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index d87e668..c328819 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -244,7 +244,7 @@ void QGLContext::generateFontDisplayLists(const QFont & fnt, int listBase) class QGLTemporaryContextPrivate { public: - QGLWidget *widget; + QWidget *widget; QGLContext *context; }; @@ -254,13 +254,19 @@ QGLTemporaryContext::QGLTemporaryContext(bool, QWidget *) d->context = const_cast(QGLContext::currentContext()); if (d->context) d->context->doneCurrent(); - d->widget = new QGLWidget; - d->widget->makeCurrent(); + d->widget = new QWidget; + d->widget->setGeometry(0,0,3,3); + QPlatformWindowFormat format = d->widget->platformWindowFormat(); + format.setWindowApi(QPlatformWindowFormat::OpenGL); + d->widget->winId(); + + + d->widget->platformWindow()->glContext()->makeCurrent(); } QGLTemporaryContext::~QGLTemporaryContext() { - d->widget->doneCurrent(); + d->widget->platformWindow()->glContext()->doneCurrent(); if (d->context) d->context->makeCurrent(); delete d->widget; diff --git a/src/plugins/platforms/testlite/qglxintegration.cpp b/src/plugins/platforms/testlite/qglxintegration.cpp index 050643c..ba161c1 100644 --- a/src/plugins/platforms/testlite/qglxintegration.cpp +++ b/src/plugins/platforms/testlite/qglxintegration.cpp @@ -113,28 +113,33 @@ QVector QGLXGLContext::buildSpec(const QPlatformWindowFormat &format) GLXFBConfig QGLXGLContext::findConfig(const MyDisplay *xd, const QPlatformWindowFormat &format) { - QVector spec = buildSpec(format); - int confcount = 0; - GLXFBConfig *configs; + bool reduced = true; GLXFBConfig chosenConfig = 0; - configs = glXChooseFBConfig(xd->display,xd->screen,spec.constData(),&confcount); - if (confcount) - { - for (int i = 0; i < confcount; i++) { - chosenConfig = configs[i]; - - // Make sure we try to get an ARGB visual if the format asked for an alpha: - if (format.alpha()) { - int alphaSize; - glXGetFBConfigAttrib(xd->display,configs[i],GLX_ALPHA_SIZE,&alphaSize); - if (alphaSize > 0) - break; - } else { - break; // Just choose the first in the list if there's no alpha requested + QPlatformWindowFormat reducedFormat = format; + while (!chosenConfig && reduced) { + QVector spec = buildSpec(reducedFormat); + int confcount = 0; + GLXFBConfig *configs; + configs = glXChooseFBConfig(xd->display,xd->screen,spec.constData(),&confcount); + if (confcount) + { + for (int i = 0; i < confcount; i++) { + chosenConfig = configs[i]; + + // Make sure we try to get an ARGB visual if the format asked for an alpha: + if (format.alpha()) { + int alphaSize; + glXGetFBConfigAttrib(xd->display,configs[i],GLX_ALPHA_SIZE,&alphaSize); + if (alphaSize > 0) + break; + } else { + break; // Just choose the first in the list if there's no alpha requested + } } - } - XFree(configs); + XFree(configs); + } + reducedFormat = reducePlatformWindowFormat(format,&reduced); } if (!chosenConfig) @@ -206,6 +211,31 @@ QPlatformWindowFormat QGLXGLContext::platformWindowFromGLXFBConfig(Display *disp return format; } +QPlatformWindowFormat QGLXGLContext::reducePlatformWindowFormat(const QPlatformWindowFormat &format, bool *reduced) +{ + QPlatformWindowFormat retFormat = format; + *reduced = true; + + if (retFormat.sampleBuffers()) { + retFormat.setSampleBuffers(false); + } else if (retFormat.stereo()) { + retFormat.setStereo(false); + } else if (retFormat.accum()) { + retFormat.setAccum(false); + }else if (retFormat.stencil()) { + retFormat.setStencil(false); + }else if (retFormat.alpha()) { + retFormat.setAlpha(false); + }else if (retFormat.depth()) { + retFormat.setDepth(false); + }else if (retFormat.doubleBuffer()) { + retFormat.setDoubleBuffer(false); + }else{ + *reduced = false; + } + return retFormat; +} + QGLXGLContext::QGLXGLContext(Window window, MyDisplay *xd, const QPlatformWindowFormat &format) : QPlatformGLContext() , m_xd(xd) diff --git a/src/plugins/platforms/testlite/qglxintegration.h b/src/plugins/platforms/testlite/qglxintegration.h index 562967a..479be4b 100644 --- a/src/plugins/platforms/testlite/qglxintegration.h +++ b/src/plugins/platforms/testlite/qglxintegration.h @@ -75,6 +75,7 @@ private: static GLXFBConfig findConfig(const MyDisplay *xd,const QPlatformWindowFormat &format); static QVector buildSpec(const QPlatformWindowFormat &format); static QPlatformWindowFormat platformWindowFromGLXFBConfig(Display *display, GLXFBConfig config, GLXContext context); + static QPlatformWindowFormat reducePlatformWindowFormat(const QPlatformWindowFormat &format, bool *reduced); MyDisplay *m_xd; -- cgit v0.12 From eaf64f3a07533a30aa29eed85f6a3cbc744722a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 6 Aug 2010 16:31:15 +0200 Subject: Cleaned up in includes in Lighthouse headerfiles --- src/gui/kernel/qplatformglcontext_qpa.cpp | 2 +- src/gui/kernel/qplatformglcontext_qpa.h | 5 +++-- src/gui/kernel/qplatformintegration_qpa.h | 1 + src/gui/kernel/qplatformscreen_qpa.h | 9 ++++++++- src/plugins/platforms/eglconvenience/qeglconvenience.h | 2 +- src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp | 3 ++- 6 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/gui/kernel/qplatformglcontext_qpa.cpp b/src/gui/kernel/qplatformglcontext_qpa.cpp index 4fcd9b8..516bf24 100644 --- a/src/gui/kernel/qplatformglcontext_qpa.cpp +++ b/src/gui/kernel/qplatformglcontext_qpa.cpp @@ -51,7 +51,7 @@ QPlatformGLContext::~QPlatformGLContext() The default implementation returns 0, which denotes the default window-system provided frame buffer. */ -GLuint QPlatformGLContext::defaultFBO() const +unsigned long QPlatformGLContext::defaultFBO() const { return 0; } diff --git a/src/gui/kernel/qplatformglcontext_qpa.h b/src/gui/kernel/qplatformglcontext_qpa.h index 9bfe676..3e7656b 100644 --- a/src/gui/kernel/qplatformglcontext_qpa.h +++ b/src/gui/kernel/qplatformglcontext_qpa.h @@ -42,7 +42,8 @@ #ifndef QPLATFORM_GL_CONTEXT_H #define QPLATFORM_GL_CONTEXT_H -#include +#include +#include QT_BEGIN_HEADER @@ -57,7 +58,7 @@ public: virtual void doneCurrent() = 0; virtual void swapBuffers() = 0; virtual void* getProcAddress(const QString& procName) = 0; - virtual GLuint defaultFBO() const; + virtual unsigned long defaultFBO() const; virtual QPlatformWindowFormat platformWindowFormat() const = 0; diff --git a/src/gui/kernel/qplatformintegration_qpa.h b/src/gui/kernel/qplatformintegration_qpa.h index 9f7367e..8cecbb4 100644 --- a/src/gui/kernel/qplatformintegration_qpa.h +++ b/src/gui/kernel/qplatformintegration_qpa.h @@ -43,6 +43,7 @@ #define QPLATFORMINTEGRATION_H #include +#include #include #include diff --git a/src/gui/kernel/qplatformscreen_qpa.h b/src/gui/kernel/qplatformscreen_qpa.h index f603db5..1704f0f 100644 --- a/src/gui/kernel/qplatformscreen_qpa.h +++ b/src/gui/kernel/qplatformscreen_qpa.h @@ -42,10 +42,17 @@ #ifndef QPLATFORMSCREEN_H #define QPLATFORMSCREEN_H +#include +#include +#include +#include #include -#include #include +#include +#include +#include + QT_BEGIN_HEADER QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/eglconvenience/qeglconvenience.h b/src/plugins/platforms/eglconvenience/qeglconvenience.h index 12731e1..484894b 100644 --- a/src/plugins/platforms/eglconvenience/qeglconvenience.h +++ b/src/plugins/platforms/eglconvenience/qeglconvenience.h @@ -41,11 +41,11 @@ #ifndef QEGLCONVENIENCE_H #define QEGLCONVENIENCE_H -#include #include #include +#include QT_BEGIN_NAMESPACE QVector q_createConfigAttributesFromFormat(const QPlatformWindowFormat &format); diff --git a/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp b/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp index 87cd958..04720b5 100644 --- a/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp +++ b/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp @@ -41,12 +41,13 @@ #include "qeglplatformcontext.h" -#include #include #include "qeglconvenience.h" +#include + QEGLPlatformContext::QEGLPlatformContext(EGLDisplay display, EGLConfig config, EGLint contextAttrs[], EGLSurface surface, EGLenum eglApi) : QPlatformGLContext() , m_eglDisplay(display) -- cgit v0.12 From f33359fb0c56fe88e0ae3c564b7847f90889eac2 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Mon, 9 Aug 2010 20:50:45 +0200 Subject: Doc: Fixes to Qt Quick documentation. Reviewed-by: Trust Me To-be-verified-by: Qt Doc Team --- doc/src/declarative/declarativeui.qdoc | 99 +- doc/src/declarative/dynamicobjects.qdoc | 2 +- doc/src/declarative/elements.qdoc | 6 +- doc/src/declarative/qml-intro.qdoc | 414 +--- doc/src/declarative/qtprogrammers.qdoc | 3 +- doc/src/external-resources.qdoc | 15 + doc/src/getting-started/demos.qdoc | 18 +- doc/src/getting-started/gettingstartedqml.qdoc | 2044 ++++++++++---------- doc/src/getting-started/gettingstartedqt.qdoc | 6 +- doc/src/qt4-intro.qdoc | 8 +- .../ui-components/dialcontrol/content/Dial.qml | 2 + .../ui-components/dialcontrol/dialcontrol.qml | 4 +- src/declarative/qml/qdeclarativecomponent.cpp | 2 +- src/declarative/qml/qdeclarativeengine.cpp | 6 +- 14 files changed, 1159 insertions(+), 1470 deletions(-) diff --git a/doc/src/declarative/declarativeui.qdoc b/doc/src/declarative/declarativeui.qdoc index 42189c0..ed8b734 100644 --- a/doc/src/declarative/declarativeui.qdoc +++ b/doc/src/declarative/declarativeui.qdoc @@ -33,7 +33,7 @@ dynamic, custom user interfaces. Qt Quick provides a declarative framework for building highly dynamic, -custom user interfaces from a rich set of \l {QML Elements}{QML elements}. +custom user interfaces from a rich set of \l{QML Elements}{QML elements}. Qt Quick helps programmers and designers collaborate to build the fluid user interfaces that are becoming common in portable consumer devices, such as mobile phones, media players, set-top boxes @@ -41,73 +41,74 @@ and netbooks. Qt Quick consists of the QtDeclarative C++ module, QML, and the integration of both of these into the Qt Creator IDE. Using the QtDeclarative C++ module, you can load and interact with QML files from your Qt application. -QML is an extension to \l -{http://www.ecma-international.org/publications/standards/Ecma-262.htm} -{JavaScript}, that provides a mechanism to declaratively build an -object tree of \l {QML Elements}{QML elements}. QML improves the -integration between JavaScript and Qt's existing QObject based type -system, adds support for automatic \l {Property Binding}{property -bindings} and provides \l {Network Transparency}{network transparency} -at the language level. +QML is an extension to \l{About JavaScript}{JavaScript}, that provides +a mechanism to declaratively build an object tree of +\l{QML Elements}{QML elements}. QML improves the integration between +JavaScript and Qt's existing QObject-based type system, adds support for +automatic \l{Property Binding}{property bindings} and provides +\l{Network Transparency}{network transparency} at the language level. -The \l {QML Elements}{QML elements} are a sophisticated set of +The \l{QML Elements}{QML elements} are a sophisticated set of graphical and behavioral building blocks. These different elements -are combined together in \l {QML Documents}{QML documents} to build +are combined together in \l{QML Documents}{QML documents} to build components ranging in complexity from simple buttons and sliders, to -complete internet-enabled applications like a \l -{http://www.flickr.com}{Flickr} photo browser. +complete Internet-enabled applications like a photo browser for the +popular \l{http://www.flickr.com}{Flickr} photo-sharing site. -Qt Quick builds on \l {QML for Qt programmers}{Qt's existing -strengths}. QML can be be used to incrementally extend an existing -application or to build completely new applications. QML is fully \l -{Extending QML in C++}{extensible from C++} through the QtDeclarative Module. +Qt Quick builds on \l{QML for Qt programmers}{Qt's existing strengths}. +QML can be be used to incrementally extend an existing application or +to build completely new applications. QML is fully +\l{Extending QML in C++}{extensible from C++} through the QtDeclarative +Module. \section1 Getting Started \list -\o \l {Introduction to the QML language} -\o \l {QML Tutorial}{Tutorial: 'Hello World'} -\o \l {QML Advanced Tutorial}{Tutorial: 'Same Game'} -\o \l {QML Examples and Demos} -\o \l {QML for Qt programmers} +\o \l{Introduction to the QML language} +\o \l{QML Tutorial}{Tutorial: 'Hello World'} +\o \l{QML Advanced Tutorial}{Tutorial: 'Same Game'} +\o \l{QML Examples and Demos} +\o \l{QML for Qt Programmers} +\o \l{Getting Started Programming with QML} +\o \l{Beginning Qt Quick} \endlist \section1 Core QML Features \list -\o \l {QML Documents} -\o \l {Property Binding} -\o \l {Network Transparency} -\o \l {QML Scope} -\o \l {Integrating JavaScript} -\o \l {Data Models} -\o \l {anchor-layout.html}{Anchor-based Layout} -\o \l {qdeclarativestates.html}{States} -\o \l {qdeclarativeanimation.html}{Animation} -\o \l {qdeclarativefocus.html}{Keyboard Focus} -\o \l {qdeclarativemodules.html}{Modules} -\o \l {Extending types from QML} -\o \l {qdeclarativedynamicobjects.html}{Dynamic Object Creation} -\o \l {qmlruntime.html}{The Qt Declarative Runtime} +\o \l{QML Documents} +\o \l{Property Binding} +\o \l{Network Transparency} +\o \l{QML Scope} +\o \l{Integrating JavaScript} +\o \l{Data Models} +\o \l{Anchor-based Layout in QML} +\o \l{QML States} +\o \l{QML Animation} +\o \l{Keyboard Focus in QML} +\o \l{QML Modules} +\o \l{Extending types from QML} +\o \l{Dynamic Object Management in QML} +\o \l{Qt Declarative UI Runtime} \endlist \section1 Using QML with C++ \list -\o \l {Using QML in C++ Applications} -\o \l {Integrating QML with existing Qt UI code} -\o \l {Tutorial: Writing QML extensions with C++} -\o \l {Extending QML in C++} +\o \l{Using QML in C++ Applications} +\o \l{Integrating QML with existing Qt UI code} +\o \l{Tutorial: Writing QML extensions with C++} +\o \l{Extending QML in C++} \endlist \section1 Reference \list -\o \l {QML Elements} -\o \l {QML Global Object} -\o \l {QML Internationalization} -\o \l {QML Security} -\o \l {QtDeclarative Module} -\o \l {Debugging QML} -\o \l {QML Viewer} -\o \l {QML Performance} -\o \l {QML Coding Conventions} +\o \l{QML Elements} +\o \l{QML Global Object} +\o \l{QML Internationalization} +\o \l{QML Security} +\o \l{QtDeclarative Module} +\o \l{Debugging QML} +\o \l{QML Viewer} +\o \l{QML Performance} +\o \l{QML Coding Conventions} \endlist */ diff --git a/doc/src/declarative/dynamicobjects.qdoc b/doc/src/declarative/dynamicobjects.qdoc index 997f601..e735bce 100644 --- a/doc/src/declarative/dynamicobjects.qdoc +++ b/doc/src/declarative/dynamicobjects.qdoc @@ -27,7 +27,7 @@ /*! \page qdeclarativedynamicobjects.html -\title Dynamic Object Management +\title Dynamic Object Management in QML QML provides a number of ways to dynamically create and manage QML objects. The \l{Loader}, \l{Repeater}, \l{ListView}, \l{GridView} and \l{PathView} elements diff --git a/doc/src/declarative/elements.qdoc b/doc/src/declarative/elements.qdoc index c2930b3..55b71e1 100644 --- a/doc/src/declarative/elements.qdoc +++ b/doc/src/declarative/elements.qdoc @@ -26,11 +26,11 @@ ****************************************************************************/ /*! -\page qdeclarativeelements.html +\page qmlelements.html \target elements \title QML Elements -The following table lists the QML elements provided by the \l {QtDeclarative}{Qt Declarative} module. +The following table lists the QML elements provided by the \l{QtDeclarative} module. \table \header \o {2,1} \bold {Basic Visual Items} @@ -54,7 +54,7 @@ The following table lists the QML elements provided by the \l {QtDeclarative}{Qt \row \o \l {Flickable} \o Provides a surface that can be "flicked" \row \o \l {Flipable} \o Provides a surface that produces flipping effects \row \o \l {GestureArea} (experimental) \o Enables simple gesture handling - + \header \o {2,1} \bold {States} \row \o \l {State} \o Defines sets of configurations of objects and properties \row \o \l {PropertyChanges} \o Describes property changes within a state diff --git a/doc/src/declarative/qml-intro.qdoc b/doc/src/declarative/qml-intro.qdoc index fbab001..69dd500 100644 --- a/doc/src/declarative/qml-intro.qdoc +++ b/doc/src/declarative/qml-intro.qdoc @@ -28,14 +28,11 @@ /*! - -\page qml-intro.html +\page qml-intro.html \title Beginning Qt Quick - \section1 Overview - QML is a high level, scripted language. Its commands, more correctly \e elements, leverage the power and efficiency of the Qt libraries to make easy to use commands that perform intuitive functions. Draw a rectangle, display an image at @@ -61,12 +58,7 @@ would be a property. The basic syntax of an \l {QML Elements}{element} is - \code - SomeElement { - id: myObject - ... some other things here ... - } - \endcode +\snippet doc/src/snippets/declarative/qml-intro/basic-syntax.qml basic syntax Here we are defining a new object. We specify its 'type' first as SomeElement. Then within matching braces { ... } we specify the various parts of our @@ -90,61 +82,38 @@ want a rectangle that is 500 pixels by 400 pixels in the x and y directions We can implement this \l Rectangle with these properties this way - \code - import Qt 4.7 - - // This is a comment. And below myRectangle is defined. - Rectangle { - id: myRectangle - width: 500 - height: 400 - } - \endcode +\quotefile doc/src/snippets/declarative/qml-intro/rectangle.qml This is a valid QML script. To run it, copy it and save it to a file, say -myexample.qml, and on the command line run the command +myexample.qml, and on the command line run the following command: - \code - qmlviewer myexample.qml - \endcode +\code +qmlviewer myexample.qml +\endcode On Mac OS X, open the "QMLViewer" application instead and open the \c myexample.qml file, or run it from the command line: - \code - QMLViewer.app/Contents/MacOS/QMLViewer myexample.qml - \endcode - +\code +QMLViewer.app/Contents/MacOS/QMLViewer myexample.qml +\endcode It will create a very boring rectangle in its own window. - \section1 Hello World! We can now add some color and text to make a Hello World QML program. -\l Rectangle has the property \l {Rectangle::color}{color} to produce a +\l Rectangle has the property \l{Rectangle::color}{color} to produce a background color. Text is handled by a different element called \l Text. We need to create a -\l Text object inside the \l Rectangle and set its \l {Text::text}{text} -property to "Hello World!". So to set the text to 'Hello world' and the +\l Text object inside the \l Rectangle and set its \l{Text::}{text} +property to "Hello World!". So to set the text to "Hello world" and the background colour to light gray, - \code - import Qt 4.7 - - Rectangle { - id: myRectangle - width: 500 - height: 400 - - Text { text: "Hello World!" } - - color: "lightgray" - } - \endcode +\quotefile doc/src/snippets/declarative/qml-intro/hello-world1.qml \section1 Hello World Again @@ -158,12 +127,7 @@ position belongs to the \l Text element so we set the position inside its definition. Note that we separate different QML statements on the same line with a semi-colon, or we could have simply put each statement on a new line - \code - Text { - text: "

Hello World

"; color: "darkgreen" - x: 100; y:100 - } - \endcode +\snippet doc/src/snippets/declarative/qml-intro/hello-world2.qml updated text Not only did we reposition the text, but the text was altered by adding HTML tags to change the font size. The text color was also changed from the @@ -174,13 +138,7 @@ We could also have used a hexadecimal string for the RGB (red-green-blue, as #rrggbb) values of the color similar to the method used in HTML. For example, mostly blue with a green tint, - \code - Text { - text: "

Hello world again

" - color: "#002288" - x: 100; y: 100 - } - \endcode +\snippet doc/src/snippets/declarative/qml-intro/hello-world3.qml updated text All of these changes occurred within the \l Text object which is the scope of these property changes. @@ -198,11 +156,7 @@ source of the image, the path to the file, is a URL. Therefore the file can be local: \e {mydir/myimage1.png}. Or it can be remote: \e {"http://www.example.com/images/myimage1.png"}. - \code - Image { - source: "images/qt-logo.png" - } - \endcode +\snippet doc/src/snippets/declarative/qml-intro/hello-world4.qml added an image This displays the image, as we would expect, at the top left of the window. The position of the default x = 0, y = 0 coordinate. The example here uses @@ -213,44 +167,12 @@ Let us reposition the image and enlarge it. Place it at the same 'x' offset as the "Hello world again" text, but put it another 50 pixels below the text, also make it 150 by 150 pixels in size, - \code - Image { - source: "images/qt-logo.png" - x: 100; y: 150 - width: 150; height: 150 - } - \endcode +\snippet doc/src/snippets/declarative/qml-intro/hello-world5.qml positioning the image Adding the Hello World example, with the text and the image example we can write a simple piece of QML that starts to look a bit better. - \code - import Qt 4.7 - - Rectangle { - id: myRectangle - width: 500 - height: 400 - - // A light gray background - color: "lightgray" - - // Position and color some text - Text { - text: "

Hello world again

" - color: "darkgreen" - x: 100; y: 100 - } - - // Using the opportunity to resize the image. - Image { - source: "images/qt-logo.png" - x: 100; y: 150 - width: 150; height: 150 - } - - } - \endcode +\quotefile doc/src/snippets/declarative/qml-intro/hello-world5.qml The result is still quite simple @@ -281,22 +203,7 @@ If we want to position an image at the bottom of the rectangle it is inside. I have to specify that the bottom of the image is also at the bottom of the rectangle - \code - import Qt 4.7 - - Rectangle { - id: myWin - width: 500 - height: 400 - - Image { - id: image1 - source: "images/qt-logo.png" - width: 150; height: 150 - anchors.bottom: myWin.bottom - } - } - \endcode +\quotefile doc/src/snippets/declarative/qml-intro/anchors1.qml This places the logo at the bottom left of the window. @@ -315,25 +222,7 @@ the bottomMargin property is used. So the new actions for the script are Encoded into QML the script becomes - \code - import Qt 4.7 - - Rectangle { - id: myWin - width: 500 - height: 400 - - Image { - id: image1 - source: "images/qt-logo.png" - width: 150; height: 150 - anchors.bottom: myWin.bottom - anchors.horizontalCenter: myWin.horizontalCenter - anchors.bottomMargin: 10 - } - } - \endcode - +\quotefile doc/src/snippets/declarative/qml-intro/anchors2.qml Run this and resize the window. You will see that now the position of the image adjusts during the resize. @@ -344,14 +233,7 @@ You can also add another object say a block of descriptive text and place it above or below the image or to the side. This code places some text just above the image - \code - Text { - text: "

The Qt Logo

" - anchors.bottom: image1.top - anchors.horizontalCenter: myWin.horizontalCenter - anchors.bottomMargin: 15 - } - \endcode +\snippet doc/src/snippets/declarative/qml-intro/anchors3.qml adding some text \image qml-intro-anchors3.png @@ -359,17 +241,15 @@ above the image referencing these properties from another object we use the property directly, instead of saying: - \code - myRectangle.anchors.top // Wrong - \endcode +\qml +myRectangle.anchors.top // Wrong +\endqml we use - \code - myRectangle.top // Correct - \endcode - - +\qml +myRectangle.top // Correct +\endqml \section1 Transformations @@ -391,9 +271,9 @@ Rotation of text was also suggested. It could also be useful to scale the text. We can do both. The \l {Item::transform}{transform} property is a \e list of \l Transform elements, so using the list syntax - \code - myList: [ listElement1, listElement2, ... } ] - \endcode +\qml +myList: [ listElement1, listElement2, ... } ] +\endqml we can produce a list of transformations. @@ -402,46 +282,7 @@ vertically by a factor of 1.5 and by 1.2 horizontally. Using the example above as the basis for this we have, - \code - import Qt 4.7 - - Rectangle { - id: myWin - width: 500 - height: 400 - - Image { - id: image1 - source: "images/qt-logo.png" - width: 150; height: 150 - anchors.bottom: myWin.bottom - anchors.horizontalCenter: myWin.horizontalCenter - anchors.bottomMargin: 10 - - transform: Rotation { - origin.x: 75; origin.y: 75 - axis{ x: 0; y: 0; z:1 } angle: -90 - } - - } - - Text { - text: "

The Qt Logo -- taking it easy

" - anchors.bottom: image1.top - anchors.horizontalCenter: myWin.horizontalCenter - anchors.bottomMargin: 15 - - transform: [ - Scale { xScale: 1.5; yScale: 1.2 } , - - Rotation { - origin.x: 75; origin.y: 75 - axis{ x: 0; y: 0; z:1 } angle: -45 - } - ] - } - } - \endcode +\quotefile doc/src/snippets/declarative/qml-intro/transformations1.qml The code block in \c image1 starting with \c transform specifies that the \l {Item::transform}{transform} property will be a Rotation through -90 @@ -479,30 +320,7 @@ from \l Item. The rotation property is a real number that specifies the angle in a clockwise direction for the rotation of the object. Here is the code for our animated rotating image. - \code - import Qt 4.7 - - Rectangle { - id: mainRec - width: 600 - height: 400 - - Image { - id: image1 - source: "images/qt-logo.png" - x: 200; y: 100 - width: 100; height: 100 - - // Animate a rotation - transformOrigin: Item.Center - NumberAnimation on rotation { - from: 0; to: 360 - duration: 2000 - loops: Animation.Infinite - } - } - } - \endcode +\quotefile doc/src/snippets/declarative/number-animation1.qml The \c {transformOrigin: Item.Center} is redundant since this is the default axis of rotation anyway. But if you change \c Center to \c BottomRight you @@ -515,32 +333,7 @@ combination. For example, if the task had been to animate the rotation about the y-axis passing through the center of the image then the following code would do it. - \code - import Qt 4.7 - - Rectangle { - id: mainRec - width: 600 - height: 400 - - Image { - id: image1 - source: "images/qt-logo.png" - x: 200; y: 100 - width: 100; height: 100 - - // Animate a rotation - transform: Rotation { - origin.x: 50; origin.y: 50; axis {x:0; y:1; z:0} angle:0 - NumberAnimation on angle { - from: 0; to: 360; - duration: 3000; - loops: Animation.Infinite - } - } - } - } - \endcode +\quotefile doc/src/snippets/declarative/number-animation2.qml Here there is a rectangle 600 by 400 pixels. Placed within that rectangle is an image 100 by 100 pixels. It is rotated about the center of the image @@ -569,31 +362,7 @@ will be animating the position and the size of the image. First create two images - \code - import Qt 4.7 - - Rectangle { - id: mainRec - width: 600 - height: 400 - z: 0 - - Image { - id: image1 - source: "images/qt-logo.png" - x: 20; y: 20 ; z: 1 - width: 100; height: 100 - } - - Image { - id: image2 - source: "images/qt-logo.png" - width: 100; height: 100 - x: (mainRec.width - 100)/2; y: (mainRec.height - 100)/2 - z: 2 - } - } - \endcode +\quotefile doc/src/snippets/declarative/sequential-animation1.qml We will add to 'image1' a SequentialAnimation from x = 20 to the target of x = 450. The 'from' values will be used because we will be repeating the @@ -606,14 +375,7 @@ between the x values and over a given duration. After the NumberAnimation there will be a PauseAnimation that will pause the animation for 500 milliseconds (half a second) simply for the visual effect. - \code - SequentialAnimation on x { - loops: Animation.Infinite - NumberAnimation { from: 20; to: 450; easing.type: "InOutQuad"; -duration: 2000 } - PauseAnimation { duration: 500 } - } - \endcode +\snippet doc/src/snippets/declarative/sequential-animation2.qml adding a sequential animation A similar block of code is written for the animation of the 'y' value of the position. @@ -628,54 +390,7 @@ and image1 to 1 and image2 to 2 then image2 will be in the foreground and image1 in the background. When image1 passes image2 it will pass behind it. The completed code looks like - \code - Rectangle { - id: mainRec - width: 600 - height: 400 - z: 0 - - Image { - id: image2 - source: "images/qt-logo.png" - width: 100; height: 100 - x: (mainRec.width - 100)/2; y: (mainRec.height - 100)/2 - z: 2 - } - - Image { - id: image1 - source: "images/qt-logo.png" - x: 20; y: 20 ; z: 1 - width: 100; height: 100 - - SequentialAnimation on x { - loops: Animation.Infinite - NumberAnimation { - from: 20; to: 450 - easing.type: "InOutQuad"; duration: 2000 - } - PauseAnimation { duration: 500 } - } - - SequentialAnimation on y { - loops: Animation.Infinite - NumberAnimation { - from: 20; to: 250 - easing.type: "InOutQuad"; duration: 2000 - } - PauseAnimation { duration: 500 } - } - - SequentialAnimation on scale { - loops: Animation.Infinite - NumberAnimation { from: 1; to: 0.5; duration: 1000 } - NumberAnimation { from: 0.5; to: 1; duration: 1000 } - PauseAnimation { duration: 500 } - } - } - } - \endcode +\quotefile doc/src/snippets/declarative/sequential-animation3.qml The \c {easing.type} has many options, expressed as a string. It specifies the kind of equation that describes the acceleration of the property value, not @@ -756,60 +471,7 @@ will be the default state. We will just go to 'night' by clicking and holding the left mouse button down, releasing the mouse button will reverse the process - \code - import Qt 4.7 - - Rectangle { - id: mainRectangle - width: 600 - height: 400 - color: "black" - - Rectangle { - id: sky - width: 600 - height: 200 - y: 0 - color: "lightblue" - } - - Rectangle { - id: ground - width: 600; height: 200 - y: 200 - color: "green" - } - - MouseArea { - id: mousearea - anchors.fill: mainRectangle - } - - states: [ State { - name: "night" - when: mousearea.pressed == true - PropertyChanges { target: sky; color: "darkblue" } - PropertyChanges { target: ground; color: "black" } - }, - State { - name: "daylight" - when: mousearea.pressed == false - PropertyChanges { target: sky; color: "lightblue" } - PropertyChanges { target: ground; color: "green" } - } - ] - - transitions: [ Transition { - from: "daylight"; to: "night" - ColorAnimation { duration: 1000 } - }, - Transition { - from: "night"; to: "daylight" - ColorAnimation { duration: 500 } - } - ] - } - \endcode +\quotefile doc/src/snippets/declarative/states1.qml Several new things appear in this sample. Firstly, we use a \l MouseArea element to detect mouse clicks in the \e mainRectangle. Secondly, we use diff --git a/doc/src/declarative/qtprogrammers.qdoc b/doc/src/declarative/qtprogrammers.qdoc index 68d56bf..c0639db 100644 --- a/doc/src/declarative/qtprogrammers.qdoc +++ b/doc/src/declarative/qtprogrammers.qdoc @@ -26,10 +26,9 @@ ****************************************************************************/ /*! - \page qtprogrammers.html \target qtprogrammers -\title QML for Qt programmers +\title QML for Qt Programmers \section1 Overview diff --git a/doc/src/external-resources.qdoc b/doc/src/external-resources.qdoc index e901124c..61620f5 100644 --- a/doc/src/external-resources.qdoc +++ b/doc/src/external-resources.qdoc @@ -428,3 +428,18 @@ \externalpage http://developer.symbian.org/wiki/index.php/Deploying_a_Qt_Application \title Deploying a Qt Application article */ + +/*! + \externalpage http://www.ecma-international.org/publications/standards/Ecma-262.htm + \title ECMAScript Language Specification +*/ + +/*! + \externalpage https://developer.mozilla.org/en/JavaScript + \title JavaScript +*/ + +/*! + \externalpage https://developer.mozilla.org/en/JavaScript/About_JavaScript + \title About JavaScript +*/ diff --git a/doc/src/getting-started/demos.qdoc b/doc/src/getting-started/demos.qdoc index ef16224..719c861 100644 --- a/doc/src/getting-started/demos.qdoc +++ b/doc/src/getting-started/demos.qdoc @@ -46,7 +46,7 @@ \o \inlineimage qtdemo-small.png \o If you run the \l{Examples and Demos Launcher}, you'll see many of Qt's widgets in action. - + The \l{Qt Widget Gallery} also provides overviews of selected Qt widgets in each of the styles used on various supported platforms. \endtable @@ -134,15 +134,23 @@ \section1 QtWebKit \list - \o \l{Web Browser} demonstrates how Qt's \l{QtWebKit Module}{WebKit module} - can be used to implement a small Web browser. + \o \l{Web Browser} demonstrates how Qt's \l{QtWebKit} module can be used to + implement a small Web browser. + \endlist + + \section1 Multimedia + + \list + \o \l{demos/spectrum}{Spectrum Analyser} shows how the \l{QtMultimedia} + module can be used to manipulate audio as it is played. \endlist \section1 Phonon \list - \o \l{demos/qmediaplayer}{Media Player} demonstrates how the \l{Phonon Module} can be - used to implement a basic media player application. + \o \l{demos/qmediaplayer}{Media Player} demonstrates how the + \l{Phonon Module}{Phonon module} can be used to implement a basic media player + application. \endlist \note The Phonon demos are currently not available for the MinGW platform. diff --git a/doc/src/getting-started/gettingstartedqml.qdoc b/doc/src/getting-started/gettingstartedqml.qdoc index 2bfb71c..885e6ce 100644 --- a/doc/src/getting-started/gettingstartedqml.qdoc +++ b/doc/src/getting-started/gettingstartedqml.qdoc @@ -26,1025 +26,1025 @@ ****************************************************************************/ /*! - \page qml-textEditor.html - - \title Getting Started programming with QML - \ingroup gettingStarted - - Welcome to the world of QML - the declarative UI language. In this Getting - Started guide, we will create a simple text editor application using QML. - After reading this guide, you should be ready to develop your own applications - using QML and Qt C++. - - \section1 QML to Build User Interfaces - - The application we are building is a simple text editor that will load, save, - and perform some text manipulation. This guide will consist of two parts. The - first part will involve designing the application layout and behaviors using - declarative language in QML. For the second part, file loading and saving will - be implemented using Qt C++. Using - \l {The Meta-Object System}{Qt's Meta-Object System}, we can expose C++ functions - as properties that QML elements can use. Utilizing QML and Qt C++, we can - efficiently decouple the interface logic from the application logic. - - \image qml-texteditor5_editmenu.png - - To run the QML example code, merely provide the included \l{QML Viewer}{qmlviewer} - tool with the QML file as the argument. The C++ portion of this tutorial assumes - that the reader possesses basic knowledge of Qt's compilation procedures. - - Tutorial chapters: - \list 1 - \o \l {Defining a Button and a Menu}{Defining a Button and a Menu} - \o \l {Implementing a Menu Bar}{Implementing a Menu Bar} - \o \l {Building a Text Editor}{Building a Text Editor} - \o \l {Decorating the Text Editor}{Decorating the Text Editor} - \o \l {Extending QML using Qt C++}{Extending QML using Qt C++} - \endlist - - \section1 Defining a Button and a Menu - - \section2 Basic Component - a Button - - We start our text editor by building a button. Functionally, a button has a mouse - sensitive area and a label. Buttons perform actions when a user presses the button. - - In QML, the basic visual item is the \l {Rectangle}{Rectangle} element. The - \c Rectangle element has properties to control the element's appearance and location. - - \code - import Qt 4.7 - Rectangle { - id: simplebutton - color: "grey" - width: 150; height: 75 - - Text{ - id: buttonLabel - anchors.centerIn: parent - text: "button label" - } - } - \endcode - - First, the \c { import Qt 4.7 } allows the qmlviewer tool to import the QML elements - we will later use. This line must exist for every QML file. Notice that the version - of Qt modules is included in the import statement. - - This simple rectangle has a unique identifier, \c simplebutton, which is bound to the - id property. The \c Rectangle element's properties are bound to values by listing the - property, followed by a colon, then the value. In the code sample, the color \c grey - is bound to the the Rectangle's \c color property. Similarly, we bind the \c width - and \c height of the Rectangle. - - The \l {Text}{Text} element is a non-editable text field. We name this \c Text element - \c buttonLabel. To set the string content of the Text field, we bind a value to the - \c text property. The label is contained within the Rectangle and in order to center - it in the middle, we assign the \c anchors of the Text element to its parent, which - is called \c simplebutton. Anchors may bind to other items' anchors, allowing layout - assignments simpler. - - We shall save this code as \c SimpleButton.qml. Running qmlviewer with the file as the - argument will display the grey rectangle with a text label. - - \image qml-texteditor1_simplebutton.png - - To implement the button click functionality, we can use QML's event handling. QML's event - handling is very similar to \l {Signals & Slots}{Qt's signal and slot} mechanism. Signals - are emitted and the connected slot is called. - - \code - Rectangle{ - id:simplebutton - ... - - MouseArea{ - id: buttonMouseArea - - anchors.fill: parent //anchor all sides of the mouse area to the rectangle's anchors - //onClicked handles valid mouse button clicks - onClicked: console.log(buttonLabel.text + " clicked" ) - } - } - \endcode - - We include a \l{MouseArea} element in our simplebutton. \c MouseArea elements describe - the interactive area where mouse movements are detected. For our button, we anchor the - whole MouseArea to its parent, which is \c simplebutton. The \c anchors.fill syntax is - one way of accessing a specific property called \c fill inside a group of properties - called \c anchors. QML uses \l {Anchor-based Layout in QML}{anchor based layouts} where - items can anchor to another item, creating robust layouts. - - The \c MouseArea has many signal handlers that are called during mouse movements within - the specfied \c MouseArea boundaries. One of them is \c onClicked and it is called - whenever the acceptable mouse button is clicked, the left click being the default. We - can bind actions to the onClicked handler. In our example, \c console.log() outputs text - whenever the mouse area is clicked. The function \c console.log() is a useful tool for - debugging purposes and for outputting text. - - The code in \c SimpleButton.qml is sufficient to display a button on the screen and - output text whenever it is clicked with a mouse. - - \code - Rectangle { - id:Button - ... - - property color buttonColor: "lightblue" - property color onHoverColor: "gold" - property color borderColor: "white" - - signal buttonClick() - onButtonClick: { - console.log(buttonLabel.text + " clicked" ) - } - - MouseArea{ - onClicked: buttonClick() - hoverEnabled: true - onEntered: parent.border.color = onHoverColor - onExited: parent.border.color = borderColor - } - - //determines the color of the button by using the conditional operator - color: buttonMouseArea.pressed ? Qt.darker(buttonColor, 1.5) : buttonColor - } - \endcode - - A fully functioning button is in \c Button.qml. The code snippets in this article - have some code omitted, denoted by ellipses because they were either introduced - earlier in the previous sections or irrelevant to the current code discussion. - - Custom properties are declared using the \c {property type name} syntax. In the - code, the property \c buttonColor, of type \c color, is declared and bound to - the value \c{"lightblue"}. The \c buttonColor is later used in a conditional - operation to determine the buttons's fill color. Note that property value - assignment is possible using the \c= equals sign, in addition to value binding - using the \c : colon character. Custom properties allow internal items to be - accessible outside of the Rectangle's scope. There are basic - \l{QML Basic Types}{QML types} such as \c int, \c string, \c real, as well as - a type called \c variant. - - By binding the \c onEntered and \c onExited signal handlers to colors, the - button's border will turn yellow when the mouse hovers above the button and - reverts the color when the mouse exits the mouse area. - - A \c buttonClick() signal is declared in \c Button.qml by placing the \c signal - keyword in front of the signal name. All signals have their handlers automatically - created, their names starting with \c on. As a result, the \c onButtonClick is - \c buttonClick's handler. The \c onButtonClick is then assigned an action to - perform. In our button example, the \c onClicked mouse handler will simply call - \c onButtonClick, which displays a text. The \c onButtonClick enables outside - objects to access the \c {Button}'s mouse area easily. For example, items may - have more than one \c MouseArea declarations and a \c buttonClick signal can - make the distinction between the several \c MouseArea signal handlers better. - - We now have the basic knowledge to implement items in QML that can handle - basic mouse movements. We created a \c Text label inside a \c Rectangle, - customized its properties, and implemented behaviors that respond to mouse - movements. This idea of creating elements within elements is repeated - throughout the text editor application. - - This button is not useful unless used as a component to perform an action. - In the next section, we will soon create a menu containing several of these - buttons. - - \image qml-texteditor1_button.png - - \section2 Creating a Menu Page - - Up to this stage, we covered how to create elements and assign behaviors inside - a single QML file. In this section, we will cover how to import QML elements and how - to reuse some of the created components to build other components. - - Menus display the contents of a list, each item having the ability to perform an action. - In QML, we can create a menu in several ways. First, we will create a menu containing - buttons which will eventually perform different actions. The menu code is in - \c FileMenu.qml. - - \code - import Qt 4.7 \\import the main Qt QML module - import folderName \\import the contents of the folder - import Button.qml \\import a QML file - import NewButton.qml as ButtonModule \\import a QML file and give it a name - import script.js as Script \\import a Javascript file and name it as Script - \endcode - - To use the \c Button element in \c FileMenu.qml, we need to import \c Button.qml. - The syntax shown above, shows how to use the \c import keyword. However, the - \c {import Button.qml} is not necessary; qmlviewer will import all the contents - of the current directory. We can directly create a \c Button element by declaring - \c Button{}, similar to a \c Rectangle{} declaration. - - \code - In FileMenu.qml: - - Row{ - anchors.centerIn: parent - spacing: parent.width/6 - - Button{ - id: loadButton - buttonColor: "lightgrey" - label: "Load" - } - Button{ - buttonColor: "grey" - id: saveButton - label: "Save" - } - Button{ - id: exitButton - label: "Exit" - buttonColor: "darkgrey" - - onButtonClick: Qt.quit() - } - } - \endcode - - In \c FileMenu.qml, we declare three \c Button elements. They are declared - inside a \l {Row}{Row} element, a positioner that will position its children - along a vertical row. The \c Button declaration resides in Button.qml, - which is the same as the \c Button.qml we used in the previous section. - New property bindings can be declared within the newly created buttons, - effectively overwriting the properties set in \c Button.qml. The button - called \c exitButton will quit and close the window when it is clicked. - Note that the signal handler \c onButtonClick in \c Button.qml will be - called in addition to the \c onButtonClick handler in \c exitButton. - - \image qml-texteditor1_filemenu.png - - The \c Row declaration is declared in a \c Rectangle, creating a rectangle - container for the row of buttons. This additional rectangle creates an indirect - way of organizing the row of buttons inside a menu. - - The declaration of the edit menu is very similar at this stage. The menu has - buttons that have the labels: \c Copy, \c Paste, and \c {Select All}. - - \image qml-texteditor1_editmenu.png - - Armed with our knowledge of importing and customizing previously made - components, we may now combine these menu pages to create a menu bar, - consisting of buttons to select the menu, and look at how we may structure - data using QML. - - \section1 Implementing a Menu Bar - - Our text editor application will need a way to display menus using a menu bar. - The menu bar will switch the different menus and the user can choose which menu - to display. Menu switching implies that the menus need more structure than - merely displaying them in a row. QML uses models and views to structure data - and display the structured data. - - \section2 Using Data Models and Views - - QML has different \l {Data Models}{data views} that display - \l {Data Models}{data models}. Our menu bar will display the menus in a list, - with a header that displays a row of menu names. The list of menus are declared - inside a \c VisualItemModel. The \l{VisualItemModel}{\c VisualItemModel} - element contains items that already have views such as \c Rectangle elements - and imported UI elements. Other model types such as the \l{ListModel}{\c ListModel} - element need a delegate to display their data. - - We declare two visual items in the \c menuListModel, the \c FileMenu and the - \c EditMenu. We customize the two menus and display them using a - \l {ListView}{ListView}. The \c MenuBar.qml file contains the QML declarations - and a simple edit menu is defined in \c EditMenu.qml. - - \code - VisualItemModel{ - id: menuListModel - FileMenu{ - width: menuListView.width - height: menuBar.height - color: fileColor - } - EditMenu{ - color: editColor - width: menuListView.width - height: menuBar.height - } - } - \endcode - - The \l {ListView}{ListView} element will display a model according to a delegate. - The delegate may declare the model items to display in a \c Row element or display - the items in a grid. Our \c menuListModel already has visible items, therefore, - we do not need to declare a delegate. - - \code - ListView{ - id: menuListView - - //Anchors are set to react to window anchors - anchors.fill:parent - anchors.bottom: parent.bottom - width:parent.width - height: parent.height - - //the model contains the data - model: menuListModel - - //control the movement of the menu switching - snapMode: ListView.SnapOneItem - orientation: ListView.Horizontal - boundsBehavior: Flickable.StopAtBounds - flickDeceleration: 5000 - highlightFollowsCurrentItem: true - highlightMoveDuration:240 - highlightRangeMode: ListView.StrictlyEnforceRange - } - \endcode - - Additionally, \c ListView inherits from \l{Flickable}{\c Flickable}, making - the list respond to mouse drags and other gestures. The last portion of the - code above sets \c Flickable properties to create the desired flicking movement - to our view. In particular,the property \c highlightMoveDuration changes the - duration of the flick transition. A higher \c highlightMoveDuration value - results in slower menu switching. - - The \c ListView maintains the model items through an \c index and each visual - item in the model is accessible through the \c index, in the order of the - declaration. Changing the \c currentIndex effectively changes the highlighted - item in the \c ListView. The header of our menu bar exemplify this effect. - There are two buttons in a row, both changing the current menu when clicked. - The \c fileButton changes the current menu to the file menu when clicked, - the \c index being \c 0 because \c FileMenu is declared first in the - \c menuListModel. Similarly, the \c editButton will change the current - menu to the \c EditMenu when clicked. - - The \c labelList rectangle has \c z value of \c 1, denoting that it is displayed - at the front of the menu bar. Items with higher \c z values are displayed in front - of items with lower \c z values. The default \c z value is \c 0. - - \code - Rectangle{ - id: labelList - ... - z: 1 - Row{ - anchors.centerIn: parent - spacing:40 - Button{ - label: "File" - id: fileButton - ... - onButtonClick: menuListView.currentIndex = 0 - } - Button{ - id: editButton - label: "Edit" - ... - onButtonClick: menuListView.currentIndex = 1 - } - } - } - \endcode - - The menu bar we just created can be flicked to access the menus or by clicking - on the menu names at the top. Switching menu screens feel intuitive and responsive. - - \image qml-texteditor2_menubar.png - - */ - - /*! - \page qml-textEditor3.html - \title Building a Text Editor - - \section1 Declaring a TextArea - - Our text editor is not a text editor if it didn't contain an editable text area. - QML's \l {TextEdit}{TextEdit} element allows the declaration of a multi-line - editable text area. \l {TextEdit}{TextEdit} is different from a \l {Text}{Text} - element, which doesn't allow the user to directly edit the text. - - \code - TextEdit{ - id: textEditor - anchors.fill:parent - width:parent.width; height:parent.height - color:"midnightblue" - focus: true - - wrapMode: TextEdit.Wrap - - onCursorRectangleChanged: flickArea.ensureVisible(cursorRectangle) - } - \endcode - - The editor has its font color property set and set to wrap the text. The - \c TextEdit area is inside a flickable area that will scroll the text if the - text cursor is outside the visible area. The function \c ensureVisible() will - check if the cursor rectangle is outside the visible boundaries and move the - text area accordingly. QML uses Javascript syntax for its scripts, and as previously - mentioned, Javascript files can be imported and used within a QML file. - - \code - function ensureVisible(r){ - if (contentX >= r.x) - contentX = r.x; - else if (contentX+width <= r.x+r.width) - contentX = r.x+r.width-width; - if (contentY >= r.y) - contentY = r.y; - else if (contentY+height <= r.y+r.height) - contentY = r.y+r.height-height; - } - \endcode - - \section1 Combining Components for the Text Editor - - We are now ready to create the layout of our text editor using QML. The text - editor has two components, the menu bar we created and the text area. QML allows - us to reuse components, therefore making our code simpler, by importing components - and customizing when necessary. Our text editor splits the window into two; - one-third of the screen is dedicated to the menu bar and two-thirds of the screen - displays the text area. The menu bar is displayed in front of any other elements. - - \code - Rectangle{ - - id: screen - width: 1000; height: 1000 - - //the screen is partitioned into the MenuBar and TextArea. 1/3 of the screen is assigned to the MenuBar - property int partition: height/3 - - MenuBar{ - id:menuBar - height: partition - width:parent.width - z: 1 - } - - TextArea{ - id:textArea - anchors.bottom:parent.bottom - y: partition - color: "white" - height: partition*2 - width:parent.width - } - } - \endcode - - By importing reusable components, our \c TextEditor code looks much simpler. - We can then customize the main application, without worrying about properties - that already have defined behaviors. Using this approach, application layouts - and UI components can be created easily. - - \image qml-texteditor3_texteditor.png - - */ - - /*! - \page qml-textEditor4 - \title Decorating the Text Editor - \section1 Implementing a Drawer Interface - - Our text editor looks simple and we need to decorate it. Using QML, we can declare - transitions and animate our text editor. Our menu bar is occupying one-third of the - screen and it would be nice to have it only appear when we want it. - - We can add a drawer interface, that will contract or expand the menu bar when clicked. - In our implementation, we have a thin rectangle that responds to mouse clicks. The - \c drawer, as well as the application, has two sates: the "drawer is open" state and - the "drawer is closed" state. The \c drawer item is a strip of rectangle with a small - height. There is a nested \l {Image}{Image} element declaring that an arrow icon will - be centered inside the drawer. The drawer assigns a state to the whole application, - with the identifier \c screen, whenever a user clicks the mouse area. - - \code - Rectangle{ - id:drawer - height:15 - - Image{ - id: arrowIcon - source: "images/arrow.png" - anchors.horizontalCenter: parent.horizontalCenter - } - - MouseArea{ - id: drawerMouseArea - anchors.fill:parent - onClicked:{ - if (screen.state == "DRAWER_CLOSED"){ - screen.state = "DRAWER_OPEN" - } - else if (screen.state == "DRAWER_OPEN"){ - screen.state = "DRAWER_CLOSED" - } - } - ... - } - } - \endcode - - A state is simply a collection of configurations and it is declared in a - \l{State}{State} element. A list of states can be listed and bound to the - \c states property. In our application, the two states are called - \c DRAWER_CLOSED and \c DRAWER_OPEN. Item configurations are declared in - \l {PropertyChanges}{PropertyChanges} elements. In the \c DRAWER_OPEN state, - there are four items that will receive property changes. The first target, - \c menuBar, will change its \c y property to \c 0. Similarly, the \c textArea - will lower to a new position when the state is \c DRAWER_OPEN. The \c textArea, - the \c drawer, and the drawer's icon will undergo property changes to meet the - current state. - - \code - - states:[ - State{ - name: "DRAWER_OPEN" - PropertyChanges { target: menuBar; y:0} - PropertyChanges { target: textArea; y: partition + drawer.height} - PropertyChanges { target: drawer; y: partition} - PropertyChanges { target: arrowIcon; rotation: 180} - }, - State{ - name: "DRAWER_CLOSED" - PropertyChanges { target: menuBar; y:-partition} - PropertyChanges { target: textArea; y: drawer.height; height: screen.height - drawer.height} - PropertyChanges { target: drawer; y: 0} - PropertyChanges { target: arrowIcon; rotation: 0} - } - - ] - - \endcode - - State changes are abrupt and needs smoother transitions. Transitions between states - are defined using the \l {Transition}{Transition} element, which can then bind to - the item's \c transitions property. Our text editor has a state transition whenever - the state changes to either \c DRAWER_OPEN or \c DRAWER_CLOSED. Importantly, the - transition needs a \c from and a \c to state but for our transitions, we can use - the wild card \c * symbol to denote that the transition applies to all state changes. - - During transitions, we can assign animations to the property changes. Our - \c menuBar switches position from \c {y:0} to \c {y:-partition} and we can animate - this transition using the \l {NumberAnimation}{NumberAnimation} element. We declare - that the targets' properties will animate for a certain duration of time and using - a certain easing curve. An easing curve controls the animation rates and - interpolation behavior during state transitions. The easing curve we chose is - \l{PropertyAnimation::easing.type}{Easing.OutQuint}, which slows the movement near - the end of the animation. Pleae read \l {qdeclarativeanimation.html}{QML's Animation} - article. - - \code - transitions: [ - Transition{ - to: "*" - NumberAnimation { target: textArea; properties: "y, height"; duration: 100; easing.type: Easing.OutQuint } - NumberAnimation { target: menuBar; properties: "y"; duration: 100;easing.type: Easing.OutQuint } - NumberAnimation { target: drawer; properties: "y"; duration: 100;easing.type: Easing.OutQuint } - } - ] - \endcode - - Another way of animating property changes is by declaring a \l {Behavior}{Behavior} - element. A transition only works during state changes and \c Behavior can set an - animation for a general property change. In the text editor, the arrow has a - \c NumberAnimation animating its \c rotation property whenever the property changes. - - \code - In TextEditor.qml: - - Behavior{ - NumberAnimation{property: "rotation";easing.type: Easing.OutExpo } - } - \endcode - - Going back to our components with knowledge of states and animations, we can improve - the appearances of the components. In \c Button.qml, we can add \c color and \c scale - property changes when the button is clicked. Color types are animated using - \l {ColorAnimation}{ColorAnimation} and numbers are animated using - \l {NumberAnimation}{NumberAnimation}. The \c {on propertyName} syntax displayed below - is helpful when targeting a single property. - - \code - In Button.qml: - ... - - color: buttonMouseArea.pressed ? Qt.darker(buttonColor, 1.5) : buttonColor - Behavior on color { ColorAnimation{ duration: 55} } - - scale: buttonMouseArea.pressed ? 1.1 : 1.00 - Behavior on scale { NumberAnimation{ duration: 55} } - \endcode - - Additionally, we can enhance the appearances of our QML components by adding color - effects such as gradients and opacity effects. Declaring a \l {Gradient}{Gradient} - element will override the \c color property of the element. You may declare a color - in the gradient using the \l {GradientStop}{GradientStop} element. The gradient is - positioned using a scale, between \c 0.0 and \c 1.0. - - \code - In MenuBar.qml - gradient: Gradient { - GradientStop { position: 0.0; color: "#8C8F8C" } - GradientStop { position: 0.17; color: "#6A6D6A" } - GradientStop { position: 0.98;color: "#3F3F3F" } - GradientStop { position: 1.0; color: "#0e1B20" } - } - \endcode - - This gradient is used by the menu bar to display a gradient simulating depth. - The first color starts at \c 0.0 and the last color is at \c 1.0. - - - \section2 Where to Go from Here - - We are finished building the user interface of a very simple text editor. - Going forward, the user interface is complete, and we can implement the - application logic using regular Qt and C++. QML works nicely as a prototyping - tool, separating the application logic away from the UI design. - - \image qml-texteditor4_texteditor.png - - \section1 Extending QML using Qt C++ - - Now that we have our text editor layout, we may now implement the text editor - functionalities in C++. Using QML with C++ enables us to create our application - logic using Qt. We can create a QML context in a C++ application using the - \l {Using QML in C++ Applications}{Qt's Declarative} classes and display the QML - elements using a Graphics Scene. Alternatively, we can export our C++ code into - a plugin that the \l {QML Viewer}{qmlviewer} tool can read. For our application, - we shall implement the load and save functions in C++ and export it as a plugin. - This way, we only need to load the QML file directly instead of running an executable. - - \section2 Exposing C++ Classes to QML - - We will be implementing file loading and saving using Qt and C++. C++ classes - and functions can be used in QML by registering them. The class also needs to be - compiled as a Qt plugin and the QML file will need to know where the plugin is located. - - For our application, we need to create the following items: - \list 1 - \o \c Directory class that will handle directory related operations - \o \c File class which is a QObject, simulating the list of files in a directory - \o plugin class that will register the class to the QML context - \o Qt project file that will compile the plugin - \o A \c qmldir file telling the qmlviewer tool where to find the plugin - \endlist - - \section2 Building a Qt Plugin - - To build a plugin, we need to set the following in a Qt project file. First, - the necessary sources, headers, and Qt modules need to be added into our - project file. All the C++ code and project files are in the \c filedialog - directory. - - \code - In cppPlugins.pro: - - TEMPLATE = lib - CONFIG += qt plugin - QT += declarative - - DESTDIR += ../plugins - OBJECTS_DIR = tmp - MOC_DIR = tmp - - TARGET = FileDialog - - HEADERS += directory.h \ - file.h \ - dialogPlugin.h - - SOURCES += directory.cpp \ - file.cpp \ - dialogPlugin.cpp - \endcode - - In particular, we compile Qt with the \c declarative module and configure it as a - \c plugin, needing a \c lib template. We shall put the compiled plugin into the - parent's \c plugins directory. - - - \section2 Registering a Class into QML - - \code - In dialogPlugin.h: - - #include - - class DialogPlugin : public QDeclarativeExtensionPlugin - { - Q_OBJECT - - public: - void registerTypes(const char *uri); - - }; - - \endcode - Our plugin class, \c DialogPlugin is a subclass of \l {QDeclarativeExtensionPlugin}{QDeclarativeExtensionPlugin}. We need to implement the inherited function, \l {QDeclarativeExtensionPlugin::registerTypes}{registerTypes}. The \c dialogPlugin.cpp file looks like this: - - \code - DialogPlugin.cpp: - - #include "dialogPlugin.h" - #include "directory.h" - #include "file.h" - #include - - void DialogPlugin::registerTypes(const char *uri){ - - qmlRegisterType(uri, 1, 0, "Directory"); - qmlRegisterType(uri, 1, 0,"File"); - } - - Q_EXPORT_PLUGIN2(FileDialog, DialogPlugin); - \endcode - - The \l {QDeclarativeExtensionPlugin::registerTypes}{registerTypes} - function registers our File and Directory classes into QML. This function - needs the class name for its template, a major version number, a minor version - number, and a name for our classes. - - We need to export the plugin using the \l {Q_EXPORT_PLUGIN2}{Q_EXPORT_PLUGIN2} - macro. Note that in our \c dialogPlugin.h file, we have the \l {Q_OBJECT}{Q_OBJECT} - macro at the top of our class. As well, we need to run \c qmake on the project - file to generate the necessary meta-object code. - - - \section2 Creating QML Properties in a C++ class - - We can create QML elements and properties using C++ and - \l {The Meta-Object System}{Qt's Meta-Object System}. We can implement - properties using slots and signals, making Qt aware of these properties. - These properties can then be used in QML. - - For the text editor, we need to be able to load and save files. Typically, - these features are contained in a file dialog. Fortunately, we can use - \l {QDir}{QDir}, \l {QFile}{QFile}, and \l {QTextStream}{QTextStream} to - implement directory reading and input/output streams. - - \code - class Directory : public QObject{ - - Q_OBJECT - - Q_PROPERTY(int filesCount READ filesCount CONSTANT) - Q_PROPERTY(QString filename READ filename WRITE setFilename NOTIFY filenameChanged) - Q_PROPERTY(QString fileContent READ fileContent WRITE setFileContent NOTIFY fileContentChanged) - Q_PROPERTY(QDeclarativeListProperty files READ files CONSTANT ) - - ... - \endcode - - The \c Directory class uses Qt's Meta-Object System to register properties it - needs to accomplish file handling. The \c Directory class is exported as a plugin - and is useable in QML as the \c Directory element. Each of the listed properties - using the \l {Q_PROPERTY()}{Q_PROPERTY} macro is a QML property. - - The \l {Q_PROPERTY()} {Q_PROPERTY} declares a property as well as its read and - write functions into Qt's Meta-Object System. For example, the \c filename - property, of type \l {QString}{QString}, is readable using the \c filename() - function and writable using the function \c setFilename(). Additionally, there - is a signal associated to the filename property called \c filenameChanged(), - which is emitted whenever the property changes. The read and write functions - are declared as \c public in the header file. - - Similarly, we have the other properties declared according to their uses. The - \c filesCount property indicates the number of files in a directory. The filename - property is set to the currently selected file's name and the loaded/saved file - content is stored in \c fileContent property. - - \code - Q_PROPERTY(QDeclarativeListProperty files READ files CONSTANT ) - \endcode - - The \c files list property is a list of all the filtered files in a directory. - The \c Directory class is implemented to filter out invalid text files; only - files with a \c .txt extension are valid. Further, \l {QLists}{QLists} can be - used in QML files by declaring them as a \c QDeclarativeListProperty in C++. - The templated object needs to inherit from a \l {QObject}{QObject}, therefore, - the \c File class must also inherit from \c QObject. In the \c Directory class, - the list of \c File objects is stored in a \c QList called \c m_fileList. - - \code - class File : public QObject{ - - Q_OBJECT - Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) - - ... - }; - \endcode - - The properties can then be used in QML as part of the \c Directory element's - properties. Note that we do not have to create an identifier \c id property - in our C++ code. - - \code - Directory{ - id: directory - - filesCount - filename - fileContent - files - - files[0].name - } - - \endcode - - Because QML uses Javascript's syntax and structure, we can iterate through - the list of files and retrieve its properties. To retrieve the first file's - name property, we can call \c { files[0].name }. - - Regular C++ functions are also accessible from QML. The file loading and saving - functions are implemented in C++ and declared using the - \l {Q_INVOKABLE}{Q_INVOKABLE} macro. Alternatively, we can declare the functions - as a \c slot and the functions will be accessible from QML. - - \code - In Directory.h: - - Q_INVOKABLE void saveFile(); - Q_INVOKABLE void loadFile(); - \endcode - - The \c Directory class also has to notify other objects whenever the directory - contents change. This feature is performed using a \c signal. As previously - mentioned, QML signals have a corresponding handler with their names prepended - with \c on. The signal is called \c directoryChanged and it is emitted whenever - there is a directory refresh. The refresh simply reloads the directory contents - and updates the list of valid files in the directory. QML items can then be - notified by attaching an action to the \c onDirectoryChanged signal handler. - - The \c list properties need to be explored further. This is because list - properties use callbacks to access and modify the list contents. The list - property is of type \c QDeclarativeListProperty. Whenever the list - is accessed, the accessor function needs to return a - \c QDeclarativeListProperty. The template type, \c File, needs to be a - \c QObject derivative. Further, to create the - \l {QDeclarativeListProperty}{QDeclarativeListProperty}, the list's accessor - and modifiers need to be passed to the consructor as function pointers. The list, - a \c QList in our case, also needs to be a list of \c File pointers. - - The constructor of \l {QDeclarativeListProperty}{QDeclarativeListProperty} - constructor and the \c Directory implementation: - \code - QDeclarativeListProperty ( QObject * object, void * data, AppendFunction append, CountFunction count = 0, AtFunction at = 0, ClearFunction clear = 0 ) - QDeclarativeListProperty( this, &m_fileList, &appendFiles, &filesSize, &fileAt, &clearFilesPtr ); - \endcode - - The constructor passes pointers to functions that will append the list, count - the list, retrieve the item using an index, and empty the list. Only the append - function is mandatory. Note that the function pointers must match the definition - of \l {QDeclarativeListProperty::AppendFunction}{AppendFunction}, - \l {QDeclarativeListProperty::CountFunction}{CountFunction}, - \l {QDeclarativeListProperty::AtFunction}{AtFunction}, or - \l {QDeclarativeListProperty::ClearFunction}{ClearFunction}. - - \code - void appendFiles(QDeclarativeListProperty * property, File * file) - File* fileAt(QDeclarativeListProperty * property, int index) - int filesSize(QDeclarativeListProperty * property) - void clearFilesPtr(QDeclarativeListProperty *property) - \endcode - - To simplify our file dialog, the \c Directory class filters out invalid text - files, which are files that do not have a \c .txt extension. If a file name - doesn't have the \c .txt extension, then it won't be seen in our file dialog. - Also, the implementation makes sure that saved files have a \c .txt extension in - the file name. \c Directory uses \l {QTextStream}{QTextStream} to read the file - and to output the file contents to a file. - - With our \c Directory element, we can retrieve the files as a list, know how many - text files is in the application directory, get the file's name and content as a - string, and be notified whenever there are changes in the directory contents. - - To build the plugin, run \c qmake on the \c cppPlugins.pro project file, then run - \c make to build and transfer the plugin to the \c plugins directory. - - - \section2 Importing a Plugin in QML - - The qmlviewer tool imports files that are in the same directory as the - application. We can also create a \c qmldir file containing the locations of - QML files we wish to import. The \c qmldir file can also store locations of - plugins and other resources. - - \code - In qmldir: - - Button ./Button.qml - FileDialog ./FileDialog.qml - TextArea ./TextArea.qml - TextEditor ./TextEditor.qml - EditMenu ./EditMenu.qml - - plugin FileDialog plugins - \endcode - - The plugin we just created is called \c FileDialog, as indicated by the - \c TARGET field in the project file. The compiled plugin is in the \c plugins directory. - - - \section2 Integrating a File Dialog into the File Menu - - Our \c FileMenu needs to display the \c FileDialog element, containing a list of - the text files in a directory thus allowing the user to select the file by - clicking on the list. We also need to assign the save, load, and new buttons - to their respective actions. The FileMenu contains an editable text input to - allow the user to type a file name using the keyboard. - - The \c Directory element is used in the \c FileMenu.qml file and it notifies the - \c FileDialog element that the directory refreshed its contents. This notification - is performed in the signal handler, \c onDirectoryChanged. - - \code - In FileMenu.qml: - - Directory{ - id:directory - filename: textInput.text - onDirectoryChanged: fileDialog.notifyRefresh() - } - \endcode - - Keeping with the simplicity of our application, the file dialog will always be - visible and will not display invalid text files, which do not have a \c .txt - extension to their filenames. - - \code - In FileDialog.qml: - - signal notifyRefresh() - onNotifyRefresh: dirView.model = directory.files - \endcode - - The \c FileDialog element will display the contents of a directory by reading its - list property called \c files. The files are used as the model of a - \l {GridView}{GridView} element, which displays data items in a grid according - to a delegate. The delegate handles the appearance of the model and our file - dialog will simply create a grid with text centered in the middle. Clicking on - the file name will result in the appearance of a rectangle to highlight the file - name. The \c FileDialog is notified whenever the \c notifyRefresh signal is emitted, - reloading the files in the directory. - - \code - In FileMenu.qml: - - Button{ - id: newButton - label: "New" - onButtonClick:{ - textArea.textContent = "" - } - } - Button{ - id: loadButton - label: "Load" - onButtonClick:{ - directory.filename = textInput.text - directory.loadFile() - textArea.textContent = directory.fileContent - } - } - Button{ - id: saveButton - label: "Save" - onButtonClick:{ - directory.fileContent = textArea.textContent - directory.filename = textInput.text - directory.saveFile() - } - } - Button{ - id: exitButton - label: "Exit" - onButtonClick:{ - Qt.quit() - } - } - \endcode - - Our \c FileMenu can now connect to their respective actions. The \c saveButton - will transfer the text from the \c TextEdit onto the directory's \c fileContent - property, then copy its file name from the editable text input. Finally, the button - calls the \c saveFile() function, saving the file. The \c sloadButton has a similar - execution. Also, the \c New action will empty the contents of the \c TextEdit. - - Further, the \c EditMenu buttons are connected to the \c TextEdit functions to copy, - paste, and select all the text in the text editor. - - \image qml-texteditor5_filemenu.png - - \section1 Text Editor Completion - - \image qml-texteditor5_newfile.png - - The application can function as a simple text editor, able to accept text - and save the text into a file. The text editor can also load from a file and - perform text manipulation. - - -*/ \ No newline at end of file + \page gettingstartedqml.html + \title Getting Started Programming with QML + \ingroup gettingStarted + + Welcome to the world of QML, the declarative UI language. In this Getting + Started guide, we will create a simple text editor application using QML. + After reading this guide, you should be ready to develop your own applications + using QML and Qt C++. + + \section1 QML to Build User Interfaces + + The application we are building is a simple text editor that will load, save, + and perform some text manipulation. This guide will consist of two parts. The + first part will involve designing the application layout and behaviors using + declarative language in QML. For the second part, file loading and saving will + be implemented using Qt C++. Using + \l {The Meta-Object System}{Qt's Meta-Object System}, we can expose C++ functions + as properties that QML elements can use. Utilizing QML and Qt C++, we can + efficiently decouple the interface logic from the application logic. + + \image qml-texteditor5_editmenu.png + + To run the QML example code, merely provide the included \l{QML Viewer}{qmlviewer} + tool with the QML file as the argument. The C++ portion of this tutorial assumes + that the reader possesses basic knowledge of Qt's compilation procedures. + + Tutorial chapters: + \list 1 + \o \l {Defining a Button and a Menu}{Defining a Button and a Menu} + \o \l {Implementing a Menu Bar}{Implementing a Menu Bar} + \o \l {Building a Text Editor}{Building a Text Editor} + \o \l {Decorating the Text Editor}{Decorating the Text Editor} + \o \l {Extending QML using Qt C++}{Extending QML using Qt C++} + \endlist + + \section1 Defining a Button and a Menu + + \section2 Basic Component - a Button + + We start our text editor by building a button. Functionally, a button has a mouse + sensitive area and a label. Buttons perform actions when a user presses the button. + + In QML, the basic visual item is the \l {Rectangle}{Rectangle} element. The + \c Rectangle element has properties to control the element's appearance and location. + + \code + import Qt 4.7 + Rectangle { + id: simplebutton + color: "grey" + width: 150; height: 75 + + Text{ + id: buttonLabel + anchors.centerIn: parent + text: "button label" + } + } + \endcode + + First, the \c { import Qt 4.7 } allows the qmlviewer tool to import the QML elements + we will later use. This line must exist for every QML file. Notice that the version + of Qt modules is included in the import statement. + + This simple rectangle has a unique identifier, \c simplebutton, which is bound to the + id property. The \c Rectangle element's properties are bound to values by listing the + property, followed by a colon, then the value. In the code sample, the color \c grey + is bound to the the Rectangle's \c color property. Similarly, we bind the \c width + and \c height of the Rectangle. + + The \l {Text}{Text} element is a non-editable text field. We name this \c Text element + \c buttonLabel. To set the string content of the Text field, we bind a value to the + \c text property. The label is contained within the Rectangle and in order to center + it in the middle, we assign the \c anchors of the Text element to its parent, which + is called \c simplebutton. Anchors may bind to other items' anchors, allowing layout + assignments simpler. + + We shall save this code as \c SimpleButton.qml. Running qmlviewer with the file as the + argument will display the grey rectangle with a text label. + + \image qml-texteditor1_simplebutton.png + + To implement the button click functionality, we can use QML's event handling. QML's event + handling is very similar to \l {Signals & Slots}{Qt's signal and slot} mechanism. Signals + are emitted and the connected slot is called. + + \code + Rectangle{ + id:simplebutton + ... + + MouseArea{ + id: buttonMouseArea + + anchors.fill: parent //anchor all sides of the mouse area to the rectangle's anchors + //onClicked handles valid mouse button clicks + onClicked: console.log(buttonLabel.text + " clicked" ) + } + } + \endcode + + We include a \l{MouseArea} element in our simplebutton. \c MouseArea elements describe + the interactive area where mouse movements are detected. For our button, we anchor the + whole MouseArea to its parent, which is \c simplebutton. The \c anchors.fill syntax is + one way of accessing a specific property called \c fill inside a group of properties + called \c anchors. QML uses \l {Anchor-based Layout in QML}{anchor based layouts} where + items can anchor to another item, creating robust layouts. + + The \c MouseArea has many signal handlers that are called during mouse movements within + the specfied \c MouseArea boundaries. One of them is \c onClicked and it is called + whenever the acceptable mouse button is clicked, the left click being the default. We + can bind actions to the onClicked handler. In our example, \c console.log() outputs text + whenever the mouse area is clicked. The function \c console.log() is a useful tool for + debugging purposes and for outputting text. + + The code in \c SimpleButton.qml is sufficient to display a button on the screen and + output text whenever it is clicked with a mouse. + + \code + Rectangle { + id:Button + ... + + property color buttonColor: "lightblue" + property color onHoverColor: "gold" + property color borderColor: "white" + + signal buttonClick() + onButtonClick: { + console.log(buttonLabel.text + " clicked" ) + } + + MouseArea{ + onClicked: buttonClick() + hoverEnabled: true + onEntered: parent.border.color = onHoverColor + onExited: parent.border.color = borderColor + } + + //determines the color of the button by using the conditional operator + color: buttonMouseArea.pressed ? Qt.darker(buttonColor, 1.5) : buttonColor + } + \endcode + + A fully functioning button is in \c Button.qml. The code snippets in this article + have some code omitted, denoted by ellipses because they were either introduced + earlier in the previous sections or irrelevant to the current code discussion. + + Custom properties are declared using the \c {property type name} syntax. In the + code, the property \c buttonColor, of type \c color, is declared and bound to + the value \c{"lightblue"}. The \c buttonColor is later used in a conditional + operation to determine the buttons's fill color. Note that property value + assignment is possible using the \c= equals sign, in addition to value binding + using the \c : colon character. Custom properties allow internal items to be + accessible outside of the Rectangle's scope. There are basic + \l{QML Basic Types}{QML types} such as \c int, \c string, \c real, as well as + a type called \c variant. + + By binding the \c onEntered and \c onExited signal handlers to colors, the + button's border will turn yellow when the mouse hovers above the button and + reverts the color when the mouse exits the mouse area. + + A \c buttonClick() signal is declared in \c Button.qml by placing the \c signal + keyword in front of the signal name. All signals have their handlers automatically + created, their names starting with \c on. As a result, the \c onButtonClick is + \c buttonClick's handler. The \c onButtonClick is then assigned an action to + perform. In our button example, the \c onClicked mouse handler will simply call + \c onButtonClick, which displays a text. The \c onButtonClick enables outside + objects to access the \c {Button}'s mouse area easily. For example, items may + have more than one \c MouseArea declarations and a \c buttonClick signal can + make the distinction between the several \c MouseArea signal handlers better. + + We now have the basic knowledge to implement items in QML that can handle + basic mouse movements. We created a \c Text label inside a \c Rectangle, + customized its properties, and implemented behaviors that respond to mouse + movements. This idea of creating elements within elements is repeated + throughout the text editor application. + + This button is not useful unless used as a component to perform an action. + In the next section, we will soon create a menu containing several of these + buttons. + + \image qml-texteditor1_button.png + + \section2 Creating a Menu Page + + Up to this stage, we covered how to create elements and assign behaviors inside + a single QML file. In this section, we will cover how to import QML elements and how + to reuse some of the created components to build other components. + + Menus display the contents of a list, each item having the ability to perform an action. + In QML, we can create a menu in several ways. First, we will create a menu containing + buttons which will eventually perform different actions. The menu code is in + \c FileMenu.qml. + + \code + import Qt 4.7 \\import the main Qt QML module + import "folderName" \\import the contents of the folder + import "Button.qml" \\import a QML file + import "NewButton.qml" as ButtonModule \\import a QML file and give it a name + import "script.js" as Script \\import a Javascript file and name it as Script + \endcode + + To use the \c Button element in \c FileMenu.qml, we need to import \c Button.qml. + The syntax shown above, shows how to use the \c import keyword. However, the + \c {import Button.qml} is not necessary; qmlviewer will import all the contents + of the current directory. We can directly create a \c Button element by declaring + \c Button{}, similar to a \c Rectangle{} declaration. + + \code + In FileMenu.qml: + + Row{ + anchors.centerIn: parent + spacing: parent.width/6 + + Button{ + id: loadButton + buttonColor: "lightgrey" + label: "Load" + } + Button{ + buttonColor: "grey" + id: saveButton + label: "Save" + } + Button{ + id: exitButton + label: "Exit" + buttonColor: "darkgrey" + + onButtonClick: Qt.quit() + } + } + \endcode + + In \c FileMenu.qml, we declare three \c Button elements. They are declared + inside a \l {Row}{Row} element, a positioner that will position its children + along a vertical row. The \c Button declaration resides in Button.qml, + which is the same as the \c Button.qml we used in the previous section. + New property bindings can be declared within the newly created buttons, + effectively overwriting the properties set in \c Button.qml. The button + called \c exitButton will quit and close the window when it is clicked. + Note that the signal handler \c onButtonClick in \c Button.qml will be + called in addition to the \c onButtonClick handler in \c exitButton. + + \image qml-texteditor1_filemenu.png + + The \c Row declaration is declared in a \c Rectangle, creating a rectangle + container for the row of buttons. This additional rectangle creates an indirect + way of organizing the row of buttons inside a menu. + + The declaration of the edit menu is very similar at this stage. The menu has + buttons that have the labels: \c Copy, \c Paste, and \c {Select All}. + + \image qml-texteditor1_editmenu.png + + Armed with our knowledge of importing and customizing previously made + components, we may now combine these menu pages to create a menu bar, + consisting of buttons to select the menu, and look at how we may structure + data using QML. + + \section1 Implementing a Menu Bar + + Our text editor application will need a way to display menus using a menu bar. + The menu bar will switch the different menus and the user can choose which menu + to display. Menu switching implies that the menus need more structure than + merely displaying them in a row. QML uses models and views to structure data + and display the structured data. + + \section2 Using Data Models and Views + + QML has different \l {Data Models}{data views} that display + \l {Data Models}{data models}. Our menu bar will display the menus in a list, + with a header that displays a row of menu names. The list of menus are declared + inside a \c VisualItemModel. The \l{VisualItemModel}{\c VisualItemModel} + element contains items that already have views such as \c Rectangle elements + and imported UI elements. Other model types such as the \l{ListModel}{\c ListModel} + element need a delegate to display their data. + + We declare two visual items in the \c menuListModel, the \c FileMenu and the + \c EditMenu. We customize the two menus and display them using a + \l {ListView}{ListView}. The \c MenuBar.qml file contains the QML declarations + and a simple edit menu is defined in \c EditMenu.qml. + + \code + VisualItemModel{ + id: menuListModel + FileMenu{ + width: menuListView.width + height: menuBar.height + color: fileColor + } + EditMenu{ + color: editColor + width: menuListView.width + height: menuBar.height + } + } + \endcode + + The \l {ListView}{ListView} element will display a model according to a delegate. + The delegate may declare the model items to display in a \c Row element or display + the items in a grid. Our \c menuListModel already has visible items, therefore, + we do not need to declare a delegate. + + \code + ListView{ + id: menuListView + + //Anchors are set to react to window anchors + anchors.fill:parent + anchors.bottom: parent.bottom + width:parent.width + height: parent.height + + //the model contains the data + model: menuListModel + + //control the movement of the menu switching + snapMode: ListView.SnapOneItem + orientation: ListView.Horizontal + boundsBehavior: Flickable.StopAtBounds + flickDeceleration: 5000 + highlightFollowsCurrentItem: true + highlightMoveDuration:240 + highlightRangeMode: ListView.StrictlyEnforceRange + } + \endcode + + Additionally, \c ListView inherits from \l{Flickable}{\c Flickable}, making + the list respond to mouse drags and other gestures. The last portion of the + code above sets \c Flickable properties to create the desired flicking movement + to our view. In particular,the property \c highlightMoveDuration changes the + duration of the flick transition. A higher \c highlightMoveDuration value + results in slower menu switching. + + The \c ListView maintains the model items through an \c index and each visual + item in the model is accessible through the \c index, in the order of the + declaration. Changing the \c currentIndex effectively changes the highlighted + item in the \c ListView. The header of our menu bar exemplify this effect. + There are two buttons in a row, both changing the current menu when clicked. + The \c fileButton changes the current menu to the file menu when clicked, + the \c index being \c 0 because \c FileMenu is declared first in the + \c menuListModel. Similarly, the \c editButton will change the current + menu to the \c EditMenu when clicked. + + The \c labelList rectangle has \c z value of \c 1, denoting that it is displayed + at the front of the menu bar. Items with higher \c z values are displayed in front + of items with lower \c z values. The default \c z value is \c 0. + + \code + Rectangle{ + id: labelList + ... + z: 1 + Row{ + anchors.centerIn: parent + spacing:40 + Button{ + label: "File" + id: fileButton + ... + onButtonClick: menuListView.currentIndex = 0 + } + Button{ + id: editButton + label: "Edit" + ... + onButtonClick: menuListView.currentIndex = 1 + } + } + } + \endcode + + The menu bar we just created can be flicked to access the menus or by clicking + on the menu names at the top. Switching menu screens feel intuitive and responsive. + + \image qml-texteditor2_menubar.png + + */ + + /*! + \page qml-textEditor3.html + \title Building a Text Editor + + \section1 Declaring a TextArea + + Our text editor is not a text editor if it didn't contain an editable text area. + QML's \l {TextEdit}{TextEdit} element allows the declaration of a multi-line + editable text area. \l {TextEdit}{TextEdit} is different from a \l {Text}{Text} + element, which doesn't allow the user to directly edit the text. + + \code + TextEdit{ + id: textEditor + anchors.fill:parent + width:parent.width; height:parent.height + color:"midnightblue" + focus: true + + wrapMode: TextEdit.Wrap + + onCursorRectangleChanged: flickArea.ensureVisible(cursorRectangle) + } + \endcode + + The editor has its font color property set and set to wrap the text. The + \c TextEdit area is inside a flickable area that will scroll the text if the + text cursor is outside the visible area. The function \c ensureVisible() will + check if the cursor rectangle is outside the visible boundaries and move the + text area accordingly. QML uses Javascript syntax for its scripts, and as previously + mentioned, Javascript files can be imported and used within a QML file. + + \code + function ensureVisible(r){ + if (contentX >= r.x) + contentX = r.x; + else if (contentX+width <= r.x+r.width) + contentX = r.x+r.width-width; + if (contentY >= r.y) + contentY = r.y; + else if (contentY+height <= r.y+r.height) + contentY = r.y+r.height-height; + } + \endcode + + \section1 Combining Components for the Text Editor + + We are now ready to create the layout of our text editor using QML. The text + editor has two components, the menu bar we created and the text area. QML allows + us to reuse components, therefore making our code simpler, by importing components + and customizing when necessary. Our text editor splits the window into two; + one-third of the screen is dedicated to the menu bar and two-thirds of the screen + displays the text area. The menu bar is displayed in front of any other elements. + + \code + Rectangle{ + + id: screen + width: 1000; height: 1000 + + //the screen is partitioned into the MenuBar and TextArea. 1/3 of the screen is assigned to the MenuBar + property int partition: height/3 + + MenuBar{ + id:menuBar + height: partition + width:parent.width + z: 1 + } + + TextArea{ + id:textArea + anchors.bottom:parent.bottom + y: partition + color: "white" + height: partition*2 + width:parent.width + } + } + \endcode + + By importing reusable components, our \c TextEditor code looks much simpler. + We can then customize the main application, without worrying about properties + that already have defined behaviors. Using this approach, application layouts + and UI components can be created easily. + + \image qml-texteditor3_texteditor.png + + */ + + /*! + \page qml-textEditor4 + \title Decorating the Text Editor + \section1 Implementing a Drawer Interface + + Our text editor looks simple and we need to decorate it. Using QML, we can declare + transitions and animate our text editor. Our menu bar is occupying one-third of the + screen and it would be nice to have it only appear when we want it. + + We can add a drawer interface, that will contract or expand the menu bar when clicked. + In our implementation, we have a thin rectangle that responds to mouse clicks. The + \c drawer, as well as the application, has two sates: the "drawer is open" state and + the "drawer is closed" state. The \c drawer item is a strip of rectangle with a small + height. There is a nested \l {Image}{Image} element declaring that an arrow icon will + be centered inside the drawer. The drawer assigns a state to the whole application, + with the identifier \c screen, whenever a user clicks the mouse area. + + \code + Rectangle{ + id:drawer + height:15 + + Image{ + id: arrowIcon + source: "images/arrow.png" + anchors.horizontalCenter: parent.horizontalCenter + } + + MouseArea{ + id: drawerMouseArea + anchors.fill:parent + onClicked:{ + if (screen.state == "DRAWER_CLOSED"){ + screen.state = "DRAWER_OPEN" + } + else if (screen.state == "DRAWER_OPEN"){ + screen.state = "DRAWER_CLOSED" + } + } + ... + } + } + \endcode + + A state is simply a collection of configurations and it is declared in a + \l{State}{State} element. A list of states can be listed and bound to the + \c states property. In our application, the two states are called + \c DRAWER_CLOSED and \c DRAWER_OPEN. Item configurations are declared in + \l {PropertyChanges}{PropertyChanges} elements. In the \c DRAWER_OPEN state, + there are four items that will receive property changes. The first target, + \c menuBar, will change its \c y property to \c 0. Similarly, the \c textArea + will lower to a new position when the state is \c DRAWER_OPEN. The \c textArea, + the \c drawer, and the drawer's icon will undergo property changes to meet the + current state. + + \code + + states:[ + State{ + name: "DRAWER_OPEN" + PropertyChanges { target: menuBar; y:0} + PropertyChanges { target: textArea; y: partition + drawer.height} + PropertyChanges { target: drawer; y: partition} + PropertyChanges { target: arrowIcon; rotation: 180} + }, + State{ + name: "DRAWER_CLOSED" + PropertyChanges { target: menuBar; y:-partition} + PropertyChanges { target: textArea; y: drawer.height; height: screen.height - drawer.height} + PropertyChanges { target: drawer; y: 0} + PropertyChanges { target: arrowIcon; rotation: 0} + } + + ] + + \endcode + + State changes are abrupt and needs smoother transitions. Transitions between states + are defined using the \l {Transition}{Transition} element, which can then bind to + the item's \c transitions property. Our text editor has a state transition whenever + the state changes to either \c DRAWER_OPEN or \c DRAWER_CLOSED. Importantly, the + transition needs a \c from and a \c to state but for our transitions, we can use + the wild card \c * symbol to denote that the transition applies to all state changes. + + During transitions, we can assign animations to the property changes. Our + \c menuBar switches position from \c {y:0} to \c {y:-partition} and we can animate + this transition using the \l {NumberAnimation}{NumberAnimation} element. We declare + that the targets' properties will animate for a certain duration of time and using + a certain easing curve. An easing curve controls the animation rates and + interpolation behavior during state transitions. The easing curve we chose is + \l{PropertyAnimation::easing.type}{Easing.OutQuint}, which slows the movement near + the end of the animation. Pleae read \l {qdeclarativeanimation.html}{QML's Animation} + article. + + \code + transitions: [ + Transition{ + to: "*" + NumberAnimation { target: textArea; properties: "y, height"; duration: 100; easing.type: Easing.OutQuint } + NumberAnimation { target: menuBar; properties: "y"; duration: 100;easing.type: Easing.OutQuint } + NumberAnimation { target: drawer; properties: "y"; duration: 100;easing.type: Easing.OutQuint } + } + ] + \endcode + + Another way of animating property changes is by declaring a \l {Behavior}{Behavior} + element. A transition only works during state changes and \c Behavior can set an + animation for a general property change. In the text editor, the arrow has a + \c NumberAnimation animating its \c rotation property whenever the property changes. + + \code + In TextEditor.qml: + + Behavior{ + NumberAnimation{property: "rotation";easing.type: Easing.OutExpo } + } + \endcode + + Going back to our components with knowledge of states and animations, we can improve + the appearances of the components. In \c Button.qml, we can add \c color and \c scale + property changes when the button is clicked. Color types are animated using + \l {ColorAnimation}{ColorAnimation} and numbers are animated using + \l {NumberAnimation}{NumberAnimation}. The \c {on propertyName} syntax displayed below + is helpful when targeting a single property. + + \code + In Button.qml: + ... + + color: buttonMouseArea.pressed ? Qt.darker(buttonColor, 1.5) : buttonColor + Behavior on color { ColorAnimation{ duration: 55} } + + scale: buttonMouseArea.pressed ? 1.1 : 1.00 + Behavior on scale { NumberAnimation{ duration: 55} } + \endcode + + Additionally, we can enhance the appearances of our QML components by adding color + effects such as gradients and opacity effects. Declaring a \l {Gradient}{Gradient} + element will override the \c color property of the element. You may declare a color + in the gradient using the \l {GradientStop}{GradientStop} element. The gradient is + positioned using a scale, between \c 0.0 and \c 1.0. + + \code + In MenuBar.qml + gradient: Gradient { + GradientStop { position: 0.0; color: "#8C8F8C" } + GradientStop { position: 0.17; color: "#6A6D6A" } + GradientStop { position: 0.98;color: "#3F3F3F" } + GradientStop { position: 1.0; color: "#0e1B20" } + } + \endcode + + This gradient is used by the menu bar to display a gradient simulating depth. + The first color starts at \c 0.0 and the last color is at \c 1.0. + + + \section2 Where to Go from Here + + We are finished building the user interface of a very simple text editor. + Going forward, the user interface is complete, and we can implement the + application logic using regular Qt and C++. QML works nicely as a prototyping + tool, separating the application logic away from the UI design. + + \image qml-texteditor4_texteditor.png + + \section1 Extending QML using Qt C++ + + Now that we have our text editor layout, we may now implement the text editor + functionalities in C++. Using QML with C++ enables us to create our application + logic using Qt. We can create a QML context in a C++ application using the + \l {Using QML in C++ Applications}{Qt's Declarative} classes and display the QML + elements using a Graphics Scene. Alternatively, we can export our C++ code into + a plugin that the \l {QML Viewer}{qmlviewer} tool can read. For our application, + we shall implement the load and save functions in C++ and export it as a plugin. + This way, we only need to load the QML file directly instead of running an executable. + + \section2 Exposing C++ Classes to QML + + We will be implementing file loading and saving using Qt and C++. C++ classes + and functions can be used in QML by registering them. The class also needs to be + compiled as a Qt plugin and the QML file will need to know where the plugin is located. + + For our application, we need to create the following items: + \list 1 + \o \c Directory class that will handle directory related operations + \o \c File class which is a QObject, simulating the list of files in a directory + \o plugin class that will register the class to the QML context + \o Qt project file that will compile the plugin + \o A \c qmldir file telling the qmlviewer tool where to find the plugin + \endlist + + \section2 Building a Qt Plugin + + To build a plugin, we need to set the following in a Qt project file. First, + the necessary sources, headers, and Qt modules need to be added into our + project file. All the C++ code and project files are in the \c filedialog + directory. + + \code + In cppPlugins.pro: + + TEMPLATE = lib + CONFIG += qt plugin + QT += declarative + + DESTDIR += ../plugins + OBJECTS_DIR = tmp + MOC_DIR = tmp + + TARGET = FileDialog + + HEADERS += directory.h \ + file.h \ + dialogPlugin.h + + SOURCES += directory.cpp \ + file.cpp \ + dialogPlugin.cpp + \endcode + + In particular, we compile Qt with the \c declarative module and configure it as a + \c plugin, needing a \c lib template. We shall put the compiled plugin into the + parent's \c plugins directory. + + + \section2 Registering a Class into QML + + \code + In dialogPlugin.h: + + #include + + class DialogPlugin : public QDeclarativeExtensionPlugin + { + Q_OBJECT + + public: + void registerTypes(const char *uri); + + }; + + \endcode + + Our plugin class, \c DialogPlugin is a subclass of \l{QDeclarativeExtensionPlugin}. + We need to implement the inherited function, \l {QDeclarativeExtensionPlugin::}{registerTypes()}. + The \c dialogPlugin.cpp file looks like this: + + \code + DialogPlugin.cpp: + + #include "dialogPlugin.h" + #include "directory.h" + #include "file.h" + #include + + void DialogPlugin::registerTypes(const char *uri){ + + qmlRegisterType(uri, 1, 0, "Directory"); + qmlRegisterType(uri, 1, 0,"File"); + } + + Q_EXPORT_PLUGIN2(FileDialog, DialogPlugin); + \endcode + + The \l{QDeclarativeExtensionPlugin::}{registerTypes()} function registers + our File and Directory classes into QML. This function needs the class name + for its template, a major version number, a minor version number, and a name + for our classes. + + We need to export the plugin using the \l {Q_EXPORT_PLUGIN2}{Q_EXPORT_PLUGIN2} + macro. Note that in our \c dialogPlugin.h file, we have the \l {Q_OBJECT}{Q_OBJECT} + macro at the top of our class. As well, we need to run \c qmake on the project + file to generate the necessary meta-object code. + + + \section2 Creating QML Properties in a C++ class + + We can create QML elements and properties using C++ and + \l {The Meta-Object System}{Qt's Meta-Object System}. We can implement + properties using slots and signals, making Qt aware of these properties. + These properties can then be used in QML. + + For the text editor, we need to be able to load and save files. Typically, + these features are contained in a file dialog. Fortunately, we can use + \l {QDir}{QDir}, \l {QFile}{QFile}, and \l {QTextStream}{QTextStream} to + implement directory reading and input/output streams. + + \code + class Directory : public QObject{ + + Q_OBJECT + + Q_PROPERTY(int filesCount READ filesCount CONSTANT) + Q_PROPERTY(QString filename READ filename WRITE setFilename NOTIFY filenameChanged) + Q_PROPERTY(QString fileContent READ fileContent WRITE setFileContent NOTIFY fileContentChanged) + Q_PROPERTY(QDeclarativeListProperty files READ files CONSTANT ) + + ... + \endcode + + The \c Directory class uses Qt's Meta-Object System to register properties it + needs to accomplish file handling. The \c Directory class is exported as a plugin + and is useable in QML as the \c Directory element. Each of the listed properties + using the \l {Q_PROPERTY()}{Q_PROPERTY} macro is a QML property. + + The \l {Q_PROPERTY()} {Q_PROPERTY} declares a property as well as its read and + write functions into Qt's Meta-Object System. For example, the \c filename + property, of type \l {QString}{QString}, is readable using the \c filename() + function and writable using the function \c setFilename(). Additionally, there + is a signal associated to the filename property called \c filenameChanged(), + which is emitted whenever the property changes. The read and write functions + are declared as \c public in the header file. + + Similarly, we have the other properties declared according to their uses. The + \c filesCount property indicates the number of files in a directory. The filename + property is set to the currently selected file's name and the loaded/saved file + content is stored in \c fileContent property. + + \code + Q_PROPERTY(QDeclarativeListProperty files READ files CONSTANT ) + \endcode + + The \c files list property is a list of all the filtered files in a directory. + The \c Directory class is implemented to filter out invalid text files; only + files with a \c .txt extension are valid. Further, \l {QLists}{QLists} can be + used in QML files by declaring them as a \c QDeclarativeListProperty in C++. + The templated object needs to inherit from a \l {QObject}{QObject}, therefore, + the \c File class must also inherit from \c QObject. In the \c Directory class, + the list of \c File objects is stored in a \c QList called \c m_fileList. + + \code + class File : public QObject{ + + Q_OBJECT + Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) + + ... + }; + \endcode + + The properties can then be used in QML as part of the \c Directory element's + properties. Note that we do not have to create an identifier \c id property + in our C++ code. + + \code + Directory{ + id: directory + + filesCount + filename + fileContent + files + + files[0].name + } + + \endcode + + Because QML uses Javascript's syntax and structure, we can iterate through + the list of files and retrieve its properties. To retrieve the first file's + name property, we can call \c { files[0].name }. + + Regular C++ functions are also accessible from QML. The file loading and saving + functions are implemented in C++ and declared using the + \l {Q_INVOKABLE}{Q_INVOKABLE} macro. Alternatively, we can declare the functions + as a \c slot and the functions will be accessible from QML. + + \code + In Directory.h: + + Q_INVOKABLE void saveFile(); + Q_INVOKABLE void loadFile(); + \endcode + + The \c Directory class also has to notify other objects whenever the directory + contents change. This feature is performed using a \c signal. As previously + mentioned, QML signals have a corresponding handler with their names prepended + with \c on. The signal is called \c directoryChanged and it is emitted whenever + there is a directory refresh. The refresh simply reloads the directory contents + and updates the list of valid files in the directory. QML items can then be + notified by attaching an action to the \c onDirectoryChanged signal handler. + + The \c list properties need to be explored further. This is because list + properties use callbacks to access and modify the list contents. The list + property is of type \c QDeclarativeListProperty. Whenever the list + is accessed, the accessor function needs to return a + \c QDeclarativeListProperty. The template type, \c File, needs to be a + \c QObject derivative. Further, to create the + \l {QDeclarativeListProperty}{QDeclarativeListProperty}, the list's accessor + and modifiers need to be passed to the consructor as function pointers. The list, + a \c QList in our case, also needs to be a list of \c File pointers. + + The constructor of \l {QDeclarativeListProperty}{QDeclarativeListProperty} + constructor and the \c Directory implementation: + \code + QDeclarativeListProperty ( QObject * object, void * data, AppendFunction append, CountFunction count = 0, AtFunction at = 0, ClearFunction clear = 0 ) + QDeclarativeListProperty( this, &m_fileList, &appendFiles, &filesSize, &fileAt, &clearFilesPtr ); + \endcode + + The constructor passes pointers to functions that will append the list, count + the list, retrieve the item using an index, and empty the list. Only the append + function is mandatory. Note that the function pointers must match the definition + of \l {QDeclarativeListProperty::AppendFunction}{AppendFunction}, + \l {QDeclarativeListProperty::CountFunction}{CountFunction}, + \l {QDeclarativeListProperty::AtFunction}{AtFunction}, or + \l {QDeclarativeListProperty::ClearFunction}{ClearFunction}. + + \code + void appendFiles(QDeclarativeListProperty * property, File * file) + File* fileAt(QDeclarativeListProperty * property, int index) + int filesSize(QDeclarativeListProperty * property) + void clearFilesPtr(QDeclarativeListProperty *property) + \endcode + + To simplify our file dialog, the \c Directory class filters out invalid text + files, which are files that do not have a \c .txt extension. If a file name + doesn't have the \c .txt extension, then it won't be seen in our file dialog. + Also, the implementation makes sure that saved files have a \c .txt extension in + the file name. \c Directory uses \l {QTextStream}{QTextStream} to read the file + and to output the file contents to a file. + + With our \c Directory element, we can retrieve the files as a list, know how many + text files is in the application directory, get the file's name and content as a + string, and be notified whenever there are changes in the directory contents. + + To build the plugin, run \c qmake on the \c cppPlugins.pro project file, then run + \c make to build and transfer the plugin to the \c plugins directory. + + + \section2 Importing a Plugin in QML + + The qmlviewer tool imports files that are in the same directory as the + application. We can also create a \c qmldir file containing the locations of + QML files we wish to import. The \c qmldir file can also store locations of + plugins and other resources. + + \code + In qmldir: + + Button ./Button.qml + FileDialog ./FileDialog.qml + TextArea ./TextArea.qml + TextEditor ./TextEditor.qml + EditMenu ./EditMenu.qml + + plugin FileDialog plugins + \endcode + + The plugin we just created is called \c FileDialog, as indicated by the + \c TARGET field in the project file. The compiled plugin is in the \c plugins directory. + + + \section2 Integrating a File Dialog into the File Menu + + Our \c FileMenu needs to display the \c FileDialog element, containing a list of + the text files in a directory thus allowing the user to select the file by + clicking on the list. We also need to assign the save, load, and new buttons + to their respective actions. The FileMenu contains an editable text input to + allow the user to type a file name using the keyboard. + + The \c Directory element is used in the \c FileMenu.qml file and it notifies the + \c FileDialog element that the directory refreshed its contents. This notification + is performed in the signal handler, \c onDirectoryChanged. + + \code + In FileMenu.qml: + + Directory{ + id:directory + filename: textInput.text + onDirectoryChanged: fileDialog.notifyRefresh() + } + \endcode + + Keeping with the simplicity of our application, the file dialog will always be + visible and will not display invalid text files, which do not have a \c .txt + extension to their filenames. + + \code + In FileDialog.qml: + + signal notifyRefresh() + onNotifyRefresh: dirView.model = directory.files + \endcode + + The \c FileDialog element will display the contents of a directory by reading its + list property called \c files. The files are used as the model of a + \l {GridView}{GridView} element, which displays data items in a grid according + to a delegate. The delegate handles the appearance of the model and our file + dialog will simply create a grid with text centered in the middle. Clicking on + the file name will result in the appearance of a rectangle to highlight the file + name. The \c FileDialog is notified whenever the \c notifyRefresh signal is emitted, + reloading the files in the directory. + + \code + In FileMenu.qml: + + Button{ + id: newButton + label: "New" + onButtonClick:{ + textArea.textContent = "" + } + } + Button{ + id: loadButton + label: "Load" + onButtonClick:{ + directory.filename = textInput.text + directory.loadFile() + textArea.textContent = directory.fileContent + } + } + Button{ + id: saveButton + label: "Save" + onButtonClick:{ + directory.fileContent = textArea.textContent + directory.filename = textInput.text + directory.saveFile() + } + } + Button{ + id: exitButton + label: "Exit" + onButtonClick:{ + Qt.quit() + } + } + \endcode + + Our \c FileMenu can now connect to their respective actions. The \c saveButton + will transfer the text from the \c TextEdit onto the directory's \c fileContent + property, then copy its file name from the editable text input. Finally, the button + calls the \c saveFile() function, saving the file. The \c sloadButton has a similar + execution. Also, the \c New action will empty the contents of the \c TextEdit. + + Further, the \c EditMenu buttons are connected to the \c TextEdit functions to copy, + paste, and select all the text in the text editor. + + \image qml-texteditor5_filemenu.png + + \section1 Text Editor Completion + + \image qml-texteditor5_newfile.png + + The application can function as a simple text editor, able to accept text + and save the text into a file. The text editor can also load from a file and + perform text manipulation. +*/ diff --git a/doc/src/getting-started/gettingstartedqt.qdoc b/doc/src/getting-started/gettingstartedqt.qdoc index 1b3770f..25d0ccd 100644 --- a/doc/src/getting-started/gettingstartedqt.qdoc +++ b/doc/src/getting-started/gettingstartedqt.qdoc @@ -28,8 +28,8 @@ /*! \page gettingstartedqt.html - \title Getting Started programming with Qt - \ingroup gettingStarted + \title Getting Started Programming with Qt + \ingroup gettingStarted Welcome to the world of Qt--the cross-platform GUI toolkit. In this getting started guide, we teach basic Qt knowledge by @@ -85,7 +85,7 @@ other widgets), it is possible to show a single widget in its own window. Widgets are not visible by default; the function \l{QWidget::}{show()} makes the widget visible. - + Line 11 makes the QApplication enter its event loop. When a Qt application is running, events are generated and sent to the widgets of the application. Examples of events are mouse presses diff --git a/doc/src/qt4-intro.qdoc b/doc/src/qt4-intro.qdoc index 8867fd9..3771bcc 100644 --- a/doc/src/qt4-intro.qdoc +++ b/doc/src/qt4-intro.qdoc @@ -455,10 +455,10 @@ \image quick_screens.png - Qt 4.7 introduces Quick, the Qt UI Creation Kit. that enables the creation - of dynamic user interfaces, easier and more effective than possible - with existing UI technologies. This UI Creation Kit consist of three - technologies: + Qt 4.7 introduces \l{Qt Quick}, the Qt UI Creation Kit. that enables + the creation of dynamic user interfaces, easier and more effective + than possible with existing UI technologies. This UI Creation Kit + consists of three technologies: \list \i QML is a declarative language oriented on JavaScript that utilizes diff --git a/examples/declarative/ui-components/dialcontrol/content/Dial.qml b/examples/declarative/ui-components/dialcontrol/content/Dial.qml index b5074a64..3ffa09a 100644 --- a/examples/declarative/ui-components/dialcontrol/content/Dial.qml +++ b/examples/declarative/ui-components/dialcontrol/content/Dial.qml @@ -68,6 +68,7 @@ Item { transform: Rotation { id: needleRotation origin.x: 5; origin.y: 65 + //! [needle angle] angle: Math.min(Math.max(-130, root.value*2.6 - 130), 133) Behavior on angle { SpringAnimation { @@ -75,6 +76,7 @@ Item { damping: .15 } } + //! [needle angle] } } //! [needle] diff --git a/examples/declarative/ui-components/dialcontrol/dialcontrol.qml b/examples/declarative/ui-components/dialcontrol/dialcontrol.qml index 95df68c..46cc3e6 100644 --- a/examples/declarative/ui-components/dialcontrol/dialcontrol.qml +++ b/examples/declarative/ui-components/dialcontrol/dialcontrol.qml @@ -38,8 +38,10 @@ ** ****************************************************************************/ +//! [imports] import Qt 4.7 import "content" +//! [imports] //! [0] Rectangle { @@ -87,4 +89,4 @@ Rectangle { } } } -//! [0] \ No newline at end of file +//! [0] diff --git a/src/declarative/qml/qdeclarativecomponent.cpp b/src/declarative/qml/qdeclarativecomponent.cpp index 1d48b1a..e3e1840 100644 --- a/src/declarative/qml/qdeclarativecomponent.cpp +++ b/src/declarative/qml/qdeclarativecomponent.cpp @@ -599,7 +599,7 @@ QDeclarativeComponent::QDeclarativeComponent(QDeclarativeComponentPrivate &dd, Q property, or else the object will not be visible. Dynamically created instances can be deleted with the \c destroy() method. - See \l {Dynamic Object Management} for more information. + See \l {Dynamic Object Management in QML} for more information. */ /*! diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index 3822373..a476629 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -240,7 +240,7 @@ The format specification is described at \l{QML:Qt::formatDateTime}{Qt.formatDat \section1 Dynamic Object Creation The following functions on the global object allow you to dynamically create QML -items from files or strings. See \l{Dynamic Object Management} for an overview +items from files or strings. See \l{Dynamic Object Management in QML} for an overview of their use. \list @@ -1118,7 +1118,7 @@ For example: \snippet doc/src/snippets/declarative/createComponent-simple.qml 0 -See \l {Dynamic Object Management} for more information on using this function. +See \l {Dynamic Object Management in QML} for more information on using this function. To create a QML object from an arbitrary string of QML (instead of a file), use \l{QML:Qt::createQmlObject()}{Qt.createQmlObject()}. @@ -1170,7 +1170,7 @@ Note that this function returns immediately, and therefore may not work if the \a qml string loads new components (that is, external QML files that have not yet been loaded). If this is the case, consider using \l{QML:Qt::createComponent()}{Qt.createComponent()} instead. -See \l {Dynamic Object Management} for more information on using this function. +See \l {Dynamic Object Management in QML} for more information on using this function. */ QScriptValue QDeclarativeEnginePrivate::createQmlObject(QScriptContext *ctxt, QScriptEngine *engine) -- cgit v0.12 From 58d0e46dcc50a3cddabc177c9dfdfec5c66e932d Mon Sep 17 00:00:00 2001 From: David Boddie Date: Tue, 10 Aug 2010 15:12:42 +0200 Subject: Doc: Removed invalid entities in documentation. Details: It is not necessary to use entities. In any case, I replaced them with words for consistency. --- doc/src/getting-started/examples.qdoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/getting-started/examples.qdoc b/doc/src/getting-started/examples.qdoc index 1bf86e5..708c44e 100644 --- a/doc/src/getting-started/examples.qdoc +++ b/doc/src/getting-started/examples.qdoc @@ -343,8 +343,8 @@ /*! \page examples-draganddrop.html \ingroup all-examples - \title Drag & Drop Examples - \brief How to access your platform's native darg & drop functionality + \title Drag and Drop Examples + \brief How to access your platform's native drag and drop functionality. \image draganddrop-examples.png -- cgit v0.12 From 3b048f8727a125eef2ac132d95dd3d9c2acbcab2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 11 Aug 2010 11:01:53 +0200 Subject: Revert "Allow customizing the default fbo from the QPlatformGLContext." This reverts commit a8530e5db7ae25ea0ab5df4681308374abf8b6ba. Conflicts: src/gui/kernel/qplatformglcontext_qpa.cpp src/gui/kernel/qplatformglcontext_qpa.h --- src/gui/kernel/qplatformglcontext_qpa.cpp | 12 ------------ src/gui/kernel/qplatformglcontext_qpa.h | 1 - src/opengl/qgl_qpa.cpp | 1 - src/opengl/qglpaintdevice.cpp | 6 ------ 4 files changed, 20 deletions(-) diff --git a/src/gui/kernel/qplatformglcontext_qpa.cpp b/src/gui/kernel/qplatformglcontext_qpa.cpp index 516bf24..36db2b0 100644 --- a/src/gui/kernel/qplatformglcontext_qpa.cpp +++ b/src/gui/kernel/qplatformglcontext_qpa.cpp @@ -44,18 +44,6 @@ QPlatformGLContext::~QPlatformGLContext() { } -/*! - The frame buffer object that a QGLWidget is painted to and that gets bound - when a QGLFramebufferObject is released. - - The default implementation returns 0, which denotes the default - window-system provided frame buffer. -*/ -unsigned long QPlatformGLContext::defaultFBO() const -{ - return 0; -} - static QPlatformGLContext *staticSharedContext = 0; void QPlatformGLContext::setDefaultSharedContext(QPlatformGLContext *sharedContext) diff --git a/src/gui/kernel/qplatformglcontext_qpa.h b/src/gui/kernel/qplatformglcontext_qpa.h index 3e7656b..ff848ed 100644 --- a/src/gui/kernel/qplatformglcontext_qpa.h +++ b/src/gui/kernel/qplatformglcontext_qpa.h @@ -58,7 +58,6 @@ public: virtual void doneCurrent() = 0; virtual void swapBuffers() = 0; virtual void* getProcAddress(const QString& procName) = 0; - virtual unsigned long defaultFBO() const; virtual QPlatformWindowFormat platformWindowFormat() const = 0; diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index c328819..49c0860 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -139,7 +139,6 @@ bool QGLContext::chooseContext(const QGLContext* shareContext) } d->platformContext = widget->platformWindow()->glContext(); Q_ASSERT(d->platformContext); - d->default_fbo = d->platformContext->defaultFBO(); d->glFormat = qt_platformwindowformat_to_glformat(d->platformContext->platformWindowFormat()); d->valid =(bool) d->platformContext; } diff --git a/src/opengl/qglpaintdevice.cpp b/src/opengl/qglpaintdevice.cpp index e12fdae..e1dcbfd 100644 --- a/src/opengl/qglpaintdevice.cpp +++ b/src/opengl/qglpaintdevice.cpp @@ -166,12 +166,6 @@ void QGLWidgetGLPaintDevice::setWidget(QGLWidget* w) void QGLWidgetGLPaintDevice::beginPaint() { - // ### This should be in setWidget(), but the context of the QGLWidget - // hasn't been set there yet. -#ifdef Q_WS_QPA - m_thisFBO = context()->d_ptr->platformContext->defaultFBO(); -#endif - QGLPaintDevice::beginPaint(); if (!glWidget->d_func()->disable_clear_on_painter_begin && glWidget->autoFillBackground()) { if (glWidget->testAttribute(Qt::WA_TranslucentBackground)) -- cgit v0.12 From 144f1f710ad46e89a7c07e94f80ac3744ace5c3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 11 Aug 2010 11:07:19 +0200 Subject: Fix typo in glxintegration did actually not reduce the format more than one level, and if that didn't wasnt enough it would end up in an infinite loop. --- src/plugins/platforms/testlite/qglxintegration.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/plugins/platforms/testlite/qglxintegration.cpp b/src/plugins/platforms/testlite/qglxintegration.cpp index ba161c1..fbffcab 100644 --- a/src/plugins/platforms/testlite/qglxintegration.cpp +++ b/src/plugins/platforms/testlite/qglxintegration.cpp @@ -125,9 +125,8 @@ GLXFBConfig QGLXGLContext::findConfig(const MyDisplay *xd, const QPlatformWindow { for (int i = 0; i < confcount; i++) { chosenConfig = configs[i]; - // Make sure we try to get an ARGB visual if the format asked for an alpha: - if (format.alpha()) { + if (reducedFormat.alpha()) { int alphaSize; glXGetFBConfigAttrib(xd->display,configs[i],GLX_ALPHA_SIZE,&alphaSize); if (alphaSize > 0) @@ -139,11 +138,11 @@ GLXFBConfig QGLXGLContext::findConfig(const MyDisplay *xd, const QPlatformWindow XFree(configs); } - reducedFormat = reducePlatformWindowFormat(format,&reduced); + reducedFormat = reducePlatformWindowFormat(reducedFormat,&reduced); } if (!chosenConfig) - qFatal("Warning no context created"); + qWarning("Warning no context created"); return chosenConfig; } -- cgit v0.12 From d904fe2273be5d39b54b987eef6b9cc0d1b85c4b Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Fri, 13 Aug 2010 10:10:38 +1000 Subject: Fix configure -help output. declarative module is built by default. Task-number: QTBUG-12840 --- configure | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 35fe2eb..7c3f9a3 100755 --- a/configure +++ b/configure @@ -3677,8 +3677,8 @@ fi -no-scripttools .... Do not build the QtScriptTools module. + -scripttools ....... Build the QtScriptTools module. - + -no-declarative .....Do not build the declarative module. - -declarative ....... Build the declarative module. + -no-declarative .....Do not build the declarative module. + + -declarative ....... Build the declarative module. -platform target ... The operating system and compiler you are building on ($PLATFORM). -- cgit v0.12 From f9fe93e6e85294274d4e0ce81db09783cfacd733 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Fri, 13 Aug 2010 12:22:46 +1000 Subject: Clear previous animation data for non-triggering animations. We need to clear the data from the last run if the animation doesn't match any of the state actions (or if there are no actions). Task-number: QTBUG-12805 --- src/declarative/util/qdeclarativeanimation.cpp | 2 ++ .../data/nonTransitionBug.qml | 30 +++++++++++++++++++++ .../tst_qdeclarativeanimations.cpp | 31 ++++++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 tests/auto/declarative/qdeclarativeanimations/data/nonTransitionBug.qml diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp index a747706..2fca09d 100644 --- a/src/declarative/util/qdeclarativeanimation.cpp +++ b/src/declarative/util/qdeclarativeanimation.cpp @@ -2392,6 +2392,8 @@ void QDeclarativePropertyAnimation::transition(QDeclarativeStateActions &actions d->actions = &data->actions; } else { delete data; + d->va->setFromSourcedValue(0); //clear previous data + d->va->setAnimValue(0, QAbstractAnimation::DeleteWhenStopped); //clear previous data d->actions = 0; } } diff --git a/tests/auto/declarative/qdeclarativeanimations/data/nonTransitionBug.qml b/tests/auto/declarative/qdeclarativeanimations/data/nonTransitionBug.qml new file mode 100644 index 0000000..e9dc36e --- /dev/null +++ b/tests/auto/declarative/qdeclarativeanimations/data/nonTransitionBug.qml @@ -0,0 +1,30 @@ +import Qt 4.7 + +Rectangle { + id: root + width: 200 + height: 200 + + Rectangle { + id: mover + objectName: "mover" + } + + states: [ + State { + name: "free" + }, + State { + name: "left" + PropertyChanges { + restoreEntryValues: false + target: mover + x: 0 + } + } + ] + + transitions: Transition { + PropertyAnimation { properties: "x"; duration: 50 } + } +} diff --git a/tests/auto/declarative/qdeclarativeanimations/tst_qdeclarativeanimations.cpp b/tests/auto/declarative/qdeclarativeanimations/tst_qdeclarativeanimations.cpp index ec867fe..e5943fb 100644 --- a/tests/auto/declarative/qdeclarativeanimations/tst_qdeclarativeanimations.cpp +++ b/tests/auto/declarative/qdeclarativeanimations/tst_qdeclarativeanimations.cpp @@ -48,6 +48,8 @@ #include #include +#include "../../../shared/util.h" + #ifdef Q_OS_SYMBIAN // In Symbian OS test data is located in applications private dir #define SRCDIR "." @@ -82,6 +84,7 @@ private slots: void easingProperties(); void rotation(); void runningTrueBug(); + void nonTransitionBug(); }; #define QTIMED_COMPARE(lhs, rhs) do { \ @@ -762,6 +765,34 @@ void tst_qdeclarativeanimations::runningTrueBug() QVERIFY(cloud->x() > qreal(0)); } +//QTBUG-12805 +void tst_qdeclarativeanimations::nonTransitionBug() +{ + //tests that the animation values from the previous transition are properly cleared + //in the case where an animation in the transition doesn't match anything (but previously did) + QDeclarativeEngine engine; + + QDeclarativeComponent c(&engine, SRCDIR "/data/nonTransitionBug.qml"); + QDeclarativeRectangle *rect = qobject_cast(c.create()); + QVERIFY(rect != 0); + QDeclarativeItemPrivate *rectPrivate = QDeclarativeItemPrivate::get(rect); + QDeclarativeRectangle *mover = rect->findChild("mover"); + + mover->setX(100); + QCOMPARE(mover->x(), qreal(100)); + + rectPrivate->setState("left"); + QTRY_COMPARE(mover->x(), qreal(0)); + + mover->setX(100); + QCOMPARE(mover->x(), qreal(100)); + + //make sure we don't try to animate back to 0 + rectPrivate->setState("free"); + QTest::qWait(300); + QCOMPARE(mover->x(), qreal(100)); +} + QTEST_MAIN(tst_qdeclarativeanimations) #include "tst_qdeclarativeanimations.moc" -- cgit v0.12 From 7e4807fed07e4c96086af00338601223b3353d29 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy Date: Fri, 13 Aug 2010 13:58:46 +1000 Subject: Better fix for d524da81ee257a6bd67d32d0bc870280a7d5b8a4. Wrap new APIs in ifndef QT_MOBILITY_BEARER. --- src/network/bearer/qnetworkconfiguration.cpp | 7 ------- src/network/bearer/qnetworkconfiguration.h | 10 ++++++++-- src/s60installs/eabi/QtNetworku.def | 2 +- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/network/bearer/qnetworkconfiguration.cpp b/src/network/bearer/qnetworkconfiguration.cpp index 60851ac..3190a30 100644 --- a/src/network/bearer/qnetworkconfiguration.cpp +++ b/src/network/bearer/qnetworkconfiguration.cpp @@ -406,13 +406,6 @@ QList QNetworkConfiguration::children() const This function is deprecated. It is equivalent to calling bearerTypeName(), however bearerType() should be used in preference. */ -QString QNetworkConfiguration::bearerName() const -{ - // This function cannot be inline as it would break Qt Mobility. - // Qt Mobility uses the Qt header as well and since the Mobility Bearer library - // does not provide bearerTypeName() we cannot use an inline function. - return bearerTypeName(); -} /*! Returns the type of bearer used by this network configuration. diff --git a/src/network/bearer/qnetworkconfiguration.h b/src/network/bearer/qnetworkconfiguration.h index 18b92a9..593dbbe 100644 --- a/src/network/bearer/qnetworkconfiguration.h +++ b/src/network/bearer/qnetworkconfiguration.h @@ -103,6 +103,7 @@ public: Q_DECLARE_FLAGS(StateFlags, StateFlag) +#ifndef QT_MOBILITY_BEARER enum BearerType { BearerUnknown, BearerEthernet, @@ -114,17 +115,22 @@ public: BearerBluetooth, BearerWiMAX }; +#endif StateFlags state() const; Type type() const; Purpose purpose() const; - // Required to maintain source compatibility with Qt Mobility. +#ifndef QT_MOBILITY_BEARER #ifdef QT_DEPRECATED - QT_DEPRECATED QString bearerName() const; + // Required to maintain source compatibility with Qt Mobility. + QT_DEPRECATED inline QString bearerName() const { return bearerTypeName(); } #endif BearerType bearerType() const; QString bearerTypeName() const; +#else + QString bearerName() const; +#endif QString identifier() const; bool isRoamingAvailable() const; diff --git a/src/s60installs/eabi/QtNetworku.def b/src/s60installs/eabi/QtNetworku.def index 2442ee8..6b34a19 100644 --- a/src/s60installs/eabi/QtNetworku.def +++ b/src/s60installs/eabi/QtNetworku.def @@ -1131,7 +1131,7 @@ EXPORTS _ZNK21QNetworkAccessManager13configurationEv @ 1130 NONAME _ZNK21QNetworkAccessManager17networkAccessibleEv @ 1131 NONAME _ZNK21QNetworkAccessManager19activeConfigurationEv @ 1132 NONAME - _ZNK21QNetworkConfiguration10bearerNameEv @ 1133 NONAME + _ZNK21QNetworkConfiguration10bearerNameEv @ 1133 NONAME ABSENT _ZNK21QNetworkConfiguration10identifierEv @ 1134 NONAME _ZNK21QNetworkConfiguration18isRoamingAvailableEv @ 1135 NONAME _ZNK21QNetworkConfiguration4nameEv @ 1136 NONAME -- cgit v0.12 From 167b63d2250e7923d7b660076a80e82af07d9cdb Mon Sep 17 00:00:00 2001 From: Aaron McCarthy Date: Fri, 13 Aug 2010 14:01:52 +1000 Subject: Make this constructor explicit in Qt too. --- src/network/bearer/qnetworksession.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/network/bearer/qnetworksession.h b/src/network/bearer/qnetworksession.h index e7fffac..0b40147 100644 --- a/src/network/bearer/qnetworksession.h +++ b/src/network/bearer/qnetworksession.h @@ -89,11 +89,7 @@ public: OperationNotSupportedError, InvalidConfigurationError }; -#ifndef QT_MOBILITY_BEARER - QNetworkSession(const QNetworkConfiguration& connConfig, QObject* parent =0); -#else explicit QNetworkSession(const QNetworkConfiguration& connConfig, QObject* parent =0); -#endif virtual ~QNetworkSession(); bool isOpen() const; -- cgit v0.12 From ade18bab3a2c4c877baa9be2a0012d670dafb64a Mon Sep 17 00:00:00 2001 From: Joona Petrell Date: Fri, 13 Aug 2010 17:09:27 +1000 Subject: Add autotest that checks that copy and cut don't work when echomode is set to hide text/password mode Task-number: QTBUG-12086 Reviewed-by: Michael Brasser --- .../tst_qdeclarativetextinput.cpp | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index 6e15a4a..ca9009d 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -741,6 +741,30 @@ void tst_qdeclarativetextinput::copyAndPaste() { textInput->paste(); QCOMPARE(textInput->text(), QString("Hello world!Hello world!")); QCOMPARE(textInput->text().length(), 24); + + // clear copy buffer + QClipboard *clipboard = QApplication::clipboard(); + QVERIFY(clipboard); + clipboard->clear(); + + // test that copy functionality is disabled + // when echo mode is set to hide text/password mode + int index = 0; + while (index < 4) { + QDeclarativeTextInput::EchoMode echoMode = QDeclarativeTextInput::EchoMode(index); + textInput->setEchoMode(echoMode); + textInput->setText("My password"); + textInput->select(0, textInput->text().length());; + textInput->copy(); + if (echoMode == QDeclarativeTextInput::Normal) { + QVERIFY(!clipboard->text().isEmpty()); + QCOMPARE(clipboard->text(), QString("My password")); + clipboard->clear(); + } else { + QVERIFY(clipboard->text().isEmpty()); + } + index++; + } #endif } -- cgit v0.12 From b52da4ab2179079a6aff95891786d2f6598048b5 Mon Sep 17 00:00:00 2001 From: Prasanth Ullattil Date: Fri, 13 Aug 2010 12:27:55 +0200 Subject: Multiple "Edit/Special Characters" menu entries on Mac OS X (Cocoa) Every time [NSApp setMainMenu:] is called, Cocoa will add the 'Special Characters' item to the 'Edit' menu. Before adding a new entry it will make sure that menu items list doesn't contain an item with the selector 'orderFrontCharacterPalette' & a 'nil' target. We need to return the index for the first entry (we have QCocoaMenuLoader as target). Task-number: QTBUG-12842 Reviewed-by: Denis --- src/gui/kernel/qcocoamenuloader_mac.mm | 5 +++++ src/gui/kernel/qcocoamenuloader_mac_p.h | 1 + src/gui/widgets/qcocoamenu_mac.mm | 12 ++++++++++++ src/gui/widgets/qcocoamenu_mac_p.h | 1 + 4 files changed, 19 insertions(+) diff --git a/src/gui/kernel/qcocoamenuloader_mac.mm b/src/gui/kernel/qcocoamenuloader_mac.mm index 8d65aa1..8d38f45 100644 --- a/src/gui/kernel/qcocoamenuloader_mac.mm +++ b/src/gui/kernel/qcocoamenuloader_mac.mm @@ -255,5 +255,10 @@ QT_USE_NAMESPACE qApp->quit(); } } + + - (void)orderFrontCharacterPalette:(id)sender + { + [NSApp orderFrontCharacterPalette:sender]; + } @end #endif // QT_MAC_USE_COCOA diff --git a/src/gui/kernel/qcocoamenuloader_mac_p.h b/src/gui/kernel/qcocoamenuloader_mac_p.h index a75ad0a..edacfa5 100644 --- a/src/gui/kernel/qcocoamenuloader_mac_p.h +++ b/src/gui/kernel/qcocoamenuloader_mac_p.h @@ -88,6 +88,7 @@ - (IBAction)hide:(id)sender; - (IBAction)qtDispatcherToQAction:(id)sender; - (void)qtUpdateMenubar; +- (void)orderFrontCharacterPalette:(id)sender; @end #endif // QT_MAC_USE_COCOA diff --git a/src/gui/widgets/qcocoamenu_mac.mm b/src/gui/widgets/qcocoamenu_mac.mm index ce85919..15fae23 100644 --- a/src/gui/widgets/qcocoamenu_mac.mm +++ b/src/gui/widgets/qcocoamenu_mac.mm @@ -188,6 +188,18 @@ QT_USE_NAMESPACE return NO; } +- (NSInteger)indexOfItemWithTarget:(id)anObject andAction:(SEL)actionSelector +{ + NSInteger index = [super indexOfItemWithTarget:anObject andAction:actionSelector]; + static SEL selForOFCP = NSSelectorFromString(@"orderFrontCharacterPalette:"); + if (index == -1 && selForOFCP == actionSelector) { + // Check if the 'orderFrontCharacterPalette' SEL exists for QCocoaMenuLoader object + QT_MANGLE_NAMESPACE(QCocoaMenuLoader) *loader = [NSApp QT_MANGLE_NAMESPACE(qt_qcocoamenuLoader)]; + return [super indexOfItemWithTarget:loader andAction:actionSelector]; + } + return index; +} + @end QT_BEGIN_NAMESPACE diff --git a/src/gui/widgets/qcocoamenu_mac_p.h b/src/gui/widgets/qcocoamenu_mac_p.h index d6ac8c5..1a42642 100644 --- a/src/gui/widgets/qcocoamenu_mac_p.h +++ b/src/gui/widgets/qcocoamenu_mac_p.h @@ -76,6 +76,7 @@ QT_FORWARD_DECLARE_CLASS(QAction) } - (id)initWithQMenu:(QMenu*)menu; - (BOOL)menuHasKeyEquivalent:(NSMenu *)menu forEvent:(NSEvent *)event target:(id *)target action:(SEL *)action; +- (NSInteger)indexOfItemWithTarget:(id)anObject andAction:(SEL)actionSelector; @end #endif -- cgit v0.12 From 5dedcd3c4cac993949295d109804a8f7cc3a5b0a Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Fri, 13 Aug 2010 12:23:46 +0200 Subject: diagramscene example: fix leak and crashes. In MainWindow::deleteItem, if there is arrow selected, we need to clean up the items from this arrow. We need to delete them first so there is no arrow in the list anymore when we calls removeArrows (which before, deleted arrow that were possibly in the list, resulting in crashes) Also avoid leak by giving parents to objects that needs it, and destroying items. Reviewed-by: Geir Vattekar Task-number: QTBUG-12753 --- doc/src/examples/diagramscene.qdoc | 3 ++- examples/graphicsview/diagramscene/mainwindow.cpp | 29 ++++++++++++++++------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/doc/src/examples/diagramscene.qdoc b/doc/src/examples/diagramscene.qdoc index f4d6b0d..7c643c2 100644 --- a/doc/src/examples/diagramscene.qdoc +++ b/doc/src/examples/diagramscene.qdoc @@ -265,7 +265,8 @@ \snippet examples/graphicsview/diagramscene/mainwindow.cpp 3 - This slot deletes the selected item, if any, from the scene. If + This slot deletes the selected item, if any, from the scene. It + deletes the arrows first in order to avoid to delete them twice. If the item to be deleted is a \c DiagramItem, we also need to delete arrows connected to it; we don't want arrows in the scene that aren't connected to items in both ends. diff --git a/examples/graphicsview/diagramscene/mainwindow.cpp b/examples/graphicsview/diagramscene/mainwindow.cpp index f09c552..7d82df0 100644 --- a/examples/graphicsview/diagramscene/mainwindow.cpp +++ b/examples/graphicsview/diagramscene/mainwindow.cpp @@ -45,6 +45,7 @@ #include "diagramitem.h" #include "diagramscene.h" #include "diagramtextitem.h" +#include "arrow.h" const int InsertTextButton = 10; @@ -55,7 +56,7 @@ MainWindow::MainWindow() createToolBox(); createMenus(); - scene = new DiagramScene(itemMenu); + scene = new DiagramScene(itemMenu, this); scene->setSceneRect(QRectF(0, 0, 5000, 5000)); connect(scene, SIGNAL(itemInserted(DiagramItem*)), this, SLOT(itemInserted(DiagramItem*))); @@ -123,11 +124,22 @@ void MainWindow::buttonGroupClicked(int id) void MainWindow::deleteItem() { foreach (QGraphicsItem *item, scene->selectedItems()) { - if (item->type() == DiagramItem::Type) { - qgraphicsitem_cast(item)->removeArrows(); + if (item->type() == Arrow::Type) { + scene->removeItem(item); + Arrow *arrow = qgraphicsitem_cast(item); + arrow->startItem()->removeArrow(arrow); + arrow->endItem()->removeArrow(arrow); + delete item; } - scene->removeItem(item); } + + foreach (QGraphicsItem *item, scene->selectedItems()) { + if (item->type() == DiagramItem::Type) { + qgraphicsitem_cast(item)->removeArrows(); + } + scene->removeItem(item); + delete item; + } } //! [3] @@ -313,7 +325,7 @@ void MainWindow::about() //! [21] void MainWindow::createToolBox() { - buttonGroup = new QButtonGroup; + buttonGroup = new QButtonGroup(this); buttonGroup->setExclusive(false); connect(buttonGroup, SIGNAL(buttonClicked(int)), this, SLOT(buttonGroupClicked(int))); @@ -345,7 +357,7 @@ void MainWindow::createToolBox() QWidget *itemWidget = new QWidget; itemWidget->setLayout(layout); - backgroundButtonGroup = new QButtonGroup; + backgroundButtonGroup = new QButtonGroup(this); connect(backgroundButtonGroup, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(backgroundButtonGroupClicked(QAbstractButton*))); @@ -460,7 +472,6 @@ void MainWindow::createToolbars() editToolBar->addAction(sendBackAction); fontCombo = new QFontComboBox(); - fontSizeCombo = new QComboBox(); connect(fontCombo, SIGNAL(currentFontChanged(QFont)), this, SLOT(currentFontChanged(QFont))); @@ -526,7 +537,7 @@ void MainWindow::createToolbars() linePointerButton->setCheckable(true); linePointerButton->setIcon(QIcon(":/images/linepointer.png")); - pointerTypeGroup = new QButtonGroup; + pointerTypeGroup = new QButtonGroup(this); pointerTypeGroup->addButton(pointerButton, int(DiagramScene::MoveItem)); pointerTypeGroup->addButton(linePointerButton, int(DiagramScene::InsertLine)); @@ -605,7 +616,7 @@ QMenu *MainWindow::createColorMenu(const char *slot, QColor defaultColor) names << tr("black") << tr("white") << tr("red") << tr("blue") << tr("yellow"); - QMenu *colorMenu = new QMenu; + QMenu *colorMenu = new QMenu(this); for (int i = 0; i < colors.count(); ++i) { QAction *action = new QAction(names.at(i), this); action->setData(colors.at(i)); -- cgit v0.12 From 448a8603bb0609bf880a2c1b92b26c2005e1cf63 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 13 Aug 2010 13:25:46 +0300 Subject: Fix check to remove unnecessary deployments in Symbian Previously check to remove files from deployment in case the deployment target location was the same as the source location was done using QFileInfo equality, which resolved to true when file didn't yet exist at the time qmake was run. Changed the check to compare absolute paths instead. Task-number: QTBUG-12879 Reviewed-by: Shane Kearns --- qmake/generators/symbian/initprojectdeploy_symbian.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/qmake/generators/symbian/initprojectdeploy_symbian.cpp b/qmake/generators/symbian/initprojectdeploy_symbian.cpp index 382e012..776a646 100644 --- a/qmake/generators/symbian/initprojectdeploy_symbian.cpp +++ b/qmake/generators/symbian/initprojectdeploy_symbian.cpp @@ -353,7 +353,11 @@ void initProjectDeploySymbian(QMakeProject* project, CopyItem &item = i.next(); QFileInfo fromItem(item.from); QFileInfo toItem(item.to); - if (fromItem == toItem) +#if defined(Q_OS_WIN) + if (0 == fromItem.absoluteFilePath().compare(toItem.absoluteFilePath(), Qt::CaseInsensitive)) +#else + if (0 == fromItem.absoluteFilePath().compare(toItem.absoluteFilePath())) +#endif i.remove(); } } -- cgit v0.12 From 5d32b723332acab5fdf880aa0d555ab8e05d79dd Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Fri, 13 Aug 2010 12:59:55 +0100 Subject: Fix for memory leak in qt_init Reviewed-by: Miikka Heikkinen --- src/gui/kernel/qapplication_s60.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index e64ebb1..559bb6a 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -1475,6 +1475,8 @@ void qt_init(QApplicationPrivate * /* priv */, int) S60->avkonComponentsSupportTransparency = (value==1) ? true : false; } } + delete repository; + repository = 0; #endif #ifdef QT_KEYPAD_NAVIGATION -- cgit v0.12 From 13d35e19a2bf78dd6a63b35f06a07d2b6e9c67c4 Mon Sep 17 00:00:00 2001 From: Martin Smith Date: Fri, 13 Aug 2010 14:01:49 +0200 Subject: qdoc: Added the fix to change qml-qml-file.name to qml-file.name --- tools/qdoc3/tree.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/qdoc3/tree.cpp b/tools/qdoc3/tree.cpp index 56e3484..540ffa9 100644 --- a/tools/qdoc3/tree.cpp +++ b/tools/qdoc3/tree.cpp @@ -1963,8 +1963,8 @@ QString Tree::fullDocumentLocation(const Node *node) const if ((node->subType() == Node::QmlClass) || (node->subType() == Node::QmlBasicType)) { QString fb = node->fileBase(); - if (fb.startsWith(QLatin1String("QML:"))) - return node->fileBase() + ".html"; + if (fb.startsWith(QLatin1String("qml-"))) + return fb + ".html"; else return "qml-" + node->fileBase() + ".html"; } else @@ -1981,7 +1981,7 @@ QString Tree::fullDocumentLocation(const Node *node) const else if ((parentNode = node->parent())) { if (parentNode->subType() == Node::QmlPropertyGroup) { parentNode = parentNode->parent(); - parentName = "qml-" + parentNode->fileBase() + ".html"; + parentName = fullDocumentLocation(parentNode); } else parentName = fullDocumentLocation(node->parent()); -- cgit v0.12 From 6d0d767e63df3c997d6d7a8cb6cd4bf8c0dfc835 Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Fri, 13 Aug 2010 14:05:17 +0200 Subject: Cocoa: Stacking order of modal dialogs is wrong Modal dialogs were sometimes hidden behind other normal windows on screen. The reason was that, upon going modal for a window, we actually resat the stacking level on the window in a faulty attempt to respect any stays-on-top window flags. This patch makes sure we avoid doing that, and at the same time, ensures we don't reintroduce the original bug as well. Task-number: QTBUG-12841 Reviewed-by: cduclos --- src/gui/kernel/qeventdispatcher_mac.mm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/gui/kernel/qeventdispatcher_mac.mm b/src/gui/kernel/qeventdispatcher_mac.mm index e26fbde..89f01d8 100644 --- a/src/gui/kernel/qeventdispatcher_mac.mm +++ b/src/gui/kernel/qeventdispatcher_mac.mm @@ -785,7 +785,7 @@ void QEventDispatcherMacPrivate::temporarilyStopAllModalSessions() // the stacking order of the windows while doing so, we put // up a block that is used in QCocoaWindow and QCocoaPanel: int stackSize = cocoaModalSessionStack.size(); - for (int i=stackSize-1; i>=0; --i) { + for (int i=0; i [window level]) + [window setLevel:levelBeforeEnterModal]; } currentModalSessionCached = info.session; } -- cgit v0.12 From 434ce6748ea7f082357b6d7ab542c9fa2285bd4c Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 13 Aug 2010 15:22:25 +0300 Subject: Fix "installer_sis" and "deploy" targets when TARGET has path Dependencies got generated wrong in Makefile because sis is always created in the .pro file directory but dependency included path that was in TARGET. Task-number: QTBUG-12884 Reviewed-by: Shane Kearns --- mkspecs/features/sis_targets.prf | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/mkspecs/features/sis_targets.prf b/mkspecs/features/sis_targets.prf index 99f5910..abdf2d4 100644 --- a/mkspecs/features/sis_targets.prf +++ b/mkspecs/features/sis_targets.prf @@ -11,7 +11,6 @@ else:!equals(DEPLOYMENT, default_deployment) { equals(GENERATE_SIS_TARGETS, true) { symbian-abld|symbian-sbsv2 { - sis_destdir = make_cache_name = .make.cache sis_target.target = sis sis_target.commands = $(if $(wildcard $$basename(TARGET)_template.pkg), \ @@ -50,7 +49,7 @@ equals(GENERATE_SIS_TARGETS, true) { ok_unsigned_sis_target.target = ok_unsigned_sis ok_unsigned_sis_target.commands = createpackage.bat $(QT_SIS_OPTIONS) -o $$basename(TARGET)_template.pkg $(QT_SIS_TARGET) - target_sis_target.target = $${sis_destdir}$${TARGET}.sis + target_sis_target.target = $$basename(TARGET).sis target_sis_target.commands = $(MAKE) -f $(MAKEFILE) sis installer_sis_target.target = installer_sis @@ -59,7 +58,7 @@ equals(GENERATE_SIS_TARGETS, true) { , \ $(MAKE) -f $(MAKEFILE) fail_sis_nopkg \ ) - installer_sis_target.depends = $${sis_destdir}$${TARGET}.sis + installer_sis_target.depends = $$basename(TARGET).sis ok_installer_sis_target.target = ok_installer_sis ok_installer_sis_target.commands = createpackage.bat $(QT_SIS_OPTIONS) $$basename(TARGET)_installer.pkg - \ -- cgit v0.12 From 2dfd16e8a138da9d903b31ef461331016d16ec5b Mon Sep 17 00:00:00 2001 From: Morten Engvoldsen Date: Fri, 13 Aug 2010 15:20:36 +0200 Subject: Doc: removed assistant style and reintroduced the index page icons. --- doc/src/template/style/narrow.css | 4 ++-- doc/src/template/style/style.css | 41 ++------------------------------------- 2 files changed, 4 insertions(+), 41 deletions(-) diff --git a/doc/src/template/style/narrow.css b/doc/src/template/style/narrow.css index e4ad135..349048f 100644 --- a/doc/src/template/style/narrow.css +++ b/doc/src/template/style/narrow.css @@ -54,7 +54,7 @@ .narrow .header .qtref a { - color: #363534; + color: #00732F; } .narrow .header .qtref span @@ -103,7 +103,7 @@ } .narrow .header #shortCut ul li a { - color: #44a51c; + color: #00732F; } .narrow .wrapper .hd diff --git a/doc/src/template/style/style.css b/doc/src/template/style/style.css index 6a32e53..190c60a 100755 --- a/doc/src/template/style/style.css +++ b/doc/src/template/style/style.css @@ -1283,43 +1283,6 @@ -/* start of offline spec*/ - .offline .wrapper .hd - { - background: url(../images/page.png) no-repeat 0 -15px; - } - .offline .wrapper .bd - { - background: url(../images/bg_l_blank.png) repeat-y 0 0; - } - .offline .wrapper .ft - { - background: url(../images/page.png) no-repeat 0 -90px; - } - .offline .sidebar, - .offline .feedback, - .offline .t_button, - .offline #narrowsearch, - .offline #narrowmenu - { - display: none; - } - .offline .wrap - { - margin: 0 5px 0 5px; - } - .offline .wrap .breadcrumb - { - } - - .offline .wrap .content - { - padding-top: 15px; - } - - -/* end of offline spec*/ - /* start of creator spec*/ .creator { @@ -1339,9 +1302,9 @@ .creator #feedbackBox, .creator #feedback, .creator #blurpage, - .creator .indexbox .indexIcon span, + /*.creator .indexbox .indexIcon span,*/ .creator .wrapper .hd, - .creator .indexbox .indexIcon, +/* .creator .indexbox .indexIcon,*/ .creator .header #nav-logo, .creator #offlinemenu, .creator #offlinesearch, -- cgit v0.12 From 7c413e92841c7a6010c4ba5748f6f54448f8643e Mon Sep 17 00:00:00 2001 From: Jukka Rissanen Date: Wed, 28 Jul 2010 15:13:49 +0300 Subject: Do not change the session configuration state because of changes in QNetworkConfigurationManager. The session state is only changed according to status messages sent by icd. Fixes: NB#182148 - QNetworkSession changes to disconnected state immediately after opening session --- src/plugins/bearer/icd/qnetworksession_impl.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/plugins/bearer/icd/qnetworksession_impl.cpp b/src/plugins/bearer/icd/qnetworksession_impl.cpp index 2583b28..0b35349 100644 --- a/src/plugins/bearer/icd/qnetworksession_impl.cpp +++ b/src/plugins/bearer/icd/qnetworksession_impl.cpp @@ -339,8 +339,6 @@ void QNetworkSessionPrivateImpl::syncStateWithInterface() isOpen = false; opened = false; - connect(&manager, SIGNAL(updateCompleted()), this, SLOT(networkConfigurationsChanged())); - connect(engine, SIGNAL(iapStateChanged(const QString&, uint)), this, SLOT(iapStateChanged(const QString&, uint))); -- cgit v0.12 From d4c8461db653e498b9369c2a36de5b699bcbf87d Mon Sep 17 00:00:00 2001 From: Aaron McCarthy Date: Thu, 12 Aug 2010 14:46:46 +1000 Subject: Release lock before calling into icd engine. --- src/plugins/bearer/icd/qnetworksession_impl.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/plugins/bearer/icd/qnetworksession_impl.cpp b/src/plugins/bearer/icd/qnetworksession_impl.cpp index 0b35349..3170bf6 100644 --- a/src/plugins/bearer/icd/qnetworksession_impl.cpp +++ b/src/plugins/bearer/icd/qnetworksession_impl.cpp @@ -458,14 +458,15 @@ void QNetworkSessionPrivateImpl::syncStateWithInterface() else ptr->name = ptr->id; + const QString identifier = ptr->id; + + configLocker.unlock(); + // Add the new active configuration to manager or update the old config - if (!engine->hasIdentifier(ptr->id)) { - configLocker.unlock(); + if (!engine->hasIdentifier(identifier)) engine->addSessionConfiguration(ptr); - } else { - configLocker.unlock(); + else engine->changedSessionConfiguration(ptr); - } } break; -- cgit v0.12 From f7c07892e927a6420bb64a7011312f0a4a5a1fc9 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Mon, 16 Aug 2010 11:17:56 +1000 Subject: emit countChanged where appropriate in Repeater Task-number: QTBUG-12905 Reviewed-by: Bea Lam --- src/declarative/graphicsitems/qdeclarativerepeater.cpp | 5 ++++- .../declarative/qdeclarativerepeater/tst_qdeclarativerepeater.cpp | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativerepeater.cpp b/src/declarative/graphicsitems/qdeclarativerepeater.cpp index 68e7e9a..b4b6c02 100644 --- a/src/declarative/graphicsitems/qdeclarativerepeater.cpp +++ b/src/declarative/graphicsitems/qdeclarativerepeater.cpp @@ -245,8 +245,8 @@ void QDeclarativeRepeater::setModel(const QVariant &model) connect(d->model, SIGNAL(destroyingItem(QDeclarativeItem*)), this, SLOT(destroyingItem(QDeclarativeItem*))); */ regenerate(); - emit countChanged(); } + emit countChanged(); } /*! @@ -377,6 +377,7 @@ void QDeclarativeRepeater::itemsInserted(int index, int count) d->deletables.insert(modelIndex, item); } } + emit countChanged(); } void QDeclarativeRepeater::itemsRemoved(int index, int count) @@ -391,6 +392,7 @@ void QDeclarativeRepeater::itemsRemoved(int index, int count) else break; } + emit countChanged(); } void QDeclarativeRepeater::itemsMoved(int from, int to, int count) @@ -420,6 +422,7 @@ void QDeclarativeRepeater::modelReset() if (!isComponentComplete()) return; regenerate(); + emit countChanged(); } QT_END_NAMESPACE diff --git a/tests/auto/declarative/qdeclarativerepeater/tst_qdeclarativerepeater.cpp b/tests/auto/declarative/qdeclarativerepeater/tst_qdeclarativerepeater.cpp index 623b3d7..360d90f 100644 --- a/tests/auto/declarative/qdeclarativerepeater/tst_qdeclarativerepeater.cpp +++ b/tests/auto/declarative/qdeclarativerepeater/tst_qdeclarativerepeater.cpp @@ -309,11 +309,14 @@ void tst_QDeclarativeRepeater::dataModel() QCOMPARE(container->childItems().count(), 4); + QSignalSpy repeaterSpy(repeater, SIGNAL(countChanged())); testModel.addItem("four", "4"); QCOMPARE(container->childItems().count(), 5); + QCOMPARE(repeaterSpy.count(),1); testModel.removeItem(2); QCOMPARE(container->childItems().count(), 4); + QCOMPARE(repeaterSpy.count(),2); // Check that model changes are propagated QDeclarativeText *text = findItem(canvas->rootObject(), "myName", 1); -- cgit v0.12 From 8ae7f9508a94e37ceddd4c2b1b94dc43ff039cf3 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Mon, 16 Aug 2010 13:38:54 +1000 Subject: Make positioners work with QGraphicsWidgets also Task-number: QTBUG-12416 Reviewed-by: Alexis Menard --- .../graphicsitems/qdeclarativepositioners.cpp | 107 ++++++++++++--------- .../graphicsitems/qdeclarativepositioners_p.h | 8 +- .../graphicsitems/qdeclarativepositioners_p_p.h | 5 +- 3 files changed, 71 insertions(+), 49 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativepositioners.cpp b/src/declarative/graphicsitems/qdeclarativepositioners.cpp index 179f13d..f32c532 100644 --- a/src/declarative/graphicsitems/qdeclarativepositioners.cpp +++ b/src/declarative/graphicsitems/qdeclarativepositioners.cpp @@ -61,16 +61,33 @@ static const QDeclarativeItemPrivate::ChangeTypes watchedChanges | QDeclarativeItemPrivate::Opacity | QDeclarativeItemPrivate::Destroyed; -void QDeclarativeBasePositionerPrivate::watchChanges(QDeclarativeItem *other) +void QDeclarativeBasePositionerPrivate::watchChanges(QGraphicsObject *other) { - QDeclarativeItemPrivate *otherPrivate = static_cast(QGraphicsItemPrivate::get(other)); - otherPrivate->addItemChangeListener(this, watchedChanges); + if (QGraphicsItemPrivate::get(other)->isDeclarativeItem) { + QDeclarativeItemPrivate *otherPrivate = static_cast(QGraphicsItemPrivate::get(other)); + otherPrivate->addItemChangeListener(this, watchedChanges); + } else { + Q_Q(QDeclarativeBasePositioner); + QObject::connect(other, SIGNAL(widthChanged()), q, SLOT(graphicsWidgetGeometryChanged())); + QObject::connect(other, SIGNAL(heightChanged()), q, SLOT(graphicsWidgetGeometryChanged())); + } } -void QDeclarativeBasePositionerPrivate::unwatchChanges(QDeclarativeItem* other) +void QDeclarativeBasePositionerPrivate::unwatchChanges(QGraphicsObject* other) { - QDeclarativeItemPrivate *otherPrivate = static_cast(QGraphicsItemPrivate::get(other)); - otherPrivate->removeItemChangeListener(this, watchedChanges); + if (QGraphicsItemPrivate::get(other)->isDeclarativeItem) { + QDeclarativeItemPrivate *otherPrivate = static_cast(QGraphicsItemPrivate::get(other)); + otherPrivate->removeItemChangeListener(this, watchedChanges); + } else { + Q_Q(QDeclarativeBasePositioner); + QObject::disconnect(other, SIGNAL(widthChanged()), q, SLOT(graphicsWidgetGeometryChanged())); + QObject::disconnect(other, SIGNAL(heightChanged()), q, SLOT(graphicsWidgetGeometryChanged())); + } +} + +void QDeclarativeBasePositioner::graphicsWidgetGeometryChanged() +{ + prePositioning(); } /*! @@ -174,16 +191,16 @@ QVariant QDeclarativeBasePositioner::itemChange(GraphicsItemChange change, Q_D(QDeclarativeBasePositioner); if (change == ItemChildAddedChange){ QGraphicsItem* item = value.value(); - QDeclarativeItem* child = 0; + QGraphicsObject* child = 0; if(item) - child = qobject_cast(item->toGraphicsObject()); + child = item->toGraphicsObject(); if (child) prePositioning(); } else if (change == ItemChildRemovedChange) { QGraphicsItem* item = value.value(); - QDeclarativeItem* child = 0; + QGraphicsObject* child = 0; if(item) - child = qobject_cast(item->toGraphicsObject()); + child = item->toGraphicsObject(); if (child) { QDeclarativeBasePositioner::PositionedItem posItem(child); int idx = positionedItems.find(posItem); @@ -194,7 +211,6 @@ QVariant QDeclarativeBasePositioner::itemChange(GraphicsItemChange change, prePositioning(); } } - return QDeclarativeItem::itemChange(change, value); } @@ -216,7 +232,7 @@ void QDeclarativeBasePositioner::prePositioning() QPODVector oldItems; positionedItems.copyAndClear(oldItems); for (int ii = 0; ii < children.count(); ++ii) { - QDeclarativeItem *child = qobject_cast(children.at(ii)); + QGraphicsObject *child = children.at(ii)->toGraphicsObject(); if (!child) continue; QDeclarativeItemPrivate *childPrivate = static_cast(QGraphicsItemPrivate::get(child)); @@ -302,10 +318,10 @@ void QDeclarativeBasePositioner::finishApplyTransitions() d->moveActions.clear(); } -static inline bool isInvisible(QDeclarativeItem *child) +static inline bool isInvisible(QGraphicsObject *child) { QDeclarativeItemPrivate *childPrivate = static_cast(QGraphicsItemPrivate::get(child)); - return child->opacity() == 0.0 || childPrivate->explicitlyHidden || !child->width() || !child->height(); + return child->opacity() == 0.0 || childPrivate->explicitlyHidden || !childPrivate->width() || !childPrivate->height(); } /*! @@ -440,9 +456,9 @@ void QDeclarativeColumn::doPositioning(QSizeF *contentSize) if(child.item->y() != voffset) positionY(voffset, child); - contentSize->setWidth(qMax(contentSize->width(), child.item->width())); + contentSize->setWidth(qMax(contentSize->width(), QGraphicsItemPrivate::get(child.item)->width())); - voffset += child.item->height(); + voffset += QGraphicsItemPrivate::get(child.item)->height(); voffset += spacing(); } @@ -454,8 +470,8 @@ void QDeclarativeColumn::reportConflictingAnchors() QDeclarativeBasePositionerPrivate *d = static_cast(QDeclarativeBasePositionerPrivate::get(this)); for (int ii = 0; ii < positionedItems.count(); ++ii) { const PositionedItem &child = positionedItems.at(ii); - if (child.item) { - QDeclarativeAnchors *anchors = QDeclarativeItemPrivate::get(child.item)->_anchors; + if (child.item && QGraphicsItemPrivate::get(child.item)->isDeclarativeItem) { + QDeclarativeAnchors *anchors = QDeclarativeItemPrivate::get(static_cast(child.item))->_anchors; if (anchors) { QDeclarativeAnchors::Anchors usedAnchors = anchors->usedAnchors(); if (usedAnchors & QDeclarativeAnchors::TopAnchor || @@ -579,9 +595,9 @@ void QDeclarativeRow::doPositioning(QSizeF *contentSize) if(child.item->x() != hoffset) positionX(hoffset, child); - contentSize->setHeight(qMax(contentSize->height(), child.item->height())); + contentSize->setHeight(qMax(contentSize->height(), QGraphicsItemPrivate::get(child.item)->height())); - hoffset += child.item->width(); + hoffset += QGraphicsItemPrivate::get(child.item)->width(); hoffset += spacing(); } @@ -593,8 +609,8 @@ void QDeclarativeRow::reportConflictingAnchors() QDeclarativeBasePositionerPrivate *d = static_cast(QDeclarativeBasePositionerPrivate::get(this)); for (int ii = 0; ii < positionedItems.count(); ++ii) { const PositionedItem &child = positionedItems.at(ii); - if (child.item) { - QDeclarativeAnchors *anchors = QDeclarativeItemPrivate::get(child.item)->_anchors; + if (child.item && QGraphicsItemPrivate::get(child.item)->isDeclarativeItem) { + QDeclarativeAnchors *anchors = QDeclarativeItemPrivate::get(static_cast(child.item))->_anchors; if (anchors) { QDeclarativeAnchors::Anchors usedAnchors = anchors->usedAnchors(); if (usedAnchors & QDeclarativeAnchors::LeftAnchor || @@ -814,10 +830,11 @@ void QDeclarativeGrid::doPositioning(QSizeF *contentSize) const PositionedItem &child = positionedItems.at(childIndex++); if (!child.item || isInvisible(child.item)) continue; - if (child.item->width() > maxColWidth[j]) - maxColWidth[j] = child.item->width(); - if (child.item->height() > maxRowHeight[i]) - maxRowHeight[i] = child.item->height(); + QGraphicsItemPrivate *childPrivate = QGraphicsItemPrivate::get(child.item); + if (childPrivate->width() > maxColWidth[j]) + maxColWidth[j] = childPrivate->width(); + if (childPrivate->height() > maxRowHeight[i]) + maxRowHeight[i] = childPrivate->height(); } } } else { @@ -833,10 +850,11 @@ void QDeclarativeGrid::doPositioning(QSizeF *contentSize) const PositionedItem &child = positionedItems.at(childIndex++); if (!child.item || isInvisible(child.item)) continue; - if (child.item->width() > maxColWidth[j]) - maxColWidth[j] = child.item->width(); - if (child.item->height() > maxRowHeight[i]) - maxRowHeight[i] = child.item->height(); + QGraphicsItemPrivate *childPrivate = QGraphicsItemPrivate::get(child.item); + if (childPrivate->width() > maxColWidth[j]) + maxColWidth[j] = childPrivate->width(); + if (childPrivate->height() > maxRowHeight[i]) + maxRowHeight[i] = childPrivate->height(); } } } @@ -855,7 +873,7 @@ void QDeclarativeGrid::doPositioning(QSizeF *contentSize) } if (m_flow == LeftToRight) { - contentSize->setWidth(qMax(contentSize->width(), xoffset + child.item->width())); + contentSize->setWidth(qMax(contentSize->width(), xoffset + QGraphicsItemPrivate::get(child.item)->width())); contentSize->setHeight(yoffset + maxRowHeight[curRow]); xoffset+=maxColWidth[curCol]+spacing(); @@ -869,7 +887,7 @@ void QDeclarativeGrid::doPositioning(QSizeF *contentSize) break; } } else { - contentSize->setHeight(qMax(contentSize->height(), yoffset + child.item->height())); + contentSize->setHeight(qMax(contentSize->height(), yoffset + QGraphicsItemPrivate::get(child.item)->height())); contentSize->setWidth(xoffset + maxColWidth[curCol]); yoffset+=maxRowHeight[curRow]+spacing(); @@ -891,8 +909,8 @@ void QDeclarativeGrid::reportConflictingAnchors() QDeclarativeBasePositionerPrivate *d = static_cast(QDeclarativeBasePositionerPrivate::get(this)); for (int ii = 0; ii < positionedItems.count(); ++ii) { const PositionedItem &child = positionedItems.at(ii); - if (child.item) { - QDeclarativeAnchors *anchors = QDeclarativeItemPrivate::get(child.item)->_anchors; + if (child.item && QGraphicsItemPrivate::get(child.item)->isDeclarativeItem) { + QDeclarativeAnchors *anchors = QDeclarativeItemPrivate::get(static_cast(child.item))->_anchors; if (anchors && (anchors->usedAnchors() || anchors->fill() || anchors->centerIn())) { d->anchorConflict = true; break; @@ -1026,14 +1044,15 @@ void QDeclarativeFlow::doPositioning(QSizeF *contentSize) if (!child.item || isInvisible(child.item)) continue; + QGraphicsItemPrivate *childPrivate = QGraphicsItemPrivate::get(child.item); if (d->flow == LeftToRight) { - if (widthValid() && hoffset && hoffset + child.item->width() > width()) { + if (widthValid() && hoffset && hoffset + childPrivate->width() > width()) { hoffset = 0; voffset += linemax + spacing(); linemax = 0; } } else { - if (heightValid() && voffset && voffset + child.item->height() > height()) { + if (heightValid() && voffset && voffset + childPrivate->height() > height()) { voffset = 0; hoffset += linemax + spacing(); linemax = 0; @@ -1045,17 +1064,17 @@ void QDeclarativeFlow::doPositioning(QSizeF *contentSize) positionY(voffset, child); } - contentSize->setWidth(qMax(contentSize->width(), hoffset + child.item->width())); - contentSize->setHeight(qMax(contentSize->height(), voffset + child.item->height())); + contentSize->setWidth(qMax(contentSize->width(), hoffset + childPrivate->width())); + contentSize->setHeight(qMax(contentSize->height(), voffset + childPrivate->height())); if (d->flow == LeftToRight) { - hoffset += child.item->width(); + hoffset += childPrivate->width(); hoffset += spacing(); - linemax = qMax(linemax, qCeil(child.item->height())); + linemax = qMax(linemax, qCeil(childPrivate->height())); } else { - voffset += child.item->height(); + voffset += childPrivate->height(); voffset += spacing(); - linemax = qMax(linemax, qCeil(child.item->width())); + linemax = qMax(linemax, qCeil(childPrivate->width())); } } } @@ -1065,8 +1084,8 @@ void QDeclarativeFlow::reportConflictingAnchors() Q_D(QDeclarativeFlow); for (int ii = 0; ii < positionedItems.count(); ++ii) { const PositionedItem &child = positionedItems.at(ii); - if (child.item) { - QDeclarativeAnchors *anchors = QDeclarativeItemPrivate::get(child.item)->_anchors; + if (child.item && QGraphicsItemPrivate::get(child.item)->isDeclarativeItem) { + QDeclarativeAnchors *anchors = QDeclarativeItemPrivate::get(static_cast(child.item))->_anchors; if (anchors && (anchors->usedAnchors() || anchors->fill() || anchors->centerIn())) { d->anchorConflict = true; break; diff --git a/src/declarative/graphicsitems/qdeclarativepositioners_p.h b/src/declarative/graphicsitems/qdeclarativepositioners_p.h index c03e518..f9ecc0a 100644 --- a/src/declarative/graphicsitems/qdeclarativepositioners_p.h +++ b/src/declarative/graphicsitems/qdeclarativepositioners_p.h @@ -91,14 +91,16 @@ Q_SIGNALS: protected Q_SLOTS: void prePositioning(); + void graphicsWidgetGeometryChanged(); protected: virtual void doPositioning(QSizeF *contentSize)=0; virtual void reportConflictingAnchors()=0; - struct PositionedItem { - PositionedItem(QDeclarativeItem *i) : item(i), isNew(false), isVisible(true) {} + class PositionedItem { + public : + PositionedItem(QGraphicsObject *i) : item(i), isNew(false), isVisible(true) {} bool operator==(const PositionedItem &other) const { return other.item == item; } - QDeclarativeItem *item; + QGraphicsObject *item; bool isNew; bool isVisible; }; diff --git a/src/declarative/graphicsitems/qdeclarativepositioners_p_p.h b/src/declarative/graphicsitems/qdeclarativepositioners_p_p.h index 822079b..35946e9 100644 --- a/src/declarative/graphicsitems/qdeclarativepositioners_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativepositioners_p_p.h @@ -94,8 +94,8 @@ public: QDeclarativeTransitionManager addTransitionManager; QDeclarativeTransitionManager moveTransitionManager; - void watchChanges(QDeclarativeItem *other); - void unwatchChanges(QDeclarativeItem* other); + void watchChanges(QGraphicsObject *other); + void unwatchChanges(QGraphicsObject* other); bool queuedPositioning : 1; bool doingPositioning : 1; bool anchorConflict : 1; @@ -123,6 +123,7 @@ public: if (newGeometry.size() != oldGeometry.size()) q->prePositioning(); } + virtual void itemVisibilityChanged(QDeclarativeItem *) { schedulePositioning(); -- cgit v0.12 From b8505789fdf977fcdec91f94557fe13bcef1e7cc Mon Sep 17 00:00:00 2001 From: Tomasz Bursztyka Date: Thu, 29 Jul 2010 15:22:33 +0300 Subject: The QNetworkConfigurationManager did not get the online status correctly even when there was an active connection. Fixes: NB#181984 - QNetworkConfigurationManager reports offline even when connected. Signed-off-by: Tomasz Bursztyka Signed-off-by: Jukka Rissanen --- src/plugins/bearer/icd/qicdengine.cpp | 97 +++++++++++++++++++++++++---------- src/plugins/bearer/icd/qicdengine.h | 2 +- 2 files changed, 71 insertions(+), 28 deletions(-) diff --git a/src/plugins/bearer/icd/qicdengine.cpp b/src/plugins/bearer/icd/qicdengine.cpp index 0900329..87b31da 100644 --- a/src/plugins/bearer/icd/qicdengine.cpp +++ b/src/plugins/bearer/icd/qicdengine.cpp @@ -275,6 +275,8 @@ void QIcdEngine::initialize() userChoiceConfigurations.insert(cpPriv->id, ptr); doRequestUpdate(); + + getIcdInitialState(); } static inline QString network_attrs_to_security(uint network_attrs) @@ -623,7 +625,11 @@ void QIcdEngine::doRequestUpdate(QList scanned) changed = true; } - if (ptr->state != QNetworkConfiguration::Discovered) { + /* If this config is the current active one, we do not set it + * to discovered. + */ + if ((ptr->state != QNetworkConfiguration::Discovered) && + (ptr->state != QNetworkConfiguration::Active)) { ptr->state = QNetworkConfiguration::Discovered; changed = true; } @@ -786,10 +792,50 @@ void QIcdEngine::startListeningStateSignalsForAllConnections() ICD_DBUS_API_INTERFACE, ICD_DBUS_API_STATE_SIG, this, SLOT(connectionStateSignalsSlot(QDBusMessage))); +} + +void QIcdEngine::getIcdInitialState() +{ + /* Instead of requesting ICD status asynchronously, we ask it synchronously. + * It ensures that we always get right icd status BEFORE initialize() ends. + * If not, initialize() might end before we got icd status and + * QNetworkConfigurationManager::updateConfigurations() + * call from user might also end before receiving icd status. + * In such case, we come up to a bug: + * QNetworkConfigurationManagerPrivate::isOnline() will be false even + * if we are connected. + */ + Maemo::Icd icd; + QList state_results; + QMutexLocker locker(&mutex); + QNetworkConfigurationPrivatePointer ptr; + + if (icd.state(state_results) && !state_results.isEmpty()) { + + if (!(state_results.first().params.network_attrs == 0 && + state_results.first().params.network_id.isEmpty())) { + + switch (state_results.first().state) { + case ICD_STATE_CONNECTED: + m_onlineIapId = state_results.first().params.network_id; + + ptr = accessPointConfigurations.value(m_onlineIapId); + if (ptr) { + ptr->state = QNetworkConfiguration::Active; + + QMutexLocker configLocker(&ptr->mutex); + configLocker.unlock(); - // Calling ICD_DBUS_API_STATE_REQ makes sure that initial state will be updated immediately - m_gettingInitialConnectionState = true; - m_dbusInterface->call(ICD_DBUS_API_STATE_REQ); + locker.unlock(); + emit configurationChanged(ptr); + locker.relock(); + } + break; + default: + break; + } + } + } } void QIcdEngine::connectionStateSignalsSlot(QDBusMessage msg) @@ -814,12 +860,12 @@ void QIcdEngine::connectionStateSignalsSlot(QDBusMessage msg) ptr->type = QNetworkConfiguration::InternetAccessPoint; if (ptr->state != QNetworkConfiguration::Active) { ptr->state = QNetworkConfiguration::Active; - if (!m_gettingInitialConnectionState) { - configLocker.unlock(); - locker.unlock(); - emit configurationChanged(ptr); - locker.relock(); - } + + configLocker.unlock(); + locker.unlock(); + emit configurationChanged(ptr); + locker.relock(); + m_onlineIapId = iapid; } } else { @@ -840,22 +886,21 @@ void QIcdEngine::connectionStateSignalsSlot(QDBusMessage msg) ptr->type = QNetworkConfiguration::InternetAccessPoint; if (ptr->state == QNetworkConfiguration::Active) { ptr->state = QNetworkConfiguration::Discovered; - if (!m_gettingInitialConnectionState) { - configLocker.unlock(); - locker.unlock(); - emit configurationChanged(ptr); - locker.relock(); - // Note: If ICD switches used IAP from one to another: - // 1) new IAP is reported to be online first - // 2) old IAP is reported to be offline then - // => Device can be reported to be offline only - // if last known online IAP is reported to be disconnected - if (iapid == m_onlineIapId) { - // It's known that there is only one global ICD connection - // => Because ICD state was reported to be DISCONNECTED, Device is offline - m_onlineIapId.clear(); - } + configLocker.unlock(); + locker.unlock(); + emit configurationChanged(ptr); + locker.relock(); + + // Note: If ICD switches used IAP from one to another: + // 1) new IAP is reported to be online first + // 2) old IAP is reported to be offline then + // => Device can be reported to be offline only + // if last known online IAP is reported to be disconnected + if (iapid == m_onlineIapId) { + // It's known that there is only one global ICD connection + // => Because ICD state was reported to be DISCONNECTED, Device is offline + m_onlineIapId.clear(); } } } else { @@ -876,8 +921,6 @@ void QIcdEngine::connectionStateSignalsSlot(QDBusMessage msg) locker.unlock(); emit iapStateChanged(iapid, icd_connection_state); locker.relock(); - - m_gettingInitialConnectionState = false; } void QIcdEngine::requestUpdate() diff --git a/src/plugins/bearer/icd/qicdengine.h b/src/plugins/bearer/icd/qicdengine.h index a768d84..0d5ba27 100644 --- a/src/plugins/bearer/icd/qicdengine.h +++ b/src/plugins/bearer/icd/qicdengine.h @@ -152,6 +152,7 @@ private: void startListeningStateSignalsForAllConnections(); void doRequestUpdate(QList scanned = QList()); void cancelAsyncConfigurationUpdate(); + void getIcdInitialState(); private: IapMonitor *iapMonitor; @@ -162,7 +163,6 @@ private: QList m_scanResult; bool firstUpdate; - bool m_gettingInitialConnectionState; bool m_scanGoingOn; }; -- cgit v0.12 From dbdbac99ef4ae5243a5f2571b66d4949dbfdc88c Mon Sep 17 00:00:00 2001 From: Aaron McCarthy Date: Mon, 16 Aug 2010 11:14:24 +1000 Subject: Fixed a typo when doing a lock. Conflicts: src/plugins/bearer/icd/qicdengine.cpp --- src/plugins/bearer/icd/qicdengine.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/plugins/bearer/icd/qicdengine.cpp b/src/plugins/bearer/icd/qicdengine.cpp index 87b31da..cae2b7c 100644 --- a/src/plugins/bearer/icd/qicdengine.cpp +++ b/src/plugins/bearer/icd/qicdengine.cpp @@ -821,9 +821,8 @@ void QIcdEngine::getIcdInitialState() ptr = accessPointConfigurations.value(m_onlineIapId); if (ptr) { - ptr->state = QNetworkConfiguration::Active; - QMutexLocker configLocker(&ptr->mutex); + ptr->state = QNetworkConfiguration::Active; configLocker.unlock(); locker.unlock(); -- cgit v0.12 From 6f911718ba51b84ea34b45baf7f8b16954c33371 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy Date: Mon, 16 Aug 2010 11:16:41 +1000 Subject: Mutex is already locked when private member function is called. Conflicts: src/plugins/bearer/icd/qicdengine.cpp --- src/plugins/bearer/icd/qicdengine.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/plugins/bearer/icd/qicdengine.cpp b/src/plugins/bearer/icd/qicdengine.cpp index cae2b7c..3264f15 100644 --- a/src/plugins/bearer/icd/qicdengine.cpp +++ b/src/plugins/bearer/icd/qicdengine.cpp @@ -807,7 +807,6 @@ void QIcdEngine::getIcdInitialState() */ Maemo::Icd icd; QList state_results; - QMutexLocker locker(&mutex); QNetworkConfigurationPrivatePointer ptr; if (icd.state(state_results) && !state_results.isEmpty()) { @@ -825,9 +824,9 @@ void QIcdEngine::getIcdInitialState() ptr->state = QNetworkConfiguration::Active; configLocker.unlock(); - locker.unlock(); + mutex.unlock(); emit configurationChanged(ptr); - locker.relock(); + mutex.lock(); } break; default: -- cgit v0.12 From a1deaf3227ed6bfc086f0142a057d76ccf735e76 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy Date: Thu, 12 Aug 2010 15:17:59 +1000 Subject: Register QNetworkConfigurationPrivatePointer metatype. --- src/network/bearer/qnetworkconfigmanager_p.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/network/bearer/qnetworkconfigmanager_p.cpp b/src/network/bearer/qnetworkconfigmanager_p.cpp index c4f7c00..dd174bf 100644 --- a/src/network/bearer/qnetworkconfigmanager_p.cpp +++ b/src/network/bearer/qnetworkconfigmanager_p.cpp @@ -63,6 +63,7 @@ QNetworkConfigurationManagerPrivate::QNetworkConfigurationManagerPrivate() : pollTimer(0), mutex(QMutex::Recursive), forcedPolling(0), firstUpdate(true) { qRegisterMetaType("QNetworkConfiguration"); + qRegisterMetaType("QNetworkConfigurationPrivatePointer"); moveToThread(QCoreApplicationPrivate::mainThread()); updateConfigurations(); -- cgit v0.12 From d379b4b4d284a1fe5f7cd436d103fbede43b9ca3 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy Date: Thu, 12 Aug 2010 14:48:30 +1000 Subject: Remove version 0.41 of libconninet. --- src/3rdparty/libconninet/AUTHORS | 0 src/3rdparty/libconninet/COPYING | 510 ------ src/3rdparty/libconninet/ChangeLog | 0 src/3rdparty/libconninet/INSTALL | 229 --- src/3rdparty/libconninet/Makefile.am | 49 - src/3rdparty/libconninet/NEWS | 0 src/3rdparty/libconninet/README | 0 src/3rdparty/libconninet/autogen.sh | 3 - src/3rdparty/libconninet/config.guess | 1533 ------------------ src/3rdparty/libconninet/config.sub | 1693 -------------------- src/3rdparty/libconninet/configure.ac | 90 -- src/3rdparty/libconninet/conninet.pc.in | 11 - src/3rdparty/libconninet/debian/changelog | 285 ---- src/3rdparty/libconninet/debian/compat | 1 - src/3rdparty/libconninet/debian/control | 39 - src/3rdparty/libconninet/debian/copyright | 19 - .../libconninet/debian/libconninet0-dev.dirs | 2 - .../libconninet/debian/libconninet0-dev.files | 4 - src/3rdparty/libconninet/debian/libconninet0.dirs | 1 - src/3rdparty/libconninet/debian/libconninet0.files | 1 - src/3rdparty/libconninet/debian/rules | 123 -- src/3rdparty/libconninet/doxygen.cfg.in | 1147 ------------- src/3rdparty/libconninet/src/Makefile.am | 36 - src/3rdparty/libconninet/src/dbusdispatcher.cpp | 611 ------- src/3rdparty/libconninet/src/dbusdispatcher.h | 91 -- src/3rdparty/libconninet/src/iapconf.cpp | 299 ---- src/3rdparty/libconninet/src/iapconf.h | 84 - src/3rdparty/libconninet/src/iapmonitor.cpp | 110 -- src/3rdparty/libconninet/src/iapmonitor.h | 48 - src/3rdparty/libconninet/src/maemo_icd.cpp | 1277 --------------- src/3rdparty/libconninet/src/maemo_icd.h | 182 --- src/3rdparty/libconninet/src/proxyconf.cpp | 315 ---- src/3rdparty/libconninet/src/proxyconf.h | 53 - src/3rdparty/libconninet/tests/Makefile.am | 39 - .../libconninet/tests/ut_dbusdispatcher.cpp | 191 --- src/3rdparty/libconninet/tests/ut_iapconf.cpp | 186 --- src/3rdparty/libconninet/tests/ut_iapmonitor.cpp | 118 -- src/3rdparty/libconninet/tests/ut_maemo_icd.cpp | 274 ---- src/3rdparty/libconninet/tests/ut_proxyconf.cpp | 400 ----- 39 files changed, 10054 deletions(-) delete mode 100644 src/3rdparty/libconninet/AUTHORS delete mode 100644 src/3rdparty/libconninet/COPYING delete mode 100644 src/3rdparty/libconninet/ChangeLog delete mode 100644 src/3rdparty/libconninet/INSTALL delete mode 100644 src/3rdparty/libconninet/Makefile.am delete mode 100644 src/3rdparty/libconninet/NEWS delete mode 100644 src/3rdparty/libconninet/README delete mode 100755 src/3rdparty/libconninet/autogen.sh delete mode 100755 src/3rdparty/libconninet/config.guess delete mode 100755 src/3rdparty/libconninet/config.sub delete mode 100644 src/3rdparty/libconninet/configure.ac delete mode 100644 src/3rdparty/libconninet/conninet.pc.in delete mode 100644 src/3rdparty/libconninet/debian/changelog delete mode 100644 src/3rdparty/libconninet/debian/compat delete mode 100644 src/3rdparty/libconninet/debian/control delete mode 100644 src/3rdparty/libconninet/debian/copyright delete mode 100644 src/3rdparty/libconninet/debian/libconninet0-dev.dirs delete mode 100644 src/3rdparty/libconninet/debian/libconninet0-dev.files delete mode 100644 src/3rdparty/libconninet/debian/libconninet0.dirs delete mode 100644 src/3rdparty/libconninet/debian/libconninet0.files delete mode 100755 src/3rdparty/libconninet/debian/rules delete mode 100644 src/3rdparty/libconninet/doxygen.cfg.in delete mode 100644 src/3rdparty/libconninet/src/Makefile.am delete mode 100644 src/3rdparty/libconninet/src/dbusdispatcher.cpp delete mode 100644 src/3rdparty/libconninet/src/dbusdispatcher.h delete mode 100644 src/3rdparty/libconninet/src/iapconf.cpp delete mode 100644 src/3rdparty/libconninet/src/iapconf.h delete mode 100644 src/3rdparty/libconninet/src/iapmonitor.cpp delete mode 100644 src/3rdparty/libconninet/src/iapmonitor.h delete mode 100644 src/3rdparty/libconninet/src/maemo_icd.cpp delete mode 100644 src/3rdparty/libconninet/src/maemo_icd.h delete mode 100644 src/3rdparty/libconninet/src/proxyconf.cpp delete mode 100644 src/3rdparty/libconninet/src/proxyconf.h delete mode 100644 src/3rdparty/libconninet/tests/Makefile.am delete mode 100644 src/3rdparty/libconninet/tests/ut_dbusdispatcher.cpp delete mode 100644 src/3rdparty/libconninet/tests/ut_iapconf.cpp delete mode 100644 src/3rdparty/libconninet/tests/ut_iapmonitor.cpp delete mode 100644 src/3rdparty/libconninet/tests/ut_maemo_icd.cpp delete mode 100644 src/3rdparty/libconninet/tests/ut_proxyconf.cpp diff --git a/src/3rdparty/libconninet/AUTHORS b/src/3rdparty/libconninet/AUTHORS deleted file mode 100644 index e69de29..0000000 diff --git a/src/3rdparty/libconninet/COPYING b/src/3rdparty/libconninet/COPYING deleted file mode 100644 index b124cf5..0000000 --- a/src/3rdparty/libconninet/COPYING +++ /dev/null @@ -1,510 +0,0 @@ - - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations -below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it -becomes a de-facto standard. To achieve this, non-free programs must -be allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control -compilation and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at least - three years, to give the same user the materials specified in - Subsection 6a, above, for a charge no more than the cost of - performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply, and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License -may add an explicit geographical distribution limitation excluding those -countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms -of the ordinary General Public License). - - To apply these terms, attach the following notices to the library. -It is safest to attach them to the start of each source file to most -effectively convey the exclusion of warranty; and each file should -have at least the "copyright" line and a pointer to where the full -notice is found. - - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or -your school, if any, to sign a "copyright disclaimer" for the library, -if necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James - Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff --git a/src/3rdparty/libconninet/ChangeLog b/src/3rdparty/libconninet/ChangeLog deleted file mode 100644 index e69de29..0000000 diff --git a/src/3rdparty/libconninet/INSTALL b/src/3rdparty/libconninet/INSTALL deleted file mode 100644 index 54caf7c..0000000 --- a/src/3rdparty/libconninet/INSTALL +++ /dev/null @@ -1,229 +0,0 @@ -Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software -Foundation, Inc. - - This file is free documentation; the Free Software Foundation gives -unlimited permission to copy, distribute and modify it. - -Basic Installation -================== - - These are generic installation instructions. - - The `configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation. It uses -those values to create a `Makefile' in each directory of the package. -It may also create one or more `.h' files containing system-dependent -definitions. Finally, it creates a shell script `config.status' that -you can run in the future to recreate the current configuration, and a -file `config.log' containing compiler output (useful mainly for -debugging `configure'). - - It can also use an optional file (typically called `config.cache' -and enabled with `--cache-file=config.cache' or simply `-C') that saves -the results of its tests to speed up reconfiguring. (Caching is -disabled by default to prevent problems with accidental use of stale -cache files.) - - If you need to do unusual things to compile the package, please try -to figure out how `configure' could check whether to do them, and mail -diffs or instructions to the address given in the `README' so they can -be considered for the next release. If you are using the cache, and at -some point `config.cache' contains results you don't want to keep, you -may remove or edit it. - - The file `configure.ac' (or `configure.in') is used to create -`configure' by a program called `autoconf'. You only need -`configure.ac' if you want to change it or regenerate `configure' using -a newer version of `autoconf'. - -The simplest way to compile this package is: - - 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. If you're - using `csh' on an old version of System V, you might need to type - `sh ./configure' instead to prevent `csh' from trying to execute - `configure' itself. - - Running `configure' takes awhile. While running, it prints some - messages telling which features it is checking for. - - 2. Type `make' to compile the package. - - 3. Optionally, type `make check' to run any self-tests that come with - the package. - - 4. Type `make install' to install the programs and any data files and - documentation. - - 5. You can remove the program binaries and object files from the - source code directory by typing `make clean'. To also remove the - files that `configure' created (so you can compile the package for - a different kind of computer), type `make distclean'. There is - also a `make maintainer-clean' target, but that is intended mainly - for the package's developers. If you use it, you may have to get - all sorts of other programs in order to regenerate files that came - with the distribution. - -Compilers and Options -===================== - - Some systems require unusual options for compilation or linking that -the `configure' script does not know about. Run `./configure --help' -for details on some of the pertinent environment variables. - - You can give `configure' initial values for configuration parameters -by setting variables in the command line or in the environment. Here -is an example: - - ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix - - *Note Defining Variables::, for more details. - -Compiling For Multiple Architectures -==================================== - - You can compile the package for more than one kind of computer at the -same time, by placing the object files for each architecture in their -own directory. To do this, you must use a version of `make' that -supports the `VPATH' variable, such as GNU `make'. `cd' to the -directory where you want the object files and executables to go and run -the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. - - If you have to use a `make' that does not support the `VPATH' -variable, you have to compile the package for one architecture at a -time in the source code directory. After you have installed the -package for one architecture, use `make distclean' before reconfiguring -for another architecture. - -Installation Names -================== - - By default, `make install' will install the package's files in -`/usr/local/bin', `/usr/local/man', etc. You can specify an -installation prefix other than `/usr/local' by giving `configure' the -option `--prefix=PATH'. - - You can specify separate installation prefixes for -architecture-specific files and architecture-independent files. If you -give `configure' the option `--exec-prefix=PATH', the package will use -PATH as the prefix for installing programs and libraries. -Documentation and other data files will still use the regular prefix. - - In addition, if you use an unusual directory layout you can give -options like `--bindir=PATH' to specify different values for particular -kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. - - If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving `configure' the -option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. - -Optional Features -================= - - Some packages pay attention to `--enable-FEATURE' options to -`configure', where FEATURE indicates an optional part of the package. -They may also pay attention to `--with-PACKAGE' options, where PACKAGE -is something like `gnu-as' or `x' (for the X Window System). The -`README' should mention any `--enable-' and `--with-' options that the -package recognizes. - - For packages that use the X Window System, `configure' can usually -find the X include and library files automatically, but if it doesn't, -you can use the `configure' options `--x-includes=DIR' and -`--x-libraries=DIR' to specify their locations. - -Specifying the System Type -========================== - - There may be some features `configure' cannot figure out -automatically, but needs to determine by the type of machine the package -will run on. Usually, assuming the package is built to be run on the -_same_ architectures, `configure' can figure that out, but if it prints -a message saying it cannot guess the machine type, give it the -`--build=TYPE' option. TYPE can either be a short name for the system -type, such as `sun4', or a canonical name which has the form: - - CPU-COMPANY-SYSTEM - -where SYSTEM can have one of these forms: - - OS KERNEL-OS - - See the file `config.sub' for the possible values of each field. If -`config.sub' isn't included in this package, then this package doesn't -need to know the machine type. - - If you are _building_ compiler tools for cross-compiling, you should -use the `--target=TYPE' option to select the type of system they will -produce code for. - - If you want to _use_ a cross compiler, that generates code for a -platform different from the build platform, you should specify the -"host" platform (i.e., that on which the generated programs will -eventually be run) with `--host=TYPE'. - -Sharing Defaults -================ - - If you want to set default values for `configure' scripts to share, -you can create a site shell script called `config.site' that gives -default values for variables like `CC', `cache_file', and `prefix'. -`configure' looks for `PREFIX/share/config.site' if it exists, then -`PREFIX/etc/config.site' if it exists. Or, you can set the -`CONFIG_SITE' environment variable to the location of the site script. -A warning: not all `configure' scripts look for a site script. - -Defining Variables -================== - - Variables not defined in a site shell script can be set in the -environment passed to `configure'. However, some packages may run -configure again during the build, and the customized values of these -variables may be lost. In order to avoid this problem, you should set -them in the `configure' command line, using `VAR=value'. For example: - - ./configure CC=/usr/local2/bin/gcc - -will cause the specified gcc to be used as the C compiler (unless it is -overridden in the site shell script). - -`configure' Invocation -====================== - - `configure' recognizes the following options to control how it -operates. - -`--help' -`-h' - Print a summary of the options to `configure', and exit. - -`--version' -`-V' - Print the version of Autoconf used to generate the `configure' - script, and exit. - -`--cache-file=FILE' - Enable the cache: use and save the results of the tests in FILE, - traditionally `config.cache'. FILE defaults to `/dev/null' to - disable caching. - -`--config-cache' -`-C' - Alias for `--cache-file=config.cache'. - -`--quiet' -`--silent' -`-q' - Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to `/dev/null' (any error - messages will still be shown). - -`--srcdir=DIR' - Look for the package's source code in directory DIR. Usually - `configure' can determine that directory automatically. - -`configure' also accepts some other, not widely useful, options. Run -`configure --help' for more details. - diff --git a/src/3rdparty/libconninet/Makefile.am b/src/3rdparty/libconninet/Makefile.am deleted file mode 100644 index 250637a..0000000 --- a/src/3rdparty/libconninet/Makefile.am +++ /dev/null @@ -1,49 +0,0 @@ -SUBDIRS = src tests - -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = conninet.pc - -MAINTAINERCLEANFILES = \ - Makefile.in config.h.in configure \ - install-sh ltmain.sh missing mkinstalldirs \ - config.log config.status config.guess config.sub \ - build-stamp compile depcomp acinclude.m4 aclocal.m4 \ - debian/files \ - debian/libconninet0.postinst.debhelper \ - debian/libconninet0.postrm.debhelper \ - debian/libconninet0.substvars - -EXTRA_DIST = \ - debian/changelog \ - debian/compat \ - debian/control \ - debian/copyright \ - debian/libconninet0-dev.dirs \ - debian/libconninet0-dev.files \ - debian/libconninet0.dirs \ - debian/libconninet0.files \ - debian/rules - -# get rid of debian build dirs -maintainer-clean-local: - -rm -rf debian/build debian/tmp \ - debian/libconninet0 \ - debian/libconninet0-dev \ - debian/libconninet0-dbg - -if DOXYGEN_DOCS_ENABLED - DOXYGEN_LINE = $(DOXYGEN) doxygen.cfg -else - DOXYGEN_LINE = -endif - -.PHONY : doc - -doc: - $(DOXYGEN_LINE) - -deb: dist - -mkdir $(top_builddir)/debian-build - cd $(top_builddir)/debian-build && tar zxf ../$(top_builddir)/$(PACKAGE)-$(VERSION).tar.gz - cd $(top_builddir)/debian-build/$(PACKAGE)-$(VERSION) && dpkg-buildpackage -rfakeroot -sa -D - -rm -rf $(top_builddir)/debian-build/$(PACKAGE)-$(VERSION) diff --git a/src/3rdparty/libconninet/NEWS b/src/3rdparty/libconninet/NEWS deleted file mode 100644 index e69de29..0000000 diff --git a/src/3rdparty/libconninet/README b/src/3rdparty/libconninet/README deleted file mode 100644 index e69de29..0000000 diff --git a/src/3rdparty/libconninet/autogen.sh b/src/3rdparty/libconninet/autogen.sh deleted file mode 100755 index a8fd885..0000000 --- a/src/3rdparty/libconninet/autogen.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -autoreconf --verbose --install --force diff --git a/src/3rdparty/libconninet/config.guess b/src/3rdparty/libconninet/config.guess deleted file mode 100755 index e3a2116..0000000 --- a/src/3rdparty/libconninet/config.guess +++ /dev/null @@ -1,1533 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 -# Free Software Foundation, Inc. - -timestamp='2009-06-10' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner . -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ELF__ - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build - SUN_ARCH="i386" - # If there is a compiler, see if it is configured for 64-bit objects. - # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. - # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - SUN_ARCH="x86_64" - fi - fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[456]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep -q __LP64__ - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - case ${UNAME_MACHINE} in - pc98) - echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - *:Interix*:[3456]*) - case ${UNAME_MACHINE} in - x86) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; - EM64T | authenticamd | genuineintel) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; - IA64) - echo ia64-unknown-interix${UNAME_RELEASE} - exit ;; - esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - arm*:Linux:*:*) - eval $set_cc_for_build - if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_EABI__ - then - echo ${UNAME_MACHINE}-unknown-linux-gnu - else - echo ${UNAME_MACHINE}-unknown-linux-gnueabi - fi - exit ;; - avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - cris:Linux:*:*) - echo cris-axis-linux-gnu - exit ;; - crisv32:Linux:*:*) - echo crisv32-axis-linux-gnu - exit ;; - frv:Linux:*:*) - echo frv-unknown-linux-gnu - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - or32:Linux:*:*) - echo or32-unknown-linux-gnu - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit ;; - padre:Linux:*:*) - echo sparc-unknown-linux-gnu - exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu - exit ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit ;; - xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - i*86:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent - # problems with other programs or directories called `ld' in the path. - # Set LC_ALL=C to ensure ld outputs messages in English. - ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ - | sed -ne '/supported targets:/!d - s/[ ][ ]*/ /g - s/.*supported targets: *// - s/ .*// - p'` - case "$ld_supported_targets" in - elf32-i386) - TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" - ;; - esac - # Determine whether the default compiler is a.out or elf - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - #ifdef __ELF__ - # ifdef __GLIBC__ - # if __GLIBC__ >= 2 - LIBC=gnu - # else - LIBC=gnulibc1 - # endif - # else - LIBC=gnulibc1 - # endif - #else - #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) - LIBC=gnu - #else - LIBC=gnuaout - #endif - #endif - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^LIBC/{ - s: ::g - p - }'`" - test x"${LIBC}" != x && { - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit - } - test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } - ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i586. - # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that - # this is a cross-build. - echo i586-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - NCR*:*:4.2:* | MPRAS*:*:4.2:*) - OS_REL='.3' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} - exit ;; - SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} - exit ;; - SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - case $UNAME_PROCESSOR in - unknown) UNAME_PROCESSOR=powerpc ;; - esac - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NSE-?:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; - i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; - i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros - exit ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/src/3rdparty/libconninet/config.sub b/src/3rdparty/libconninet/config.sub deleted file mode 100755 index eb0389a..0000000 --- a/src/3rdparty/libconninet/config.sub +++ /dev/null @@ -1,1693 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 -# Free Software Foundation, Inc. - -timestamp='2009-06-11' - -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.sub ($timestamp) - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit ;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ - uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ - kopensolaris*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray) - os= - basic_machine=$1 - ;; - -bluegene*) - os=-cnk - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ - | bfin \ - | c4x | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | fido | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nios | nios2 \ - | ns16k | ns32k \ - | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ - | pyramid \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu | strongarm \ - | tahoe | thumb | tic4x | tic80 | tron \ - | v850 | v850e \ - | we32k \ - | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12) - # Motorola 68HC11/12. - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - ms1) - basic_machine=mt-unknown - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ - | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nios-* | nios2-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ - | pyramid-* \ - | romp-* | rs6000-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ - | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ - | tron-* \ - | v850-* | v850e-* | vax-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - mingw32) - basic_machine=i386-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc) basic_machine=powerpc-unknown - ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sde) - basic_machine=mipsisa32-sde - os=-elf - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh5el) - basic_machine=sh5le-unknown - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - tic54x | c54x*) - basic_machine=tic54x-unknown - os=-coff - ;; - tic55x | c55x*) - basic_machine=tic55x-unknown - os=-coff - ;; - tic6x | c6x*) - basic_machine=tic6x-unknown - os=-coff - ;; - tile*) - basic_machine=tile-unknown - os=-linux-gnu - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - z80-*-coff) - basic_machine=z80-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - mmix) - basic_machine=mmix-knuth - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ - | -kopensolaris* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -openbsd* | -solidbsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* | -cegcc* \ - | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -aros*) - os=-aros - ;; - -kaos*) - os=-kaos - ;; - -zvmoe) - os=-zvmoe - ;; - -dicos*) - os=-dicos - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - score-*) - os=-elf - ;; - spu-*) - os=-elf - ;; - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 - ;; - m68*-cisco) - os=-aout - ;; - mep-*) - os=-elf - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-haiku) - os=-haiku - ;; - *-ibm) - os=-aix - ;; - *-knuth) - os=-mmixware - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -cnk*|-aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/src/3rdparty/libconninet/configure.ac b/src/3rdparty/libconninet/configure.ac deleted file mode 100644 index 2a383ee..0000000 --- a/src/3rdparty/libconninet/configure.ac +++ /dev/null @@ -1,90 +0,0 @@ -AC_INIT([libconninet], patsubst(esyscmd([dpkg-parsechangelog | sed -n '/^Version: \(.*\)$/ {s//\1/;p}']), [ -]), [jukka.rissanen@nokia.com]) -AM_INIT_AUTOMAKE([foreign]) - -AC_PROG_CXX -AC_PROG_LIBTOOL - -AC_ARG_ENABLE(docs, [ --enable-docs Build DOXYGEN documentation (requires Doxygen)],enable_docs=$enableval,enable_docs=auto) - -AC_PATH_PROG(DOXYGEN, doxygen, no) -AC_MSG_CHECKING([whether to build Doxygen documentation]) - -if test x$DOXYGEN = xno ; then - have_doxygen=no -else - have_doxygen=yes -fi -if test x$enable_docs = xauto ; then - if test x$have_doxygen = xno ; then - enable_docs=no - else - enable_docs=yes - fi -fi -if test x$enable_docs = xyes; then - if test x$have_doxygen = xno; then - AC_MSG_ERROR([Building Doxygen docs explicitly required, but Doxygen not found]) - else - AC_MSG_RESULT(yes) - fi -else - AC_MSG_RESULT(no) -fi - -AM_CONDITIONAL(DOXYGEN_DOCS_ENABLED, test x$enable_docs = xyes) -AC_SUBST(DOXYGEN) - -PKG_CHECK_MODULES(GLIB, glib-2.0) -AC_SUBST(GLIB_CFLAGS) -AC_SUBST(GLIB_LIBS) - -PKG_CHECK_MODULES(QTCORE, QtCore) -AC_SUBST(QTCORE_CFLAGS) -AC_SUBST(QTCORE_LIBS) - -PKG_CHECK_MODULES(QTNETWORK, QtNetwork) -AC_SUBST(QTNETWORK_CFLAGS) -AC_SUBST(QTNETWORK_LIBS) - -PKG_CHECK_MODULES(QTDBUS, QtDBus) -AC_SUBST(QTDBUS_CFLAGS) -AC_SUBST(QTDBUS_LIBS) - -PKG_CHECK_MODULES(QTTEST, QtTest) -AC_SUBST(QTTEST_CFLAGS) -AC_SUBST(QTTEST_LIBS) - -PKG_CHECK_MODULES(DBUS, dbus-glib-1) -AC_SUBST(DBUS_CFLAGS) -AC_SUBST(DBUS_LIBS) - -PKG_CHECK_MODULES(CONNSETTINGS, connsettings) -AC_SUBST(CONNSETTINGS_CFLAGS) -AC_SUBST(CONNSETTINGS_LIBS) - -PKG_CHECK_MODULES(OSSO_IC, osso-ic) -AC_SUBST(OSSO_IC_CFLAGS) -AC_SUBST(OSSO_IC_LIBS) - -PKG_CHECK_MODULES(ICD_DEV, icd2) -AC_SUBST(ICD_DEV_CFLAGS) -AC_SUBST(ICD_DEV_LIBS) - -PKG_CHECK_MODULES(GCONF, gconf-2.0) -AC_SUBST(GCONF_CFLAGS) -AC_SUBST(GCONF_LIBS) - -PKG_CHECK_MODULES(QGCONF, gq-gconf) -AC_SUBST(QGCONF_CFLAGS) -AC_SUBST(QGCONF_LIBS) - -CONCFLAGS="-Wall -Werror -Wmissing-prototypes" -AC_SUBST(CONCFLAGS) - -AC_CONFIG_FILES([Makefile \ - src/Makefile \ - tests/Makefile \ - conninet.pc \ - doxygen.cfg]) -AC_OUTPUT diff --git a/src/3rdparty/libconninet/conninet.pc.in b/src/3rdparty/libconninet/conninet.pc.in deleted file mode 100644 index 68cdee0..0000000 --- a/src/3rdparty/libconninet/conninet.pc.in +++ /dev/null @@ -1,11 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: libconninet -Description: Internet Connectivity support library -Version: @VERSION@ -Requires: dbus-1 >= 0.60 glib-2.0 QtCore QtDBus QtGui -Libs: -lconninet -Cflags: -I${includedir}/conninet diff --git a/src/3rdparty/libconninet/debian/changelog b/src/3rdparty/libconninet/debian/changelog deleted file mode 100644 index 436d318..0000000 --- a/src/3rdparty/libconninet/debian/changelog +++ /dev/null @@ -1,285 +0,0 @@ -libconninet (0.41+0m6) unstable; urgency=low - - * This entry has been added by BIFH queue processor - version has been changed to 0.41+0m6 - - -- Qing Jin Thu, 15 Jul 2010 15:56:38 +0300 - -libconninet (0.41) unstable; urgency=low - - * Fixes: NB#175098 - Qt4.7 Webkit crashes when bearer API QNetworkSession - constructor calls QNetworkSession::syncStateWithInterface() which in turn - calls Maemo::state() and Maemo::addrinfo() and webkit expects that event - loop is not run but those function process main loop events. - Now Maemo::state() and Maemo::addrinfo() are changed to be synchronous - and fully blocking functions. The old non-blocking versions are called - Maemo::state_non_blocking() and Maemo::addrinfo_non_blocking(). - - -- Jukka Rissanen Wed, 14 Jul 2010 10:12:47 +0300 - -libconninet (0.40) unstable; urgency=low - - * Fixes: NB#167465 - Unable to open network connection using libbearer - - -- Jukka Rissanen Tue, 11 May 2010 10:47:10 +0300 - -libconninet (0.39) unstable; urgency=low - - * Fixes: NB#167982 - initialize DBus vtable in DBusDispatcher. - - -- Aapo Makela Mon, 10 May 2010 14:42:39 +0300 - -libconninet (0.38) unstable; urgency=low - - * Changing icd2 connect_req to be synchronous as the check for - returned connect signal did not work correctly, this caused a - long timeout when connect() was called. - * Scan sometimes missed results and did not return them to caller. - * HTTP proxy settings were not set correctly. - - -- Jukka Rissanen Thu, 15 Apr 2010 11:25:06 +0300 - -libconninet (0.37) unstable; urgency=low - - * Make proxy config reference counting atomic. - - -- Jukka Rissanen Wed, 3 Mar 2010 13:23:08 +0200 - -libconninet (0.36) unstable; urgency=low - - * Fixes: NB#157586 - Cleanup dbus listener when WLAN scanning object is - deleted. - - -- Jukka Rissanen Fri, 26 Feb 2010 13:30:41 +0200 - -libconninet (0.35) unstable; urgency=low - - * Fixes: NB#156883 - libconninet fails to build under the Platform SDK (SB2) - - -- Jukka Rissanen Thu, 18 Feb 2010 12:14:40 +0200 - -libconninet (0.34) unstable; urgency=low - - * Coverity fix - - -- Jukka Rissanen Tue, 16 Feb 2010 16:38:00 +0200 - -libconninet (0.33) unstable; urgency=low - - * Added API to update Qt proxy config. - - -- Jukka Rissanen Tue, 26 Jan 2010 15:48:36 +0200 - -libconninet (0.32) unstable; urgency=low - - * Fixed IAPConf to unset value when set value is invalid. - * Updated IAPMonitor to use libconnsettings. - - -- Aapo Makela Wed, 03 Feb 2010 07:32:45 +0200 - -libconninet (0.31) unstable; urgency=low - - * Fixes: NB#154892 - Check nulls in IAPConf. - - -- Aapo Makela Mon, 01 Feb 2010 09:32:06 +0200 - -libconninet (0.30) unstable; urgency=low - - * Updated IAPConf to use libconnsettings. - - -- Aapo Makela Fri, 29 Jan 2010 12:58:03 +0200 - -libconninet (0.29) unstable; urgency=low - - * Fixed dependencies - - -- Jukka Rissanen Fri, 15 Jan 2010 10:16:07 +0200 - -libconninet (0.28) unstable; urgency=low - - * Get rid of libdui dependency - - -- Jukka Rissanen Wed, 13 Jan 2010 09:56:26 +0200 - -libconninet (0.27) unstable; urgency=low - - * Insert new pending calls to the list in DBusDispatcher. - - -- Aapo Makela Tue, 22 Dec 2009 14:27:32 +0200 - -libconninet (0.26) unstable; urgency=low - - * Added possibility to specify different signal path for DBusDispatcher. - - -- Aapo Makela Wed, 25 Nov 2009 14:27:34 +0200 - -libconninet (0.25) unstable; urgency=low - - * Fixes: NB#146450 - All scan results were not returned to the caller. - - -- Jukka Rissanen Mon, 16 Nov 2009 17:23:15 +0200 - -libconninet (0.24) unstable; urgency=low - - * Wait all scan results for all network types in Maemo::Icd::scan() - - -- Jukka Rissanen Fri, 6 Nov 2009 14:45:23 +0200 - -libconninet (0.23) unstable; urgency=low - - * Fixes: NB#143361 - Assert failure in session class for GPRS IAP. - - -- Jukka Rissanen Mon, 19 Oct 2009 16:00:14 +0300 - -libconninet (0.22) unstable; urgency=low - - * Fixed the error checking if scan returns 0 results. - - -- Jukka Rissanen Wed, 7 Oct 2009 13:50:27 +0300 - -libconninet (0.21) unstable; urgency=low - - * Support multiple DBusDispatcher classes at the same time. This is - required by Maemo::Icd class so that multiple instances of it can - be used the same time. - - -- Jukka Rissanen Mon, 5 Oct 2009 16:33:43 +0300 - -libconninet (0.20) unstable; urgency=low - - * Fixed memory leak in IAPConf::setValue() - - -- Jukka Rissanen Fri, 2 Oct 2009 13:02:21 +0300 - -libconninet (0.19) unstable; urgency=low - - * Fixed connect_req to one specific IAP in Icd class. - - -- Jukka Rissanen Tue, 29 Sep 2009 17:02:46 +0300 - -libconninet (0.18) unstable; urgency=low - - * Make sure the library will not abort in Icd class if scan does - not return any results. - - -- Jukka Rissanen Tue, 22 Sep 2009 17:00:12 +0300 - -libconninet (0.17) unstable; urgency=low - - * Added IAP monitoring support. - - -- Jukka Rissanen Mon, 21 Sep 2009 16:29:31 +0300 - -libconninet (0.16) unstable; urgency=low - - * Disabled the old osso-ic dbus interface as it is currently not used. - * Fixed the addrinfo request, now addresses are returned correctly to - the caller. - - -- Jukka Rissanen Thu, 17 Sep 2009 15:56:13 +0300 - -libconninet (0.15) unstable; urgency=low - - * Enabling state_req, statistics_req and addrinfo_req support - functions in Maemo::Icd as the corresponding DBUS API functions are - fixed in icd2 v0.89 - - -- Jukka Rissanen Fri, 24 Jul 2009 15:23:02 +0300 - -libconninet (0.14) unstable; urgency=low - - * Icd statistics support added. - * Icd address information support added. - * Icd scan method does not return the final (and empty) result any more. - * Added initial unit test implementation for Icd class. - * Some of the status functions in Icd class disabled because of issues - in icd2 and the dbus api. - - -- Jukka Rissanen Thu, 23 Jul 2009 11:03:05 +0300 - -libconninet (0.13) unstable; urgency=low - - * Added API to get all the configured IAPs. - - -- Jukka Rissanen Tue, 21 Jul 2009 09:47:18 +0300 - -libconninet (0.12) unstable; urgency=low - - * Replaced duivaluespace by Dui in pkg-config file because the - duivaluespace is deprecated. - - -- Jukka Rissanen Mon, 20 Jul 2009 16:00:10 +0300 - -libconninet (0.11) unstable; urgency=low - - * Using libdui instead of libduivaluespace because it is deprecated. - * The IAPConf::clear() uses native gconf API instead of launching gconftool - * Check that state_req call returned list and the list contains entries - before trying to access it. - - -- Jukka Rissanen Mon, 20 Jul 2009 14:55:15 +0300 - -libconninet (0.10) unstable; urgency=low - - * connect() did not return ok when connection succeeded. - - -- Jukka Rissanen Thu, 25 Jun 2009 09:31:21 +0300 - -libconninet (0.9) unstable; urgency=low - - * Connection timeout set to 2.5min, same as in fremantle. - - -- Jukka Rissanen Wed, 17 Jun 2009 13:36:40 +0300 - -libconninet (0.8) unstable; urgency=low - - * Fix state_req signal received from Icd - - -- Jukka Rissanen Thu, 11 Jun 2009 17:19:33 +0300 - -libconninet (0.7) unstable; urgency=low - - * Icd disconnect and select reqs are made synchronous as we do not - wait the return status. The previous async version was causing core - dumps if Icd class was destroyed too early. - - -- Jukka Rissanen Thu, 11 Jun 2009 11:52:36 +0300 - -libconninet (0.6) unstable; urgency=low - - * Fixed the libconninet0-dev dependencies. - - -- Jukka Rissanen Mon, 8 Jun 2009 10:47:56 +0300 - -libconninet (0.5) unstable; urgency=low - - * Fixed missing QObject connect functions. - * Fixed IAPConf to return invalid QVariant if the value does not exist. - - -- Jukka Rissanen Mon, 01 Jun 2009 13:58:53 +0300 - -libconninet (0.4) unstable; urgency=low - - * Fixed QObject signal setting for Maemo::Icd - - -- Jukka Rissanen Wed, 20 May 2009 13:51:11 +0300 - -libconninet (0.3) unstable; urgency=low - - * Refactoring classes - * Added IAPConf class. - - -- Jukka Rissanen Thu, 14 May 2009 13:24:11 +0300 - -libconninet (0.2) unstable; urgency=low - - * Fixed pkgconfig file which had wrong dependency - * Added DBus array and struct support to DBusDispatcher. - - -- Jukka Rissanen Wed, 13 May 2009 12:11:00 +0300 - -libconninet (0.1) unstable; urgency=low - - * Initial Release. - - -- Jukka Rissanen Tue, 12 May 2009 16:10:27 +0200 diff --git a/src/3rdparty/libconninet/debian/compat b/src/3rdparty/libconninet/debian/compat deleted file mode 100644 index b8626c4..0000000 --- a/src/3rdparty/libconninet/debian/compat +++ /dev/null @@ -1 +0,0 @@ -4 diff --git a/src/3rdparty/libconninet/debian/control b/src/3rdparty/libconninet/debian/control deleted file mode 100644 index 2db660f..0000000 --- a/src/3rdparty/libconninet/debian/control +++ /dev/null @@ -1,39 +0,0 @@ -Source: libconninet -Priority: optional -Maintainer: Jukka Rissanen -Build-Depends: debhelper (>= 4.0.0), autotools-dev, libglib2.0-dev (>= 2.8), - libdbus-1-dev (>= 0.60), libconnsettings0-dev (>= 0.4), icd2-osso-ic-dev, - icd2-dev, libqt4-dev, libgconf2-dev (>> 2.6.4), libgq-gconf-dev -Standards-Version: 3.6.2 -Section: libs - -Package: libconninet0-dev -Section: libdevel -Architecture: any -Depends: libconninet0 (= ${Source-Version}), libdbus-1-dev (>= 0.60), - libglib2.0-dev (>= 2.8), libconnsettings0-dev (>= 0.4), libqt4-dev, - icd2-osso-ic-dev, icd2-dev, libgconf2-dev (>> 2.6.4), libgq-gconf-dev -Description: Internet Connectivity support library development files - Internet Connectivity support library (libconninet) provides common - support functions for connecting to icd2 and accessing configuration - data. - . - This package contains the header files. - -Package: libconninet0 -Section: libs -Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends} -Description: Internet Connectivity support library - Internet Connectivity support library (libconninet) provides common - support functions for connecting to icd2 and accessing configuration - data. - . - This package contains the shared libraries. - -Package: libconninet0-dbg -Section: libs -Architecture: any -Depends: libconninet0 (= ${Source-Version}), ${shlibs:Depends}, ${misc:Depends} -Description: Debug symbols for the Internet Connectivity support library - Internet Connectivity support library (libconninet) debug symbols. diff --git a/src/3rdparty/libconninet/debian/copyright b/src/3rdparty/libconninet/debian/copyright deleted file mode 100644 index 97e8e68..0000000 --- a/src/3rdparty/libconninet/debian/copyright +++ /dev/null @@ -1,19 +0,0 @@ -libconninet - Internet Connectivity support library - -Copyright (C) 2009 Nokia Corporation. All rights reserved. - -Contact: Jukka Rissanen - -This library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License version 2.1 -as published by the Free Software Foundation. - -This library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -02110-1301 USA diff --git a/src/3rdparty/libconninet/debian/libconninet0-dev.dirs b/src/3rdparty/libconninet/debian/libconninet0-dev.dirs deleted file mode 100644 index 4418816..0000000 --- a/src/3rdparty/libconninet/debian/libconninet0-dev.dirs +++ /dev/null @@ -1,2 +0,0 @@ -usr/lib -usr/include diff --git a/src/3rdparty/libconninet/debian/libconninet0-dev.files b/src/3rdparty/libconninet/debian/libconninet0-dev.files deleted file mode 100644 index 78bbac8..0000000 --- a/src/3rdparty/libconninet/debian/libconninet0-dev.files +++ /dev/null @@ -1,4 +0,0 @@ -usr/include/* -usr/lib/lib*.so -usr/lib/pkgconfig/* -usr/share/pkgconfig/* diff --git a/src/3rdparty/libconninet/debian/libconninet0.dirs b/src/3rdparty/libconninet/debian/libconninet0.dirs deleted file mode 100644 index 6845771..0000000 --- a/src/3rdparty/libconninet/debian/libconninet0.dirs +++ /dev/null @@ -1 +0,0 @@ -usr/lib diff --git a/src/3rdparty/libconninet/debian/libconninet0.files b/src/3rdparty/libconninet/debian/libconninet0.files deleted file mode 100644 index d0dbfd1..0000000 --- a/src/3rdparty/libconninet/debian/libconninet0.files +++ /dev/null @@ -1 +0,0 @@ -usr/lib/lib*.so.* diff --git a/src/3rdparty/libconninet/debian/rules b/src/3rdparty/libconninet/debian/rules deleted file mode 100755 index 2a3d395..0000000 --- a/src/3rdparty/libconninet/debian/rules +++ /dev/null @@ -1,123 +0,0 @@ -#!/usr/bin/make -f -# -*- makefile -*- -# Sample debian/rules that uses debhelper. -# This file was originally written by Joey Hess and Craig Small. -# As a special exception, when this file is copied by dh-make into a -# dh-make output file, you may use that output file without restriction. -# This special exception was added by Craig Small in version 0.37 of dh-make. - -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 - - -# These are used for cross-compiling and for saving the configure script -# from having to guess our platform (since we know it already) -DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) -DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) - - -CFLAGS = -Wall -g - -ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) - CFLAGS += -O0 -else - CFLAGS += -O2 -endif - -# shared library versions, option 1 -#version=2.0.5 -#major=2 -# option 2, assuming the library is created as src/.libs/libfoo.so.2.0.5 or so -version=`ls src/.libs/lib*.so.* | \ - awk '{if (match($$0,/[0-9]+\.[0-9]+\.[0-9]+$$/)) print substr($$0,RSTART)}'` -major=`ls src/.libs/lib*.so.* | \ - awk '{if (match($$0,/\.so\.[0-9]+$$/)) print substr($$0,RSTART+4)}'` - -configure: configure.ac debian/changelog - -./autogen.sh - -config.status: configure - dh_testdir - # Add here commands to configure the package. - CFLAGS="$(CFLAGS)" ./configure \ - --host=$(DEB_HOST_GNU_TYPE) \ - --build=$(DEB_BUILD_GNU_TYPE) \ - --prefix=/usr \ - --mandir=\$${prefix}/share/man \ - --infodir=\$${prefix}/share/info - - -build: build-stamp -build-stamp: config.status - dh_testdir - - # Add here commands to compile the package. - $(MAKE) - - touch build-stamp - -clean: - dh_testdir - dh_testroot - rm -f build-stamp - - # Add here commands to clean up after the build process. - -$(MAKE) distclean -ifneq "$(wildcard /usr/share/misc/config.sub)" "" - cp -f /usr/share/misc/config.sub config.sub -endif -ifneq "$(wildcard /usr/share/misc/config.guess)" "" - cp -f /usr/share/misc/config.guess config.guess -endif - - - dh_clean - -install: build - dh_testdir - dh_testroot - dh_clean -k - dh_installdirs - - # Add here commands to install the package into debian/tmp - $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp - - -# Build architecture-independent files here. -binary-indep: build install -# We have nothing to do by default. - -# Build architecture-dependent files here. -binary-arch: build install - dh_testdir - dh_testroot - dh_movefiles - dh_installchangelogs ChangeLog - dh_installdocs - dh_installexamples -# dh_install -# dh_installmenu -# dh_installdebconf -# dh_installlogrotate -# dh_installemacsen -# dh_installpam -# dh_installmime -# dh_installinit -# dh_installcron -# dh_installinfo - dh_installman - dh_link - dh_strip --dbg-package=libconninet0 - dh_compress - dh_fixperms -# dh_perl -# dh_python - dh_makeshlibs - dh_installdeb - dh_shlibdeps - dh_gencontrol - dh_md5sums - dh_builddeb - -binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary install diff --git a/src/3rdparty/libconninet/doxygen.cfg.in b/src/3rdparty/libconninet/doxygen.cfg.in deleted file mode 100644 index 80a4c8d..0000000 --- a/src/3rdparty/libconninet/doxygen.cfg.in +++ /dev/null @@ -1,1147 +0,0 @@ -# Doxyfile 1.3.7 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = "Internet Connectivity Support Library" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = @VERSION@ - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = doc - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 2 levels of 10 sub-directories under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of source -# files, where putting all generated files in the same directory would otherwise -# cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, -# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en -# (Japanese with English messages), Korean, Korean-en, Norwegian, Polish, Portuguese, -# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is used -# as the annotated text. Otherwise, the brief description is used as-is. If left -# blank, the following values are used ("$name" is automatically replaced with the -# name of the entity): "The $name class" "The $name widget" "The $name file" -# "is" "provides" "specifies" "contains" "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited -# members of a class in the documentation of that class as if those members were -# ordinary class members. Constructors, destructors and assignment operators of -# the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = YES - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = YES - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = YES - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = conic/conic.h \ - conic/conicconnection.h \ - conic/conicconnectionevent.h \ - conic/conicevent.h \ - conic/coniciap.h \ - conic/conicstatisticsevent.h - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp -# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories -# that are symbolic links (a Unix filesystem feature) are excluded from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. - -INPUT_FILTER = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = YES - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = YES - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse the -# parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or -# super classes. Setting the tag to NO turns the diagrams off. Note that this -# option is superseded by the HAVE_DOT option below. This is only a fallback. It is -# recommended to install and use dot, since it yields more powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found on the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes that -# lay further from the root node will be omitted. Note that setting this option to -# 1 or 2 may greatly reduce the computation time needed for large code bases. Also -# note that a graph may be further truncated if the graph's image dimensions are -# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). -# If 0 is used for the depth value (the default), the graph is not depth-constrained. - -MAX_DOT_GRAPH_DEPTH = 0 - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/src/3rdparty/libconninet/src/Makefile.am b/src/3rdparty/libconninet/src/Makefile.am deleted file mode 100644 index be7a1e5..0000000 --- a/src/3rdparty/libconninet/src/Makefile.am +++ /dev/null @@ -1,36 +0,0 @@ -DEFS = -DDBUS_API_SUBJECT_TO_CHANGE -DGCONF_DISABLE_DEPRECATED -INCLUDES = @GLIB_CFLAGS@ @DBUS_CFLAGS@ @GCONF_CFLAGS@ @OSSO_IC_CFLAGS@ @ICD_DEV_CFLAGS@ @QTCORE_CFLAGS@ @QTNETWORK_CFLAGS@ @QTDBUS_CFLAGS@ @QGCONF_CFLAGS@ @CONNSETTINGS_CFLAGS@ -LIBS = @GLIB_LIBS@ @DBUS_LIBS@ @GCONF_LIBS@ @OSSO_IC_LIBS@ @ICD_DEV_LIBS@ @QTCORE_LIBS@ @QTDBUS_LIBS@ @QTNETWORK_CFLAGS@ @QGCONF_LIBS@ @CONNSETTINGS_LIBS@ - -AM_CFLAGS = $(CONCFLAGS) - -lib_LTLIBRARIES = libconninet.la -libconninet_la_SOURCES = \ - maemo_icd.cpp \ - dbusdispatcher.cpp \ - iapconf.cpp \ - iapmonitor.cpp \ - proxyconf.cpp - -#libconninet_la_LDFLAGS = -version-info 0:0:0 - -conninetincludedir = $(includedir)/conninet -conninetinclude_HEADERS = \ - maemo_icd.h \ - dbusdispatcher.h \ - iapconf.h \ - iapmonitor.h \ - proxyconf.h - -nodist_libconninet_la_SOURCES = \ - moc_maemo_icd.cpp \ - moc_dbusdispatcher.cpp - -MAINTAINERCLEANFILES = Makefile.in - -# This rule lets GNU make create any moc_*.cpp from the equivalent *.h -moc_%.cpp: %.h - moc $< -o $@ - -# This line ensures that generated moc files are deleted when we make clean. -CLEANFILES = *_moc.cpp *.loT diff --git a/src/3rdparty/libconninet/src/dbusdispatcher.cpp b/src/3rdparty/libconninet/src/dbusdispatcher.cpp deleted file mode 100644 index f5b830a..0000000 --- a/src/3rdparty/libconninet/src/dbusdispatcher.cpp +++ /dev/null @@ -1,611 +0,0 @@ -/* * This file is part of conninet * - * - * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * - * Contact: Aapo Makela - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * version 2.1 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - * 02110-1301 USA - */ - -#include -#include -#include -#include -#include -#include -#include "dbusdispatcher.h" - -namespace Maemo { - -/*! - \class Maemo::DBusDispatcher - - \brief DBusDispatcher is a class, which is able to send DBUS method call - messages and receive unicast signals from DBUS object. -*/ - -class DBusDispatcherPrivate -{ -public: - DBusDispatcherPrivate(const QString& service, - const QString& path, - const QString& interface, - const QString& signalPath) - : service(service), path(path), interface(interface), - signalPath(signalPath), connection(0) - { - memset(&signal_vtable, 0, sizeof(signal_vtable)); - } - - ~DBusDispatcherPrivate() - { - foreach(DBusPendingCall *call, pending_calls) { - dbus_pending_call_cancel(call); - dbus_pending_call_unref(call); - } - } - - QString service; - QString path; - QString interface; - QString signalPath; - struct DBusConnection *connection; - QList pending_calls; - struct DBusObjectPathVTable signal_vtable; -}; - -static bool constantVariantList(const QVariantList& variantList) { - // Special case, empty list == empty struct - if (variantList.isEmpty()) { - return false; - } else { - QVariant::Type type = variantList[0].type(); - // Iterate items in the list and check if they are same type - foreach(QVariant variant, variantList) { - if (variant.type() != type) { - return false; - } - } - } - return true; -} - -static QString variantToSignature(const QVariant& argument, - bool constantList = true) { - switch (argument.type()) { - case QVariant::Bool: - return "b"; - case QVariant::ByteArray: - return "ay"; - case QVariant::Char: - return "y"; - case QVariant::Int: - return "i"; - case QVariant::UInt: - return "u"; - case QVariant::StringList: - return "as"; - case QVariant::String: - return "s"; - case QVariant::LongLong: - return "x"; - case QVariant::ULongLong: - return "t"; - case QVariant::List: - { - QString signature; - QVariantList variantList = argument.toList(); - if (!constantList) { - signature += DBUS_STRUCT_BEGIN_CHAR_AS_STRING; - foreach(QVariant listItem, variantList) { - signature += variantToSignature(listItem); - } - signature += DBUS_STRUCT_END_CHAR_AS_STRING; - } else { - if (variantList.isEmpty()) - return ""; - signature = "a" + variantToSignature(variantList[0]); - } - - return signature; - } - default: - qDebug() << "Unsupported variant type: " << argument.type(); - break; - } - - return ""; -} - -static bool appendVariantToDBusMessage(const QVariant& argument, - DBusMessageIter *dbus_iter) { - int idx = 0; - DBusMessageIter array_iter; - QStringList str_list; - dbus_bool_t bool_data; - dbus_int32_t int32_data; - dbus_uint32_t uint32_data; - dbus_int64_t int64_data; - dbus_uint64_t uint64_data; - char *str_data; - char char_data; - - switch (argument.type()) { - - case QVariant::Bool: - bool_data = argument.toBool(); - dbus_message_iter_append_basic(dbus_iter, DBUS_TYPE_BOOLEAN, - &bool_data); - break; - - case QVariant::ByteArray: - str_data = argument.toByteArray().data(); - dbus_message_iter_open_container(dbus_iter, DBUS_TYPE_ARRAY, - DBUS_TYPE_BYTE_AS_STRING, &array_iter); - dbus_message_iter_append_fixed_array(&array_iter, - DBUS_TYPE_BYTE, - &str_data, - argument.toByteArray().size()); - dbus_message_iter_close_container(dbus_iter, &array_iter); - break; - - case QVariant::Char: - char_data = argument.toChar().toAscii(); - dbus_message_iter_append_basic(dbus_iter, DBUS_TYPE_BYTE, - &char_data); - break; - - case QVariant::Int: - int32_data = argument.toInt(); - dbus_message_iter_append_basic(dbus_iter, DBUS_TYPE_INT32, - &int32_data); - break; - - case QVariant::String: - str_data = argument.toString().toLatin1().data(); - dbus_message_iter_append_basic(dbus_iter, DBUS_TYPE_STRING, - &str_data); - break; - - case QVariant::StringList: - str_list = argument.toStringList(); - dbus_message_iter_open_container(dbus_iter, DBUS_TYPE_ARRAY, - "s", &array_iter); - for (idx = 0; idx < str_list.size(); idx++) { - str_data = str_list.at(idx).toLatin1().data(); - dbus_message_iter_append_basic(&array_iter, - DBUS_TYPE_STRING, - &str_data); - } - dbus_message_iter_close_container(dbus_iter, &array_iter); - break; - - case QVariant::UInt: - uint32_data = argument.toUInt(); - dbus_message_iter_append_basic(dbus_iter, DBUS_TYPE_UINT32, - &uint32_data); - break; - - case QVariant::ULongLong: - uint64_data = argument.toULongLong(); - dbus_message_iter_append_basic(dbus_iter, DBUS_TYPE_UINT64, - &uint64_data); - break; - - case QVariant::LongLong: - int64_data = argument.toLongLong(); - dbus_message_iter_append_basic(dbus_iter, DBUS_TYPE_INT64, - &int64_data); - break; - - case QVariant::List: - { - QVariantList variantList = argument.toList(); - bool constantList = constantVariantList(variantList); - DBusMessageIter array_iter; - - // List is mapped either as an DBUS array (all items same type) - // DBUS struct (variable types) depending on constantList - if (constantList) { - // Resolve the signature for the first item - QString signature = ""; - if (!variantList.isEmpty()) { - signature = variantToSignature( - variantList[0], - constantVariantList(variantList[0].toList())); - } - - // Mapped as DBUS array - dbus_message_iter_open_container(dbus_iter, DBUS_TYPE_ARRAY, - signature.toAscii(), - &array_iter); - - foreach(QVariant listItem, variantList) { - appendVariantToDBusMessage(listItem, &array_iter); - } - - dbus_message_iter_close_container(dbus_iter, &array_iter); - } else { - // Mapped as DBUS struct - dbus_message_iter_open_container(dbus_iter, DBUS_TYPE_STRUCT, - NULL, - &array_iter); - - foreach(QVariant listItem, variantList) { - appendVariantToDBusMessage(listItem, &array_iter); - } - - dbus_message_iter_close_container(dbus_iter, &array_iter); - } - - break; - } - default: - qDebug() << "Unsupported variant type: " << argument.type(); - break; - } - - return true; -} - -static QVariant getVariantFromDBusMessage(DBusMessageIter *iter) { - dbus_bool_t bool_data; - dbus_int32_t int32_data; - dbus_uint32_t uint32_data; - dbus_int64_t int64_data; - dbus_uint64_t uint64_data; - char *str_data; - char char_data; - int argtype = dbus_message_iter_get_arg_type(iter); - - switch (argtype) { - - case DBUS_TYPE_BOOLEAN: - { - dbus_message_iter_get_basic(iter, &bool_data); - QVariant variant((bool)bool_data); - return variant; - } - - case DBUS_TYPE_ARRAY: - { - // Handle all arrays here - int elem_type = dbus_message_iter_get_element_type(iter); - DBusMessageIter array_iter; - - dbus_message_iter_recurse(iter, &array_iter); - - if (elem_type == DBUS_TYPE_BYTE) { - QByteArray byte_array; - do { - dbus_message_iter_get_basic(&array_iter, &char_data); - byte_array.append(char_data); - } while (dbus_message_iter_next(&array_iter)); - QVariant variant(byte_array); - return variant; - } else if (elem_type == DBUS_TYPE_STRING) { - QStringList str_list; - do { - dbus_message_iter_get_basic(&array_iter, &str_data); - str_list.append(str_data); - } while (dbus_message_iter_next(&array_iter)); - QVariant variant(str_list); - return variant; - } else { - QVariantList variantList; - do { - variantList << getVariantFromDBusMessage(&array_iter); - } while (dbus_message_iter_next(&array_iter)); - QVariant variant(variantList); - return variant; - } - break; - } - - case DBUS_TYPE_BYTE: - { - dbus_message_iter_get_basic(iter, &char_data); - QChar ch(char_data); - QVariant variant(ch); - return variant; - } - - case DBUS_TYPE_INT32: - { - dbus_message_iter_get_basic(iter, &int32_data); - QVariant variant((int)int32_data); - return variant; - } - - case DBUS_TYPE_UINT32: - { - dbus_message_iter_get_basic(iter, &uint32_data); - QVariant variant((uint)uint32_data); - return variant; - } - - case DBUS_TYPE_STRING: - { - dbus_message_iter_get_basic(iter, &str_data); - QString str(str_data); - QVariant variant(str); - return variant; - } - - case DBUS_TYPE_INT64: - { - dbus_message_iter_get_basic(iter, &int64_data); - QVariant variant((qlonglong)int64_data); - return variant; - } - - case DBUS_TYPE_UINT64: - { - dbus_message_iter_get_basic(iter, &uint64_data); - QVariant variant((qulonglong)uint64_data); - return variant; - } - - case DBUS_TYPE_STRUCT: - { - // Handle all structs here - DBusMessageIter struct_iter; - dbus_message_iter_recurse(iter, &struct_iter); - - QVariantList variantList; - do { - variantList << getVariantFromDBusMessage(&struct_iter); - } while (dbus_message_iter_next(&struct_iter)); - QVariant variant(variantList); - return variant; - } - - default: - qDebug() << "Unsupported DBUS type: " << argtype; - } - - return QVariant(); -} - -static DBusHandlerResult signalHandler (DBusConnection *connection, - DBusMessage *message, - void *object_ref) { - (void)connection; - QString interface; - QString signal; - DBusDispatcher *dispatcher = (DBusDispatcher *)object_ref; - - if (dbus_message_get_type(message) == DBUS_MESSAGE_TYPE_SIGNAL) { - interface = dbus_message_get_interface(message); - signal = dbus_message_get_member(message); - - QList arglist; - DBusMessageIter dbus_iter; - - if (dbus_message_iter_init(message, &dbus_iter)) { - // Read return arguments - while (dbus_message_iter_get_arg_type (&dbus_iter) != DBUS_TYPE_INVALID) { - arglist << getVariantFromDBusMessage(&dbus_iter); - dbus_message_iter_next(&dbus_iter); - } - } - - dispatcher->emitSignalReceived(interface, signal, arglist); - return DBUS_HANDLER_RESULT_HANDLED; - } - (void)message; - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; -} - -DBusDispatcher::DBusDispatcher(const QString& service, - const QString& path, - const QString& interface, - QObject *parent) - : QObject(parent), - d_ptr(new DBusDispatcherPrivate(service, path, interface, path)) { - setupDBus(); -} - -DBusDispatcher::DBusDispatcher(const QString& service, - const QString& path, - const QString& interface, - const QString& signalPath, - QObject *parent) - : QObject(parent), - d_ptr(new DBusDispatcherPrivate(service, path, interface, signalPath)) { - setupDBus(); -} - -DBusDispatcher::~DBusDispatcher() -{ - if (d_ptr->connection) { - dbus_connection_close(d_ptr->connection); - dbus_connection_unref(d_ptr->connection); - } - delete d_ptr; -} - -void DBusDispatcher::setupDBus() -{ - d_ptr->connection = dbus_bus_get_private(DBUS_BUS_SYSTEM, NULL); - - if (d_ptr->connection == NULL) - qDebug() << "Unable to get DBUS connection!"; - else { - d_ptr->signal_vtable.message_function = signalHandler; - - dbus_connection_set_exit_on_disconnect(d_ptr->connection, FALSE); - dbus_connection_setup_with_g_main(d_ptr->connection, NULL); - dbus_connection_register_object_path(d_ptr->connection, - d_ptr->signalPath.toLatin1(), - &d_ptr->signal_vtable, - this); - } -} - -static DBusMessage *prepareDBusCall(const QString& service, - const QString& path, - const QString& interface, - const QString& method, - const QVariant& arg1 = QVariant(), - const QVariant& arg2 = QVariant(), - const QVariant& arg3 = QVariant(), - const QVariant& arg4 = QVariant(), - const QVariant& arg5 = QVariant(), - const QVariant& arg6 = QVariant(), - const QVariant& arg7 = QVariant(), - const QVariant& arg8 = QVariant()) -{ - DBusMessage *message = dbus_message_new_method_call(service.toLatin1(), - path.toLatin1(), - interface.toLatin1(), - method.toLatin1()); - DBusMessageIter dbus_iter; - - // Append variants to DBUS message - QList arglist; - if (arg1.isValid()) arglist << arg1; - if (arg2.isValid()) arglist << arg2; - if (arg3.isValid()) arglist << arg3; - if (arg4.isValid()) arglist << arg4; - if (arg5.isValid()) arglist << arg5; - if (arg6.isValid()) arglist << arg6; - if (arg7.isValid()) arglist << arg7; - if (arg8.isValid()) arglist << arg8; - - dbus_message_iter_init_append (message, &dbus_iter); - - while (!arglist.isEmpty()) { - QVariant argument = arglist.takeFirst(); - appendVariantToDBusMessage(argument, &dbus_iter); - } - - return message; -} - -QList DBusDispatcher::call(const QString& method, - const QVariant& arg1, - const QVariant& arg2, - const QVariant& arg3, - const QVariant& arg4, - const QVariant& arg5, - const QVariant& arg6, - const QVariant& arg7, - const QVariant& arg8) { - DBusMessageIter dbus_iter; - DBusMessage *message = prepareDBusCall(d_ptr->service, d_ptr->path, - d_ptr->interface, method, - arg1, arg2, arg3, arg4, arg5, - arg6, arg7, arg8); - DBusMessage *reply = dbus_connection_send_with_reply_and_block( - d_ptr->connection, - message, -1, NULL); - dbus_message_unref(message); - - QList replylist; - if (reply != NULL && dbus_message_iter_init(reply, &dbus_iter)) { - // Read return arguments - while (dbus_message_iter_get_arg_type (&dbus_iter) != DBUS_TYPE_INVALID) { - replylist << getVariantFromDBusMessage(&dbus_iter); - dbus_message_iter_next(&dbus_iter); - } - } - if (reply != NULL) dbus_message_unref(reply); - return replylist; -} - -class PendingCallInfo { -public: - QString method; - DBusDispatcher *dispatcher; - DBusDispatcherPrivate *priv; -}; - -static void freePendingCallInfo(void *memory) { - PendingCallInfo *info = (PendingCallInfo *)memory; - delete info; -} - -static void pendingCallFunction (DBusPendingCall *pending, - void *memory) { - PendingCallInfo *info = (PendingCallInfo *)memory; - QString errorStr; - QList replyList; - DBusMessage *reply = dbus_pending_call_steal_reply (pending); - - Q_ASSERT(reply != NULL); - - if (dbus_message_get_type(reply) == DBUS_MESSAGE_TYPE_ERROR) { - errorStr = dbus_message_get_error_name (reply); - } else { - DBusMessageIter dbus_iter; - dbus_message_iter_init(reply, &dbus_iter); - // Read return arguments - while (dbus_message_iter_get_arg_type (&dbus_iter) != DBUS_TYPE_INVALID) { - replyList << getVariantFromDBusMessage(&dbus_iter); - dbus_message_iter_next(&dbus_iter); - } - } - - info->priv->pending_calls.removeOne(pending); - info->dispatcher->emitCallReply(info->method, replyList, errorStr); - dbus_message_unref(reply); - dbus_pending_call_unref(pending); -} - -bool DBusDispatcher::callAsynchronous(const QString& method, - const QVariant& arg1, - const QVariant& arg2, - const QVariant& arg3, - const QVariant& arg4, - const QVariant& arg5, - const QVariant& arg6, - const QVariant& arg7, - const QVariant& arg8) { - DBusMessage *message = prepareDBusCall(d_ptr->service, d_ptr->path, - d_ptr->interface, method, - arg1, arg2, arg3, arg4, arg5, - arg6, arg7, arg8); - DBusPendingCall *call = NULL; - dbus_bool_t ret = dbus_connection_send_with_reply(d_ptr->connection, - message, &call, -1); - PendingCallInfo *info = new PendingCallInfo; - info->method = method; - info->dispatcher = this; - info->priv = d_ptr; - - dbus_pending_call_set_notify(call, pendingCallFunction, info, freePendingCallInfo); - d_ptr->pending_calls.append(call); - return (bool)ret; -} - -void DBusDispatcher::emitSignalReceived(const QString& interface, - const QString& signal, - const QList& args) { - emit signalReceived(interface, signal, args); } - -void DBusDispatcher::emitCallReply(const QString& method, - const QList& args, - const QString& error) { - emit callReply(method, args, error); } - -void DBusDispatcher::synchronousDispatch(int timeout_ms) -{ - dbus_connection_read_write_dispatch(d_ptr->connection, timeout_ms); -} - -} // Maemo namespace - diff --git a/src/3rdparty/libconninet/src/dbusdispatcher.h b/src/3rdparty/libconninet/src/dbusdispatcher.h deleted file mode 100644 index 2f71b6f..0000000 --- a/src/3rdparty/libconninet/src/dbusdispatcher.h +++ /dev/null @@ -1,91 +0,0 @@ -/* * This file is part of conn-dui-settings-inet * - * - * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * - * Contact: Aapo Makela - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * version 2.1 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - * 02110-1301 USA - */ - -#ifndef DBUSDISPATCHER_H -#define DBUSDISPATCHER_H - -#include -#include - -namespace Maemo { - -class DBusDispatcherPrivate; -class DBusDispatcher : public QObject -{ - Q_OBJECT - -public: - DBusDispatcher(const QString& service, - const QString& path, - const QString& interface, - QObject *parent = 0); - DBusDispatcher(const QString& service, - const QString& path, - const QString& interface, - const QString& signalPath, - QObject *parent = 0); - ~DBusDispatcher(); - - QList call(const QString& method, - const QVariant& arg1 = QVariant(), - const QVariant& arg2 = QVariant(), - const QVariant& arg3 = QVariant(), - const QVariant& arg4 = QVariant(), - const QVariant& arg5 = QVariant(), - const QVariant& arg6 = QVariant(), - const QVariant& arg7 = QVariant(), - const QVariant& arg8 = QVariant()); - bool callAsynchronous(const QString& method, - const QVariant& arg1 = QVariant(), - const QVariant& arg2 = QVariant(), - const QVariant& arg3 = QVariant(), - const QVariant& arg4 = QVariant(), - const QVariant& arg5 = QVariant(), - const QVariant& arg6 = QVariant(), - const QVariant& arg7 = QVariant(), - const QVariant& arg8 = QVariant()); - void emitSignalReceived(const QString& interface, - const QString& signal, - const QList& args); - void emitCallReply(const QString& method, - const QList& args, - const QString& error = ""); - void synchronousDispatch(int timeout_ms); - -Q_SIGNALS: - void signalReceived(const QString& interface, - const QString& signal, - const QList& args); - void callReply(const QString& method, - const QList& args, - const QString& error); - -protected: - void setupDBus(); - -private: - DBusDispatcherPrivate *d_ptr; -}; - -} // Maemo namespace - -#endif diff --git a/src/3rdparty/libconninet/src/iapconf.cpp b/src/3rdparty/libconninet/src/iapconf.cpp deleted file mode 100644 index 2e77fa5..0000000 --- a/src/3rdparty/libconninet/src/iapconf.cpp +++ /dev/null @@ -1,299 +0,0 @@ -/* - libconninet - Internet Connectivity support library - - Copyright (C) 2009-2010 Nokia Corporation. All rights reserved. - - Contact: Aapo Makela - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License - version 2.1 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - 02110-1301 USA -*/ - -#include -#include -#include - -#include "iapconf.h" - -#define QSTRING_TO_CONST_CSTR(str) \ - str.toUtf8().constData() - -namespace Maemo { - -class IAPConfPrivate { -public: - ConnSettings *settings; - - ConnSettingsValue *variantToValue(const QVariant &variant); - QVariant valueToVariant(ConnSettingsValue *value); -}; - -ConnSettingsValue *IAPConfPrivate::variantToValue(const QVariant &variant) -{ - // Convert variant to ConnSettingsValue - ConnSettingsValue *value = conn_settings_value_new(); - if (value == 0) { - qWarning("IAPConf: Unable to create new ConnSettingsValue"); - return 0; - } - - switch(variant.type()) { - - case QVariant::Invalid: - value->type = CONN_SETTINGS_VALUE_INVALID; - break; - - case QVariant::String: { - char *valueStr = strdup(QSTRING_TO_CONST_CSTR(variant.toString())); - value->type = CONN_SETTINGS_VALUE_STRING; - value->value.string_val = valueStr; - break; - } - - case QVariant::Int: - value->type = CONN_SETTINGS_VALUE_INT; - value->value.int_val = variant.toInt(); - break; - - case QMetaType::Float: - case QVariant::Double: - value->type = CONN_SETTINGS_VALUE_DOUBLE; - value->value.double_val = variant.toDouble(); - break; - - case QVariant::Bool: - value->type = CONN_SETTINGS_VALUE_BOOL; - value->value.bool_val = variant.toBool() ? 1 : 0; - break; - - case QVariant::ByteArray: { - QByteArray array = variant.toByteArray(); - value->type = CONN_SETTINGS_VALUE_BYTE_ARRAY; - value->value.byte_array.len = array.size(); - value->value.byte_array.val = (unsigned char *)malloc(array.size()); - memcpy(value->value.byte_array.val, array.constData(), array.size()); - break; - } - - case QVariant::List: { - QVariantList list = variant.toList(); - ConnSettingsValue **list_val = (ConnSettingsValue **)malloc( - (list.size() + 1) * sizeof(ConnSettingsValue *)); - - for (int idx = 0; idx < list.size(); idx++) { - list_val[idx] = variantToValue(list.at(idx)); - } - list_val[list.size()] = 0; - - value->type = CONN_SETTINGS_VALUE_LIST; - value->value.list_val = list_val; - break; - } - - default: - qWarning("IAPConf: Can not handle QVariant of type %d", - variant.type()); - conn_settings_value_destroy(value); - return 0; - } - - return value; -} - -QVariant IAPConfPrivate::valueToVariant(ConnSettingsValue *value) -{ - if (value == 0 || value->type == CONN_SETTINGS_VALUE_INVALID) { - return QVariant(); - } - - switch(value->type) { - - case CONN_SETTINGS_VALUE_BOOL: - return QVariant(value->value.bool_val ? true : false); - - case CONN_SETTINGS_VALUE_STRING: - return QVariant(QString(value->value.string_val)); - - case CONN_SETTINGS_VALUE_DOUBLE: - return QVariant(value->value.double_val); - - case CONN_SETTINGS_VALUE_INT: - return QVariant(value->value.int_val); - - case CONN_SETTINGS_VALUE_LIST: { - // At least with GConf backend connsettings returns byte array as list - // of ints, first check for that case - if (value->value.list_val && value->value.list_val[0]) { - bool canBeConvertedToByteArray = true; - for (int idx = 0; value->value.list_val[idx]; idx++) { - ConnSettingsValue *val = value->value.list_val[idx]; - if (val->type != CONN_SETTINGS_VALUE_INT - || val->value.int_val > 255 - || val->value.int_val < 0) { - canBeConvertedToByteArray = false; - break; - } - } - - if (canBeConvertedToByteArray) { - QByteArray array; - for (int idx = 0; value->value.list_val[idx]; idx++) { - array.append(value->value.list_val[idx]->value.int_val); - } - return array; - } - - // Create normal list - QVariantList list; - for (int idx = 0; value->value.list_val[idx]; idx++) { - list.append(valueToVariant(value->value.list_val[idx])); - } - return list; - } - } - - case CONN_SETTINGS_VALUE_BYTE_ARRAY: - return QByteArray::fromRawData((char *)value->value.byte_array.val, - value->value.byte_array.len); - - default: - return QVariant(); - } -} - -// Public class implementation - -IAPConf::IAPConf(const QString &iap_id) - : d_ptr(new IAPConfPrivate) -{ - d_ptr->settings = conn_settings_open(CONN_SETTINGS_CONNECTION, - QSTRING_TO_CONST_CSTR(iap_id)); - if (d_ptr->settings == 0) { - qWarning("IAPConf: Unable to open ConnSettings for %s", - QSTRING_TO_CONST_CSTR(iap_id)); - } -} - -IAPConf::~IAPConf() -{ - conn_settings_close(d_ptr->settings); - delete d_ptr; -} - -void IAPConf::setValue(const QString& key, const QVariant& value) -{ - // Invalid value means unsetting the given key - if (!value.isValid()) { - int err = conn_settings_unset(d_ptr->settings, - QSTRING_TO_CONST_CSTR(key)); - if (err != CONN_SETTINGS_E_NO_ERROR) { - qWarning("IAPConf: unable to unset key %s: %s", - QSTRING_TO_CONST_CSTR(key), - conn_settings_error_text((ConnSettingsError)err)); - } - return; - } - - // Convert value to ConnSettingsValue - ConnSettingsValue *val = d_ptr->variantToValue(value); - if (val == 0) return; - - // Set value and handle errors - int error = conn_settings_set(d_ptr->settings, - QSTRING_TO_CONST_CSTR(key), - val); - if (error != CONN_SETTINGS_E_NO_ERROR) { - qWarning("IAPConf: error in setting key %s: %s", - QSTRING_TO_CONST_CSTR(key), - conn_settings_error_text((ConnSettingsError)error)); - } - - // Destroy value - conn_settings_value_destroy(val); - return; -} - -void IAPConf::set(const QString& key1, const QVariant& value1, - const QString& key2, const QVariant& value2, - const QString& key3, const QVariant& value3, - const QString& key4, const QVariant& value4, - const QString& key5, const QVariant& value5, - const QString& key6, const QVariant& value6, - const QString& key7, const QVariant& value7, - const QString& key8, const QVariant& value8, - const QString& key9, const QVariant& value9, - const QString& key10, const QVariant& value10) -{ - if (!key1.isEmpty()) setValue(key1, value1); - if (!key2.isEmpty()) setValue(key2, value2); - if (!key3.isEmpty()) setValue(key3, value3); - if (!key4.isEmpty()) setValue(key4, value4); - if (!key5.isEmpty()) setValue(key5, value5); - if (!key6.isEmpty()) setValue(key6, value6); - if (!key7.isEmpty()) setValue(key7, value7); - if (!key8.isEmpty()) setValue(key8, value8); - if (!key9.isEmpty()) setValue(key9, value9); - if (!key10.isEmpty()) setValue(key10, value10); -} - -QVariant IAPConf::value(const QString& key) const -{ - ConnSettingsValue *val = conn_settings_get(d_ptr->settings, - QSTRING_TO_CONST_CSTR(key)); - - QVariant variant = d_ptr->valueToVariant(val); - conn_settings_value_destroy(val); - return variant; -} - -void IAPConf::clear(const char *default_path) -{ - Q_UNUSED(default_path); // default path is unused - - int error = conn_settings_remove(d_ptr->settings); - if (error != CONN_SETTINGS_E_NO_ERROR) { - qWarning("IAPConf: Error when removing IAP: %s", - conn_settings_error_text((ConnSettingsError)error)); - } -} - -void IAPConf::clearAll() -{ - ConnSettings *settings = conn_settings_open(CONN_SETTINGS_CONNECTION, - NULL); - conn_settings_remove(settings); - conn_settings_close(settings); -} - - -void IAPConf::getAll(QList &all_iaps, bool return_path) -{ - Q_UNUSED(return_path); // We don't use return path currently - - // Go through all available connections and add them to the list - char **ids = conn_settings_list_ids(CONN_SETTINGS_CONNECTION); - if (ids == 0) { - // No ids found - nothing to do - return; - } - - for (int idx = 0; ids[idx]; idx++) { - all_iaps.append(QString(ids[idx])); - free(ids[idx]); - } - free(ids); -} - - -} // namespace Maemo diff --git a/src/3rdparty/libconninet/src/iapconf.h b/src/3rdparty/libconninet/src/iapconf.h deleted file mode 100644 index 57c0856..0000000 --- a/src/3rdparty/libconninet/src/iapconf.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - libconninet - Internet Connectivity support library - - Copyright (C) 2009 Nokia Corporation. All rights reserved. - - Contact: Aapo Makela - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License - version 2.1 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - 02110-1301 USA -*/ - -#ifndef IAPCONF_H -#define IAPCONF_H - -#include -#include - -namespace Maemo { - -class IAPConfPrivate; -class IAPConf { -public: - IAPConf(const QString &iap_id); - virtual ~IAPConf(); - - /** - Convenience method for setting multiple IAP values with one call. - */ - void set(const QString& key1, const QVariant& value1, - const QString& key2 = "", const QVariant& value2 = QVariant(), - const QString& key3 = "", const QVariant& value3 = QVariant(), - const QString& key4 = "", const QVariant& value4 = QVariant(), - const QString& key5 = "", const QVariant& value5 = QVariant(), - const QString& key6 = "", const QVariant& value6 = QVariant(), - const QString& key7 = "", const QVariant& value7 = QVariant(), - const QString& key8 = "", const QVariant& value8 = QVariant(), - const QString& key9 = "", const QVariant& value9 = QVariant(), - const QString& key10 = "", const QVariant& value10 = QVariant()); - - /** - Set one IAP value. - */ - void setValue(const QString& key, const QVariant& value); - - /** - Get one IAP value. - */ - QVariant value(const QString& key) const; - - /** - Clear this IAP from GConf - */ - void clear(const char *default_path=0); - - /** - Clear all IAP specific information from GConf (including all IAPs). - DO NOT USE THIS FUNCTION IN ANYWHERE ELSE EXCEPT IN TEST CODE! - */ - void clearAll(); - - /** - Return all the IAPs found in the system. If return_path is true, - then do not strip the IAP path away. - */ - static void getAll(QList &all_iaps, bool return_path=false); - -private: - IAPConfPrivate *d_ptr; -}; - -} // namespace Maemo - -#endif diff --git a/src/3rdparty/libconninet/src/iapmonitor.cpp b/src/3rdparty/libconninet/src/iapmonitor.cpp deleted file mode 100644 index c44cbc8..0000000 --- a/src/3rdparty/libconninet/src/iapmonitor.cpp +++ /dev/null @@ -1,110 +0,0 @@ -/* - libconninet - Internet Connectivity support library - - Copyright (C) 2009-2010 Nokia Corporation. All rights reserved. - - Contact: Jukka Rissanen - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License - version 2.1 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - 02110-1301 USA -*/ - -#include - -#include -#include "iapmonitor.h" - -namespace Maemo { - - -void conn_settings_notify_func (ConnSettingsType type, - const char *id, - const char *key, - ConnSettingsValue *value, - void *user_data); - -class IAPMonitorPrivate { -private: - IAPMonitor *monitor; - ConnSettings *settings; - -public: - - IAPMonitorPrivate(IAPMonitor *monitor) - : monitor(monitor) - { - settings = conn_settings_open(CONN_SETTINGS_CONNECTION, NULL); - conn_settings_add_notify( - settings, - (ConnSettingsNotifyFunc *)conn_settings_notify_func, - this); - } - - ~IAPMonitorPrivate() - { - conn_settings_del_notify(settings); - conn_settings_close(settings); - } - - void iapAdded(const QString &iap) - { - monitor->iapAdded(iap); - } - - void iapRemoved(const QString &iap) - { - monitor->iapRemoved(iap); - } -}; - -void conn_settings_notify_func (ConnSettingsType type, - const char *id, - const char *key, - ConnSettingsValue *value, - void *user_data) -{ - if (type != CONN_SETTINGS_CONNECTION) return; - IAPMonitorPrivate *priv = (IAPMonitorPrivate *)user_data; - - QString iapId(key); - iapId = iapId.split("/")[0]; - if (value != 0) { - priv->iapAdded(iapId); - } else if (iapId == QString(key)) { - // IAP is removed only when the directory gets removed - priv->iapRemoved(iapId); - } -} - -IAPMonitor::IAPMonitor() - : d_ptr(new IAPMonitorPrivate(this)) -{ -} - -IAPMonitor::~IAPMonitor() -{ - delete d_ptr; -} - -void IAPMonitor::iapAdded(const QString &id) -{ - // By default do nothing -} - -void IAPMonitor::iapRemoved(const QString &id) -{ - // By default do nothing -} - -} // namespace Maemo diff --git a/src/3rdparty/libconninet/src/iapmonitor.h b/src/3rdparty/libconninet/src/iapmonitor.h deleted file mode 100644 index 558f23e..0000000 --- a/src/3rdparty/libconninet/src/iapmonitor.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - libconninet - Internet Connectivity support library - - Copyright (C) 2009-2010 Nokia Corporation. All rights reserved. - - Contact: Jukka Rissanen - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License - version 2.1 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - 02110-1301 USA -*/ - -#ifndef IAPMONITOR_H -#define IAPMONITOR_H - -#include - -namespace Maemo { - -class IAPMonitorPrivate; -class IAPMonitor { -public: - IAPMonitor(); - ~IAPMonitor(); - -protected: - virtual void iapAdded(const QString &id); - virtual void iapRemoved(const QString &id); - -private: - IAPMonitorPrivate *d_ptr; - Q_DECLARE_PRIVATE(IAPMonitor); -}; - -} // namespace Maemo - -#endif // IAPMONITOR_H - diff --git a/src/3rdparty/libconninet/src/maemo_icd.cpp b/src/3rdparty/libconninet/src/maemo_icd.cpp deleted file mode 100644 index bc84fbc..0000000 --- a/src/3rdparty/libconninet/src/maemo_icd.cpp +++ /dev/null @@ -1,1277 +0,0 @@ -/* - libconninet - Internet Connectivity support library - - Copyright (C) 2009 Nokia Corporation. All rights reserved. - - Contact: Jukka Rissanen - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License - version 2.1 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - 02110-1301 USA -*/ - -#include -#include "maemo_icd.h" -#include -#include -#include -#include -#include -#include -#include - - -namespace Maemo { - -/* Reference counting singleton class that creates a single connection - * to icd so that icd reference counting works as expected. This is - * needed because DBusDispatcher uses private dbus connections - * which come and go and icd cannot use that information to - * determine whether application quit or not. So we create one - * persistent connection that is only teared down when application - * quits or calls disconnect() - */ -class IcdRefCounting -{ -public: - IcdRefCounting() : first_call(true) { } - void setup(enum icd_connection_flags flag); - void cleanup(); - -private: - bool first_call; - struct DBusConnection *connection; -}; - -Q_GLOBAL_STATIC(IcdRefCounting, icdRefCounting); - - -void IcdRefCounting::setup(enum icd_connection_flags flag) -{ - if (first_call) { - DBusMessage *msg = NULL; - - connection = dbus_bus_get_private(DBUS_BUS_SYSTEM, NULL); - dbus_connection_set_exit_on_disconnect(connection, FALSE); - dbus_connection_setup_with_g_main(connection, NULL); - - msg = dbus_message_new_method_call(ICD_DBUS_API_INTERFACE, - ICD_DBUS_API_PATH, - ICD_DBUS_API_INTERFACE, - ICD_DBUS_API_CONNECT_REQ); - if (msg == NULL) - goto out; - - if (!dbus_message_append_args(msg, - DBUS_TYPE_UINT32, &flag, - DBUS_TYPE_INVALID)) - goto out; - - if (!dbus_connection_send_with_reply(connection, msg, - NULL, 60*1000)) - goto out; - - first_call = false; - return; - - out: - dbus_connection_close(connection); - dbus_connection_unref(connection); - } -} - -void IcdRefCounting::cleanup() -{ - if (!first_call) { - dbus_connection_close(connection); - dbus_connection_unref(connection); - first_call = true; - } -} - - -class IcdPrivate -{ -public: - IcdPrivate(Icd *myfriend) - { - init(10000, IcdNewDbusInterface, myfriend); - } - - IcdPrivate(unsigned int timeout, Icd *myfriend) - { - init(timeout, IcdNewDbusInterface, myfriend); - } - - IcdPrivate(unsigned int timeout, IcdDbusInterfaceVer ver, Icd *myfriend) - { - /* Note that the old Icd interface is currently disabled and - * the new one is always used. - */ - init(timeout, IcdNewDbusInterface, myfriend); - } - - ~IcdPrivate() - { - QObject::disconnect(mDBus, - SIGNAL(signalReceived(const QString&, - const QString&, - const QList&)), - icd, - SLOT(icdSignalReceived(const QString&, - const QString&, - const QList&))); - - QObject::disconnect(mDBus, - SIGNAL(callReply(const QString&, - const QList&, - const QString&)), - icd, - SLOT(icdCallReply(const QString&, - const QList&, - const QString&))); - - delete mDBus; - mDBus = 0; - } - - /* Icd2 dbus API functions */ - QStringList scan(icd_scan_request_flags flags, - QStringList &network_types, - QList& scan_results, - QString& error); - void scanCancel(); - bool connect(icd_connection_flags flags, IcdConnectResult& result); - bool connect(icd_connection_flags flags, QList& params, - IcdConnectResult& result); - bool connect(icd_connection_flags flags, QString& iap, QString& result); - void select(uint flags); - void disconnect(uint connect_flags, QString& service_type, - uint service_attrs, QString& service_id, - QString& network_type, uint network_attrs, - QByteArray& network_id); - void disconnect(uint connect_flags); - - uint state(QString& service_type, uint service_attrs, - QString& service_id, QString& network_type, - uint network_attrs, QByteArray& network_id, - IcdStateResult &state_result); - uint statistics(QString& service_type, uint service_attrs, - QString& service_id, QString& network_type, - uint network_attrs, QByteArray& network_id, - IcdStatisticsResult& stats_result); - uint addrinfo(QString& service_type, uint service_attrs, - QString& service_id, QString& network_type, - uint network_attrs, QByteArray& network_id, - IcdAddressInfoResult& addr_result); - - uint state(QList& state_results); - uint state_non_blocking(QList& state_results); - uint statistics(QList& stats_results); - uint addrinfo(QList& addr_results); - uint addrinfo_non_blocking(QList& addr_results); - - void signalReceived(const QString& interface, - const QString& signal, - const QList& args); - void callReply(const QString& method, - const QList& args, - const QString& error); - - QString error() { return mError; } - -public: - DBusDispatcher *mDBus; - QString mMethod; - QString mInterface; - QString mSignal; - QString mError; - QList mArgs; - QList receivedSignals; - unsigned int timeout; - IcdDbusInterfaceVer icd_dbus_version; - Icd *icd; - - void init(unsigned int dbus_timeout, IcdDbusInterfaceVer ver, - Icd *myfriend) - { - if (ver == IcdNewDbusInterface) { - mDBus = new DBusDispatcher(ICD_DBUS_API_INTERFACE, - ICD_DBUS_API_PATH, - ICD_DBUS_API_INTERFACE); - } else { - mDBus = new DBusDispatcher(ICD_DBUS_SERVICE, - ICD_DBUS_PATH, - ICD_DBUS_INTERFACE); - } - icd_dbus_version = ver; - - /* This connect has a side effect as it means that only one - * Icd object can exists in one time. This should be fixed! - */ - QObject::connect(mDBus, - SIGNAL(signalReceived(const QString&, - const QString&, - const QList&)), - myfriend, - SLOT(icdSignalReceived(const QString&, - const QString&, - const QList&))); - - QObject::connect(mDBus, - SIGNAL(callReply(const QString&, - const QList&, - const QString&)), - myfriend, - SLOT(icdCallReply(const QString&, - const QList&, - const QString&))); - - icd = myfriend; - timeout = dbus_timeout; - } - - void clearState() - { - mMethod.clear(); - mInterface.clear(); - mSignal.clear(); - mError.clear(); - mArgs.clear(); - receivedSignals.clear(); - } - - bool doConnect(IcdConnectResult& result); - bool doConnect(QString& result); - bool doState(); -}; - - -void IcdPrivate::signalReceived(const QString& interface, - const QString& signal, - const QList& args) -{ - // Signal handler, which simply records what has been signalled - mInterface = interface; - mSignal = signal; - mArgs = args; - - //qDebug() << "signal" << signal << "received:" << args; - receivedSignals << QVariant(interface) << QVariant(signal) << QVariant(args); -} - - -void IcdPrivate::callReply(const QString& method, - const QList& /*args*/, - const QString& error) -{ - mMethod = method; - mError = error; -} - - -static void get_scan_result(QList& args, - IcdScanResult& ret) -{ - int i=0; - - if (args.isEmpty()) - return; - - ret.status = args[i++].toUInt(); - ret.timestamp = args[i++].toUInt(); - ret.scan.service_type = args[i++].toString(); - ret.service_name = args[i++].toString(); - ret.scan.service_attrs = args[i++].toUInt(); - ret.scan.service_id = args[i++].toString(); - ret.service_priority = args[i++].toInt(); - ret.scan.network_type = args[i++].toString(); - ret.network_name = args[i++].toString(); - ret.scan.network_attrs = args[i++].toUInt(); - ret.scan.network_id = args[i++].toByteArray(); - ret.network_priority = args[i++].toInt(); - ret.signal_strength = args[i++].toInt(); - ret.station_id = args[i++].toString(); - ret.signal_dB = args[i++].toInt(); -} - - -static void get_connect_result(QList& args, - IcdConnectResult& ret) -{ - int i=0; - - if (args.isEmpty()) - return; - - ret.connect.service_type = args[i++].toString(); - ret.connect.service_attrs = args[i++].toInt(); - ret.connect.service_id = args[i++].toString(); - ret.connect.network_type = args[i++].toString(); - ret.connect.network_attrs = args[i++].toInt(); - ret.connect.network_id = args[i++].toByteArray(); - ret.status = args[i++].toInt(); -} - - -QStringList IcdPrivate::scan(icd_scan_request_flags flags, - QStringList &network_types, - QList& scan_results, - QString& error) -{ - QStringList scanned_types; - QTimer timer; - QVariant reply; - QVariantList vl; - bool last_result = false; - IcdScanResult result; - int all_waited; - - clearState(); - reply = mDBus->call(ICD_DBUS_API_SCAN_REQ, (uint)flags); - if (reply.type() != QVariant::List) - return scanned_types; - vl = reply.toList(); - if (vl.isEmpty()) { - error = "Scan did not return anything."; - return scanned_types; - } - reply = vl.first(); - scanned_types = reply.toStringList(); - //qDebug() << "Scanning:" << scanned_types; - all_waited = scanned_types.size(); - - timer.setSingleShot(true); - timer.start(timeout); - - scan_results.clear(); - while (!last_result) { - while (timer.isActive() && mInterface.isEmpty() && mError.isEmpty()) { - QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); - } - - if (!timer.isActive()) { - //qDebug() << "Timeout happened"; - break; - } - - if (mSignal != ICD_DBUS_API_SCAN_SIG) { - //qDebug() << "Received" << mSignal << "while waiting" << ICD_DBUS_API_SCAN_SIG << ", ignoring"; - mInterface.clear(); - continue; - } - - if (mError.isEmpty()) { - QString msgInterface = receivedSignals.takeFirst().toString(); - QString msgSignal = receivedSignals.takeFirst().toString(); - QList msgArgs = receivedSignals.takeFirst().toList(); - //qDebug() << "Signal" << msgSignal << "received."; - //qDebug() << "Params:" << msgArgs; - - while (!msgSignal.isEmpty()) { - get_scan_result(msgArgs, result); - -#if 0 - qDebug() << "Received: " << - "status =" << result.status << - ", timestamp =" << result.timestamp << - ", service_type =" << result.scan.service_type << - ", service_name =" << result.service_name << - ", service_attrs =" << result.scan.service_attrs << - ", service_id =" << result.scan.service_id << - ", service_priority =" << result.service_priority << - ", network_type =" << result.scan.network_type << - ", network_name =" << result.network_name << - ", network_attrs =" << result.scan.network_attrs << - ", network_id =" << "-" << - ", network_priority =" << result.network_priority << - ", signal_strength =" << result.signal_strength << - ", station_id =" << result.station_id << - ", signal_dB =" << result.signal_dB; -#endif - - if (result.status == ICD_SCAN_COMPLETE) { - //qDebug() << "waited =" << all_waited; - if (--all_waited == 0) { - last_result = true; - break; - } - } else - scan_results << result; - - if (receivedSignals.isEmpty()) - break; - - msgInterface = receivedSignals.takeFirst().toString(); - msgSignal = receivedSignals.takeFirst().toString(); - msgArgs = receivedSignals.takeFirst().toList(); - } - mInterface.clear(); - - } else { - qWarning() << "Error while scanning:" << mError; - break; - } - } - timer.stop(); - - error = mError; - return scanned_types; -} - - -void IcdPrivate::scanCancel() -{ - mDBus->call(ICD_DBUS_API_SCAN_CANCEL); -} - - -bool IcdPrivate::doConnect(IcdConnectResult& result) -{ - QTimer timer; - bool status = false; - - timer.setSingleShot(true); - timer.start(timeout); - - //qDebug() << "Waiting" << ICD_DBUS_API_CONNECT_SIG << "signal"; - - while (timer.isActive() && mInterface.isEmpty() && - mSignal != ICD_DBUS_API_CONNECT_SIG && - mError.isEmpty()) { - QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); - } - - timer.stop(); - - if (mError.isEmpty()) { - if (!mArgs.isEmpty()) { - get_connect_result(mArgs, result); - status = true; - } else - status = false; - } else - status = false; - - return status; -} - - -bool IcdPrivate::connect(icd_connection_flags flags, IcdConnectResult& result) -{ - clearState(); - //mDBus->callAsynchronous(ICD_DBUS_API_CONNECT_REQ, (uint)flags); - mDBus->call(ICD_DBUS_API_CONNECT_REQ, (uint)flags); - icdRefCounting()->setup(flags); - return doConnect(result); -} - - -bool IcdPrivate::connect(icd_connection_flags flags, QList& params, - IcdConnectResult& result) -{ - QVariantList varlist; - QVariantList varlist2; - - foreach (ConnectParams param, params) { - QVariantList items; - - items.append(QVariant(param.connect.service_type)); - items.append(QVariant(param.connect.service_attrs)); - items.append(QVariant(param.connect.service_id)); - items.append(QVariant(param.connect.network_type)); - items.append(QVariant(param.connect.network_attrs)); - items.append(QVariant(param.connect.network_id)); - - varlist.append(items); - } - - varlist2.append(QVariant(varlist)); - - clearState(); - //mDBus->callAsynchronous(ICD_DBUS_API_CONNECT_REQ, (uint)flags, varlist2); - mDBus->call(ICD_DBUS_API_CONNECT_REQ, (uint)flags, varlist2); - icdRefCounting()->setup(flags); - return doConnect(result); -} - - -bool IcdPrivate::doConnect(QString& ret) -{ - QTimer timer; - bool status = false; - - timer.setSingleShot(true); - timer.start(timeout); - - while (timer.isActive() && mInterface.isEmpty() && - mError.isEmpty()) { - QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); - } - - timer.stop(); - - if (mError.isEmpty()) { - if (!mArgs.isEmpty()) { - status = true; - //ret = mArgs[0]; // TODO correctly - } else - status = false; - } else - status = false; - - return status; -} - - -bool IcdPrivate::connect(icd_connection_flags flags, QString& iap, QString& result) -{ - clearState(); - //mDBus->callAsynchronous(ICD_CONNECT_REQ, iap, (uint)flags); - mDBus->call(ICD_CONNECT_REQ, iap, (uint)flags); - icdRefCounting()->setup(flags); - return doConnect(result); -} - - -void IcdPrivate::select(uint flags) -{ - mDBus->call(ICD_DBUS_API_SELECT_REQ, flags); -} - - -void IcdPrivate::disconnect(uint flags, QString& service_type, - uint service_attrs, QString& service_id, - QString& network_type, uint network_attrs, - QByteArray& network_id) -{ - clearState(); - mDBus->call(ICD_DBUS_API_DISCONNECT_REQ, flags, - service_type, service_attrs, service_id, - network_type, network_attrs, network_id); - icdRefCounting()->cleanup(); -} - - -void IcdPrivate::disconnect(uint flags) -{ - clearState(); - mDBus->call(ICD_DBUS_API_DISCONNECT_REQ, flags); - icdRefCounting()->cleanup(); -} - - -static void get_state_all_result(QList& args, - IcdStateResult& ret) -{ - int i=0; - - ret.params.service_type = args[i++].toString(); - ret.params.service_attrs = args[i++].toUInt(); - ret.params.service_id = args[i++].toString(); - ret.params.network_type = args[i++].toString(); - ret.params.network_attrs = args[i++].toUInt(); - ret.params.network_id = args[i++].toByteArray(); - ret.error = args[i++].toString(); - ret.state = args[i++].toInt(); -} - - -static void get_state_all_result2(QList& args, - IcdStateResult& ret) -{ - int i=0; - - ret.params.network_type = args[i++].toString(); - ret.state = args[i++].toInt(); - - // Initialize the other values so that the caller can - // notice we only returned partial status - ret.params.service_type = QString(); - ret.params.service_attrs = 0; - ret.params.service_id = QString(); - ret.params.network_attrs = 0; - ret.params.network_id = QByteArray(); - ret.error = QString(); -} - - -uint IcdPrivate::state(QString& service_type, uint service_attrs, - QString& service_id, QString& network_type, - uint network_attrs, QByteArray& network_id, - IcdStateResult& state_result) -{ - QTimer timer; - QVariant reply; - uint total_signals; - QVariantList vl; - - clearState(); - - reply = mDBus->call(ICD_DBUS_API_STATE_REQ, - service_type, service_attrs, service_id, - network_type, network_attrs, network_id); - if (reply.type() != QVariant::List) - return 0; - vl = reply.toList(); - if (vl.isEmpty()) - return 0; - reply = vl.first(); - total_signals = reply.toUInt(); - if (!total_signals) - return 0; - - timer.setSingleShot(true); - timer.start(timeout); - - mInterface.clear(); - while (timer.isActive() && mInterface.isEmpty()) { - QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); - - if (mSignal != ICD_DBUS_API_STATE_SIG) { - mInterface.clear(); - continue; - } - } - - timer.stop(); - - if (mError.isEmpty()) { - if (!mArgs.isEmpty()) { - if (mArgs.size()>2) - get_state_all_result(mArgs, state_result); - else { - // We are not connected as we did not get the status we asked - return 0; - } - } - } else { - qWarning() << "Error:" << mError; - } - - // The returned value should be one because we asked for one state - return total_signals; -} - - -uint IcdPrivate::state_non_blocking(QList& state_results) -{ - QTimer timer; - QVariant reply; - QVariantList vl; - uint signals_left, total_signals; - IcdStateResult result; - - clearState(); - reply = mDBus->call(ICD_DBUS_API_STATE_REQ); - if (reply.type() != QVariant::List) - return 0; - vl = reply.toList(); - if (vl.isEmpty()) - return 0; - reply = vl.first(); - signals_left = total_signals = reply.toUInt(); - if (!signals_left) - return 0; - - timer.setSingleShot(true); - timer.start(timeout); - state_results.clear(); - mError.clear(); - while (signals_left) { - mInterface.clear(); - while (timer.isActive() && mInterface.isEmpty()) { - QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); - } - - if (!timer.isActive()) { - total_signals = 0; - break; - } - - if (mSignal != ICD_DBUS_API_STATE_SIG) { - continue; - } - - if (mError.isEmpty()) { - if (!mArgs.isEmpty()) { - if (mArgs.size()==2) - get_state_all_result2(mArgs, result); - else - get_state_all_result(mArgs, result); - state_results << result; - } - signals_left--; - } else { - qWarning() << "Error:" << mError; - break; - } - } - timer.stop(); - - return total_signals; -} - - -/* Special version of the state() call which does not call event loop. - * Needed in order to fix NB#175098 where Qt4.7 webkit crashes because event - * loop is run when webkit does not expect it. This function is called from - * bearer management API syncStateWithInterface() in QNetworkSession - * constructor. - */ -uint IcdPrivate::state(QList& state_results) -{ - QTimer timer; - QVariant reply; - QVariantList vl; - uint signals_left, total_signals; - IcdStateResult result; - - clearState(); - reply = mDBus->call(ICD_DBUS_API_STATE_REQ); - if (reply.type() != QVariant::List) - return 0; - vl = reply.toList(); - if (vl.isEmpty()) - return 0; - reply = vl.first(); - signals_left = total_signals = reply.toUInt(); - if (!signals_left) - return 0; - - timer.setSingleShot(true); - timer.start(timeout); - state_results.clear(); - mError.clear(); - while (signals_left) { - mInterface.clear(); - while (timer.isActive() && mInterface.isEmpty()) { - mDBus->synchronousDispatch(1000); - } - - if (!timer.isActive()) { - total_signals = 0; - break; - } - - if (mSignal != ICD_DBUS_API_STATE_SIG) { - continue; - } - - if (mError.isEmpty()) { - if (!mArgs.isEmpty()) { - if (mArgs.size()==2) - get_state_all_result2(mArgs, result); - else - get_state_all_result(mArgs, result); - state_results << result; - } - signals_left--; - } else { - qWarning() << "Error:" << mError; - break; - } - } - timer.stop(); - - return total_signals; -} - - -static void get_statistics_all_result(QList& args, - IcdStatisticsResult& ret) -{ - int i=0; - - if (args.isEmpty()) - return; - - ret.params.service_type = args[i++].toString(); - ret.params.service_attrs = args[i++].toUInt(); - ret.params.service_id = args[i++].toString(); - ret.params.network_type = args[i++].toString(); - ret.params.network_attrs = args[i++].toUInt(); - ret.params.network_id = args[i++].toByteArray(); - ret.time_active = args[i++].toUInt(); - ret.signal_strength = (enum icd_nw_levels)args[i++].toUInt(); - ret.bytes_sent = args[i++].toUInt(); - ret.bytes_received = args[i++].toUInt(); -} - - -uint IcdPrivate::statistics(QList& stats_results) -{ - QTimer timer; - QVariant reply; - QVariantList vl; - uint signals_left, total_signals; - IcdStatisticsResult result; - - clearState(); - reply = mDBus->call(ICD_DBUS_API_STATISTICS_REQ); - if (reply.type() != QVariant::List) - return 0; - vl = reply.toList(); - if (vl.isEmpty()) - return 0; - reply = vl.first(); - if (reply.type() != QVariant::UInt) - return 0; - signals_left = total_signals = reply.toUInt(); - - if (!signals_left) - return 0; - - timer.setSingleShot(true); - timer.start(timeout); - stats_results.clear(); - while (signals_left) { - mInterface.clear(); - while (timer.isActive() && mInterface.isEmpty()) { - QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); - } - - if (!timer.isActive()) { - total_signals = 0; - break; - } - - if (mSignal != ICD_DBUS_API_STATISTICS_SIG) { - continue; - } - - if (mError.isEmpty()) { - get_statistics_all_result(mArgs, result); - stats_results << result; - signals_left--; - } else { - qWarning() << "Error:" << mError; - break; - } - } - timer.stop(); - - return total_signals; -} - - -uint IcdPrivate::statistics(QString& service_type, uint service_attrs, - QString& service_id, QString& network_type, - uint network_attrs, QByteArray& network_id, - IcdStatisticsResult& stats_result) -{ - QTimer timer; - QVariant reply; - uint total_signals; - QVariantList vl; - - clearState(); - - reply = mDBus->call(ICD_DBUS_API_STATISTICS_REQ, - service_type, service_attrs, service_id, - network_type, network_attrs, network_id); - if (reply.type() != QVariant::List) - return 0; - vl = reply.toList(); - if (vl.isEmpty()) - return 0; - reply = vl.first(); - total_signals = reply.toUInt(); - if (!total_signals) - return 0; - - timer.setSingleShot(true); - timer.start(timeout); - - mInterface.clear(); - while (timer.isActive() && mInterface.isEmpty()) { - QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); - - if (mSignal != ICD_DBUS_API_STATISTICS_SIG) { - mInterface.clear(); - continue; - } - } - - timer.stop(); - - if (mError.isEmpty()) { - get_statistics_all_result(mArgs, stats_result); - } else { - qWarning() << "Error:" << mError; - } - - // The returned value should be one because we asked for one statistics - return total_signals; -} - - -static void get_addrinfo_all_result(QList& args, - IcdAddressInfoResult& ret) -{ - int i=0; - - if (args.isEmpty()) - return; - - ret.params.service_type = args[i++].toString(); - ret.params.service_attrs = args[i++].toUInt(); - ret.params.service_id = args[i++].toString(); - ret.params.network_type = args[i++].toString(); - ret.params.network_attrs = args[i++].toUInt(); - ret.params.network_id = args[i++].toByteArray(); - - QVariantList vl = args[i].toList(); - QVariant reply = vl.first(); - QList lst = reply.toList(); - for (int k=0; k& addr_results) -{ - QTimer timer; - QVariant reply; - QVariantList vl; - uint signals_left, total_signals; - IcdAddressInfoResult result; - - clearState(); - reply = mDBus->call(ICD_DBUS_API_ADDRINFO_REQ); - if (reply.type() != QVariant::List) - return 0; - vl = reply.toList(); - if (vl.isEmpty()) - return 0; - reply = vl.first(); - if (reply.type() != QVariant::UInt) - return 0; - signals_left = total_signals = reply.toUInt(); - if (!signals_left) - return 0; - - timer.setSingleShot(true); - timer.start(timeout); - addr_results.clear(); - while (signals_left) { - mInterface.clear(); - while (timer.isActive() && mInterface.isEmpty()) { - mDBus->synchronousDispatch(1000); - } - - if (!timer.isActive()) { - total_signals = 0; - break; - } - - if (mSignal != ICD_DBUS_API_ADDRINFO_SIG) { - continue; - } - - if (mError.isEmpty()) { - get_addrinfo_all_result(mArgs, result); - addr_results << result; - signals_left--; - } else { - qWarning() << "Error:" << mError; - break; - } - } - timer.stop(); - return total_signals; -} - -uint IcdPrivate::addrinfo_non_blocking(QList& addr_results) -{ - QTimer timer; - QVariant reply; - QVariantList vl; - uint signals_left, total_signals; - IcdAddressInfoResult result; - - clearState(); - reply = mDBus->call(ICD_DBUS_API_ADDRINFO_REQ); - if (reply.type() != QVariant::List) - return 0; - vl = reply.toList(); - if (vl.isEmpty()) - return 0; - reply = vl.first(); - if (reply.type() != QVariant::UInt) - return 0; - signals_left = total_signals = reply.toUInt(); - if (!signals_left) - return 0; - - timer.setSingleShot(true); - timer.start(timeout); - addr_results.clear(); - while (signals_left) { - mInterface.clear(); - while (timer.isActive() && mInterface.isEmpty()) { - QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); - } - - if (!timer.isActive()) { - total_signals = 0; - break; - } - - if (mSignal != ICD_DBUS_API_ADDRINFO_SIG) { - continue; - } - - if (mError.isEmpty()) { - get_addrinfo_all_result(mArgs, result); - addr_results << result; - signals_left--; - } else { - qWarning() << "Error:" << mError; - break; - } - } - timer.stop(); - return total_signals; -} - - -uint IcdPrivate::addrinfo(QString& service_type, uint service_attrs, - QString& service_id, QString& network_type, - uint network_attrs, QByteArray& network_id, - IcdAddressInfoResult& addr_result) -{ - QTimer timer; - QVariant reply; - uint total_signals; - QVariantList vl; - - clearState(); - - reply = mDBus->call(ICD_DBUS_API_ADDRINFO_REQ, - service_type, service_attrs, service_id, - network_type, network_attrs, network_id); - if (reply.type() != QVariant::List) - return 0; - vl = reply.toList(); - if (vl.isEmpty()) - return 0; - reply = vl.first(); - total_signals = reply.toUInt(); - - if (!total_signals) - return 0; - - timer.setSingleShot(true); - timer.start(timeout); - - mInterface.clear(); - while (timer.isActive() && mInterface.isEmpty()) { - QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); - - if (mSignal != ICD_DBUS_API_ADDRINFO_SIG) { - mInterface.clear(); - continue; - } - } - - timer.stop(); - - if (mError.isEmpty()) { - get_addrinfo_all_result(mArgs, addr_result); - } else { - qWarning() << "Error:" << mError; - } - - // The returned value should be one because we asked for one addrinfo - return total_signals; -} - - -Icd::Icd(QObject *parent) - : QObject(parent), d(new IcdPrivate(this)) -{ -} - -Icd::Icd(unsigned int timeout, QObject *parent) - : QObject(parent), d(new IcdPrivate(timeout, this)) -{ -} - -Icd::Icd(unsigned int timeout, IcdDbusInterfaceVer ver, QObject *parent) - : QObject(parent), d(new IcdPrivate(timeout, ver, this)) -{ -} - -Icd::~Icd() -{ - delete d; -} - - -QStringList Icd::scan(icd_scan_request_flags flags, - QStringList &network_types, - QList& scan_results, - QString& error) -{ - return d->scan(flags, network_types, scan_results, error); -} - - -void Icd::scanCancel() -{ - d->scanCancel(); -} - - -bool Icd::connect(icd_connection_flags flags, IcdConnectResult& result) -{ - return d->connect(flags, result); -} - - -bool Icd::connect(icd_connection_flags flags, QList& params, - IcdConnectResult& result) -{ - return d->connect(flags, params, result); -} - - -bool Icd::connect(icd_connection_flags flags, QString& iap, QString& result) -{ - return d->connect(flags, iap, result); -} - - -void Icd::select(uint flags) -{ - d->select(flags); -} - - -void Icd::disconnect(uint connect_flags, QString& service_type, - uint service_attrs, QString& service_id, - QString& network_type, uint network_attrs, - QByteArray& network_id) -{ - d->disconnect(connect_flags, service_type, - service_attrs, service_id, - network_type, network_attrs, - network_id); -} - - -void Icd::disconnect(uint connect_flags) -{ - d->disconnect(connect_flags); -} - - -uint Icd::state(QString& service_type, uint service_attrs, - QString& service_id, QString& network_type, - uint network_attrs, QByteArray& network_id, - IcdStateResult &state_result) -{ - return d->state(service_type, service_attrs, service_id, - network_type, network_attrs, network_id, - state_result); -} - - -uint Icd::statistics(QString& service_type, uint service_attrs, - QString& service_id, QString& network_type, - uint network_attrs, QByteArray& network_id, - IcdStatisticsResult& stats_result) -{ - return d->statistics(service_type, service_attrs, service_id, - network_type, network_attrs, network_id, - stats_result); -} - - -uint Icd::addrinfo(QString& service_type, uint service_attrs, - QString& service_id, QString& network_type, - uint network_attrs, QByteArray& network_id, - IcdAddressInfoResult& addr_result) -{ - return d->addrinfo(service_type, service_attrs, service_id, - network_type, network_attrs, network_id, - addr_result); -} - - -uint Icd::state(QList& state_results) -{ - return d->state(state_results); -} - -uint Icd::state_non_blocking(QList& state_results) -{ - return d->state_non_blocking(state_results); -} - -uint Icd::statistics(QList& stats_results) -{ - return d->statistics(stats_results); -} - - -uint Icd::addrinfo(QList& addr_results) -{ - return d->addrinfo(addr_results); -} - -uint Icd::addrinfo_non_blocking(QList& addr_results) -{ - return d->addrinfo_non_blocking(addr_results); -} - -void Icd::icdSignalReceived(const QString& interface, - const QString& signal, - const QList& args) -{ - d->signalReceived(interface, signal, args); -} - - -void Icd::icdCallReply(const QString& method, - const QList& args, - const QString& error) -{ - d->callReply(method, args, error); -} - - -QString Icd::error() -{ - return d->error(); -} - -} // Maemo namespace - - diff --git a/src/3rdparty/libconninet/src/maemo_icd.h b/src/3rdparty/libconninet/src/maemo_icd.h deleted file mode 100644 index d7a8d5b..0000000 --- a/src/3rdparty/libconninet/src/maemo_icd.h +++ /dev/null @@ -1,182 +0,0 @@ -/* - libconninet - Internet Connectivity support library - - Copyright (C) 2009 Nokia Corporation. All rights reserved. - - Contact: Jukka Rissanen - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License - version 2.1 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - 02110-1301 USA -*/ - -#ifndef MAEMO_ICD_H -#define MAEMO_ICD_H - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "dbusdispatcher.h" -#include - -#define ICD_LONG_SCAN_TIMEOUT (30*1000) /* 30sec */ -#define ICD_SHORT_SCAN_TIMEOUT (10*1000) /* 10sec */ -#define ICD_SHORT_CONNECT_TIMEOUT (10*1000) /* 10sec */ -#define ICD_LONG_CONNECT_TIMEOUT (150*1000) /* 2.5min */ - -namespace Maemo { - -struct CommonParams { - QString service_type; - uint service_attrs; - QString service_id; - QString network_type; - uint network_attrs; - QByteArray network_id; -}; - -struct ConnectParams { - struct CommonParams connect; -}; - -struct IcdScanResult { - uint status; // see #icd_scan_status - uint timestamp; // when last seen - QString service_name; - uint service_priority; // within a service type - QString network_name; - uint network_priority; - struct CommonParams scan; - uint signal_strength; // quality, 0 (none) - 10 (good) - QString station_id; // e.g. MAC address or similar id - uint signal_dB; // use signal strength above unless you know what you are doing - - IcdScanResult() { - status = timestamp = scan.service_attrs = service_priority = - scan.network_attrs = network_priority = signal_strength = - signal_dB = 0; - } -}; - -struct IcdConnectResult { - struct CommonParams connect; - uint status; -}; - -struct IcdStateResult { - struct CommonParams params; - QString error; - uint state; -}; - -struct IcdStatisticsResult { - struct CommonParams params; - uint time_active; // in seconds - enum icd_nw_levels signal_strength; // see network_api_defines.h in icd2-dev package - uint bytes_sent; - uint bytes_received; -}; - -struct IcdIPInformation { - QString address; - QString netmask; - QString default_gateway; - QString dns1; - QString dns2; - QString dns3; -}; - -struct IcdAddressInfoResult { - struct CommonParams params; - QList ip_info; -}; - -enum IcdDbusInterfaceVer { - IcdOldDbusInterface = 0, // use the old OSSO-IC interface - IcdNewDbusInterface // use the new Icd2 interface (default) -}; - - -class IcdPrivate; -class Icd : public QObject -{ - Q_OBJECT - -public: - Icd(QObject *parent = 0); - Icd(unsigned int timeout, QObject *parent = 0); - Icd(unsigned int timeout, IcdDbusInterfaceVer ver, QObject *parent = 0); - ~Icd(); - QString error(); // returns last error string - - /* Icd2 dbus API functions */ - QStringList scan(icd_scan_request_flags flags, - QStringList &network_types, - QList& scan_results, - QString& error); - void scanCancel(); - bool connect(icd_connection_flags flags, IcdConnectResult& result); - bool connect(icd_connection_flags flags, QList& params, - IcdConnectResult& result); - bool connect(icd_connection_flags flags, QString& iap, QString& result); - void select(uint flags); - void disconnect(uint connect_flags, QString& service_type, - uint service_attrs, QString& service_id, - QString& network_type, uint network_attrs, - QByteArray& network_id); - void disconnect(uint connect_flags); - - uint state(QString& service_type, uint service_attrs, - QString& service_id, QString& network_type, - uint network_attrs, QByteArray& network_id, - IcdStateResult &state_result); - uint statistics(QString& service_type, uint service_attrs, - QString& service_id, QString& network_type, - uint network_attrs, QByteArray& network_id, - IcdStatisticsResult& stats_result); - uint addrinfo(QString& service_type, uint service_attrs, - QString& service_id, QString& network_type, - uint network_attrs, QByteArray& network_id, - IcdAddressInfoResult& addr_result); - - uint state(QList& state_results); - uint state_non_blocking(QList& state_results); - uint statistics(QList& stats_results); - uint addrinfo(QList& addr_results); - uint addrinfo_non_blocking(QList& addr_results); - -private Q_SLOTS: - void icdSignalReceived(const QString& interface, - const QString& signal, - const QList& args); - void icdCallReply(const QString& method, - const QList& args, - const QString& error); - -private: - IcdPrivate *d; - friend class IcdPrivate; -}; - -} // Maemo namespace - -#endif diff --git a/src/3rdparty/libconninet/src/proxyconf.cpp b/src/3rdparty/libconninet/src/proxyconf.cpp deleted file mode 100644 index 5b27565..0000000 --- a/src/3rdparty/libconninet/src/proxyconf.cpp +++ /dev/null @@ -1,315 +0,0 @@ -/* - libconninet - Internet Connectivity support library - - Copyright (C) 2010 Nokia Corporation. All rights reserved. - - Contact: Jukka Rissanen - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License - version 2.1 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - 02110-1301 USA -*/ - -#include -#include -#include -#include -#include -#include -#include "proxyconf.h" - -#define CONF_PROXY "/system/proxy" -#define HTTP_PROXY "/system/http_proxy" - - -namespace Maemo { - -class NetworkProxyFactory : QNetworkProxyFactory { -public: - NetworkProxyFactory() { } - QList queryProxy(const QNetworkProxyQuery &query = QNetworkProxyQuery()); -}; - - -QList NetworkProxyFactory::queryProxy(const QNetworkProxyQuery &query) -{ - ProxyConf proxy_conf; - - QList result = proxy_conf.flush(query); - if (result.isEmpty()) - result << QNetworkProxy::NoProxy; - - return result; -} - - -class ProxyConfPrivate { -private: - // proxy values from gconf - QString mode; - bool use_http_host; - QString autoconfig_url; - QString http_proxy; - quint16 http_port; - QList ignore_hosts; - QString secure_host; - quint16 secure_port; - QString ftp_host; - quint16 ftp_port; - QString socks_host; - quint16 socks_port; - QString rtsp_host; - quint16 rtsp_port; - - QVariant getValue(QString& name); - QVariant getHttpValue(QString& name); - QVariant getValue(const char *name); - QVariant getHttpValue(const char *name); - bool isHostExcluded(const QString &host); - -public: - QString prefix; - QString http_prefix; - - void readProxyData(); - QList flush(const QNetworkProxyQuery &query); -}; - - -QVariant ProxyConfPrivate::getValue(QString& name) -{ - GConfItem item(prefix + name); - return item.value(); -} - -QVariant ProxyConfPrivate::getHttpValue(QString& name) -{ - GConfItem item(http_prefix + name); - return item.value(); -} - - -QVariant ProxyConfPrivate::getValue(const char *name) -{ - QString n = QString(name); - return getValue(n); -} - -QVariant ProxyConfPrivate::getHttpValue(const char *name) -{ - QString n = QString(name); - return getHttpValue(n); -} - - -#define GET(var, type) \ - do { \ - var = getValue(#var).to##type (); \ - /*qDebug()<<"var="<prefix = CONF_PROXY "/"; - d_ptr->http_prefix = HTTP_PROXY "/"; -} - -ProxyConf::~ProxyConf() -{ - delete d_ptr; -} - - -QList ProxyConf::flush(const QNetworkProxyQuery &query) -{ - d_ptr->readProxyData(); - return d_ptr->flush(query); -} - - -static int refcount = 0; -static QReadWriteLock lock; - -void ProxyConf::update() -{ - QWriteLocker locker(&lock); - NetworkProxyFactory *factory = new NetworkProxyFactory(); - QNetworkProxyFactory::setApplicationProxyFactory((QNetworkProxyFactory*)factory); - refcount++; -} - - -void ProxyConf::clear(void) -{ - QWriteLocker locker(&lock); - refcount--; - if (refcount == 0) - QNetworkProxyFactory::setApplicationProxyFactory(NULL); - - if (refcount<0) - refcount = 0; -} - - -} // namespace Maemo diff --git a/src/3rdparty/libconninet/src/proxyconf.h b/src/3rdparty/libconninet/src/proxyconf.h deleted file mode 100644 index 7711c49..0000000 --- a/src/3rdparty/libconninet/src/proxyconf.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - libconninet - Internet Connectivity support library - - Copyright (C) 2010 Nokia Corporation. All rights reserved. - - Contact: Jukka Rissanen - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License - version 2.1 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - 02110-1301 USA -*/ - -#ifndef PROXYCONF_H -#define PROXYCONF_H - -#include -#include - -namespace Maemo { - -class ProxyConfPrivate; -class ProxyConf { -private: - ProxyConfPrivate *d_ptr; - -public: - ProxyConf(); - virtual ~ProxyConf(); - - QList flush(const QNetworkProxyQuery &query = QNetworkProxyQuery()); // read the proxies from db - - /* Note that for each update() call there should be corresponding - * clear() call because the ProxyConf class implements a reference - * counting mechanism. The factory is removed only when there is - * no one using the factory any more. - */ - static void update(void); // this builds QNetworkProxy factory - static void clear(void); // this removes QNetworkProxy factory -}; - -} // namespace Maemo - -#endif diff --git a/src/3rdparty/libconninet/tests/Makefile.am b/src/3rdparty/libconninet/tests/Makefile.am deleted file mode 100644 index f6f41ea..0000000 --- a/src/3rdparty/libconninet/tests/Makefile.am +++ /dev/null @@ -1,39 +0,0 @@ -DEFS = -DDBUS_API_SUBJECT_TO_CHANGE -INCLUDES = @GLIB_CFLAGS@ @DBUS_CFLAGS@ @CONNSETTINGS_CFLAGS@ @OSSO_IC_CFLAGS@ @ICD_DEV_CFLAGS@ \ - @QTCORE_CFLAGS@ @QTDBUS_CFLAGS@ @QTCORE_CFLAGS@ @QTNETWORK_CFLAGS@ @QTTEST_CFLAGS@ \ - -I$(top_srcdir) \ - -I$(top_srcdir)/src - -LIBS = @GLIB_LIBS@ @DBUS_LIBS@ @CONNSETTINGS_LIBS@ @OSSO_IC_LIBS@ @ICD_DEV_LIBS@ \ - @QTCORE_LIBS@ @QTDBUS_LIBS@ @QTCORE_LIBS@ @QTNETWORK_LIBS@ @QTTEST_LIBS@ \ - $(top_builddir)/src/libconninet.la - -AM_CFLAGS = $(CONCFLAGS) -AM_LDFLAGS = -static - -bin_PROGRAMS = test_dbusdispatcher test_iapconf test_maemo_icd test_iapmonitor test_proxyconf - -test_dbusdispatcher_SOURCES = ut_dbusdispatcher.cpp -ut_dbusdispatcher.o: ut_dbusdispatcher.moc - -test_iapconf_SOURCES = ut_iapconf.cpp -ut_iapconf.o: ut_iapconf.moc - -test_maemo_icd_SOURCES = ut_maemo_icd.cpp -ut_maemo_icd.o: ut_maemo_icd.moc - -test_iapmonitor_SOURCES = ut_iapmonitor.cpp -ut_iapmonitor.o: ut_iapmonitor.moc - -test_proxyconf_SOURCES = ut_proxyconf.cpp -ut_proxyconf.o: ut_proxyconf.moc - - -MAINTAINERCLEANFILES = Makefile.in - -# This rule lets GNU make create any *.moc from the equivalent *.cpp -%.moc: %.cpp - moc $< -o $@ - -# This line ensures that generated moc files are deleted when we make clean. -CLEANFILES = *.moc diff --git a/src/3rdparty/libconninet/tests/ut_dbusdispatcher.cpp b/src/3rdparty/libconninet/tests/ut_dbusdispatcher.cpp deleted file mode 100644 index 70deb3f..0000000 --- a/src/3rdparty/libconninet/tests/ut_dbusdispatcher.cpp +++ /dev/null @@ -1,191 +0,0 @@ -/* * This file is part of conn-dui-settings-inet * - * - * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * - * Contact: Aapo Makela - * - * This software, including documentation, is protected by copyright - * controlled by Nokia Corporation. All rights are reserved. Copying, - * including reproducing, storing, adapting or translating, any or all of - * this material requires the prior written consent of Nokia Corporation. - * This material also contains confidential information which may not be - * disclosed to others without the prior written consent of Nokia. - */ - -#include -#include -#include -#include -#include - -#include - -class Ut_DBusDispatcher : public QObject -{ - Q_OBJECT - -private Q_SLOTS: - void init(); - void cleanup(); - void initTestCase(); - void cleanupTestCase(); - - void simpleSignalReceived(const QString& interface, - const QString& signal, - const QList& args); - void simpleCallReply(const QString& method, - const QList& args, - const QString& error); - void simpleCall(); - - void complexCallReply(const QString& method, - const QList& args, - const QString& error); - void complexCall(); - -private: - Maemo::DBusDispatcher *mSubject; - QProcess *icd_stub; - - QString mMethod; - QString mInterface; - QString mSignal; - QList mArgs; -}; - -void Ut_DBusDispatcher::init() -{ - mSubject = new Maemo::DBusDispatcher("com.nokia.icd2", "/com/nokia/icd2", - "com.nokia.icd2"); - - // Start icd2 stub - icd_stub = new QProcess(this); - icd_stub->start("/usr/bin/icd2_stub.py"); - QTest::qWait(1000); -} - -void Ut_DBusDispatcher::cleanup() -{ - // Terminate icd2 stub - icd_stub->terminate(); - icd_stub->waitForFinished(); - - delete mSubject; - mSubject = 0; -} - -void Ut_DBusDispatcher::initTestCase() -{ -} - -void Ut_DBusDispatcher::cleanupTestCase() -{ -} - -void Ut_DBusDispatcher::simpleSignalReceived(const QString& interface, - const QString& signal, - const QList& args) -{ - // Signal handler, which simply records what has been signalled - mInterface = interface; - mSignal = signal; - mArgs = args; -} - -void Ut_DBusDispatcher::simpleCallReply(const QString& method, - const QList& args, - const QString& error) -{ - mMethod = method; - - // Check that method matches and at least WLAN_INFRA is returned - QVERIFY(error.isEmpty()); - QVERIFY(args[0].toStringList().contains("WLAN_INFRA")); -} - -void Ut_DBusDispatcher::simpleCall() -{ - uint flags = 0; - QList reply; - int idx = 0; - QTimer timer; - - // Connect signals - connect(mSubject, SIGNAL(signalReceived(const QString&, - const QString&, - const QList&)), - this, SLOT(simpleSignalReceived(const QString&, - const QString&, - const QList&))); - connect(mSubject, SIGNAL(callReply(const QString&, - const QList&, - const QString&)), - this, SLOT(simpleCallReply(const QString&, - const QList&, - const QString&))); - - // Request scan and verify the call starts succesfully - QVERIFY(mSubject->callAsynchronous("scan_req", flags)); - - // Wait 1st scan signal for 10 secs - timer.setSingleShot(true); - timer.start(10000); - while (timer.isActive() && mInterface.isEmpty()) { - QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); - idx++; - } - timer.stop(); - - // Sanity checks for the scan result - QVERIFY(mInterface == "com.nokia.icd2"); // interface is icd2 - QVERIFY(mMethod == "scan_req"); // method is scan_req - QVERIFY(mSignal == "scan_result_sig"); // signal is scan result - QVERIFY(mArgs[0] == QVariant(0) || - mArgs[0] == QVariant(4)); // First argument is status - // (0 == NEW, 4 == COMPLETED) - //QVERIFY(mArgs.contains(QVariant("WLAN_INFRA"))); // WLAN scan result -} - -void Ut_DBusDispatcher::complexCallReply(const QString& method, - const QList& args, - const QString& error) -{ - mMethod = method; - - // Check that method has not return arguments and error is not set - QVERIFY(error.isEmpty()); - QVERIFY(args.isEmpty()); -} - -void Ut_DBusDispatcher::complexCall() -{ - uint flags = ICD_CONNECTION_FLAG_UI_EVENT; - QList reply; - QVariantList networks; - QVariantList network1; - - network1 << "" << (uint)0 << "" << "WLAN_INFRA" << (uint)0x05000011 << QByteArray("osso@46@net"); - networks << QVariant(network1); - - // Connect signal - connect(mSubject, SIGNAL(callReply(const QString&, - const QList&, - const QString&)), - this, SLOT(complexCallReply(const QString&, - const QList&, - const QString&))); - - // Request connect and verify the call starts succesfully - QVERIFY(mSubject->callAsynchronous("connect_req", flags, networks)); - - QTest::qWait(1000); - - // Sanity checks for the scan result - QVERIFY(mInterface == "com.nokia.icd2"); // interface is icd2 - QVERIFY(mMethod == "connect_req"); // method connect_req -} - -QTEST_MAIN(Ut_DBusDispatcher) - -#include "ut_dbusdispatcher.moc" diff --git a/src/3rdparty/libconninet/tests/ut_iapconf.cpp b/src/3rdparty/libconninet/tests/ut_iapconf.cpp deleted file mode 100644 index 6a91d61..0000000 --- a/src/3rdparty/libconninet/tests/ut_iapconf.cpp +++ /dev/null @@ -1,186 +0,0 @@ -/* - libconninet - Internet Connectivity support library - - Copyright (C) 2009 Nokia Corporation. All rights reserved. - - Contact: Aapo Makela - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License - version 2.1 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - 02110-1301 USA -*/ - - -#include -#include - -#include - -class Ut_IAPConf : public QObject -{ - Q_OBJECT - -private Q_SLOTS: - void init(); - void cleanup(); - void initTestCase(); - void cleanupTestCase(); - - void setupIAP(); - void setupIAPContainingDot(); - void unsetIAPValueIsNotValid(); - void verifyAllIAPs(); - void allForEmptyConfReturnsEmptyList(); - void settingInvalidValueUnsetsKey(); - -private: - Maemo::IAPConf *mSubject; -}; - -void Ut_IAPConf::init() -{ - mSubject = new Maemo::IAPConf("test_iap"); -} - -void Ut_IAPConf::cleanup() -{ - // Clear made settings - mSubject->clear(); - - delete mSubject; - mSubject = 0; -} - -void Ut_IAPConf::initTestCase() -{ -} - -void Ut_IAPConf::cleanupTestCase() -{ -} - -void Ut_IAPConf::setupIAP() -{ - // Set bunch of values - mSubject->set("ipv4_type", "AUTO", - "wlan_wepkey1", "connt", - "wlan_wepdefkey", 1, - "wlan_ssid", QByteArray("CONNTEST-1")); - - // Set one value - mSubject->setValue("type", "WLAN_INFRA"); - - // Check all values that they were set correctly - QVERIFY(mSubject->value("ipv4_type").toString() == "AUTO"); - QVERIFY(mSubject->value("wlan_wepkey1").toString() == "connt"); - QVERIFY(mSubject->value("wlan_wepdefkey").toInt() == 1); - QVERIFY(mSubject->value("wlan_ssid").toByteArray() == QByteArray("CONNTEST-1")); - QVERIFY(mSubject->value("type").toString() == "WLAN_INFRA"); -} - -void Ut_IAPConf::setupIAPContainingDot() -{ - delete mSubject; - mSubject = new Maemo::IAPConf("test.iap"); - - // Set and check one value - mSubject->setValue("type", "DUMMY"); - QVERIFY(mSubject->value("type").toString() == "DUMMY"); -} - -void Ut_IAPConf::unsetIAPValueIsNotValid() -{ - QVariant invalidValue = mSubject->value("this_value_does_not_exist"); - QVERIFY(invalidValue.isValid() == false); -} - -void Ut_IAPConf::verifyAllIAPs() -{ - int count = 0, extras = 0; - QRegExp regexp("iap[1-3]"); - Maemo::IAPConf iap1("iap1"); - Maemo::IAPConf iap2("iap2"); - Maemo::IAPConf iap3("iap3"); - - iap1.clear(); - iap2.clear(); - iap3.clear(); - - iap1.setValue("name", "iap1"); - iap2.setValue("name", "iap2"); - iap3.setValue("name", "iap3"); - - count = extras = 0; - QList iaps; - Maemo::IAPConf::getAll(iaps, true); - foreach (QString iap_path, iaps) { - QString iap_id = iap_path.section('/', 5); /* This is the IAP id */ - if (!iap_id.contains(regexp)) { - extras++; - continue; - } - Maemo::IAPConf iap(iap_id); - QString name = iap.value("name").toString(); - QVERIFY(name == iap_id); - count++; - } - QCOMPARE(count, iaps.size()-extras); - - iap1.clear(); - iap2.clear(); - iap3.clear(); - - iap1.setValue("name", "iap1"); - iap2.setValue("name", "iap2"); - iap3.setValue("name", "iap3"); - - count = extras = 0; - Maemo::IAPConf::getAll(iaps); - foreach (QString iap_id, iaps) { - if (!iap_id.contains(regexp)) { - extras++; - continue; - } - Maemo::IAPConf iap(iap_id); - QString name = iap.value("name").toString(); - QVERIFY(name == iap_id); - count++; - } - QCOMPARE(count, iaps.size()-extras); -} - -void Ut_IAPConf::allForEmptyConfReturnsEmptyList() -{ - // Clear everything in configuration - mSubject->clearAll(); - - // Get all for a list and check that it is empty - QStringList iaps; - mSubject->getAll(iaps); - QVERIFY(iaps.isEmpty()); -} - -void Ut_IAPConf::settingInvalidValueUnsetsKey() -{ - // Setup some IAP - setupIAP(); - - // Set invalid value to unset "wlan_wepdefkey" key and verify that the - // value is unset - mSubject->setValue("wlan_wepdefkey", QVariant()); - QVERIFY(!mSubject->value("wlan_wepdefkey").isValid()); -} - -QTEST_MAIN(Ut_IAPConf) - -#include "ut_iapconf.moc" diff --git a/src/3rdparty/libconninet/tests/ut_iapmonitor.cpp b/src/3rdparty/libconninet/tests/ut_iapmonitor.cpp deleted file mode 100644 index f14f623..0000000 --- a/src/3rdparty/libconninet/tests/ut_iapmonitor.cpp +++ /dev/null @@ -1,118 +0,0 @@ -/* - libconninet - Internet Connectivity support library - - Copyright (C) 2009-2010 Nokia Corporation. All rights reserved. - - Contact: Jukka Rissanen - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License - version 2.1 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - 02110-1301 USA -*/ - - -#include -#include - -#include -#include - -static const char *iap_id = "test_monitor_1"; - -class TestIAPMonitor : public Maemo::IAPMonitor -{ -public: - QString addedIap; - QString removedIap; - -protected: - virtual void iapAdded(const QString &id) - { - addedIap = id; - } - - virtual void iapRemoved(const QString &id) - { - removedIap = id; - } -}; - -class Ut_IAPMonitor : public QObject -{ - Q_OBJECT - -private Q_SLOTS: - void init(); - void cleanup(); - void initTestCase(); - void cleanupTestCase(); - - void check(); - -private: - TestIAPMonitor *mon; - Maemo::IAPConf *iap; -}; - -void Ut_IAPMonitor::init() -{ - mon = new TestIAPMonitor; -} - -void Ut_IAPMonitor::cleanup() -{ - delete mon; - mon = 0; -} - -void Ut_IAPMonitor::initTestCase() -{ -} - -void Ut_IAPMonitor::cleanupTestCase() -{ -} - -void Ut_IAPMonitor::check() -{ - QVERIFY(mon->addedIap.isEmpty()); - - iap = new Maemo::IAPConf(iap_id); - iap->set("ipv4_type", "AUTO", - "wlan_wepkey1", "connt", - "wlan_wepdefkey", 1, - "wlan_ssid", QByteArray(iap_id)); - - QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); - QVERIFY(mon->addedIap == iap_id); - mon->addedIap.clear(); - - QVERIFY(mon->removedIap.isEmpty()); - - // Unset only one value and verify that IAP is not removed - iap->set("ipv4_type", QVariant()); - QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); - QVERIFY(mon->removedIap.isEmpty()); - - // Clear the whole IAP and check that it is removed - iap->clear(); - delete iap; - - QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); - - QVERIFY(mon->removedIap == iap_id); -} - -QTEST_MAIN(Ut_IAPMonitor) - -#include "ut_iapmonitor.moc" diff --git a/src/3rdparty/libconninet/tests/ut_maemo_icd.cpp b/src/3rdparty/libconninet/tests/ut_maemo_icd.cpp deleted file mode 100644 index 494829d..0000000 --- a/src/3rdparty/libconninet/tests/ut_maemo_icd.cpp +++ /dev/null @@ -1,274 +0,0 @@ -/* - * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * - * Contact: Jukka Rissanen - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * version 2.1 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - * 02110-1301 USA - */ - - -// !!!! -// !!!! NOTE: THESE TEST DO NOT REALLY WORK YET BECAUSE OF MISSING -// !!!! FUNCTIONALITY IN ICD2 STUB. YOU HAVE BEEN WARNED. -// !!!! - - -#include -#include -#include -#include -#include - -#include "maemo_icd.h" - -class Ut_MaemoIcd : public QObject -{ - Q_OBJECT - -private Q_SLOTS: - void init(); - void cleanup(); - void initTestCase(); - void cleanupTestCase(); - - void scan_req(); - void scan_cancel_req(); - void connect_req_default(); - void state_req_all(); - void state_req(); - void statistics_req_all(); - void statistics_req(); - void addrinfo_req_all(); - void addrinfo_req(); - -private: - void disconnect_req_default(); // this is currently not run - void connect_req_specific(); // this is currently not run - QProcess *icd_stub; - bool connect_iap(Maemo::IcdConnectResult &connect_result, - QString &result, - QString &error, - QString iap=QString()); -}; - - -QString create_error_str(Maemo::Icd &icd) -{ - return icd.error(); -} - - -void Ut_MaemoIcd::init() -{ - icd_stub = new QProcess(this); - icd_stub->setStandardOutputFile("/tmp/ut_maemo_icd.log"); - icd_stub->start("/usr/bin/icd2_stub.py"); - QTest::qWait(1000); - - // Set the statistics - QProcess dbus_send; - dbus_send.start("dbus-send --type=method_call --system " - "--dest=com.nokia.icd2 /com/nokia/icd2 " - "com.nokia.icd2.testing.set_statistics " - "uint32:1024 uint32:256"); - dbus_send.waitForFinished(); - -} - -void Ut_MaemoIcd::cleanup() -{ - icd_stub->terminate(); - icd_stub->waitForFinished(); -} - -void Ut_MaemoIcd::initTestCase() -{ -} - -void Ut_MaemoIcd::cleanupTestCase() -{ -} - -void Ut_MaemoIcd::scan_req() -{ - QList scanned; - QStringList scannedNetworkTypes; - QStringList networkTypesToScan; - QString error; - Maemo::Icd icd(ICD_SHORT_SCAN_TIMEOUT); - - scannedNetworkTypes = icd.scan(ICD_SCAN_REQUEST_ACTIVE, - networkTypesToScan, - scanned, - error); - QVERIFY(error.isEmpty()); - QCOMPARE(scanned.size(), 3); - QVERIFY(scannedNetworkTypes[0] == "WLAN_INFRA"); - QVERIFY(scannedNetworkTypes[1] == "DUN_GSM_PS"); -} - -void Ut_MaemoIcd::scan_cancel_req() -{ - Maemo::Icd icd; - icd.scanCancel(); - // Not much to verify here -} - -bool Ut_MaemoIcd::connect_iap(Maemo::IcdConnectResult &connect_result, - QString &result, - QString &error, - QString iap) -{ - icd_connection_flags flags = ICD_CONNECTION_FLAG_USER_EVENT; - bool st; - Maemo::Icd icd(ICD_SHORT_CONNECT_TIMEOUT); - - if (iap.isEmpty()) { - qDebug() << "connecting to default IAP"; - st = icd.connect(flags, connect_result); - } else { - qDebug() << "connecting to" << iap; - st = icd.connect(flags, iap, result); - } - - error = create_error_str(icd); - return st; -} - -void Ut_MaemoIcd::connect_req_default() -{ - Maemo::IcdConnectResult connect_result; - QString result, error; - bool st; - st = connect_iap(connect_result, result, error); - QVERIFY2(st, error.toAscii().data()); - result = connect_result.connect.network_id.data(); - qDebug() << result; -} - - -void Ut_MaemoIcd::disconnect_req_default() -{ - icd_connection_flags flags = ICD_CONNECTION_FLAG_USER_EVENT; - bool st; - Maemo::Icd icd(ICD_SHORT_CONNECT_TIMEOUT); - icd.disconnect(flags); -} - - -void Ut_MaemoIcd::connect_req_specific() -{ - Maemo::IcdConnectResult connect_result; - QString result; - QString error; - bool st; - st = connect_iap(connect_result, result, error, "wpa2gx2.osso.net"); - QVERIFY2(st, error.toAscii().data()); - qDebug() << result; -} - - -void Ut_MaemoIcd::state_req_all() -{ - QList state_results; - Maemo::Icd icd; - int sig; - sig = icd.state(state_results); - QVERIFY2(sig==1, create_error_str(icd).toAscii().data()); -} - - -void Ut_MaemoIcd::state_req() -{ - Maemo::IcdStateResult state_result; - Maemo::Icd icd; - int sig; - QString service_type, service_id; - QString network_type("WLAN_INFRA"); - QByteArray network_id("wpa2gx2.osso.net"); - sig = icd.state(service_type, 0, service_id, - network_type, (uint)0x17a1, network_id, - state_result); - QVERIFY2(sig==1, create_error_str(icd).toAscii().data()); -} - - -void Ut_MaemoIcd::statistics_req_all() -{ - QList stats_results; - Maemo::Icd icd; - int sig; - QString err; - sig = icd.statistics(stats_results); - err = create_error_str(icd); - if (!err.isEmpty()) - QVERIFY2(sig==1, err.toAscii().data()); - else - QCOMPARE(sig, 1); - - for(int i=0; i addr_results; - Maemo::Icd icd; - int sig; - sig = icd.addrinfo(addr_results); - QVERIFY2(sig==1, create_error_str(icd).toAscii().data()); -} - - -void Ut_MaemoIcd::addrinfo_req() -{ - Maemo::IcdAddressInfoResult addr_result; - Maemo::Icd icd; - int sig; - QString service_type, service_id; - QString network_type("WLAN_INFRA"); - QByteArray network_id("wpa2gx2.osso.net"); - sig = icd.addrinfo(service_type, 0, service_id, - network_type, (uint)0x17a1, network_id, - addr_result); - QVERIFY2(sig==1, create_error_str(icd).toAscii().data()); -} - - -QTEST_MAIN(Ut_MaemoIcd) - -#include "ut_maemo_icd.moc" diff --git a/src/3rdparty/libconninet/tests/ut_proxyconf.cpp b/src/3rdparty/libconninet/tests/ut_proxyconf.cpp deleted file mode 100644 index 1f407f0..0000000 --- a/src/3rdparty/libconninet/tests/ut_proxyconf.cpp +++ /dev/null @@ -1,400 +0,0 @@ -/* - libconninet - Internet Connectivity support library - - Copyright (C) 2010 Nokia Corporation. All rights reserved. - - Contact: Jukka Rissanen - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License - version 2.1 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - 02110-1301 USA -*/ - - -#include -#include -#include -#include - -#include "../src/proxyconf.h" - -class Ut_ProxyConf : public QObject -{ - Q_OBJECT - -private Q_SLOTS: - void init(); - void cleanup(); - void initTestCase(); - void cleanupTestCase(); - - // tests without the factory - void proxy_ftp_no_factory_ok_auto(); - void proxy_ftp_no_factory_ok_manual(); - void proxy_http_no_factory_ok_manual(); - void proxy_https_no_factory_ok_manual(); - void proxy_socks_no_factory_ok_manual(); - void proxy_default_no_factory_ok_manual(); - - // tests using the factory - void proxy_ftp_factory_ok_auto(); - void proxy_ftp_factory_ok_manual(); - void proxy_http_factory_ok_manual(); - void proxy_https_factory_ok_manual(); - void proxy_socks_factory_ok_manual(); - void proxy_http_factory_ok_manual_clear(); - void proxy_default_factory_ok_manual(); - void proxy_http_factory_ok_manual_ignore_list(); - void proxy_default_factory_ok_manual_system(); - -private: - Maemo::ProxyConf *pc; -}; - - -void put(QString var, QString type, QString value) -{ - QProcess gconf; - if (value.isEmpty()) - gconf.start(QString("gconftool-2 -u /system/proxy/"+var)); - else - gconf.start(QString("gconftool-2 -s /system/proxy/"+var+" -t "+type+" "+value)); - gconf.waitForFinished(); -} - -void put_http(QString var, QString type, QString value) -{ - QProcess gconf; - if (value.isEmpty()) - gconf.start(QString("gconftool-2 -u /system/http_proxy/"+var)); - else - gconf.start(QString("gconftool-2 -s /system/http_proxy/"+var+" -t "+type+" "+value)); - gconf.waitForFinished(); -} - -void put_list(QString var, QString type, QList value) -{ - QProcess gconf; - QString values = "["; - foreach (QString str, value) - values = values + str + ","; - values.chop(1); - values = values + "]"; - - gconf.start(QString("gconftool-2 -s /system/http_proxy/"+var+" -t list --list-type="+type+" "+values)); - gconf.waitForFinished(); -} - - -void Ut_ProxyConf::init() -{ - put_http("host", "string", "my.proxy.com"); - put_http("port", "int", "8080"); - - QList list; - list.append("foo.bar.com"); - list.append("192.168.19.69"); - list.append("192.168.20.0/24"); - list.append("bar.foo.com"); - put_list("ignore_hosts", "string", list); - put_http("use_http_host", "boolean", "true"); - - put("mode", "string", "auto"); - put("autoconfig_url", "string", "http://foo.bar.com/autoconf"); - put("secure_host", "string", "secure_host.com"); - put("secure_port", "int", "112"); - - put("ftp_host", "string", "ftp.nuukia.com"); - put("ftp_port", "int", "2000"); - put("socks_host", "string", "socks.host.com"); - put("socks_port", "int", "10080"); - put("rtsp_host", "string", "rtsp.voice.com"); - put("rtsp_port", "int", "1554"); - - pc = new Maemo::ProxyConf(); -} - -void Ut_ProxyConf::cleanup() -{ - delete pc; - pc = 0; -} - -void Ut_ProxyConf::initTestCase() -{ -} - -void Ut_ProxyConf::cleanupTestCase() -{ -} - - -void Ut_ProxyConf::proxy_ftp_no_factory_ok_auto() -{ - QList nplist; - QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("ftp://maps.google.com/")); - - nplist = pc->flush(query); - QVERIFY(nplist.length()==0); -} - - -void Ut_ProxyConf::proxy_ftp_no_factory_ok_manual() -{ - QList nplist; - QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("ftp://maps.google.com/")); - - put("mode", "string", "manual"); - - nplist = pc->flush(query); - foreach (QNetworkProxy proxy, nplist) { - qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port(); - } - QVERIFY(nplist.length()==3); - QVERIFY(nplist.first().type() == QNetworkProxy::FtpCachingProxy); -} - - -void Ut_ProxyConf::proxy_http_no_factory_ok_manual() -{ - QList nplist; - QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("http://maps.google.com/")); - - put("mode", "string", "manual"); - - nplist = pc->flush(query); - foreach (QNetworkProxy proxy, nplist) { - qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port(); - } - QVERIFY(nplist.length()==3); - QVERIFY(nplist.first().type() == QNetworkProxy::HttpProxy); -} - - -void Ut_ProxyConf::proxy_https_no_factory_ok_manual() -{ - QList nplist; - QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("https://maps.google.com/")); - - put("mode", "string", "manual"); - - nplist = pc->flush(query); - foreach (QNetworkProxy proxy, nplist) { - qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port(); - } - QVERIFY(nplist.length()==2); - QVERIFY(nplist.first().type() == QNetworkProxy::HttpProxy); -} - - -void Ut_ProxyConf::proxy_socks_no_factory_ok_manual() -{ - QList nplist; - QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("http://maps.google.com/")); - - put("mode", "string", "manual"); - put_http("host", "string", ""); - - nplist = pc->flush(query); - foreach (QNetworkProxy proxy, nplist) { - qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port(); - } - QVERIFY(nplist.length()==2); - QVERIFY(nplist.first().type() == QNetworkProxy::Socks5Proxy); -} - - -void Ut_ProxyConf::proxy_default_no_factory_ok_manual() -{ - QList nplist; - QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("foobar://maps.google.com/")); - - put("mode", "string", "manual"); - put("socks_host", "string", ""); - put("secure_host", "string", ""); - - nplist = pc->flush(query); - foreach (QNetworkProxy proxy, nplist) { - qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port(); - } - QVERIFY(nplist.length()==0); -} - - -void Ut_ProxyConf::proxy_ftp_factory_ok_auto() -{ - QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("ftp://maps.google.com/")); - Maemo::ProxyConf::update(); - QList listOfProxies = QNetworkProxyFactory::proxyForQuery(query); - QVERIFY(listOfProxies.length()==1); - QVERIFY(listOfProxies.first().type() == QNetworkProxy::NoProxy); - Maemo::ProxyConf::clear(); -} - - -void Ut_ProxyConf::proxy_ftp_factory_ok_manual() -{ - QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("ftp://maps.google.com/")); - Maemo::ProxyConf::update(); - - put("mode", "string", "manual"); - - QList listOfProxies = QNetworkProxyFactory::proxyForQuery(query); - - foreach (QNetworkProxy proxy, listOfProxies) { - qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port(); - } - QVERIFY(listOfProxies.length()==3); - QVERIFY(listOfProxies.first().type() == QNetworkProxy::FtpCachingProxy); - Maemo::ProxyConf::clear(); -} - - -void Ut_ProxyConf::proxy_http_factory_ok_manual() -{ - QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("http://maps.google.com/")); - Maemo::ProxyConf::update(); - - put("mode", "string", "manual"); - - QList listOfProxies = QNetworkProxyFactory::proxyForQuery(query); - - foreach (QNetworkProxy proxy, listOfProxies) { - qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port(); - } - QVERIFY(listOfProxies.length()==3); - QVERIFY(listOfProxies.first().type() == QNetworkProxy::HttpProxy); - Maemo::ProxyConf::clear(); -} - - -void Ut_ProxyConf::proxy_https_factory_ok_manual() -{ - QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("https://maps.google.com/")); - Maemo::ProxyConf::update(); - - put("mode", "string", "manual"); - - QList listOfProxies = QNetworkProxyFactory::proxyForQuery(query); - - foreach (QNetworkProxy proxy, listOfProxies) { - qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port(); - } - QVERIFY(listOfProxies.length()==2); - QVERIFY(listOfProxies.first().type() == QNetworkProxy::HttpProxy); - Maemo::ProxyConf::clear(); -} - - -void Ut_ProxyConf::proxy_socks_factory_ok_manual() -{ - QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("http://maps.google.com/")); - Maemo::ProxyConf::update(); - - put("mode", "string", "manual"); - put_http("host", "string", ""); - - QList listOfProxies = QNetworkProxyFactory::proxyForQuery(query); - - foreach (QNetworkProxy proxy, listOfProxies) { - qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port(); - } - QVERIFY(listOfProxies.length()==2); - QVERIFY(listOfProxies.first().type() == QNetworkProxy::Socks5Proxy); - Maemo::ProxyConf::clear(); -} - - -void Ut_ProxyConf::proxy_http_factory_ok_manual_clear() -{ - QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("http://maps.google.com/")); - Maemo::ProxyConf::update(); - - put("mode", "string", "manual"); - put_http("host", "string", "192.168.1.1"); - - QList listOfProxies = QNetworkProxyFactory::proxyForQuery(query); - - foreach (QNetworkProxy proxy, listOfProxies) { - qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port(); - } - QVERIFY(listOfProxies.length()==3); - QVERIFY(listOfProxies.first().type() == QNetworkProxy::HttpProxy); - - Maemo::ProxyConf::clear(); - listOfProxies = QNetworkProxyFactory::proxyForQuery(query); - QVERIFY(listOfProxies.length()==1); - QVERIFY(listOfProxies.first().type() == QNetworkProxy::NoProxy); -} - - -void Ut_ProxyConf::proxy_default_factory_ok_manual() -{ - QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("foobar://maps.google.com/")); - Maemo::ProxyConf::update(); - - put("mode", "string", "manual"); - put("socks_host", "string", ""); - put("secure_host", "string", ""); - - QList listOfProxies = QNetworkProxyFactory::proxyForQuery(query); - - QVERIFY(listOfProxies.length()==1); - QVERIFY(listOfProxies.first().type() == QNetworkProxy::NoProxy); - Maemo::ProxyConf::clear(); -} - - -void Ut_ProxyConf::proxy_http_factory_ok_manual_ignore_list() -{ - QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("http://192.168.19.70/")); - Maemo::ProxyConf::update(); - - put("mode", "string", "manual"); - - QList listOfProxies = QNetworkProxyFactory::proxyForQuery(query); - - foreach (QNetworkProxy proxy, listOfProxies) { - qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port(); - } - QVERIFY(listOfProxies.length()==3); - QVERIFY(listOfProxies.first().type() == QNetworkProxy::HttpProxy); - - query = QNetworkProxyQuery(QUrl("http://192.168.20.10/")); - listOfProxies = QNetworkProxyFactory::proxyForQuery(query); - QVERIFY(listOfProxies.length()==1); - QVERIFY(listOfProxies.first().type() == QNetworkProxy::NoProxy); - Maemo::ProxyConf::clear(); -} - - -void Ut_ProxyConf::proxy_default_factory_ok_manual_system() -{ - QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("http://maps.google.com/")); - Maemo::ProxyConf::update(); - - put("mode", "string", "manual"); - - QList listOfProxies = QNetworkProxyFactory::systemProxyForQuery(query); - - QVERIFY(listOfProxies.length()==1); - QVERIFY(listOfProxies.first().type() == QNetworkProxy::NoProxy); - Maemo::ProxyConf::clear(); -} - - - - -QTEST_MAIN(Ut_ProxyConf) - -#include "ut_proxyconf.moc" -- cgit v0.12 From ab11576ca4987c7da9fcffb9cab286c1b227b74d Mon Sep 17 00:00:00 2001 From: Aaron McCarthy Date: Thu, 12 Aug 2010 14:49:35 +1000 Subject: Add version 0.42 of libconninet. Minor update. Fixes infinite loops. --- src/3rdparty/libconninet/AUTHORS | 0 src/3rdparty/libconninet/COPYING | 510 ++++++ src/3rdparty/libconninet/ChangeLog | 0 src/3rdparty/libconninet/INSTALL | 229 +++ src/3rdparty/libconninet/NEWS | 0 src/3rdparty/libconninet/README | 0 src/3rdparty/libconninet/autogen.sh | 3 + src/3rdparty/libconninet/config.guess | 1533 ++++++++++++++++++ src/3rdparty/libconninet/config.sub | 1693 ++++++++++++++++++++ src/3rdparty/libconninet/configure.ac | 90 ++ src/3rdparty/libconninet/conninet.pc.in | 11 + src/3rdparty/libconninet/debian/changelog | 293 ++++ src/3rdparty/libconninet/debian/compat | 1 + src/3rdparty/libconninet/debian/control | 39 + src/3rdparty/libconninet/debian/copyright | 19 + .../libconninet/debian/libconninet0-dev.dirs | 2 + .../libconninet/debian/libconninet0-dev.files | 4 + src/3rdparty/libconninet/debian/libconninet0.dirs | 1 + src/3rdparty/libconninet/debian/libconninet0.files | 1 + src/3rdparty/libconninet/debian/rules | 123 ++ src/3rdparty/libconninet/doxygen.cfg.in | 1147 +++++++++++++ src/3rdparty/libconninet/src/dbusdispatcher.cpp | 611 +++++++ src/3rdparty/libconninet/src/dbusdispatcher.h | 91 ++ src/3rdparty/libconninet/src/iapconf.cpp | 299 ++++ src/3rdparty/libconninet/src/iapconf.h | 84 + src/3rdparty/libconninet/src/iapmonitor.cpp | 110 ++ src/3rdparty/libconninet/src/iapmonitor.h | 48 + src/3rdparty/libconninet/src/maemo_icd.cpp | 1316 +++++++++++++++ src/3rdparty/libconninet/src/maemo_icd.h | 182 +++ src/3rdparty/libconninet/src/proxyconf.cpp | 315 ++++ src/3rdparty/libconninet/src/proxyconf.h | 53 + .../libconninet/tests/ut_dbusdispatcher.cpp | 191 +++ src/3rdparty/libconninet/tests/ut_iapconf.cpp | 186 +++ src/3rdparty/libconninet/tests/ut_iapmonitor.cpp | 118 ++ src/3rdparty/libconninet/tests/ut_maemo_icd.cpp | 274 ++++ src/3rdparty/libconninet/tests/ut_proxyconf.cpp | 400 +++++ 36 files changed, 9977 insertions(+) create mode 100644 src/3rdparty/libconninet/AUTHORS create mode 100644 src/3rdparty/libconninet/COPYING create mode 100644 src/3rdparty/libconninet/ChangeLog create mode 100644 src/3rdparty/libconninet/INSTALL create mode 100644 src/3rdparty/libconninet/NEWS create mode 100644 src/3rdparty/libconninet/README create mode 100755 src/3rdparty/libconninet/autogen.sh create mode 100755 src/3rdparty/libconninet/config.guess create mode 100755 src/3rdparty/libconninet/config.sub create mode 100644 src/3rdparty/libconninet/configure.ac create mode 100644 src/3rdparty/libconninet/conninet.pc.in create mode 100644 src/3rdparty/libconninet/debian/changelog create mode 100644 src/3rdparty/libconninet/debian/compat create mode 100644 src/3rdparty/libconninet/debian/control create mode 100644 src/3rdparty/libconninet/debian/copyright create mode 100644 src/3rdparty/libconninet/debian/libconninet0-dev.dirs create mode 100644 src/3rdparty/libconninet/debian/libconninet0-dev.files create mode 100644 src/3rdparty/libconninet/debian/libconninet0.dirs create mode 100644 src/3rdparty/libconninet/debian/libconninet0.files create mode 100755 src/3rdparty/libconninet/debian/rules create mode 100644 src/3rdparty/libconninet/doxygen.cfg.in create mode 100644 src/3rdparty/libconninet/src/dbusdispatcher.cpp create mode 100644 src/3rdparty/libconninet/src/dbusdispatcher.h create mode 100644 src/3rdparty/libconninet/src/iapconf.cpp create mode 100644 src/3rdparty/libconninet/src/iapconf.h create mode 100644 src/3rdparty/libconninet/src/iapmonitor.cpp create mode 100644 src/3rdparty/libconninet/src/iapmonitor.h create mode 100644 src/3rdparty/libconninet/src/maemo_icd.cpp create mode 100644 src/3rdparty/libconninet/src/maemo_icd.h create mode 100644 src/3rdparty/libconninet/src/proxyconf.cpp create mode 100644 src/3rdparty/libconninet/src/proxyconf.h create mode 100644 src/3rdparty/libconninet/tests/ut_dbusdispatcher.cpp create mode 100644 src/3rdparty/libconninet/tests/ut_iapconf.cpp create mode 100644 src/3rdparty/libconninet/tests/ut_iapmonitor.cpp create mode 100644 src/3rdparty/libconninet/tests/ut_maemo_icd.cpp create mode 100644 src/3rdparty/libconninet/tests/ut_proxyconf.cpp diff --git a/src/3rdparty/libconninet/AUTHORS b/src/3rdparty/libconninet/AUTHORS new file mode 100644 index 0000000..e69de29 diff --git a/src/3rdparty/libconninet/COPYING b/src/3rdparty/libconninet/COPYING new file mode 100644 index 0000000..b124cf5 --- /dev/null +++ b/src/3rdparty/libconninet/COPYING @@ -0,0 +1,510 @@ + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations +below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it +becomes a de-facto standard. To achieve this, non-free programs must +be allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control +compilation and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at least + three years, to give the same user the materials specified in + Subsection 6a, above, for a charge no more than the cost of + performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply, and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License +may add an explicit geographical distribution limitation excluding those +countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms +of the ordinary General Public License). + + To apply these terms, attach the following notices to the library. +It is safest to attach them to the start of each source file to most +effectively convey the exclusion of warranty; and each file should +have at least the "copyright" line and a pointer to where the full +notice is found. + + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or +your school, if any, to sign a "copyright disclaimer" for the library, +if necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James + Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/src/3rdparty/libconninet/ChangeLog b/src/3rdparty/libconninet/ChangeLog new file mode 100644 index 0000000..e69de29 diff --git a/src/3rdparty/libconninet/INSTALL b/src/3rdparty/libconninet/INSTALL new file mode 100644 index 0000000..54caf7c --- /dev/null +++ b/src/3rdparty/libconninet/INSTALL @@ -0,0 +1,229 @@ +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software +Foundation, Inc. + + This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. (Caching is +disabled by default to prevent problems with accidental use of stale +cache files.) + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You only need +`configure.ac' if you want to change it or regenerate `configure' using +a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not support the `VPATH' +variable, you have to compile the package for one architecture at a +time in the source code directory. After you have installed the +package for one architecture, use `make distclean' before reconfiguring +for another architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the `--target=TYPE' option to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +will cause the specified gcc to be used as the C compiler (unless it is +overridden in the site shell script). + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/src/3rdparty/libconninet/NEWS b/src/3rdparty/libconninet/NEWS new file mode 100644 index 0000000..e69de29 diff --git a/src/3rdparty/libconninet/README b/src/3rdparty/libconninet/README new file mode 100644 index 0000000..e69de29 diff --git a/src/3rdparty/libconninet/autogen.sh b/src/3rdparty/libconninet/autogen.sh new file mode 100755 index 0000000..a8fd885 --- /dev/null +++ b/src/3rdparty/libconninet/autogen.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +autoreconf --verbose --install --force diff --git a/src/3rdparty/libconninet/config.guess b/src/3rdparty/libconninet/config.guess new file mode 100755 index 0000000..e3a2116 --- /dev/null +++ b/src/3rdparty/libconninet/config.guess @@ -0,0 +1,1533 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# Free Software Foundation, Inc. + +timestamp='2009-06-10' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[456]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:[3456]*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T | authenticamd | genuineintel) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^LIBC/{ + s: ::g + p + }'`" + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/src/3rdparty/libconninet/config.sub b/src/3rdparty/libconninet/config.sub new file mode 100755 index 0000000..eb0389a --- /dev/null +++ b/src/3rdparty/libconninet/config.sub @@ -0,0 +1,1693 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# Free Software Foundation, Inc. + +timestamp='2009-06-11' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -kopensolaris* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/src/3rdparty/libconninet/configure.ac b/src/3rdparty/libconninet/configure.ac new file mode 100644 index 0000000..2a383ee --- /dev/null +++ b/src/3rdparty/libconninet/configure.ac @@ -0,0 +1,90 @@ +AC_INIT([libconninet], patsubst(esyscmd([dpkg-parsechangelog | sed -n '/^Version: \(.*\)$/ {s//\1/;p}']), [ +]), [jukka.rissanen@nokia.com]) +AM_INIT_AUTOMAKE([foreign]) + +AC_PROG_CXX +AC_PROG_LIBTOOL + +AC_ARG_ENABLE(docs, [ --enable-docs Build DOXYGEN documentation (requires Doxygen)],enable_docs=$enableval,enable_docs=auto) + +AC_PATH_PROG(DOXYGEN, doxygen, no) +AC_MSG_CHECKING([whether to build Doxygen documentation]) + +if test x$DOXYGEN = xno ; then + have_doxygen=no +else + have_doxygen=yes +fi +if test x$enable_docs = xauto ; then + if test x$have_doxygen = xno ; then + enable_docs=no + else + enable_docs=yes + fi +fi +if test x$enable_docs = xyes; then + if test x$have_doxygen = xno; then + AC_MSG_ERROR([Building Doxygen docs explicitly required, but Doxygen not found]) + else + AC_MSG_RESULT(yes) + fi +else + AC_MSG_RESULT(no) +fi + +AM_CONDITIONAL(DOXYGEN_DOCS_ENABLED, test x$enable_docs = xyes) +AC_SUBST(DOXYGEN) + +PKG_CHECK_MODULES(GLIB, glib-2.0) +AC_SUBST(GLIB_CFLAGS) +AC_SUBST(GLIB_LIBS) + +PKG_CHECK_MODULES(QTCORE, QtCore) +AC_SUBST(QTCORE_CFLAGS) +AC_SUBST(QTCORE_LIBS) + +PKG_CHECK_MODULES(QTNETWORK, QtNetwork) +AC_SUBST(QTNETWORK_CFLAGS) +AC_SUBST(QTNETWORK_LIBS) + +PKG_CHECK_MODULES(QTDBUS, QtDBus) +AC_SUBST(QTDBUS_CFLAGS) +AC_SUBST(QTDBUS_LIBS) + +PKG_CHECK_MODULES(QTTEST, QtTest) +AC_SUBST(QTTEST_CFLAGS) +AC_SUBST(QTTEST_LIBS) + +PKG_CHECK_MODULES(DBUS, dbus-glib-1) +AC_SUBST(DBUS_CFLAGS) +AC_SUBST(DBUS_LIBS) + +PKG_CHECK_MODULES(CONNSETTINGS, connsettings) +AC_SUBST(CONNSETTINGS_CFLAGS) +AC_SUBST(CONNSETTINGS_LIBS) + +PKG_CHECK_MODULES(OSSO_IC, osso-ic) +AC_SUBST(OSSO_IC_CFLAGS) +AC_SUBST(OSSO_IC_LIBS) + +PKG_CHECK_MODULES(ICD_DEV, icd2) +AC_SUBST(ICD_DEV_CFLAGS) +AC_SUBST(ICD_DEV_LIBS) + +PKG_CHECK_MODULES(GCONF, gconf-2.0) +AC_SUBST(GCONF_CFLAGS) +AC_SUBST(GCONF_LIBS) + +PKG_CHECK_MODULES(QGCONF, gq-gconf) +AC_SUBST(QGCONF_CFLAGS) +AC_SUBST(QGCONF_LIBS) + +CONCFLAGS="-Wall -Werror -Wmissing-prototypes" +AC_SUBST(CONCFLAGS) + +AC_CONFIG_FILES([Makefile \ + src/Makefile \ + tests/Makefile \ + conninet.pc \ + doxygen.cfg]) +AC_OUTPUT diff --git a/src/3rdparty/libconninet/conninet.pc.in b/src/3rdparty/libconninet/conninet.pc.in new file mode 100644 index 0000000..68cdee0 --- /dev/null +++ b/src/3rdparty/libconninet/conninet.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: libconninet +Description: Internet Connectivity support library +Version: @VERSION@ +Requires: dbus-1 >= 0.60 glib-2.0 QtCore QtDBus QtGui +Libs: -lconninet +Cflags: -I${includedir}/conninet diff --git a/src/3rdparty/libconninet/debian/changelog b/src/3rdparty/libconninet/debian/changelog new file mode 100644 index 0000000..4063317 --- /dev/null +++ b/src/3rdparty/libconninet/debian/changelog @@ -0,0 +1,293 @@ +libconninet (0.42+0m6) unstable; urgency=low + + * This entry has been added by BIFH queue processor + version has been changed to 0.42+0m6 + + -- Qing Jin Thu, 22 Jul 2010 14:04:58 +0300 + +libconninet (0.42) unstable; urgency=low + + * Fixes: NB#180536 - Uploads to online services are not working. + This is a regression caused by fix to bug 175098, the timeout was never + expiring when waiting reply from icd. + + -- Jukka Rissanen Mon, 19 Jul 2010 12:23:30 +0300 + +libconninet (0.41) unstable; urgency=low + + * Fixes: NB#175098 - Qt4.7 Webkit crashes when bearer API QNetworkSession + constructor calls QNetworkSession::syncStateWithInterface() which in turn + calls Maemo::state() and Maemo::addrinfo() and webkit expects that event + loop is not run but those function process main loop events. + Now Maemo::state() and Maemo::addrinfo() are changed to be synchronous + and fully blocking functions. The old non-blocking versions are called + Maemo::state_non_blocking() and Maemo::addrinfo_non_blocking(). + + -- Jukka Rissanen Wed, 14 Jul 2010 10:12:47 +0300 + +libconninet (0.40) unstable; urgency=low + + * Fixes: NB#167465 - Unable to open network connection using libbearer + + -- Jukka Rissanen Tue, 11 May 2010 10:47:10 +0300 + +libconninet (0.39) unstable; urgency=low + + * Fixes: NB#167982 - initialize DBus vtable in DBusDispatcher. + + -- Aapo Makela Mon, 10 May 2010 14:42:39 +0300 + +libconninet (0.38) unstable; urgency=low + + * Changing icd2 connect_req to be synchronous as the check for + returned connect signal did not work correctly, this caused a + long timeout when connect() was called. + * Scan sometimes missed results and did not return them to caller. + * HTTP proxy settings were not set correctly. + + -- Jukka Rissanen Thu, 15 Apr 2010 11:25:06 +0300 + +libconninet (0.37) unstable; urgency=low + + * Make proxy config reference counting atomic. + + -- Jukka Rissanen Wed, 3 Mar 2010 13:23:08 +0200 + +libconninet (0.36) unstable; urgency=low + + * Fixes: NB#157586 - Cleanup dbus listener when WLAN scanning object is + deleted. + + -- Jukka Rissanen Fri, 26 Feb 2010 13:30:41 +0200 + +libconninet (0.35) unstable; urgency=low + + * Fixes: NB#156883 - libconninet fails to build under the Platform SDK (SB2) + + -- Jukka Rissanen Thu, 18 Feb 2010 12:14:40 +0200 + +libconninet (0.34) unstable; urgency=low + + * Coverity fix + + -- Jukka Rissanen Tue, 16 Feb 2010 16:38:00 +0200 + +libconninet (0.33) unstable; urgency=low + + * Added API to update Qt proxy config. + + -- Jukka Rissanen Tue, 26 Jan 2010 15:48:36 +0200 + +libconninet (0.32) unstable; urgency=low + + * Fixed IAPConf to unset value when set value is invalid. + * Updated IAPMonitor to use libconnsettings. + + -- Aapo Makela Wed, 03 Feb 2010 07:32:45 +0200 + +libconninet (0.31) unstable; urgency=low + + * Fixes: NB#154892 - Check nulls in IAPConf. + + -- Aapo Makela Mon, 01 Feb 2010 09:32:06 +0200 + +libconninet (0.30) unstable; urgency=low + + * Updated IAPConf to use libconnsettings. + + -- Aapo Makela Fri, 29 Jan 2010 12:58:03 +0200 + +libconninet (0.29) unstable; urgency=low + + * Fixed dependencies + + -- Jukka Rissanen Fri, 15 Jan 2010 10:16:07 +0200 + +libconninet (0.28) unstable; urgency=low + + * Get rid of libdui dependency + + -- Jukka Rissanen Wed, 13 Jan 2010 09:56:26 +0200 + +libconninet (0.27) unstable; urgency=low + + * Insert new pending calls to the list in DBusDispatcher. + + -- Aapo Makela Tue, 22 Dec 2009 14:27:32 +0200 + +libconninet (0.26) unstable; urgency=low + + * Added possibility to specify different signal path for DBusDispatcher. + + -- Aapo Makela Wed, 25 Nov 2009 14:27:34 +0200 + +libconninet (0.25) unstable; urgency=low + + * Fixes: NB#146450 - All scan results were not returned to the caller. + + -- Jukka Rissanen Mon, 16 Nov 2009 17:23:15 +0200 + +libconninet (0.24) unstable; urgency=low + + * Wait all scan results for all network types in Maemo::Icd::scan() + + -- Jukka Rissanen Fri, 6 Nov 2009 14:45:23 +0200 + +libconninet (0.23) unstable; urgency=low + + * Fixes: NB#143361 - Assert failure in session class for GPRS IAP. + + -- Jukka Rissanen Mon, 19 Oct 2009 16:00:14 +0300 + +libconninet (0.22) unstable; urgency=low + + * Fixed the error checking if scan returns 0 results. + + -- Jukka Rissanen Wed, 7 Oct 2009 13:50:27 +0300 + +libconninet (0.21) unstable; urgency=low + + * Support multiple DBusDispatcher classes at the same time. This is + required by Maemo::Icd class so that multiple instances of it can + be used the same time. + + -- Jukka Rissanen Mon, 5 Oct 2009 16:33:43 +0300 + +libconninet (0.20) unstable; urgency=low + + * Fixed memory leak in IAPConf::setValue() + + -- Jukka Rissanen Fri, 2 Oct 2009 13:02:21 +0300 + +libconninet (0.19) unstable; urgency=low + + * Fixed connect_req to one specific IAP in Icd class. + + -- Jukka Rissanen Tue, 29 Sep 2009 17:02:46 +0300 + +libconninet (0.18) unstable; urgency=low + + * Make sure the library will not abort in Icd class if scan does + not return any results. + + -- Jukka Rissanen Tue, 22 Sep 2009 17:00:12 +0300 + +libconninet (0.17) unstable; urgency=low + + * Added IAP monitoring support. + + -- Jukka Rissanen Mon, 21 Sep 2009 16:29:31 +0300 + +libconninet (0.16) unstable; urgency=low + + * Disabled the old osso-ic dbus interface as it is currently not used. + * Fixed the addrinfo request, now addresses are returned correctly to + the caller. + + -- Jukka Rissanen Thu, 17 Sep 2009 15:56:13 +0300 + +libconninet (0.15) unstable; urgency=low + + * Enabling state_req, statistics_req and addrinfo_req support + functions in Maemo::Icd as the corresponding DBUS API functions are + fixed in icd2 v0.89 + + -- Jukka Rissanen Fri, 24 Jul 2009 15:23:02 +0300 + +libconninet (0.14) unstable; urgency=low + + * Icd statistics support added. + * Icd address information support added. + * Icd scan method does not return the final (and empty) result any more. + * Added initial unit test implementation for Icd class. + * Some of the status functions in Icd class disabled because of issues + in icd2 and the dbus api. + + -- Jukka Rissanen Thu, 23 Jul 2009 11:03:05 +0300 + +libconninet (0.13) unstable; urgency=low + + * Added API to get all the configured IAPs. + + -- Jukka Rissanen Tue, 21 Jul 2009 09:47:18 +0300 + +libconninet (0.12) unstable; urgency=low + + * Replaced duivaluespace by Dui in pkg-config file because the + duivaluespace is deprecated. + + -- Jukka Rissanen Mon, 20 Jul 2009 16:00:10 +0300 + +libconninet (0.11) unstable; urgency=low + + * Using libdui instead of libduivaluespace because it is deprecated. + * The IAPConf::clear() uses native gconf API instead of launching gconftool + * Check that state_req call returned list and the list contains entries + before trying to access it. + + -- Jukka Rissanen Mon, 20 Jul 2009 14:55:15 +0300 + +libconninet (0.10) unstable; urgency=low + + * connect() did not return ok when connection succeeded. + + -- Jukka Rissanen Thu, 25 Jun 2009 09:31:21 +0300 + +libconninet (0.9) unstable; urgency=low + + * Connection timeout set to 2.5min, same as in fremantle. + + -- Jukka Rissanen Wed, 17 Jun 2009 13:36:40 +0300 + +libconninet (0.8) unstable; urgency=low + + * Fix state_req signal received from Icd + + -- Jukka Rissanen Thu, 11 Jun 2009 17:19:33 +0300 + +libconninet (0.7) unstable; urgency=low + + * Icd disconnect and select reqs are made synchronous as we do not + wait the return status. The previous async version was causing core + dumps if Icd class was destroyed too early. + + -- Jukka Rissanen Thu, 11 Jun 2009 11:52:36 +0300 + +libconninet (0.6) unstable; urgency=low + + * Fixed the libconninet0-dev dependencies. + + -- Jukka Rissanen Mon, 8 Jun 2009 10:47:56 +0300 + +libconninet (0.5) unstable; urgency=low + + * Fixed missing QObject connect functions. + * Fixed IAPConf to return invalid QVariant if the value does not exist. + + -- Jukka Rissanen Mon, 01 Jun 2009 13:58:53 +0300 + +libconninet (0.4) unstable; urgency=low + + * Fixed QObject signal setting for Maemo::Icd + + -- Jukka Rissanen Wed, 20 May 2009 13:51:11 +0300 + +libconninet (0.3) unstable; urgency=low + + * Refactoring classes + * Added IAPConf class. + + -- Jukka Rissanen Thu, 14 May 2009 13:24:11 +0300 + +libconninet (0.2) unstable; urgency=low + + * Fixed pkgconfig file which had wrong dependency + * Added DBus array and struct support to DBusDispatcher. + + -- Jukka Rissanen Wed, 13 May 2009 12:11:00 +0300 + +libconninet (0.1) unstable; urgency=low + + * Initial Release. + + -- Jukka Rissanen Tue, 12 May 2009 16:10:27 +0200 diff --git a/src/3rdparty/libconninet/debian/compat b/src/3rdparty/libconninet/debian/compat new file mode 100644 index 0000000..b8626c4 --- /dev/null +++ b/src/3rdparty/libconninet/debian/compat @@ -0,0 +1 @@ +4 diff --git a/src/3rdparty/libconninet/debian/control b/src/3rdparty/libconninet/debian/control new file mode 100644 index 0000000..2db660f --- /dev/null +++ b/src/3rdparty/libconninet/debian/control @@ -0,0 +1,39 @@ +Source: libconninet +Priority: optional +Maintainer: Jukka Rissanen +Build-Depends: debhelper (>= 4.0.0), autotools-dev, libglib2.0-dev (>= 2.8), + libdbus-1-dev (>= 0.60), libconnsettings0-dev (>= 0.4), icd2-osso-ic-dev, + icd2-dev, libqt4-dev, libgconf2-dev (>> 2.6.4), libgq-gconf-dev +Standards-Version: 3.6.2 +Section: libs + +Package: libconninet0-dev +Section: libdevel +Architecture: any +Depends: libconninet0 (= ${Source-Version}), libdbus-1-dev (>= 0.60), + libglib2.0-dev (>= 2.8), libconnsettings0-dev (>= 0.4), libqt4-dev, + icd2-osso-ic-dev, icd2-dev, libgconf2-dev (>> 2.6.4), libgq-gconf-dev +Description: Internet Connectivity support library development files + Internet Connectivity support library (libconninet) provides common + support functions for connecting to icd2 and accessing configuration + data. + . + This package contains the header files. + +Package: libconninet0 +Section: libs +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Internet Connectivity support library + Internet Connectivity support library (libconninet) provides common + support functions for connecting to icd2 and accessing configuration + data. + . + This package contains the shared libraries. + +Package: libconninet0-dbg +Section: libs +Architecture: any +Depends: libconninet0 (= ${Source-Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Debug symbols for the Internet Connectivity support library + Internet Connectivity support library (libconninet) debug symbols. diff --git a/src/3rdparty/libconninet/debian/copyright b/src/3rdparty/libconninet/debian/copyright new file mode 100644 index 0000000..97e8e68 --- /dev/null +++ b/src/3rdparty/libconninet/debian/copyright @@ -0,0 +1,19 @@ +libconninet - Internet Connectivity support library + +Copyright (C) 2009 Nokia Corporation. All rights reserved. + +Contact: Jukka Rissanen + +This library is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License version 2.1 +as published by the Free Software Foundation. + +This library is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +02110-1301 USA diff --git a/src/3rdparty/libconninet/debian/libconninet0-dev.dirs b/src/3rdparty/libconninet/debian/libconninet0-dev.dirs new file mode 100644 index 0000000..4418816 --- /dev/null +++ b/src/3rdparty/libconninet/debian/libconninet0-dev.dirs @@ -0,0 +1,2 @@ +usr/lib +usr/include diff --git a/src/3rdparty/libconninet/debian/libconninet0-dev.files b/src/3rdparty/libconninet/debian/libconninet0-dev.files new file mode 100644 index 0000000..78bbac8 --- /dev/null +++ b/src/3rdparty/libconninet/debian/libconninet0-dev.files @@ -0,0 +1,4 @@ +usr/include/* +usr/lib/lib*.so +usr/lib/pkgconfig/* +usr/share/pkgconfig/* diff --git a/src/3rdparty/libconninet/debian/libconninet0.dirs b/src/3rdparty/libconninet/debian/libconninet0.dirs new file mode 100644 index 0000000..6845771 --- /dev/null +++ b/src/3rdparty/libconninet/debian/libconninet0.dirs @@ -0,0 +1 @@ +usr/lib diff --git a/src/3rdparty/libconninet/debian/libconninet0.files b/src/3rdparty/libconninet/debian/libconninet0.files new file mode 100644 index 0000000..d0dbfd1 --- /dev/null +++ b/src/3rdparty/libconninet/debian/libconninet0.files @@ -0,0 +1 @@ +usr/lib/lib*.so.* diff --git a/src/3rdparty/libconninet/debian/rules b/src/3rdparty/libconninet/debian/rules new file mode 100755 index 0000000..2a3d395 --- /dev/null +++ b/src/3rdparty/libconninet/debian/rules @@ -0,0 +1,123 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + + +# These are used for cross-compiling and for saving the configure script +# from having to guess our platform (since we know it already) +DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) + + +CFLAGS = -Wall -g + +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + CFLAGS += -O0 +else + CFLAGS += -O2 +endif + +# shared library versions, option 1 +#version=2.0.5 +#major=2 +# option 2, assuming the library is created as src/.libs/libfoo.so.2.0.5 or so +version=`ls src/.libs/lib*.so.* | \ + awk '{if (match($$0,/[0-9]+\.[0-9]+\.[0-9]+$$/)) print substr($$0,RSTART)}'` +major=`ls src/.libs/lib*.so.* | \ + awk '{if (match($$0,/\.so\.[0-9]+$$/)) print substr($$0,RSTART+4)}'` + +configure: configure.ac debian/changelog + -./autogen.sh + +config.status: configure + dh_testdir + # Add here commands to configure the package. + CFLAGS="$(CFLAGS)" ./configure \ + --host=$(DEB_HOST_GNU_TYPE) \ + --build=$(DEB_BUILD_GNU_TYPE) \ + --prefix=/usr \ + --mandir=\$${prefix}/share/man \ + --infodir=\$${prefix}/share/info + + +build: build-stamp +build-stamp: config.status + dh_testdir + + # Add here commands to compile the package. + $(MAKE) + + touch build-stamp + +clean: + dh_testdir + dh_testroot + rm -f build-stamp + + # Add here commands to clean up after the build process. + -$(MAKE) distclean +ifneq "$(wildcard /usr/share/misc/config.sub)" "" + cp -f /usr/share/misc/config.sub config.sub +endif +ifneq "$(wildcard /usr/share/misc/config.guess)" "" + cp -f /usr/share/misc/config.guess config.guess +endif + + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/tmp + $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp + + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_movefiles + dh_installchangelogs ChangeLog + dh_installdocs + dh_installexamples +# dh_install +# dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_installinit +# dh_installcron +# dh_installinfo + dh_installman + dh_link + dh_strip --dbg-package=libconninet0 + dh_compress + dh_fixperms +# dh_perl +# dh_python + dh_makeshlibs + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install diff --git a/src/3rdparty/libconninet/doxygen.cfg.in b/src/3rdparty/libconninet/doxygen.cfg.in new file mode 100644 index 0000000..80a4c8d --- /dev/null +++ b/src/3rdparty/libconninet/doxygen.cfg.in @@ -0,0 +1,1147 @@ +# Doxyfile 1.3.7 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = "Internet Connectivity Support Library" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = @VERSION@ + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = doc + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 2 levels of 10 sub-directories under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of source +# files, where putting all generated files in the same directory would otherwise +# cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, +# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en +# (Japanese with English messages), Korean, Korean-en, Norwegian, Polish, Portuguese, +# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# This tag can be used to specify the encoding used in the generated output. +# The encoding is not always determined by the language that is chosen, +# but also whether or not the output is meant for Windows or non-Windows users. +# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES +# forces the Windows encoding (this is the default for the Windows binary), +# whereas setting the tag to NO uses a Unix-style encoding (the default for +# all platforms other than Windows). + +USE_WINDOWS_ENCODING = NO + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is used +# as the annotated text. Otherwise, the brief description is used as-is. If left +# blank, the following values are used ("$name" is automatically replaced with the +# name of the entity): "The $name class" "The $name widget" "The $name file" +# "is" "provides" "specifies" "contains" "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited +# members of a class in the documentation of that class as if those members were +# ordinary class members. Constructors, destructors and assignment operators of +# the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explicit @brief command for a brief description. + +JAVADOC_AUTOBRIEF = YES + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = YES + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources +# only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = YES + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = conic/conic.h \ + conic/conicconnection.h \ + conic/conicconnectionevent.h \ + conic/conicevent.h \ + conic/coniciap.h \ + conic/conicstatisticsevent.h + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp +# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories +# that are symbolic links (a Unix filesystem feature) are excluded from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. + +EXCLUDE_PATTERNS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. + +INPUT_FILTER = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_PREDEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse the +# parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or +# super classes. Setting the tag to NO turns the diagrams off. Note that this +# option is superseded by the HAVE_DOT option below. This is only a fallback. It is +# recommended to install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = YES + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found on the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_WIDTH = 1024 + +# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_HEIGHT = 1024 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes that +# lay further from the root node will be omitted. Note that setting this option to +# 1 or 2 may greatly reduce the computation time needed for large code bases. Also +# note that a graph may be further truncated if the graph's image dimensions are +# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). +# If 0 is used for the depth value (the default), the graph is not depth-constrained. + +MAX_DOT_GRAPH_DEPTH = 0 + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/src/3rdparty/libconninet/src/dbusdispatcher.cpp b/src/3rdparty/libconninet/src/dbusdispatcher.cpp new file mode 100644 index 0000000..7581982 --- /dev/null +++ b/src/3rdparty/libconninet/src/dbusdispatcher.cpp @@ -0,0 +1,611 @@ +/* * This file is part of conninet * + * + * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * + * Contact: Aapo Makela + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + */ + +#include +#include +#include +#include +#include +#include +#include "dbusdispatcher.h" + +namespace Maemo { + +/*! + \class DBusDispatcher + + \brief DBusDispatcher is a class, which is able to send DBUS method call + messages and receive unicast signals from DBUS object. +*/ + +class DBusDispatcherPrivate +{ +public: + DBusDispatcherPrivate(const QString& service, + const QString& path, + const QString& interface, + const QString& signalPath) + : service(service), path(path), interface(interface), + signalPath(signalPath), connection(0) + { + memset(&signal_vtable, 0, sizeof(signal_vtable)); + } + + ~DBusDispatcherPrivate() + { + foreach(DBusPendingCall *call, pending_calls) { + dbus_pending_call_cancel(call); + dbus_pending_call_unref(call); + } + } + + QString service; + QString path; + QString interface; + QString signalPath; + struct DBusConnection *connection; + QList pending_calls; + struct DBusObjectPathVTable signal_vtable; +}; + +static bool constantVariantList(const QVariantList& variantList) { + // Special case, empty list == empty struct + if (variantList.isEmpty()) { + return false; + } else { + QVariant::Type type = variantList[0].type(); + // Iterate items in the list and check if they are same type + foreach(QVariant variant, variantList) { + if (variant.type() != type) { + return false; + } + } + } + return true; +} + +static QString variantToSignature(const QVariant& argument, + bool constantList = true) { + switch (argument.type()) { + case QVariant::Bool: + return "b"; + case QVariant::ByteArray: + return "ay"; + case QVariant::Char: + return "y"; + case QVariant::Int: + return "i"; + case QVariant::UInt: + return "u"; + case QVariant::StringList: + return "as"; + case QVariant::String: + return "s"; + case QVariant::LongLong: + return "x"; + case QVariant::ULongLong: + return "t"; + case QVariant::List: + { + QString signature; + QVariantList variantList = argument.toList(); + if (!constantList) { + signature += DBUS_STRUCT_BEGIN_CHAR_AS_STRING; + foreach(QVariant listItem, variantList) { + signature += variantToSignature(listItem); + } + signature += DBUS_STRUCT_END_CHAR_AS_STRING; + } else { + if (variantList.isEmpty()) + return ""; + signature = "a" + variantToSignature(variantList[0]); + } + + return signature; + } + default: + qDebug() << "Unsupported variant type: " << argument.type(); + break; + } + + return ""; +} + +static bool appendVariantToDBusMessage(const QVariant& argument, + DBusMessageIter *dbus_iter) { + int idx = 0; + DBusMessageIter array_iter; + QStringList str_list; + dbus_bool_t bool_data; + dbus_int32_t int32_data; + dbus_uint32_t uint32_data; + dbus_int64_t int64_data; + dbus_uint64_t uint64_data; + char *str_data; + char char_data; + + switch (argument.type()) { + + case QVariant::Bool: + bool_data = argument.toBool(); + dbus_message_iter_append_basic(dbus_iter, DBUS_TYPE_BOOLEAN, + &bool_data); + break; + + case QVariant::ByteArray: + str_data = argument.toByteArray().data(); + dbus_message_iter_open_container(dbus_iter, DBUS_TYPE_ARRAY, + DBUS_TYPE_BYTE_AS_STRING, &array_iter); + dbus_message_iter_append_fixed_array(&array_iter, + DBUS_TYPE_BYTE, + &str_data, + argument.toByteArray().size()); + dbus_message_iter_close_container(dbus_iter, &array_iter); + break; + + case QVariant::Char: + char_data = argument.toChar().toAscii(); + dbus_message_iter_append_basic(dbus_iter, DBUS_TYPE_BYTE, + &char_data); + break; + + case QVariant::Int: + int32_data = argument.toInt(); + dbus_message_iter_append_basic(dbus_iter, DBUS_TYPE_INT32, + &int32_data); + break; + + case QVariant::String: + str_data = argument.toString().toLatin1().data(); + dbus_message_iter_append_basic(dbus_iter, DBUS_TYPE_STRING, + &str_data); + break; + + case QVariant::StringList: + str_list = argument.toStringList(); + dbus_message_iter_open_container(dbus_iter, DBUS_TYPE_ARRAY, + "s", &array_iter); + for (idx = 0; idx < str_list.size(); idx++) { + str_data = str_list.at(idx).toLatin1().data(); + dbus_message_iter_append_basic(&array_iter, + DBUS_TYPE_STRING, + &str_data); + } + dbus_message_iter_close_container(dbus_iter, &array_iter); + break; + + case QVariant::UInt: + uint32_data = argument.toUInt(); + dbus_message_iter_append_basic(dbus_iter, DBUS_TYPE_UINT32, + &uint32_data); + break; + + case QVariant::ULongLong: + uint64_data = argument.toULongLong(); + dbus_message_iter_append_basic(dbus_iter, DBUS_TYPE_UINT64, + &uint64_data); + break; + + case QVariant::LongLong: + int64_data = argument.toLongLong(); + dbus_message_iter_append_basic(dbus_iter, DBUS_TYPE_INT64, + &int64_data); + break; + + case QVariant::List: + { + QVariantList variantList = argument.toList(); + bool constantList = constantVariantList(variantList); + DBusMessageIter array_iter; + + // List is mapped either as an DBUS array (all items same type) + // DBUS struct (variable types) depending on constantList + if (constantList) { + // Resolve the signature for the first item + QString signature = ""; + if (!variantList.isEmpty()) { + signature = variantToSignature( + variantList[0], + constantVariantList(variantList[0].toList())); + } + + // Mapped as DBUS array + dbus_message_iter_open_container(dbus_iter, DBUS_TYPE_ARRAY, + signature.toAscii(), + &array_iter); + + foreach(QVariant listItem, variantList) { + appendVariantToDBusMessage(listItem, &array_iter); + } + + dbus_message_iter_close_container(dbus_iter, &array_iter); + } else { + // Mapped as DBUS struct + dbus_message_iter_open_container(dbus_iter, DBUS_TYPE_STRUCT, + NULL, + &array_iter); + + foreach(QVariant listItem, variantList) { + appendVariantToDBusMessage(listItem, &array_iter); + } + + dbus_message_iter_close_container(dbus_iter, &array_iter); + } + + break; + } + default: + qDebug() << "Unsupported variant type: " << argument.type(); + break; + } + + return true; +} + +static QVariant getVariantFromDBusMessage(DBusMessageIter *iter) { + dbus_bool_t bool_data; + dbus_int32_t int32_data; + dbus_uint32_t uint32_data; + dbus_int64_t int64_data; + dbus_uint64_t uint64_data; + char *str_data; + char char_data; + int argtype = dbus_message_iter_get_arg_type(iter); + + switch (argtype) { + + case DBUS_TYPE_BOOLEAN: + { + dbus_message_iter_get_basic(iter, &bool_data); + QVariant variant((bool)bool_data); + return variant; + } + + case DBUS_TYPE_ARRAY: + { + // Handle all arrays here + int elem_type = dbus_message_iter_get_element_type(iter); + DBusMessageIter array_iter; + + dbus_message_iter_recurse(iter, &array_iter); + + if (elem_type == DBUS_TYPE_BYTE) { + QByteArray byte_array; + do { + dbus_message_iter_get_basic(&array_iter, &char_data); + byte_array.append(char_data); + } while (dbus_message_iter_next(&array_iter)); + QVariant variant(byte_array); + return variant; + } else if (elem_type == DBUS_TYPE_STRING) { + QStringList str_list; + do { + dbus_message_iter_get_basic(&array_iter, &str_data); + str_list.append(str_data); + } while (dbus_message_iter_next(&array_iter)); + QVariant variant(str_list); + return variant; + } else { + QVariantList variantList; + do { + variantList << getVariantFromDBusMessage(&array_iter); + } while (dbus_message_iter_next(&array_iter)); + QVariant variant(variantList); + return variant; + } + break; + } + + case DBUS_TYPE_BYTE: + { + dbus_message_iter_get_basic(iter, &char_data); + QChar ch(char_data); + QVariant variant(ch); + return variant; + } + + case DBUS_TYPE_INT32: + { + dbus_message_iter_get_basic(iter, &int32_data); + QVariant variant((int)int32_data); + return variant; + } + + case DBUS_TYPE_UINT32: + { + dbus_message_iter_get_basic(iter, &uint32_data); + QVariant variant((uint)uint32_data); + return variant; + } + + case DBUS_TYPE_STRING: + { + dbus_message_iter_get_basic(iter, &str_data); + QString str(str_data); + QVariant variant(str); + return variant; + } + + case DBUS_TYPE_INT64: + { + dbus_message_iter_get_basic(iter, &int64_data); + QVariant variant((qlonglong)int64_data); + return variant; + } + + case DBUS_TYPE_UINT64: + { + dbus_message_iter_get_basic(iter, &uint64_data); + QVariant variant((qulonglong)uint64_data); + return variant; + } + + case DBUS_TYPE_STRUCT: + { + // Handle all structs here + DBusMessageIter struct_iter; + dbus_message_iter_recurse(iter, &struct_iter); + + QVariantList variantList; + do { + variantList << getVariantFromDBusMessage(&struct_iter); + } while (dbus_message_iter_next(&struct_iter)); + QVariant variant(variantList); + return variant; + } + + default: + qDebug() << "Unsupported DBUS type: " << argtype; + } + + return QVariant(); +} + +static DBusHandlerResult signalHandler (DBusConnection *connection, + DBusMessage *message, + void *object_ref) { + (void)connection; + QString interface; + QString signal; + DBusDispatcher *dispatcher = (DBusDispatcher *)object_ref; + + if (dbus_message_get_type(message) == DBUS_MESSAGE_TYPE_SIGNAL) { + interface = dbus_message_get_interface(message); + signal = dbus_message_get_member(message); + + QList arglist; + DBusMessageIter dbus_iter; + + if (dbus_message_iter_init(message, &dbus_iter)) { + // Read return arguments + while (dbus_message_iter_get_arg_type (&dbus_iter) != DBUS_TYPE_INVALID) { + arglist << getVariantFromDBusMessage(&dbus_iter); + dbus_message_iter_next(&dbus_iter); + } + } + + dispatcher->emitSignalReceived(interface, signal, arglist); + return DBUS_HANDLER_RESULT_HANDLED; + } + (void)message; + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; +} + +DBusDispatcher::DBusDispatcher(const QString& service, + const QString& path, + const QString& interface, + QObject *parent) + : QObject(parent), + d_ptr(new DBusDispatcherPrivate(service, path, interface, path)) { + setupDBus(); +} + +DBusDispatcher::DBusDispatcher(const QString& service, + const QString& path, + const QString& interface, + const QString& signalPath, + QObject *parent) + : QObject(parent), + d_ptr(new DBusDispatcherPrivate(service, path, interface, signalPath)) { + setupDBus(); +} + +DBusDispatcher::~DBusDispatcher() +{ + if (d_ptr->connection) { + dbus_connection_close(d_ptr->connection); + dbus_connection_unref(d_ptr->connection); + } + delete d_ptr; +} + +void DBusDispatcher::setupDBus() +{ + d_ptr->connection = dbus_bus_get_private(DBUS_BUS_SYSTEM, NULL); + + if (d_ptr->connection == NULL) + qDebug() << "Unable to get DBUS connection!"; + else { + d_ptr->signal_vtable.message_function = signalHandler; + + dbus_connection_set_exit_on_disconnect(d_ptr->connection, FALSE); + dbus_connection_setup_with_g_main(d_ptr->connection, NULL); + dbus_connection_register_object_path(d_ptr->connection, + d_ptr->signalPath.toLatin1(), + &d_ptr->signal_vtable, + this); + } +} + +static DBusMessage *prepareDBusCall(const QString& service, + const QString& path, + const QString& interface, + const QString& method, + const QVariant& arg1 = QVariant(), + const QVariant& arg2 = QVariant(), + const QVariant& arg3 = QVariant(), + const QVariant& arg4 = QVariant(), + const QVariant& arg5 = QVariant(), + const QVariant& arg6 = QVariant(), + const QVariant& arg7 = QVariant(), + const QVariant& arg8 = QVariant()) +{ + DBusMessage *message = dbus_message_new_method_call(service.toLatin1(), + path.toLatin1(), + interface.toLatin1(), + method.toLatin1()); + DBusMessageIter dbus_iter; + + // Append variants to DBUS message + QList arglist; + if (arg1.isValid()) arglist << arg1; + if (arg2.isValid()) arglist << arg2; + if (arg3.isValid()) arglist << arg3; + if (arg4.isValid()) arglist << arg4; + if (arg5.isValid()) arglist << arg5; + if (arg6.isValid()) arglist << arg6; + if (arg7.isValid()) arglist << arg7; + if (arg8.isValid()) arglist << arg8; + + dbus_message_iter_init_append (message, &dbus_iter); + + while (!arglist.isEmpty()) { + QVariant argument = arglist.takeFirst(); + appendVariantToDBusMessage(argument, &dbus_iter); + } + + return message; +} + +QList DBusDispatcher::call(const QString& method, + const QVariant& arg1, + const QVariant& arg2, + const QVariant& arg3, + const QVariant& arg4, + const QVariant& arg5, + const QVariant& arg6, + const QVariant& arg7, + const QVariant& arg8) { + DBusMessageIter dbus_iter; + DBusMessage *message = prepareDBusCall(d_ptr->service, d_ptr->path, + d_ptr->interface, method, + arg1, arg2, arg3, arg4, arg5, + arg6, arg7, arg8); + DBusMessage *reply = dbus_connection_send_with_reply_and_block( + d_ptr->connection, + message, -1, NULL); + dbus_message_unref(message); + + QList replylist; + if (reply != NULL && dbus_message_iter_init(reply, &dbus_iter)) { + // Read return arguments + while (dbus_message_iter_get_arg_type (&dbus_iter) != DBUS_TYPE_INVALID) { + replylist << getVariantFromDBusMessage(&dbus_iter); + dbus_message_iter_next(&dbus_iter); + } + } + if (reply != NULL) dbus_message_unref(reply); + return replylist; +} + +class PendingCallInfo { +public: + QString method; + DBusDispatcher *dispatcher; + DBusDispatcherPrivate *priv; +}; + +static void freePendingCallInfo(void *memory) { + PendingCallInfo *info = (PendingCallInfo *)memory; + delete info; +} + +static void pendingCallFunction (DBusPendingCall *pending, + void *memory) { + PendingCallInfo *info = (PendingCallInfo *)memory; + QString errorStr; + QList replyList; + DBusMessage *reply = dbus_pending_call_steal_reply (pending); + + Q_ASSERT(reply != NULL); + + if (dbus_message_get_type(reply) == DBUS_MESSAGE_TYPE_ERROR) { + errorStr = dbus_message_get_error_name (reply); + } else { + DBusMessageIter dbus_iter; + dbus_message_iter_init(reply, &dbus_iter); + // Read return arguments + while (dbus_message_iter_get_arg_type (&dbus_iter) != DBUS_TYPE_INVALID) { + replyList << getVariantFromDBusMessage(&dbus_iter); + dbus_message_iter_next(&dbus_iter); + } + } + + info->priv->pending_calls.removeOne(pending); + info->dispatcher->emitCallReply(info->method, replyList, errorStr); + dbus_message_unref(reply); + dbus_pending_call_unref(pending); +} + +bool DBusDispatcher::callAsynchronous(const QString& method, + const QVariant& arg1, + const QVariant& arg2, + const QVariant& arg3, + const QVariant& arg4, + const QVariant& arg5, + const QVariant& arg6, + const QVariant& arg7, + const QVariant& arg8) { + DBusMessage *message = prepareDBusCall(d_ptr->service, d_ptr->path, + d_ptr->interface, method, + arg1, arg2, arg3, arg4, arg5, + arg6, arg7, arg8); + DBusPendingCall *call = NULL; + dbus_bool_t ret = dbus_connection_send_with_reply(d_ptr->connection, + message, &call, -1); + PendingCallInfo *info = new PendingCallInfo; + info->method = method; + info->dispatcher = this; + info->priv = d_ptr; + + dbus_pending_call_set_notify(call, pendingCallFunction, info, freePendingCallInfo); + d_ptr->pending_calls.append(call); + return (bool)ret; +} + +void DBusDispatcher::emitSignalReceived(const QString& interface, + const QString& signal, + const QList& args) { + emit signalReceived(interface, signal, args); } + +void DBusDispatcher::emitCallReply(const QString& method, + const QList& args, + const QString& error) { + emit callReply(method, args, error); } + +void DBusDispatcher::synchronousDispatch(int timeout_ms) +{ + dbus_connection_read_write_dispatch(d_ptr->connection, timeout_ms); +} + +} // Maemo namespace + diff --git a/src/3rdparty/libconninet/src/dbusdispatcher.h b/src/3rdparty/libconninet/src/dbusdispatcher.h new file mode 100644 index 0000000..2f71b6f --- /dev/null +++ b/src/3rdparty/libconninet/src/dbusdispatcher.h @@ -0,0 +1,91 @@ +/* * This file is part of conn-dui-settings-inet * + * + * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * + * Contact: Aapo Makela + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + */ + +#ifndef DBUSDISPATCHER_H +#define DBUSDISPATCHER_H + +#include +#include + +namespace Maemo { + +class DBusDispatcherPrivate; +class DBusDispatcher : public QObject +{ + Q_OBJECT + +public: + DBusDispatcher(const QString& service, + const QString& path, + const QString& interface, + QObject *parent = 0); + DBusDispatcher(const QString& service, + const QString& path, + const QString& interface, + const QString& signalPath, + QObject *parent = 0); + ~DBusDispatcher(); + + QList call(const QString& method, + const QVariant& arg1 = QVariant(), + const QVariant& arg2 = QVariant(), + const QVariant& arg3 = QVariant(), + const QVariant& arg4 = QVariant(), + const QVariant& arg5 = QVariant(), + const QVariant& arg6 = QVariant(), + const QVariant& arg7 = QVariant(), + const QVariant& arg8 = QVariant()); + bool callAsynchronous(const QString& method, + const QVariant& arg1 = QVariant(), + const QVariant& arg2 = QVariant(), + const QVariant& arg3 = QVariant(), + const QVariant& arg4 = QVariant(), + const QVariant& arg5 = QVariant(), + const QVariant& arg6 = QVariant(), + const QVariant& arg7 = QVariant(), + const QVariant& arg8 = QVariant()); + void emitSignalReceived(const QString& interface, + const QString& signal, + const QList& args); + void emitCallReply(const QString& method, + const QList& args, + const QString& error = ""); + void synchronousDispatch(int timeout_ms); + +Q_SIGNALS: + void signalReceived(const QString& interface, + const QString& signal, + const QList& args); + void callReply(const QString& method, + const QList& args, + const QString& error); + +protected: + void setupDBus(); + +private: + DBusDispatcherPrivate *d_ptr; +}; + +} // Maemo namespace + +#endif diff --git a/src/3rdparty/libconninet/src/iapconf.cpp b/src/3rdparty/libconninet/src/iapconf.cpp new file mode 100644 index 0000000..2e77fa5 --- /dev/null +++ b/src/3rdparty/libconninet/src/iapconf.cpp @@ -0,0 +1,299 @@ +/* + libconninet - Internet Connectivity support library + + Copyright (C) 2009-2010 Nokia Corporation. All rights reserved. + + Contact: Aapo Makela + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + version 2.1 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA +*/ + +#include +#include +#include + +#include "iapconf.h" + +#define QSTRING_TO_CONST_CSTR(str) \ + str.toUtf8().constData() + +namespace Maemo { + +class IAPConfPrivate { +public: + ConnSettings *settings; + + ConnSettingsValue *variantToValue(const QVariant &variant); + QVariant valueToVariant(ConnSettingsValue *value); +}; + +ConnSettingsValue *IAPConfPrivate::variantToValue(const QVariant &variant) +{ + // Convert variant to ConnSettingsValue + ConnSettingsValue *value = conn_settings_value_new(); + if (value == 0) { + qWarning("IAPConf: Unable to create new ConnSettingsValue"); + return 0; + } + + switch(variant.type()) { + + case QVariant::Invalid: + value->type = CONN_SETTINGS_VALUE_INVALID; + break; + + case QVariant::String: { + char *valueStr = strdup(QSTRING_TO_CONST_CSTR(variant.toString())); + value->type = CONN_SETTINGS_VALUE_STRING; + value->value.string_val = valueStr; + break; + } + + case QVariant::Int: + value->type = CONN_SETTINGS_VALUE_INT; + value->value.int_val = variant.toInt(); + break; + + case QMetaType::Float: + case QVariant::Double: + value->type = CONN_SETTINGS_VALUE_DOUBLE; + value->value.double_val = variant.toDouble(); + break; + + case QVariant::Bool: + value->type = CONN_SETTINGS_VALUE_BOOL; + value->value.bool_val = variant.toBool() ? 1 : 0; + break; + + case QVariant::ByteArray: { + QByteArray array = variant.toByteArray(); + value->type = CONN_SETTINGS_VALUE_BYTE_ARRAY; + value->value.byte_array.len = array.size(); + value->value.byte_array.val = (unsigned char *)malloc(array.size()); + memcpy(value->value.byte_array.val, array.constData(), array.size()); + break; + } + + case QVariant::List: { + QVariantList list = variant.toList(); + ConnSettingsValue **list_val = (ConnSettingsValue **)malloc( + (list.size() + 1) * sizeof(ConnSettingsValue *)); + + for (int idx = 0; idx < list.size(); idx++) { + list_val[idx] = variantToValue(list.at(idx)); + } + list_val[list.size()] = 0; + + value->type = CONN_SETTINGS_VALUE_LIST; + value->value.list_val = list_val; + break; + } + + default: + qWarning("IAPConf: Can not handle QVariant of type %d", + variant.type()); + conn_settings_value_destroy(value); + return 0; + } + + return value; +} + +QVariant IAPConfPrivate::valueToVariant(ConnSettingsValue *value) +{ + if (value == 0 || value->type == CONN_SETTINGS_VALUE_INVALID) { + return QVariant(); + } + + switch(value->type) { + + case CONN_SETTINGS_VALUE_BOOL: + return QVariant(value->value.bool_val ? true : false); + + case CONN_SETTINGS_VALUE_STRING: + return QVariant(QString(value->value.string_val)); + + case CONN_SETTINGS_VALUE_DOUBLE: + return QVariant(value->value.double_val); + + case CONN_SETTINGS_VALUE_INT: + return QVariant(value->value.int_val); + + case CONN_SETTINGS_VALUE_LIST: { + // At least with GConf backend connsettings returns byte array as list + // of ints, first check for that case + if (value->value.list_val && value->value.list_val[0]) { + bool canBeConvertedToByteArray = true; + for (int idx = 0; value->value.list_val[idx]; idx++) { + ConnSettingsValue *val = value->value.list_val[idx]; + if (val->type != CONN_SETTINGS_VALUE_INT + || val->value.int_val > 255 + || val->value.int_val < 0) { + canBeConvertedToByteArray = false; + break; + } + } + + if (canBeConvertedToByteArray) { + QByteArray array; + for (int idx = 0; value->value.list_val[idx]; idx++) { + array.append(value->value.list_val[idx]->value.int_val); + } + return array; + } + + // Create normal list + QVariantList list; + for (int idx = 0; value->value.list_val[idx]; idx++) { + list.append(valueToVariant(value->value.list_val[idx])); + } + return list; + } + } + + case CONN_SETTINGS_VALUE_BYTE_ARRAY: + return QByteArray::fromRawData((char *)value->value.byte_array.val, + value->value.byte_array.len); + + default: + return QVariant(); + } +} + +// Public class implementation + +IAPConf::IAPConf(const QString &iap_id) + : d_ptr(new IAPConfPrivate) +{ + d_ptr->settings = conn_settings_open(CONN_SETTINGS_CONNECTION, + QSTRING_TO_CONST_CSTR(iap_id)); + if (d_ptr->settings == 0) { + qWarning("IAPConf: Unable to open ConnSettings for %s", + QSTRING_TO_CONST_CSTR(iap_id)); + } +} + +IAPConf::~IAPConf() +{ + conn_settings_close(d_ptr->settings); + delete d_ptr; +} + +void IAPConf::setValue(const QString& key, const QVariant& value) +{ + // Invalid value means unsetting the given key + if (!value.isValid()) { + int err = conn_settings_unset(d_ptr->settings, + QSTRING_TO_CONST_CSTR(key)); + if (err != CONN_SETTINGS_E_NO_ERROR) { + qWarning("IAPConf: unable to unset key %s: %s", + QSTRING_TO_CONST_CSTR(key), + conn_settings_error_text((ConnSettingsError)err)); + } + return; + } + + // Convert value to ConnSettingsValue + ConnSettingsValue *val = d_ptr->variantToValue(value); + if (val == 0) return; + + // Set value and handle errors + int error = conn_settings_set(d_ptr->settings, + QSTRING_TO_CONST_CSTR(key), + val); + if (error != CONN_SETTINGS_E_NO_ERROR) { + qWarning("IAPConf: error in setting key %s: %s", + QSTRING_TO_CONST_CSTR(key), + conn_settings_error_text((ConnSettingsError)error)); + } + + // Destroy value + conn_settings_value_destroy(val); + return; +} + +void IAPConf::set(const QString& key1, const QVariant& value1, + const QString& key2, const QVariant& value2, + const QString& key3, const QVariant& value3, + const QString& key4, const QVariant& value4, + const QString& key5, const QVariant& value5, + const QString& key6, const QVariant& value6, + const QString& key7, const QVariant& value7, + const QString& key8, const QVariant& value8, + const QString& key9, const QVariant& value9, + const QString& key10, const QVariant& value10) +{ + if (!key1.isEmpty()) setValue(key1, value1); + if (!key2.isEmpty()) setValue(key2, value2); + if (!key3.isEmpty()) setValue(key3, value3); + if (!key4.isEmpty()) setValue(key4, value4); + if (!key5.isEmpty()) setValue(key5, value5); + if (!key6.isEmpty()) setValue(key6, value6); + if (!key7.isEmpty()) setValue(key7, value7); + if (!key8.isEmpty()) setValue(key8, value8); + if (!key9.isEmpty()) setValue(key9, value9); + if (!key10.isEmpty()) setValue(key10, value10); +} + +QVariant IAPConf::value(const QString& key) const +{ + ConnSettingsValue *val = conn_settings_get(d_ptr->settings, + QSTRING_TO_CONST_CSTR(key)); + + QVariant variant = d_ptr->valueToVariant(val); + conn_settings_value_destroy(val); + return variant; +} + +void IAPConf::clear(const char *default_path) +{ + Q_UNUSED(default_path); // default path is unused + + int error = conn_settings_remove(d_ptr->settings); + if (error != CONN_SETTINGS_E_NO_ERROR) { + qWarning("IAPConf: Error when removing IAP: %s", + conn_settings_error_text((ConnSettingsError)error)); + } +} + +void IAPConf::clearAll() +{ + ConnSettings *settings = conn_settings_open(CONN_SETTINGS_CONNECTION, + NULL); + conn_settings_remove(settings); + conn_settings_close(settings); +} + + +void IAPConf::getAll(QList &all_iaps, bool return_path) +{ + Q_UNUSED(return_path); // We don't use return path currently + + // Go through all available connections and add them to the list + char **ids = conn_settings_list_ids(CONN_SETTINGS_CONNECTION); + if (ids == 0) { + // No ids found - nothing to do + return; + } + + for (int idx = 0; ids[idx]; idx++) { + all_iaps.append(QString(ids[idx])); + free(ids[idx]); + } + free(ids); +} + + +} // namespace Maemo diff --git a/src/3rdparty/libconninet/src/iapconf.h b/src/3rdparty/libconninet/src/iapconf.h new file mode 100644 index 0000000..57c0856 --- /dev/null +++ b/src/3rdparty/libconninet/src/iapconf.h @@ -0,0 +1,84 @@ +/* + libconninet - Internet Connectivity support library + + Copyright (C) 2009 Nokia Corporation. All rights reserved. + + Contact: Aapo Makela + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + version 2.1 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA +*/ + +#ifndef IAPCONF_H +#define IAPCONF_H + +#include +#include + +namespace Maemo { + +class IAPConfPrivate; +class IAPConf { +public: + IAPConf(const QString &iap_id); + virtual ~IAPConf(); + + /** + Convenience method for setting multiple IAP values with one call. + */ + void set(const QString& key1, const QVariant& value1, + const QString& key2 = "", const QVariant& value2 = QVariant(), + const QString& key3 = "", const QVariant& value3 = QVariant(), + const QString& key4 = "", const QVariant& value4 = QVariant(), + const QString& key5 = "", const QVariant& value5 = QVariant(), + const QString& key6 = "", const QVariant& value6 = QVariant(), + const QString& key7 = "", const QVariant& value7 = QVariant(), + const QString& key8 = "", const QVariant& value8 = QVariant(), + const QString& key9 = "", const QVariant& value9 = QVariant(), + const QString& key10 = "", const QVariant& value10 = QVariant()); + + /** + Set one IAP value. + */ + void setValue(const QString& key, const QVariant& value); + + /** + Get one IAP value. + */ + QVariant value(const QString& key) const; + + /** + Clear this IAP from GConf + */ + void clear(const char *default_path=0); + + /** + Clear all IAP specific information from GConf (including all IAPs). + DO NOT USE THIS FUNCTION IN ANYWHERE ELSE EXCEPT IN TEST CODE! + */ + void clearAll(); + + /** + Return all the IAPs found in the system. If return_path is true, + then do not strip the IAP path away. + */ + static void getAll(QList &all_iaps, bool return_path=false); + +private: + IAPConfPrivate *d_ptr; +}; + +} // namespace Maemo + +#endif diff --git a/src/3rdparty/libconninet/src/iapmonitor.cpp b/src/3rdparty/libconninet/src/iapmonitor.cpp new file mode 100644 index 0000000..c44cbc8 --- /dev/null +++ b/src/3rdparty/libconninet/src/iapmonitor.cpp @@ -0,0 +1,110 @@ +/* + libconninet - Internet Connectivity support library + + Copyright (C) 2009-2010 Nokia Corporation. All rights reserved. + + Contact: Jukka Rissanen + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + version 2.1 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA +*/ + +#include + +#include +#include "iapmonitor.h" + +namespace Maemo { + + +void conn_settings_notify_func (ConnSettingsType type, + const char *id, + const char *key, + ConnSettingsValue *value, + void *user_data); + +class IAPMonitorPrivate { +private: + IAPMonitor *monitor; + ConnSettings *settings; + +public: + + IAPMonitorPrivate(IAPMonitor *monitor) + : monitor(monitor) + { + settings = conn_settings_open(CONN_SETTINGS_CONNECTION, NULL); + conn_settings_add_notify( + settings, + (ConnSettingsNotifyFunc *)conn_settings_notify_func, + this); + } + + ~IAPMonitorPrivate() + { + conn_settings_del_notify(settings); + conn_settings_close(settings); + } + + void iapAdded(const QString &iap) + { + monitor->iapAdded(iap); + } + + void iapRemoved(const QString &iap) + { + monitor->iapRemoved(iap); + } +}; + +void conn_settings_notify_func (ConnSettingsType type, + const char *id, + const char *key, + ConnSettingsValue *value, + void *user_data) +{ + if (type != CONN_SETTINGS_CONNECTION) return; + IAPMonitorPrivate *priv = (IAPMonitorPrivate *)user_data; + + QString iapId(key); + iapId = iapId.split("/")[0]; + if (value != 0) { + priv->iapAdded(iapId); + } else if (iapId == QString(key)) { + // IAP is removed only when the directory gets removed + priv->iapRemoved(iapId); + } +} + +IAPMonitor::IAPMonitor() + : d_ptr(new IAPMonitorPrivate(this)) +{ +} + +IAPMonitor::~IAPMonitor() +{ + delete d_ptr; +} + +void IAPMonitor::iapAdded(const QString &id) +{ + // By default do nothing +} + +void IAPMonitor::iapRemoved(const QString &id) +{ + // By default do nothing +} + +} // namespace Maemo diff --git a/src/3rdparty/libconninet/src/iapmonitor.h b/src/3rdparty/libconninet/src/iapmonitor.h new file mode 100644 index 0000000..558f23e --- /dev/null +++ b/src/3rdparty/libconninet/src/iapmonitor.h @@ -0,0 +1,48 @@ +/* + libconninet - Internet Connectivity support library + + Copyright (C) 2009-2010 Nokia Corporation. All rights reserved. + + Contact: Jukka Rissanen + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + version 2.1 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA +*/ + +#ifndef IAPMONITOR_H +#define IAPMONITOR_H + +#include + +namespace Maemo { + +class IAPMonitorPrivate; +class IAPMonitor { +public: + IAPMonitor(); + ~IAPMonitor(); + +protected: + virtual void iapAdded(const QString &id); + virtual void iapRemoved(const QString &id); + +private: + IAPMonitorPrivate *d_ptr; + Q_DECLARE_PRIVATE(IAPMonitor); +}; + +} // namespace Maemo + +#endif // IAPMONITOR_H + diff --git a/src/3rdparty/libconninet/src/maemo_icd.cpp b/src/3rdparty/libconninet/src/maemo_icd.cpp new file mode 100644 index 0000000..026241c --- /dev/null +++ b/src/3rdparty/libconninet/src/maemo_icd.cpp @@ -0,0 +1,1316 @@ +/* + libconninet - Internet Connectivity support library + + Copyright (C) 2009 Nokia Corporation. All rights reserved. + + Contact: Jukka Rissanen + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + version 2.1 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA +*/ + +#include +#include "maemo_icd.h" +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace Maemo { + +#undef PRINT_DEBUGINFO +#ifdef PRINT_DEBUGINFO + static FILE *fdebug = NULL; +#define PDEBUG(fmt, args...) \ + do { \ + struct timeval tv; \ + gettimeofday(&tv, 0); \ + fprintf(fdebug, "DEBUG[%d]:%ld.%ld:%s:%s():%d: " fmt, \ + getpid(), \ + tv.tv_sec, tv.tv_usec, \ + __FILE__, __FUNCTION__, __LINE__, args); \ + fflush(fdebug); \ + } while(0) +#else +#define PDEBUG(fmt...) +#endif + + +/* Reference counting singleton class that creates a single connection + * to icd so that icd reference counting works as expected. This is + * needed because DBusDispatcher uses private dbus connections + * which come and go and icd cannot use that information to + * determine whether application quit or not. So we create one + * persistent connection that is only teared down when application + * quits or calls disconnect() + */ +class IcdRefCounting +{ +public: + IcdRefCounting() : first_call(true) { } + void setup(enum icd_connection_flags flag); + void cleanup(); + +private: + bool first_call; + struct DBusConnection *connection; +}; + +Q_GLOBAL_STATIC(IcdRefCounting, icdRefCounting); + + +void IcdRefCounting::setup(enum icd_connection_flags flag) +{ + if (first_call) { + DBusMessage *msg = NULL; + + connection = dbus_bus_get_private(DBUS_BUS_SYSTEM, NULL); + dbus_connection_set_exit_on_disconnect(connection, FALSE); + dbus_connection_setup_with_g_main(connection, NULL); + + msg = dbus_message_new_method_call(ICD_DBUS_API_INTERFACE, + ICD_DBUS_API_PATH, + ICD_DBUS_API_INTERFACE, + ICD_DBUS_API_CONNECT_REQ); + if (msg == NULL) + goto out; + + if (!dbus_message_append_args(msg, + DBUS_TYPE_UINT32, &flag, + DBUS_TYPE_INVALID)) + goto out; + + if (!dbus_connection_send_with_reply(connection, msg, + NULL, 60*1000)) + goto out; + + first_call = false; + return; + + out: + dbus_connection_close(connection); + dbus_connection_unref(connection); + } +} + +void IcdRefCounting::cleanup() +{ + if (!first_call) { + dbus_connection_close(connection); + dbus_connection_unref(connection); + first_call = true; + } +} + + +class IcdPrivate +{ +public: + IcdPrivate(Icd *myfriend) + { + init(10000, IcdNewDbusInterface, myfriend); + } + + IcdPrivate(unsigned int timeout, Icd *myfriend) + { + init(timeout, IcdNewDbusInterface, myfriend); + } + + IcdPrivate(unsigned int timeout, IcdDbusInterfaceVer ver, Icd *myfriend) + { + /* Note that the old Icd interface is currently disabled and + * the new one is always used. + */ + init(timeout, IcdNewDbusInterface, myfriend); + } + + ~IcdPrivate() + { + QObject::disconnect(mDBus, + SIGNAL(signalReceived(const QString&, + const QString&, + const QList&)), + icd, + SLOT(icdSignalReceived(const QString&, + const QString&, + const QList&))); + + QObject::disconnect(mDBus, + SIGNAL(callReply(const QString&, + const QList&, + const QString&)), + icd, + SLOT(icdCallReply(const QString&, + const QList&, + const QString&))); + + delete mDBus; + mDBus = 0; + } + + /* Icd2 dbus API functions */ + QStringList scan(icd_scan_request_flags flags, + QStringList &network_types, + QList& scan_results, + QString& error); + void scanCancel(); + bool connect(icd_connection_flags flags, IcdConnectResult& result); + bool connect(icd_connection_flags flags, QList& params, + IcdConnectResult& result); + bool connect(icd_connection_flags flags, QString& iap, QString& result); + void select(uint flags); + void disconnect(uint connect_flags, QString& service_type, + uint service_attrs, QString& service_id, + QString& network_type, uint network_attrs, + QByteArray& network_id); + void disconnect(uint connect_flags); + + uint state(QString& service_type, uint service_attrs, + QString& service_id, QString& network_type, + uint network_attrs, QByteArray& network_id, + IcdStateResult &state_result); + uint statistics(QString& service_type, uint service_attrs, + QString& service_id, QString& network_type, + uint network_attrs, QByteArray& network_id, + IcdStatisticsResult& stats_result); + uint addrinfo(QString& service_type, uint service_attrs, + QString& service_id, QString& network_type, + uint network_attrs, QByteArray& network_id, + IcdAddressInfoResult& addr_result); + + uint state(QList& state_results); + uint state_non_blocking(QList& state_results); + uint statistics(QList& stats_results); + uint addrinfo(QList& addr_results); + uint addrinfo_non_blocking(QList& addr_results); + + void signalReceived(const QString& interface, + const QString& signal, + const QList& args); + void callReply(const QString& method, + const QList& args, + const QString& error); + + QString error() { return mError; } + +public: + DBusDispatcher *mDBus; + QString mMethod; + QString mInterface; + QString mSignal; + QString mError; + QList mArgs; + QList receivedSignals; + unsigned int timeout; + IcdDbusInterfaceVer icd_dbus_version; + Icd *icd; + + void init(unsigned int dbus_timeout, IcdDbusInterfaceVer ver, + Icd *myfriend) + { + if (ver == IcdNewDbusInterface) { + mDBus = new DBusDispatcher(ICD_DBUS_API_INTERFACE, + ICD_DBUS_API_PATH, + ICD_DBUS_API_INTERFACE); + } else { + mDBus = new DBusDispatcher(ICD_DBUS_SERVICE, + ICD_DBUS_PATH, + ICD_DBUS_INTERFACE); + } + icd_dbus_version = ver; + + /* This connect has a side effect as it means that only one + * Icd object can exists in one time. This should be fixed! + */ + QObject::connect(mDBus, + SIGNAL(signalReceived(const QString&, + const QString&, + const QList&)), + myfriend, + SLOT(icdSignalReceived(const QString&, + const QString&, + const QList&))); + + QObject::connect(mDBus, + SIGNAL(callReply(const QString&, + const QList&, + const QString&)), + myfriend, + SLOT(icdCallReply(const QString&, + const QList&, + const QString&))); + + icd = myfriend; + timeout = dbus_timeout; + +#ifdef PRINT_DEBUGINFO + if (!fdebug) { + fdebug = fopen("/tmp/maemoicd.log", "a+"); + } + PDEBUG("created %s\n", "IcdPrivate"); +#endif + } + + void clearState() + { + mMethod.clear(); + mInterface.clear(); + mSignal.clear(); + mError.clear(); + mArgs.clear(); + receivedSignals.clear(); + } + + bool doConnect(IcdConnectResult& result); + bool doConnect(QString& result); + bool doState(); +}; + + +void IcdPrivate::signalReceived(const QString& interface, + const QString& signal, + const QList& args) +{ + // Signal handler, which simply records what has been signalled + mInterface = interface; + mSignal = signal; + mArgs = args; + + //qDebug() << "signal" << signal << "received:" << args; + receivedSignals << QVariant(interface) << QVariant(signal) << QVariant(args); +} + + +void IcdPrivate::callReply(const QString& method, + const QList& /*args*/, + const QString& error) +{ + mMethod = method; + mError = error; +} + + +static void get_scan_result(QList& args, + IcdScanResult& ret) +{ + int i=0; + + if (args.isEmpty()) + return; + + ret.status = args[i++].toUInt(); + ret.timestamp = args[i++].toUInt(); + ret.scan.service_type = args[i++].toString(); + ret.service_name = args[i++].toString(); + ret.scan.service_attrs = args[i++].toUInt(); + ret.scan.service_id = args[i++].toString(); + ret.service_priority = args[i++].toInt(); + ret.scan.network_type = args[i++].toString(); + ret.network_name = args[i++].toString(); + ret.scan.network_attrs = args[i++].toUInt(); + ret.scan.network_id = args[i++].toByteArray(); + ret.network_priority = args[i++].toInt(); + ret.signal_strength = args[i++].toInt(); + ret.station_id = args[i++].toString(); + ret.signal_dB = args[i++].toInt(); +} + + +static void get_connect_result(QList& args, + IcdConnectResult& ret) +{ + int i=0; + + if (args.isEmpty()) + return; + + ret.connect.service_type = args[i++].toString(); + ret.connect.service_attrs = args[i++].toInt(); + ret.connect.service_id = args[i++].toString(); + ret.connect.network_type = args[i++].toString(); + ret.connect.network_attrs = args[i++].toInt(); + ret.connect.network_id = args[i++].toByteArray(); + ret.status = args[i++].toInt(); +} + + +QStringList IcdPrivate::scan(icd_scan_request_flags flags, + QStringList &network_types, + QList& scan_results, + QString& error) +{ + QStringList scanned_types; + QTimer timer; + QVariant reply; + QVariantList vl; + bool last_result = false; + IcdScanResult result; + int all_waited; + + clearState(); + reply = mDBus->call(ICD_DBUS_API_SCAN_REQ, (uint)flags); + if (reply.type() != QVariant::List) + return scanned_types; + vl = reply.toList(); + if (vl.isEmpty()) { + error = "Scan did not return anything."; + return scanned_types; + } + reply = vl.first(); + scanned_types = reply.toStringList(); + //qDebug() << "Scanning:" << scanned_types; + all_waited = scanned_types.size(); + + timer.setSingleShot(true); + timer.start(timeout); + + scan_results.clear(); + while (!last_result) { + while (timer.isActive() && mInterface.isEmpty() && mError.isEmpty()) { + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + } + + if (!timer.isActive()) { + //qDebug() << "Timeout happened"; + break; + } + + if (mSignal != ICD_DBUS_API_SCAN_SIG) { + //qDebug() << "Received" << mSignal << "while waiting" << ICD_DBUS_API_SCAN_SIG << ", ignoring"; + mInterface.clear(); + continue; + } + + if (mError.isEmpty()) { + QString msgInterface = receivedSignals.takeFirst().toString(); + QString msgSignal = receivedSignals.takeFirst().toString(); + QList msgArgs = receivedSignals.takeFirst().toList(); + //qDebug() << "Signal" << msgSignal << "received."; + //qDebug() << "Params:" << msgArgs; + + while (!msgSignal.isEmpty()) { + get_scan_result(msgArgs, result); + +#if 0 + qDebug() << "Received: " << + "status =" << result.status << + ", timestamp =" << result.timestamp << + ", service_type =" << result.scan.service_type << + ", service_name =" << result.service_name << + ", service_attrs =" << result.scan.service_attrs << + ", service_id =" << result.scan.service_id << + ", service_priority =" << result.service_priority << + ", network_type =" << result.scan.network_type << + ", network_name =" << result.network_name << + ", network_attrs =" << result.scan.network_attrs << + ", network_id =" << "-" << + ", network_priority =" << result.network_priority << + ", signal_strength =" << result.signal_strength << + ", station_id =" << result.station_id << + ", signal_dB =" << result.signal_dB; +#endif + + if (result.status == ICD_SCAN_COMPLETE) { + //qDebug() << "waited =" << all_waited; + if (--all_waited == 0) { + last_result = true; + break; + } + } else + scan_results << result; + + if (receivedSignals.isEmpty()) + break; + + msgInterface = receivedSignals.takeFirst().toString(); + msgSignal = receivedSignals.takeFirst().toString(); + msgArgs = receivedSignals.takeFirst().toList(); + } + mInterface.clear(); + + } else { + qWarning() << "Error while scanning:" << mError; + break; + } + } + timer.stop(); + + error = mError; + return scanned_types; +} + + +void IcdPrivate::scanCancel() +{ + mDBus->call(ICD_DBUS_API_SCAN_CANCEL); +} + + +bool IcdPrivate::doConnect(IcdConnectResult& result) +{ + QTimer timer; + bool status = false; + + timer.setSingleShot(true); + timer.start(timeout); + + //qDebug() << "Waiting" << ICD_DBUS_API_CONNECT_SIG << "signal"; + + while (timer.isActive() && mInterface.isEmpty() && + mSignal != ICD_DBUS_API_CONNECT_SIG && + mError.isEmpty()) { + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + } + + timer.stop(); + + if (mError.isEmpty()) { + if (!mArgs.isEmpty()) { + get_connect_result(mArgs, result); + status = true; + } else + status = false; + } else + status = false; + + return status; +} + + +bool IcdPrivate::connect(icd_connection_flags flags, IcdConnectResult& result) +{ + clearState(); + //mDBus->callAsynchronous(ICD_DBUS_API_CONNECT_REQ, (uint)flags); + mDBus->call(ICD_DBUS_API_CONNECT_REQ, (uint)flags); + icdRefCounting()->setup(flags); + return doConnect(result); +} + + +bool IcdPrivate::connect(icd_connection_flags flags, QList& params, + IcdConnectResult& result) +{ + QVariantList varlist; + QVariantList varlist2; + + foreach (ConnectParams param, params) { + QVariantList items; + + items.append(QVariant(param.connect.service_type)); + items.append(QVariant(param.connect.service_attrs)); + items.append(QVariant(param.connect.service_id)); + items.append(QVariant(param.connect.network_type)); + items.append(QVariant(param.connect.network_attrs)); + items.append(QVariant(param.connect.network_id)); + + varlist.append(items); + } + + varlist2.append(QVariant(varlist)); + + clearState(); + //mDBus->callAsynchronous(ICD_DBUS_API_CONNECT_REQ, (uint)flags, varlist2); + mDBus->call(ICD_DBUS_API_CONNECT_REQ, (uint)flags, varlist2); + icdRefCounting()->setup(flags); + return doConnect(result); +} + + +bool IcdPrivate::doConnect(QString& ret) +{ + QTimer timer; + bool status = false; + + timer.setSingleShot(true); + timer.start(timeout); + + while (timer.isActive() && mInterface.isEmpty() && + mError.isEmpty()) { + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + } + + timer.stop(); + + if (mError.isEmpty()) { + if (!mArgs.isEmpty()) { + status = true; + //ret = mArgs[0]; // TODO correctly + } else + status = false; + } else + status = false; + + return status; +} + + +bool IcdPrivate::connect(icd_connection_flags flags, QString& iap, QString& result) +{ + clearState(); + //mDBus->callAsynchronous(ICD_CONNECT_REQ, iap, (uint)flags); + mDBus->call(ICD_CONNECT_REQ, iap, (uint)flags); + icdRefCounting()->setup(flags); + return doConnect(result); +} + + +void IcdPrivate::select(uint flags) +{ + mDBus->call(ICD_DBUS_API_SELECT_REQ, flags); +} + + +void IcdPrivate::disconnect(uint flags, QString& service_type, + uint service_attrs, QString& service_id, + QString& network_type, uint network_attrs, + QByteArray& network_id) +{ + clearState(); + mDBus->call(ICD_DBUS_API_DISCONNECT_REQ, flags, + service_type, service_attrs, service_id, + network_type, network_attrs, network_id); + icdRefCounting()->cleanup(); +} + + +void IcdPrivate::disconnect(uint flags) +{ + clearState(); + mDBus->call(ICD_DBUS_API_DISCONNECT_REQ, flags); + icdRefCounting()->cleanup(); +} + + +static void get_state_all_result(QList& args, + IcdStateResult& ret) +{ + int i=0; + + ret.params.service_type = args[i++].toString(); + ret.params.service_attrs = args[i++].toUInt(); + ret.params.service_id = args[i++].toString(); + ret.params.network_type = args[i++].toString(); + ret.params.network_attrs = args[i++].toUInt(); + ret.params.network_id = args[i++].toByteArray(); + ret.error = args[i++].toString(); + ret.state = args[i++].toInt(); +} + + +static void get_state_all_result2(QList& args, + IcdStateResult& ret) +{ + int i=0; + + ret.params.network_type = args[i++].toString(); + ret.state = args[i++].toInt(); + + // Initialize the other values so that the caller can + // notice we only returned partial status + ret.params.service_type = QString(); + ret.params.service_attrs = 0; + ret.params.service_id = QString(); + ret.params.network_attrs = 0; + ret.params.network_id = QByteArray(); + ret.error = QString(); +} + + +uint IcdPrivate::state(QString& service_type, uint service_attrs, + QString& service_id, QString& network_type, + uint network_attrs, QByteArray& network_id, + IcdStateResult& state_result) +{ + QTimer timer; + QVariant reply; + uint total_signals; + QVariantList vl; + + clearState(); + + reply = mDBus->call(ICD_DBUS_API_STATE_REQ, + service_type, service_attrs, service_id, + network_type, network_attrs, network_id); + if (reply.type() != QVariant::List) + return 0; + vl = reply.toList(); + if (vl.isEmpty()) + return 0; + reply = vl.first(); + total_signals = reply.toUInt(); + if (!total_signals) + return 0; + + timer.setSingleShot(true); + timer.start(timeout); + + mInterface.clear(); + while (timer.isActive() && mInterface.isEmpty()) { + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + if (mSignal != ICD_DBUS_API_STATE_SIG) { + mInterface.clear(); + continue; + } + } + + timer.stop(); + + if (mError.isEmpty()) { + if (!mArgs.isEmpty()) { + if (mArgs.size()>2) + get_state_all_result(mArgs, state_result); + else { + // We are not connected as we did not get the status we asked + return 0; + } + } + } else { + qWarning() << "Error:" << mError; + } + + // The returned value should be one because we asked for one state + return total_signals; +} + + +uint IcdPrivate::state_non_blocking(QList& state_results) +{ + QTimer timer; + QVariant reply; + QVariantList vl; + uint signals_left, total_signals; + IcdStateResult result; + + PDEBUG("%s\n", "non blocking state"); + + clearState(); + reply = mDBus->call(ICD_DBUS_API_STATE_REQ); + if (reply.type() != QVariant::List) + return 0; + vl = reply.toList(); + if (vl.isEmpty()) + return 0; + reply = vl.first(); + signals_left = total_signals = reply.toUInt(); + if (!signals_left) + return 0; + + timer.setSingleShot(true); + timer.start(timeout); + state_results.clear(); + mError.clear(); + while (signals_left) { + mInterface.clear(); + while (timer.isActive() && mInterface.isEmpty()) { + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + } + + if (!timer.isActive()) { + total_signals = 0; + break; + } + + if (mSignal != ICD_DBUS_API_STATE_SIG) { + continue; + } + + if (mError.isEmpty()) { + if (!mArgs.isEmpty()) { + if (mArgs.size()==2) + get_state_all_result2(mArgs, result); + else + get_state_all_result(mArgs, result); + state_results << result; + } + signals_left--; + } else { + qWarning() << "Error:" << mError; + break; + } + } + timer.stop(); + + PDEBUG("total_signals=%d\n", total_signals); + return total_signals; +} + + +/* Special version of the state() call which does not call event loop. + * Needed in order to fix NB#175098 where Qt4.7 webkit crashes because event + * loop is run when webkit does not expect it. This function is called from + * bearer management API syncStateWithInterface() in QNetworkSession + * constructor. + */ +uint IcdPrivate::state(QList& state_results) +{ + QVariant reply; + QVariantList vl; + uint signals_left, total_signals; + IcdStateResult result; + time_t started; + int timeout_secs = timeout / 1000; + + PDEBUG("%s\n", "state_results"); + + clearState(); + reply = mDBus->call(ICD_DBUS_API_STATE_REQ); + if (reply.type() != QVariant::List) + return 0; + vl = reply.toList(); + if (vl.isEmpty()) + return 0; + reply = vl.first(); + signals_left = total_signals = reply.toUInt(); + if (!signals_left) + return 0; + + started = time(0); + state_results.clear(); + mError.clear(); + while (signals_left) { + mInterface.clear(); + while ((time(0)<=(started+timeout_secs)) && mInterface.isEmpty()) { + mDBus->synchronousDispatch(1000); + } + + if (time(0)>(started+timeout_secs)) { + total_signals = 0; + break; + } + + if (mSignal != ICD_DBUS_API_STATE_SIG) { + continue; + } + + if (mError.isEmpty()) { + if (!mArgs.isEmpty()) { + if (mArgs.size()==2) + get_state_all_result2(mArgs, result); + else + get_state_all_result(mArgs, result); + state_results << result; + } + signals_left--; + } else { + qWarning() << "Error:" << mError; + break; + } + } + + PDEBUG("total_signals=%d\n", total_signals); + return total_signals; +} + + +static void get_statistics_all_result(QList& args, + IcdStatisticsResult& ret) +{ + int i=0; + + if (args.isEmpty()) + return; + + ret.params.service_type = args[i++].toString(); + ret.params.service_attrs = args[i++].toUInt(); + ret.params.service_id = args[i++].toString(); + ret.params.network_type = args[i++].toString(); + ret.params.network_attrs = args[i++].toUInt(); + ret.params.network_id = args[i++].toByteArray(); + ret.time_active = args[i++].toUInt(); + ret.signal_strength = (enum icd_nw_levels)args[i++].toUInt(); + ret.bytes_sent = args[i++].toUInt(); + ret.bytes_received = args[i++].toUInt(); +} + + +uint IcdPrivate::statistics(QList& stats_results) +{ + QTimer timer; + QVariant reply; + QVariantList vl; + uint signals_left, total_signals; + IcdStatisticsResult result; + + clearState(); + reply = mDBus->call(ICD_DBUS_API_STATISTICS_REQ); + if (reply.type() != QVariant::List) + return 0; + vl = reply.toList(); + if (vl.isEmpty()) + return 0; + reply = vl.first(); + if (reply.type() != QVariant::UInt) + return 0; + signals_left = total_signals = reply.toUInt(); + + if (!signals_left) + return 0; + + timer.setSingleShot(true); + timer.start(timeout); + stats_results.clear(); + while (signals_left) { + mInterface.clear(); + while (timer.isActive() && mInterface.isEmpty()) { + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + } + + if (!timer.isActive()) { + total_signals = 0; + break; + } + + if (mSignal != ICD_DBUS_API_STATISTICS_SIG) { + continue; + } + + if (mError.isEmpty()) { + get_statistics_all_result(mArgs, result); + stats_results << result; + signals_left--; + } else { + qWarning() << "Error:" << mError; + break; + } + } + timer.stop(); + + return total_signals; +} + + +uint IcdPrivate::statistics(QString& service_type, uint service_attrs, + QString& service_id, QString& network_type, + uint network_attrs, QByteArray& network_id, + IcdStatisticsResult& stats_result) +{ + QTimer timer; + QVariant reply; + uint total_signals; + QVariantList vl; + + clearState(); + + reply = mDBus->call(ICD_DBUS_API_STATISTICS_REQ, + service_type, service_attrs, service_id, + network_type, network_attrs, network_id); + if (reply.type() != QVariant::List) + return 0; + vl = reply.toList(); + if (vl.isEmpty()) + return 0; + reply = vl.first(); + total_signals = reply.toUInt(); + if (!total_signals) + return 0; + + timer.setSingleShot(true); + timer.start(timeout); + + mInterface.clear(); + while (timer.isActive() && mInterface.isEmpty()) { + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + if (mSignal != ICD_DBUS_API_STATISTICS_SIG) { + mInterface.clear(); + continue; + } + } + + timer.stop(); + + if (mError.isEmpty()) { + get_statistics_all_result(mArgs, stats_result); + } else { + qWarning() << "Error:" << mError; + } + + // The returned value should be one because we asked for one statistics + return total_signals; +} + + +static void get_addrinfo_all_result(QList& args, + IcdAddressInfoResult& ret) +{ + int i=0; + + if (args.isEmpty()) + return; + + ret.params.service_type = args[i++].toString(); + ret.params.service_attrs = args[i++].toUInt(); + ret.params.service_id = args[i++].toString(); + ret.params.network_type = args[i++].toString(); + ret.params.network_attrs = args[i++].toUInt(); + ret.params.network_id = args[i++].toByteArray(); + + QVariantList vl = args[i].toList(); + QVariant reply = vl.first(); + QList lst = reply.toList(); + for (int k=0; k& addr_results) +{ + QVariant reply; + QVariantList vl; + uint signals_left, total_signals; + IcdAddressInfoResult result; + time_t started; + int timeout_secs = timeout / 1000; + + PDEBUG("%s\n", "addr_results"); + + clearState(); + reply = mDBus->call(ICD_DBUS_API_ADDRINFO_REQ); + if (reply.type() != QVariant::List) + return 0; + vl = reply.toList(); + if (vl.isEmpty()) + return 0; + reply = vl.first(); + if (reply.type() != QVariant::UInt) + return 0; + signals_left = total_signals = reply.toUInt(); + if (!signals_left) + return 0; + + started = time(0); + addr_results.clear(); + while (signals_left) { + mInterface.clear(); + while ((time(0)<=(started+timeout_secs)) && mInterface.isEmpty()) { + mDBus->synchronousDispatch(1000); + } + + if (time(0)>(started+timeout_secs)) { + total_signals = 0; + break; + } + + if (mSignal != ICD_DBUS_API_ADDRINFO_SIG) { + continue; + } + + if (mError.isEmpty()) { + get_addrinfo_all_result(mArgs, result); + addr_results << result; + signals_left--; + } else { + qWarning() << "Error:" << mError; + break; + } + } + + PDEBUG("total_signals=%d\n", total_signals); + return total_signals; +} + +uint IcdPrivate::addrinfo_non_blocking(QList& addr_results) +{ + QTimer timer; + QVariant reply; + QVariantList vl; + uint signals_left, total_signals; + IcdAddressInfoResult result; + + PDEBUG("%s\n", "non blocking addrinfo"); + + clearState(); + reply = mDBus->call(ICD_DBUS_API_ADDRINFO_REQ); + if (reply.type() != QVariant::List) + return 0; + vl = reply.toList(); + if (vl.isEmpty()) + return 0; + reply = vl.first(); + if (reply.type() != QVariant::UInt) + return 0; + signals_left = total_signals = reply.toUInt(); + if (!signals_left) + return 0; + + timer.setSingleShot(true); + timer.start(timeout); + addr_results.clear(); + while (signals_left) { + mInterface.clear(); + while (timer.isActive() && mInterface.isEmpty()) { + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + } + + if (!timer.isActive()) { + total_signals = 0; + break; + } + + if (mSignal != ICD_DBUS_API_ADDRINFO_SIG) { + continue; + } + + if (mError.isEmpty()) { + get_addrinfo_all_result(mArgs, result); + addr_results << result; + signals_left--; + } else { + qWarning() << "Error:" << mError; + break; + } + } + timer.stop(); + PDEBUG("total_signals=%d\n", total_signals); + return total_signals; +} + + +uint IcdPrivate::addrinfo(QString& service_type, uint service_attrs, + QString& service_id, QString& network_type, + uint network_attrs, QByteArray& network_id, + IcdAddressInfoResult& addr_result) +{ + QTimer timer; + QVariant reply; + uint total_signals; + QVariantList vl; + + clearState(); + + reply = mDBus->call(ICD_DBUS_API_ADDRINFO_REQ, + service_type, service_attrs, service_id, + network_type, network_attrs, network_id); + if (reply.type() != QVariant::List) + return 0; + vl = reply.toList(); + if (vl.isEmpty()) + return 0; + reply = vl.first(); + total_signals = reply.toUInt(); + + if (!total_signals) + return 0; + + timer.setSingleShot(true); + timer.start(timeout); + + mInterface.clear(); + while (timer.isActive() && mInterface.isEmpty()) { + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + if (mSignal != ICD_DBUS_API_ADDRINFO_SIG) { + mInterface.clear(); + continue; + } + } + + timer.stop(); + + if (mError.isEmpty()) { + get_addrinfo_all_result(mArgs, addr_result); + } else { + qWarning() << "Error:" << mError; + } + + // The returned value should be one because we asked for one addrinfo + return total_signals; +} + + +Icd::Icd(QObject *parent) + : QObject(parent), d(new IcdPrivate(this)) +{ +} + +Icd::Icd(unsigned int timeout, QObject *parent) + : QObject(parent), d(new IcdPrivate(timeout, this)) +{ +} + +Icd::Icd(unsigned int timeout, IcdDbusInterfaceVer ver, QObject *parent) + : QObject(parent), d(new IcdPrivate(timeout, ver, this)) +{ +} + +Icd::~Icd() +{ + delete d; +} + + +QStringList Icd::scan(icd_scan_request_flags flags, + QStringList &network_types, + QList& scan_results, + QString& error) +{ + return d->scan(flags, network_types, scan_results, error); +} + + +void Icd::scanCancel() +{ + d->scanCancel(); +} + + +bool Icd::connect(icd_connection_flags flags, IcdConnectResult& result) +{ + return d->connect(flags, result); +} + + +bool Icd::connect(icd_connection_flags flags, QList& params, + IcdConnectResult& result) +{ + return d->connect(flags, params, result); +} + + +bool Icd::connect(icd_connection_flags flags, QString& iap, QString& result) +{ + return d->connect(flags, iap, result); +} + + +void Icd::select(uint flags) +{ + d->select(flags); +} + + +void Icd::disconnect(uint connect_flags, QString& service_type, + uint service_attrs, QString& service_id, + QString& network_type, uint network_attrs, + QByteArray& network_id) +{ + d->disconnect(connect_flags, service_type, + service_attrs, service_id, + network_type, network_attrs, + network_id); +} + + +void Icd::disconnect(uint connect_flags) +{ + d->disconnect(connect_flags); +} + + +uint Icd::state(QString& service_type, uint service_attrs, + QString& service_id, QString& network_type, + uint network_attrs, QByteArray& network_id, + IcdStateResult &state_result) +{ + return d->state(service_type, service_attrs, service_id, + network_type, network_attrs, network_id, + state_result); +} + + +uint Icd::statistics(QString& service_type, uint service_attrs, + QString& service_id, QString& network_type, + uint network_attrs, QByteArray& network_id, + IcdStatisticsResult& stats_result) +{ + return d->statistics(service_type, service_attrs, service_id, + network_type, network_attrs, network_id, + stats_result); +} + + +uint Icd::addrinfo(QString& service_type, uint service_attrs, + QString& service_id, QString& network_type, + uint network_attrs, QByteArray& network_id, + IcdAddressInfoResult& addr_result) +{ + return d->addrinfo(service_type, service_attrs, service_id, + network_type, network_attrs, network_id, + addr_result); +} + + +uint Icd::state(QList& state_results) +{ + return d->state(state_results); +} + +uint Icd::state_non_blocking(QList& state_results) +{ + return d->state_non_blocking(state_results); +} + +uint Icd::statistics(QList& stats_results) +{ + return d->statistics(stats_results); +} + + +uint Icd::addrinfo(QList& addr_results) +{ + return d->addrinfo(addr_results); +} + +uint Icd::addrinfo_non_blocking(QList& addr_results) +{ + return d->addrinfo_non_blocking(addr_results); +} + +void Icd::icdSignalReceived(const QString& interface, + const QString& signal, + const QList& args) +{ + d->signalReceived(interface, signal, args); +} + + +void Icd::icdCallReply(const QString& method, + const QList& args, + const QString& error) +{ + d->callReply(method, args, error); +} + + +QString Icd::error() +{ + return d->error(); +} + +} // Maemo namespace + + diff --git a/src/3rdparty/libconninet/src/maemo_icd.h b/src/3rdparty/libconninet/src/maemo_icd.h new file mode 100644 index 0000000..d7a8d5b --- /dev/null +++ b/src/3rdparty/libconninet/src/maemo_icd.h @@ -0,0 +1,182 @@ +/* + libconninet - Internet Connectivity support library + + Copyright (C) 2009 Nokia Corporation. All rights reserved. + + Contact: Jukka Rissanen + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + version 2.1 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA +*/ + +#ifndef MAEMO_ICD_H +#define MAEMO_ICD_H + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "dbusdispatcher.h" +#include + +#define ICD_LONG_SCAN_TIMEOUT (30*1000) /* 30sec */ +#define ICD_SHORT_SCAN_TIMEOUT (10*1000) /* 10sec */ +#define ICD_SHORT_CONNECT_TIMEOUT (10*1000) /* 10sec */ +#define ICD_LONG_CONNECT_TIMEOUT (150*1000) /* 2.5min */ + +namespace Maemo { + +struct CommonParams { + QString service_type; + uint service_attrs; + QString service_id; + QString network_type; + uint network_attrs; + QByteArray network_id; +}; + +struct ConnectParams { + struct CommonParams connect; +}; + +struct IcdScanResult { + uint status; // see #icd_scan_status + uint timestamp; // when last seen + QString service_name; + uint service_priority; // within a service type + QString network_name; + uint network_priority; + struct CommonParams scan; + uint signal_strength; // quality, 0 (none) - 10 (good) + QString station_id; // e.g. MAC address or similar id + uint signal_dB; // use signal strength above unless you know what you are doing + + IcdScanResult() { + status = timestamp = scan.service_attrs = service_priority = + scan.network_attrs = network_priority = signal_strength = + signal_dB = 0; + } +}; + +struct IcdConnectResult { + struct CommonParams connect; + uint status; +}; + +struct IcdStateResult { + struct CommonParams params; + QString error; + uint state; +}; + +struct IcdStatisticsResult { + struct CommonParams params; + uint time_active; // in seconds + enum icd_nw_levels signal_strength; // see network_api_defines.h in icd2-dev package + uint bytes_sent; + uint bytes_received; +}; + +struct IcdIPInformation { + QString address; + QString netmask; + QString default_gateway; + QString dns1; + QString dns2; + QString dns3; +}; + +struct IcdAddressInfoResult { + struct CommonParams params; + QList ip_info; +}; + +enum IcdDbusInterfaceVer { + IcdOldDbusInterface = 0, // use the old OSSO-IC interface + IcdNewDbusInterface // use the new Icd2 interface (default) +}; + + +class IcdPrivate; +class Icd : public QObject +{ + Q_OBJECT + +public: + Icd(QObject *parent = 0); + Icd(unsigned int timeout, QObject *parent = 0); + Icd(unsigned int timeout, IcdDbusInterfaceVer ver, QObject *parent = 0); + ~Icd(); + QString error(); // returns last error string + + /* Icd2 dbus API functions */ + QStringList scan(icd_scan_request_flags flags, + QStringList &network_types, + QList& scan_results, + QString& error); + void scanCancel(); + bool connect(icd_connection_flags flags, IcdConnectResult& result); + bool connect(icd_connection_flags flags, QList& params, + IcdConnectResult& result); + bool connect(icd_connection_flags flags, QString& iap, QString& result); + void select(uint flags); + void disconnect(uint connect_flags, QString& service_type, + uint service_attrs, QString& service_id, + QString& network_type, uint network_attrs, + QByteArray& network_id); + void disconnect(uint connect_flags); + + uint state(QString& service_type, uint service_attrs, + QString& service_id, QString& network_type, + uint network_attrs, QByteArray& network_id, + IcdStateResult &state_result); + uint statistics(QString& service_type, uint service_attrs, + QString& service_id, QString& network_type, + uint network_attrs, QByteArray& network_id, + IcdStatisticsResult& stats_result); + uint addrinfo(QString& service_type, uint service_attrs, + QString& service_id, QString& network_type, + uint network_attrs, QByteArray& network_id, + IcdAddressInfoResult& addr_result); + + uint state(QList& state_results); + uint state_non_blocking(QList& state_results); + uint statistics(QList& stats_results); + uint addrinfo(QList& addr_results); + uint addrinfo_non_blocking(QList& addr_results); + +private Q_SLOTS: + void icdSignalReceived(const QString& interface, + const QString& signal, + const QList& args); + void icdCallReply(const QString& method, + const QList& args, + const QString& error); + +private: + IcdPrivate *d; + friend class IcdPrivate; +}; + +} // Maemo namespace + +#endif diff --git a/src/3rdparty/libconninet/src/proxyconf.cpp b/src/3rdparty/libconninet/src/proxyconf.cpp new file mode 100644 index 0000000..5b27565 --- /dev/null +++ b/src/3rdparty/libconninet/src/proxyconf.cpp @@ -0,0 +1,315 @@ +/* + libconninet - Internet Connectivity support library + + Copyright (C) 2010 Nokia Corporation. All rights reserved. + + Contact: Jukka Rissanen + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + version 2.1 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA +*/ + +#include +#include +#include +#include +#include +#include +#include "proxyconf.h" + +#define CONF_PROXY "/system/proxy" +#define HTTP_PROXY "/system/http_proxy" + + +namespace Maemo { + +class NetworkProxyFactory : QNetworkProxyFactory { +public: + NetworkProxyFactory() { } + QList queryProxy(const QNetworkProxyQuery &query = QNetworkProxyQuery()); +}; + + +QList NetworkProxyFactory::queryProxy(const QNetworkProxyQuery &query) +{ + ProxyConf proxy_conf; + + QList result = proxy_conf.flush(query); + if (result.isEmpty()) + result << QNetworkProxy::NoProxy; + + return result; +} + + +class ProxyConfPrivate { +private: + // proxy values from gconf + QString mode; + bool use_http_host; + QString autoconfig_url; + QString http_proxy; + quint16 http_port; + QList ignore_hosts; + QString secure_host; + quint16 secure_port; + QString ftp_host; + quint16 ftp_port; + QString socks_host; + quint16 socks_port; + QString rtsp_host; + quint16 rtsp_port; + + QVariant getValue(QString& name); + QVariant getHttpValue(QString& name); + QVariant getValue(const char *name); + QVariant getHttpValue(const char *name); + bool isHostExcluded(const QString &host); + +public: + QString prefix; + QString http_prefix; + + void readProxyData(); + QList flush(const QNetworkProxyQuery &query); +}; + + +QVariant ProxyConfPrivate::getValue(QString& name) +{ + GConfItem item(prefix + name); + return item.value(); +} + +QVariant ProxyConfPrivate::getHttpValue(QString& name) +{ + GConfItem item(http_prefix + name); + return item.value(); +} + + +QVariant ProxyConfPrivate::getValue(const char *name) +{ + QString n = QString(name); + return getValue(n); +} + +QVariant ProxyConfPrivate::getHttpValue(const char *name) +{ + QString n = QString(name); + return getHttpValue(n); +} + + +#define GET(var, type) \ + do { \ + var = getValue(#var).to##type (); \ + /*qDebug()<<"var="<prefix = CONF_PROXY "/"; + d_ptr->http_prefix = HTTP_PROXY "/"; +} + +ProxyConf::~ProxyConf() +{ + delete d_ptr; +} + + +QList ProxyConf::flush(const QNetworkProxyQuery &query) +{ + d_ptr->readProxyData(); + return d_ptr->flush(query); +} + + +static int refcount = 0; +static QReadWriteLock lock; + +void ProxyConf::update() +{ + QWriteLocker locker(&lock); + NetworkProxyFactory *factory = new NetworkProxyFactory(); + QNetworkProxyFactory::setApplicationProxyFactory((QNetworkProxyFactory*)factory); + refcount++; +} + + +void ProxyConf::clear(void) +{ + QWriteLocker locker(&lock); + refcount--; + if (refcount == 0) + QNetworkProxyFactory::setApplicationProxyFactory(NULL); + + if (refcount<0) + refcount = 0; +} + + +} // namespace Maemo diff --git a/src/3rdparty/libconninet/src/proxyconf.h b/src/3rdparty/libconninet/src/proxyconf.h new file mode 100644 index 0000000..7711c49 --- /dev/null +++ b/src/3rdparty/libconninet/src/proxyconf.h @@ -0,0 +1,53 @@ +/* + libconninet - Internet Connectivity support library + + Copyright (C) 2010 Nokia Corporation. All rights reserved. + + Contact: Jukka Rissanen + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + version 2.1 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA +*/ + +#ifndef PROXYCONF_H +#define PROXYCONF_H + +#include +#include + +namespace Maemo { + +class ProxyConfPrivate; +class ProxyConf { +private: + ProxyConfPrivate *d_ptr; + +public: + ProxyConf(); + virtual ~ProxyConf(); + + QList flush(const QNetworkProxyQuery &query = QNetworkProxyQuery()); // read the proxies from db + + /* Note that for each update() call there should be corresponding + * clear() call because the ProxyConf class implements a reference + * counting mechanism. The factory is removed only when there is + * no one using the factory any more. + */ + static void update(void); // this builds QNetworkProxy factory + static void clear(void); // this removes QNetworkProxy factory +}; + +} // namespace Maemo + +#endif diff --git a/src/3rdparty/libconninet/tests/ut_dbusdispatcher.cpp b/src/3rdparty/libconninet/tests/ut_dbusdispatcher.cpp new file mode 100644 index 0000000..70deb3f --- /dev/null +++ b/src/3rdparty/libconninet/tests/ut_dbusdispatcher.cpp @@ -0,0 +1,191 @@ +/* * This file is part of conn-dui-settings-inet * + * + * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * + * Contact: Aapo Makela + * + * This software, including documentation, is protected by copyright + * controlled by Nokia Corporation. All rights are reserved. Copying, + * including reproducing, storing, adapting or translating, any or all of + * this material requires the prior written consent of Nokia Corporation. + * This material also contains confidential information which may not be + * disclosed to others without the prior written consent of Nokia. + */ + +#include +#include +#include +#include +#include + +#include + +class Ut_DBusDispatcher : public QObject +{ + Q_OBJECT + +private Q_SLOTS: + void init(); + void cleanup(); + void initTestCase(); + void cleanupTestCase(); + + void simpleSignalReceived(const QString& interface, + const QString& signal, + const QList& args); + void simpleCallReply(const QString& method, + const QList& args, + const QString& error); + void simpleCall(); + + void complexCallReply(const QString& method, + const QList& args, + const QString& error); + void complexCall(); + +private: + Maemo::DBusDispatcher *mSubject; + QProcess *icd_stub; + + QString mMethod; + QString mInterface; + QString mSignal; + QList mArgs; +}; + +void Ut_DBusDispatcher::init() +{ + mSubject = new Maemo::DBusDispatcher("com.nokia.icd2", "/com/nokia/icd2", + "com.nokia.icd2"); + + // Start icd2 stub + icd_stub = new QProcess(this); + icd_stub->start("/usr/bin/icd2_stub.py"); + QTest::qWait(1000); +} + +void Ut_DBusDispatcher::cleanup() +{ + // Terminate icd2 stub + icd_stub->terminate(); + icd_stub->waitForFinished(); + + delete mSubject; + mSubject = 0; +} + +void Ut_DBusDispatcher::initTestCase() +{ +} + +void Ut_DBusDispatcher::cleanupTestCase() +{ +} + +void Ut_DBusDispatcher::simpleSignalReceived(const QString& interface, + const QString& signal, + const QList& args) +{ + // Signal handler, which simply records what has been signalled + mInterface = interface; + mSignal = signal; + mArgs = args; +} + +void Ut_DBusDispatcher::simpleCallReply(const QString& method, + const QList& args, + const QString& error) +{ + mMethod = method; + + // Check that method matches and at least WLAN_INFRA is returned + QVERIFY(error.isEmpty()); + QVERIFY(args[0].toStringList().contains("WLAN_INFRA")); +} + +void Ut_DBusDispatcher::simpleCall() +{ + uint flags = 0; + QList reply; + int idx = 0; + QTimer timer; + + // Connect signals + connect(mSubject, SIGNAL(signalReceived(const QString&, + const QString&, + const QList&)), + this, SLOT(simpleSignalReceived(const QString&, + const QString&, + const QList&))); + connect(mSubject, SIGNAL(callReply(const QString&, + const QList&, + const QString&)), + this, SLOT(simpleCallReply(const QString&, + const QList&, + const QString&))); + + // Request scan and verify the call starts succesfully + QVERIFY(mSubject->callAsynchronous("scan_req", flags)); + + // Wait 1st scan signal for 10 secs + timer.setSingleShot(true); + timer.start(10000); + while (timer.isActive() && mInterface.isEmpty()) { + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + idx++; + } + timer.stop(); + + // Sanity checks for the scan result + QVERIFY(mInterface == "com.nokia.icd2"); // interface is icd2 + QVERIFY(mMethod == "scan_req"); // method is scan_req + QVERIFY(mSignal == "scan_result_sig"); // signal is scan result + QVERIFY(mArgs[0] == QVariant(0) || + mArgs[0] == QVariant(4)); // First argument is status + // (0 == NEW, 4 == COMPLETED) + //QVERIFY(mArgs.contains(QVariant("WLAN_INFRA"))); // WLAN scan result +} + +void Ut_DBusDispatcher::complexCallReply(const QString& method, + const QList& args, + const QString& error) +{ + mMethod = method; + + // Check that method has not return arguments and error is not set + QVERIFY(error.isEmpty()); + QVERIFY(args.isEmpty()); +} + +void Ut_DBusDispatcher::complexCall() +{ + uint flags = ICD_CONNECTION_FLAG_UI_EVENT; + QList reply; + QVariantList networks; + QVariantList network1; + + network1 << "" << (uint)0 << "" << "WLAN_INFRA" << (uint)0x05000011 << QByteArray("osso@46@net"); + networks << QVariant(network1); + + // Connect signal + connect(mSubject, SIGNAL(callReply(const QString&, + const QList&, + const QString&)), + this, SLOT(complexCallReply(const QString&, + const QList&, + const QString&))); + + // Request connect and verify the call starts succesfully + QVERIFY(mSubject->callAsynchronous("connect_req", flags, networks)); + + QTest::qWait(1000); + + // Sanity checks for the scan result + QVERIFY(mInterface == "com.nokia.icd2"); // interface is icd2 + QVERIFY(mMethod == "connect_req"); // method connect_req +} + +QTEST_MAIN(Ut_DBusDispatcher) + +#include "ut_dbusdispatcher.moc" diff --git a/src/3rdparty/libconninet/tests/ut_iapconf.cpp b/src/3rdparty/libconninet/tests/ut_iapconf.cpp new file mode 100644 index 0000000..6a91d61 --- /dev/null +++ b/src/3rdparty/libconninet/tests/ut_iapconf.cpp @@ -0,0 +1,186 @@ +/* + libconninet - Internet Connectivity support library + + Copyright (C) 2009 Nokia Corporation. All rights reserved. + + Contact: Aapo Makela + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + version 2.1 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA +*/ + + +#include +#include + +#include + +class Ut_IAPConf : public QObject +{ + Q_OBJECT + +private Q_SLOTS: + void init(); + void cleanup(); + void initTestCase(); + void cleanupTestCase(); + + void setupIAP(); + void setupIAPContainingDot(); + void unsetIAPValueIsNotValid(); + void verifyAllIAPs(); + void allForEmptyConfReturnsEmptyList(); + void settingInvalidValueUnsetsKey(); + +private: + Maemo::IAPConf *mSubject; +}; + +void Ut_IAPConf::init() +{ + mSubject = new Maemo::IAPConf("test_iap"); +} + +void Ut_IAPConf::cleanup() +{ + // Clear made settings + mSubject->clear(); + + delete mSubject; + mSubject = 0; +} + +void Ut_IAPConf::initTestCase() +{ +} + +void Ut_IAPConf::cleanupTestCase() +{ +} + +void Ut_IAPConf::setupIAP() +{ + // Set bunch of values + mSubject->set("ipv4_type", "AUTO", + "wlan_wepkey1", "connt", + "wlan_wepdefkey", 1, + "wlan_ssid", QByteArray("CONNTEST-1")); + + // Set one value + mSubject->setValue("type", "WLAN_INFRA"); + + // Check all values that they were set correctly + QVERIFY(mSubject->value("ipv4_type").toString() == "AUTO"); + QVERIFY(mSubject->value("wlan_wepkey1").toString() == "connt"); + QVERIFY(mSubject->value("wlan_wepdefkey").toInt() == 1); + QVERIFY(mSubject->value("wlan_ssid").toByteArray() == QByteArray("CONNTEST-1")); + QVERIFY(mSubject->value("type").toString() == "WLAN_INFRA"); +} + +void Ut_IAPConf::setupIAPContainingDot() +{ + delete mSubject; + mSubject = new Maemo::IAPConf("test.iap"); + + // Set and check one value + mSubject->setValue("type", "DUMMY"); + QVERIFY(mSubject->value("type").toString() == "DUMMY"); +} + +void Ut_IAPConf::unsetIAPValueIsNotValid() +{ + QVariant invalidValue = mSubject->value("this_value_does_not_exist"); + QVERIFY(invalidValue.isValid() == false); +} + +void Ut_IAPConf::verifyAllIAPs() +{ + int count = 0, extras = 0; + QRegExp regexp("iap[1-3]"); + Maemo::IAPConf iap1("iap1"); + Maemo::IAPConf iap2("iap2"); + Maemo::IAPConf iap3("iap3"); + + iap1.clear(); + iap2.clear(); + iap3.clear(); + + iap1.setValue("name", "iap1"); + iap2.setValue("name", "iap2"); + iap3.setValue("name", "iap3"); + + count = extras = 0; + QList iaps; + Maemo::IAPConf::getAll(iaps, true); + foreach (QString iap_path, iaps) { + QString iap_id = iap_path.section('/', 5); /* This is the IAP id */ + if (!iap_id.contains(regexp)) { + extras++; + continue; + } + Maemo::IAPConf iap(iap_id); + QString name = iap.value("name").toString(); + QVERIFY(name == iap_id); + count++; + } + QCOMPARE(count, iaps.size()-extras); + + iap1.clear(); + iap2.clear(); + iap3.clear(); + + iap1.setValue("name", "iap1"); + iap2.setValue("name", "iap2"); + iap3.setValue("name", "iap3"); + + count = extras = 0; + Maemo::IAPConf::getAll(iaps); + foreach (QString iap_id, iaps) { + if (!iap_id.contains(regexp)) { + extras++; + continue; + } + Maemo::IAPConf iap(iap_id); + QString name = iap.value("name").toString(); + QVERIFY(name == iap_id); + count++; + } + QCOMPARE(count, iaps.size()-extras); +} + +void Ut_IAPConf::allForEmptyConfReturnsEmptyList() +{ + // Clear everything in configuration + mSubject->clearAll(); + + // Get all for a list and check that it is empty + QStringList iaps; + mSubject->getAll(iaps); + QVERIFY(iaps.isEmpty()); +} + +void Ut_IAPConf::settingInvalidValueUnsetsKey() +{ + // Setup some IAP + setupIAP(); + + // Set invalid value to unset "wlan_wepdefkey" key and verify that the + // value is unset + mSubject->setValue("wlan_wepdefkey", QVariant()); + QVERIFY(!mSubject->value("wlan_wepdefkey").isValid()); +} + +QTEST_MAIN(Ut_IAPConf) + +#include "ut_iapconf.moc" diff --git a/src/3rdparty/libconninet/tests/ut_iapmonitor.cpp b/src/3rdparty/libconninet/tests/ut_iapmonitor.cpp new file mode 100644 index 0000000..f14f623 --- /dev/null +++ b/src/3rdparty/libconninet/tests/ut_iapmonitor.cpp @@ -0,0 +1,118 @@ +/* + libconninet - Internet Connectivity support library + + Copyright (C) 2009-2010 Nokia Corporation. All rights reserved. + + Contact: Jukka Rissanen + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + version 2.1 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA +*/ + + +#include +#include + +#include +#include + +static const char *iap_id = "test_monitor_1"; + +class TestIAPMonitor : public Maemo::IAPMonitor +{ +public: + QString addedIap; + QString removedIap; + +protected: + virtual void iapAdded(const QString &id) + { + addedIap = id; + } + + virtual void iapRemoved(const QString &id) + { + removedIap = id; + } +}; + +class Ut_IAPMonitor : public QObject +{ + Q_OBJECT + +private Q_SLOTS: + void init(); + void cleanup(); + void initTestCase(); + void cleanupTestCase(); + + void check(); + +private: + TestIAPMonitor *mon; + Maemo::IAPConf *iap; +}; + +void Ut_IAPMonitor::init() +{ + mon = new TestIAPMonitor; +} + +void Ut_IAPMonitor::cleanup() +{ + delete mon; + mon = 0; +} + +void Ut_IAPMonitor::initTestCase() +{ +} + +void Ut_IAPMonitor::cleanupTestCase() +{ +} + +void Ut_IAPMonitor::check() +{ + QVERIFY(mon->addedIap.isEmpty()); + + iap = new Maemo::IAPConf(iap_id); + iap->set("ipv4_type", "AUTO", + "wlan_wepkey1", "connt", + "wlan_wepdefkey", 1, + "wlan_ssid", QByteArray(iap_id)); + + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + QVERIFY(mon->addedIap == iap_id); + mon->addedIap.clear(); + + QVERIFY(mon->removedIap.isEmpty()); + + // Unset only one value and verify that IAP is not removed + iap->set("ipv4_type", QVariant()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + QVERIFY(mon->removedIap.isEmpty()); + + // Clear the whole IAP and check that it is removed + iap->clear(); + delete iap; + + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QVERIFY(mon->removedIap == iap_id); +} + +QTEST_MAIN(Ut_IAPMonitor) + +#include "ut_iapmonitor.moc" diff --git a/src/3rdparty/libconninet/tests/ut_maemo_icd.cpp b/src/3rdparty/libconninet/tests/ut_maemo_icd.cpp new file mode 100644 index 0000000..494829d --- /dev/null +++ b/src/3rdparty/libconninet/tests/ut_maemo_icd.cpp @@ -0,0 +1,274 @@ +/* + * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * + * Contact: Jukka Rissanen + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + */ + + +// !!!! +// !!!! NOTE: THESE TEST DO NOT REALLY WORK YET BECAUSE OF MISSING +// !!!! FUNCTIONALITY IN ICD2 STUB. YOU HAVE BEEN WARNED. +// !!!! + + +#include +#include +#include +#include +#include + +#include "maemo_icd.h" + +class Ut_MaemoIcd : public QObject +{ + Q_OBJECT + +private Q_SLOTS: + void init(); + void cleanup(); + void initTestCase(); + void cleanupTestCase(); + + void scan_req(); + void scan_cancel_req(); + void connect_req_default(); + void state_req_all(); + void state_req(); + void statistics_req_all(); + void statistics_req(); + void addrinfo_req_all(); + void addrinfo_req(); + +private: + void disconnect_req_default(); // this is currently not run + void connect_req_specific(); // this is currently not run + QProcess *icd_stub; + bool connect_iap(Maemo::IcdConnectResult &connect_result, + QString &result, + QString &error, + QString iap=QString()); +}; + + +QString create_error_str(Maemo::Icd &icd) +{ + return icd.error(); +} + + +void Ut_MaemoIcd::init() +{ + icd_stub = new QProcess(this); + icd_stub->setStandardOutputFile("/tmp/ut_maemo_icd.log"); + icd_stub->start("/usr/bin/icd2_stub.py"); + QTest::qWait(1000); + + // Set the statistics + QProcess dbus_send; + dbus_send.start("dbus-send --type=method_call --system " + "--dest=com.nokia.icd2 /com/nokia/icd2 " + "com.nokia.icd2.testing.set_statistics " + "uint32:1024 uint32:256"); + dbus_send.waitForFinished(); + +} + +void Ut_MaemoIcd::cleanup() +{ + icd_stub->terminate(); + icd_stub->waitForFinished(); +} + +void Ut_MaemoIcd::initTestCase() +{ +} + +void Ut_MaemoIcd::cleanupTestCase() +{ +} + +void Ut_MaemoIcd::scan_req() +{ + QList scanned; + QStringList scannedNetworkTypes; + QStringList networkTypesToScan; + QString error; + Maemo::Icd icd(ICD_SHORT_SCAN_TIMEOUT); + + scannedNetworkTypes = icd.scan(ICD_SCAN_REQUEST_ACTIVE, + networkTypesToScan, + scanned, + error); + QVERIFY(error.isEmpty()); + QCOMPARE(scanned.size(), 3); + QVERIFY(scannedNetworkTypes[0] == "WLAN_INFRA"); + QVERIFY(scannedNetworkTypes[1] == "DUN_GSM_PS"); +} + +void Ut_MaemoIcd::scan_cancel_req() +{ + Maemo::Icd icd; + icd.scanCancel(); + // Not much to verify here +} + +bool Ut_MaemoIcd::connect_iap(Maemo::IcdConnectResult &connect_result, + QString &result, + QString &error, + QString iap) +{ + icd_connection_flags flags = ICD_CONNECTION_FLAG_USER_EVENT; + bool st; + Maemo::Icd icd(ICD_SHORT_CONNECT_TIMEOUT); + + if (iap.isEmpty()) { + qDebug() << "connecting to default IAP"; + st = icd.connect(flags, connect_result); + } else { + qDebug() << "connecting to" << iap; + st = icd.connect(flags, iap, result); + } + + error = create_error_str(icd); + return st; +} + +void Ut_MaemoIcd::connect_req_default() +{ + Maemo::IcdConnectResult connect_result; + QString result, error; + bool st; + st = connect_iap(connect_result, result, error); + QVERIFY2(st, error.toAscii().data()); + result = connect_result.connect.network_id.data(); + qDebug() << result; +} + + +void Ut_MaemoIcd::disconnect_req_default() +{ + icd_connection_flags flags = ICD_CONNECTION_FLAG_USER_EVENT; + bool st; + Maemo::Icd icd(ICD_SHORT_CONNECT_TIMEOUT); + icd.disconnect(flags); +} + + +void Ut_MaemoIcd::connect_req_specific() +{ + Maemo::IcdConnectResult connect_result; + QString result; + QString error; + bool st; + st = connect_iap(connect_result, result, error, "wpa2gx2.osso.net"); + QVERIFY2(st, error.toAscii().data()); + qDebug() << result; +} + + +void Ut_MaemoIcd::state_req_all() +{ + QList state_results; + Maemo::Icd icd; + int sig; + sig = icd.state(state_results); + QVERIFY2(sig==1, create_error_str(icd).toAscii().data()); +} + + +void Ut_MaemoIcd::state_req() +{ + Maemo::IcdStateResult state_result; + Maemo::Icd icd; + int sig; + QString service_type, service_id; + QString network_type("WLAN_INFRA"); + QByteArray network_id("wpa2gx2.osso.net"); + sig = icd.state(service_type, 0, service_id, + network_type, (uint)0x17a1, network_id, + state_result); + QVERIFY2(sig==1, create_error_str(icd).toAscii().data()); +} + + +void Ut_MaemoIcd::statistics_req_all() +{ + QList stats_results; + Maemo::Icd icd; + int sig; + QString err; + sig = icd.statistics(stats_results); + err = create_error_str(icd); + if (!err.isEmpty()) + QVERIFY2(sig==1, err.toAscii().data()); + else + QCOMPARE(sig, 1); + + for(int i=0; i addr_results; + Maemo::Icd icd; + int sig; + sig = icd.addrinfo(addr_results); + QVERIFY2(sig==1, create_error_str(icd).toAscii().data()); +} + + +void Ut_MaemoIcd::addrinfo_req() +{ + Maemo::IcdAddressInfoResult addr_result; + Maemo::Icd icd; + int sig; + QString service_type, service_id; + QString network_type("WLAN_INFRA"); + QByteArray network_id("wpa2gx2.osso.net"); + sig = icd.addrinfo(service_type, 0, service_id, + network_type, (uint)0x17a1, network_id, + addr_result); + QVERIFY2(sig==1, create_error_str(icd).toAscii().data()); +} + + +QTEST_MAIN(Ut_MaemoIcd) + +#include "ut_maemo_icd.moc" diff --git a/src/3rdparty/libconninet/tests/ut_proxyconf.cpp b/src/3rdparty/libconninet/tests/ut_proxyconf.cpp new file mode 100644 index 0000000..1f407f0 --- /dev/null +++ b/src/3rdparty/libconninet/tests/ut_proxyconf.cpp @@ -0,0 +1,400 @@ +/* + libconninet - Internet Connectivity support library + + Copyright (C) 2010 Nokia Corporation. All rights reserved. + + Contact: Jukka Rissanen + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + version 2.1 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA +*/ + + +#include +#include +#include +#include + +#include "../src/proxyconf.h" + +class Ut_ProxyConf : public QObject +{ + Q_OBJECT + +private Q_SLOTS: + void init(); + void cleanup(); + void initTestCase(); + void cleanupTestCase(); + + // tests without the factory + void proxy_ftp_no_factory_ok_auto(); + void proxy_ftp_no_factory_ok_manual(); + void proxy_http_no_factory_ok_manual(); + void proxy_https_no_factory_ok_manual(); + void proxy_socks_no_factory_ok_manual(); + void proxy_default_no_factory_ok_manual(); + + // tests using the factory + void proxy_ftp_factory_ok_auto(); + void proxy_ftp_factory_ok_manual(); + void proxy_http_factory_ok_manual(); + void proxy_https_factory_ok_manual(); + void proxy_socks_factory_ok_manual(); + void proxy_http_factory_ok_manual_clear(); + void proxy_default_factory_ok_manual(); + void proxy_http_factory_ok_manual_ignore_list(); + void proxy_default_factory_ok_manual_system(); + +private: + Maemo::ProxyConf *pc; +}; + + +void put(QString var, QString type, QString value) +{ + QProcess gconf; + if (value.isEmpty()) + gconf.start(QString("gconftool-2 -u /system/proxy/"+var)); + else + gconf.start(QString("gconftool-2 -s /system/proxy/"+var+" -t "+type+" "+value)); + gconf.waitForFinished(); +} + +void put_http(QString var, QString type, QString value) +{ + QProcess gconf; + if (value.isEmpty()) + gconf.start(QString("gconftool-2 -u /system/http_proxy/"+var)); + else + gconf.start(QString("gconftool-2 -s /system/http_proxy/"+var+" -t "+type+" "+value)); + gconf.waitForFinished(); +} + +void put_list(QString var, QString type, QList value) +{ + QProcess gconf; + QString values = "["; + foreach (QString str, value) + values = values + str + ","; + values.chop(1); + values = values + "]"; + + gconf.start(QString("gconftool-2 -s /system/http_proxy/"+var+" -t list --list-type="+type+" "+values)); + gconf.waitForFinished(); +} + + +void Ut_ProxyConf::init() +{ + put_http("host", "string", "my.proxy.com"); + put_http("port", "int", "8080"); + + QList list; + list.append("foo.bar.com"); + list.append("192.168.19.69"); + list.append("192.168.20.0/24"); + list.append("bar.foo.com"); + put_list("ignore_hosts", "string", list); + put_http("use_http_host", "boolean", "true"); + + put("mode", "string", "auto"); + put("autoconfig_url", "string", "http://foo.bar.com/autoconf"); + put("secure_host", "string", "secure_host.com"); + put("secure_port", "int", "112"); + + put("ftp_host", "string", "ftp.nuukia.com"); + put("ftp_port", "int", "2000"); + put("socks_host", "string", "socks.host.com"); + put("socks_port", "int", "10080"); + put("rtsp_host", "string", "rtsp.voice.com"); + put("rtsp_port", "int", "1554"); + + pc = new Maemo::ProxyConf(); +} + +void Ut_ProxyConf::cleanup() +{ + delete pc; + pc = 0; +} + +void Ut_ProxyConf::initTestCase() +{ +} + +void Ut_ProxyConf::cleanupTestCase() +{ +} + + +void Ut_ProxyConf::proxy_ftp_no_factory_ok_auto() +{ + QList nplist; + QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("ftp://maps.google.com/")); + + nplist = pc->flush(query); + QVERIFY(nplist.length()==0); +} + + +void Ut_ProxyConf::proxy_ftp_no_factory_ok_manual() +{ + QList nplist; + QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("ftp://maps.google.com/")); + + put("mode", "string", "manual"); + + nplist = pc->flush(query); + foreach (QNetworkProxy proxy, nplist) { + qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port(); + } + QVERIFY(nplist.length()==3); + QVERIFY(nplist.first().type() == QNetworkProxy::FtpCachingProxy); +} + + +void Ut_ProxyConf::proxy_http_no_factory_ok_manual() +{ + QList nplist; + QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("http://maps.google.com/")); + + put("mode", "string", "manual"); + + nplist = pc->flush(query); + foreach (QNetworkProxy proxy, nplist) { + qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port(); + } + QVERIFY(nplist.length()==3); + QVERIFY(nplist.first().type() == QNetworkProxy::HttpProxy); +} + + +void Ut_ProxyConf::proxy_https_no_factory_ok_manual() +{ + QList nplist; + QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("https://maps.google.com/")); + + put("mode", "string", "manual"); + + nplist = pc->flush(query); + foreach (QNetworkProxy proxy, nplist) { + qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port(); + } + QVERIFY(nplist.length()==2); + QVERIFY(nplist.first().type() == QNetworkProxy::HttpProxy); +} + + +void Ut_ProxyConf::proxy_socks_no_factory_ok_manual() +{ + QList nplist; + QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("http://maps.google.com/")); + + put("mode", "string", "manual"); + put_http("host", "string", ""); + + nplist = pc->flush(query); + foreach (QNetworkProxy proxy, nplist) { + qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port(); + } + QVERIFY(nplist.length()==2); + QVERIFY(nplist.first().type() == QNetworkProxy::Socks5Proxy); +} + + +void Ut_ProxyConf::proxy_default_no_factory_ok_manual() +{ + QList nplist; + QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("foobar://maps.google.com/")); + + put("mode", "string", "manual"); + put("socks_host", "string", ""); + put("secure_host", "string", ""); + + nplist = pc->flush(query); + foreach (QNetworkProxy proxy, nplist) { + qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port(); + } + QVERIFY(nplist.length()==0); +} + + +void Ut_ProxyConf::proxy_ftp_factory_ok_auto() +{ + QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("ftp://maps.google.com/")); + Maemo::ProxyConf::update(); + QList listOfProxies = QNetworkProxyFactory::proxyForQuery(query); + QVERIFY(listOfProxies.length()==1); + QVERIFY(listOfProxies.first().type() == QNetworkProxy::NoProxy); + Maemo::ProxyConf::clear(); +} + + +void Ut_ProxyConf::proxy_ftp_factory_ok_manual() +{ + QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("ftp://maps.google.com/")); + Maemo::ProxyConf::update(); + + put("mode", "string", "manual"); + + QList listOfProxies = QNetworkProxyFactory::proxyForQuery(query); + + foreach (QNetworkProxy proxy, listOfProxies) { + qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port(); + } + QVERIFY(listOfProxies.length()==3); + QVERIFY(listOfProxies.first().type() == QNetworkProxy::FtpCachingProxy); + Maemo::ProxyConf::clear(); +} + + +void Ut_ProxyConf::proxy_http_factory_ok_manual() +{ + QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("http://maps.google.com/")); + Maemo::ProxyConf::update(); + + put("mode", "string", "manual"); + + QList listOfProxies = QNetworkProxyFactory::proxyForQuery(query); + + foreach (QNetworkProxy proxy, listOfProxies) { + qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port(); + } + QVERIFY(listOfProxies.length()==3); + QVERIFY(listOfProxies.first().type() == QNetworkProxy::HttpProxy); + Maemo::ProxyConf::clear(); +} + + +void Ut_ProxyConf::proxy_https_factory_ok_manual() +{ + QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("https://maps.google.com/")); + Maemo::ProxyConf::update(); + + put("mode", "string", "manual"); + + QList listOfProxies = QNetworkProxyFactory::proxyForQuery(query); + + foreach (QNetworkProxy proxy, listOfProxies) { + qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port(); + } + QVERIFY(listOfProxies.length()==2); + QVERIFY(listOfProxies.first().type() == QNetworkProxy::HttpProxy); + Maemo::ProxyConf::clear(); +} + + +void Ut_ProxyConf::proxy_socks_factory_ok_manual() +{ + QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("http://maps.google.com/")); + Maemo::ProxyConf::update(); + + put("mode", "string", "manual"); + put_http("host", "string", ""); + + QList listOfProxies = QNetworkProxyFactory::proxyForQuery(query); + + foreach (QNetworkProxy proxy, listOfProxies) { + qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port(); + } + QVERIFY(listOfProxies.length()==2); + QVERIFY(listOfProxies.first().type() == QNetworkProxy::Socks5Proxy); + Maemo::ProxyConf::clear(); +} + + +void Ut_ProxyConf::proxy_http_factory_ok_manual_clear() +{ + QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("http://maps.google.com/")); + Maemo::ProxyConf::update(); + + put("mode", "string", "manual"); + put_http("host", "string", "192.168.1.1"); + + QList listOfProxies = QNetworkProxyFactory::proxyForQuery(query); + + foreach (QNetworkProxy proxy, listOfProxies) { + qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port(); + } + QVERIFY(listOfProxies.length()==3); + QVERIFY(listOfProxies.first().type() == QNetworkProxy::HttpProxy); + + Maemo::ProxyConf::clear(); + listOfProxies = QNetworkProxyFactory::proxyForQuery(query); + QVERIFY(listOfProxies.length()==1); + QVERIFY(listOfProxies.first().type() == QNetworkProxy::NoProxy); +} + + +void Ut_ProxyConf::proxy_default_factory_ok_manual() +{ + QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("foobar://maps.google.com/")); + Maemo::ProxyConf::update(); + + put("mode", "string", "manual"); + put("socks_host", "string", ""); + put("secure_host", "string", ""); + + QList listOfProxies = QNetworkProxyFactory::proxyForQuery(query); + + QVERIFY(listOfProxies.length()==1); + QVERIFY(listOfProxies.first().type() == QNetworkProxy::NoProxy); + Maemo::ProxyConf::clear(); +} + + +void Ut_ProxyConf::proxy_http_factory_ok_manual_ignore_list() +{ + QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("http://192.168.19.70/")); + Maemo::ProxyConf::update(); + + put("mode", "string", "manual"); + + QList listOfProxies = QNetworkProxyFactory::proxyForQuery(query); + + foreach (QNetworkProxy proxy, listOfProxies) { + qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port(); + } + QVERIFY(listOfProxies.length()==3); + QVERIFY(listOfProxies.first().type() == QNetworkProxy::HttpProxy); + + query = QNetworkProxyQuery(QUrl("http://192.168.20.10/")); + listOfProxies = QNetworkProxyFactory::proxyForQuery(query); + QVERIFY(listOfProxies.length()==1); + QVERIFY(listOfProxies.first().type() == QNetworkProxy::NoProxy); + Maemo::ProxyConf::clear(); +} + + +void Ut_ProxyConf::proxy_default_factory_ok_manual_system() +{ + QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("http://maps.google.com/")); + Maemo::ProxyConf::update(); + + put("mode", "string", "manual"); + + QList listOfProxies = QNetworkProxyFactory::systemProxyForQuery(query); + + QVERIFY(listOfProxies.length()==1); + QVERIFY(listOfProxies.first().type() == QNetworkProxy::NoProxy); + Maemo::ProxyConf::clear(); +} + + + + +QTEST_MAIN(Ut_ProxyConf) + +#include "ut_proxyconf.moc" -- cgit v0.12 From 7fcc1daf1762d345ca39f9599a8de2567bb8e788 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Mon, 16 Aug 2010 15:17:27 +1000 Subject: More positioners with QGraphicsWidgets fixes. Task-number: QTBUG-12416 Reviewed-by: Michael Brasser --- .../graphicsitems/qdeclarativepositioners.cpp | 8 +++- .../tst_qdeclarativepositioners.cpp | 44 ++++++++++++++++++++++ 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativepositioners.cpp b/src/declarative/graphicsitems/qdeclarativepositioners.cpp index f32c532..1a5c42d 100644 --- a/src/declarative/graphicsitems/qdeclarativepositioners.cpp +++ b/src/declarative/graphicsitems/qdeclarativepositioners.cpp @@ -70,6 +70,8 @@ void QDeclarativeBasePositionerPrivate::watchChanges(QGraphicsObject *other) Q_Q(QDeclarativeBasePositioner); QObject::connect(other, SIGNAL(widthChanged()), q, SLOT(graphicsWidgetGeometryChanged())); QObject::connect(other, SIGNAL(heightChanged()), q, SLOT(graphicsWidgetGeometryChanged())); + QObject::connect(other, SIGNAL(opacityChanged()), q, SLOT(graphicsWidgetGeometryChanged())); + QObject::connect(other, SIGNAL(visibleChanged()), q, SLOT(graphicsWidgetGeometryChanged())); } } @@ -82,6 +84,8 @@ void QDeclarativeBasePositionerPrivate::unwatchChanges(QGraphicsObject* other) Q_Q(QDeclarativeBasePositioner); QObject::disconnect(other, SIGNAL(widthChanged()), q, SLOT(graphicsWidgetGeometryChanged())); QObject::disconnect(other, SIGNAL(heightChanged()), q, SLOT(graphicsWidgetGeometryChanged())); + QObject::disconnect(other, SIGNAL(opacityChanged()), q, SLOT(graphicsWidgetGeometryChanged())); + QObject::disconnect(other, SIGNAL(visibleChanged()), q, SLOT(graphicsWidgetGeometryChanged())); } } @@ -235,7 +239,7 @@ void QDeclarativeBasePositioner::prePositioning() QGraphicsObject *child = children.at(ii)->toGraphicsObject(); if (!child) continue; - QDeclarativeItemPrivate *childPrivate = static_cast(QGraphicsItemPrivate::get(child)); + QGraphicsItemPrivate *childPrivate = static_cast(QGraphicsItemPrivate::get(child)); PositionedItem *item = 0; PositionedItem posItem(child); int wIdx = oldItems.find(posItem); @@ -320,7 +324,7 @@ void QDeclarativeBasePositioner::finishApplyTransitions() static inline bool isInvisible(QGraphicsObject *child) { - QDeclarativeItemPrivate *childPrivate = static_cast(QGraphicsItemPrivate::get(child)); + QGraphicsItemPrivate *childPrivate = static_cast(QGraphicsItemPrivate::get(child)); return child->opacity() == 0.0 || childPrivate->explicitlyHidden || !childPrivate->width() || !childPrivate->height(); } diff --git a/tests/auto/declarative/qdeclarativepositioners/tst_qdeclarativepositioners.cpp b/tests/auto/declarative/qdeclarativepositioners/tst_qdeclarativepositioners.cpp index 0663991..887be50 100644 --- a/tests/auto/declarative/qdeclarativepositioners/tst_qdeclarativepositioners.cpp +++ b/tests/auto/declarative/qdeclarativepositioners/tst_qdeclarativepositioners.cpp @@ -46,6 +46,7 @@ #include #include #include +#include #include "../../../shared/util.h" #ifdef Q_OS_SYMBIAN @@ -77,6 +78,7 @@ private slots: void test_flow_resize(); void test_flow_implicit_resize(); void test_conflictinganchors(); + void test_vertical_qgraphicswidget(); private: QDeclarativeView *createView(const QString &filename); }; @@ -771,6 +773,48 @@ void tst_QDeclarativePositioners::test_conflictinganchors() QCOMPARE(warningMessage, QString("file::2:1: QML Flow: Cannot specify anchors for items inside Flow")); } +void tst_QDeclarativePositioners::test_vertical_qgraphicswidget() +{ + QDeclarativeView *canvas = createView(SRCDIR "/data/verticalqgraphicswidget.qml"); + + QGraphicsWidget *one = canvas->rootObject()->findChild("one"); + QVERIFY(one != 0); + + QGraphicsWidget *two = canvas->rootObject()->findChild("two"); + QVERIFY(two != 0); + + QGraphicsWidget *three = canvas->rootObject()->findChild("three"); + QVERIFY(three != 0); + + QCOMPARE(one->x(), 0.0); + QCOMPARE(one->y(), 0.0); + QCOMPARE(two->x(), 0.0); + QCOMPARE(two->y(), 50.0); + QCOMPARE(three->x(), 0.0); + QCOMPARE(three->y(), 60.0); + + QDeclarativeItem *column = canvas->rootObject()->findChild("column"); + QVERIFY(column); + QCOMPARE(column->height(), 80.0); + QCOMPARE(column->width(), 50.0); + + two->resize(QSizeF(two->size().width(), 20.0)); + QCOMPARE(three->x(), 0.0); + QCOMPARE(three->y(), 70.0); + + two->setOpacity(0.0); + QCOMPARE(one->x(), 0.0); + QCOMPARE(one->y(), 0.0); + QCOMPARE(three->x(), 0.0); + QCOMPARE(three->y(), 50.0); + + one->setVisible(false); + QCOMPARE(three->x(), 0.0); + QCOMPARE(three->y(), 0.0); + + delete canvas; +} + QDeclarativeView *tst_QDeclarativePositioners::createView(const QString &filename) { QDeclarativeView *canvas = new QDeclarativeView(0); -- cgit v0.12 From b83c295650b3f28bc9da542acf4652f4ce2d168b Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Mon, 16 Aug 2010 15:38:15 +1000 Subject: Handle QGraphicsWidgets in Flickable Task-number: QTBUG-12830 Reviewed-by: Michael Brasser --- .../graphicsitems/qdeclarativeflickable.cpp | 2 +- .../tst_qdeclarativeflickable.cpp | 37 ++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativeflickable.cpp b/src/declarative/graphicsitems/qdeclarativeflickable.cpp index 19cabdd..9bcadd2 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable.cpp +++ b/src/declarative/graphicsitems/qdeclarativeflickable.cpp @@ -1027,7 +1027,7 @@ void QDeclarativeFlickable::cancelFlick() void QDeclarativeFlickablePrivate::data_append(QDeclarativeListProperty *prop, QObject *o) { - QDeclarativeItem *i = qobject_cast(o); + QGraphicsObject *i = qobject_cast(o); if (i) i->setParentItem(static_cast(prop->data)->contentItem); else diff --git a/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp b/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp index 678996b..e7ded8a 100644 --- a/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp +++ b/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp @@ -44,6 +44,7 @@ #include #include #include +#include #include #ifdef Q_OS_SYMBIAN @@ -67,9 +68,13 @@ private slots: void flickDeceleration(); void pressDelay(); void flickableDirection(); + void qgraphicswidget(); private: QDeclarativeEngine engine; + + template + T *findItem(QGraphicsObject *parent, const QString &objectName); }; tst_qdeclarativeflickable::tst_qdeclarativeflickable() @@ -261,6 +266,38 @@ void tst_qdeclarativeflickable::flickableDirection() QCOMPARE(spy.count(),3); } +void tst_qdeclarativeflickable::qgraphicswidget() +{ + QDeclarativeEngine engine; + QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/flickableqgraphicswidget.qml")); + QDeclarativeFlickable *flickable = qobject_cast(c.create()); + + QVERIFY(flickable != 0); + QGraphicsWidget *widget = findItem(flickable->contentItem(), "widget1"); + QVERIFY(widget); +} + +template +T *tst_qdeclarativeflickable::findItem(QGraphicsObject *parent, const QString &objectName) +{ + const QMetaObject &mo = T::staticMetaObject; + //qDebug() << parent->childItems().count() << "children"; + for (int i = 0; i < parent->childItems().count(); ++i) { + QGraphicsObject *item = qobject_cast(parent->childItems().at(i)); + if(!item) + continue; + //qDebug() << "try" << item; + if (mo.cast(item) && (objectName.isEmpty() || item->objectName() == objectName)) { + return static_cast(item); + } + item = findItem(item, objectName); + if (item) + return static_cast(item); + } + + return 0; +} + QTEST_MAIN(tst_qdeclarativeflickable) #include "tst_qdeclarativeflickable.moc" -- cgit v0.12 From af675cf96d4d13b066a669eae847ad56485927d0 Mon Sep 17 00:00:00 2001 From: mae Date: Mon, 16 Aug 2010 10:11:20 +0200 Subject: Fix game could not be restarted Task-number: QT-3668 --- demos/declarative/snake/content/snake.js | 5 ++++- demos/declarative/snake/snake.qml | 16 +--------------- 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/demos/declarative/snake/content/snake.js b/demos/declarative/snake/content/snake.js index 0f0dbf7..fab7834 100644 --- a/demos/declarative/snake/content/snake.js +++ b/demos/declarative/snake/content/snake.js @@ -35,9 +35,12 @@ function startNewGame() if (heartbeat.running) { endGame(); startNewGameTimer.running = true; + state = "starting"; return; } + state = "starting"; + numRows = numRowsAvailable; numColumns = numColumnsAvailable; board = new Array(numRows * numColumns); @@ -80,7 +83,6 @@ function startNewGame() waitForCookie = 5; score = 0; startHeartbeatTimer.running = true; - heartbeat.running = true; } function endGame() @@ -94,6 +96,7 @@ function endGame() } lastScore = score; highScores.saveScore(lastScore); + state = ""; } function move() { diff --git a/demos/declarative/snake/snake.qml b/demos/declarative/snake/snake.qml index b1344af..ed3bac9 100644 --- a/demos/declarative/snake/snake.qml +++ b/demos/declarative/snake/snake.qml @@ -94,6 +94,7 @@ Rectangle { Timer { id: startHeartbeatTimer; interval: 1000 ; + onTriggered: { state = "running"; heartbeat.running = true; } } @@ -208,21 +209,6 @@ Rectangle { Keys.onUpPressed: if (state == "starting" || direction != 2) Logic.scheduleDirection(0); Keys.onDownPressed: if (state == "starting" || direction != 0) Logic.scheduleDirection(2); - Connections { - target: startHeartbeatTimer - onRunningChanged: { - if (startHeartbeatTimer.running) - screen.state = "starting"; - else - screen.state = "running" - } - } - Connections { - target: heartbeat - onRunningChanged: if (!heartbeat.running) screen.state = ""; - } - - states: [ State { name: "starting" -- cgit v0.12 From aebac76abbc5ed617d5998009afb06f07b9e237f Mon Sep 17 00:00:00 2001 From: Tasuku Suzuki Date: Mon, 16 Aug 2010 12:15:52 +0200 Subject: Fix compilation: QT_NO_LINEEDIT Merge-request: 774 Reviewed-by: Oswald Buddenhagen --- src/gui/util/qcompleter.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/util/qcompleter.cpp b/src/gui/util/qcompleter.cpp index 04d6de9..e718212 100644 --- a/src/gui/util/qcompleter.cpp +++ b/src/gui/util/qcompleter.cpp @@ -921,10 +921,12 @@ void QCompleterPrivate::showPopup(const QRect& rect) void QCompleterPrivate::_q_fileSystemModelDirectoryLoaded(const QString &path) { Q_Q(QCompleter); +#ifndef QT_NO_LINEEDIT QLineEdit *lineEdit = qobject_cast(widget); //the path given by QFileSystemModel does not end with / if (lineEdit && !lineEdit->text().isEmpty() && !q->completionPrefix().isEmpty() && q->completionPrefix() != path + QLatin1Char('/')) q->complete(); +#endif } /*! -- cgit v0.12 From f7a501515fcf1dafecb88a40e18721ea14fd0a13 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Mon, 16 Aug 2010 13:33:16 +0200 Subject: QtDeclarative debugging: Add an option not to stream the properties of an object. Streaming all the properties is too slow, and we do not need them in the debugger of creator. Reviewed-by: Lasse Holmstedt --- src/declarative/debugger/qdeclarativedebug.cpp | 4 ++-- src/declarative/qml/qdeclarativeenginedebug.cpp | 16 ++++++++++++---- src/declarative/qml/qdeclarativeenginedebug_p.h | 2 +- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/declarative/debugger/qdeclarativedebug.cpp b/src/declarative/debugger/qdeclarativedebug.cpp index b950aef..154df51 100644 --- a/src/declarative/debugger/qdeclarativedebug.cpp +++ b/src/declarative/debugger/qdeclarativedebug.cpp @@ -507,7 +507,7 @@ QDeclarativeDebugObjectQuery *QDeclarativeEngineDebug::queryObject(const QDeclar QByteArray message; QDataStream ds(&message, QIODevice::WriteOnly); ds << QByteArray("FETCH_OBJECT") << queryId << object.debugId() - << false; + << false << true; d->client->sendMessage(message); } else { query->m_state = QDeclarativeDebugQuery::Error; @@ -530,7 +530,7 @@ QDeclarativeDebugObjectQuery *QDeclarativeEngineDebug::queryObjectRecursive(cons QByteArray message; QDataStream ds(&message, QIODevice::WriteOnly); ds << QByteArray("FETCH_OBJECT") << queryId << object.debugId() - << true; + << true << true; d->client->sendMessage(message); } else { query->m_state = QDeclarativeDebugQuery::Error; diff --git a/src/declarative/qml/qdeclarativeenginedebug.cpp b/src/declarative/qml/qdeclarativeenginedebug.cpp index 1837366..ed98e3c 100644 --- a/src/declarative/qml/qdeclarativeenginedebug.cpp +++ b/src/declarative/qml/qdeclarativeenginedebug.cpp @@ -182,7 +182,7 @@ QVariant QDeclarativeEngineDebugServer::valueContents(const QVariant &value) con } void QDeclarativeEngineDebugServer::buildObjectDump(QDataStream &message, - QObject *object, bool recur) + QObject *object, bool recur, bool dumpProperties) { message << objectData(object); @@ -209,6 +209,8 @@ void QDeclarativeEngineDebugServer::buildObjectDump(QDataStream &message, continue; QDeclarativeBoundSignal *signal = QDeclarativeBoundSignal::cast(child); if (signal) { + if (!dumpProperties) + continue; QDeclarativeObjectProperty prop; prop.type = QDeclarativeObjectProperty::SignalProperty; prop.hasNotifySignal = false; @@ -229,12 +231,17 @@ void QDeclarativeEngineDebugServer::buildObjectDump(QDataStream &message, fakeProperties << prop; } else { if (recur) - buildObjectDump(message, child, recur); + buildObjectDump(message, child, recur, dumpProperties); else message << objectData(child); } } + if (!dumpProperties) { + message << 0; + return; + } + message << (object->metaObject()->propertyCount() + fakeProperties.count()); for (int ii = 0; ii < object->metaObject()->propertyCount(); ++ii) @@ -372,8 +379,9 @@ void QDeclarativeEngineDebugServer::messageReceived(const QByteArray &message) int queryId; int objectId; bool recurse; + bool dumpProperties = true; - ds >> queryId >> objectId >> recurse; + ds >> queryId >> objectId >> recurse >> dumpProperties; QObject *object = QDeclarativeDebugService::objectForId(objectId); @@ -382,7 +390,7 @@ void QDeclarativeEngineDebugServer::messageReceived(const QByteArray &message) rs << QByteArray("FETCH_OBJECT_R") << queryId; if (object) - buildObjectDump(rs, object, recurse); + buildObjectDump(rs, object, recurse, dumpProperties); sendMessage(reply); } else if (type == "WATCH_OBJECT") { diff --git a/src/declarative/qml/qdeclarativeenginedebug_p.h b/src/declarative/qml/qdeclarativeenginedebug_p.h index ea35b40..aa450f3 100644 --- a/src/declarative/qml/qdeclarativeenginedebug_p.h +++ b/src/declarative/qml/qdeclarativeenginedebug_p.h @@ -103,7 +103,7 @@ private Q_SLOTS: private: void buildObjectList(QDataStream &, QDeclarativeContext *); - void buildObjectDump(QDataStream &, QObject *, bool); + void buildObjectDump(QDataStream &, QObject *, bool, bool); QDeclarativeObjectData objectData(QObject *); QDeclarativeObjectProperty propertyData(QObject *, int); QVariant valueContents(const QVariant &defaultValue) const; -- cgit v0.12 From a9c0fbd5e946ae6e90b6db6dd4aea64c824a4066 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 16 Aug 2010 04:33:03 +0200 Subject: qgrayraster: Speed up rendering of small cubic splines. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Based on these upstream freetype2 commits: 7fb3ef64a24489189113f693696eaf935f500c3f e419f48b40a746465a6c8e1d446b407b8677bfed Reviewed-by: Samuel Rødal --- src/gui/painting/qgrayraster.c | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/src/gui/painting/qgrayraster.c b/src/gui/painting/qgrayraster.c index 5e7c67a..539a33c 100644 --- a/src/gui/painting/qgrayraster.c +++ b/src/gui/painting/qgrayraster.c @@ -956,53 +956,49 @@ const QT_FT_Vector* control2, const QT_FT_Vector* to ) { - TPos dx, dy, da, db; int top, level; int* levels; QT_FT_Vector* arc; + int mid_x = ( DOWNSCALE( ras.x ) + to->x + + 3 * (control1->x + control2->x ) ) / 8; + int mid_y = ( DOWNSCALE( ras.y ) + to->y + + 3 * (control1->y + control2->y ) ) / 8; + TPos dx = DOWNSCALE( ras.x ) + to->x - ( mid_x << 1 ); + TPos dy = DOWNSCALE( ras.y ) + to->y - ( mid_y << 1 ); - dx = DOWNSCALE( ras.x ) + to->x - ( control1->x << 1 ); if ( dx < 0 ) dx = -dx; - dy = DOWNSCALE( ras.y ) + to->y - ( control1->y << 1 ); if ( dy < 0 ) dy = -dy; if ( dx < dy ) dx = dy; - da = dx; - - dx = DOWNSCALE( ras.x ) + to->x - 3 * ( control1->x + control2->x ); - if ( dx < 0 ) - dx = -dx; - dy = DOWNSCALE( ras.y ) + to->y - 3 * ( control1->x + control2->y ); - if ( dy < 0 ) - dy = -dy; - if ( dx < dy ) - dx = dy; - db = dx; level = 1; - da = da / ras.cubic_level; - db = db / ras.conic_level; - while ( da > 0 || db > 0 ) + dx /= ras.cubic_level; + while ( dx > 0 ) { - da >>= 2; - db >>= 3; + dx >>= 2; level++; } if ( level <= 1 ) { - TPos to_x, to_y, mid_x, mid_y; + TPos to_x, to_y; to_x = UPSCALE( to->x ); to_y = UPSCALE( to->y ); + + /* Recalculation of midpoint is needed only if */ + /* UPSCALE and DOWNSCALE have any effect. */ + +#if ( PIXEL_BITS != 6 ) mid_x = ( ras.x + to_x + 3 * UPSCALE( control1->x + control2->x ) ) / 8; mid_y = ( ras.y + to_y + 3 * UPSCALE( control1->y + control2->y ) ) / 8; +#endif gray_render_line( RAS_VAR_ mid_x, mid_y ); gray_render_line( RAS_VAR_ to_x, to_y ); -- cgit v0.12 From 7cfc9f2245162944f3d9a29ad73cd93e2bcf197f Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 16 Aug 2010 16:09:34 +0300 Subject: Fix QProcessManager destruction If QProcessManager destructor is ran as part of global static cleanup, manager thread will most likely be terminated by kernel at that point, so trying to delete QProcessActives and QProcessMediators will panic as they will still be active. They can also no longer be properly canceled as the thread is already gone. In case manager thread has already died, which implies that process exit is imminent, we simply do nothing and let the deletion of the main heap at process exit take care of stray objects. Task-number: QTBUG-11218 Reviewed-by: Janne Koskinen --- src/corelib/io/qprocess_symbian.cpp | 47 ++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/src/corelib/io/qprocess_symbian.cpp b/src/corelib/io/qprocess_symbian.cpp index af657b2..003e781 100644 --- a/src/corelib/io/qprocess_symbian.cpp +++ b/src/corelib/io/qprocess_symbian.cpp @@ -375,10 +375,9 @@ QProcessActive::QProcessActive() // Nothing to do } -// Called from ProcessManagerThread +// Called from main thread QProcessActive::~QProcessActive() { - Cancel(); process = NULL; pproc = NULL; } @@ -482,10 +481,9 @@ QProcessManagerMediator::QProcessManagerMediator() // Nothing to do } -// Called from ProcessManagerThread +// Called from main thread QProcessManagerMediator::~QProcessManagerMediator() { - Cancel(); processManagerThread.Close(); currentCommand = ENoCommand; currentObserver = NULL; @@ -648,25 +646,36 @@ QProcessManager::QProcessManager() QProcessManager::~QProcessManager() { QPROCESS_DEBUG_PRINT("QProcessManager::~QProcessManager()"); - // Cancel death listening for all child processes - if (mediator) { - QMap::Iterator it = children.begin(); - while (it != children.end()) { - // Remove all monitors - QProcessActive *active = it.value(); - mediator->remove(active); - - QPROCESS_DEBUG_PRINT("QProcessManager::~QProcessManager() removed listening for a process"); - ++it; + + // Check if manager thread is still alive. If this destructor is ran as part of global + // static cleanup, manager thread will most likely be terminated by kernel at this point, + // so trying to delete QProcessActives and QProcessMediators will panic as they + // will still be active. They can also no longer be canceled as the thread is already gone. + // In case manager thread has already died, we simply do nothing and let the deletion of + // the main heap at process exit take care of stray objects. + + if (managerThread.Handle() && managerThread.ExitType() == EExitPending) { + // Cancel death listening for all child processes + if (mediator) { + QMap::Iterator it = children.begin(); + while (it != children.end()) { + // Remove all monitors + QProcessActive *active = it.value(); + mediator->remove(active); + + QPROCESS_DEBUG_PRINT("QProcessManager::~QProcessManager() removed listening for a process"); + ++it; + } + + // Terminate process manager thread. + mediator->terminate(); + delete mediator; } - // Terminate process manager thread. - mediator->terminate(); - delete mediator; + qDeleteAll(children.values()); + children.clear(); } - qDeleteAll(children.values()); - children.clear(); managerThread.Close(); managerMutex.Close(); } -- cgit v0.12 From 8f3489c8bfb18246480a489779c2d9b330474c5d Mon Sep 17 00:00:00 2001 From: Martin Smith Date: Mon, 16 Aug 2010 15:59:30 +0200 Subject: qdoc: Reorganized the QML elements table to be a dictionary... ...and a set of functional group pages. --- doc/src/declarative/elements.qdoc | 252 ++++++++++++--------- .../WebKit/qt/declarative/qdeclarativewebview.cpp | 1 + .../graphicsitems/qdeclarativeanimatedimage.cpp | 3 +- .../graphicsitems/qdeclarativeborderimage.cpp | 1 + .../graphicsitems/qdeclarativeevents.cpp | 4 + .../graphicsitems/qdeclarativeflickable.cpp | 2 + .../graphicsitems/qdeclarativeflipable.cpp | 2 + .../graphicsitems/qdeclarativefocuspanel.cpp | 2 + .../graphicsitems/qdeclarativefocusscope.cpp | 2 + .../graphicsitems/qdeclarativegridview.cpp | 2 + .../graphicsitems/qdeclarativeimage.cpp | 2 + src/declarative/graphicsitems/qdeclarativeitem.cpp | 7 + .../graphicsitems/qdeclarativelayoutitem.cpp | 1 + .../graphicsitems/qdeclarativelistview.cpp | 1 + .../graphicsitems/qdeclarativeloader.cpp | 1 + .../graphicsitems/qdeclarativemousearea.cpp | 1 + src/declarative/graphicsitems/qdeclarativepath.cpp | 7 + .../graphicsitems/qdeclarativepathview.cpp | 1 + .../graphicsitems/qdeclarativepositioners.cpp | 4 + .../graphicsitems/qdeclarativerectangle.cpp | 3 + .../graphicsitems/qdeclarativerepeater.cpp | 1 + src/declarative/graphicsitems/qdeclarativetext.cpp | 3 +- .../graphicsitems/qdeclarativetextedit.cpp | 1 + .../graphicsitems/qdeclarativetextinput.cpp | 4 + .../graphicsitems/qdeclarativevisualitemmodel.cpp | 2 + src/declarative/qml/qdeclarativecomponent.cpp | 1 + src/declarative/qml/qdeclarativeengine.cpp | 2 + src/declarative/qml/qdeclarativeworkerscript.cpp | 1 + src/declarative/util/qdeclarativeanimation.cpp | 13 ++ src/declarative/util/qdeclarativebehavior.cpp | 1 + src/declarative/util/qdeclarativebind.cpp | 1 + src/declarative/util/qdeclarativeconnections.cpp | 1 + src/declarative/util/qdeclarativefontloader.cpp | 1 + src/declarative/util/qdeclarativelistmodel.cpp | 4 +- src/declarative/util/qdeclarativepackage.cpp | 1 + .../util/qdeclarativepropertychanges.cpp | 1 + .../util/qdeclarativesmoothedanimation.cpp | 1 + .../util/qdeclarativespringanimation.cpp | 1 + src/declarative/util/qdeclarativestate.cpp | 1 + src/declarative/util/qdeclarativestategroup.cpp | 1 + .../util/qdeclarativestateoperations.cpp | 3 + src/declarative/util/qdeclarativesystempalette.cpp | 1 + src/declarative/util/qdeclarativetimer.cpp | 1 + src/declarative/util/qdeclarativetransition.cpp | 1 + src/declarative/util/qdeclarativexmllistmodel.cpp | 2 + .../qdeclarativefolderlistmodel.cpp | 1 + src/imports/gestures/qdeclarativegesturearea.cpp | 2 + src/imports/particles/qdeclarativeparticles.cpp | 4 + tools/qdoc3/ditaxmlgenerator.cpp | 10 + tools/qdoc3/htmlgenerator.cpp | 10 + tools/qdoc3/htmlgenerator.h | 1 + 51 files changed, 267 insertions(+), 110 deletions(-) diff --git a/doc/src/declarative/elements.qdoc b/doc/src/declarative/elements.qdoc index c008404..94abe10 100644 --- a/doc/src/declarative/elements.qdoc +++ b/doc/src/declarative/elements.qdoc @@ -26,113 +26,151 @@ ****************************************************************************/ /*! -\page qdeclarativeelements.html -\target elements -\title QML Elements - -The following table lists the QML elements provided by the \l {QtDeclarative}{Qt Declarative} module. - -\table -\header \o {2,1} \bold {Basic Visual Items} -\row \o \l {Item} \o Basic item element inherited by all visual items in QML -\row \o \l {Rectangle} \o Basic visual rectangle element -\row \o \l {Gradient} \o Defines a gradient between two or more colors -\row \o \l {GradientStop} \o Defines a color used in a \l {Gradient} -\row \o \l {Image} \o Allows the use of bitmaps to a scene -\row \o \l {BorderImage} (Item-specific) \o Defines an image as a border -\row \o \l {AnimatedImage} \o For playing animations stored as a series of frames -\row \o \l {Text} \o Allows the use of formatted text in a scene -\row \o \l {TextInput} \o Displays an editable line of text -\row \o \l {IntValidator} \o Validator for integer values -\row \o \l {DoubleValidator} \o Validator for non-integer values -\row \o \l {RegExpValidator} \o Validator for string regular expressions -\row \o \l {TextEdit} \o Displays multiple lines of editable formatted text - -\header \o {2,1} \bold {Basic Interaction Items} -\row \o \l {MouseArea} \o Handles mouse interactions -\row \o \l {FocusScope} \o For keyboard focus handling -\row \o \l {Flickable} \o Provides a surface that can be "flicked" -\row \o \l {Flipable} \o Provides a surface that produces flipping effects -\row \o \l {GestureArea} (experimental) \o Enables simple gesture handling - -\header \o {2,1} \bold {States} -\row \o \l {State} \o Defines sets of configurations of objects and properties -\row \o \l {PropertyChanges} \o Describes property changes within a state -\row \o \l {StateGroup} \o Contains a set of states and state transitions -\row \o \l {StateChangeScript} \o Allows script binding in a state -\row \o \l {ParentChange} (Item-specific) \o Re-parent an Item in a state change -\row \o \l {AnchorChanges} \o Change the anchors of an item in a state - -\header \o {2,1} \bold {Animation and Transitions} -\row \o \l {Behavior} \o Specifies a default animation for property changes -\row \o \l {SequentialAnimation} \o Runs animations sequentially -\row \o \l {ParallelAnimation} \o Runs animations in parallel -\row \o \l {PropertyAnimation} \o Animates property changes -\row \o \l {NumberAnimation} \o Animates properties of type qreal -\row \o \l {Vector3dAnimation} \o Animates properties of type QVector3d -\row \o \l {ColorAnimation} \o Animates color changes -\row \o \l {RotationAnimation} \o Animates rotations -\row \o \l {ParentAnimation} \o Animates parent changes -\row \o \l {AnchorAnimation} \o Animates anchor changes -\row \o \l {PauseAnimation} \o Pauses an animation -\row \o \l {SmoothedAnimation} \o Allows a property to smoothly track a value -\row \o \l {SpringAnimation} \o Allows a property to track a value in a spring-like motion -\row \o \l {PropertyAction} \o Sets immediate property changes during animation -\row \o \l {ScriptAction} \o Runs scripts during an animation -\row \o \l {Transition} \o Animates transitions during state changes - -\header \o {2,1} \bold {Working with Data} -\row \o \l {Binding} \o Binds any value to any property -\row \o \l {ListModel} \o Defines a list of data -\row \o \l {ListElement} \o Defines a data item in a \l {ListModel} -\row \o \l {VisualItemModel} \o Contains items that already defines its own visual delegate -\row \o \l {VisualDataModel} \o Encapsulates a model and a delegate -\row \o \l {Package} \o Collection that enables sharing of items within different views -\row \o \l {XmlListModel} \o Specifies a model using XPath expressions -\row \o \l {XmlRole} \o Specifies a role for an \l {XmlListModel} - -\header \o {2,1} \bold {Views} -\row \o \l {ListView} \o Provides a list visualization of a model -\row \o \l {GridView} \o Provides a grid visualization of a model -\row \o \l {PathView} \o Visualizes a model's contents along a path -\row \o \l {Path} \o Defines a path used by \l {PathView} -\row \o \l {PathLine} \o Defines a line in \l {Path} -\row \o \l {PathQuad} \o Defines a quadratic Bezier curve in a \l {Path} -\row \o \l {PathCubic} \o Defines a cubic Bezier curve in a \l {Path} -\row \o \l {PathAttribute} \o Allows the setting of attributes along a \l {Path} -\row \o \l {PathPercent} \o Modifies the item distribution along a \l {Path} -\row \o \l {WebView} \o Allows the addition of web content to a canvas - -\header \o {2,1} \bold {Positioners} -\row \o \l {Column} \o Arranges its children vertically -\row \o \l {Row} \o Arranges its children horizontally -\row \o \l {Grid} \o Positions its children in a grid -\row \o \l {Flow} \o Positions its children with wrapping support - -\header \o {2,1} \bold {Utility} -\row \o \l {Connections} \o Explicitly connects signals and signal handlers -\row \o \l {Component} \o Encapsulate QML items as a component -\row \o \l {Timer} \o Provides timed triggers -\row \o \l {QML:QtObject} {QtObject} \o Basic element containing only the objectName property -\row \o \l {QML:Qt} {Qt} \o The QML global Qt object provides useful enums and functions from Qt. -\row \o \l {WorkerScript} \o Enables the use of threads in QML -\row \o \l {Loader} \o Controls the loading of items or components -\row \o \l {Repeater} \o Uses a model to create multiples of components -\row \o \l {SystemPalette} \o Provides access to the Qt palettes -\row \o \l {FontLoader} \o Loads fonts by name or URL -\row \o \l {LayoutItem} \o Allows declarative UI elements inside Qt's Graphics View layouts - -\header \o {2,1} \bold {Transforms} -\row \o \l {Scale} \o Assigns item scaling behaviors -\row \o \l {Rotation} \o Assigns item rotation behaviors -\row \o \l {Translate} \o Assigns item translation behaviors - -\header \o {2,1} \bold {Effects} -\row \o \l {Particles} (experimental) \o Generates and animates particles -\row \o \l {ParticleMotionLinear} \o Adds linear motion behavior to \l {Particles} -\row \o \l {ParticleMotionGravity} \o Adds gravitational motion to \l {Particles} -\row \o \l {ParticleMotionWander} \o Adds varied motions to \l {Particles} -\endtable + \page qdeclarativeelements.html + \target elements + \title QML Elements + This is a dictionary of all the QML elements available in the \l + {QtDeclarative} {Qt Declarative} module. + + To see the QML elements listed by + functional area, \l{Groups Of Related QML Elements} {look here}. + + \generatelist qmlclasses + +*/ + + +/*! + \group qml-groups + \title Groups Of Related QML Elements + + \brief If you know what kind of QML element you want (Basic Visual, + Interaction, Animation, etc), look here. + + This is a list of functional groups of QML elements. + + \generatelist{related} + +*/ + +/*! + \group qml-basic-visual-elements + \title Basic QML Visual Elements + \ingroup qml-groups + + \brief Elements for constructing basic visual items. + + \generatelist{related} + +*/ + +/*! + \group qml-basic-interaction-elements + \title Basic QML Interaction Elements + \ingroup qml-groups + + \brief Elements for handling basic interactions. + + \generatelist{related} + +*/ + +/*! + \group qml-state-elements + \title QML State Elements + \ingroup qml-groups + + \brief Elements for handling state changes. + + \generatelist{related} + +*/ + +/*! + \group qml-event-elements + \title QML Event Elements + \ingroup qml-groups + + \brief Elements for handling events. + + \generatelist{related} + +*/ + +/*! + \group qml-animation-transition + \title QML Animation and Transition Elements + \ingroup qml-groups + + \brief Elements for handling animations and transitions. + + \generatelist{related} + +*/ + +/*! + \group qml-working-with-data + \title Working With Data in QML + \ingroup qml-groups + + \brief Elements for working with data. + + \generatelist{related} + +*/ + +/*! + \group qml-view-elements + \title QML View Elements + \ingroup qml-groups + + \brief Elements for handling views. + + \generatelist{related} + +*/ + +/*! + \group qml-positioning-elements + \title QML Positioning Elements + \ingroup qml-groups + + \brief Elements for positioning items. + + \generatelist{related} + +*/ + +/*! + \group qml-utility-elements + \title QML Utility Elements + \ingroup qml-groups + + \brief Elements for handling misc operations. + + \generatelist{related} + +*/ + +/*! + \group qml-transform-elements + \title QML Transform Elements + \ingroup qml-groups + + \brief Elements for handling transformations. + + \generatelist{related} + +*/ + +/*! + \group qml-particle-elements + \title QML Particle Elements + \ingroup qml-groups + + \brief Elements for handling particle effects. + + \generatelist{related} */ diff --git a/src/3rdparty/webkit/WebKit/qt/declarative/qdeclarativewebview.cpp b/src/3rdparty/webkit/WebKit/qt/declarative/qdeclarativewebview.cpp index 9dcba60..c1ca23d 100644 --- a/src/3rdparty/webkit/WebKit/qt/declarative/qdeclarativewebview.cpp +++ b/src/3rdparty/webkit/WebKit/qt/declarative/qdeclarativewebview.cpp @@ -139,6 +139,7 @@ void GraphicsWebView::mouseMoveEvent(QGraphicsSceneMouseEvent* event) /*! \qmlclass WebView QDeclarativeWebView + \ingroup qml-view-elements \since 4.7 \brief The WebView item allows you to add web content to a canvas. \inherits Item diff --git a/src/declarative/graphicsitems/qdeclarativeanimatedimage.cpp b/src/declarative/graphicsitems/qdeclarativeanimatedimage.cpp index d8527d3..e0a2149 100644 --- a/src/declarative/graphicsitems/qdeclarativeanimatedimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeanimatedimage.cpp @@ -62,7 +62,8 @@ QT_BEGIN_NAMESPACE \qmlclass AnimatedImage QDeclarativeAnimatedImage \inherits Image \since 4.7 - + \ingroup basic-visual-elements + The AnimatedImage element provides for playing animations stored as images containing a series of frames, such as GIF files. diff --git a/src/declarative/graphicsitems/qdeclarativeborderimage.cpp b/src/declarative/graphicsitems/qdeclarativeborderimage.cpp index 4881248..e0c7fc2 100644 --- a/src/declarative/graphicsitems/qdeclarativeborderimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeborderimage.cpp @@ -56,6 +56,7 @@ QT_BEGIN_NAMESPACE \brief The BorderImage element provides an image that can be used as a border. \inherits Item \since 4.7 + \ingroup qm-basic-visual-elements A BorderImage breaks an image into 9 sections, as shown below: diff --git a/src/declarative/graphicsitems/qdeclarativeevents.cpp b/src/declarative/graphicsitems/qdeclarativeevents.cpp index 81ec6e1..0a35a3f 100644 --- a/src/declarative/graphicsitems/qdeclarativeevents.cpp +++ b/src/declarative/graphicsitems/qdeclarativeevents.cpp @@ -45,6 +45,8 @@ QT_BEGIN_NAMESPACE /*! \qmlclass KeyEvent QDeclarativeKeyEvent \since 4.7 + \ingroup qml-event-elements + \brief The KeyEvent object provides information about a key event. For example, the following changes the Item's state property when the Enter @@ -115,6 +117,8 @@ Item { /*! \qmlclass MouseEvent QDeclarativeMouseEvent \since 4.7 + \ingroup qml-event-elements + \brief The MouseEvent object provides information about a mouse event. The position of the mouse can be found via the x and y properties. diff --git a/src/declarative/graphicsitems/qdeclarativeflickable.cpp b/src/declarative/graphicsitems/qdeclarativeflickable.cpp index 19cabdd..31f7707 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable.cpp +++ b/src/declarative/graphicsitems/qdeclarativeflickable.cpp @@ -345,6 +345,8 @@ void QDeclarativeFlickablePrivate::updateBeginningEnd() /*! \qmlclass Flickable QDeclarativeFlickable \since 4.7 + \ingroup qml-basic-interaction-elements + \brief The Flickable item provides a surface that can be "flicked". \inherits Item diff --git a/src/declarative/graphicsitems/qdeclarativeflipable.cpp b/src/declarative/graphicsitems/qdeclarativeflipable.cpp index b266273..6ce0fa6 100644 --- a/src/declarative/graphicsitems/qdeclarativeflipable.cpp +++ b/src/declarative/graphicsitems/qdeclarativeflipable.cpp @@ -70,6 +70,8 @@ public: /*! \qmlclass Flipable QDeclarativeFlipable \since 4.7 + \ingroup qml-basic-interaction-elements + \brief The Flipable item provides a surface that can be flipped. \inherits Item diff --git a/src/declarative/graphicsitems/qdeclarativefocuspanel.cpp b/src/declarative/graphicsitems/qdeclarativefocuspanel.cpp index bd60e25..5c7959a 100644 --- a/src/declarative/graphicsitems/qdeclarativefocuspanel.cpp +++ b/src/declarative/graphicsitems/qdeclarativefocuspanel.cpp @@ -51,6 +51,8 @@ QT_BEGIN_NAMESPACE /*! \qmlclass FocusPanel QDeclarativeFocusPanel \since 4.7 + \ingroup qml-basic-interaction-elements + \brief The FocusPanel item explicitly creates a focus panel. \inherits Item diff --git a/src/declarative/graphicsitems/qdeclarativefocusscope.cpp b/src/declarative/graphicsitems/qdeclarativefocusscope.cpp index e8e6fa2..4498275 100644 --- a/src/declarative/graphicsitems/qdeclarativefocusscope.cpp +++ b/src/declarative/graphicsitems/qdeclarativefocusscope.cpp @@ -48,6 +48,8 @@ QT_BEGIN_NAMESPACE /*! \qmlclass FocusScope QDeclarativeFocusScope \since 4.7 + \ingroup qml-basic-interaction-elements + \brief The FocusScope object explicitly creates a focus scope. \inherits Item diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index 68a4c64..d67e69a 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -1056,6 +1056,8 @@ void QDeclarativeGridViewPrivate::flick(AxisData &data, qreal minExtent, qreal m /*! \qmlclass GridView QDeclarativeGridView \since 4.7 + \ingroup qml-view-elements + \inherits Flickable \brief The GridView item provides a grid view of items provided by a model. diff --git a/src/declarative/graphicsitems/qdeclarativeimage.cpp b/src/declarative/graphicsitems/qdeclarativeimage.cpp index 37736cc..47a410c 100644 --- a/src/declarative/graphicsitems/qdeclarativeimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeimage.cpp @@ -51,6 +51,8 @@ QT_BEGIN_NAMESPACE /*! \qmlclass Image QDeclarativeImage \since 4.7 + \ingroup qml-vasic-visual-elements + \brief The Image element allows you to add bitmaps to a scene. \inherits Item diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index cc7c673..0f16a79 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -69,6 +69,7 @@ QT_BEGIN_NAMESPACE /*! \qmlclass Transform QGraphicsTransform + \ingroup qml-transform-elements \since 4.7 \brief The Transform elements provide a way of building advanced transformations on Items. @@ -90,6 +91,7 @@ QT_BEGIN_NAMESPACE /*! \qmlclass Translate QDeclarativeTranslate + \ingroup qml-transform-elements \since 4.7 \brief The Translate object provides a way to move an Item without changing its x or y properties. @@ -131,6 +133,7 @@ QT_BEGIN_NAMESPACE /*! \qmlclass Scale QGraphicsScale + \ingroup qml-transform-elements \since 4.7 \brief The Scale element provides a way to scale an Item. @@ -172,6 +175,7 @@ QT_BEGIN_NAMESPACE /*! \qmlclass Rotation QGraphicsRotation + \ingroup qml-transform-elements \since 4.7 \brief The Rotation object provides a way to rotate an Item. @@ -419,6 +423,7 @@ void QDeclarativeItemKeyFilter::componentComplete() /*! \qmlclass KeyNavigation QDeclarativeKeyNavigationAttached + \ingroup qml-basic-interaction-elements \since 4.7 \brief The KeyNavigation attached property supports key navigation by arrow keys. @@ -725,6 +730,7 @@ void QDeclarativeKeyNavigationAttached::keyReleased(QKeyEvent *event, bool post) /*! \qmlclass Keys QDeclarativeKeysAttached + \ingroup qml-basic-interaction-elements \since 4.7 \brief The Keys attached property provides key handling to Items. @@ -1310,6 +1316,7 @@ QDeclarativeKeysAttached *QDeclarativeKeysAttached::qmlAttachedProperties(QObjec /*! \qmlclass Item QDeclarativeItem + \ingroup qml-basic-visual-elements \since 4.7 \brief The Item is the most basic of all visual items in QML. diff --git a/src/declarative/graphicsitems/qdeclarativelayoutitem.cpp b/src/declarative/graphicsitems/qdeclarativelayoutitem.cpp index 38d5f59..8509473 100644 --- a/src/declarative/graphicsitems/qdeclarativelayoutitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativelayoutitem.cpp @@ -49,6 +49,7 @@ QT_BEGIN_NAMESPACE /*! \qmlclass LayoutItem QDeclarativeLayoutItem + \ingroup qml-utility-elements \since 4.7 \brief The LayoutItem element allows declarative UI elements to be placed inside Qt's Graphics View layouts. diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index e1dd1c0..ec1b6cf 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -1357,6 +1357,7 @@ void QDeclarativeListViewPrivate::flick(AxisData &data, qreal minExtent, qreal m /*! \qmlclass ListView QDeclarativeListView + \ingroup qml-view-elements \since 4.7 \inherits Flickable \brief The ListView item provides a list view of items provided by a model. diff --git a/src/declarative/graphicsitems/qdeclarativeloader.cpp b/src/declarative/graphicsitems/qdeclarativeloader.cpp index d28181e..4c6268f 100644 --- a/src/declarative/graphicsitems/qdeclarativeloader.cpp +++ b/src/declarative/graphicsitems/qdeclarativeloader.cpp @@ -108,6 +108,7 @@ void QDeclarativeLoaderPrivate::initResize() /*! \qmlclass Loader QDeclarativeLoader + \ingroup qml-utility-elements \since 4.7 \inherits Item diff --git a/src/declarative/graphicsitems/qdeclarativemousearea.cpp b/src/declarative/graphicsitems/qdeclarativemousearea.cpp index dcdb9f6..2823888 100644 --- a/src/declarative/graphicsitems/qdeclarativemousearea.cpp +++ b/src/declarative/graphicsitems/qdeclarativemousearea.cpp @@ -180,6 +180,7 @@ QDeclarativeMouseAreaPrivate::~QDeclarativeMouseAreaPrivate() /*! \qmlclass MouseArea QDeclarativeMouseArea + \ingroup qml-basic-interaction-elements \since 4.7 \brief The MouseArea item enables simple mouse handling. \inherits Item diff --git a/src/declarative/graphicsitems/qdeclarativepath.cpp b/src/declarative/graphicsitems/qdeclarativepath.cpp index c48011d3..62e03e7 100644 --- a/src/declarative/graphicsitems/qdeclarativepath.cpp +++ b/src/declarative/graphicsitems/qdeclarativepath.cpp @@ -51,6 +51,7 @@ QT_BEGIN_NAMESPACE /*! \qmlclass PathElement QDeclarativePathElement + \ingroup qml-view-elements \since 4.7 \brief PathElement is the base path type. @@ -67,6 +68,7 @@ QT_BEGIN_NAMESPACE /*! \qmlclass Path QDeclarativePath + \ingroup qml-view-elements \since 4.7 \brief A Path object defines a path for use by \l PathView. @@ -497,6 +499,7 @@ void QDeclarativeCurve::setY(qreal y) /*! \qmlclass PathAttribute QDeclarativePathAttribute + \ingroup qml-view-elements \since 4.7 \brief The PathAttribute allows setting an attribute at a given position in a Path. @@ -587,6 +590,7 @@ void QDeclarativePathAttribute::setValue(qreal value) /*! \qmlclass PathLine QDeclarativePathLine + \ingroup qml-view-elements \since 4.7 \brief The PathLine defines a straight line. @@ -627,6 +631,7 @@ void QDeclarativePathLine::addToPath(QPainterPath &path) /*! \qmlclass PathQuad QDeclarativePathQuad + \ingroup qml-view-elements \since 4.7 \brief The PathQuad defines a quadratic Bezier curve with a control point. @@ -713,6 +718,7 @@ void QDeclarativePathQuad::addToPath(QPainterPath &path) /*! \qmlclass PathCubic QDeclarativePathCubic + \ingroup qml-view-elements \since 4.7 \brief The PathCubic defines a cubic Bezier curve with two control points. @@ -828,6 +834,7 @@ void QDeclarativePathCubic::addToPath(QPainterPath &path) /*! \qmlclass PathPercent QDeclarativePathPercent + \ingroup qml-view-elements \since 4.7 \brief The PathPercent manipulates the way a path is interpreted. diff --git a/src/declarative/graphicsitems/qdeclarativepathview.cpp b/src/declarative/graphicsitems/qdeclarativepathview.cpp index 380c6ad..535fb90 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview.cpp +++ b/src/declarative/graphicsitems/qdeclarativepathview.cpp @@ -326,6 +326,7 @@ void QDeclarativePathViewPrivate::regenerate() /*! \qmlclass PathView QDeclarativePathView + \ingroup qml-view-elements \since 4.7 \brief The PathView element lays out model-provided items on a path. \inherits Item diff --git a/src/declarative/graphicsitems/qdeclarativepositioners.cpp b/src/declarative/graphicsitems/qdeclarativepositioners.cpp index 179f13d..5c21b03 100644 --- a/src/declarative/graphicsitems/qdeclarativepositioners.cpp +++ b/src/declarative/graphicsitems/qdeclarativepositioners.cpp @@ -310,6 +310,7 @@ static inline bool isInvisible(QDeclarativeItem *child) /*! \qmlclass Column QDeclarativeColumn + \ingroup qml-positioning-elements \since 4.7 \brief The Column item arranges its children vertically. \inherits Item @@ -475,6 +476,7 @@ void QDeclarativeColumn::reportConflictingAnchors() /*! \qmlclass Row QDeclarativeRow + \ingroup qml-positioning-elements \since 4.7 \brief The Row item arranges its children horizontally. \inherits Item @@ -613,6 +615,7 @@ void QDeclarativeRow::reportConflictingAnchors() /*! \qmlclass Grid QDeclarativeGrid + \ingroup qml-positioning-elements \since 4.7 \brief The Grid item positions its children in a grid. \inherits Item @@ -905,6 +908,7 @@ void QDeclarativeGrid::reportConflictingAnchors() /*! \qmlclass Flow QDeclarativeFlow + \ingroup qml-positioning-elements \since 4.7 \brief The Flow item arranges its children side by side, wrapping as necessary. \inherits Item diff --git a/src/declarative/graphicsitems/qdeclarativerectangle.cpp b/src/declarative/graphicsitems/qdeclarativerectangle.cpp index c49be46..5990c2d 100644 --- a/src/declarative/graphicsitems/qdeclarativerectangle.cpp +++ b/src/declarative/graphicsitems/qdeclarativerectangle.cpp @@ -84,6 +84,7 @@ void QDeclarativePen::setWidth(int w) /*! \qmlclass GradientStop QDeclarativeGradientStop + \ingroup qml-basic-visual-elements \since 4.7 \brief The GradientStop item defines the color at a position in a Gradient @@ -105,6 +106,7 @@ void QDeclarativeGradientStop::updateGradient() /*! \qmlclass Gradient QDeclarativeGradient + \ingroup qml-basic-visual-elements \since 4.7 \brief The Gradient item defines a gradient fill. @@ -152,6 +154,7 @@ void QDeclarativeGradient::doUpdate() /*! \qmlclass Rectangle QDeclarativeRectangle + \ingroup qml-basic-visual-elements \since 4.7 \brief The Rectangle item allows you to add rectangles to a scene. \inherits Item diff --git a/src/declarative/graphicsitems/qdeclarativerepeater.cpp b/src/declarative/graphicsitems/qdeclarativerepeater.cpp index 68e7e9a..8828d3e 100644 --- a/src/declarative/graphicsitems/qdeclarativerepeater.cpp +++ b/src/declarative/graphicsitems/qdeclarativerepeater.cpp @@ -62,6 +62,7 @@ QDeclarativeRepeaterPrivate::~QDeclarativeRepeaterPrivate() /*! \qmlclass Repeater QDeclarativeRepeater + \ingroup qml-utility-elements \since 4.7 \inherits Item diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index ab2be9c..fcd112e 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -162,7 +162,8 @@ QSet QTextDocumentWithImageResources::errors; /*! \qmlclass Text QDeclarativeText - \since 4.7 + \ingroup qml-basic-visual-elements + \since 4.7 \brief The Text item allows you to add formatted text to a scene. \inherits Item diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index 8117676..b8e8726 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -61,6 +61,7 @@ QT_BEGIN_NAMESPACE /*! \qmlclass TextEdit QDeclarativeTextEdit + \ingroup qml-basic-visual-elements \since 4.7 \brief The TextEdit item displays multiple lines of editable formatted text. \inherits Item diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index 90f5a70..bd8d404 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -57,6 +57,7 @@ QT_BEGIN_NAMESPACE /*! \qmlclass TextInput QDeclarativeTextInput + \ingroup qml-basic-visual-elements \since 4.7 \brief The TextInput item displays an editable line of text. \inherits Item @@ -561,6 +562,7 @@ void QDeclarativeTextInput::setAutoScroll(bool b) /*! \qmlclass IntValidator QIntValidator + \ingroup qml-basic-visual-elements This element provides a validator for integer values. */ @@ -579,6 +581,7 @@ void QDeclarativeTextInput::setAutoScroll(bool b) /*! \qmlclass DoubleValidator QDoubleValidator + \ingroup qml-basic-visual-elements This element provides a validator for non-integer numbers. */ @@ -617,6 +620,7 @@ void QDeclarativeTextInput::setAutoScroll(bool b) /*! \qmlclass RegExpValidator QRegExpValidator + \ingroup qml-basic-visual-elements This element provides a validator, which counts as valid any string which matches a specified regular expression. diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp index a489b5a..764676a 100644 --- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp +++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp @@ -128,6 +128,7 @@ public: /*! \qmlclass VisualItemModel QDeclarativeVisualItemModel + \ingroup qml-working-with-data \since 4.7 \brief The VisualItemModel allows items to be provided to a view. @@ -644,6 +645,7 @@ QDeclarativeVisualDataModelData *QDeclarativeVisualDataModelPrivate::data(QObjec /*! \qmlclass VisualDataModel QDeclarativeVisualDataModel + \ingroup qml-working-with-data \brief The VisualDataModel encapsulates a model and delegate A VisualDataModel encapsulates a model and the delegate that will diff --git a/src/declarative/qml/qdeclarativecomponent.cpp b/src/declarative/qml/qdeclarativecomponent.cpp index 5f4a063..73689fc 100644 --- a/src/declarative/qml/qdeclarativecomponent.cpp +++ b/src/declarative/qml/qdeclarativecomponent.cpp @@ -104,6 +104,7 @@ class QByteArray; /*! \qmlclass Component QDeclarativeComponent + \ingroup qml-utility-elements \since 4.7 \brief The Component element encapsulates a QML component definition. diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index de79e4d..1061c03 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -114,6 +114,7 @@ QT_BEGIN_NAMESPACE /*! \qmlclass QtObject QObject + \ingroup qml-utility-elements \since 4.7 \brief The QtObject element is the most basic element in QML. @@ -185,6 +186,7 @@ void QDeclarativeEnginePrivate::defineModule() /*! \qmlclass QML:Qt QDeclarativeEnginePrivate + \ingroup qml-utility-elements \brief The QML global Qt object provides useful enums and functions from Qt. \keyword QmlGlobalQtObject diff --git a/src/declarative/qml/qdeclarativeworkerscript.cpp b/src/declarative/qml/qdeclarativeworkerscript.cpp index aec84a6..789116e 100644 --- a/src/declarative/qml/qdeclarativeworkerscript.cpp +++ b/src/declarative/qml/qdeclarativeworkerscript.cpp @@ -514,6 +514,7 @@ void QDeclarativeWorkerScriptEngine::run() /*! \qmlclass WorkerScript QDeclarativeWorkerScript + \ingroup qml-utility-elements \brief The WorkerScript element enables the use of threads in QML. Use WorkerScript to run operations in a new thread. diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp index 2fca09d..3b8cb37 100644 --- a/src/declarative/util/qdeclarativeanimation.cpp +++ b/src/declarative/util/qdeclarativeanimation.cpp @@ -74,6 +74,7 @@ QT_BEGIN_NAMESPACE /*! \qmlclass Animation QDeclarativeAbstractAnimation + \ingroup qml-animation-transition \since 4.7 \brief The Animation element is the base of all QML animations. @@ -554,6 +555,7 @@ void QDeclarativeAbstractAnimation::timelineComplete() /*! \qmlclass PauseAnimation QDeclarativePauseAnimation + \ingroup qml-animation-transition \since 4.7 \inherits Animation \brief The PauseAnimation element provides a pause for an animation. @@ -630,6 +632,7 @@ QAbstractAnimation *QDeclarativePauseAnimation::qtAnimation() /*! \qmlclass ColorAnimation QDeclarativeColorAnimation + \ingroup qml-animation-transition \since 4.7 \inherits PropertyAnimation \brief The ColorAnimation element animates changes in color values. @@ -730,6 +733,7 @@ void QDeclarativeColorAnimation::setTo(const QColor &t) /*! \qmlclass ScriptAction QDeclarativeScriptAction + \ingroup qml-animation-transition \since 4.7 \inherits Animation \brief The ScriptAction element allows scripts to be run during an animation. @@ -878,6 +882,7 @@ QAbstractAnimation *QDeclarativeScriptAction::qtAnimation() /*! \qmlclass PropertyAction QDeclarativePropertyAction + \ingroup qml-animation-transition \since 4.7 \inherits Animation \brief The PropertyAction element allows immediate property changes during animation. @@ -1129,6 +1134,7 @@ void QDeclarativePropertyAction::transition(QDeclarativeStateActions &actions, /*! \qmlclass NumberAnimation QDeclarativeNumberAnimation + \ingroup qml-animation-transition \since 4.7 \inherits PropertyAnimation \brief The NumberAnimation element animates changes in qreal-type values. @@ -1238,6 +1244,7 @@ void QDeclarativeNumberAnimation::setTo(qreal t) /*! \qmlclass Vector3dAnimation QDeclarativeVector3dAnimation + \ingroup qml-animation-transition \since 4.7 \inherits PropertyAnimation \brief The Vector3dAnimation element animates changes in QVector3d values. @@ -1311,6 +1318,7 @@ void QDeclarativeVector3dAnimation::setTo(QVector3D t) /*! \qmlclass RotationAnimation QDeclarativeRotationAnimation + \ingroup qml-animation-transition \since 4.7 \inherits PropertyAnimation \brief The RotationAnimation element animates changes in rotation values. @@ -1540,6 +1548,7 @@ QDeclarativeListProperty QDeclarativeAnimationGro /*! \qmlclass SequentialAnimation QDeclarativeSequentialAnimation + \ingroup qml-animation-transition \since 4.7 \inherits Animation \brief The SequentialAnimation element allows animations to be run sequentially. @@ -1613,6 +1622,7 @@ void QDeclarativeSequentialAnimation::transition(QDeclarativeStateActions &actio /*! \qmlclass ParallelAnimation QDeclarativeParallelAnimation + \ingroup qml-animation-transition \since 4.7 \inherits Animation \brief The ParallelAnimation element allows animations to be run in parallel. @@ -1731,6 +1741,7 @@ void QDeclarativePropertyAnimationPrivate::convertVariant(QVariant &variant, int /*! \qmlclass PropertyAnimation QDeclarativePropertyAnimation + \ingroup qml-animation-transition \since 4.7 \inherits Animation \brief The PropertyAnimation element animates changes in property values. @@ -2400,6 +2411,7 @@ void QDeclarativePropertyAnimation::transition(QDeclarativeStateActions &actions /*! \qmlclass ParentAnimation QDeclarativeParentAnimation + \ingroup qml-animation-transition \since 4.7 \inherits Animation \brief The ParentAnimation element animates changes in parent values. @@ -2759,6 +2771,7 @@ QAbstractAnimation *QDeclarativeParentAnimation::qtAnimation() /*! \qmlclass AnchorAnimation QDeclarativeAnchorAnimation + \ingroup qml-animation-transition \since 4.7 \inherits Animation \brief The AnchorAnimation element animates changes in anchor values. diff --git a/src/declarative/util/qdeclarativebehavior.cpp b/src/declarative/util/qdeclarativebehavior.cpp index 1e7f81a..f1b6f9a 100644 --- a/src/declarative/util/qdeclarativebehavior.cpp +++ b/src/declarative/util/qdeclarativebehavior.cpp @@ -72,6 +72,7 @@ public: /*! \qmlclass Behavior QDeclarativeBehavior + \ingroup qml-animation-transition \since 4.7 \brief The Behavior element allows you to specify a default animation for a property change. diff --git a/src/declarative/util/qdeclarativebind.cpp b/src/declarative/util/qdeclarativebind.cpp index 5fab631..86d08f5 100644 --- a/src/declarative/util/qdeclarativebind.cpp +++ b/src/declarative/util/qdeclarativebind.cpp @@ -72,6 +72,7 @@ public: /*! \qmlclass Binding QDeclarativeBind + \ingroup qml-working-with-data \since 4.7 \brief The Binding element allows arbitrary property bindings to be created. diff --git a/src/declarative/util/qdeclarativeconnections.cpp b/src/declarative/util/qdeclarativeconnections.cpp index b364821..293928e 100644 --- a/src/declarative/util/qdeclarativeconnections.cpp +++ b/src/declarative/util/qdeclarativeconnections.cpp @@ -71,6 +71,7 @@ public: /*! \qmlclass Connections QDeclarativeConnections + \ingroup qml-utility-elements \since 4.7 \brief A Connections element describes generalized connections to signals. diff --git a/src/declarative/util/qdeclarativefontloader.cpp b/src/declarative/util/qdeclarativefontloader.cpp index 83bdb17..291583c 100644 --- a/src/declarative/util/qdeclarativefontloader.cpp +++ b/src/declarative/util/qdeclarativefontloader.cpp @@ -78,6 +78,7 @@ public: /*! \qmlclass FontLoader QDeclarativeFontLoader + \ingroup qml-utility-elements \since 4.7 \brief The FontLoader element allows fonts to be loaded by name or URL. diff --git a/src/declarative/util/qdeclarativelistmodel.cpp b/src/declarative/util/qdeclarativelistmodel.cpp index 20fe3a9..1f66f0f 100644 --- a/src/declarative/util/qdeclarativelistmodel.cpp +++ b/src/declarative/util/qdeclarativelistmodel.cpp @@ -68,6 +68,7 @@ QDeclarativeListModelParser::ListInstruction *QDeclarativeListModelParser::ListM /*! \qmlclass ListModel QDeclarativeListModel + \ingroup qml-working-with-data \since 4.7 \brief The ListModel element defines a free-form list data source. @@ -129,7 +130,7 @@ QDeclarativeListModelParser::ListInstruction *QDeclarativeListModelParser::ListM \snippet examples/declarative/threading/threadedlistmodel/dataloader.js 0 - The application's \tt Timer object periodically sends a message to the +working-with-data worker script by calling \l WorkerScript::sendMessage(). When this message is received, \l {WorkerScript::onMessage}{WorkerScript.onMessage()} is invoked in \tt dataloader.js, which appends the current time to the list model. @@ -769,6 +770,7 @@ bool QDeclarativeListModelParser::definesEmptyList(const QString &s) /*! \qmlclass ListElement + \ingroup qml-working-with-data \since 4.7 \brief The ListElement element defines a data item in a ListModel. diff --git a/src/declarative/util/qdeclarativepackage.cpp b/src/declarative/util/qdeclarativepackage.cpp index 1a4f2a7..a5ec9b3 100644 --- a/src/declarative/util/qdeclarativepackage.cpp +++ b/src/declarative/util/qdeclarativepackage.cpp @@ -48,6 +48,7 @@ QT_BEGIN_NAMESPACE /*! \qmlclass Package QDeclarativePackage + \ingroup qml-working-with-data \brief Package provides a collection of named items. The Package class is used in conjunction with diff --git a/src/declarative/util/qdeclarativepropertychanges.cpp b/src/declarative/util/qdeclarativepropertychanges.cpp index 12c6353..25edd35 100644 --- a/src/declarative/util/qdeclarativepropertychanges.cpp +++ b/src/declarative/util/qdeclarativepropertychanges.cpp @@ -61,6 +61,7 @@ QT_BEGIN_NAMESPACE /*! \qmlclass PropertyChanges QDeclarativePropertyChanges + \ingroup qml-state-elements \since 4.7 \brief The PropertyChanges element describes new property bindings or values for a state. diff --git a/src/declarative/util/qdeclarativesmoothedanimation.cpp b/src/declarative/util/qdeclarativesmoothedanimation.cpp index 30e1491..b2f02e6 100644 --- a/src/declarative/util/qdeclarativesmoothedanimation.cpp +++ b/src/declarative/util/qdeclarativesmoothedanimation.cpp @@ -249,6 +249,7 @@ void QSmoothedAnimation::init() /*! \qmlclass SmoothedAnimation QDeclarativeSmoothedAnimation + \ingroup qml-animation-transition \since 4.7 \inherits NumberAnimation \brief The SmoothedAnimation element allows a property to smoothly track a value. diff --git a/src/declarative/util/qdeclarativespringanimation.cpp b/src/declarative/util/qdeclarativespringanimation.cpp index 6f4ac51..fce4097 100644 --- a/src/declarative/util/qdeclarativespringanimation.cpp +++ b/src/declarative/util/qdeclarativespringanimation.cpp @@ -228,6 +228,7 @@ void QDeclarativeSpringAnimationPrivate::updateMode() /*! \qmlclass SpringAnimation QDeclarativeSpringAnimation + \ingroup qml-animation-transition \inherits Animation \since 4.7 diff --git a/src/declarative/util/qdeclarativestate.cpp b/src/declarative/util/qdeclarativestate.cpp index 028bacb..6e17cf2 100644 --- a/src/declarative/util/qdeclarativestate.cpp +++ b/src/declarative/util/qdeclarativestate.cpp @@ -133,6 +133,7 @@ QDeclarativeStateOperation::QDeclarativeStateOperation(QObjectPrivate &dd, QObje /*! \qmlclass State QDeclarativeState + \ingroup qml-state-elements \since 4.7 \brief The State element defines configurations of objects and properties. diff --git a/src/declarative/util/qdeclarativestategroup.cpp b/src/declarative/util/qdeclarativestategroup.cpp index 1c1e964..fc90baa 100644 --- a/src/declarative/util/qdeclarativestategroup.cpp +++ b/src/declarative/util/qdeclarativestategroup.cpp @@ -88,6 +88,7 @@ public: /*! \qmlclass StateGroup QDeclarativeStateGroup + \ingroup qml-state-elements \since 4.7 \brief The StateGroup element provides state support for non-Item elements. diff --git a/src/declarative/util/qdeclarativestateoperations.cpp b/src/declarative/util/qdeclarativestateoperations.cpp index 2291c16..6e6f0cb 100644 --- a/src/declarative/util/qdeclarativestateoperations.cpp +++ b/src/declarative/util/qdeclarativestateoperations.cpp @@ -161,6 +161,7 @@ void QDeclarativeParentChangePrivate::doChange(QDeclarativeItem *targetParent, Q /*! \preliminary \qmlclass ParentChange QDeclarativeParentChange + \ingroup qml-state-elements \brief The ParentChange element allows you to reparent an Item in a state change. ParentChange reparents an item while preserving its visual appearance (position, size, @@ -589,6 +590,7 @@ public: /*! \qmlclass StateChangeScript QDeclarativeStateChangeScript + \ingroup qml-state-elements \brief The StateChangeScript element allows you to run a script in a state. A StateChangeScript is run upon entering a state. You can optionally use @@ -693,6 +695,7 @@ QString QDeclarativeStateChangeScript::typeName() const /*! \qmlclass AnchorChanges QDeclarativeAnchorChanges + \ingroup qml-state-elements \brief The AnchorChanges element allows you to change the anchors of an item in a state. The AnchorChanges element is used to modify the anchors of an item in a \l State. diff --git a/src/declarative/util/qdeclarativesystempalette.cpp b/src/declarative/util/qdeclarativesystempalette.cpp index c334859..7b80736 100644 --- a/src/declarative/util/qdeclarativesystempalette.cpp +++ b/src/declarative/util/qdeclarativesystempalette.cpp @@ -58,6 +58,7 @@ public: /*! \qmlclass SystemPalette QDeclarativeSystemPalette + \ingroup qml-utility-elements \since 4.7 \brief The SystemPalette element provides access to the Qt palettes. diff --git a/src/declarative/util/qdeclarativetimer.cpp b/src/declarative/util/qdeclarativetimer.cpp index 838a8f3..56320e6 100644 --- a/src/declarative/util/qdeclarativetimer.cpp +++ b/src/declarative/util/qdeclarativetimer.cpp @@ -70,6 +70,7 @@ public: /*! \qmlclass Timer QDeclarativeTimer + \ingroup qml-utility-elements \since 4.7 \brief The Timer item triggers a handler at a specified interval. diff --git a/src/declarative/util/qdeclarativetransition.cpp b/src/declarative/util/qdeclarativetransition.cpp index aa1426c..21d7ded 100644 --- a/src/declarative/util/qdeclarativetransition.cpp +++ b/src/declarative/util/qdeclarativetransition.cpp @@ -53,6 +53,7 @@ QT_BEGIN_NAMESPACE /*! \qmlclass Transition QDeclarativeTransition + \ingroup qml-animation-transition \since 4.7 \brief The Transition element defines animated transitions that occur on state changes. diff --git a/src/declarative/util/qdeclarativexmllistmodel.cpp b/src/declarative/util/qdeclarativexmllistmodel.cpp index 8bd829e..7b3d4a8 100644 --- a/src/declarative/util/qdeclarativexmllistmodel.cpp +++ b/src/declarative/util/qdeclarativexmllistmodel.cpp @@ -72,6 +72,7 @@ typedef QPair QDeclarativeXmlListRange; /*! \qmlclass XmlRole QDeclarativeXmlListModelRole + \ingroup qml-working-with-data \since 4.7 \brief The XmlRole element allows you to specify a role for an XmlListModel. @@ -505,6 +506,7 @@ void QDeclarativeXmlListModelPrivate::clear_role(QDeclarativeListPropertyroot()); findAllFunctions(tree->root()); findAllLegaleseTexts(tree->root()); @@ -751,6 +752,9 @@ int DitaXmlGenerator::generateAtom(const Atom *atom, else if (atom->string() == "classes") { generateCompactList(relative, marker, nonCompatClasses, true); } + else if (atom->string() == "qmlclasses") { + generateCompactList(relative, marker, qmlClasses, true); + } else if (atom->string().contains("classesbymodule")) { QString arg = atom->string().trimmed(); QString moduleName = atom->string().mid(atom->string().indexOf( @@ -3675,6 +3679,12 @@ void DitaXmlGenerator::findAllClasses(const InnerNode *node) if (!serviceName.isEmpty()) serviceClasses.insert(serviceName, *c); } + else if ((*c)->type() == Node::Fake && + (*c)->subType() == Node::QmlClass && + !(*c)->doc().isEmpty()) { + QString qmlClassName = (*c)->name(); + qmlClasses.insert(qmlClassName,*c); + } else if ((*c)->isInnerNode()) { findAllClasses(static_cast(*c)); } diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index 4603a40..50f8b56 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -376,6 +376,7 @@ void HtmlGenerator::generateTree(const Tree *tree, CodeMarker *marker) funcIndex.clear(); legaleseTexts.clear(); serviceClasses.clear(); + qmlClasses.clear(); findAllClasses(tree->root()); findAllFunctions(tree->root()); findAllLegaleseTexts(tree->root()); @@ -611,6 +612,9 @@ int HtmlGenerator::generateAtom(const Atom *atom, else if (atom->string() == "classes") { generateCompactList(relative, marker, nonCompatClasses, true); } + else if (atom->string() == "qmlclasses") { + generateCompactList(relative, marker, qmlClasses, true); + } else if (atom->string().contains("classesbymodule")) { QString arg = atom->string().trimmed(); QString moduleName = atom->string().mid(atom->string().indexOf( @@ -3707,6 +3711,12 @@ void HtmlGenerator::findAllClasses(const InnerNode *node) if (!serviceName.isEmpty()) serviceClasses.insert(serviceName, *c); } + else if ((*c)->type() == Node::Fake && + (*c)->subType() == Node::QmlClass && + !(*c)->doc().isEmpty()) { + QString qmlClassName = (*c)->name(); + qmlClasses.insert(qmlClassName,*c); + } else if ((*c)->isInnerNode()) { findAllClasses(static_cast(*c)); } diff --git a/tools/qdoc3/htmlgenerator.h b/tools/qdoc3/htmlgenerator.h index eab10c6..d885ada 100644 --- a/tools/qdoc3/htmlgenerator.h +++ b/tools/qdoc3/htmlgenerator.h @@ -330,6 +330,7 @@ class HtmlGenerator : public PageGenerator NodeMap obsoleteClasses; NodeMap namespaceIndex; NodeMap serviceClasses; + NodeMap qmlClasses; QMap funcIndex; QMap legaleseTexts; NewSinceMaps newSinceMaps; -- cgit v0.12 From 0fb9e0fff4097bf0b84ff217526b0a9c33b69414 Mon Sep 17 00:00:00 2001 From: Benjamin Poulain Date: Fri, 13 Aug 2010 20:57:07 +0200 Subject: Implement the general blending of ARGB32_pm with SSSE3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SSSE3 provides two tools to improve the blending speed over SSE2: -palignr -byte permutation The alignement is enforced on src and dst with palignr to always make aligned access. The extraction of the alpha mask is done with a byte permutation in order to save two instructions per cycle. On Atom, this patch gives between 0% (aligned src) to 10% of improvement (unaligned 4 and 12 bytes). On Core 2, this patch gives consistently 8% to 10% of improvement for every miss-alignment. Reviewed-by: Samuel Rødal --- src/gui/painting/painting.pri | 1 + src/gui/painting/qdrawhelper.cpp | 11 ++ src/gui/painting/qdrawhelper_ssse3.cpp | 263 +++++++++++++++++++++++++ tests/benchmarks/gui/image/blendbench/main.cpp | 43 ++++ 4 files changed, 318 insertions(+) create mode 100644 src/gui/painting/qdrawhelper_ssse3.cpp diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri index dfa4a48..793d380 100644 --- a/src/gui/painting/painting.pri +++ b/src/gui/painting/painting.pri @@ -212,6 +212,7 @@ if(mmx|3dnow|sse|sse2|iwmmxt) { SSE3DNOW_SOURCES += painting/qdrawhelper_sse3dnow.cpp SSE_SOURCES += painting/qdrawhelper_sse.cpp SSE2_SOURCES += painting/qdrawhelper_sse2.cpp + SSSE3_SOURCES += painting/qdrawhelper_ssse3.cpp IWMMXT_SOURCES += painting/qdrawhelper_iwmmxt.cpp } diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp index 1ff3d7b..276da93 100644 --- a/src/gui/painting/qdrawhelper.cpp +++ b/src/gui/painting/qdrawhelper.cpp @@ -7840,6 +7840,17 @@ void qInitDrawhelperAsm() qBlendFunctions[QImage::Format_ARGB32_Premultiplied][QImage::Format_RGB32] = qt_blend_rgb32_on_rgb32_sse2; qBlendFunctions[QImage::Format_RGB32][QImage::Format_ARGB32_Premultiplied] = qt_blend_argb32_on_argb32_sse2; qBlendFunctions[QImage::Format_ARGB32_Premultiplied][QImage::Format_ARGB32_Premultiplied] = qt_blend_argb32_on_argb32_sse2; + +#if defined(QT_HAVE_SSSE3) + if (features & SSSE3) { + extern void qt_blend_argb32_on_argb32_ssse3(uchar *destPixels, int dbpl, + const uchar *srcPixels, int sbpl, + int w, int h, + int const_alpha); + qBlendFunctions[QImage::Format_RGB32][QImage::Format_ARGB32_Premultiplied] = qt_blend_argb32_on_argb32_ssse3; + qBlendFunctions[QImage::Format_ARGB32_Premultiplied][QImage::Format_ARGB32_Premultiplied] = qt_blend_argb32_on_argb32_ssse3; + } +#endif // QT_HAVE_SSSE3 } else #endif { diff --git a/src/gui/painting/qdrawhelper_ssse3.cpp b/src/gui/painting/qdrawhelper_ssse3.cpp new file mode 100644 index 0000000..bc4a7eb8 --- /dev/null +++ b/src/gui/painting/qdrawhelper_ssse3.cpp @@ -0,0 +1,263 @@ +/**************************************************************************** +** +** 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 QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#ifdef QT_HAVE_SSSE3 + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +inline static void blend_pixel(quint32 &dst, const quint32 src) +{ + if (src >= 0xff000000) + dst = src; + else if (src != 0) + dst = src + BYTE_MUL(dst, qAlpha(~src)); +} + + +/* The instruction palignr uses direct arguments, so we have to generate the code fo the different + shift (4, 8, 12). Checking the alignment inside the loop is unfortunatelly way too slow. + */ +#define BLENDING_LOOP(palignrOffset, length)\ + for (; x < length-3; x += 4) { \ + const __m128i srcVectorLastLoaded = _mm_load_si128((__m128i *)&src[x - minusOffsetToAlignSrcOn16Bytes + 4]);\ + const __m128i srcVector = _mm_alignr_epi8(srcVectorLastLoaded, srcVectorPrevLoaded, palignrOffset); \ + const __m128i srcVectorAlpha = _mm_and_si128(srcVector, alphaMask); \ + if (_mm_movemask_epi8(_mm_cmpeq_epi32(srcVectorAlpha, alphaMask)) == 0xffff) { \ + _mm_store_si128((__m128i *)&dst[x], srcVector); \ + } else if (_mm_movemask_epi8(_mm_cmpeq_epi32(srcVectorAlpha, nullVector)) != 0xffff) { \ + __m128i alphaChannel = _mm_shuffle_epi8(srcVector, alphaShuffleMask); \ + alphaChannel = _mm_sub_epi16(one, alphaChannel); \ + const __m128i dstVector = _mm_load_si128((__m128i *)&dst[x]); \ + __m128i destMultipliedByOneMinusAlpha; \ + BYTE_MUL_SSE2(destMultipliedByOneMinusAlpha, dstVector, alphaChannel, colorMask, half); \ + const __m128i result = _mm_add_epi8(srcVector, destMultipliedByOneMinusAlpha); \ + _mm_store_si128((__m128i *)&dst[x], result); \ + } \ + srcVectorPrevLoaded = srcVectorLastLoaded;\ + } + + +#define BLEND_SOURCE_OVER_ARGB32_FIRST_ROW_SSSE3(dst, src, length, nullVector, half, one, colorMask, alphaMask) { \ + int x = 0; \ +\ + /* First, get dst aligned. */ \ + const int offsetToAlignOn16Bytes = (4 - ((reinterpret_cast(dst) >> 2) & 0x3)) & 0x3;\ + const int prologLength = qMin(length, offsetToAlignOn16Bytes);\ +\ + for (; x < prologLength; ++x) {\ + blend_pixel(dst[x], src[x]); \ + } \ +\ + const int minusOffsetToAlignSrcOn16Bytes = (reinterpret_cast(&(src[x])) >> 2) & 0x3;\ +\ + if (!minusOffsetToAlignSrcOn16Bytes) {\ + /* src is aligned, usual algorithm but with aligned operations.\ + See the SSE2 version for more documentation on the algorithm itself. */\ + const __m128i alphaShuffleMask = _mm_set_epi8(0xff,15,0xff,15,0xff,11,0xff,11,0xff,7,0xff,7,0xff,3,0xff,3);\ + for (; x < length-3; x += 4) { \ + const __m128i srcVector = _mm_load_si128((__m128i *)&src[x]); \ + const __m128i srcVectorAlpha = _mm_and_si128(srcVector, alphaMask); \ + if (_mm_movemask_epi8(_mm_cmpeq_epi32(srcVectorAlpha, alphaMask)) == 0xffff) { \ + _mm_store_si128((__m128i *)&dst[x], srcVector); \ + } else if (_mm_movemask_epi8(_mm_cmpeq_epi32(srcVectorAlpha, nullVector)) != 0xffff) { \ + __m128i alphaChannel = _mm_shuffle_epi8(srcVector, alphaShuffleMask); \ + alphaChannel = _mm_sub_epi16(one, alphaChannel); \ + const __m128i dstVector = _mm_load_si128((__m128i *)&dst[x]); \ + __m128i destMultipliedByOneMinusAlpha; \ + BYTE_MUL_SSE2(destMultipliedByOneMinusAlpha, dstVector, alphaChannel, colorMask, half); \ + const __m128i result = _mm_add_epi8(srcVector, destMultipliedByOneMinusAlpha); \ + _mm_store_si128((__m128i *)&dst[x], result); \ + } \ + } /* end for() */\ + } else if ((length - x) >= 8) {\ + /* We are at the first line, so "x - minusOffsetToAlignSrcOn16Bytes" could go before src, and\ + generate an invalid access. */\ +\ + /* We use two vectors to extract the src: prevLoaded for the first pixels, lastLoaded for the current pixels. */\ + __m128i srcVectorPrevLoaded;\ + if (minusOffsetToAlignSrcOn16Bytes <= prologLength) {\ + srcVectorPrevLoaded = _mm_load_si128((__m128i *)&src[x - minusOffsetToAlignSrcOn16Bytes]);\ + } else {\ + quint32 temp[4] Q_DECL_ALIGN(16);\ + switch (prologLength) {\ + case 3:\ + temp[1] = src[x - 3];\ + case 2:\ + temp[2] = src[x - 2];\ + case 1:\ + temp[3] = src[x - 1];\ + default:\ + break;\ + }\ + srcVectorPrevLoaded = _mm_load_si128((__m128i *)temp);\ + }\ + const int palignrOffset = minusOffsetToAlignSrcOn16Bytes << 2;\ +\ + const __m128i alphaShuffleMask = _mm_set_epi8(0xff,15,0xff,15,0xff,11,0xff,11,0xff,7,0xff,7,0xff,3,0xff,3);\ + switch (palignrOffset) {\ + case 4:\ + BLENDING_LOOP(4, length)\ + break;\ + case 8:\ + BLENDING_LOOP(8, length)\ + break;\ + case 12:\ + BLENDING_LOOP(12, length)\ + break;\ + }\ + }\ + for (; x < length; ++x) \ + blend_pixel(dst[x], src[x]); \ +} + +// Basically blend src over dst with the const alpha defined as constAlphaVector. +// nullVector, half, one, colorMask are constant accross the whole image/texture, and should be defined as: +//const __m128i nullVector = _mm_set1_epi32(0); +//const __m128i half = _mm_set1_epi16(0x80); +//const __m128i one = _mm_set1_epi16(0xff); +//const __m128i colorMask = _mm_set1_epi32(0x00ff00ff); +//const __m128i alphaMask = _mm_set1_epi32(0xff000000); +// +// The computation being done is: +// result = s + d * (1-alpha) +// with shortcuts if fully opaque or fully transparent. +#define BLEND_SOURCE_OVER_ARGB32_MAIN_SSSE3(dst, src, length, nullVector, half, one, colorMask, alphaMask) { \ + int x = 0; \ +\ + /* First, get dst aligned. */ \ + ALIGNMENT_PROLOGUE_16BYTES(dst, x, length) { \ + blend_pixel(dst[x], src[x]); \ + } \ +\ + const int minusOffsetToAlignSrcOn16Bytes = (reinterpret_cast(&(src[x])) >> 2) & 0x3;\ +\ + if (!minusOffsetToAlignSrcOn16Bytes) {\ + /* src is aligned, usual algorithm but with aligned operations.\ + See the SSE2 version for more documentation on the algorithm itself. */\ + const __m128i alphaShuffleMask = _mm_set_epi8(0xff,15,0xff,15,0xff,11,0xff,11,0xff,7,0xff,7,0xff,3,0xff,3);\ + for (; x < length-3; x += 4) { \ + const __m128i srcVector = _mm_load_si128((__m128i *)&src[x]); \ + const __m128i srcVectorAlpha = _mm_and_si128(srcVector, alphaMask); \ + if (_mm_movemask_epi8(_mm_cmpeq_epi32(srcVectorAlpha, alphaMask)) == 0xffff) { \ + _mm_store_si128((__m128i *)&dst[x], srcVector); \ + } else if (_mm_movemask_epi8(_mm_cmpeq_epi32(srcVectorAlpha, nullVector)) != 0xffff) { \ + __m128i alphaChannel = _mm_shuffle_epi8(srcVector, alphaShuffleMask); \ + alphaChannel = _mm_sub_epi16(one, alphaChannel); \ + const __m128i dstVector = _mm_load_si128((__m128i *)&dst[x]); \ + __m128i destMultipliedByOneMinusAlpha; \ + BYTE_MUL_SSE2(destMultipliedByOneMinusAlpha, dstVector, alphaChannel, colorMask, half); \ + const __m128i result = _mm_add_epi8(srcVector, destMultipliedByOneMinusAlpha); \ + _mm_store_si128((__m128i *)&dst[x], result); \ + } \ + } /* end for() */\ + } else if ((length - x) >= 8) {\ + /* We use two vectors to extract the src: prevLoaded for the first pixels, lastLoaded for the current pixels. */\ + __m128i srcVectorPrevLoaded = _mm_load_si128((__m128i *)&src[x - minusOffsetToAlignSrcOn16Bytes]);\ + const int palignrOffset = minusOffsetToAlignSrcOn16Bytes << 2;\ +\ + const __m128i alphaShuffleMask = _mm_set_epi8(0xff,15,0xff,15,0xff,11,0xff,11,0xff,7,0xff,7,0xff,3,0xff,3);\ + switch (palignrOffset) {\ + case 4:\ + BLENDING_LOOP(4, length)\ + break;\ + case 8:\ + BLENDING_LOOP(8, length)\ + break;\ + case 12:\ + BLENDING_LOOP(12, length)\ + break;\ + }\ + }\ + for (; x < length; ++x) \ + blend_pixel(dst[x], src[x]); \ +} + +void qt_blend_argb32_on_argb32_ssse3(uchar *destPixels, int dbpl, + const uchar *srcPixels, int sbpl, + int w, int h, + int const_alpha) +{ + const quint32 *src = (const quint32 *) srcPixels; + quint32 *dst = (quint32 *) destPixels; + if (const_alpha == 256) { + const __m128i alphaMask = _mm_set1_epi32(0xff000000); + const __m128i nullVector = _mm_setzero_si128(); + const __m128i half = _mm_set1_epi16(0x80); + const __m128i one = _mm_set1_epi16(0xff); + const __m128i colorMask = _mm_set1_epi32(0x00ff00ff); + + // We have to unrol the first row in order to deal with the load on unaligned data + // prior to the src pointer. + BLEND_SOURCE_OVER_ARGB32_FIRST_ROW_SSSE3(dst, src, w, nullVector, half, one, colorMask, alphaMask); + dst = (quint32 *)(((uchar *) dst) + dbpl); + src = (const quint32 *)(((const uchar *) src) + sbpl); + + for (int y = 1; y < h; ++y) { + BLEND_SOURCE_OVER_ARGB32_MAIN_SSSE3(dst, src, w, nullVector, half, one, colorMask, alphaMask); + dst = (quint32 *)(((uchar *) dst) + dbpl); + src = (const quint32 *)(((const uchar *) src) + sbpl); + } + } else if (const_alpha != 0) { + // dest = (s + d * sia) * ca + d * cia + // = s * ca + d * (sia * ca + cia) + // = s * ca + d * (1 - sa*ca) + const_alpha = (const_alpha * 255) >> 8; + const __m128i nullVector = _mm_setzero_si128(); + const __m128i half = _mm_set1_epi16(0x80); + const __m128i one = _mm_set1_epi16(0xff); + const __m128i colorMask = _mm_set1_epi32(0x00ff00ff); + const __m128i constAlphaVector = _mm_set1_epi16(const_alpha); + for (int y = 0; y < h; ++y) { + BLEND_SOURCE_OVER_ARGB32_WITH_CONST_ALPHA_SSE2(dst, src, w, nullVector, half, one, colorMask, constAlphaVector) + dst = (quint32 *)(((uchar *) dst) + dbpl); + src = (const quint32 *)(((const uchar *) src) + sbpl); + } + } +} + +QT_END_NAMESPACE + +#endif // QT_HAVE_SSSE3 diff --git a/tests/benchmarks/gui/image/blendbench/main.cpp b/tests/benchmarks/gui/image/blendbench/main.cpp index f53654b..d420d6c 100644 --- a/tests/benchmarks/gui/image/blendbench/main.cpp +++ b/tests/benchmarks/gui/image/blendbench/main.cpp @@ -106,6 +106,9 @@ private slots: void blendBenchAlpha_data(); void blendBenchAlpha(); + + void unalignedBlendArgb32_data(); + void unalignedBlendArgb32(); }; void BlendBench::blendBench_data() @@ -179,6 +182,46 @@ void BlendBench::blendBenchAlpha() } } +void BlendBench::unalignedBlendArgb32_data() +{ + // The performance of blending can depend of the alignment of the data + // on 16 bytes. Some SIMD instruction set have significantly better + // memory access when the memory is aligned on 16 bytes boundary. + + // offset in 32 bits words + QTest::addColumn("offset"); + QTest::newRow("aligned on 16 bytes") << 0; + QTest::newRow("unaligned by 4 bytes") << 1; + QTest::newRow("unaligned by 8 bytes") << 2; + QTest::newRow("unaligned by 12 bytes") << 3; +} + +void BlendBench::unalignedBlendArgb32() +{ + const int dimension = 1024; + + // We use dst aligned by design. We don't want to test all the combination of alignemnt for src and dst. + // Moreover, it make sense for us to align dst in the implementation because it is accessed more often. + uchar *dstMemory = static_cast(qMallocAligned((dimension * dimension * sizeof(quint32)), 16)); + QImage destination(dstMemory, dimension, dimension, QImage::Format_ARGB32_Premultiplied); + destination.fill(0x12345678); // avoid special cases of alpha + + uchar *srcMemory = static_cast(qMallocAligned((dimension * dimension * sizeof(quint32)) + 16, 16)); + QFETCH(int, offset); + srcMemory += (offset * sizeof(quint32)); + + QImage src(srcMemory, dimension, dimension, QImage::Format_ARGB32_Premultiplied); + src.fill(0x87654321); + + QPainter painter(&destination); + QBENCHMARK { + painter.drawImage(QPoint(), src); + } + + qFreeAligned(srcMemory); + qFreeAligned(dstMemory); +} + QTEST_MAIN(BlendBench) #include "main.moc" -- cgit v0.12 From 34eb6cb58629c58b819d4c82b582106513da03bd Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Mon, 16 Aug 2010 17:35:17 +0200 Subject: diagramscene example: fix leak and crashes. In MainWindow::deleteItem, if there is arrow selected, we need to clean up the items from this arrow. We need to delete them first so there is no arrow in the list anymore when we calls removeArrows (which before, deleted arrow that were possibly in the list, resulting in crashes) Also avoid leak by giving parents to objects that needs it, and destroying items. Reviewed-by: Geir Vattekar Task-number: QTBUG-12753 Merge-request: 775 Reviewed-by: Liang Qi --- doc/src/examples/diagramscene.qdoc | 3 ++- examples/graphicsview/diagramscene/mainwindow.cpp | 29 ++++++++++++++++------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/doc/src/examples/diagramscene.qdoc b/doc/src/examples/diagramscene.qdoc index f4d6b0d..7c643c2 100644 --- a/doc/src/examples/diagramscene.qdoc +++ b/doc/src/examples/diagramscene.qdoc @@ -265,7 +265,8 @@ \snippet examples/graphicsview/diagramscene/mainwindow.cpp 3 - This slot deletes the selected item, if any, from the scene. If + This slot deletes the selected item, if any, from the scene. It + deletes the arrows first in order to avoid to delete them twice. If the item to be deleted is a \c DiagramItem, we also need to delete arrows connected to it; we don't want arrows in the scene that aren't connected to items in both ends. diff --git a/examples/graphicsview/diagramscene/mainwindow.cpp b/examples/graphicsview/diagramscene/mainwindow.cpp index f09c552..7d82df0 100644 --- a/examples/graphicsview/diagramscene/mainwindow.cpp +++ b/examples/graphicsview/diagramscene/mainwindow.cpp @@ -45,6 +45,7 @@ #include "diagramitem.h" #include "diagramscene.h" #include "diagramtextitem.h" +#include "arrow.h" const int InsertTextButton = 10; @@ -55,7 +56,7 @@ MainWindow::MainWindow() createToolBox(); createMenus(); - scene = new DiagramScene(itemMenu); + scene = new DiagramScene(itemMenu, this); scene->setSceneRect(QRectF(0, 0, 5000, 5000)); connect(scene, SIGNAL(itemInserted(DiagramItem*)), this, SLOT(itemInserted(DiagramItem*))); @@ -123,11 +124,22 @@ void MainWindow::buttonGroupClicked(int id) void MainWindow::deleteItem() { foreach (QGraphicsItem *item, scene->selectedItems()) { - if (item->type() == DiagramItem::Type) { - qgraphicsitem_cast(item)->removeArrows(); + if (item->type() == Arrow::Type) { + scene->removeItem(item); + Arrow *arrow = qgraphicsitem_cast(item); + arrow->startItem()->removeArrow(arrow); + arrow->endItem()->removeArrow(arrow); + delete item; } - scene->removeItem(item); } + + foreach (QGraphicsItem *item, scene->selectedItems()) { + if (item->type() == DiagramItem::Type) { + qgraphicsitem_cast(item)->removeArrows(); + } + scene->removeItem(item); + delete item; + } } //! [3] @@ -313,7 +325,7 @@ void MainWindow::about() //! [21] void MainWindow::createToolBox() { - buttonGroup = new QButtonGroup; + buttonGroup = new QButtonGroup(this); buttonGroup->setExclusive(false); connect(buttonGroup, SIGNAL(buttonClicked(int)), this, SLOT(buttonGroupClicked(int))); @@ -345,7 +357,7 @@ void MainWindow::createToolBox() QWidget *itemWidget = new QWidget; itemWidget->setLayout(layout); - backgroundButtonGroup = new QButtonGroup; + backgroundButtonGroup = new QButtonGroup(this); connect(backgroundButtonGroup, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(backgroundButtonGroupClicked(QAbstractButton*))); @@ -460,7 +472,6 @@ void MainWindow::createToolbars() editToolBar->addAction(sendBackAction); fontCombo = new QFontComboBox(); - fontSizeCombo = new QComboBox(); connect(fontCombo, SIGNAL(currentFontChanged(QFont)), this, SLOT(currentFontChanged(QFont))); @@ -526,7 +537,7 @@ void MainWindow::createToolbars() linePointerButton->setCheckable(true); linePointerButton->setIcon(QIcon(":/images/linepointer.png")); - pointerTypeGroup = new QButtonGroup; + pointerTypeGroup = new QButtonGroup(this); pointerTypeGroup->addButton(pointerButton, int(DiagramScene::MoveItem)); pointerTypeGroup->addButton(linePointerButton, int(DiagramScene::InsertLine)); @@ -605,7 +616,7 @@ QMenu *MainWindow::createColorMenu(const char *slot, QColor defaultColor) names << tr("black") << tr("white") << tr("red") << tr("blue") << tr("yellow"); - QMenu *colorMenu = new QMenu; + QMenu *colorMenu = new QMenu(this); for (int i = 0; i < colors.count(); ++i) { QAction *action = new QAction(names.at(i), this); action->setData(colors.at(i)); -- cgit v0.12 From 5b47a913473802d377ec303b425eb1ad0496f843 Mon Sep 17 00:00:00 2001 From: Liang Qi Date: Mon, 16 Aug 2010 17:35:19 +0200 Subject: Translate bughowto.qdoc into zh_CN. Merge-request: 775 Reviewed-by: Liang Qi --- doc/src/zh_CN/bughowto.qdoc | 53 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 doc/src/zh_CN/bughowto.qdoc diff --git a/doc/src/zh_CN/bughowto.qdoc b/doc/src/zh_CN/bughowto.qdoc new file mode 100644 index 0000000..05c8403 --- /dev/null +++ b/doc/src/zh_CN/bughowto.qdoc @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** 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 documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial Usage +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in a +** written agreement between you and Nokia. +** +** GNU Free Documentation License +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of this +** file. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page bughowto.html + \title 如何报告 Bug + \brief 关于报告 Qt 中 bug 方法的信息。 + + 如果您认为您已经发现了 Qt 的一个 bug,我们非常高兴听到这个消息,因为在此之后我们可以修复它。 + + 在报告 bug 之前,请检查 Qt 网站中的 \l{FAQs}{FAQ}、\l{Platform Notes}{平台备注}和 \l{Qt Bug Tracker}{Qt Bug 跟踪器}确认这个问题是否已知。 + + 如果您还没有 \l{Qt Bug Tracker}{Qt Bug 跟踪器}的帐号,您要做的第一件事情就是注册一个。一旦您完成了这一步,您就可以提交并且跟踪您的 bug 报告,而且在您提交之后,公众就可以看到它们。 + + 请在您的 bug 报告中包含以下信息: + + \list 1 + \o 您的编译器的名称和版本号 + \o 您的操作系统的名称和版本号 + \o 您所使用的 Qt 的版本号,以及它在被编译的时候所使用的配置选项 + \o 关于如何重复这个问题的可靠并且清晰的描述 + \endlist + + 如果可能,请提供一个使用 QtTest 模块编写的测试程序,因为这样做可以加快我们重现您的这个问题的进程,并且可以让开发人员更有效率的确认这个问题。 + + 另外,如果您的问题只是在运行时可见,请尽量创建一个可以运行并且显示这个问题的小测试程序。通常,您可以在众多 Qt 实例中选择一个进行少量修改就可以实现这一目的。 + + 如果您已经实现了一个 bug 修复并且希望直接贡献这个修复,那么您需要通过\l{Public Qt Repository}{公共 Qt 代码仓库}来实现。 +*/ -- cgit v0.12 From 3e07671a2b043703bc51c2672f16c45ed0c31c42 Mon Sep 17 00:00:00 2001 From: Gabriel de Dietrich Date: Fri, 13 Aug 2010 18:12:30 +0200 Subject: Keyboard navigation regression in QTreeView Ammends commit 8da7252de0badb818302763cbe62c38ad699f1f3 Auto-test included. Reviewed-by: Olivier Task-number: QTBUG-11466 --- src/gui/itemviews/qabstractitemview.cpp | 8 +- tests/auto/qtreeview/tst_qtreeview.cpp | 125 ++++++++++++++++++++++++++++++++ 2 files changed, 130 insertions(+), 3 deletions(-) diff --git a/src/gui/itemviews/qabstractitemview.cpp b/src/gui/itemviews/qabstractitemview.cpp index 97499f3..4ffd284 100644 --- a/src/gui/itemviews/qabstractitemview.cpp +++ b/src/gui/itemviews/qabstractitemview.cpp @@ -2270,9 +2270,11 @@ void QAbstractItemView::keyPressEvent(QKeyEvent *event) } else { d->selectionModel->setCurrentIndex(newCurrent, command); d->pressedPosition = visualRect(newCurrent).center() + d->offset(); - // We copy the same behaviour as for mousePressEvent(). - QRect rect(d->pressedPosition - d->offset(), QSize(1, 1)); - setSelection(rect, command); + if (newCurrent.isValid()) { + // We copy the same behaviour as for mousePressEvent(). + QRect rect(d->pressedPosition - d->offset(), QSize(1, 1)); + setSelection(rect, command); + } } event->accept(); return; diff --git a/tests/auto/qtreeview/tst_qtreeview.cpp b/tests/auto/qtreeview/tst_qtreeview.cpp index 75a4c62..7e2e800 100644 --- a/tests/auto/qtreeview/tst_qtreeview.cpp +++ b/tests/auto/qtreeview/tst_qtreeview.cpp @@ -239,6 +239,7 @@ private slots: void doubleClickedWithSpans(); void taskQTBUG_6450_selectAllWith1stColumnHidden(); void taskQTBUG_9216_setSizeAndUniformRowHeightsWrongRepaint(); + void taskQTBUG_11466_keyboardNavigationRegression(); }; class QtTestModel: public QAbstractItemModel @@ -3785,5 +3786,129 @@ void tst_QTreeView::keyboardNavigationWithDisabled() QCOMPARE(view.currentIndex(), model.index(6, 0)); } +class Model_11466 : public QAbstractItemModel +{ + Q_OBJECT +public: + Model_11466(QObject *parent) : + m_block(false) + { + // set up the model to have two top level items and a few others + m_selectionModel = new QItemSelectionModel(this, this); // owned by this + + connect(m_selectionModel, SIGNAL(currentChanged(const QModelIndex &,const QModelIndex &)), + this, SLOT(slotCurrentChanged(const QModelIndex &,const QModelIndex &))); + }; + + int rowCount(const QModelIndex &parent) const + { + if (parent.isValid()) + return (parent.internalId() == 0) ? 4 : 0; + return 2; // two top level items + } + + int columnCount(const QModelIndex &parent) const + { + return 2; + } + + QVariant data(const QModelIndex &index, int role) const + { + if (role == Qt::DisplayRole && index.isValid()) { + qint64 parentRowPlusOne = index.internalId(); + QString str; + QTextStream stream(&str); + if (parentRowPlusOne > 0) + stream << parentRowPlusOne << " -> " << index.row() << " : " << index.column(); + else + stream << index.row() << " : " << index.column(); + return QVariant(str); + } + return QVariant(); + } + + QModelIndex parent(const QModelIndex &index) const + { + if (index.isValid()) { + qint64 parentRowPlusOne = index.internalId(); + if (parentRowPlusOne > 0) { + int row = static_cast(parentRowPlusOne - 1); + return createIndex(row, 0, (quint32)0); + } + } + return QModelIndex(); + } + + void bindView(QTreeView *view) + { + // sets the view to this model with a shared selection model + QItemSelectionModel *oldModel = view->selectionModel(); + if (oldModel != m_selectionModel) + delete oldModel; + view->setModel(this); // this creates a new selection model for the view, but we dont want it either ... + oldModel = view->selectionModel(); + view->setSelectionModel(m_selectionModel); + delete oldModel; + } + + QModelIndex index(int row, int column, const QModelIndex &parent) const + { + return createIndex(row, column, parent.isValid() ? (quint32)(parent.row() + 1) : (quint32)0); + } + +public slots: + void slotCurrentChanged(const QModelIndex ¤t,const QModelIndex &) + { + if (m_block) + return; + + if (current.isValid()) { + int selectedRow = current.row(); + quint32 parentRowPlusOne = static_cast(current.internalId()); + + for (int i = 0; i < 2; ++i) { + // announce the removal of all non top level items + beginRemoveRows(createIndex(i, 0, 0), 0, 3); + // nothing to actually do for the removal + endRemoveRows(); + + // put them back in again + beginInsertRows(createIndex(i, 0, 0), 0, 3); + // nothing to actually do for the insertion + endInsertRows(); + } + // reselect the current item ... + QModelIndex selectedIndex = createIndex(selectedRow, 0, parentRowPlusOne); + + m_block = true; // recursion block + m_selectionModel->select(selectedIndex, QItemSelectionModel::ClearAndSelect|QItemSelectionModel::Current|QItemSelectionModel::Rows); + m_selectionModel->setCurrentIndex(selectedIndex, QItemSelectionModel::NoUpdate); + m_block = false; + } else { + m_selectionModel->clear(); + } + } + +private: + bool m_block; + QItemSelectionModel *m_selectionModel; +}; + +void tst_QTreeView::taskQTBUG_11466_keyboardNavigationRegression() +{ + QTreeView treeView; + treeView.setSelectionBehavior(QAbstractItemView::SelectRows); + treeView.setSelectionMode(QAbstractItemView::SingleSelection); + Model_11466 model(&treeView); + model.bindView(&treeView); + treeView.expandAll(); + treeView.show(); + QTest::qWaitForWindowShown(&treeView); + + QTest::keyPress(treeView.viewport(), Qt::Key_Down); + QTest::qWait(10); + QTRY_COMPARE(treeView.currentIndex(), treeView.selectionModel()->selection().indexes().first()); +} + QTEST_MAIN(tst_QTreeView) #include "tst_qtreeview.moc" -- cgit v0.12 From 69e8769e2a3f44700c24437dc851ea817c16318f Mon Sep 17 00:00:00 2001 From: Nicolai de Haan Brogger Date: Mon, 16 Aug 2010 21:55:42 +0000 Subject: Take advantage of a new EGL extension when posting 16 bit surfaces. Replaces the existing NVIDIA EGL extension "EGL_NV_post_convert_replication" with another newer extension named "EGL_NV_post_convert_roundinng". The newer extension produces similar result when posting 16 bit surfaces to 24/32 bit as the old and performs faster. Motivated by qtbug-9444. Merge-request: 742 Reviewed-by: Donald Carr --- src/gui/egl/qegl_x11.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/egl/qegl_x11.cpp b/src/gui/egl/qegl_x11.cpp index fea6e8d..15cc109 100644 --- a/src/gui/egl/qegl_x11.cpp +++ b/src/gui/egl/qegl_x11.cpp @@ -165,7 +165,7 @@ VisualID QEgl::getCompatibleVisualId(EGLConfig config) if (chosenVisualInfo) { // Skip size checks if implementation supports non-matching visual // and config (http://bugreports.qt.nokia.com/browse/QTBUG-9444). - if (QEgl::hasExtension("EGL_NV_post_convert_replication")) + if (QEgl::hasExtension("EGL_NV_post_convert_rounding")) return visualId; int visualRedSize = countBits(chosenVisualInfo->red_mask); -- cgit v0.12 From c6867a620259ee6c82a038995f424bef63d45aea Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Tue, 17 Aug 2010 09:12:58 +1000 Subject: Add missing auto test files. --- .../data/flickableqgraphicswidget.qml | 7 +++++++ .../data/verticalqgraphicswidget.qml | 24 ++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 tests/auto/declarative/qdeclarativeflickable/data/flickableqgraphicswidget.qml create mode 100644 tests/auto/declarative/qdeclarativepositioners/data/verticalqgraphicswidget.qml diff --git a/tests/auto/declarative/qdeclarativeflickable/data/flickableqgraphicswidget.qml b/tests/auto/declarative/qdeclarativeflickable/data/flickableqgraphicswidget.qml new file mode 100644 index 0000000..8e95a94 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeflickable/data/flickableqgraphicswidget.qml @@ -0,0 +1,7 @@ +import Qt 4.7 + +Flickable { + width: 100; height: 100 + + QGraphicsWidget { objectName: "widget1"; width: 200; height: 300 } +} diff --git a/tests/auto/declarative/qdeclarativepositioners/data/verticalqgraphicswidget.qml b/tests/auto/declarative/qdeclarativepositioners/data/verticalqgraphicswidget.qml new file mode 100644 index 0000000..c9c8607 --- /dev/null +++ b/tests/auto/declarative/qdeclarativepositioners/data/verticalqgraphicswidget.qml @@ -0,0 +1,24 @@ +import Qt 4.7 + +Item { + width: 640 + height: 480 + Column { + objectName: "column" + QGraphicsWidget { + objectName: "one" + width: 50 + height: 50 + } + QGraphicsWidget { + objectName: "two" + width: 20 + height: 10 + } + QGraphicsWidget { + objectName: "three" + width: 40 + height: 20 + } + } +} -- cgit v0.12 From 875d5e374dce3dd7d7cce87b55e277e8e9497044 Mon Sep 17 00:00:00 2001 From: Joona Petrell Date: Tue, 17 Aug 2010 13:29:08 +1000 Subject: Update QtGui def files Task-number: Reviewed-by: Martin Jones --- src/s60installs/bwins/QtGuiu.def | 4 +++- src/s60installs/eabi/QtGuiu.def | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def index 90c0878..21a2122 100644 --- a/src/s60installs/bwins/QtGuiu.def +++ b/src/s60installs/bwins/QtGuiu.def @@ -4148,7 +4148,7 @@ EXPORTS ?ensureSceneTransformRecursive@QGraphicsItemPrivate@@QAEXPAPAVQGraphicsItem@@@Z @ 4147 NONAME ; void QGraphicsItemPrivate::ensureSceneTransformRecursive(class QGraphicsItem * *) ?ensureSequentialSiblingIndex@QGraphicsItemPrivate@@QAEXXZ @ 4148 NONAME ; void QGraphicsItemPrivate::ensureSequentialSiblingIndex(void) ?ensureSortedChildren@QGraphicsItemPrivate@@QAEXXZ @ 4149 NONAME ; void QGraphicsItemPrivate::ensureSortedChildren(void) - ?ensureSpace@QTextEngine@@QBEXH@Z @ 4150 NONAME ; void QTextEngine::ensureSpace(int) const + ?ensureSpace@QTextEngine@@QBEXH@Z @ 4150 NONAME ABSENT ; void QTextEngine::ensureSpace(int) const ?ensureVisible@QGraphicsItem@@QAEXABVQRectF@@HH@Z @ 4151 NONAME ; void QGraphicsItem::ensureVisible(class QRectF const &, int, int) ?ensureVisible@QGraphicsItem@@QAEXMMMMHH@Z @ 4152 NONAME ; void QGraphicsItem::ensureVisible(float, float, float, float, int, int) ?ensureVisible@QGraphicsView@@QAEXABVQRectF@@HH@Z @ 4153 NONAME ; void QGraphicsView::ensureVisible(class QRectF const &, int, int) @@ -12886,4 +12886,6 @@ EXPORTS ?zScaleChanged@QGraphicsScale@@IAEXXZ @ 12885 NONAME ; void QGraphicsScale::zScaleChanged(void) ?xScaleChanged@QGraphicsScale@@IAEXXZ @ 12886 NONAME ; void QGraphicsScale::xScaleChanged(void) ?yScaleChanged@QGraphicsScale@@IAEXXZ @ 12887 NONAME ; void QGraphicsScale::yScaleChanged(void) + ?_q_aboutToQuit@QApplicationPrivate@@QAEXXZ @ 12888 NONAME ; void QApplicationPrivate::_q_aboutToQuit(void) + ?ensureSpace@QTextEngine@@QBE_NH@Z @ 12889 NONAME ; bool QTextEngine::ensureSpace(int) const diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def index d8e86bf..c4ad848 100644 --- a/src/s60installs/eabi/QtGuiu.def +++ b/src/s60installs/eabi/QtGuiu.def @@ -12091,4 +12091,5 @@ EXPORTS _ZN14QGraphicsScale13xScaleChangedEv @ 12090 NONAME _ZN14QGraphicsScale13yScaleChangedEv @ 12091 NONAME _ZN14QGraphicsScale13zScaleChangedEv @ 12092 NONAME + _ZN19QApplicationPrivate14_q_aboutToQuitEv @ 12093 NONAME -- cgit v0.12 From cf0f53ecefd6914d533ffea057748480e3e5bd33 Mon Sep 17 00:00:00 2001 From: Joona Petrell Date: Tue, 17 Aug 2010 13:29:08 +1000 Subject: Update QtDeclarative def files Task-number: Reviewed-by: Martin Jones --- src/s60installs/bwins/QtDeclarativeu.def | 1 + src/s60installs/eabi/QtDeclarativeu.def | 1 + 2 files changed, 2 insertions(+) diff --git a/src/s60installs/bwins/QtDeclarativeu.def b/src/s60installs/bwins/QtDeclarativeu.def index 480d9ff..bc6d0aa 100644 --- a/src/s60installs/bwins/QtDeclarativeu.def +++ b/src/s60installs/bwins/QtDeclarativeu.def @@ -1684,4 +1684,5 @@ EXPORTS ?rootContext@QDeclarativeView@@QBEPAVQDeclarativeContext@@XZ @ 1683 NONAME ; class QDeclarativeContext * QDeclarativeView::rootContext(void) const ?rootContext@QDeclarativeEngine@@QBEPAVQDeclarativeContext@@XZ @ 1684 NONAME ; class QDeclarativeContext * QDeclarativeEngine::rootContext(void) const ?qmlregister@QDeclarativePrivate@@YAHW4RegistrationType@1@PAX@Z @ 1685 NONAME ; int QDeclarativePrivate::qmlregister(enum QDeclarativePrivate::RegistrationType, void *) + ?hasValue@QDeclarativeOpenMetaObject@@QBE_NH@Z @ 1686 NONAME ; bool QDeclarativeOpenMetaObject::hasValue(int) const diff --git a/src/s60installs/eabi/QtDeclarativeu.def b/src/s60installs/eabi/QtDeclarativeu.def index 9a3cefa..723f2ae 100644 --- a/src/s60installs/eabi/QtDeclarativeu.def +++ b/src/s60installs/eabi/QtDeclarativeu.def @@ -1714,4 +1714,5 @@ EXPORTS _ZNK16QDeclarativeView6engineEv @ 1713 NONAME _ZNK18QDeclarativeEngine11rootContextEv @ 1714 NONAME _ZN19QDeclarativePrivate11qmlregisterENS_16RegistrationTypeEPv @ 1715 NONAME + _ZNK26QDeclarativeOpenMetaObject8hasValueEi @ 1716 NONAME -- cgit v0.12 From 056574f7d6c331ec7d972b298585e1a3a6c975ac Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Tue, 17 Aug 2010 14:05:53 +1000 Subject: Docs - clarify use of PropertyChanges for immediate property changes in a State (e.g. for setting a transformOrigin for a RotationAnimation). Also improve some other animation docs in general. --- doc/src/declarative/animation.qdoc | 19 ++- doc/src/snippets/declarative/propertychanges.qml | 92 +++++++++++ doc/src/snippets/declarative/rotationanimation.qml | 3 +- src/declarative/util/qdeclarativeanimation.cpp | 169 +++++++++++++++------ .../util/qdeclarativepropertychanges.cpp | 119 ++++++--------- 5 files changed, 273 insertions(+), 129 deletions(-) create mode 100644 doc/src/snippets/declarative/propertychanges.qml diff --git a/doc/src/declarative/animation.qdoc b/doc/src/declarative/animation.qdoc index 7416341..53a0c55 100644 --- a/doc/src/declarative/animation.qdoc +++ b/doc/src/declarative/animation.qdoc @@ -156,11 +156,13 @@ The \l {PropertyAnimation::}{to} property is also required to specify the new \section2 Standalone Animations Animations can also be created as ordinary QML objects that are not bound to -any particular objects and properties. An example: +any particular objects and properties. Here is an example, using a +PropertyAnimation object. The animation is explicitly started when the +\l Rectangle is clicked: \snippet doc/src/snippets/declarative/animation-standalone.qml 0 -A standalone animation is not running by default and must be started explicitly +A standalone animation object is not running by default and must be started explicitly using the \l {Animation::}{running} property or \l {Animation::}{start()} and \l {Animation::}{stop()} methods. Since the animation is not bound to a particular object or property, it must define the \l @@ -183,10 +185,13 @@ object and add it to an item's \l {Item::}{transitions} property. An example: \snippet doc/src/snippets/declarative/animation-transitions.qml 0 -When the \l Rectangle changes to the \e moved state, its \c x and \c y property -values are changed by the PropertyChanges object, and the PropertyAnimation -defined within the \l Transition is triggered on these properties. The -animation will not be applied at any time other than during the state change. +The PropertyChanges object in the \e moved state defines that when the +\l Rectangle is in this state, its position should be changed +to (50, 50). When the \l Rectangle changes to the \e moved state, the +\l Transition will be triggered, and the transition's \l PropertyAnimation will +animate the changes in the \c x and \c y properties to their new values. +The animation will not be applied at any time other than during the state +change. Notice the example does not set any \l {PropertyAnimation::}{from} and \l {PropertyAnimation::}{to} values for the PropertyAnimation. As a convenience, @@ -234,7 +239,7 @@ and rotation changes. A ColorAnimation allows color values for the \l {ColorAnimation::}{from} and \l {ColorAnimation::}{to} properties. The -following animates the rectangle's \l {Rectangle::color} property: +following animates the rectangle's \l {Rectangle::}{color} property: \snippet doc/src/snippets/declarative/animation-elements.qml color diff --git a/doc/src/snippets/declarative/propertychanges.qml b/doc/src/snippets/declarative/propertychanges.qml new file mode 100644 index 0000000..9f119bf --- /dev/null +++ b/doc/src/snippets/declarative/propertychanges.qml @@ -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 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] + +Column { + +//![0] +Item { + id: container + width: 300; height: 300 + + Rectangle { + id: rect + width: 100; height: 100 + color: "red" + + MouseArea { + id: mouseArea + anchors.fill: parent + } + + states: State { + name: "resized"; when: mouseArea.pressed + PropertyChanges { target: rect; color: "blue"; height: container.height } + } + } +} +//![0] + +//![reset] +Rectangle { + width: 300; height: 200 + + Text { + id: myText + width: 50 + wrapMode: Text.WordWrap + text: "a text string that is longer than 50 pixels" + + states: State { + name: "widerText" + PropertyChanges { target: myText; width: undefined } + } + } + + MouseArea { + anchors.fill: parent + onClicked: myText.state = "widerText" + } +} +//![reset] +} diff --git a/doc/src/snippets/declarative/rotationanimation.qml b/doc/src/snippets/declarative/rotationanimation.qml index c81395a..b56cb3f 100644 --- a/doc/src/snippets/declarative/rotationanimation.qml +++ b/doc/src/snippets/declarative/rotationanimation.qml @@ -52,7 +52,8 @@ Item { smooth: true states: State { - name: "rotated"; PropertyChanges { target: rect; rotation: 180 } + name: "rotated" + PropertyChanges { target: rect; rotation: 180 } } transitions: Transition { diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp index 3b8cb37..4e9e8d5 100644 --- a/src/declarative/util/qdeclarativeanimation.cpp +++ b/src/declarative/util/qdeclarativeanimation.cpp @@ -694,9 +694,12 @@ QDeclarativeColorAnimation::~QDeclarativeColorAnimation() } \endqml - If this value is not set and the ColorAnimation is defined within - a \l Transition, it defaults to the value defined in the starting - state of the \l Transition. + If the ColorAnimation is defined within a \l Transition or \l Behavior, + this value defaults to the value defined in the starting state of the + \l Transition, or the current value of the property at the moment the + \l Behavior is triggered. + + \sa {QML Animation} */ QColor QDeclarativeColorAnimation::from() const { @@ -714,9 +717,12 @@ void QDeclarativeColorAnimation::setFrom(const QColor &f) This property holds the color value at which the animation should end. - If this value is not set and the ColorAnimation is defined within - a \l Transition or \l Behavior, it defaults to the value defined in the end - state of the \l Transition or \l Behavior. + If the ColorAnimation is defined within a \l Transition or \l Behavior, + this value defaults to the value defined in the end state of the + \l Transition, or the value of the property change that triggered the + \l Behavior. + + \sa {QML Animation} */ QColor QDeclarativeColorAnimation::to() const { @@ -887,29 +893,45 @@ QAbstractAnimation *QDeclarativeScriptAction::qtAnimation() \inherits Animation \brief The PropertyAction element allows immediate property changes during animation. - PropertyAction is used to specify an immediate property change - during an animation. The property change is not animated. + PropertyAction is used to specify an immediate property change during an + animation. The property change is not animated. - For example, to explicitly set \c {theImage.smooth = true} during a \l Transition: - \code - transitions: Transition { - ... - PropertyAction { target: theImage; property: "smooth"; value: true } - ... - } - \endcode + It is useful for setting non-animated property values during an animation. - Or, to set \c theWebView.url to the value set for the destination state: - \code + For example, here is a SequentialAnimation that sets the image's + \l {Image::}{smooth} property to \c true, animates the width of the image, + then sets \l {Image::}{smooth} back to \c false: + + \snippet doc/src/snippets/declarative/propertyaction.qml standalone + + PropertyAction is also useful for setting the exact point at which a property + change should occur during a \l Transition. For example, if PropertyChanges + was used in a \l State to rotate an item around a particular + \l {Item::}{transformOrigin}, it might be implemented like this: + + \snippet doc/src/snippets/declarative/propertyaction.qml transition + + However, with this code, the \c transformOrigin is not set until \e after + the animation, as a \l State is taken to define the values at the \e end of + a transition. The animation would rotate at the default \c transformOrigin, + then jump to \c Item.BottomRight. To fix this, insert a PropertyChanges + before the RotationAnimation begins: + + \qml transitions: Transition { - ... - PropertyAction { target: theWebView; property: "url" } - ... + SequentialAnimation { + PropertyAction { target: rect; property: "transformOrigin" } + RotationAnimation { ... } + } } - \endcode - + \endqml + + This immediately sets the \c transformOrigin property to the value defined + in the end state of the \l Transition (i.e. the value defined in the + PropertyChanges object) so that the rotation animation begins with the + correct transform origin. - \sa QtDeclarative + \sa {QML Animation}, QtDeclarative */ /*! \internal @@ -1014,7 +1036,11 @@ QDeclarativeListProperty QDeclarativePropertyAction::exclude() /*! \qmlproperty any PropertyAction::value This property holds the value to be set on the property. - If not set, then the value defined for the end state of the transition. + + If the PropertyAction is defined within a \l Transition or \l Behavior, + this value defaults to the value defined in the end state of the + \l Transition, or the value of the property change that triggered the + \l Behavior. */ QVariant QDeclarativePropertyAction::value() const { @@ -1190,7 +1216,7 @@ void QDeclarativeNumberAnimation::init() /*! \qmlproperty real NumberAnimation::from - This property holds the starting number value. + This property holds the starting value for the animation. For example, the following animation is not applied until the \c x value has reached 100: @@ -1205,9 +1231,12 @@ void QDeclarativeNumberAnimation::init() } \endqml - If this value is not set and the NumberAnimation is defined within - a \l Transition, it defaults to the value defined in the start - state of the \l Transition. + If the NumberAnimation is defined within a \l Transition or \l Behavior, + this value defaults to the value defined in the starting state of the + \l Transition, or the current value of the property at the moment the + \l Behavior is triggered. + + \sa {QML Animation} */ qreal QDeclarativeNumberAnimation::from() const @@ -1223,11 +1252,14 @@ void QDeclarativeNumberAnimation::setFrom(qreal f) /*! \qmlproperty real NumberAnimation::to - This property holds the ending number value. + This property holds the end value for the animation. - If this value is not set and the NumberAnimation is defined within - a \l Transition or \l Behavior, it defaults to the value defined in the end - state of the \l Transition or \l Behavior. + If the NumberAnimation is defined within a \l Transition or \l Behavior, + this value defaults to the value defined in the end state of the + \l Transition, or the value of the property change that triggered the + \l Behavior. + + \sa {QML Animation} */ qreal QDeclarativeNumberAnimation::to() const { @@ -1280,10 +1312,14 @@ QDeclarativeVector3dAnimation::~QDeclarativeVector3dAnimation() /*! \qmlproperty real Vector3dAnimation::from - This property holds the starting value. + This property holds the starting value for the animation. + + If the Vector3dAnimation is defined within a \l Transition or \l Behavior, + this value defaults to the value defined in the starting state of the + \l Transition, or the current value of the property at the moment the + \l Behavior is triggered. - If this value is not set, it defaults to the value defined in the start - state of the \l Transition. + \sa {QML Animation} */ QVector3D QDeclarativeVector3dAnimation::from() const { @@ -1298,10 +1334,14 @@ void QDeclarativeVector3dAnimation::setFrom(QVector3D f) /*! \qmlproperty real Vector3dAnimation::to - This property holds the ending value. + This property holds the end value for the animation. - If this value is not set, it defaults to the value defined in the end - state of the \l Transition or \l Behavior. + If the Vector3dAnimation is defined within a \l Transition or \l Behavior, + this value defaults to the value defined in the end state of the + \l Transition, or the value of the property change that triggered the + \l Behavior. + + \sa {QML Animation} */ QVector3D QDeclarativeVector3dAnimation::to() const { @@ -1343,6 +1383,12 @@ void QDeclarativeVector3dAnimation::setTo(QVector3D t) your own properties via \l {PropertyAnimation::properties}{properties} or \l {PropertyAnimation::property}{property}. + Also, note the \l Rectangle will be rotated around its default + \l {Item::}{transformOrigin} (which is \c Item.Center). To use a different + transform origin, set the origin in the PropertyChanges object and apply + the change at the start of the animation using PropertyAction. See the + PropertyAction documentation for more details. + Like any other animation element, a RotationAnimation can be applied in a number of ways, including transitions, behaviors and property value sources. The \l {QML Animation} documentation shows a variety of methods @@ -1408,7 +1454,7 @@ QDeclarativeRotationAnimation::~QDeclarativeRotationAnimation() /*! \qmlproperty real RotationAnimation::from - This property holds the starting number value. + This property holds the starting value for the animation. For example, the following animation is not applied until the \c angle value has reached 100: @@ -1423,8 +1469,12 @@ QDeclarativeRotationAnimation::~QDeclarativeRotationAnimation() } \endqml - If this value is not set, it defaults to the value defined in the start - state of the \l Transition. + If the RotationAnimation is defined within a \l Transition or \l Behavior, + this value defaults to the value defined in the starting state of the + \l Transition, or the current value of the property at the moment the + \l Behavior is triggered. + + \sa {QML Animation} */ qreal QDeclarativeRotationAnimation::from() const { @@ -1439,10 +1489,14 @@ void QDeclarativeRotationAnimation::setFrom(qreal f) /*! \qmlproperty real RotationAnimation::to - This property holds the ending value. + This property holds the end value for the animation.. + + If the RotationAnimation is defined within a \l Transition or \l Behavior, + this value defaults to the value defined in the end state of the + \l Transition, or the value of the property change that triggered the + \l Behavior. - If this value is not set, it defaults to the value defined in the end - state of the \l Transition or \l Behavior. + \sa {QML Animation} */ qreal QDeclarativeRotationAnimation::to() const { @@ -1854,8 +1908,14 @@ void QDeclarativePropertyAnimation::setDuration(int duration) /*! \qmlproperty real PropertyAnimation::from - This property holds the starting value. - If not set, then the value defined in the start state of the transition. + This property holds the starting value for the animation. + + If the PropertyAnimation is defined within a \l Transition or \l Behavior, + this value defaults to the value defined in the starting state of the + \l Transition, or the current value of the property at the moment the + \l Behavior is triggered. + + \sa {QML Animation} */ QVariant QDeclarativePropertyAnimation::from() const { @@ -1875,8 +1935,14 @@ void QDeclarativePropertyAnimation::setFrom(const QVariant &f) /*! \qmlproperty real PropertyAnimation::to - This property holds the ending value. - If not set, then the value defined in the end state of the transition or \l Behavior. + This property holds the end value for the animation. + + If the PropertyAnimation is defined within a \l Transition or \l Behavior, + this value defaults to the value defined in the end state of the + \l Transition, or the value of the property change that triggered the + \l Behavior. + + \sa {QML Animation} */ QVariant QDeclarativePropertyAnimation::to() const { @@ -2502,7 +2568,10 @@ void QDeclarativeParentAnimation::setTarget(QDeclarativeItem *target) \qmlproperty Item ParentAnimation::newParent The new parent to animate to. - If not set, then the parent defined in the end state of the transition. + If the ParentAnimation is defined within a \l Transition or \l Behavior, + this value defaults to the value defined in the end state of the + \l Transition, or the value of the property change that triggered the + \l Behavior. */ QDeclarativeItem *QDeclarativeParentAnimation::newParent() const { diff --git a/src/declarative/util/qdeclarativepropertychanges.cpp b/src/declarative/util/qdeclarativepropertychanges.cpp index 25edd35..c28ada3 100644 --- a/src/declarative/util/qdeclarativepropertychanges.cpp +++ b/src/declarative/util/qdeclarativepropertychanges.cpp @@ -65,48 +65,30 @@ QT_BEGIN_NAMESPACE \since 4.7 \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. + PropertyChanges is used to define the property values or bindings in a + \l State. This enables an item's property values to be changed when it + \l {QML States}{changes between states}. - Here is a property change that modifies the text and color of a \l Text element - when it is clicked: + To create a PropertyChanges object, specify the \l target item whose + properties are to be modified, and define the new property values or + bindings. For example: - \qml - Text { - id: myText - width: 100; height: 100 - text: "Hello" - color: "blue" - - states: State { - name: "myState" - - PropertyChanges { - target: myText - text: "Goodbye" - color: "red" - } - } - - 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 \c 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} + \snippet doc/src/snippets/declarative/propertychanges.qml import + \codeline + \snippet doc/src/snippets/declarative/propertychanges.qml 0 + + When the mouse is pressed, the \l Rectangle changes to the \e resized + state. In this state, the PropertyChanges object sets the rectangle's + color to blue and the \c height value to that of \c container.height. + + Note this automatically binds \c rect.height to \c container.height + in the \e resized state. If a property binding should not be + established, and the height should just be set to the value of + \c container.height at the time of the state change, set the \l explicit property to \c true. - - State-specific script for signal handlers can also be specified: + + A PropertyChanges object can also override the default signal handler + for an object to implement a signal handler specific to the new state: \qml PropertyChanges { @@ -115,36 +97,31 @@ QT_BEGIN_NAMESPACE } \endqml - You can reset a property in a state change by assigning \c undefined. In the following - example we reset \c theText's width when we enter state1. This will give the text its - natural width (which is the whole string on one line). + \note PropertyChanges can be used to change anchor margins, but not other anchor + values; use AnchorChanges for this instead. Similarly, to change an \l Item's + \l {Item::}{parent} value, use ParentChanges instead. - \qml - import Qt 4.7 - - Rectangle { - width: 640 - height: 480 - Text { - id: theText - width: 50 - wrapMode: Text.WordWrap - text: "a text string that is longer than 50 pixels" - } - states: State { - name: "state1" - PropertyChanges { - target: theText - width: undefined - } - } - } - \endqml + \section2 Resetting property values - Anchor margins should be changed with PropertyChanges, but other anchor changes or changes to - an Item's parent should be done using the associated change elements - (ParentChange and AnchorChanges, respectively). + The \c undefined value can be used to reset the property value for a state. + In the following example, when \c theText changes to the \e widerText + state, its \c width property is reset, giving the text its natural width + and displaying the whole string on a single line. + + \snippet doc/src/snippets/declarative/propertychanges.qml reset + + + \section2 Immediate property changes in transitions + + When \l Transitions are used to animate state changes, they animate + properties from their values in the current state to those defined in the + new state (as defined by PropertyChanges objects). However, + it is sometimes desirable to set a property value \e immediately during a + \l Transition, without animation; in these cases, the PropertyAction + element can be used to force an immediate property change. + + See the PropertyAction documentation for more details. \sa {declarative/animation/states}{states example}, {qmlstate}{States}, QtDeclarative */ @@ -397,12 +374,12 @@ void QDeclarativePropertyChanges::setObject(QObject *o) /*! \qmlproperty bool PropertyChanges::restoreEntryValues - - Whether or not the previous values should be restored when - leaving the state. By default, restoreEntryValues is true. - By setting restoreEntryValues to false, you can create a temporary state - that has permanent effects on property values. + This property holds whether the previous values should be restored when + leaving the state. + + The default value is \c true. Setting this value to \c false creates a + temporary state that has permanent effects on property values. */ bool QDeclarativePropertyChanges::restoreEntryValues() const { -- cgit v0.12 From 59d2b0a0a1c836d3371c18a2a857d88c2d28621f Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Tue, 17 Aug 2010 14:09:07 +1000 Subject: Add missing file --- doc/src/snippets/declarative/propertyaction.qml | 86 +++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 doc/src/snippets/declarative/propertyaction.qml diff --git a/doc/src/snippets/declarative/propertyaction.qml b/doc/src/snippets/declarative/propertyaction.qml new file mode 100644 index 0000000..1a15469 --- /dev/null +++ b/doc/src/snippets/declarative/propertyaction.qml @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** 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 + +Row { + +//![transition] +Item { + width: 400; height: 400 + + Rectangle { + id: rect + width: 200; height: 100 + color: "red" + + states: State { + name: "rotated" + PropertyChanges { target: rect; rotation: 180; transformOrigin: Item.BottomRight } + } + + transitions: Transition { + RotationAnimation { duration: 1000; direction: RotationAnimation.Counterclockwise } + } + + MouseArea { + anchors.fill: parent + onClicked: rect.state = "rotated" + } + } +} +//![transition] + +Item { + width: 300; height: 300 + + Image { id: img; source: "pics/qt.png" } + +//![standalone] +SequentialAnimation { + PropertyAction { target: img; property: "smooth"; value: "true" } + NumberAnimation { target: img; property: "width"; to: 300; duration: 1000 } + PropertyAction { target: img; property: "smooth"; value: "false" } +} +//![standalone] +} + +} + -- cgit v0.12 From a76b8bf67696ae69888cc6237417e7c8f07f8da6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Tue, 17 Aug 2010 10:29:03 +0200 Subject: Prevented Xorg crash in qtdemo when running corkboards example. The crash happens in the Nvidia driver in glXReleaseTexImageEXT when scrolling the corkboard using the mouse. To work around it we detect the Nvidia driver versions where this is known to be a problem and skip using the texture from pixmap extension in those cases. Task-number: QTBUG-12914 Reviewed-by: Trond --- src/opengl/qgl.cpp | 30 +++++++++++++++++++++++++----- src/opengl/qgl_p.h | 3 +++ 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 4daa866..74bde36 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -1688,6 +1688,10 @@ void QGLContextPrivate::init(QPaintDevice *dev, const QGLFormat &format) workaround_needsFullClearOnEveryFrame = false; workaround_brokenFBOReadBack = false; workaroundsCached = false; + + workaround_brokenTextureFromPixmap = false; + workaround_brokenTextureFromPixmap_init = false; + for (int i = 0; i < QT_GL_VERTEX_ARRAY_TRACKED_COUNT; ++i) vertexAttributeArraysEnabledState[i] = false; } @@ -2570,11 +2574,27 @@ QGLTexture *QGLContextPrivate::bindTexture(const QPixmap &pixmap, GLenum target, && xinfo && xinfo->screen() == pixmap.x11Info().screen() && target == GL_TEXTURE_2D) { - texture = bindTextureFromNativePixmap(const_cast(&pixmap), key, options); - if (texture) { - texture->options |= QGLContext::MemoryManagedBindOption; - texture->boundPixmap = pd; - boundPixmaps.insert(pd, QPixmap(pixmap)); + if (!workaround_brokenTextureFromPixmap_init) { + workaround_brokenTextureFromPixmap_init = true; + + const QByteArray versionString(reinterpret_cast(glGetString(GL_VERSION))); + const int pos = versionString.indexOf("NVIDIA "); + + if (pos >= 0) { + const QByteArray nvidiaVersionString = versionString.mid(pos + strlen("NVIDIA ")); + + if (nvidiaVersionString.startsWith("195") || nvidiaVersionString.startsWith("256")) + workaround_brokenTextureFromPixmap = true; + } + } + + if (!workaround_brokenTextureFromPixmap) { + texture = bindTextureFromNativePixmap(const_cast(&pixmap), key, options); + if (texture) { + texture->options |= QGLContext::MemoryManagedBindOption; + texture->boundPixmap = pd; + boundPixmaps.insert(pd, QPixmap(pixmap)); + } } } #endif diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index 32feacd..ca0d3fa 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -393,6 +393,9 @@ public: uint workaround_brokenFBOReadBack : 1; uint workaroundsCached : 1; + uint workaround_brokenTextureFromPixmap : 1; + uint workaround_brokenTextureFromPixmap_init : 1; + QPaintDevice *paintDevice; QColor transpColor; QGLContext *q_ptr; -- cgit v0.12 From d7213ecceabf79de561cd276429372e09464e62c Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Tue, 17 Aug 2010 11:11:15 +0200 Subject: tst_QDataStream::stream_QPixmap: actualy test QPixmap. Because of a type, QIcon was tested twicen and QPixmap was not tested --- tests/auto/qdatastream/tst_qdatastream.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auto/qdatastream/tst_qdatastream.cpp b/tests/auto/qdatastream/tst_qdatastream.cpp index 31e12fe..c03bc71 100644 --- a/tests/auto/qdatastream/tst_qdatastream.cpp +++ b/tests/auto/qdatastream/tst_qdatastream.cpp @@ -1820,7 +1820,7 @@ void tst_QDataStream::stream_QPixmap() #ifdef Q_OS_WINCE QSKIP("Test depends on more memory than available on Qt/CE", SkipAll); #endif - STREAM_IMPL(QIcon); + STREAM_IMPL(QPixmap); } void tst_QDataStream::stream_QIcon_data() -- cgit v0.12 From cc6dc0aeefde881a95f5fea2b26f2f3d7bdc6e15 Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Tue, 17 Aug 2010 10:08:20 +0200 Subject: Cocoa: parent windows shows on screen when they should be hidden The reason is the cocoa method that adds a window as a child of another, it ends up showing both the parent and the child window regardless. And this could in some cases also cause a crash. So we therefore need to be careful when calling that function, and be sure that the parent is actually visible. In addition, addChildWindow reset the stacking level of the child window, and made e.g. normal child windows pop in front of tool child windows. This could easily be seen in e.g. Designer. Task-number: QTBUG-12866 Reviewed-by: prasanth --- src/gui/kernel/qwidget_mac.mm | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm index 8ae6a99..4ed4ccc 100644 --- a/src/gui/kernel/qwidget_mac.mm +++ b/src/gui/kernel/qwidget_mac.mm @@ -2796,10 +2796,16 @@ void QWidgetPrivate::setSubWindowStacking(bool set) if (QWidget *parent = q->parentWidget()) { if (parent->testAttribute(Qt::WA_WState_Created)) { - if (set) - [qt_mac_window_for(parent) addChildWindow:qt_mac_window_for(q) ordered:NSWindowAbove]; - else + if (set) { + if (parent->isVisible()) { + NSWindow *childwin = qt_mac_window_for(q); + int childLevel = [childwin level]; + [qt_mac_window_for(parent) addChildWindow:childwin ordered:NSWindowAbove]; + [childwin setLevel:childLevel]; + } + } else { [qt_mac_window_for(parent) removeChildWindow:qt_mac_window_for(q)]; + } } } @@ -2807,10 +2813,14 @@ void QWidgetPrivate::setSubWindowStacking(bool set) for (int i=0; iisWindow() && child->testAttribute(Qt::WA_WState_Created) && child->isVisibleTo(q)) { - if (set) - [qt_mac_window_for(q) addChildWindow:qt_mac_window_for(child) ordered:NSWindowAbove]; - else + if (set) { + NSWindow *childwin = qt_mac_window_for(child); + int childLevel = [childwin level]; + [qt_mac_window_for(q) addChildWindow:childwin ordered:NSWindowAbove]; + [childwin setLevel:childLevel]; + } else { [qt_mac_window_for(q) removeChildWindow:qt_mac_window_for(child)]; + } } } } -- cgit v0.12 From ff405f5623d7ed18c881c097368e3e9afd2e9443 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Tue, 17 Aug 2010 10:45:17 +0200 Subject: Outline / fill inconsistency in X11 paint engine. Change ebbab30af417dfbf3df47dec15c0e2f8d6a30fa6 broke outline / fill consistency in the X11 engine. Since the positioning of lines is more important we'll round the fill coordinates the same way. The bug was visible in the filltest.qps arthur test. Reviewed-by: Gunnar Sletta --- src/gui/painting/qpaintengine_x11.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/painting/qpaintengine_x11.cpp b/src/gui/painting/qpaintengine_x11.cpp index e521e01..5307142 100644 --- a/src/gui/painting/qpaintengine_x11.cpp +++ b/src/gui/painting/qpaintengine_x11.cpp @@ -1516,8 +1516,8 @@ void QX11PaintEnginePrivate::fillPolygon_translated(const QPointF *polygonPoints for (int i = 0; i < pointCount; ++i) { translated_points[i] = polygonPoints[i] + offset; - translated_points[i].rx() = qRound(translated_points[i].x()) + offs; - translated_points[i].ry() = qRound(translated_points[i].y()) + offs; + translated_points[i].rx() = qFloor(translated_points[i].x()) + offs; + translated_points[i].ry() = qFloor(translated_points[i].y()) + offs; } fillPolygon_dev(translated_points.data(), pointCount, gcMode, mode); @@ -1754,8 +1754,8 @@ void QX11PaintEnginePrivate::fillPath(const QPainterPath &path, QX11PaintEngineP for (int j = 0; j < polys.at(i).size(); ++j) { translated_points[j] = polys.at(i).at(j); if (!X11->use_xrender || !(render_hints & QPainter::Antialiasing)) { - translated_points[j].rx() = qRound(translated_points[j].rx() + aliasedCoordinateDelta) + offs; - translated_points[j].ry() = qRound(translated_points[j].ry() + aliasedCoordinateDelta) + offs; + translated_points[j].rx() = qFloor(translated_points[j].rx() + aliasedCoordinateDelta) + offs; + translated_points[j].ry() = qFloor(translated_points[j].ry() + aliasedCoordinateDelta) + offs; } } -- cgit v0.12 From e0c798ebb4fc56fa6be38f6ec3e82de147891260 Mon Sep 17 00:00:00 2001 From: Joona Petrell Date: Mon, 16 Aug 2010 19:02:46 +1000 Subject: Repaint TextInput when password character changes in password mode Task-number: QTBUG-12838 Reviewed-by: Martin Jones --- .../graphicsitems/qdeclarativetextinput.cpp | 18 +++++++++++++----- .../tst_qdeclarativetextinput.cpp | 16 ++++++++++++++++ 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index bd8d404..b4f36f4 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -277,8 +277,10 @@ void QDeclarativeTextInput::setSelectionColor(const QColor &color) QPalette p = d->control->palette(); p.setColor(QPalette::Highlight, d->selectionColor); d->control->setPalette(p); - clearCache(); - update(); + if (d->control->hasSelectedText()) { + clearCache(); + update(); + } emit selectionColorChanged(color); } @@ -303,8 +305,10 @@ void QDeclarativeTextInput::setSelectedTextColor(const QColor &color) QPalette p = d->control->palette(); p.setColor(QPalette::HighlightedText, d->selectedTextColor); d->control->setPalette(p); - clearCache(); - update(); + if (d->control->hasSelectedText()) { + clearCache(); + update(); + } emit selectedTextColorChanged(color); } @@ -1233,8 +1237,12 @@ void QDeclarativeTextInput::setPasswordCharacter(const QString &str) Q_D(QDeclarativeTextInput); if(str.length() < 1) return; - emit passwordCharacterChanged(); d->control->setPasswordCharacter(str.constData()[0]); + EchoMode echoMode_ = echoMode(); + if (echoMode_ == Password || echoMode_ == PasswordEchoOnEdit) { + updateSize(); + } + emit passwordCharacterChanged(); } /*! diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index ca9009d..98a6012 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -98,6 +98,7 @@ private slots: void validators(); void inputMethods(); + void passwordCharacter(); void cursorDelegate(); void navigation(); void copyAndPaste(); @@ -768,6 +769,21 @@ void tst_qdeclarativetextinput::copyAndPaste() { #endif } +void tst_qdeclarativetextinput::passwordCharacter() +{ + QString componentStr = "import Qt 4.7\nTextInput { text: \"Hello world!\"; font.family: \"Helvetica\"; echoMode: TextInput.Password }"; + QDeclarativeComponent textInputComponent(&engine); + textInputComponent.setData(componentStr.toLatin1(), QUrl()); + QDeclarativeTextInput *textInput = qobject_cast(textInputComponent.create()); + QVERIFY(textInput != 0); + + textInput->setPasswordCharacter("X"); + QSize contentsSize = textInput->contentsSize(); + textInput->setPasswordCharacter("."); + // QTBUG-12383 content is updated and redrawn + QVERIFY(contentsSize != textInput->contentsSize()); +} + void tst_qdeclarativetextinput::cursorDelegate() { QDeclarativeView* view = createView(SRCDIR "/data/cursorTest.qml"); -- cgit v0.12 From 63434c07fbe4e3d8735a9e28200ce9b3b121bec8 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 12 Aug 2010 19:47:41 +0200 Subject: fix QMAKE_SUBSTITUTES with shadow builds still doesn't work for nested directories, but that's because fileFixify() is plain broken. on the way, remove a superfluous check: we know that the input file name ends with .in - three lines up we made sure it does. Reviewed-by: joerg --- qmake/generators/makefile.cpp | 6 +++--- tests/auto/qmake/testdata/substitutes/sub/test2.in | 1 + tests/auto/qmake/testdata/substitutes/test.in | 2 ++ tests/auto/qmake/testdata/substitutes/test.pro | 2 ++ tests/auto/qmake/testdata/substitutes_build/README | 1 + tests/auto/qmake/tst_qmake.cpp | 16 ++++++++++++++++ 6 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 tests/auto/qmake/testdata/substitutes/sub/test2.in create mode 100644 tests/auto/qmake/testdata/substitutes/test.in create mode 100644 tests/auto/qmake/testdata/substitutes/test.pro create mode 100644 tests/auto/qmake/testdata/substitutes_build/README diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index 45a96f5..851e587 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -471,9 +471,9 @@ MakefileGenerator::init() subs.at(i).toLatin1().constData()); continue; } - QFile in(fileFixify(subs.at(i))), out(fileInfo(subs.at(i)).fileName()); - if(out.fileName().endsWith(".in")) - out.setFileName(out.fileName().left(out.fileName().length()-3)); + QFile in(fileFixify(subs.at(i))); + QFile out(fileFixify(subs.at(i).left(subs.at(i).length()-3), + qmake_getpwd(), Option::output_dir)); if(in.open(QFile::ReadOnly)) { QString contents; QStack state; diff --git a/tests/auto/qmake/testdata/substitutes/sub/test2.in b/tests/auto/qmake/testdata/substitutes/sub/test2.in new file mode 100644 index 0000000..78a6069 --- /dev/null +++ b/tests/auto/qmake/testdata/substitutes/sub/test2.in @@ -0,0 +1 @@ +heya diff --git a/tests/auto/qmake/testdata/substitutes/test.in b/tests/auto/qmake/testdata/substitutes/test.in new file mode 100644 index 0000000..2fa05e0 --- /dev/null +++ b/tests/auto/qmake/testdata/substitutes/test.in @@ -0,0 +1,2 @@ +test +tst diff --git a/tests/auto/qmake/testdata/substitutes/test.pro b/tests/auto/qmake/testdata/substitutes/test.pro new file mode 100644 index 0000000..5bce312 --- /dev/null +++ b/tests/auto/qmake/testdata/substitutes/test.pro @@ -0,0 +1,2 @@ +QMAKE_SUBSTITUTES += test.in +# doesn't work for the time being: sub/test2.in diff --git a/tests/auto/qmake/testdata/substitutes_build/README b/tests/auto/qmake/testdata/substitutes_build/README new file mode 100644 index 0000000..81dc596 --- /dev/null +++ b/tests/auto/qmake/testdata/substitutes_build/README @@ -0,0 +1 @@ +Placeholder file to ensure this directory exists diff --git a/tests/auto/qmake/tst_qmake.cpp b/tests/auto/qmake/tst_qmake.cpp index 5efe714..825e49b 100644 --- a/tests/auto/qmake/tst_qmake.cpp +++ b/tests/auto/qmake/tst_qmake.cpp @@ -90,6 +90,7 @@ private slots: void bundle_spaces(); #endif void includefunction(); + void substitutes(); private: TestCompiler test_compiler; @@ -477,6 +478,21 @@ void tst_qmake::includefunction() QVERIFY(test_compiler.commandOutput().contains(warningMsg)); } +void tst_qmake::substitutes() +{ + QString workDir = base_path + "/testdata/substitutes"; + QVERIFY( test_compiler.qmake( workDir, "test" )); + QVERIFY( test_compiler.exists( workDir, "test", Exe, "1.0.0" )); + //QVERIFY( test_compiler.exists( workDir, "sub/test2", Exe, "1.0.0" )); + QVERIFY( test_compiler.makeDistClean( workDir )); + + QString buildDir = base_path + "/testdata/substitutes_build"; + QVERIFY( test_compiler.qmake( workDir, "test", buildDir )); + QVERIFY( test_compiler.exists( buildDir, "test", Exe, "1.0.0" )); + //QVERIFY( test_compiler.exists( buildDir, "sub/test2", Exe, "1.0.0" )); + QVERIFY( test_compiler.makeDistClean( buildDir )); +} + QTEST_MAIN(tst_qmake) #include "tst_qmake.moc" -- cgit v0.12 From 2b5469fcb541fd0c37c04acbe1470228272f8adf Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 17 Aug 2010 11:57:58 +0200 Subject: exclude QtXmlPatterns from the completeness assessment that context is a *huge* collection of cryptic error messages, translation of which does not add too much value. so skip it. --- translations/check-ts.xq | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/check-ts.xq b/translations/check-ts.xq index 2d6404c..1062e90 100644 --- a/translations/check-ts.xq +++ b/translations/check-ts.xq @@ -1,3 +1,3 @@ for $file in tokenize($files, codepoints-to-string(10)) - let $fresh := doc($file)/TS/context/message[not (translation/@type = 'obsolete')] + let $fresh := doc($file)/TS/context[not (name = 'QtXmlPatterns')]/message[not (translation/@type = 'obsolete')] return concat($file, ":", count($fresh/translation[not (@type = 'unfinished')]) * 100 idiv count($fresh)) -- cgit v0.12 From 40a2971d2ebe2b7409c13ab049ed26b249033d8e Mon Sep 17 00:00:00 2001 From: Tasuku Suzuki Date: Tue, 17 Aug 2010 13:34:10 +0200 Subject: Fix compilation: QT_NO_TEXTSTREAM Merge-request: 2450 Reviewed-by: Oswald Buddenhagen --- src/plugins/bearer/connman/qconnmanservice_linux.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/bearer/connman/qconnmanservice_linux.cpp b/src/plugins/bearer/connman/qconnmanservice_linux.cpp index eb88317..b15589e 100644 --- a/src/plugins/bearer/connman/qconnmanservice_linux.cpp +++ b/src/plugins/bearer/connman/qconnmanservice_linux.cpp @@ -1053,7 +1053,9 @@ bool QConnmanDeviceInterface::setProperty(const QString &name, const QDBusVarian { // QList args; +#ifndef QT_NO_TEXTSTREAM qWarning() << __FUNCTION__ << name << value.variant(); +#endif // args << qVariantFromValue(name); // args << qVariantFromValue(value); -- cgit v0.12 From 81644d683c0c8da3f14f162e31bc55038cb121d7 Mon Sep 17 00:00:00 2001 From: Thomas Zander Date: Tue, 17 Aug 2010 12:56:57 +0200 Subject: Fix memory leak in gesture manager If the user unregisters a recognizer before anyone ever used it we didn't delete it on application exit. This fix makes sure we do. Task: QTBUG-12845 Reviewed-by: Denis Dzyubenko --- src/gui/kernel/qgesturemanager.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/gui/kernel/qgesturemanager.cpp b/src/gui/kernel/qgesturemanager.cpp index fe9dd8a..e768a21 100644 --- a/src/gui/kernel/qgesturemanager.cpp +++ b/src/gui/kernel/qgesturemanager.cpp @@ -129,7 +129,12 @@ Qt::GestureType QGestureManager::registerGestureRecognizer(QGestureRecognizer *r void QGestureManager::unregisterGestureRecognizer(Qt::GestureType type) { QList list = m_recognizers.values(type); - m_recognizers.remove(type); + while (QGestureRecognizer *recognizer = m_recognizers.take(type)) { + if (!m_obsoleteGestures.contains(recognizer)) { + // inserting even an empty QSet will cause the recognizer to be deleted on destruction of the manager + m_obsoleteGestures.insert(recognizer, QSet()); + } + } foreach (QGesture *g, m_gestureToRecognizer.keys()) { QGestureRecognizer *recognizer = m_gestureToRecognizer.value(g); if (list.contains(recognizer)) { -- cgit v0.12 From 608ed55d87a714be9b0b9681345bd012b40db4e5 Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Tue, 17 Aug 2010 14:37:32 +0200 Subject: Cocoa: add autotest to be more safe regarding child window stacking Autotests only. Use native events on mac to check that child windows stays on top of parent windows. Reviewed-by: prasanth --- tests/auto/macnativeevents/tst_macnativeevents.cpp | 80 ++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/tests/auto/macnativeevents/tst_macnativeevents.cpp b/tests/auto/macnativeevents/tst_macnativeevents.cpp index ffd0596..ac7d661 100644 --- a/tests/auto/macnativeevents/tst_macnativeevents.cpp +++ b/tests/auto/macnativeevents/tst_macnativeevents.cpp @@ -67,6 +67,11 @@ private slots: void testDragWindow(); void testMouseEnter(); void testChildDialogInFrontOfModalParent(); +#ifdef QT_MAC_USE_COCOA + void testChildWindowInFrontOfParentWindow(); + void testChildToolWindowInFrontOfChildNormalWindow(); + void testChildWindowInFrontOfStaysOnTopParentWindow(); +#endif void testKeyPressOnToplevel(); }; @@ -308,6 +313,81 @@ void tst_MacNativeEvents::testChildDialogInFrontOfModalParent() QVERIFY(!child.isVisible()); } +#ifdef QT_MAC_USE_COCOA +void tst_MacNativeEvents::testChildWindowInFrontOfParentWindow() +{ + // Test that a child window always stacks in front of its parent window. + // Do this by first click on the parent, then on the child window button. + QWidget parent; + QPushButton child("a button", &parent); + child.setWindowFlags(Qt::Window); + connect(&child, SIGNAL(clicked()), &child, SLOT(close())); + parent.show(); + child.show(); + + QPoint parent_p = parent.geometry().bottomLeft() + QPoint(20, -20); + QPoint child_p = child.geometry().center(); + + NativeEventList native; + native.append(new QNativeMouseButtonEvent(parent_p, Qt::LeftButton, 1, Qt::NoModifier)); + native.append(new QNativeMouseButtonEvent(parent_p, Qt::LeftButton, 0, Qt::NoModifier)); + native.append(new QNativeMouseButtonEvent(child_p, Qt::LeftButton, 1, Qt::NoModifier)); + native.append(new QNativeMouseButtonEvent(child_p, Qt::LeftButton, 0, Qt::NoModifier)); + + native.play(); + QTest::qWait(100); + QVERIFY(!child.isVisible()); +} + +void tst_MacNativeEvents::testChildToolWindowInFrontOfChildNormalWindow() +{ + // Test that a child tool window always stacks in front of normal sibling windows. + // Do this by first click on the sibling, then on the tool window button. + QWidget parent; + QWidget normalChild(&parent, Qt::Window); + QPushButton toolChild("a button", &parent); + toolChild.setWindowFlags(Qt::Tool); + connect(&toolChild, SIGNAL(clicked()), &toolChild, SLOT(close())); + parent.show(); + normalChild.show(); + toolChild.show(); + + QPoint normalChild_p = normalChild.geometry().bottomLeft() + QPoint(20, -20); + QPoint toolChild_p = toolChild.geometry().center(); + + NativeEventList native; + native.append(new QNativeMouseButtonEvent(normalChild_p, Qt::LeftButton, 1, Qt::NoModifier)); + native.append(new QNativeMouseButtonEvent(normalChild_p, Qt::LeftButton, 0, Qt::NoModifier)); + native.append(new QNativeMouseButtonEvent(toolChild_p, Qt::LeftButton, 1, Qt::NoModifier)); + native.append(new QNativeMouseButtonEvent(toolChild_p, Qt::LeftButton, 0, Qt::NoModifier)); + + native.play(); + QTest::qWait(100); + QVERIFY(!toolChild.isVisible()); +} + +void tst_MacNativeEvents::testChildWindowInFrontOfStaysOnTopParentWindow() +{ + // Test that a child window stacks on top of a stays-on-top parent. + QWidget parent(0, Qt::WindowStaysOnTopHint); + QPushButton button("close", &parent); + button.setWindowFlags(Qt::Window); + connect(&button, SIGNAL(clicked()), &button, SLOT(close())); + parent.show(); + button.show(); + QPoint inside = button.geometry().center(); + + // Post a click on the button to close the child dialog: + NativeEventList native; + native.append(new QNativeMouseButtonEvent(inside, Qt::LeftButton, 1, Qt::NoModifier)); + native.append(new QNativeMouseButtonEvent(inside, Qt::LeftButton, 0, Qt::NoModifier)); + + native.play(); + QTest::qWait(100); + QVERIFY(!button.isVisible()); +} +#endif + void tst_MacNativeEvents::testKeyPressOnToplevel() { // Check that we receive keyevents for -- cgit v0.12 From ab97e11919927d38bfc2be990d2b4dd1327083ea Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 17 Aug 2010 15:15:31 +0200 Subject: qgrayraster: Remove unnecessary indirection in QT_FT_Outline_Decompose MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since this function is only used inside qgrayraster.c, we can call the gray_* functions directly instead of going through function pointers. This allows inlining trivial methods like gray_line_to() et al. Reviewed-by: Samuel Rødal --- src/gui/painting/qgrayraster.c | 44 +++++++++--------------------------------- 1 file changed, 9 insertions(+), 35 deletions(-) diff --git a/src/gui/painting/qgrayraster.c b/src/gui/painting/qgrayraster.c index 539a33c..94039fb 100644 --- a/src/gui/painting/qgrayraster.c +++ b/src/gui/painting/qgrayraster.c @@ -1355,10 +1355,6 @@ /* */ /* outline :: A pointer to the source target. */ /* */ - /* func_interface :: A table of `emitters', i.e,. function pointers */ - /* called during decomposition to indicate path */ - /* operations. */ - /* */ /* user :: A typeless pointer which is passed to each */ /* emitter during the decomposition. It can be */ /* used to store the state during the */ @@ -1369,15 +1365,10 @@ /* */ static int QT_FT_Outline_Decompose( const QT_FT_Outline* outline, - const QT_FT_Outline_Funcs* func_interface, void* user ) { #undef SCALED -#if 0 -#define SCALED( x ) ( ( (x) << shift ) - delta ) -#else #define SCALED( x ) (x) -#endif QT_FT_Vector v_last; QT_FT_Vector v_control; @@ -1392,12 +1383,6 @@ int error; char tag; /* current point's state */ -#if 0 - int shift = func_interface->shift; - TPos delta = func_interface->delta; -#endif - - first = 0; for ( n = 0; n < outline->n_contours; n++ ) @@ -1451,7 +1436,7 @@ tags--; } - error = func_interface->move_to( &v_start, user ); + error = gray_move_to( &v_start, user ); if ( error ) goto Exit; @@ -1471,7 +1456,7 @@ vec.x = SCALED( point->x ); vec.y = SCALED( point->y ); - error = func_interface->line_to( &vec, user ); + error = gray_line_to( &vec, user ); if ( error ) goto Exit; continue; @@ -1498,7 +1483,7 @@ if ( tag == QT_FT_CURVE_TAG_ON ) { - error = func_interface->conic_to( &v_control, &vec, + error = gray_conic_to( &v_control, &vec, user ); if ( error ) goto Exit; @@ -1511,7 +1496,7 @@ v_middle.x = ( v_control.x + vec.x ) / 2; v_middle.y = ( v_control.y + vec.y ) / 2; - error = func_interface->conic_to( &v_control, &v_middle, + error = gray_conic_to( &v_control, &v_middle, user ); if ( error ) goto Exit; @@ -1520,7 +1505,7 @@ goto Do_Conic; } - error = func_interface->conic_to( &v_control, &v_start, + error = gray_conic_to( &v_control, &v_start, user ); goto Close; } @@ -1551,20 +1536,20 @@ vec.x = SCALED( point->x ); vec.y = SCALED( point->y ); - error = func_interface->cubic_to( &vec1, &vec2, &vec, user ); + error = gray_cubic_to( &vec1, &vec2, &vec, user ); if ( error ) goto Exit; continue; } - error = func_interface->cubic_to( &vec1, &vec2, &v_start, user ); + error = gray_cubic_to( &vec1, &vec2, &v_start, user ); goto Close; } } } /* close the contour with a line segment */ - error = func_interface->line_to( &v_start, user ); + error = gray_line_to( &v_start, user ); Close: if ( error ) @@ -1592,22 +1577,11 @@ static int gray_convert_glyph_inner( RAS_ARG ) { - static - const QT_FT_Outline_Funcs func_interface = - { - (QT_FT_Outline_MoveTo_Func) gray_move_to, - (QT_FT_Outline_LineTo_Func) gray_line_to, - (QT_FT_Outline_ConicTo_Func)gray_conic_to, - (QT_FT_Outline_CubicTo_Func)gray_cubic_to, - 0, - 0 - }; - volatile int error = 0; if ( qt_ft_setjmp( ras.jump_buffer ) == 0 ) { - error = QT_FT_Outline_Decompose( &ras.outline, &func_interface, &ras ); + error = QT_FT_Outline_Decompose( &ras.outline, &ras ); gray_record_cell( RAS_VAR ); } else -- cgit v0.12 From acfa3c743c23ca2443d618bda6f3c01f78777b77 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Tue, 17 Aug 2010 16:31:14 +0200 Subject: Add tests/benchmarks/README With some information from the dev mailing list. Reviewed-by: Thiago --- tests/benchmarks/README | 81 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 tests/benchmarks/README diff --git a/tests/benchmarks/README b/tests/benchmarks/README new file mode 100644 index 0000000..d437299 --- /dev/null +++ b/tests/benchmarks/README @@ -0,0 +1,81 @@ +The most reliable way of running benchmarks is to do it in an otherwise idle +system. On a busy system, the results will vary according to the other tasks +demanding attention in the system. + +We have managed to obtain quite reliable results by doing the following on +Linux (and you need root): + + - switching the scheduler to a Real-Time mode + - setting the processor affinity to one single processor + - disabling the other thread of the same core + +This should work rather well for CPU-intensive tasks. A task that is in Real- +Time mode will simply not be preempted by the OS. But if you make OS syscalls, +especially I/O ones, your task will be de-scheduled. Note that this includes +page faults, so if you can, make sure your benchmark's warmup code paths touch +most of the data. + +To do this you need a tool called schedtool (package schedtool), from +http://freequaos.host.sk/schedtool/ + +From this point on, we are using CPU0 for all tasks: + +If you have a Hyperthreaded multi-core processor (Core-i5 and Core-i7), you +have to disable the other thread of the same core as CPU0. To discover which +one it is: + +$ cat /sys/devices/system/cpu/cpu0/topology/thread_siblings_list + +This will print something like 0,4, meaning that CPUs 0 and 4 are sibling +threads on the same core. So we'll turn CPU 4 off: + +(as root) +# echo 0 > /sys/devices/system/cpu/cpu4/online + +To turn it back on, echo 1 into the same file. + +To run a task on CPU 0 exclusively, using FIFO RT priority 10, you run the +following: + +(as root) +# schedtool -F -p 10 -a 1 -e ./taskname + +For example: +# schedtool -F -p 10 -a 1 -e ./tst_bench_qstring -tickcounter + +Warning: if your task livelocks or takes far too long to complete, your system +may be unusable for a long time, especially if you don't have other cores to +run stuff on. To prevent that, run it before schedtool and time it. + +You can also limit the CPU time that the task is allowed to take. Run in the +same shell as you'll run schedtool: + +$ ulimit -s 300 +To limit to 300 seconds (5 minutes) + +If your task runs away, it will get a SIGXCPU after consuming 5 minutes of CPU +time (5 minutes running at 100%). + +If your app is multithreaded, you may want to give it more CPUs, like CPU0 and +CPU1 with -a 3 (it's a bitmask). + +For best results, you should disable ALL other cores and threads of the same +processor. The new Core-i7 have one processor with 4 cores, +each core can run 2 threads; the older Mac Pros have two processors with 4 +cores each. So on those Mac Pros, you'd disable cores 1, 2 and 3, while on the +Core-i7, you'll need to disable all other CPUs. + +However, disabling just the sibling thread seems to produce very reliable +results for me already, with variance often below 0.5% (even though there are +some measurable spikes). + +Other things to try: + +Running the benchmark with highest priority, i.e. "sudo nice -19" +usually produces stable results on some machines. If the benchmark also +involves displaying something on the screen (on X11), running it with +"-sync" is a must. Though, in that case the "real" cost is not correct, +but it is useful to discover regressions. + +Also; not many people know about ionice (1) + ionice - get/set program io scheduling class and priority -- cgit v0.12 From db41f54d5cfe9e1cfa13c78536718ca34f008284 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 17 Aug 2010 16:46:21 +0200 Subject: make error messages consistent this re-uses an existing string and obsoletes another one, so it is ok during string freeze. --- tools/assistant/tools/assistant/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/assistant/tools/assistant/main.cpp b/tools/assistant/tools/assistant/main.cpp index 51ea9f9..02507ae 100644 --- a/tools/assistant/tools/assistant/main.cpp +++ b/tools/assistant/tools/assistant/main.cpp @@ -355,7 +355,7 @@ int main(int argc, char *argv[]) QHelpEngineCore cachedCollection(cachedCollectionFile); if (!cachedCollection.setupData()) { cmd.showMessage(QCoreApplication::translate("Assistant", - "Error reading collection file '%1': %2"). + "Error reading collection file '%1': %2."). arg(cachedCollectionFile). arg(cachedCollection.error()), true); return EXIT_FAILURE; -- cgit v0.12 From 5eaf1f41b17eb6f73420f1a9a5e48957015d2e4e Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Sat, 26 Jun 2010 14:34:49 +0200 Subject: Fixes QWS window decoration offset issues When using OpenGL ES in conjunction with Qt/Embedded, Q_BACKINGSTORE_SUBSURFACES is defined and the subsequent code path shared between this define and QWS defines results in window decoration offset errors. Merge-request: 714 Reviewed-by: Donald Carr --- src/gui/painting/qbackingstore.cpp | 9 ++++++++- src/gui/painting/qwindowsurface_qws.cpp | 6 +++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/gui/painting/qbackingstore.cpp b/src/gui/painting/qbackingstore.cpp index 83751ed..446c867 100644 --- a/src/gui/painting/qbackingstore.cpp +++ b/src/gui/painting/qbackingstore.cpp @@ -353,8 +353,10 @@ void QWidgetBackingStore::beginPaint(QRegion &toClean, QWidget *widget, QWindowS dirtyOnScreen += toClean; #ifdef Q_WS_QWS +#ifndef Q_BACKINGSTORE_SUBSURFACES toClean.translate(tlwOffset); #endif +#endif #ifdef QT_NO_PAINT_DEBUG windowSurface->beginPaint(toClean); @@ -1294,7 +1296,12 @@ void QWidgetBackingStore::sync() #ifdef Q_BACKINGSTORE_SUBSURFACES QWindowSurface *subSurface = w->windowSurface(); BeginPaintInfo beginPaintInfo; - beginPaint(toBePainted, w, subSurface, &beginPaintInfo, false); + + QPoint off = w->mapTo(tlw, QPoint()); + toBePainted.translate(off); + beginPaint(toBePainted, w, subSurface, &beginPaintInfo, true); + toBePainted.translate(-off); + if (beginPaintInfo.nothingToPaint) continue; diff --git a/src/gui/painting/qwindowsurface_qws.cpp b/src/gui/painting/qwindowsurface_qws.cpp index a816ed2..170668b 100644 --- a/src/gui/painting/qwindowsurface_qws.cpp +++ b/src/gui/painting/qwindowsurface_qws.cpp @@ -882,7 +882,11 @@ void QWSMemorySurface::beginPaint(const QRegion &rgn) const QVector rects = rgn.rects(); const QColor blank = Qt::transparent; for (QVector::const_iterator it = rects.begin(); it != rects.end(); ++it) { - p.fillRect(*it, blank); + QRect r = *it; +#ifdef Q_BACKINGSTORE_SUBSURFACES + r.translate(painterOffset()); +#endif + p.fillRect(r, blank); } } QWSWindowSurface::beginPaint(rgn); -- cgit v0.12 From b2056bcd48aa2288f1879de4d0f53cff443e4b16 Mon Sep 17 00:00:00 2001 From: Donald Carr Date: Mon, 16 Aug 2010 23:38:18 +0000 Subject: Adjusted define styling Adjusted multi-line define to single conjugated define in order to conform to the rest of the modified file. --- src/gui/painting/qbackingstore.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/gui/painting/qbackingstore.cpp b/src/gui/painting/qbackingstore.cpp index 446c867..ac9b994 100644 --- a/src/gui/painting/qbackingstore.cpp +++ b/src/gui/painting/qbackingstore.cpp @@ -352,11 +352,9 @@ void QWidgetBackingStore::beginPaint(QRegion &toClean, QWidget *widget, QWindowS // Always flush repainted areas. dirtyOnScreen += toClean; -#ifdef Q_WS_QWS -#ifndef Q_BACKINGSTORE_SUBSURFACES +#if defined(Q_WS_QWS) && !defined(Q_BACKINGSTORE_SUBSURFACES) toClean.translate(tlwOffset); #endif -#endif #ifdef QT_NO_PAINT_DEBUG windowSurface->beginPaint(toClean); -- cgit v0.12 From 569b28760ba84a2cc5315bf06c173035dc14afc6 Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Tue, 17 Aug 2010 17:30:34 +0200 Subject: Cocoa, Autotest: disable autotest that was added a bit premature The test is actually correct, but cannot be enabled before a second revision on the setStackingOrder function in qwidget_mac.mm has been rewritten to handle inter-child window stacking order Reviewed-by: prasanth --- tests/auto/macnativeevents/tst_macnativeevents.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/auto/macnativeevents/tst_macnativeevents.cpp b/tests/auto/macnativeevents/tst_macnativeevents.cpp index ac7d661..d582417 100644 --- a/tests/auto/macnativeevents/tst_macnativeevents.cpp +++ b/tests/auto/macnativeevents/tst_macnativeevents.cpp @@ -69,7 +69,7 @@ private slots: void testChildDialogInFrontOfModalParent(); #ifdef QT_MAC_USE_COCOA void testChildWindowInFrontOfParentWindow(); - void testChildToolWindowInFrontOfChildNormalWindow(); +// void testChildToolWindowInFrontOfChildNormalWindow(); void testChildWindowInFrontOfStaysOnTopParentWindow(); #endif void testKeyPressOnToplevel(); @@ -339,6 +339,7 @@ void tst_MacNativeEvents::testChildWindowInFrontOfParentWindow() QVERIFY(!child.isVisible()); } +/* This test can be enabled once setStackingOrder has been fixed in qwidget_mac.mm void tst_MacNativeEvents::testChildToolWindowInFrontOfChildNormalWindow() { // Test that a child tool window always stacks in front of normal sibling windows. @@ -365,7 +366,7 @@ void tst_MacNativeEvents::testChildToolWindowInFrontOfChildNormalWindow() QTest::qWait(100); QVERIFY(!toolChild.isVisible()); } - +*/ void tst_MacNativeEvents::testChildWindowInFrontOfStaysOnTopParentWindow() { // Test that a child window stacks on top of a stays-on-top parent. -- cgit v0.12 From 749ad26d255327c9fa3fe857a30983cc6dfef0d9 Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Tue, 17 Aug 2010 17:33:42 +0200 Subject: Cocoa: revert parts of cc6dc0aeefde881a95f5fea2b26f2f3d7bdc6e15 The reason is that we tried to fix the stacking order of child windows while we fixed a crash. But the patch turned out to break an auto-test Reviewed-by: prasanth --- src/gui/kernel/qwidget_mac.mm | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm index 4ed4ccc..1979c84 100644 --- a/src/gui/kernel/qwidget_mac.mm +++ b/src/gui/kernel/qwidget_mac.mm @@ -2799,9 +2799,7 @@ void QWidgetPrivate::setSubWindowStacking(bool set) if (set) { if (parent->isVisible()) { NSWindow *childwin = qt_mac_window_for(q); - int childLevel = [childwin level]; [qt_mac_window_for(parent) addChildWindow:childwin ordered:NSWindowAbove]; - [childwin setLevel:childLevel]; } } else { [qt_mac_window_for(parent) removeChildWindow:qt_mac_window_for(q)]; @@ -2815,9 +2813,7 @@ void QWidgetPrivate::setSubWindowStacking(bool set) if (child->isWindow() && child->testAttribute(Qt::WA_WState_Created) && child->isVisibleTo(q)) { if (set) { NSWindow *childwin = qt_mac_window_for(child); - int childLevel = [childwin level]; [qt_mac_window_for(q) addChildWindow:childwin ordered:NSWindowAbove]; - [childwin setLevel:childLevel]; } else { [qt_mac_window_for(q) removeChildWindow:qt_mac_window_for(child)]; } -- cgit v0.12 From 837b6bba916c39665884e4967d70808f863c4487 Mon Sep 17 00:00:00 2001 From: Benjamin Poulain Date: Tue, 17 Aug 2010 19:05:35 +0200 Subject: Fix the blending of ARGB_PM image when using palignr to load the data The data loaded for the first were incorrect because the offset was incorrect. The correct offset should be up to the alignment point. Instead of trying to load a temporary array, we just move one vector further since we know reading there is always safe. Reviewed-by: Andreas Kling --- src/gui/painting/qdrawhelper_ssse3.cpp | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/src/gui/painting/qdrawhelper_ssse3.cpp b/src/gui/painting/qdrawhelper_ssse3.cpp index bc4a7eb8..9c02009 100644 --- a/src/gui/painting/qdrawhelper_ssse3.cpp +++ b/src/gui/painting/qdrawhelper_ssse3.cpp @@ -118,22 +118,12 @@ inline static void blend_pixel(quint32 &dst, const quint32 src) \ /* We use two vectors to extract the src: prevLoaded for the first pixels, lastLoaded for the current pixels. */\ __m128i srcVectorPrevLoaded;\ - if (minusOffsetToAlignSrcOn16Bytes <= prologLength) {\ - srcVectorPrevLoaded = _mm_load_si128((__m128i *)&src[x - minusOffsetToAlignSrcOn16Bytes]);\ - } else {\ - quint32 temp[4] Q_DECL_ALIGN(16);\ - switch (prologLength) {\ - case 3:\ - temp[1] = src[x - 3];\ - case 2:\ - temp[2] = src[x - 2];\ - case 1:\ - temp[3] = src[x - 1];\ - default:\ - break;\ - }\ - srcVectorPrevLoaded = _mm_load_si128((__m128i *)temp);\ + if (minusOffsetToAlignSrcOn16Bytes > prologLength) {\ + /* We go forward 4 pixels to avoid reading before src. */\ + for (; x < prologLength + 4; ++x)\ + blend_pixel(dst[x], src[x]); \ }\ + srcVectorPrevLoaded = _mm_load_si128((__m128i *)&src[x - minusOffsetToAlignSrcOn16Bytes]);\ const int palignrOffset = minusOffsetToAlignSrcOn16Bytes << 2;\ \ const __m128i alphaShuffleMask = _mm_set_epi8(0xff,15,0xff,15,0xff,11,0xff,11,0xff,7,0xff,7,0xff,3,0xff,3);\ -- cgit v0.12 From 401ff4b290fcff0ef599af5986bc0b7816380575 Mon Sep 17 00:00:00 2001 From: Joona Petrell Date: Wed, 18 Aug 2010 15:12:31 +1000 Subject: Add visible background element to declarative examples that didn't have any Invisible areas cause redraw artifacts with OpenVg paint engine. Task-number: Reviewed-by: Martin Jones --- examples/declarative/modelviews/package/view.qml | 3 +- examples/declarative/sqllocalstorage/hello.qml | 48 ++++++++++++---------- .../threading/threadedlistmodel/timedisplay.qml | 40 ++++++++++-------- 3 files changed, 51 insertions(+), 40 deletions(-) diff --git a/examples/declarative/modelviews/package/view.qml b/examples/declarative/modelviews/package/view.qml index 152881a..26230ef 100644 --- a/examples/declarative/modelviews/package/view.qml +++ b/examples/declarative/modelviews/package/view.qml @@ -40,7 +40,8 @@ import Qt 4.7 -Item { +Rectangle { + color: "white" width: 400 height: 200 diff --git a/examples/declarative/sqllocalstorage/hello.qml b/examples/declarative/sqllocalstorage/hello.qml index 421a74c..19b7378 100644 --- a/examples/declarative/sqllocalstorage/hello.qml +++ b/examples/declarative/sqllocalstorage/hello.qml @@ -40,32 +40,38 @@ //![0] import Qt 4.7 -Text { - text: "?" +Rectangle { + color: "white" + width: 200 + height: 100 + + Text { + text: "?" + anchors.horizontalCenter: parent.horizontalCenter + function findGreetings() { + var db = openDatabaseSync("QDeclarativeExampleDB", "1.0", "The Example QML SQL!", 1000000); - function findGreetings() { - var db = openDatabaseSync("QDeclarativeExampleDB", "1.0", "The Example QML SQL!", 1000000); + db.transaction( + function(tx) { + // Create the database if it doesn't already exist + tx.executeSql('CREATE TABLE IF NOT EXISTS Greeting(salutation TEXT, salutee TEXT)'); - db.transaction( - function(tx) { - // Create the database if it doesn't already exist - tx.executeSql('CREATE TABLE IF NOT EXISTS Greeting(salutation TEXT, salutee TEXT)'); + // Add (another) greeting row + tx.executeSql('INSERT INTO Greeting VALUES(?, ?)', [ 'hello', 'world' ]); - // Add (another) greeting row - tx.executeSql('INSERT INTO Greeting VALUES(?, ?)', [ 'hello', 'world' ]); + // Show all added greetings + var rs = tx.executeSql('SELECT * FROM Greeting'); - // Show all added greetings - var rs = tx.executeSql('SELECT * FROM Greeting'); - - var r = "" - for(var i = 0; i < rs.rows.length; i++) { - r += rs.rows.item(i).salutation + ", " + rs.rows.item(i).salutee + "\n" + var r = "" + for(var i = 0; i < rs.rows.length; i++) { + r += rs.rows.item(i).salutation + ", " + rs.rows.item(i).salutee + "\n" + } + text = r } - text = r - } - ) - } + ) + } - Component.onCompleted: findGreetings() + Component.onCompleted: findGreetings() + } } //![0] diff --git a/examples/declarative/threading/threadedlistmodel/timedisplay.qml b/examples/declarative/threading/threadedlistmodel/timedisplay.qml index 997f7a0..9fc3eb3 100644 --- a/examples/declarative/threading/threadedlistmodel/timedisplay.qml +++ b/examples/declarative/threading/threadedlistmodel/timedisplay.qml @@ -41,31 +41,35 @@ // ![0] import Qt 4.7 -ListView { +Rectangle { + color: "white" width: 200 height: 300 - model: listModel - delegate: Component { - Text { text: time } - } + ListView { - ListModel { id: listModel } + model: listModel + delegate: Component { + Text { text: time } + } - WorkerScript { - id: worker - source: "dataloader.js" - } + ListModel { id: listModel } + + WorkerScript { + id: worker + source: "dataloader.js" + } - Timer { - id: timer - interval: 2000; repeat: true - running: true - triggeredOnStart: true + Timer { + id: timer + interval: 2000; repeat: true + running: true + triggeredOnStart: true - onTriggered: { - var msg = {'action': 'appendCurrentTime', 'model': listModel}; - worker.sendMessage(msg); + onTriggered: { + var msg = {'action': 'appendCurrentTime', 'model': listModel}; + worker.sendMessage(msg); + } } } } -- cgit v0.12 From a082d8ee8d27aaa190d28c2493b8f0326e2c9724 Mon Sep 17 00:00:00 2001 From: Joona Petrell Date: Wed, 18 Aug 2010 15:22:36 +1000 Subject: Fix previous commit Task-number: Reviewed-by: Trust me --- examples/declarative/threading/threadedlistmodel/timedisplay.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/declarative/threading/threadedlistmodel/timedisplay.qml b/examples/declarative/threading/threadedlistmodel/timedisplay.qml index 9fc3eb3..d807955 100644 --- a/examples/declarative/threading/threadedlistmodel/timedisplay.qml +++ b/examples/declarative/threading/threadedlistmodel/timedisplay.qml @@ -47,7 +47,7 @@ Rectangle { height: 300 ListView { - + anchors.fill: parent model: listModel delegate: Component { Text { text: time } -- cgit v0.12 From cea26da032449d6eed252890721c230fb9ad8dd3 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 18 Aug 2010 10:47:03 +0200 Subject: Update Polish translations --- translations/designer_pl.ts | 1332 ---------------------- translations/qt_pl.ts | 2635 +------------------------------------------ 2 files changed, 19 insertions(+), 3948 deletions(-) diff --git a/translations/designer_pl.ts b/translations/designer_pl.ts index cadcc2b..59b5baf 100644 --- a/translations/designer_pl.ts +++ b/translations/designer_pl.ts @@ -4,27 +4,22 @@ AbstractFindWidget - &Previous &Poprzednie - &Next &Następne - &Case sensitive Uwzględniaj &wielkość liter - Whole &words &Całe słowa - <img src=":/trolltech/shared/images/wrap.png">&nbsp;Search wrapped <img src=":/trolltech/shared/images/wrap.png">&nbsp;Przeszukano od początku @@ -32,17 +27,14 @@ AddLinkDialog - Insert Link Wstaw odsyłacz - Title: Tytuł: - URL: Adres URL: @@ -50,7 +42,6 @@ AppFontDialog - Additional Fonts Dodatkowe czcionki @@ -58,37 +49,30 @@ AppFontManager - '%1' is not a file. '%1' nie jest plikiem. - The font file '%1' does not have read permissions. Plik z czcionką '%1' nie ma praw do odczytu. - The font file '%1' is already loaded. Plik z czcionką '%1' jest już wczytany. - The font file '%1' could not be loaded. Nie można wczytać pliku z czcionką %1. - '%1' is not a valid font id. '%1' nie jest poprawnym identyfikatorem czcionki. - There is no loaded font matching the id '%1'. Brak wczytanej czcionki o identyfikatorze '%1'. - The font '%1' (%2) could not be unloaded. Nie można usunąć czcionki '%1' (%2). @@ -96,52 +80,42 @@ AppFontWidget - Fonts Czcionki - Add font files Dodaj pliki z czcionkami - Remove current font file Usuń bieżący plik z czcionką - Remove all font files Usuń wszystkie pliki z czcionkami - Add Font Files Dodaj pliki z czcionkami - Font files (*.ttf) Pliki z czcionkami (*.ttf) - Error Adding Fonts Błąd podczas dodawania czcionek - Error Removing Fonts Błąd podczas usuwania czcionek - Remove Fonts Unuń czcionki - Would you like to remove all fonts? Czy chcesz usunąć wszystkie czcionki? @@ -149,12 +123,10 @@ AppearanceOptionsWidget - Form Formularz - User Interface Mode Tryb interfejsu użytkownika @@ -162,17 +134,14 @@ AssistantClient - Unable to send request: Assistant is not responding. Nie można wysłac komendy. Asystent nie odpowiada. - The binary '%1' does not exist. Plik binarny '%1' nie istnieje. - Unable to launch assistant (%1). Nie można uruchomić asystenta (%1). @@ -180,92 +149,74 @@ BrushPropertyManager - No brush Brak szczotki - Solid Jednolity - Dense 1 Gęstość 1 - Dense 2 Gęstość 2 - Dense 3 Gęstość 3 - Dense 4 Gęstość 4 - Dense 5 Gęstość 5 - Dense 6 Gęstość 6 - Dense 7 Gęstość 7 - Horizontal Poziomo - Vertical Pionowo - Cross Krzyżyk - Backward diagonal Linie pochylone w prawo - Forward diagonal Linie pochylone w lewo - Crossing diagonal Linie krzyżujące się - Style Styl - Color Kolor - [%1, %2] [%1, %2] @@ -273,360 +224,277 @@ Command - - Change signal Zmień sygnał - - Change slot Zmień slot - Change signal-slot connection Zmień połączenie sygnału ze slotem - Change sender Zmień nadawcę - Change receiver Zmień odbiorcę - Add connection Dodaj połączenie - Adjust connection Dopasuj połączenie - Delete connections Usuń połączenia - Change source Zmień źródło - Change target Zmień przeznaczenie - Insert '%1' Wstaw '%1' - Raise '%1' Przenieś na wierzch '%1' - Lower '%1' Przenieś na spód '%1' - Delete '%1' Usuń '%1' - Reparent '%1' Zmień rodzica '%1' - Promote to custom widget Zastąp widżet - Demote from custom widget Przywróć do oryginalnego widżetu - Lay out using grid Rozmieść używając siatki - Lay out vertically Rozmieść w pionie - Lay out horizontally Rozmieść w poziomie - Break layout Usuń rozmieszczenie - - - Move Page Przenieś stronę - - - - Delete Page Usuń stronę - - Page Strona - page strona - - - - Insert Page Wstaw stronę - Change Tab order Zmień kolejność tabulacji - Create Menu Bar Utwórz pasek menu - Delete Menu Bar Usuń pasek menu - Create Status Bar Utwórz pasek stanu - Delete Status Bar Usuń pasek stanu - Add Tool Bar Dodaj pasek narzędzi - Add Dock Window Dodaj okno dokowalne - Adjust Size of '%1' Dopasuj rozmiar '%1' - Change Form Layout Item Geometry Zmień geometrię elementu w formularzu - Change Layout Item Geometry Zmień geometrię elementu w rozmieszczeniu - Change Table Contents Zmień zawartość tabeli - Change Tree Contents Zmień zawartość drzewa - - Add action Dodaj akcję - - Remove action Usuń akcję - Add menu Dodaj menu - Remove menu Usuń menu - Create submenu Utwórz podmenu - Delete Tool Bar Usuń pasek narzędzi - Set action text Ustaw tekst akcji - Insert action Wstaw akcję - - Move action Przenieś akcję - Change Title Zmień tytuł - Insert Menu Wstaw menu - Change signals/slots Zmień sygnały/sloty - Delete Subwindow Usuń podokno - Insert Subwindow Wstaw podokno - subwindow podokno - Subwindow Podokno - Change Z-order of '%1' Zmień porządek głębokości (Z-order) dla '%1' - Simplify Grid Layout Uprość rozmieszczenie w siatce - Create button group Utwórz grupę przycisków - Break button group Usuń grupę przycisków - Break button group '%1' Usuń grupę przycisków '%1' - Add buttons to group Dodaj przyciski do grupy - - Add '%1' to '%2' Command description for adding buttons to a QButtonGroup Dodaj '%1' do '%2' - Remove buttons from group Usuń przyciski z grupy - Remove '%1' from '%2' Command description for removing buttons from a QButtonGroup Usuń '%1' z '%2' - Morph %1/'%2' into %3 MorphWidgetCommand description Przekształć %1/%2 w %3 - Change layout of '%1' from %2 to %3 Zmień rozmieszczenie widżetu '%1' z %2 na %3 - Change script Zmień skrypt - Changed '%1' of '%2' Zmień '%1' w '%2' - Changed '%1' of %n objects Zmieniono '%1' w %n obiekcie @@ -635,12 +503,10 @@ - Reset '%1' of '%2' Przywróć domyślną wartość '%1' w '%2' - Reset '%1' of %n objects Przywrócono domyślną wartość '%1' w '%n' obiekcie @@ -649,12 +515,10 @@ - Add dynamic property '%1' to '%2' Dodaj dynamiczną właściwość '%1' do '%2' - Add dynamic property '%1' to %n objects Dodaj dynamiczną właściwość '%1' do %n obiektu @@ -663,12 +527,10 @@ - Remove dynamic property '%1' from '%2' Usuń dynamiczną właściwość '%1' z '%2' - Remove dynamic property '%1' from %n objects Usuń dynamiczną właściwość '%1' z %n obiektu @@ -680,22 +542,18 @@ ConnectDialog - Configure Connection Skonfiguruj połączenie - GroupBox GroupBox - Edit... Edycja... - Show signals and slots inherited from QWidget Pokaż sygnały i sloty klasy QWidget @@ -703,17 +561,14 @@ ConnectionDelegate - <object> <obiekt> - <signal> <sygnał> - <slot> <slot> @@ -721,19 +576,16 @@ DPI_Chooser - Standard (96 x 96) Embedded device standard screen resolution Standardowa (96 x 96) - Greenphone (179 x 185) Embedded device screen resolution Greenphone'a (179 x 185) - High (192 x 192) Embedded device high definition screen resolution Wysoka (192 x 192) @@ -742,89 +594,72 @@ Designer - Qt Designer Qt Designer - Custom Widgets Własne widżety - Promoted Widgets Zastępcze widżety - Unable to launch %1. Nie można uruchomić %1. - %1 timed out. %1 przekroczony czas operacji. - This file cannot be read because it was created using %1. Nie można odczytać pliku ponieważ został utworzony przy użyciu %1. - This file cannot be read because the extra info extension failed to load. Nie można odczytać pliku ponieważ dodatkowe informacje nie mogły zostać załadowane. - The converted file could not be read. Nie można odczytać skonwertowanego pliku. - Invalid UI file: The root element <ui> is missing. Niepoprawny plik UI: brak głównego elementu <ui>. - An error has occurred while reading the UI file at line %1, column %2: %3 Wystąpił błąd podczas czytania zawartości pliku UI, linia %1, kolumna %2: %3 - This file was created using Designer from Qt-%1 and cannot be read. Ten plik został utworzony za pomocą Qt Designer w wersji %1 i nie można go odczytać. - This file contains top level spacers.<br>They have <b>NOT</b> been saved into the form. Ten plik zawiera dystansy na najwyższym poziomie.<br><b>NIE</b> zostały one jednak zachowane w pliku. - Perhaps you forgot to create a layout? Możliwe że zapomniałeś utworzyć rozmieszczenia? - This file was created using Designer from Qt-%1 and will be converted to a new form by Qt Designer. Ten plik został utworzony za pomocą Qt Designer w wersji %1 i będzie skonwertowany przez Qt Designer'a do nowego formularza. - The old form has not been touched, but you will have to save the form under a new name. Stary formularz nie był zmieniony, ale nowy będzie musiał być zapisany pod nową nazwą. - This file was created using Designer from Qt-%1 and could not be read: %2 Ten plik został utworzony za pomocą Qt Designer w wersji %1 i nie można go odczytać. %2 - Please run it through <b>uic3&nbsp;-convert</b> to convert it to Qt-4's ui format. Uruchom go przez <b>uic3&nbsp;-convert</b> aby skonwertować do formatu Qt-4. @@ -832,12 +667,10 @@ DesignerMetaEnum - %1 is not a valid enumeration value of '%2'. %1 nie jest poprawną wartością typu wyliczeniowego '%2'. - '%1' could not be converted to an enumeration value of type '%2'. Nie można skonwertować '%1' do wartości typu wyliczeniowego '%2'. @@ -845,7 +678,6 @@ DesignerMetaFlags - '%1' could not be converted to a flag value of type '%2'. Nie można skonwertować '%1' do wartości typu flaga '%2'. @@ -853,13 +685,11 @@ DeviceProfile - '%1' is not a number. Reading a number for an embedded device profile '%1' nie jest liczbą. - An invalid tag <%1> was encountered. Napotkano niepoprawny tag <%1>. @@ -867,27 +697,22 @@ DeviceProfileDialog - &Family &Rodzina - &Point Size &Wielkość punktu - Style Styl - Device DPI Rozdzielczość urządzenia - Name Nazwa @@ -895,57 +720,46 @@ DeviceSkin - The image file '%1' could not be loaded. Nie można wczytać pliku z obrazkiem %1. - The skin directory '%1' does not contain a configuration file. Katalog ze skórkami (skin) '%1' nie zawiera pliku konfiguracyjnego. - The skin configuration file '%1' could not be opened. Nie można otworzyć pliku z konfiguracją skórki (skin) '%1'. - Syntax error: %1 Błąd składni: %1 - The skin cursor image file '%1' does not exist. Plik z obrazkiem kursora '%1' dla skórki (skin) nie istnieje. - Syntax error in area definition: %1 Błąd składni w definicji obszaru: %1 - Mismatch in number of areas, expected %1, got %2. Niezgodność w ilości obszarów, spodziewano się %1, otrzymano %2. - The skin configuration file '%1' could not be read: %2 Nie można odczytać pliku z konfiguracją skórki (skin) '%1', powód: %2 - The skin "up" image file '%1' does not exist. Plik z obrazkiem "do góry" '%1' dla skórki (skin) nie istnieje. - The skin "down" image file '%1' does not exist. Plik z obrazkiem "w dół" '%1' dla skórki (skin) nie istnieje. - The skin "closed" image file '%1' does not exist. Plik z obrazkiem "zamknięte" '%1' dla skórki (skin) nie istnieje. @@ -953,7 +767,6 @@ EmbeddedOptionsControl - <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>Font</b></td><td>%1, %2</td></tr><tr><td><b>Styl</b></td><td>%3</td></tr><tr><td><b>Rozdzielczość</b></td><td>%4 x %5</td></tr></table></html> @@ -962,13 +775,11 @@ EmbeddedOptionsPage - Embedded Design Tab in preferences dialog Projekt dla urządzeń specjalizowanych - Device Profiles EmbeddedOptionsControl group box" Profile urządzeń @@ -977,27 +788,22 @@ FontPanel - Font Czcionka - &Writing system Sys&tem pisania - &Family &Rodzina - &Style &Styl - &Point size &Wielkość punktu @@ -1005,22 +811,18 @@ FontPropertyManager - PreferDefault Preferuj domyślny - NoAntialias Brak antyaliasingu - PreferAntialias Preferuj antyaliasing - Antialiasing Antyaliasing @@ -1028,7 +830,6 @@ FormBuilder - Invalid stretch value for '%1': '%2' Parsing layout stretch values ---------- @@ -1038,7 +839,6 @@ Parsing layout stretch values Niepoprawna wartość rozciągniecia dla '%1': '%2' - Invalid minimum size for '%1': '%2' Parsing grid layout minimum size values ---------- @@ -1051,28 +851,23 @@ Parsing grid layout minimum size values FormEditorOptionsPage - %1 % %1 % - Preview Zoom Powiększanie podglądu - Default Zoom Domyślne powiększenie - Forms Tab in preferences dialog Formularze - Default Grid Domyślna siatka @@ -1080,37 +875,30 @@ Parsing grid layout minimum size values FormLayoutRowDialog - Add Form Layout Row Dodaj wiersz do formularza - &Label text: Text &etykiety: - Field &type: &Typ pola: - &Field name: Nazwa &pola: - &Buddy: Etykieta &skojarzona: - &Row: &Wiersz: - Label &name: &Nazwa etykiety: @@ -1118,12 +906,10 @@ Parsing grid layout minimum size values FormWindow - Unexpected element <%1> Niespodziewany element <%1> - Error while pasting clipboard contents at line %1, column %2: %3 Błąd podczas wklejania zawartości schowka, linia %1, kolumna %2: %3 @@ -1131,62 +917,50 @@ Parsing grid layout minimum size values FormWindowSettings - Form Settings Ustawienia formularza - &Pixmap Function Funkcja ustawiania &pixmapy - &Include Hints Dodatkowe pliki &nagłówkowe - Embedded Design Projekt dla urządzeń specjalizowanych - &Author &Autor - Layout &Default &Rozmieszczenie domyślne - &Spacing: &Odstępy: - &Margin: &Marginesy: - &Layout Function Funkcja &rozmieszczania widżetów - Ma&rgin: Ma&rginesy: - Spa&cing: Od&stępy: - Grid Siatka @@ -1194,7 +968,6 @@ Parsing grid layout minimum size values IconSelector - All Pixmaps ( Wszystkie pixmapy ( @@ -1202,7 +975,6 @@ Parsing grid layout minimum size values ItemPropertyBrowser - XX Icon Selected off Sample string to determinate the width for the first column of the list item property browser XX ikona wybrana wyłączona @@ -1211,33 +983,27 @@ Parsing grid layout minimum size values MainWindowBase - Main Not currently used (main tool bar) Główny - File Plik - Edit Edycja - Tools Narzędzia - Form Formularz - Qt Designer Qt Designer @@ -1245,52 +1011,42 @@ Parsing grid layout minimum size values NewForm - New Form Nowy formularz - &Open... &Otwórz... - C&reate &Utwórz - &Close Za&mknij - Show this Dialog on Startup Pokazuj to okno przy uruchamianiu - Recent Ostatnie - &Recent Forms Os&tatnio edytowane formularze - Read error Błąd odczytu - A temporary form file could not be created in %1. Nie można utworzyć pliku z tymczasowym formularzem w %1. - The temporary form file %1 could not be written. Nie można zapisać pliku z tymczasowym formularzem w %1. @@ -1298,22 +1054,18 @@ Parsing grid layout minimum size values ObjectInspectorModel - Object Obiekt - Class Klasa - separator separator - <noname> <brak_nazwy> @@ -1321,12 +1073,10 @@ Parsing grid layout minimum size values ObjectNameDialog - Change Object Name Zmień nazwę obiektu - Object Name Nazwa obiektu @@ -1334,12 +1084,10 @@ Parsing grid layout minimum size values PluginDialog - Plugin Information Informacje o wtyczkach - 1 1 @@ -1347,7 +1095,6 @@ Parsing grid layout minimum size values PreferencesDialog - Preferences Ustawienia @@ -1355,32 +1102,26 @@ Parsing grid layout minimum size values PreviewConfigurationWidget - Form Formularz - Print/Preview Configuration Konfiguracja wydruku/podglądu - Style Styl - Style sheet Arkusz stylu - ... ... - Device skin Skórka (skin) urządzenia @@ -1388,7 +1129,6 @@ Parsing grid layout minimum size values PromotionModel - Not used Usage of promoted widgets Nie używana @@ -1397,8 +1137,6 @@ Parsing grid layout minimum size values Q3WizardContainer - - Page Strona @@ -1406,59 +1144,48 @@ Parsing grid layout minimum size values QAbstractFormBuilder - Unexpected element <%1> Niespodziewany element <%1> - An error has occurred while reading the UI file at line %1, column %2: %3 Wystąpił błąd podczas czytania zawartości pliku ui, linia %1, kolumna %2: %3 - Invalid UI file: The root element <ui> is missing. Niepoprawny plik UI: brak głównego elementu <ui>. - The creation of a widget of the class '%1' failed. Utworzenie widżetu klasy '%1' nie powiodło się. - Attempt to add child that is not of class QWizardPage to QWizard. Próba dodania potomka który nie jest klasy QWizardPage do QWizard. - 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. Próba dodania rozmieszczenia do widżetu '%1' (%2) który posiada już niezarządzane rozmieszczenie typu %3. To wskazuje na niespójność w pliku ui. - Empty widget item in %1 '%2'. Pusty element w %1 '%2'. - Flags property are not supported yet. Właściwości typu flaga nie są jeszcze obsługiwane. - While applying tab stops: The widget '%1' could not be found. Podczas przypisywania kolejności tabulacji: widżet '%1' nie został znaleziony. - Invalid QButtonGroup reference '%1' referenced by '%2'. Niepoprawny odnośnik QButtonGroup '%1', użyty w '%2'. - This version of the uitools library is linked without script support. Ta wersja biblioteki uitools nie zawiera obsługi skryptów. @@ -1466,12 +1193,10 @@ To wskazuje na niespójność w pliku ui. QAxWidgetPlugin - ActiveX control Kontrolka ActiveX - ActiveX control widget Widżet z kontrolką ActiveX @@ -1479,22 +1204,18 @@ To wskazuje na niespójność w pliku ui. QAxWidgetTaskMenu - Set Control Ustaw kontrolkę - Reset Control Przywróć pustą zawartość kontrolce - Licensed Control Kontrolka licencjonowana - The control requires a design-time license Kontrolka wymaga licencji podczas projektowania @@ -1502,67 +1223,54 @@ To wskazuje na niespójność w pliku ui. QCoreApplication - %1 is not a promoted class. %1 nie jest klasą zastępczą. - The base class %1 is invalid. Klasa podstawowa %1 jest niewłaściwa. - The class %1 already exists. Klasa %1 już istnieje. - Promoted Widgets Zastępcze widżety - The class %1 cannot be removed Nie można usunąć klasy %1 - The class %1 cannot be removed because it is still referenced. Nie można usunąć klasy %1 ponieważ w dalszym ciągu są do niej odwołania. - The class %1 cannot be renamed Nie można zmienić nazwy klasy %1 - The class %1 cannot be renamed to an empty name. Nie można zmienić nazwy klasy %1 na pustą nazwę. - There is already a class named %1. Istnieje już klasa o nazwie %1. - Cannot set an empty include file. Nie można ustawić pustego pliku nagłówkowego. - Exception at line %1: %2 Wyjątek w linii %1: %2 - Unknown error Nieznany błąd - An error occurred while running the script for %1: %2 Script: %3 Wystąpił błąd podczas uruchamiana skryptu dla %1: %2 @@ -1572,17 +1280,14 @@ Skrypt: %3 QDesigner - %1 - warning %1 - ostrzeżenie - Qt Designer Qt Designer - This application cannot be used for the Console edition of Qt Nie można użyć tej aplikacji w wydaniu Qt Console @@ -1590,105 +1295,82 @@ Skrypt: %3 QDesignerActions - Clear &Menu Wyczyść &menu - &Quit Za&kończ - Edit Widgets Modyfikuj widżety - CTRL+R CTRL+R - &Minimize &Zminimalizuj - CTRL+M CTRL+M - Bring All to Front Wszystkie na wierzch - Additional Fonts... Dodatkowe czcionki... - Qt Designer &Help Pomo&c Qt Designer - Current Widget Help Pomoc dla bieżącego widżetu - What's New in Qt Designer? Co nowego w Qt Designer? - About Plugins Informacje o wtyczkach - - About Qt Designer Informacje o Qt Designer - About Qt Informacje o Qt - &Recent Forms Os&tatnio edytowane formularze - - Open Form Otwórz formularz - Designer Projektant - Feature not implemented yet! Cecha nie zaimplementowana! - - Save Form? Zachować formularz? - The file %1 could not be opened. Reason: %2 Would you like to retry or select a different file? @@ -1697,145 +1379,114 @@ Powód: %2 Czy chcesz spróbować ponownie lub zmienić nazwę pliku? - Select New File Wybierz nowy plik - %1 already exists. Do you want to replace it? %1 już istnieje. Czy chcesz go zastąpić? - &Close Preview Za&mknij podgląd - Preferences... Ustawienia... - CTRL+SHIFT+S CTRL+SHIFT+S - - - Designer UI files (*.%1);;All Files (*) Pliki Designer UI (*.%1);;Wszystkie pliki (*) - Saved %1. Formularz %1 zachowany pomyślnie. - Read error Błąd odczytu - %1 Do you want to update the file location or generate a new form? %1 Czy chcesz zaktualizować położenie pliku lub wygenerować nowy formularz? - &Update &Uaktualnij - &New Form Nowy &formularz - Could not open file Nie można otworzyć pliku - Could not write file Nie można zapisać pliku - &New... &Nowy... - &Open... &Otwórz... - &Save &Zachowaj - Save &As... Zachowaj j&ako... - Save A&ll Zachowaj &wszystko - Save As &Template... Zachowaj jako &szablon... - - &Close Za&mknij - Save &Image... Zachowaj o&brazek... - &Print... &Drukuj... - View &Code... Pokaż &kod... - - Save Form As Zachowaj formularz jako - Preview failed Nie można utworzyć podglądu - Code generation failed Nie można wygenerować kodu - It was not possible to write the entire file %1 to disk. Reason:%2 Would you like to retry? @@ -1844,60 +1495,46 @@ Powód:%2 Czy chcesz spróbować ponownie? - - The backup file %1 could not be written. Nie można zapisać pliku zapasowego %1. - The backup directory %1 could not be created. Nie można utworzyć katalogu %1 na pliki zapasowe. - The temporary backup directory %1 could not be created. Nie można utworzyć tymczasowego katalogu %1 na pliki zapasowe. - Image files (*.%1) Pliki z obrazkami (*.%1) - - Save Image Zachowaj obrazek - The file %1 could not be written. Nie można zapisać pliku %1. - - Assistant Assistant - Saved image %1. Zachowano obrazek %1. - Please close all forms to enable the loading of additional fonts. Zamknij wszystkie formularze aby umożliwić wczytanie dodatkowych czcionek. - Printed %1. Wydrukowano %1. - ALT+CTRL+S ALT+CTRL+S @@ -1905,7 +1542,6 @@ Czy chcesz spróbować ponownie? QDesignerAppearanceOptionsPage - Appearance Tab in preferences dialog Wygląd @@ -1914,17 +1550,14 @@ Czy chcesz spróbować ponownie? QDesignerAppearanceOptionsWidget - Docked Window Okna dokowalne - Multiple Top-Level Windows Wiele okien głównych - Toolwindow Font Czcionka okna narzędzi @@ -1932,22 +1565,18 @@ Czy chcesz spróbować ponownie? QDesignerAxWidget - Reset control Przywróć pustą zawartość kontrolce - Set control Ustaw kontrolkę - Control loaded Kontrolka wczytana - A COM exception occurred when executing a meta call of type %1, index %2 of "%3". Wystąpił wyjątek COM podczas wykonywania metody typu %1 o indeksie %2 w "%3". @@ -1955,17 +1584,14 @@ Czy chcesz spróbować ponownie? QDesignerFormBuilder - Script errors occurred: Wystąpiły błędy w skrypcie: - The preview failed to build. Nie można utworzyć podglądu. - Designer Projektant @@ -1973,22 +1599,18 @@ Czy chcesz spróbować ponownie? QDesignerFormWindow - %1 - %2[*] %1 - %2[*] - Save Form? Zachować formularz? - Do you want to save the changes to this document before closing? Czy chcesz zachować zmiany w tym dokumencie przed zamknięciem? - If you don't save, your changes will be lost. Jeśli ich nie zachowasz, zostaną utracone. @@ -1996,38 +1618,30 @@ Czy chcesz spróbować ponownie? QDesignerMenu - Type Here Wpisz tutaj - Add Separator Dodaj separator - Remove action '%1' Usuń akcję '%1' - Insert action Wstaw akcję - - Add separator Dodaj separator - Insert separator Wstaw separator - Remove separator Usuń separator @@ -2035,22 +1649,18 @@ Czy chcesz spróbować ponownie? QDesignerMenuBar - Type Here Wpisz tutaj - Remove Menu '%1' Usuń menu '%1' - Remove Menu Bar Usuń pasek menu - Menu Menu @@ -2058,37 +1668,30 @@ Czy chcesz spróbować ponownie? QDesignerPluginManager - An XML error was encountered when parsing the XML of the custom widget %1: %2 Wystąpił błąd XML podczas przetwarzania kodu XML dla własnego widżetu %1: %2 - A required attribute ('%1') is missing. Brak wymaganego atrybutu "%1". - An invalid property specification ('%1') was encountered. Supported types: %2 Wystąpiła błędna specyfikacja właściwości "%1". Obsługiwane typy: %2 - '%1' is not a valid string property specification. "%1" nie jest poprawną specyfikacją właściwości typu ciąg. - The XML of the custom widget %1 does not contain any of the elements <widget> or <ui>. Kod XML własnego widżetu %1 nie zawiera żadnego elementu <widget> ani <ui>. - The class attribute for the class %1 is missing. Atrybut "class" dla klasy %1 nie istnieje. - The class attribute for the class %1 does not match the class name %2. Atrybut "class" dla klasy %1 nie odpowiada nazwie klasy %2. @@ -2096,7 +1699,6 @@ Czy chcesz spróbować ponownie? QDesignerPropertySheet - Dynamic Properties Dynamiczne właściwości @@ -2104,31 +1706,26 @@ Czy chcesz spróbować ponownie? QDesignerResource - The layout type '%1' is not supported, defaulting to grid. Rozmieszczenie typu '%1' nie jest obsługiwane. Będzie ono zastąpione siatką. - 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. Rozszerzenie pojemnikowe widżetu "%1" (%2) zwróciło widżet który nie jest zarządzany przez Designera "%3" (%4) podczas pytania o stronę #%5. Strony pojemników powinny być dodawane jedynie poprzez wyspecyfikowanie ich w XML zwróconym przez metodę domXml() w widżecie użytkownika. - Unexpected element <%1> Parsing clipboard contents Niespodziewany element <%1> - Error while pasting clipboard contents at line %1, column %2: %3 Parsing clipboard contents Błąd podczas wklejania zawartości schowka, linia %1, kolumna %2: %3 - Error while pasting clipboard contents: The root element <ui> is missing. Parsing clipboard contents Błąd podczas wklejania zawartości schowka: Brak głównego elementu <ui>. @@ -2137,12 +1734,10 @@ Strony pojemników powinny być dodawane jedynie poprzez wyspecyfikowanie ich w QDesignerSharedSettings - The template path %1 could not be created. Nie można utworzyć ścieżki %1 dla szablonów. - An error has been encountered while parsing device profile XML: %1 Wystąpił błąd podczas przetwarzania kodu XML dla profilu urządzenia: %1 @@ -2150,32 +1745,26 @@ Strony pojemników powinny być dodawane jedynie poprzez wyspecyfikowanie ich w QDesignerToolWindow - Property Editor Edytor właściwości - Action Editor Edytor akcji - Object Inspector Hierarchia obiektów - Resource Browser Przeglądarka zasobów - Signal/Slot Editor Edytor sygnałów/slotów - Widget Box Panel widżetów @@ -2183,97 +1772,78 @@ Strony pojemników powinny być dodawane jedynie poprzez wyspecyfikowanie ich w QDesignerWorkbench - &File &Plik - F&orm &Formularz - Preview in Podgląd w stylu - &View &Widok - &Settings U&stawienia - Widget Box Panel widżetów - The last session of Designer was not terminated correctly. Backup files were left behind. Do you want to load them? Designer nie został poprawnie zamknięty w trakcie ostatniej sesji. Istnieją pliki zapasowe, czy chcesz je otworzyć? - The file <b>%1</b> is not a valid Designer UI file. Plik <b>%1</b> nie jest poprawnym plikiem UI Designera. - &Window &Okno - &Help Pomo&c - Edit Edycja - Toolbars Paski narzędzi - Save Forms? Zachować formularze? - If you do not review your documents, all your changes will be lost. Jeśli nie przejrzysz dokumentów, wszystkie zmiany zostaną utracone. - Review Changes Przeglądnij zmiany - Discard Changes Odrzuć zmiany - Backup Information Informacja o kopiach zapasowych - The file <b>%1</b> could not be opened. Nie można otworzyć pliku <b>%1</b>. - There are %n forms with unsaved changes. Do you want to review these changes before quitting? Jest %n formularz z niezachowanymi zmianami. Czy chcesz przejrzeć zmiany przed wyjściem z programu? @@ -2285,7 +1855,6 @@ Strony pojemników powinny być dodawane jedynie poprzez wyspecyfikowanie ich w QFormBuilder - An empty class name was passed on to %1 (object name: '%2'). Empty class name passed to widget factory method ---------- @@ -2295,47 +1864,38 @@ Empty class name passed to widget factory method Pusta nazwa klasy została przekazana do %1 (nazwa obiektu: '%2'). - QFormBuilder was unable to create a custom widget of the class '%1'; defaulting to base class '%2'. QFormBuilder nie mógł utworzyć własnego widżetu klasy '%1'. Będzie on zastąpiony klasą bazową '%2'. - QFormBuilder was unable to create a widget of the class '%1'. QFormBuilder nie mógł utworzyć widżetu klasy '%1'. - The layout type `%1' is not supported. Typ rozmieszczenia '%1' nie jest obsługiwany. - The set-type property %1 could not be read. Nie można odczytać właściwości %1 typu zbiór. - The enumeration-type property %1 could not be read. Nie można odczytać właściwości %1 typu wyliczeniowego. - Reading properties of the type %1 is not supported yet. Odczytywanie właściwości typu %1 nie jest jeszcze obsługiwane. - The property %1 could not be written. The type %2 is not supported yet. Nie można zapisać właściwości %1. Typ %2 nie jest jeszcze obsługiwany. - The enumeration-value '%1' is invalid. The default value '%2' will be used instead. Wartość "%1" typu wyliczeniowego jest niepoprawna. Użyta zostanie domyślna wartość "%2". - The flag-value '%1' is invalid. Zero will be used instead. Wartość "%1" flagi jest niepoprawna. Użyta zostanie wartość zerowa. @@ -2343,48 +1903,38 @@ Empty class name passed to widget factory method QStackedWidgetEventFilter - Previous Page Poprzednia strona - Next Page Następna strona - Delete Usuń - Before Current Page Przed bieżącą stroną - After Current Page Za bieżącą stroną - Change Page Order... Zmień porządek stron... - Change Page Order Zmień porządek stron - Page %1 of %2 Strona %1 z %2 - - Insert Page Wstaw stronę @@ -2392,12 +1942,10 @@ Empty class name passed to widget factory method QStackedWidgetPreviewEventFilter - Go to previous page of %1 '%2' (%3/%4). Przejdź do poprzedniej strony %1 '%2' (%3/%4). - Go to next page of %1 '%2' (%3/%4). Przejdź do następnej strony %1 '%2' (%3/%4). @@ -2405,28 +1953,22 @@ Empty class name passed to widget factory method QTabWidgetEventFilter - Delete Usuń - Before Current Page Przed bieżącą stroną - After Current Page Za bieżącą stroną - Page %1 of %2 Strona %1 z %2 - - Insert Page Wstaw stronę @@ -2434,37 +1976,30 @@ Empty class name passed to widget factory method QToolBoxHelper - Delete Page Usuń stronę - Before Current Page Przed bieżącą stroną - After Current Page Za bieżącą stroną - Change Page Order... Zmień porządek stron... - Change Page Order Zmień porządek stron - Page %1 of %2 Strona %1 z %2 - Insert Page Wstaw stronę @@ -2472,15 +2007,10 @@ Empty class name passed to widget factory method QtBoolEdit - - - True Prawda - - False Fałsz @@ -2488,12 +2018,10 @@ Empty class name passed to widget factory method QtBoolPropertyManager - True Prawda - False Fałsz @@ -2501,7 +2029,6 @@ Empty class name passed to widget factory method QtCharEdit - Clear Char Wyczyść znak @@ -2509,7 +2036,6 @@ Empty class name passed to widget factory method QtColorEditWidget - ... ... @@ -2517,22 +2043,18 @@ Empty class name passed to widget factory method QtColorPropertyManager - Red Czerwień - Green Zieleń - Blue Błękit - Alpha Kanał alfa @@ -2540,97 +2062,78 @@ Empty class name passed to widget factory method QtCursorDatabase - Cross Krzyż - Arrow Strzałka - Up Arrow Strzałka do góry - Wait Oczekiwanie - IBeam Kursor tekstowy - Size Vertical Rozmiar N-S - Size Horizontal Rozmiar W-E - Size Backslash Rozmiar NW-SE - Size Slash Rozmiar NE-SW - Size All Rozmiar N-E-S-W - Blank Pusty - Split Vertical Podzielony pionowo - Split Horizontal Podzielony poziomo - Pointing Hand Rączka wskazująca - Forbidden Zabroniony - Open Hand Rączka otwarta - Closed Hand Rączka zamknięta - What's This Co to jest - Busy Zajęty @@ -2638,12 +2141,10 @@ Empty class name passed to widget factory method QtFontEditWidget - ... ... - Select Font Wybierz czcionkę @@ -2651,37 +2152,30 @@ Empty class name passed to widget factory method QtFontPropertyManager - Bold Pogrubiony - Italic Kursywa - Underline Podkreślony - Family Rodzina - Point Size Wielkość punktu - Strikeout Przekreślony - Kerning Kerning @@ -2689,7 +2183,6 @@ Empty class name passed to widget factory method QtGradientDialog - Edit Gradient Modyfikuj gradient @@ -2697,304 +2190,242 @@ Empty class name passed to widget factory method QtGradientEditor - Start X Początek X - Start Y Początek Y - Final X Koniec X - Final Y Koniec Y - - Central X Środek X - - Central Y Środek Y - Focal X Ogniskowa X - Focal Y Ogniskowa Y - Radius Promień - Angle Kąt - Linear Liniowy - Radial Radialny - Conical Stożkowy - Pad Brak - Repeat Powtórzone - Reflect Odbite - Form Formularz - Gradient Editor Edytor gradientu - 1 1 - 2 2 - 3 3 - 4 4 - 5 5 - Gradient Stops Editor Edytor punktów gradientu - 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. Ten obszar pozwala na edycję punktów gradientu. Aby skopiować istniejący punkt kliknij dwukrotnie na jego uchwyt. W celu stworzenia nowego punktu kliknij dwukrotnie poza istniejącymi uchwytami punków. Przeciągnij i upuść uchwyt aby go przesunąć. Naciśnij prawy przycisk myszy aby pokazać menu z dodatkowymi akcjami. - Zoom Powiększenie - Position Pozycja - Hue Barwa - H H - Saturation Nasycenie - S S - Sat Nasycenie - Value Wartość - V V - Val Wartość - Alpha Kanał alfa - A A - Type Rodzaj - Spread Rozciąganie - Color Kolor - Current stop's color Kolor bieżącego punktu - HSV HSV - RGB RGB - Current stop's position Pozycja bieżącego punktu - % % - Zoom In Powiększ - Zoom Out Pomniejsz - Toggle details extension Przełącz rozszerzenie ze szczegółami - > > - Linear Type Typ liniowy - ... ... - Radial Type Typ radialny - Conical Type Typ stożkowy - Pad Spread Powtarzaj punkt brzegowy - Repeat Spread Powtarzaj cały zakres - Reflect Spread Powtarzaj z odbiciami - 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. Ten obszar pokazuje podgląd edytowanego gradientu. Możesz tutaj również zmieniać parametry specyficzne dla typu gradientu, takie jak: punkt początkowy i końcowy, promień, itp... poprzez przeciągnięcie i upuszczenie uchwytu. - Show HSV specification Pokaż specyfikację HSV - Show RGB specification Pokaż specyfikację RGB - Reset Zoom Normalny rozmiar @@ -3002,37 +2433,30 @@ Empty class name passed to widget factory method QtGradientStopsWidget - New Stop Nowy punkt - Delete Usuń - Flip All Odwróć wszystko - Select All Zaznacz wszystko - Zoom In Powiększ - Zoom Out Pomniejsz - Reset Zoom Normalny rozmiar @@ -3040,46 +2464,34 @@ Empty class name passed to widget factory method QtGradientView - Grad Grad - Remove Gradient Usuń gradient - Are you sure you want to remove the selected gradient? Czy na pewno chcesz usunąć zaznaczony gradient? - - New... Nowy... - - Edit... Modyfikuj... - - Rename Zmień nazwę - - Remove Usuń - Gradient View Widok gradientów @@ -3087,8 +2499,6 @@ Empty class name passed to widget factory method QtGradientViewDialog - - Select Gradient Wybierz gradient @@ -3096,7 +2506,6 @@ Empty class name passed to widget factory method QtKeySequenceEdit - Clear Shortcut Wyczyść skrót @@ -3104,17 +2513,14 @@ Empty class name passed to widget factory method QtLocalePropertyManager - %1, %2 %1, %2 - Language Język - Country Kraj @@ -3122,17 +2528,14 @@ Empty class name passed to widget factory method QtPointFPropertyManager - (%1, %2) (%1, %2) - X X - Y Y @@ -3140,17 +2543,14 @@ Empty class name passed to widget factory method QtPointPropertyManager - (%1, %2) (%1, %2) - X X - Y Y @@ -3158,12 +2558,10 @@ Empty class name passed to widget factory method QtPropertyBrowserUtils - [%1, %2, %3] (%4) [%1, %2, %3] (%4) - [%1, %2] [%1, %2] @@ -3171,27 +2569,22 @@ Empty class name passed to widget factory method QtRectFPropertyManager - [(%1, %2), %3 x %4] [(%1, %2), %3 x %4] - X X - Y Y - Width Szerokość - Height Wysokość @@ -3199,27 +2592,22 @@ Empty class name passed to widget factory method QtRectPropertyManager - [(%1, %2), %3 x %4] [(%1, %2), %3 x %4] - X X - Y Y - Width Szerokość - Height Wysokość @@ -3227,128 +2615,98 @@ Empty class name passed to widget factory method QtResourceEditorDialog - %1 already exists. Do you want to replace it? %1 już istnieje. Czy chcesz go zastąpić? - The file does not appear to be a resource file; element '%1' was found where '%2' was expected. Plik nie wygląda na plik z zasobami; znaleziono element '%1' podczas gdy oczekiwano elementu '%2'. - %1 [read-only] %1 - [tylko do odczytu] - - %1 [missing] %1 - [brak pliku] - <no prefix> <brak przedrostka> - - New Resource File Nowy plik z zasobami - - Resource files (*.qrc) Pliki z zasobami (*.qrc) - Import Resource File Zaimportuj plik z zasobami - newPrefix nowyPrzedrostek - Add Files Dodaj pliki - Incorrect Path Niepoprawna ścieżka - - - - Copy Skopiuj - Copy As... Skopiuj jako... - Keep Pozostaw - Skip Opuść - Clone Prefix Sklonuj przedrostek - 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". Wprowadź przyrostek jaki ma być dodany do sklonowanych plików. To może być np. rozszerzenie określające język: "_de". - - Copy As Skopiuj jako - <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>Zaznaczony plik:</p><p>%1</p><p>jest umiejscowiony na zewnątrz katalogu z bieżącym plikiem z zasobami:</p><p>%2</p><p>Zaznacz inną ścieżkę w tym katalogu.<p> - Could not overwrite %1. Nie można nadpisać %1. - <p><b>Warning:</b> The file</p><p>%1</p><p>is outside of the current resource file's parent directory.</p> <p><b>Ostrzeżenie:</b> Plik</p><p>%1</p><p>jest na zewnątrz katalogu w którym jest bieżący plik z zasobami.</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>Aby rozwiązać problem, naciśnij:</p><table><tr><th align="left">Skopiuj</th><td>żeby skopiować plik do katalogu w którym jest plik z zasobami.</td></tr><tr><th align="left">Skopiuj jako...</th><td>żeby skopiować plik do poddrzewa katalogu w którym jest plik z zasobami.</td></tr><tr><th align="left">Zatrzymaj</th><td>żeby użyć jego bieżącą ścieżkę.</td></tr></table> - Could not copy %1 to @@ -3359,153 +2717,120 @@ jako: %2 - A parse error occurred at line %1, column %2 of %3: %4 Wystąpił błąd przetwarzania w linii %1, kolumnie %2 w %3: %4 - Save Resource File Zachowaj plik z zasobami - Edit Resources Edytor zasobów - New... Nowy... - Open... Otwórz... - - Remove Usuń - - Move Up Przenieś do góry - - Move Down Przenieś w dół - - Add Prefix Dodaj przedrostek - Add Files... Dodaj pliki... - Change Prefix Zmień przedrostek - Change Language Zmień język - Change Alias Zmień alias - Clone Prefix... Sklonuj przedrostek... - Prefix / Path Przedrostek / Ścieżka - Language / Alias Język / Alias - <html><p><b>Warning:</b> There have been problems while reloading the resources:</p><pre>%1</pre></html> <html><p><b>Ostrzeżenie:</b> Natrafiono na problemy podczas przeładowania zasobów:</p><pre>%1</pre></html> - Resource Warning Ostrzeżenie z systemu zasobów - Dialog Okno dialogowe - New File Nowy plik - N N - Remove File Usuń plik - R R - I I - New Resource Nowy zasób - A A - Remove Resource or File Usuń zasób lub plik - Could not write %1: %2 Nie można zapisać "%1", %2 - Open Resource File Otwórz plik z zasobami @@ -3513,24 +2838,20 @@ jako: QtResourceView - Size: %1 x %2 %3 Rozmiar: %1 x %2 %3 - Edit Resources... Modyfikuj zasoby... - Reload Przeładuj - Copy Path Skopiuj ścieżkę @@ -3538,7 +2859,6 @@ jako: QtResourceViewDialog - Select Resource Wybierz zasób @@ -3546,17 +2866,14 @@ jako: QtSizeFPropertyManager - %1 x %2 %1 x %2 - Width Szerokość - Height Wysokość @@ -3564,33 +2881,26 @@ jako: QtSizePolicyPropertyManager - - <Invalid> <Niepoprawna> - [%1, %2, %3, %4] [%1, %2, %3, %4] - Horizontal Policy Strategia pozioma - Vertical Policy Strategia pionowa - Horizontal Stretch Rozciąganie w poziomie - Vertical Stretch Rozciąganie w pionie @@ -3598,17 +2908,14 @@ jako: QtSizePropertyManager - %1 x %2 %1 x %2 - Width Szerokość - Height Wysokość @@ -3616,107 +2923,86 @@ jako: QtToolBarDialog - < S E P A R A T O R > < S E P A R A T O R > - Customize Toolbars Dostosuj paski narzędzi - 1 1 - Actions Akcje - Toolbars Paski narzędzi - New Nowy - Remove Usuń - Rename Zmień nazwę - Up Do góry - <- <- - -> -> - Down W dół - Current Toolbar Actions Akcje bieżącego paska narzędzi - Custom Toolbar Własne paski narzędzi - Add new toolbar Dodaj nowy pasek narzędzi - Remove selected toolbar Usuń wybrany pasek narzędzi - Rename toolbar Zmień nazwę paska narzędzi - Move action up Przenieś akcję w górę - Remove action from toolbar Usuń akcję z paska narzędzi - Add action to toolbar Dodaj akcję do paska narzędzi - Move action down Przenieś akcję w dół @@ -3724,12 +3010,10 @@ jako: QtTreePropertyBrowser - Property Właściwość - Value Wartość @@ -3737,64 +3021,52 @@ jako: SaveFormAsTemplate - Add path... Dodaj ścieżkę... - Template Exists Szablon istnieje - Overwrite Template Nadpisz szablon - Open Error Błąd otwarcia - There was an error opening template %1 for writing. Reason: %2 Wystąpił błąd podczas otwierania szablonu %1 do zapisu. Powód: %2 - Write Error Błąd zapisu - There was an error writing the template %1 to disk. Reason: %2 Wystąpił błąd podczas zapisywania szablonu %1 na dysk. Powód: %2 - Pick a directory to save templates in Wybierz katalog do zachowywania szablonów - &Category: &Kategoria: - &Name: &Nazwa: - A template with the name %1 already exists. Do you want overwrite the template? Szablon o nazwie %1 już istnieje. Czy chcesz nadpisać szablon? - Save Form As Template Zachowaj formularz jako szablon @@ -3802,7 +3074,6 @@ Czy chcesz nadpisać szablon? ScriptErrorDialog - An error occurred while running the scripts for "%1": Wystąpił błąd podczas uruchamiana skryptu dla "%1": @@ -3812,22 +3083,18 @@ Czy chcesz nadpisać szablon? SelectSignalDialog - Go to slot Przejdź do slotu - Select signal Wybierz sygnał - signal sygnał - class klasa @@ -3835,7 +3102,6 @@ Czy chcesz nadpisać szablon? SignalSlotConnection - SENDER(%1), SIGNAL(%2), RECEIVER(%3), SLOT(%4) NADAJNIK(%1), SYGNAŁ(%2), ODBIORNIK(%3), SLOT(%4) @@ -3843,32 +3109,26 @@ Czy chcesz nadpisać szablon? SignalSlotDialogClass - Signals and slots Sygnały i sloty - Slots Sloty - ... ... - Signals Sygnały - Add Dodaj - Delete Usuń @@ -3876,12 +3136,10 @@ Czy chcesz nadpisać szablon? Spacer - Horizontal Spacer '%1', %2 x %3 Poziomy dystans '%1', %2 x %3 - Vertical Spacer '%1', %2 x %3 Pionowy dystans '%1', %2 x %3 @@ -3889,7 +3147,6 @@ Czy chcesz nadpisać szablon? TemplateOptionsPage - Template Paths Tab in preferences dialog Ścieżki z szablonami @@ -3898,52 +3155,42 @@ Czy chcesz nadpisać szablon? ToolBarManager - Configure Toolbars... Skonfiguruj paski narzędzi... - Window Okno - Help Pomoc - Style Styl - Dock views Dokowalne widoki - File Plik - Edit Edycja - Tools Narzędzia - Form Formularz - Toolbars Paski narzędzi @@ -3951,22 +3198,18 @@ Czy chcesz nadpisać szablon? VersionDialog - Qt Designer Qt Designer - %1<br/>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). - <h3>%1</h3><br/><br/>Version %2 <h3>%1</h3><br/><br/>Wersja %2 - <br/>Qt Designer is a graphical user interface designer for Qt applications.<br/> <br/>Qt Designer jest aplikacją umożliwiającą projektowanie interfejsów graficznych użytkownika w aplikacjach korzystających z Qt.<br/> @@ -3974,47 +3217,38 @@ Czy chcesz nadpisać szablon? VideoPlayerTaskMenu - Available Mime Types Dostępne typy mime - Display supported mime types... Pokaż dostępne typy mime... - Load... Załaduj... - Play Odtwórz - Pause Pauza - Stop Zatrzymaj - Choose Video Player Media Source Wybierz źródło odtwarzacza wideo - An error has occurred in '%1': %2 Wystąpił błąd w "%1": %2 - Video Player Error Błąd odtwarzacza wideo @@ -4022,7 +3256,6 @@ Czy chcesz nadpisać szablon? WidgetDataBase - 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. Plik zawiera własny widżet '%1' którego klasa bazowa (%2) różni się od bieżącego elementu w bazie danych z widżetami (%3). Baza danych z widżetami została niezmieniona. @@ -4030,87 +3263,70 @@ Czy chcesz nadpisać szablon? qdesigner_internal::ActionEditor - Actions Akcje - New... Nowa... - Delete Usuń - New action Nowa akcja - Edit action Modyfikuj akcję - Edit... Modyfikuj... - Go to slot... Przejdź do slotu... - Copy Skopiuj - Cut Wytnij - Paste Wklej - Select all Zaznacz wszystko - Configure Action Editor Skonfiguruj edytor akcji - Icon View Widok z ikonkami - Detailed View Szczegółowy widok - Remove actions Usuń akcje - Remove action '%1' Usuń akcję '%1' - Used In Użyta w @@ -4118,32 +3334,26 @@ Czy chcesz nadpisać szablon? qdesigner_internal::ActionModel - Name Nazwa - Used Użyta - Text Tekst - Shortcut Skrót - Checkable Przełączalny - ToolTip Podpowiedź @@ -4151,27 +3361,22 @@ Czy chcesz nadpisać szablon? qdesigner_internal::BrushManagerProxy - The element '%1' is missing the required attribute '%2'. Brak wymaganego atrybutu '%2' w elemencie '%1'. - Empty brush name encountered. Wystąpiła pusta nazwa szczotki. - An unexpected element '%1' was encountered. Wystąpił niespodziewany element '%1'. - An error occurred when reading the brush definition file '%1' at line line %2, column %3: %4 Wystąpił błąd podczas czytania pliku z definicją szczotki '%1' w linii %2, w kolumnie %3: %4 - An error occurred when reading the resource file '%1' at line %2, column %3: %4 Wystąpił błąd podczas czytania pliku z zasobami '%1' w linii %2, w kolumnie %3: %4 @@ -4179,17 +3384,14 @@ Czy chcesz nadpisać szablon? qdesigner_internal::BuddyEditor - Add buddy Dodaj skojarzoną etykietę - Remove buddies Usuń skojarzoną etykietę - Remove %n buddies Usuń %n skojarzoną etykietę @@ -4198,7 +3400,6 @@ Czy chcesz nadpisać szablon? - Add %n buddies Dodaj %n skojarzoną etykietę @@ -4207,7 +3408,6 @@ Czy chcesz nadpisać szablon? - Set automatically Ustaw automatycznie @@ -4215,7 +3415,6 @@ Czy chcesz nadpisać szablon? qdesigner_internal::BuddyEditorPlugin - Edit Buddies Modyfikuj skojarzone etykiety @@ -4223,7 +3422,6 @@ Czy chcesz nadpisać szablon? qdesigner_internal::BuddyEditorTool - Edit Buddies Modyfikuj skojarzone etykiety @@ -4231,12 +3429,10 @@ Czy chcesz nadpisać szablon? qdesigner_internal::ButtonGroupMenu - Select members Zaznacz składniki grupy - Break Usuń grupę @@ -4244,32 +3440,26 @@ Czy chcesz nadpisać szablon? qdesigner_internal::ButtonTaskMenu - Assign to button group Przypisz do grupy przycisków - Button group Grupa przycisków - New button group Nowej - Change text... Zmień tekst... - None Żadnej - Button group '%1' Grupa przycisków '%1' @@ -4277,57 +3467,46 @@ Czy chcesz nadpisać szablon? qdesigner_internal::CodeDialog - Save... Zachowaj... - Copy All Skopiuj wszystko - &Find in Text... Z&najdź w tekście... - A temporary form file could not be created in %1. Nie można utworzyć pliku z tymczasowym formularzem w %1. - The temporary form file %1 could not be written. Nie można zapisać pliku z tymczasowym formularzem w %1. - %1 - [Code] %1 - [Kod] - Save Code Zachowaj kod - Header Files (*.%1) Pliki nagłówkowe (*.%1) - The file %1 could not be opened: %2 Nie można otworzyć pliku "%1", %2 - The file %1 could not be written: %2 Nie można zapisać pliku "%1", %2 - %1 - Error %1 - Błąd @@ -4335,7 +3514,6 @@ Czy chcesz nadpisać szablon? qdesigner_internal::ColorAction - Text Color Color tekstu @@ -4343,12 +3521,10 @@ Czy chcesz nadpisać szablon? qdesigner_internal::ComboBoxTaskMenu - Edit Items... Modyfikuj elementy... - Change Combobox Contents Zmień zawartość combobox'a @@ -4356,7 +3532,6 @@ Czy chcesz nadpisać szablon? qdesigner_internal::CommandLinkButtonTaskMenu - Change description... Zmień opis... @@ -4364,17 +3539,14 @@ Czy chcesz nadpisać szablon? qdesigner_internal::ConnectionEdit - Select All Zaznacz wszystko - Delete Usuń - Deselect All Odznacz wszystko @@ -4382,52 +3554,42 @@ Czy chcesz nadpisać szablon? qdesigner_internal::ConnectionModel - Sender Nadajnik - Signal Sygnał - Receiver Odbiornik - Slot Slot - <sender> <nadajnik> - <signal> <sygnał> - <receiver> <odbiornik> - <slot> <slot> - Signal and Slot Editor Edytor sygnałów i slotów - The connection already exists!<br>%1 Połączenie już istnieje!<br>%1 @@ -4435,42 +3597,34 @@ Czy chcesz nadpisać szablon? qdesigner_internal::ContainerWidgetTaskMenu - Insert Page Before Current Page Wstaw stronę przed bieżącą stroną - Insert Page After Current Page Wstaw stronę za bieżącą stroną - Add Subwindow Dodaj podokno - Delete Usuń - Insert Wstaw - Subwindow Podokno - Page Strona - Page %1 of %2 Strona %1 z %2 @@ -4478,18 +3632,15 @@ Czy chcesz nadpisać szablon? qdesigner_internal::DPI_Chooser - System (%1 x %2) System resolution Systemowa (%1 x %2) - User defined Zdefiniowana przez użytkownika - x DPI X/Y separator x @@ -4498,49 +3649,38 @@ Czy chcesz nadpisać szablon? qdesigner_internal::DesignerPropertyManager - - AlignLeft Wyrównanie do lewej - AlignHCenter Wyrównanie w poziomie do środka - AlignRight Wyrównanie do prawej - AlignJustify Wyjustowanie - AlignTop Wyrównanie do góry - - AlignVCenter Wyrównanie w pionie do środka - AlignBottom Wyrównanie do dołu - %1, %2 %1, %2 - Customized (%n roles) Dostosowana (%n rola) @@ -4549,75 +3689,58 @@ Czy chcesz nadpisać szablon? - Inherited Odziedziczony - Horizontal Poziomo - Vertical Pionowo - Normal Off Normalny wyciśnięty - Normal On Normalny wciśnięty - Disabled Off Wyłączony wyciśnięty - Disabled On Wyłączony wciśnięty - Active Off Aktywny wyciśnięty - Active On Aktywny wciśnięty - Selected Off Zaznaczony wyciśnięty - Selected On Zaznaczony wciśnięty - - translatable przetłumaczalny - - disambiguation ujednoznacznienie - - comment komentarz @@ -4625,48 +3748,38 @@ Czy chcesz nadpisać szablon? qdesigner_internal::DeviceProfileDialog - Device Profiles (*.%1) Profile urządzeń (*.%1) - Default Domyślny - Save Profile Zachowaj profil - Save Profile - Error Błąd podczas zachowywania profilu - Unable to open the file '%1' for writing: %2 Nie można otworzyć pliku '%1' do zapisu: %2 - Open profile Otwórz profil - - Open Profile - Error Błąd podczas otwierania profilu - Unable to open the file '%1' for reading: %2 Nie można otworzyć pliku '%1' do odczytu: %2 - '%1' is not a valid profile: %2 '%1' nie jest poprawnym profilem: %2 @@ -4674,57 +3787,46 @@ Czy chcesz nadpisać szablon? qdesigner_internal::Dialog - Dialog Okno dialogowe - StringList Lista napisów - New String Nowy napis - &New &Nowy - Delete String Usuń napis - &Delete &Usuń - &Value: &Wartość: - Move String Up Przenieś w górę - Up Do góry - Move String Down Przenieś w dół - Down W dół @@ -4732,52 +3834,42 @@ Czy chcesz nadpisać szablon? qdesigner_internal::EmbeddedOptionsControl - None Brak - Add a profile Dodaj profil - Edit the selected profile Modyfikuj zaznaczony profil - Delete the selected profile Usuń zaznaczony profil - Add Profile Dodaj profil - New profile Nowy profil - Edit Profile Modyfikuj profil - Delete Profile Usuń profil - Would you like to delete the profile '%1'? Czy chcesz usunąć profil '%1'? - Default Domyślny @@ -4785,12 +3877,10 @@ Czy chcesz nadpisać szablon? qdesigner_internal::FilterWidget - Filter Filtr - Clear text Wyczyść tekst @@ -4798,12 +3888,10 @@ Czy chcesz nadpisać szablon? qdesigner_internal::FormEditor - Resource File Changed Zmieniony plik z zasobami - The file "%1" has changed outside Designer. Do you want to reload it? Plik "%1" zmienił się na zewnątrz Designera. Czy chcesz go ponownie załadować? @@ -4811,7 +3899,6 @@ Czy chcesz nadpisać szablon? qdesigner_internal::FormLayoutMenu - Add form layout row... Dodaj wiersz do formularza... @@ -4819,58 +3906,46 @@ Czy chcesz nadpisać szablon? qdesigner_internal::FormWindow - Edit contents Modyfikuj zawartość - F2 F2 - Resize Zmień rozmiar - Key Move Przeniesienie - Key Resize Zmiana rozmiaru - Cannot paste widgets. Designer could not find a container without a layout to paste into. Nie można wkleić widżetów. Nie można było odnaleźć pojemnika bez rozmieszczenia do którego można by wkleić widżety. - Break the layout of the container you want to paste into, select this container and then paste again. Usuń rozmieszczenie w pojemniku do którego chcesz wkleić, zaznacz ten pojemnik i ponownie wklej. - Paste error Błąd wklejania - Lay out Rozmieść - - Drop widget Upuść widżet - Paste %n action(s) Wklej %n akcję @@ -4879,12 +3954,10 @@ Czy chcesz nadpisać szablon? - Insert widget '%1' Wstaw widżet '%1 - Paste %n widget(s) Wklej %n widżet @@ -4893,27 +3966,22 @@ Czy chcesz nadpisać szablon? - Paste (%1 widgets, %2 actions) Wklej (%1 widżetów, %2 akcji) - Select Ancestor Wybierz przodka - A QMainWindow-based form does not contain a central widget. Formularz bazujący na QMainWindow nie zawiera centralnego widżetu. - Raise widgets Przenieś widżety na wierzch - Lower widgets Przenieś widżety na spód @@ -4921,12 +3989,10 @@ Czy chcesz nadpisać szablon? qdesigner_internal::FormWindowBase - Delete Usuń - Delete '%1' Usuń '%1' @@ -4934,200 +4000,159 @@ Czy chcesz nadpisać szablon? qdesigner_internal::FormWindowManager - Cu&t Wy&tnij - Cuts the selected widgets and puts them on the clipboard Wycina zaznaczone widżety i umieszcza je w schowku - &Copy S&kopiuj - Copies the selected widgets to the clipboard Kopiuje zaznaczone widżety do schowka - &Paste Wk&lej - Pastes the clipboard's contents Wkleja zawartość schowka - &Delete &Usuń - Deletes the selected widgets Usuwa zaznaczone widżety - Select &All Zaznacz &wszystko - Selects all widgets Wybiera wszystkie widżety - Bring to &Front Przenieś na w&ierzch - - Raises the selected widgets Przenosi zaznaczone widżety na wierzch - Send to &Back Przenieś na &spód - - Lowers the selected widgets Przenosi zaznaczone widżety na spód - Adjust &Size Dopasuj &wielkość - Adjusts the size of the selected widget Dopasuj wielkość zaznaczonego widżetu - Lay Out &Horizontally Rozmieść w po&ziomie - Lays out the selected widgets horizontally Rozmieszcza zaznaczone widżety w poziomie - Lay Out &Vertically Rozmieść w pio&nie - Lays out the selected widgets vertically Rozmieszcza zaznaczone widżety w pionie - Lay Out in a &Grid Rozmieść w &siatce - Lays out the selected widgets in a grid Rozmieszcza zaznaczone widżety w siatce - Lay Out Horizontally in S&plitter Rozmieść poziomo w s&plitterze - Lays out the selected widgets horizontally in a splitter Rozmieszcza zaznaczone widżety poziomo w splitterze - Lay Out Vertically in Sp&litter Rozmieść pionowo w sp&litterze - Lays out the selected widgets vertically in a splitter Rozmieszcza zaznaczone widżety pionowo w splitterze - &Break Layout &Usuń rozmieszczenie - Breaks the selected layout Usuwa zaznaczone rozmieszczenie - &Preview... Pod&gląd... - Preview current form Podgląd bierzącego formularza - Form &Settings... Us&tawienia formularza... - Break Layout Usuń rozmieszczenie - Adjust Size Dopasuj wielkość - Could not create form preview Title of warning message box Nie można utworzyć podglądu formularza - Form Settings - %1 Ustawienia formularza - %1 - Removes empty columns and rows Usuń puste kolumny i wiersze - Lay Out in a &Form Layout Rozmieść w &formularzu - Lays out the selected widgets in a form layout Rozmieszcza zaznaczone widżety w formularzu - Si&mplify Grid Layout Up&rość rozmieszczenie w siatce @@ -5135,12 +4160,10 @@ Czy chcesz nadpisać szablon? qdesigner_internal::FormWindowSettings - None Żaden - Device Profile: %1 Profil urządzenia: %1 @@ -5148,37 +4171,30 @@ Czy chcesz nadpisać szablon? qdesigner_internal::GridPanel - Visible Widoczna - Snap Przyciągaj - Reset Przywróć ustawienia - Form Formularz - Grid Siatka - Grid &X Siatka &X - Grid &Y Siatka &Y @@ -5186,7 +4202,6 @@ Czy chcesz nadpisać szablon? qdesigner_internal::GroupBoxTaskMenu - Change title... Zmień tytuł... @@ -5194,7 +4209,6 @@ Czy chcesz nadpisać szablon? qdesigner_internal::HtmlTextEdit - Insert HTML entity Wstaw jednostkę HTML @@ -5202,92 +4216,74 @@ Czy chcesz nadpisać szablon? qdesigner_internal::IconSelector - The pixmap file '%1' cannot be read. Nie można odczytać pliku z pixmapą %1. - The file '%1' does not appear to be a valid pixmap file: %2 Plik '%1' nie wygląda na poprawny plik z pixmapą: %2 - The file '%1' could not be read: %2 Nie można odczytać pliku "%1", %2 - Pixmap Read Error Błąd przy odczycie pixmapy - ... ... - Normal Off Normalny wyciśnięty - Normal On Normalny wciśnięty - Disabled Off Wyłączony wyciśnięty - Disabled On Wyłączony wciśnięty - Active Off Aktywny wyciśnięty - Active On Aktywny wciśnięty - Selected Off Zaznaczony wyciśnięty - Selected On Zaznaczony wciśnięty - Choose Resource... Wybierz zasób... - Choose File... Wybierz plik... - Reset Przywróć - Reset All Przywróć wszystkie - Choose a Pixmap Wybierz pixmapę @@ -5295,58 +4291,46 @@ Czy chcesz nadpisać szablon? qdesigner_internal::ItemListEditor - Properties &<< Własciwości &<< - - Properties &>> Własciwości &>> - Items List Lista elementów - New Item Nowy element - &New &Nowy - Delete Item Usuń element - &Delete &Usuń - Move Item Up Przenieś element do góry - U U - Move Item Down Przenieś element w dół - D D @@ -5354,12 +4338,10 @@ Czy chcesz nadpisać szablon? qdesigner_internal::LabelTaskMenu - Change rich text... Zmień tekst sformatowany... - Change plain text... Zmień zwykły tekst... @@ -5367,7 +4349,6 @@ Czy chcesz nadpisać szablon? qdesigner_internal::LanguageResourceDialog - Choose Resource Wybierz zasób @@ -5375,7 +4356,6 @@ Czy chcesz nadpisać szablon? qdesigner_internal::LineEditTaskMenu - Change text... Zmień tekst... @@ -5383,17 +4363,14 @@ Czy chcesz nadpisać szablon? qdesigner_internal::ListWidgetEditor - New Item Nowy element - Edit List Widget Modyfikuj listę - Edit Combobox Modyfikuj combobox @@ -5401,12 +4378,10 @@ Czy chcesz nadpisać szablon? qdesigner_internal::ListWidgetTaskMenu - Edit Items... Modyfikuj elementy... - Change List Contents Zmień zawartość listy @@ -5414,22 +4389,18 @@ Czy chcesz nadpisać szablon? qdesigner_internal::MdiContainerWidgetTaskMenu - Next Subwindow Następne podokno - Previous Subwindow Poprzednie podokno - Tile Obok siebie - Cascade Kaskadowo @@ -5437,7 +4408,6 @@ Czy chcesz nadpisać szablon? qdesigner_internal::MenuTaskMenu - Remove Usuń @@ -5445,7 +4415,6 @@ Czy chcesz nadpisać szablon? qdesigner_internal::MorphMenu - Morph into Przekształć w @@ -5453,42 +4422,34 @@ Czy chcesz nadpisać szablon? qdesigner_internal::NewActionDialog - New Action... Nowa akcja... - &Text: &Tekst: - &Icon: &Ikonka: - Shortcut: Skrót: - Checkable: Przełączalny: - ToolTip: Podpowiedź: - ... ... - Object &name: &Nazwa obiektu: @@ -5496,41 +4457,34 @@ Czy chcesz nadpisać szablon? qdesigner_internal::NewDynamicPropertyDialog - Set Property Name Ustaw nazwę właściwości - The current object already has a property named '%1'. Please select another, unique one. Bieżący obiekt posiada już właściwość o nazwie '%1'. Wybierz inną, unikalną nazwę. - Create Dynamic Property Utwórz dynamiczną właściwość - Property Name Nazwa właściwości - Property Type Typ właściwości - The '_q_' prefix is reserved for the Qt library. Please select another name. Przedrostek '_q_' jest zarezerwowany dla biblioteki Qt. Wybierz inną nazwę. - horizontalSpacer poziomy dystans @@ -5538,83 +4492,67 @@ Wybierz inną nazwę. qdesigner_internal::NewFormWidget - Default size Domyślny rozmiar - QVGA portrait (240x320) QVGA portret (240x320) - QVGA landscape (320x240) QVGA pejzaż (320x240) - VGA portrait (480x640) VGA portret (480x640) - VGA landscape (640x480) VGA pejzaż (640x480) - Widgets New Form Dialog Categories Widżety - Custom Widgets Własne widżety - None Żadne - Error loading form Błąd podczas ładowania formularza - Unable to open the form template file '%1': %2 Nie można otworzyć pliku '%1' z szablonem formularza: %2 - Internal error: No template selected. Błąd wewnętrzny: Nie zaznaczono szablonu. - 0 0 - Choose a template for a preview Wybierz szablon do podglądu - Embedded Design Projekt dla urządzeń specjalizowanych - Device: Urządzenie: - Screen Size: Rozmiar ekranu: @@ -5622,37 +4560,30 @@ Wybierz inną nazwę. qdesigner_internal::NewPromotedClassPanel - Add Dodaj - New Promoted Class Nowa klasa zastępcza - Base class name: Nazwa bazowej klasy: - Promoted class name: Nazwa zastępczej klasy: - Header file: Plik nagłówkowy: - Global include Nagłówek globalny - Reset Przywróć ustawienia @@ -5660,12 +4591,10 @@ Wybierz inną nazwę. qdesigner_internal::ObjectInspector - Change Current Page Zmień bieżącą stronę - &Find in Text... Z&najdź w tekście... @@ -5673,32 +4602,26 @@ Wybierz inną nazwę. qdesigner_internal::OrderDialog - Index %1 (%2) Indeks %1 (%2) - Change Page Order Zmień porządek stron - Page Order Porządek stron - Move page up Przenieś stronę do góry - Move page down Przenieś stronę w dół - %1 %2 %1 %2 @@ -5706,47 +4629,38 @@ Wybierz inną nazwę. qdesigner_internal::PaletteEditor - Edit Palette Modyfikuj paletę - Tune Palette Dopasuj paletę - Show Details Pokazuj szczegóły - Compute Details Obliczaj szczegóły - Quick Szybko - Preview Podgląd - Disabled Wyszarzony - Inactive Nieaktywny - Active Aktywny @@ -5754,7 +4668,6 @@ Wybierz inną nazwę. qdesigner_internal::PaletteEditorButton - Change Palette Zmień paletę @@ -5762,22 +4675,18 @@ Wybierz inną nazwę. qdesigner_internal::PaletteModel - Color Role Rola koloru - Active Aktywna - Inactive Nieaktywna - Disabled Wyszarzona @@ -5785,28 +4694,22 @@ Wybierz inną nazwę. qdesigner_internal::PixmapEditor - Copy Path Skopiuj ścieżkę - Paste Path Wklej ścieżkę - Choose Resource... Wybierz zasób... - Choose File... Wybierz plik... - - ... ... @@ -5814,7 +4717,6 @@ Wybierz inną nazwę. qdesigner_internal::PlainTextEditorDialog - Edit text Modyfikuj tekst @@ -5822,37 +4724,30 @@ Wybierz inną nazwę. qdesigner_internal::PluginDialog - Components Komponenty - Plugin Information Informacje o wtyczkach - Qt Designer couldn't find any plugins Qt Designer nie mógł znaleźć żadnej wtyczki - Qt Designer found the following plugins Qt Designer znalazł następujące wtyczki: - Refresh Odśwież - Scan for newly installed custom widget plugins. Szukaj nowo zainstalowanych wtyczek z widżetami. - New custom widget plugins have been found. Znaleziono nową wtyczkę z widżetami. @@ -5860,7 +4755,6 @@ Wybierz inną nazwę. qdesigner_internal::PreviewActionGroup - %1 Style Styl %1 @@ -5868,47 +4762,38 @@ Wybierz inną nazwę. qdesigner_internal::PreviewConfigurationWidget - Default Domyślny - None Żadna - Browse... Przeglądaj... - Load Custom Device Skin Załaduj dostosowaną skórkę (skin) urządzenia - All QVFB Skins (*.%1) Wszystkie skórki (skin) QVFB (*.%1) - %1 - Duplicate Skin %1 - zduplikowana skórka (skin) - The skin '%1' already exists. Skórka (skin) '%1' już istnieje. - %1 - Error %1 - Błąd - %1 is not a valid skin directory: %2 %1 nie jest poprawnym katalogiem ze skórką (skin) @@ -5918,24 +4803,20 @@ Wybierz inną nazwę. qdesigner_internal::PreviewDeviceSkin - &Portrait P&ortret - Landscape (&CCW) Rotate form preview counter-clockwise Pejzaż (&CCW) - &Landscape (CW) Rotate form preview clockwise P&ejzaż (CW) - &Close Za&mknij @@ -5943,7 +4824,6 @@ Wybierz inną nazwę. qdesigner_internal::PreviewManager - %1 - [Preview] %1 - [Podgląd] @@ -5951,7 +4831,6 @@ Wybierz inną nazwę. qdesigner_internal::PreviewMdiArea - The moose in the noose ate the goose who was loose. Palette editor background @@ -5962,57 +4841,46 @@ chrząszcz brzmi w trzcinie. qdesigner_internal::PreviewWidget - Preview Window Podgląd okna - LineEdit LineEdit - ComboBox Combobox - PushButton PushButton - ButtonGroup2 ButtonGroup2 - CheckBox1 Checkbox1 - CheckBox2 CheckBox2 - ButtonGroup ButtonGroup - RadioButton1 RadioButton1 - RadioButton2 RadioButton2 - RadioButton3 RadioBUtton3 @@ -6020,22 +4888,18 @@ chrząszcz brzmi w trzcinie. qdesigner_internal::PromotionModel - Name Nazwa - Header file Plik nagłówkowy - Global include Nagłówek globalny - Usage Użycie @@ -6043,27 +4907,22 @@ chrząszcz brzmi w trzcinie. qdesigner_internal::PromotionTaskMenu - Promoted widgets... Zastępcze widżety... - Promote to ... Zastąp... - Promote to Zastąp - Demote to %1 Przywróć do %1 - Change signals/slots... Zmień sygnały/sloty... @@ -6071,59 +4930,48 @@ chrząszcz brzmi w trzcinie. qdesigner_internal::PropertyEditor - Add Dynamic Property... Dodaj dynamiczną właściwość ... - Remove Dynamic Property Usuń dynamiczną właściwość - Sorting Sortowanie - Color Groups Kolorowanie grup - Tree View Widok drzewiasty - Drop Down Button View Widok z rozszerzalnymi przyciskami - Configure Property Editor Skonfiguruj edytor właściwości - Object: %1 Class: %2 Obiekt: %1 Klasa: %2 - String... String... - Bool... Bool... - Other... Inne... @@ -6131,7 +4979,6 @@ Klasa: %2 qdesigner_internal::PropertyLineEdit - Insert line break Wstaw znak końca linii @@ -6139,27 +4986,22 @@ Klasa: %2 qdesigner_internal::QDesignerPromotionDialog - Promoted Widgets Zastępcze widżety - Promoted Classes Zastępcze klasy - Promote Zastąp - %1 - Error %1 - Błąd - Change signals/slots... Zmień sygnały/sloty... @@ -6167,22 +5009,18 @@ Klasa: %2 qdesigner_internal::QDesignerResource - Loading qrc file ładowanie pliku qrc - The specified qrc file <p><b>%1</b></p><p>could not be found. Do you want to update the file location?</p> Plik qrc <p><b>%1</b></p><p> nie został znaleziony. Czy chcesz uaktualnić ścieżkę do pliku?</p> - New location for %1 Nowe położenie dla %1 - Resource files (*.qrc) Pliki z zasobami (*.qrc) @@ -6190,57 +5028,46 @@ Klasa: %2 qdesigner_internal::QDesignerTaskMenu - Change objectName... Zmień nazwę obiektu... - Change toolTip... Zmień podpowiedź... - Change whatsThis... Zmień "co to jest"... - Create Menu Bar Utwórz pasek menu - Add Tool Bar Dodaj pasek narzędzi - Create Status Bar Utwórz pasek stanu - Change styleSheet... Zmień arkusz stylu... - Remove Status Bar Usuń pasek stanu - Change script... Zmień skrypt... - no signals available brak dostępnych sygnałów - Set size constraint on %n widget(s) Ustaw ograniczenie rozmiaru w %n obiekcie @@ -6249,57 +5076,46 @@ Klasa: %2 - Change signals/slots... Zmień sygnały/sloty... - Go to slot... Przejdź do slotu... - Size Constraints Ograniczenia rozmiaru - Set Minimum Width Ustaw minimalną szerokość - Set Minimum Height Ustaw minimalną wysokość - Set Minimum Size Ustaw minimalny rozmiar - Set Maximum Width Ustaw maksymalną szerokość - Set Maximum Height Ustaw maksymalną wysokość - Set Maximum Size Ustaw maksymalny rozmiar - Edit ToolTip Modyfikuj podpowiedź - Edit WhatsThis Modyfikuj "Co to jest" @@ -6307,42 +5123,34 @@ Klasa: %2 qdesigner_internal::QDesignerWidgetBox - - Unexpected element <%1> Niespodziewany element <%1> - A parse error occurred at line %1, column %2 of the XML code specified for the widget %3: %4 %5 Wystąpił błąd przetwarzania w linii %1, kolumnie %2 kodu XML określonego dla widżetu %3: %4 %5 - The XML code specified for the widget %1 does not contain any widget elements. %2 Kod XML określony dla widżetu %1 nie zawiera żadnego elementu typu widżet. %2 - An error has been encountered at line %1 of %2: %3 Wystąpił błąd w linii %1 w %2: %3 - Unexpected element <%1> encountered when parsing for <widget> or <ui> Wystąpił niespodziewany element <%1> podczas przetwarzania elementu <widget> lub <ui> - Unexpected end of file encountered when parsing widgets. Wystąpił niespodziewany koniec pliku podczas przetwarzania widżetów. - A widget element could not be found. Nie można odnależć elementu <widget>. @@ -6350,73 +5158,58 @@ Klasa: %2 qdesigner_internal::QtGradientStopsController - H H - S S - V V - - Hue Barwa - Sat Nas. - Val Wart. - Saturation Nasycenie - Value Wartość - R R - G G - B B - Red Czerwień - Green Zieleń - Blue Błękit @@ -6424,27 +5217,22 @@ Klasa: %2 qdesigner_internal::RichTextEditorDialog - Edit text Modyfikuj tekst - &Cancel &Anuluj - &OK &OK - Rich Text Rich Text - Source Źródło @@ -6452,72 +5240,58 @@ Klasa: %2 qdesigner_internal::RichTextEditorToolBar - Bold Pogrubienie - Italic Kursywa - CTRL+I CTRL+I - Underline Podkreślenie - CTRL+U CTRL+U - CTRL+B CTRL+B - Left Align Wyrównanie do lewej - Center Wyrównanie do środka - Right Align Wyrównanie do prawej - Justify Wyjustuj - Superscript Indeks górny - Subscript Indeks dolny - Insert &Link Wstaw &Odsyłacz - Insert &Image Wstaw &obrazek @@ -6525,17 +5299,14 @@ Klasa: %2 qdesigner_internal::ScriptDialog - Edit script Modyfikuj skrypt - Syntax error Błąd składni - <html>Enter a Qt Script snippet to be executed while loading the form.<br>The widget and its children are accessible via the variables <i>widget</i> and <i>childWidgets</i>, respectively. <html>Wprowadź skrypt Qt który będzie wykonany podczas ładowania formularza.<br>Widżet i jego dzieci są dostępne przez zmienne <i>widget</i> i <i>childWidgets</i>, odpowiednio. @@ -6543,7 +5314,6 @@ Klasa: %2 qdesigner_internal::ScriptErrorDialog - Script errors Błędy skryptu @@ -6551,23 +5321,18 @@ Klasa: %2 qdesigner_internal::SignalSlotDialog - There is already a slot with the signature '%1'. Slot '%1' już istnieje. - There is already a signal with the signature '%1'. Sygnał '%1' już istnieje. - %1 - Duplicate Signature %1 - zduplikowany zapis - - Signals/Slots of %1 Sygnały/sloty obiektu %1 @@ -6575,12 +5340,10 @@ Klasa: %2 qdesigner_internal::SignalSlotEditorPlugin - Edit Signals/Slots Modyfikuj sygnały/sloty - F4 F4 @@ -6588,7 +5351,6 @@ Klasa: %2 qdesigner_internal::SignalSlotEditorTool - Edit Signals/Slots Modyfikuj sygnały/sloty @@ -6596,7 +5358,6 @@ Klasa: %2 qdesigner_internal::StatusBarTaskMenu - Remove Usuń @@ -6604,7 +5365,6 @@ Klasa: %2 qdesigner_internal::StringListEditorButton - Change String List Zmień listę tekstów @@ -6612,38 +5372,30 @@ Klasa: %2 qdesigner_internal::StyleSheetEditorDialog - Edit Style Sheet Modyfikuj arkusz stylu - - Valid Style Sheet Poprawny arkusz stylu - Invalid Style Sheet Niepoprawny arkusz stylu - Add Resource... Dodaj zasób... - Add Gradient... Dodaj gradient... - Add Color... Dodaj kolor... - Add Font... Dodaj czcionkę... @@ -6651,27 +5403,22 @@ Klasa: %2 qdesigner_internal::TabOrderEditor - Start from Here Rozpocznij stąd - Restart Rozpocznij od nowa - Tab Order List... Lista kolejności tabulacji... - Tab Order List Lista kolejności tabulacji - Tab Order Kolejność tabulacji @@ -6679,7 +5426,6 @@ Klasa: %2 qdesigner_internal::TabOrderEditorPlugin - Edit Tab Order Modyfikuj kolejność tabulacji @@ -6687,7 +5433,6 @@ Klasa: %2 qdesigner_internal::TabOrderEditorTool - Edit Tab Order Modyfikuj kolejność tabulacji @@ -6695,48 +5440,38 @@ Klasa: %2 qdesigner_internal::TableWidgetEditor - Edit Table Widget Modyfikuj tablę - &Items &Elementy - New Row Nowy wiersz - &Columns &Kolumny - &Rows &Wiersze - Properties &<< Własciwości &<< - - Properties &>> Własciwości &>> - Table Items Elementy tabeli - New Column Nowa kolumna @@ -6744,7 +5479,6 @@ Klasa: %2 qdesigner_internal::TableWidgetTaskMenu - Edit Items... Modyfikuj elementy... @@ -6752,22 +5486,18 @@ Klasa: %2 qdesigner_internal::TemplateOptionsWidget - Pick a directory to save templates in Wybierz katalog do zachowywania szablonów - Form Formularz - Additional Template Paths Dodatkowe ścieżki z szablonami - ... ... @@ -6775,22 +5505,18 @@ Klasa: %2 qdesigner_internal::TextEditTaskMenu - Change HTML... Zmień HTML... - Edit HTML Modyfikuj HTML - Edit Text Modyfikuj tekst - Change Plain Text... Zmień zwykły tekst... @@ -6798,22 +5524,18 @@ Klasa: %2 qdesigner_internal::TextEditor - Choose Resource... Wybierz zasób... - Choose File... Wybierz plik... - Choose a File Wybierz plik - ... ... @@ -6821,27 +5543,22 @@ Klasa: %2 qdesigner_internal::ToolBarEventFilter - Insert Separator Wstaw separator - Remove action '%1' Usuń akcję '%1' - Remove Toolbar '%1' Usuń pasek narzędzi '%1' - Insert Separator before '%1' Wstaw separator przed '%1' - Append Separator Dodaj separator @@ -6849,125 +5566,98 @@ Klasa: %2 qdesigner_internal::TreeWidgetEditor - Edit Tree Widget Modyfikuj drzewo - &Items &Elementy - Tree Items Drzewo elementów - &Columns &Kolumny - Per column properties Właściowści dla kolumny - Common properties Wspólne właściwości - - New Item Nowy element - - New Subitem Nowy podelement - Properties &<< Własciwości &<< - - Properties &>> Własciwości &>> - New &Subitem Nowy &podelement - Delete Item Usuń element - Move Item Left (before Parent Item) Przenieś element w lewo (przed element nadrzędny) - L L - Move Item Right (as a First Subitem of the Next Sibling Item) Przenieś element w prawo (jako pierwszy podelement kolejnego elementu) - R R - Move Item Up Przenieś element do góry - U U - Move Item Down Przenieś element w dół - D D - New Column Nowa kolumna - 1 1 - &New &Nowy - &Delete &Usuń @@ -6975,7 +5665,6 @@ Klasa: %2 qdesigner_internal::TreeWidgetTaskMenu - Edit Items... Modyfikujj elementy... @@ -6983,7 +5672,6 @@ Klasa: %2 qdesigner_internal::WidgetBox - Warning: Widget creation failed in the widget box. This could be caused by invalid custom widget XML. Ostrzeżenie: Błąd tworzenia widżetu w panelu widżetów. Mogło to być spowodowane niepoprawnym kodem XML widżetu. @@ -6991,42 +5679,34 @@ Klasa: %2 qdesigner_internal::WidgetBoxTreeWidget - Scratchpad Notatnik - Custom Widgets Własne widżety - Expand all Rozwiń wszystkie - Collapse all Zwiń wszystkie - List View Widok w formie listy - Icon View Widok z ikonkami - Remove Usuń - Edit name Modyfikuj nazwę @@ -7034,7 +5714,6 @@ Klasa: %2 qdesigner_internal::WidgetDataBase - A custom widget plugin whose class name (%1) matches that of an existing class has been found. Została znaleziona wtyczka widżetu, w której nazwa klasy (%1) odpowiada istniejącej już klasie. @@ -7042,7 +5721,6 @@ Klasa: %2 qdesigner_internal::WidgetEditorTool - Edit Widgets Modyfikuj widżety @@ -7050,34 +5728,28 @@ Klasa: %2 qdesigner_internal::WidgetFactory - The custom widget factory registered for widgets of class %1 returned 0. Fabryka widżetów użytkownika zarejestrowana dla widżetów klasy %1 zwróciła 0. - A class name mismatch occurred when creating a widget using the custom widget factory registered for widgets of class %1. It returned a widget of class %2. Wystąpiła niezgodność nazwy klasy podczas tworzenia widżetu przy pomocy fabryki widżetów użytkownika zarejestrowanej dla klasy %1. Zwrócony został widżet klasy %2. - %1 Widget Widżet %1 - The current page of the container '%1' (%2) could not be determined while creating a layout.This indicates an inconsistency in the ui-file, probably a layout being constructed on a container widget. Podczas tworzenia rozmieszczenia nie można było określić bieżącej strony (%2) pojemnika '%1'. Wskazuje to na niespójność pliku ui, prawdopodobnie utworzone zostało zbędne rozmieszczenie dla tego pojemnika. - Attempt to add a layout to a widget '%1' (%2) which already has an unmanaged layout of type %3. This indicates an inconsistency in the ui-file. Próba dodania rozmieszczenia do widżetu '%1' (%2) który posiada już niezarządzane rozmieszczenie typu %3. To wskazuje na niespójność w pliku "ui". - Cannot create style '%1'. Nie można utworzyć stylu '%1'. @@ -7085,12 +5757,10 @@ To wskazuje na niespójność w pliku "ui". qdesigner_internal::WizardContainerWidgetTaskMenu - Next Dalej - Back Wstecz @@ -7098,7 +5768,6 @@ To wskazuje na niespójność w pliku "ui". qdesigner_internal::ZoomMenu - %1 % Zoom factor %1 % @@ -7107,7 +5776,6 @@ To wskazuje na niespójność w pliku "ui". qdesigner_internal::ZoomablePreviewDeviceSkin - &Zoom &Powiększenie diff --git a/translations/qt_pl.ts b/translations/qt_pl.ts index 53549da..f0b144e 100644 --- a/translations/qt_pl.ts +++ b/translations/qt_pl.ts @@ -4,7 +4,6 @@ CloseButton - Close Tab Zamknij kartę @@ -12,12 +11,10 @@ FakeReply - Fake error ! Fałszywy błąd! - Invalid URL Niepoprawny URL @@ -25,37 +22,30 @@ MAC_APPLICATION_MENU - Services Usługi - Hide %1 Ukryj %1 - Hide Others Ukryj pozostałe - Show All Pokaż wszystko - Preferences... Preferencje… - Quit %1 Zakończ %1 - About %1 %1… @@ -63,32 +53,26 @@ Phonon:: - Notifications Powiadomienia - Music Muzyka - Video Wideo - Communication Komunikacja - Games Gry - Accessibility Dostępność @@ -96,24 +80,18 @@ Phonon::AudioOutput - - <html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html> <html>Urządzenie dźwiękowe <b>%1</b> nie działa.<br/>Przywracanie do <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>Przełączanie na urządzenie dźwiękowe <b>%1</b><br/>które właśnie stało się dostępne i ma wyższy priorytet.</html> - - Revert back to device '%1' Przywróć do urządzenia '%1' - <html>Switching to the audio playback device <b>%1</b><br/>which has higher preference or is specifically configured for this stream.</html> <html>Przełączanie na urządzenie dźwiękowe <b>%1</b><br/>które ma wyższy priorytet lub jest specjalnie skonfigurowane dla tego strumienia.</html> @@ -121,14 +99,12 @@ Phonon::Gstreamer::Backend - Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. Some video features have been disabled. Ostrzeżenie: Wygląda na to, że pakiet gstreamer0.10-plugins-good nie jest zainstalowany w tym systemie. Niektóre możliwości wideo zostały wyłączone. - Warning: You do not seem to have the base GStreamer plugins installed. All audio and video support has been disabled Ostrzeżenie: Wygląda na to, że podstawowe wtyczki GStreamer nie są zainstalowane w tym systemie. @@ -138,7 +114,6 @@ Obsługa dźwięku i wideo została wyłączona Phonon::Gstreamer::MediaObject - Cannot start playback. Check your GStreamer installation and make sure you @@ -149,49 +124,34 @@ Sprawdź instalację Gstreamer i upewnij się że zainstalowałeś libgstreamer-plugins-base. - Missing codec helper script assistant. - Plugin codec installation failed for codec: %0 Błąd podczas instalacji wtyczki dla kodeka: %0 - A required codec is missing. You need to install the following codec(s) to play this content: %0 Brak wymaganego kodeka. Aby odtworzyć zawartość musisz zainstalować poniższy kodek: %0 - - - - - - - - Could not open media source. Nie można otworzyć źródła mediów. - Invalid source type. Niepoprawny typ źródła. - Could not locate media source. Nie można znaleźć źródła mediów. - Could not open audio device. The device is already in use. Nie można otworzyć urządzenia dźwiękowego. Urządzenie jest już używane. - Could not decode media source. Nie można zdekodować źródła mediów. @@ -199,162 +159,130 @@ zainstalowałeś libgstreamer-plugins-base. Phonon::MMF - Audio Output Wyjście dźwięku - The audio output device Wyjściowe urządzenie dźwiękowe - No error Brak błędu - Not found Nie znaleziono - Out of memory Brak pamięci - Not supported Nieobsługiwane - Overflow Przepełnienie - Underflow Niedopełnienie - Already exists Już istnieje - Path not found Nie znaleziono ścieżki - In use W użyciu - Not ready Brak gotowości - Access denied Odmowa dostępu - Could not connect Nie można połączyć - Disconnected Rozłączono - Permission denied Brak uprawnień - Insufficient bandwidth Niewystarczająca szerokość pasma - Network unavailable Sieć niedostępna - Network communication error Błąd komunikacji sieciowej - Streaming not supported Transmisje strumieniowe nie są obsługiwane - Server alert Ostrzeżenie serwera - Invalid protocol Nieprawidłowy protokół - Invalid URL Nieprawidłowy adres URL - Multicast error Błąd multiemisji - Proxy server error Błąd serwera pośredniczącego - Proxy server not supported Nieobsługiwany serwer pośredniczący - Audio output error Błąd wyjściowego sygnału dźwiękowego - Video output error Błąd wyjściowego sygnału wideo - Decoder error Błąd dekodera - Audio or video components could not be played Nie można odtworzyć dźwięku lub wideo - DRM error Błąd DRM - Unknown error (%1) Nieznany błąd (%1) @@ -362,33 +290,34 @@ zainstalowałeś libgstreamer-plugins-base. Phonon::MMF::AbstractMediaPlayer - Not ready to play Brak gotowości odtwarzania - - Error opening file Błąd otwierania pliku - Error opening URL Błąd otwierania adresu URL - + Error opening resource + Błąd otwierania zasobu + + + Error opening source: resource not opened + Błąd otwierania źródła: zasób nie został otwarty + + Setting volume failed Ustawienie głośności zakończone błędem - Loading clip failed Załadowanie klipu zakończone błędem - Playback complete Zakończono odtwarzanie @@ -396,22 +325,18 @@ zainstalowałeś libgstreamer-plugins-base. Phonon::MMF::AbstractVideoPlayer - Pause failed Zatrzymanie zakończone błędem - Seek failed Wyszukiwanie zakończone błędem - Getting position failed Ustalanie pozycji zakończone błędem - Opening clip failed Otwieranie klipu zakończone błędem @@ -419,7 +344,6 @@ zainstalowałeś libgstreamer-plugins-base. Phonon::MMF::AudioEqualizer - %1 Hz %1 Hz @@ -427,7 +351,6 @@ zainstalowałeś libgstreamer-plugins-base. Phonon::MMF::AudioPlayer - Getting position failed Ustalanie pozycji zakończone błędem @@ -435,11 +358,6 @@ zainstalowałeś libgstreamer-plugins-base. Phonon::MMF::DsaVideoPlayer - - - - - Video display error Błąd wyświetlacza wideo @@ -447,7 +365,6 @@ zainstalowałeś libgstreamer-plugins-base. Phonon::MMF::EffectFactory - Enabled Włączono @@ -455,61 +372,51 @@ zainstalowałeś libgstreamer-plugins-base. Phonon::MMF::EnvironmentalReverb - Decay HF ratio (%) DecayHFRatio: Ratio of high-frequency decay time to the value specified by DecayTime. Współczynnik zanikania HF (%) - Decay time (ms) DecayTime: Time over which reverberation is diminished. Czas zanikania (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. Gęstość (%) - 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. Rozpraszanie (%) - Reflections delay (ms) ReflectionsDelay: Amount of delay between the arrival the direct path from the source and the arrival of the first reflection. Opóźnienie odbić (ms) - Reflections level (mB) ReflectionsLevel: Amplitude of reflections. This value is corrected by the RoomLevel to give the final reflection amplitude. Poziom odbić (mB) - Reverb delay (ms) ReverbDelay: Amount of time between arrival of the first reflection and start of the late reverberation. Opóźnienie pogłosu (ms) - Reverb level (mB) ReverbLevel Amplitude of reverberations. This value is corrected by the RoomLevel to give the final reverberation amplitude. Poziom pogłosu (mB) - Room HF level RoomHFLevel: Amplitude of low-pass filter used to attenuate the high frequency component of reflected sound. Poziom HF pomieszczenia - Room level (mB) RoomLevel: Master volume control for all reflected sound. Poziom pomieszczenia (mB) @@ -518,12 +425,18 @@ zainstalowałeś libgstreamer-plugins-base. Phonon::MMF::MediaObject - Error opening source: type not supported Błąd otwierania źródła: typ źródła nie jest obsługiwany - + Error opening source: resource is compressed + Błąd otwierania źródła: zasób jest skompresowany + + + Error opening source: resource not valid + Błąd otwierania źródła: niepoprawny zasób + + Error opening source: media type could not be determined Błąd otwierania źródła: nie można określić typu multimediów @@ -531,7 +444,6 @@ zainstalowałeś libgstreamer-plugins-base. Phonon::MMF::StereoWidening - Level (%) Poziom (%) @@ -539,8 +451,6 @@ zainstalowałeś libgstreamer-plugins-base. Phonon::MMF::SurfaceVideoPlayer - - Video display error Błąd wyświetlacza wideo @@ -548,22 +458,14 @@ zainstalowałeś libgstreamer-plugins-base. Phonon::VolumeSlider - - - - Volume: %1% Głośność: %1% - - - Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1% Użyj tego suwaka aby zmienić głośność. Skrajnie lewa pozycja to 0%, skrajnie prawa to %1% - Muted Wyciszony @@ -571,12 +473,10 @@ zainstalowałeś libgstreamer-plugins-base. Q3Accel - %1, %2 not defined %1, %2 nie określone - Ambiguous %1 not handled Niejednoznaczne %1, nie obsłużone @@ -584,27 +484,22 @@ zainstalowałeś libgstreamer-plugins-base. Q3DataTable - Delete Skasuj - False Fałsz - Insert Wstaw - True Prawda - Update Uaktualnij @@ -612,7 +507,6 @@ zainstalowałeś libgstreamer-plugins-base. Q3FileDialog - %1 File not found. Check path and filename. @@ -621,323 +515,246 @@ Plik nie znaleziony. Sprawdź ścieżkę i nazwę pliku. - <qt>Are you sure you wish to delete %1 "%2"?</qt> <qt>Na pewno chcesz skasować %1 "%2"?</qt> - - - - All Files (*) Wszystkie pliki (*) - Attributes Atrybuty - Back Powrót - - Cancel Anuluj - Copy or Move a File Skopiuj lub przenieś plik - Create New Folder Utwórz nowy katalog - Date Data - &Delete &Skasuj - Delete %1 Skasuj %1 - Detail View Szczegóły - Dir Katalog - - Directories Katalogi - Directory: Katalog: - - Error Błąd - File Plik - - - File &name: Nazwa &pliku: - File &type: &Rodzaj pliku: - Find Directory Znajdź katalog - Inaccessible Niedostępny - List View Lista - Look &in: Sprawdź &w: - Name Nazwa - New Folder Nowy katalog - New Folder %1 Nowy katalog %1 - New Folder 1 Nowy katalog 1 - &No &Nie - - &OK &OK - One directory up Katalog wyżej - - - &Open &Otwórz - - - Open Otwórz - Preview File Contents Podgląd zawartości pliku - Preview File Info Podgląd informacji o pliku - Read: %1 Czytaj: %1 - Read-only Tylko do odczytu - Read-write Do zapisu i odczytu - R&eload &Odśwież - &Rename &Zmień nazwę - - &Save &Zachowaj - - Save As Zachowaj jako - Show &hidden files Pokaż &ukryte pliki - Size Rozmiar - Sort Sortuj - Sort by &Date Sortuj po &dacie - Sort by &Name Sortuj &po nazwie - Sort by &Size Sortuj po &rozmiarze - Special Specjalny - Symlink to Directory Dowiązanie symboliczne do katalogu - Symlink to File Dowiązanie symboliczne do pliku - Symlink to Special Dowiązanie symboliczne do pliku specjalnego - the directory katalog - the file plik - the symlink dowiązanie symboliczne - Type Rodzaj - &Unsorted &Bez sortowania - - Write: %1 Pisz: %1 - Write-only Tylko do zapisu - &Yes &Tak - All Files (*.*) Wszystkie pliki (*.*) - Open Otwórz - Select a Directory Wybierz katalog @@ -945,36 +762,30 @@ Sprawdź ścieżkę i nazwę pliku. Q3LocalFs - Could not create directory %1 Nie można utworzyć katalogu %1 - Could not open %1 Nie można otworzyć %1 - - Could not read directory %1 Nie można czytać katalogu %1 - Could not remove file or directory %1 Nie można usunąć pliku lub katalogu %1 - Could not rename %1 to @@ -985,7 +796,6 @@ na %2 - Could not write %1 Nie można zapisać @@ -995,12 +805,10 @@ na Q3MainWindow - Customize... Ustawienia użytkownika... - Line up Wyrównaj położenie @@ -1008,7 +816,6 @@ na Q3NetworkProtocol - Operation stopped by the user Operacja zatrzymana przez użytkownika @@ -1016,8 +823,6 @@ na Q3ProgressDialog - - Cancel Anuluj @@ -1025,28 +830,22 @@ na Q3TabDialog - Apply Zatwierdź - Cancel Anuluj - Defaults Domyślne - Help Pomoc - - OK OK @@ -1054,38 +853,30 @@ na Q3TextEdit - Clear Wyczyść - &Copy S&kopiuj - Cu&t W&ytnij - &Paste &Wklej - &Redo &Przywróć - - Select All Zaznacz wszystko - &Undo &Cofnij @@ -1093,67 +884,54 @@ na Q3TitleBar - Close Zamknij okno - Closes the window Zamyka okno - Contains commands to manipulate the window Zawiera polecenia zarządzające oknem - Displays the name of the window and contains controls to manipulate it Wyświetla nazwę okna i zawiera elementy do zarządzania nim - Makes the window full screen Powiększa maksymalnie okno - Maximize Zmaksymalizuj - Minimize Zminimalizuj - Puts a minimized window back to normal Przywraca normalny rozmiar uprzednio zminimalizowanego okna - Moves the window out of the way Przenosi okno w inne położenie - Puts a maximized window back to normal Przywraca normalny rozmiar uprzednio zmaksymalizowanego okna - Restore down Przywróć pod spód - Restore up Przywróć na wierzch - System System @@ -1161,7 +939,6 @@ na Q3ToolBar - More... Więcej... @@ -1169,51 +946,38 @@ na Q3UrlOperator - - (unknown) (nieznany) - - The protocol `%1' does not support copying or moving files or directories Protokół '%1' nie obsługuje kopiowania lub przenoszenia plików lub katalogów - The protocol `%1' does not support creating new directories Protokół '%1' nie obsługuje tworzenia nowych katalogów - The protocol `%1' does not support getting files Protokół '%1' nie obsługuje pobierania plików - The protocol `%1' does not support listing directories Protokół '%1' nie obsługuje pokazywania katalogów - The protocol `%1' does not support putting files Protokół '%1' nie obsługuje wysyłania plików - The protocol `%1' does not support removing files or directories Protokół '%1' nie obsługuje usuwania plików lub katalogów - The protocol `%1' does not support renaming files or directories Protokół '%1' nie obsługuje zmiany nazwy plików lub katalogów - - - The protocol `%1' is not supported Protokół '%1' nie jest obsługiwany @@ -1221,27 +985,22 @@ na Q3Wizard - < &Back < &Wstecz - &Cancel &Anuluj - &Finish &Zakończ - &Help &Pomoc - &Next > &Dalej > @@ -1249,45 +1008,30 @@ na QAbstractSocket - - - Connection refused Połączenie odrzucone - - - - Host not found Host nie znaleziony - Connection timed out Przekroczony czas połączenia - - - Operation on socket is not supported Operacja na gnieździe nie jest obsługiwana - Socket is not connected Gniazdo nie jest podłączone - - Socket operation timed out Przekroczony czas operacji gniazda - Network unreachable Sieć niedostępna @@ -1295,17 +1039,14 @@ na QAbstractSpinBox - Step &down Krok w &dół - &Step up Krok do &góry - &Select All &Zaznacz wszystko @@ -1313,7 +1054,6 @@ na QAccessibleButton - Press Wciśnij @@ -1321,27 +1061,22 @@ na QApplication - Activate Uaktywnij - Activates the program's main window Uaktywnia główne okno programu - Executable '%1' requires Qt %2, found Qt %3. Program '%1' wymaga do uruchomienia Qt %2, znaleziono Qt %3. - Incompatible Qt Library Error Niekompatybilność biblioteki 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 @@ -1350,22 +1085,18 @@ na QAxSelect - Select ActiveX Control Wybierz kontrolkę ActiveX - OK OK - &Cancel &Anuluj - COM &Object: &Obiekt COM: @@ -1373,17 +1104,14 @@ na QCheckBox - Check Zaznacz - Toggle Przełącz - Uncheck Odznacz @@ -1391,57 +1119,46 @@ na QColorDialog - &Add to Custom Colors &Dodaj do własnych kolorów - A&lpha channel: Kanał &alfa: - Select Color Wybierz kolor - &Basic colors &Kolory podstawowe - Bl&ue: Błęki&t: - &Custom colors Wła&sne kolory - &Green: &Zieleń: - Hu&e: &Barwa: - &Red: &Czerwień: - &Sat: &Nasycenie: - &Val: &Wartość: @@ -1449,23 +1166,18 @@ na QComboBox - - Open Otwórz - False Fałsz - True Prawda - Close Zamknij @@ -1473,43 +1185,36 @@ na QCoreApplication - %1: already exists QSystemSemaphore %1: już istnieje - %1: does not exist QSystemSemaphore %1: nie istnieje - %1: out of resources QSystemSemaphore %1: zasoby wyczerpane - %1: unknown error %2 QSystemSemaphore %1: nieznany błąd %2 - %1: key is empty QSystemSemaphore %1: klucz jest pusty - %1: unable to make key QSystemSemaphore %1: nie można utworzyć klucza - %1: ftok failed QSystemSemaphore %1: wystąpił błąd w funkcji ftok() @@ -1518,22 +1223,18 @@ na QDB2Driver - Unable to connect Nie można nawiązać połączenia - Unable to commit transaction Nie można dokonać transakcji - Unable to rollback transaction Nie można wycofać transakcji - Unable to set autocommit Nie można ustawić trybu automatycznego dokonywania transakcji @@ -1541,33 +1242,26 @@ na QDB2Result - - Unable to execute statement Nie można wykonać polecenia - Unable to prepare statement Nie można przygotować polecenia - Unable to bind variable Nie można powiązać zmiennej - Unable to fetch record %1 Nie można pobrać rekordu %1 - Unable to fetch next Nie można pobrać kolejnego wiersza danych - Unable to fetch first Nie można pobrać pierwszego wiersza danych @@ -1575,22 +1269,18 @@ na QDateTimeEdit - am am - AM AM - pm pm - PM PM @@ -1598,17 +1288,14 @@ na QDeclarativeAbstractAnimation - Cannot animate non-existent property "%1" Nie można animować nieistniejącej właściwości "%1" - Cannot animate read-only property "%1" Nie można animować właściwości (tylko do odczytu): "%1" - Animation is an abstract class "Animation" jest klasą abstrakcyjną @@ -1616,7 +1303,6 @@ na QDeclarativeAnchorAnimation - Cannot set a duration of < 0 Nie można ustawić ujemnego czasu trwania @@ -1624,67 +1310,50 @@ na QDeclarativeAnchors - Possible anchor loop detected on fill. Wykryto możliwe zapętlenie dla kotwicy "fill". - Possible anchor loop detected on centerIn. Wykryto możliwe zapętlenie dla kotwicy "centerIn". - - - - Cannot anchor to an item that isn't a parent or sibling. Nie można doczepić kotwicy do elementu który nie jest rodzicem ani rodzeństwem. - Possible anchor loop detected on vertical anchor. Wykryto możliwe zapętlenie dla pionowej kotwicy. - Possible anchor loop detected on horizontal anchor. Wykryto możliwe zapętlenie dla poziomej kotwicy. - Cannot specify left, right, and hcenter anchors. Nie można jednocześnie podać lewej, prawej i centralnej poziomej kotwicy. - - Cannot anchor to a null item. Nie można doczepić kotwicy do zerowego elementu. - Cannot anchor a horizontal edge to a vertical edge. Nie można doczepić poziomej krawędzi do pionowej. - - Cannot anchor item to self. Nie można doczepić kotwicy do tego samego elementu. - Cannot specify top, bottom, and vcenter anchors. Nie można jednocześnie podać górnej, dolnej i centralnej pionowej kotwicy. - Baseline anchor cannot be used in conjunction with top, bottom, or vcenter anchors. Bazowa kotwica nie może być użyta w połączeniu z górną, dolną lub centralną pionową kotwicą. - Cannot anchor a vertical edge to a horizontal edge. Nie można doczepić pionowej krawędzi do poziomej. @@ -1692,7 +1361,6 @@ na QDeclarativeAnimatedImage - Qt was built without support for QMovie Qt zostało zbudowane bez obsługi QMovie @@ -1700,7 +1368,6 @@ na QDeclarativeBehavior - Cannot change the animation assigned to a Behavior. Nie można zmienić animacji przypisanej do "Zachowania". @@ -1708,7 +1375,6 @@ na QDeclarativeBinding - Binding loop detected for property "%1" Zapętlenie powiązania dla właściwości "%1" @@ -1716,7 +1382,6 @@ na QDeclarativeCompiledBindings - Binding loop detected for property "%1" Zapętlenie powiązania dla właściwości "%1" @@ -1724,37 +1389,26 @@ na QDeclarativeCompiler - - - - - - Invalid property assignment: "%1" is a read-only property Niepoprawne przypisanie wartości: "%1" jest właściwością tylko do odczytu - Invalid property assignment: unknown enumeration Niepoprawne przypisanie wartości: nieznana wartość wyliczeniowa - Invalid property assignment: string expected Niepoprawne przypisanie wartości: oczekiwano ciągu - Invalid property assignment: url expected Niepoprawne przypisanie wartości: oczekiwano url - Invalid property assignment: unsigned int expected Niepoprawne przypisanie wartości: oczekiwano liczby naturalnej - Invalid property assignment: int expected Niepoprawne przypisanie wartości: oczekiwano liczby całkowitej @@ -1767,356 +1421,278 @@ na Niepoprawne przypisanie wartości: oczekiwano liczby zmiennoprzecinkowej podwójnej precyzji - - Invalid property assignment: number expected Niepoprawne przypisanie wartości: oczekiwano liczby - Invalid property assignment: color expected Niepoprawne przypisanie wartości: oczekiwano koloru - Invalid property assignment: date expected Niepoprawne przypisanie wartości: oczekiwano daty - Invalid property assignment: time expected Niepoprawne przypisanie wartości: oczekiwano czasu - Invalid property assignment: datetime expected Niepoprawne przypisanie wartości: oczekiwano daty i czasu - Invalid property assignment: point expected Niepoprawne przypisanie wartości: oczekiwano punktu - Invalid property assignment: size expected Niepoprawne przypisanie wartości: oczekiwano rozmiaru - Invalid property assignment: rect expected Niepoprawne przypisanie wartości: oczekiwano prostokąta - Invalid property assignment: boolean expected Niepoprawne przypisanie wartości: oczekiwano wartości boolowskiej - Invalid property assignment: 3D vector expected - Niepoprawne przypisanie wartości: oczekiwano wektoru 3D + Niepoprawne przypisanie wartości: oczekiwano wektora 3D - Invalid property assignment: unsupported type "%1" Niepoprawne przypisanie wartości: nieobsługiwany typ "%1" - Element is not creatable. Nie można utworzyć elementu ("creatable" wyłączone). - Component elements may not contain properties other than id Elementy komponentu nie mogą posiadać właściwości innych niż "id" - Invalid component id specification Niepoprawna specyfikacja "id" komponentu - - id is not unique Wartość "id" nie jest unikatowa - Invalid component body specification Niepoprawna specyfikacja "body" komponentu - Component objects cannot declare new properties. Instancje komponentu nie mogą deklarować nowych właściwości. - Component objects cannot declare new signals. Instancje komponentu nie mogą deklarować nowych sygnałów. - Component objects cannot declare new functions. Instancje komponentu nie mogą deklarować nowych funkcji. - Cannot create empty component specification Nie można utworzyć pustej specyfikacji komponentu - Incorrectly specified signal assignment Przypisanie sygnału błędnie podane - Cannot assign a value to a signal (expecting a script to be run) Nie można przypisać wartości do sygnału (oczekiwano uruchomienia skryptu) - Empty signal assignment Przypisanie pustego sygnału - Empty property assignment Przypisanie pustej właściwości - Attached properties cannot be used here Dołączone właściwości nie mogą być tutaj użyte - - Non-existent attached object Nieistniejący dołączony obiekt - - Invalid attached object assignment Niepoprawne przypisanie dołączonego obiektu - Cannot assign to non-existent default property Nie można przypisać wartości do nieistniejącej domyślnej właściwości - - Cannot assign to non-existent property "%1" Nie można przypisać wartości do nieistniejącej właściwości "%1" - Invalid use of namespace Niepoprawne użycie przestrzeni nazw - Not an attached property name Nie jest to nazwa dołączonej właściwości - Invalid use of id property Niepoprawne użycie właściwości "id" - - Property has already been assigned a value Wartość została już przypisana do właściwości - - Invalid grouped property access Błędny dostęp do zgrupowanej właściwości - Cannot assign a value directly to a grouped property Nie można bezpośrednio przypisać wartości do zgrupowanej właściwości - Invalid property use Niepoprawne użycie właściwości - Property assignment expected Oczekiwano przypisania wartości - Single property assignment expected Oczekiwano przypisania pojedynczej wartości - Unexpected object assignment Nieoczekiwane przypisanie obiektu - Cannot assign object to list Nie można przypisać obiektu do listy - Can only assign one binding to lists Tylko jedno powiązanie może być przypisane do listy - Cannot assign primitives to lists Nie można przypisać elementu do listy - Cannot assign multiple values to a script property Nie można przypisać wielu wartości do skryptowej właściwości - Invalid property assignment: script expected Niepoprawne przypisanie wartości: oczekiwano skryptu - Cannot assign object to property Nie można przypisać obiektu dla właściwości - "%1" cannot operate on "%2" "%1" nie może operować na "%2" - Duplicate default property Powielona domyślna właściwość - Duplicate property name Powielona nazwa właściwości - Property names cannot begin with an upper case letter Nazwy właściwości nie mogą rozpoczynać się wielką literą - Illegal property name Niepoprawna nazwa właściwości - Duplicate signal name Powielona nazwa sygnału - Signal names cannot begin with an upper case letter Nazwy sygnałów nie mogą rozpoczynać się wielką literą - Illegal signal name Niepoprawna nazwa sygnału - Duplicate method name - Powielona nazwa medoty + Powielona nazwa metody - Method names cannot begin with an upper case letter Nazwy metod nie mogą rozpoczynać się wielką literą - Illegal method name Niepoprawna nazwa metody - Property value set multiple times Wartość właściwości ustawiona wielokrotnie - Invalid property nesting Niepoprawne zagnieżdżenie właściwości - Cannot override FINAL property Nie można nadpisać właściwości "FINAL" - Invalid property type Niepoprawny typ właściwości - Invalid empty ID Niepoprawny pusty identyfikator - IDs cannot start with an uppercase letter Identyfikatory nie mogą rozpoczynać się wielką literą - IDs must start with a letter or underscore Identyfikatory muszą rozpoczynać się literą lub znakiem podkreślenia - IDs must contain only letters, numbers, and underscores Identyfikatory mogą zawierać jedynie litery, cyfry i znaki podkreślenia - ID illegally masks global JavaScript property - - No property alias location - - Invalid alias location Niepoprawne położenie aliasu - Invalid alias reference. An alias reference must be specified as <id> or <id>.<property> Niepoprawna referencja aliasu. Referencja aliasu musi być podana jako <id> lub <id> <property> - Invalid alias reference. Unable to find id "%1" Niepoprawna referencja aliasu. Nie można odnaleźć identyfikatora "%1" @@ -2124,7 +1700,6 @@ na QDeclarativeComponent - Invalid empty URL Niepoprawny pusty URL @@ -2132,23 +1707,18 @@ na QDeclarativeCompositeTypeManager - - Resource %1 unavailable Zasób %1 nie jest dostępny - Namespace %1 cannot be used as a type Przestrzeń nazw %1 nie może być użyta jako typ - %1 %2 %1 %2 - Type %1 unavailable Typ %1 nie jest dostępny @@ -2156,23 +1726,18 @@ na QDeclarativeConnections - - Cannot assign to non-existent property "%1" Nie można przypisać wartości do nieistniejącej właściwości "%1" - Connections: nested objects not allowed Połączenia: zagnieżdżone obiekty nie są dozwolone - Connections: syntax error Połączenia: błąd składni - Connections: script expected Połączenia: oczekiwano skryptu @@ -2180,33 +1745,26 @@ na QDeclarativeEngine - executeSql called outside transaction() "executeSql" zawołane na zewnątrz "transation()" - Read-only Transaction Transakcja tylko do odczytu - Version mismatch: expected %1, found %2 Niezgodność wersji: oczekiwano %1, znaleziono %2 - SQL transaction failed Transakcja SQL zakończona błędem - transaction: missing callback - - SQL: database version mismatch SQL: niezgodność wersji bazy danych @@ -2214,12 +1772,10 @@ na QDeclarativeFlipable - front is a write-once property "front" jest właściwością tylko do odczytu - back is a write-once property "back" jest właściwością tylko do odczytu @@ -2227,75 +1783,58 @@ na QDeclarativeImportDatabase - module "%1" definition "%2" not readable definicja "%2" modułu "%1" nie może zostać odczytana - plugin cannot be loaded for module "%1": %2 wtyczka nie może zostać załadowana dla modułu "%1": %2 - module "%1" plugin "%2" not found wtyczka "%2" modułu "%1" nie została odnaleziona - - module "%1" version %2.%3 is not installed wersja %2.%3 modułu %1 nie jest zainstalowana - module "%1" is not installed moduł "%1" nie jest zainstalowany - - "%1": no such directory "%1": brak katalogu - import "%1" has no qmldir and no namespace - - %1 is not a namespace - %1 nie jest przestrzenią nazw - - nested namespaces not allowed - zagnieżdżone przestrzenie nazw nie są dozwolone - - local directory lokalny katalog - is ambiguous. Found in %1 and in %2 jest niejednoznaczny. Znaleziono w %1 i w %2 - is ambiguous. Found in %1 in version %2.%3 and %4.%5 jest niejednoznaczny. Znaleziono w %1 w wersji %2.%3 i %4.%5 - is instantiated recursively jest zinstancjonowany rekurencyjnie - is not a type nie jest typem @@ -2303,7 +1842,6 @@ na QDeclarativeKeyNavigationAttached - KeyNavigation is only available via attached properties "KeyNavigation" jest dostępny jedynie poprzez dołączone właściwości @@ -2311,7 +1849,6 @@ na QDeclarativeKeysAttached - Keys is only available via attached properties "Keys" jest dostępny jedynie poprzez dołączone właściwości @@ -2319,59 +1856,46 @@ na QDeclarativeListModel - remove: index %1 out of range remove: indeks %1 poza zakresem - insert: value is not an object insert: wartość nie jest obiektem - insert: index %1 out of range insert: indeks %1 poza zakresem - move: out of range move: poza zakresem - append: value is not an object append: wartość nie jest obiektem - set: value is not an object set: wartość nie jest obiektem - - set: index %1 out of range set: indeks %1 poza zakresem - - ListElement: cannot contain nested elements ListElement: nie może zawierać zagnieżdżonych elementów - ListElement: cannot use reserved "id" property ListElement: nie można używać zarezerwowanej właściwości "id" - ListElement: cannot use script for property value ListElement: nie można używać skryptu jako wartości właściwości - ListModel: undefined property '%1' ListModel: niezdefiniowana właściwość "%1" @@ -2379,7 +1903,6 @@ na QDeclarativeLoader - Loader does not support loading non-visual elements. Ładowanie elementów niewizualnych nie jest obsługiwane. @@ -2387,18 +1910,14 @@ na QDeclarativeParentAnimation - Unable to preserve appearance under complex transform - - Unable to preserve appearance under non-uniform scale - Unable to preserve appearance under scale of 0 @@ -2406,18 +1925,14 @@ na QDeclarativeParentChange - Unable to preserve appearance under complex transform - - Unable to preserve appearance under non-uniform scale - Unable to preserve appearance under scale of 0 @@ -2425,144 +1940,110 @@ na QDeclarativeParser - - - Illegal unicode escape sequence - Illegal character Niepoprawny znak - Unclosed string at end of line Niedomknięty ciąg na końcu linii - Illegal escape squence - Unclosed comment at end of file Niedomknięty komentarz na końcu linii - Illegal syntax for exponential number Niepoprawna składnia liczby o postaci wykładniczej - Identifier cannot start with numeric literal Identyfikator nie może rozpoczynać się stałą liczbową - Unterminated regular expression literal Niedokończone wyrażenie regularne - Invalid regular expression flag '%0' Niepoprawna flaga "%0" w wyrażeniu regularnym - - Unterminated regular expression backslash sequence - Unterminated regular expression class Niedokończona klasa wyrażenia regularnego - - Syntax error Błąd składni - Unexpected token `%1' Nieoczekiwany znak "%1" - - Expected token `%1' Oczekiwany znak "%1" - - - Property value set multiple times Wartość właściwości ustawiona wielokrotnie - Expected type name Oczekiwana nazwa typu - Invalid import qualifier ID - Reserved name "Qt" cannot be used as an qualifier "Qt" jest nazwą zarezerwowaną i nie może być użyta jako kwalifikator - Script import qualifiers must be unique. Kwalifikator importu skryptu musi być unikatowy. - Script import requires a qualifier Import skryptu wymaga użycia kwalifikatora - Library import requires a version Import biblioteki wymaga podania wersji - Expected parameter type Oczekiwany typ parametru - Invalid property type modifier Niepoprawny modyfikator typu właściwości - Unexpected property type modifier Nieoczekiwany modyfikator typu właściwości - Expected property type Oczekiwany typ właściwości - Readonly not yet supported "Tylko do odczytu" nie jest jeszcze obsługiwane - JavaScript declaration outside Script element Deklaracja "JavaScript" na zewnątrz elementu "Script" @@ -2570,7 +2051,6 @@ na QDeclarativePauseAnimation - Cannot set a duration of < 0 Nie można ustawić ujemnego czasu trwania @@ -2578,19 +2058,14 @@ na QDeclarativePixmap - Error decoding: %1: %2 Błąd dekodowania: %1: %2 - - Failed to get image from provider: %1 Pobieranie obrazka od dostawcy zakończone błędem: %1 - - Cannot open: %1 Nie można otworzyć: %1 @@ -2617,7 +2092,6 @@ na QDeclarativePropertyAnimation - Cannot set a duration of < 0 Nie można ustawić ujemnego czasu trwania @@ -2625,17 +2099,14 @@ na QDeclarativePropertyChanges - PropertyChanges does not support creating state-specific objects. "PropertyChanges" nie obsługuje tworzenia obiektów charakterystycznych dla stanów. - Cannot assign to non-existent property "%1" Nie można przypisać wartości do nieistniejącej właściwości "%1" - Cannot assign to read-only property "%1" Nie można przypisać wartości do właściwości (tylko do odczytu): "%1" @@ -2643,13 +2114,10 @@ na QDeclarativeTextInput - - Could not load cursor delegate - Could not instantiate cursor delegate @@ -2657,47 +2125,38 @@ na QDeclarativeVME - Unable to create object of type %1 Nie można utworzyć obiektu typu %1 - Cannot assign value %1 to property %2 Nie można przypisać wartości %1 do właściwości %2 - Cannot assign object type %1 with no default method Nie można przypisać obiektu typu %1 który nie posiada domyślnej metody - Cannot connect mismatched signal/slot %1 %vs. %2 Nie można podłączyć niezgodnych sygnałów / slotów (%1 i %2) - Cannot assign an object to signal property %1 - Cannot assign object to list Nie można przypisać obiektu do listy - Cannot assign object to interface property - Unable to create attached object Nie można utworzyć dołączonego obiektu - Cannot set properties on %1 as it is null Nie można ustawić właściwości dla %1 ponieważ jest on zerowy @@ -2705,7 +2164,6 @@ na QDeclarativeVisualDataModel - Delegate component must be Item type. @@ -2713,8 +2171,6 @@ na QDeclarativeXmlListModel - - Qt was built without support for xmlpatterns Qt zostało zbudowane bez obsługi xmlpatterns @@ -2722,7 +2178,6 @@ na QDeclarativeXmlListModelRole - An XmlRole query must not start with '/' Zapytanie XmlRole nie może rozpoczynać się od "/" @@ -2730,7 +2185,6 @@ na QDeclarativeXmlRoleList - An XmlListModel query must start with '/' or "//" Zapytanie XmlListModel nie może rozpoczynać się od "/" ani od "//" @@ -2738,17 +2192,14 @@ na QDial - QDial QDial - SpeedoMeter Miernik prędkości - SliderHandle Uchwyt suwaka @@ -2756,12 +2207,10 @@ na QDialog - What's This? Co to jest? - Done Zrobione @@ -2769,124 +2218,98 @@ na QDialogButtonBox - Abort Przerwij - Apply Zastosuj - &Save &Zachowaj - Cancel Anuluj - &Cancel &Anuluj - Close Zamknij - &Close &Zamknij - Close without Saving Zamknij bez zapisywania - Discard Odrzuć - Don't Save Nie zachowuj - Help Pomoc - Ignore Zignoruj - &No &Nie - N&o to All Ni&e dla wszystkich - - - OK OK - Open Otwórz - Reset Resetuj - Restore Defaults Przywróć ustawienia - Retry Ponów - Save Zachowaj - Save All Zachowaj wszystko - &Yes &Tak - Yes to &All Ta&k dla wszystkich - &OK &OK @@ -2894,28 +2317,23 @@ na QDirModel - Date Modified Data modyfikacji - Kind Match OS X Finder Typ - Name Nazwa - Size Rozmiar - Type All other platforms Rodzaj @@ -2924,17 +2342,14 @@ na QDockWidget - Close Zamknij - Dock Zadokuj - Float Uwolnij @@ -2942,12 +2357,10 @@ na QDoubleSpinBox - More Więcej - Less Mniej @@ -2955,27 +2368,22 @@ na QErrorMessage - Debug Message: Komunikat dla programisty: - Fatal Error: Błąd krytyczny: - &OK &OK - &Show this message again &Pokaż ten komunikat ponownie - Warning: Ostrzeżenie: @@ -2983,38 +2391,30 @@ na QFile - - Destination file exists Plik wyjściowy już istnieje - Will not rename sequential file using block copy Nie można zmienić nazwy pliku sekwencyjnego używając kopiowania blokowego - Cannot remove source file Nie można usunąć oryginalnego pliku - Cannot open %1 for input Nie można otworzyć pliku wejściowego %1 - Cannot open for output Nie można otworzyć pliku wyjściowego - Failure to write block Nie można zapisać bloku - Cannot create %1 for output Nie można utworzyć pliku wyjściowego %1 @@ -3022,22 +2422,18 @@ na QFileDialog - %1 already exists. Do you want to replace it? %1 już istnieje. Czy chcesz zamienić? - '%1' is write protected. Do you want to delete it anyway? '%1' jest zabezpieczony przed zapisem. Czy na pewno chcesz go skasować? - - %1 Directory not found. Please verify the correct directory name was given. @@ -3046,7 +2442,6 @@ Katalog nie znaleziony. Sprawdź podaną nazwę katalogu. - %1 File not found. Please verify the correct file name was given. @@ -3055,237 +2450,178 @@ Plik nie znaleziony. Proszę o sprawdzenie podanej nazwy pliku. - Are sure you want to delete '%1'? Czy na pewno chcesz skasować '%1'? - Recent Places Ostatnie miejsca - - Back Powrót - Could not delete directory. Nie można skasować katalogu. - &Delete &Skasuj - - Detail View Szczegóły - Directories Katalogi - - Directory: Katalog: - Drive Urządzenie - - File Plik - File Folder Match Windows Explorer Katalog - Folder All other platforms Katalog - Alias Mac OS X Finder Alias - Shortcut All other platforms Skrót - - Files of type: Pliki rodzaju: - - List View Lista - My Computer Mój komputer - - - &Open &Otwórz - - Parent Directory Katalog wyżej - &Rename &Zmień nazwę - - &Save &Zachowaj - Show &hidden files Pokaż &ukryte pliki - Unknown Nieznany - Open Otwórz - Save As Zachowaj jako - Find Directory Znajdź katalog - All Files (*.*) Wszystkie pliki (*.*) - Show Pokaż - - Forward Do przodu - New Folder Nowy katalog - &New Folder &Nowy katalog - - &Choose &Wybierz - Remove Usuń - - All Files (*) Wszystkie pliki (*) - - File &name: Nazwa &pliku: - - Look in: Szukaj w: - - Create New Folder Utwórz nowy katalog - Go back Wróć - Go forward Przejdź dalej - Go to the parent directory Przejdź do katalogu wyżej - Create a New Folder Utwórz nowy katalog - Change to list view mode Pokaż listę - Change to detail view mode Pokaż szczegóły @@ -3293,83 +2629,64 @@ Proszę o sprawdzenie podanej nazwy pliku. QFileSystemModel - - %1 TB %1 TB - - %1 GB %1 GB - - %1 MB %1 MB - - %1 KB %1 KB - %1 bytes %1 bajtów - Invalid filename Niepoprawna nazwa pliku - <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. <b>Nazwa "%1" nie może zostać użyta.</b><p>Spróbuj użyć nowej nazwy z mniejszą liczbą znaków lub bez znaków przystankowych. - Name Nazwa - Size Rozmiar - Kind Match OS X Finder Typ - Type All other platforms Rodzaj - Date Modified Data modyfikacji - My Computer Mój komputer - Computer Komputer - %1 byte(s) %1 bajt(ów) @@ -3377,223 +2694,172 @@ Proszę o sprawdzenie podanej nazwy pliku. QFontDatabase - - Normal Normalny - - - Bold Pogrubiony - - Demi Bold Na wpół pogrubiony - - - Black it's about font weight Bardzo gruby - Demi Na wpół - - Light it's about font weight Cienki - - Italic Kursywa - - Oblique Pochyły - Any Każdy - Latin Łaciński - Greek Grecki - Cyrillic Cyrylica - Armenian Ormiański - Hebrew Hebrajski - Arabic Arabski - Syriac Syryjski - Thaana Thaana - Devanagari Devanagari - Bengali Bengalski - Gurmukhi Gurmukhi - Gujarati Gudżaracki - Oriya Orija - Tamil Tamilski - Telugu Telugu - Kannada Kannada - Malayalam Malajalam - Sinhala Syngaleski - Thai Tajski - Lao Laotański - Tibetan Tybetański - Myanmar Birmański - Georgian Gruziński - Khmer Khmerski - Simplified Chinese Uproszczony chiński - Traditional Chinese Tradycyjny chiński - Japanese Japoński - Korean Koreański - Vietnamese Wietnamski - Symbol Symboliczny - Ogham Ogamiczny - Runic Runiczny - N'Ko N'Ko @@ -3601,47 +2867,38 @@ Proszę o sprawdzenie podanej nazwy pliku. QFontDialog - Effects Efekty - &Font &Czcionka - Font st&yle St&yl czcionki - Sample Przykład - Select Font Wybierz czcionkę - &Size &Rozmiar - Stri&keout Pr&zekreślenie - &Underline &Podkreślenie - Wr&iting System Sys&tem pisania @@ -3649,143 +2906,102 @@ Proszę o sprawdzenie podanej nazwy pliku. QFtp - - Changing directory failed: %1 Zmiana katalogu zakończona błędem: %1 - Connected to host Podłączony do hosta - - - Connected to host %1 Podłączony do hosta %1 - - Connecting to host failed: %1 Podłączanie do hosta zakończone błędem: %1 - - - Connection closed Połączenie zamknięte - - Connection refused for data connection Połączenie do przesyłu danych odrzucone - - Connection refused to host %1 Połączenie do hosta %1 odrzucone - Connection to %1 closed Połączenie do %1 zakończone - - Creating directory failed: %1 Tworzenie katalogu zakończone błędem: %1 - - Downloading file failed: %1 Pobieranie pliku zakończone błędem: %1 - Host %1 found Host %1 znaleziony - - Host %1 not found Host %1 nie znaleziony - Host found Host znaleziony - - Listing directory failed: %1 Listowanie katalogu zakończone błędem: %1 - - Login failed: %1 Logowanie zakończone błędem: %1 - - Not connected Nie podłączony - Connection timed out to host %1 Przekroczony czas połączenia do hosta %1 - - Removing directory failed: %1 Usuwanie katalogu zakończone błędem: %1 - - Removing file failed: %1 Usuwanie pliku zakończone błędem: %1 - - - - Unknown error Nieznany błąd - - Uploading file failed: %1 Wysyłanie pliku zakończone błędem: @@ -3795,12 +3011,10 @@ Proszę o sprawdzenie podanej nazwy pliku. QHostInfo - Unknown error Nieznany błąd - No host name given Nie podano nazwy hosta @@ -3808,37 +3022,22 @@ Proszę o sprawdzenie podanej nazwy pliku. QHostInfoAgent - - - - Host not found Host nie znaleziony - - - - Unknown address type Nieznany typ adresu - - - Unknown error Nieznany błąd - - No host name given Nie podano nazwy hosta - - Invalid hostname Niepoprawna nazwa hosta @@ -3846,153 +3045,110 @@ Proszę o sprawdzenie podanej nazwy pliku. QHttp - Connected to host Podłączony do hosta - Connected to host %1 Podłączony do hosta %1 - - Connection closed Połączenie zakończone - - Connection refused Połączenie odrzucone - Connection to %1 closed Połączenie do %1 zamknięte - Host %1 found Host %1 znaleziony - - - Host %1 not found Host %1 nie znaleziony - Host found Host znaleziony - - HTTP request failed Komenda HTTP zakończona błędem - - - - Invalid HTTP chunked body Niepoprawne ciało HTTP - - Invalid HTTP response header Niepoprawny nagłówek odpowiedzi HTTP - - No server set to connect to Brak serwera do podłączenia - - Request aborted Komenda przerwana - - Server closed connection unexpectedly Serwer nieoczekiwanie zakończył połączenie - - - - Unknown error Nieznany błąd - HTTPS connection requested but SSL support not compiled in Zażądano połączenia HTTPS lecz obsługa SSL nie jest wkompilowana - - Wrong content length Błędna długość zawartości - Unknown authentication method Nieznana metoda autoryzacji - Proxy authentication required Wymagana autoryzacja pośrednika - Authentication required Wymagana autoryzacja - Error writing response to device Błąd zapisywania odpowiedzi do urządzenia - Proxy requires authentication Pośrednik wymaga autoryzacji - Host requires authentication Host wymaga autoryzacji - Data corrupted Dane uszkodzone - Unknown protocol specified Podano nieznany protokół - SSL handshake failed Nawiązanie sesji SSL zakończone błędem - Connection refused (or timed out) Połączenie odrzucone (przekroczony czas połączenia) @@ -4000,47 +3156,38 @@ Proszę o sprawdzenie podanej nazwy pliku. QHttpSocketEngine - Did not receive HTTP response from proxy Nie odebrano odpowiedzi HTTP od pośrednika - Error parsing authentication request from proxy Błąd parsowania żądania autoryzacji od pośrednika - Authentication required Wymagana autoryzacja - Proxy denied connection Pośrednik odmówił połączenia - Error communicating with HTTP proxy Błąd podczas komunikacji z pośrednikiem HTTP - Proxy server not found Nie znaleziono serwera pośredniczącego - Proxy connection refused Odmowa połączenia z pośrednikiem - Proxy server connection timed out Przekroczony czas połączenia do serwera pośredniczącego - Proxy connection closed prematurely Przedwczesne zakończenie połączenia z pośrednikiem @@ -4048,22 +3195,18 @@ Proszę o sprawdzenie podanej nazwy pliku. QIBaseDriver - Could not start transaction Nie można rozpocząć transakcji - Error opening database Błąd otwierania bazy danych - Unable to commit transaction Nie można dokonać transakcji - Unable to rollback transaction Nie można wycofać transakcji @@ -4071,89 +3214,70 @@ Proszę o sprawdzenie podanej nazwy pliku. QIBaseResult - Could not allocate statement Nie można zaallokować polecenia - - Could not describe input statement Nie można opisać polecenia wejściowego - Could not describe statement Nie można opisać polecenia - Could not fetch next item Nie można pobrać kolejnego elementu - - Could not find array Nie można odnaleźć tablicy - Could not get array data Nie można pobrać danych z tablicy - Could not get query info Nie można pobrać informacji o zapytaniu - Could not get statement info Nie można pobrać informacji o poleceniu - Could not prepare statement Nie można przygotować polecenia - Could not start transaction Nie można rozpocząć transakcji - Unable to close statement Nie można zamknąć polecenia - Unable to commit transaction Nie można dokonać transakcji - Unable to create BLOB Nie można utworzyć obiektu typu BLOB - Unable to execute query Nie można wykonać zapytania - Unable to open BLOB Nie można otworzyć obiektu typu BLOB - Unable to read BLOB Nie można odczytać obiektu typu BLOB - Unable to write BLOB Nie można zapisać obiektu typu BLOB @@ -4161,27 +3285,22 @@ Proszę o sprawdzenie podanej nazwy pliku. QIODevice - No space left on device Brak wolnego miejsca na urządzeniu - No such file or directory Brak pliku lub katalogu - Permission denied Brak uprawnień - Too many open files Zbyt wiele otwartych plików - Unknown error Nieznany błąd @@ -4189,32 +3308,26 @@ Proszę o sprawdzenie podanej nazwy pliku. QInputContext - Mac OS X input method Metoda wprowadzania Mac OS X - Windows input method Metoda wprowadzania Windows - XIM XIM - FEP FEP - XIM input method Metoda wprowadzania XIM - S60 FEP input method Metoda wprowadzania S60 FEP @@ -4222,7 +3335,6 @@ Proszę o sprawdzenie podanej nazwy pliku. QInputDialog - Enter a value: Podaj wartość: @@ -4230,67 +3342,50 @@ Proszę o sprawdzenie podanej nazwy pliku. QLibrary - Could not mmap '%1': %2 Nie można wykonać przypisania '%1': %2 - Could not unmap '%1': %2 Nie można usunąć przypisania '%1': %2 - Plugin verification data mismatch in '%1' Niezgodność podczas weryfikacji danych we wtyczce "%1" - The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] Wtyczka '%1' używa niepoprawnej wersji biblioteki QT. (%2.%3.%4) [%5] - The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" Wtyczka '%1' używa niepoprawnej wersji biblioteki QT. Oczekiwano klucza "%2", uzyskano "%3" - Unknown error Nieznany błąd - - - The shared library was not found. Biblioteka współdzielona niedostępna. - The file '%1' is not a valid Qt plugin. Plik "%1" nie jest poprawną wtyczką Qt. - The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) Wtyczka "%1" używa innej wersji biblioteki Qt. (Nie można łączyć bibliotek zwykłych i debugowych.) - - Cannot load library %1: %2 Nie można załadować biblioteki %1: %2 - - Cannot unload library %1: %2 Nie można zwolnić biblioteki %1: %2 - - Cannot resolve symbol "%1" in %2: %3 Nie można zidentyfikować symbolu "%1" w %2: %3 @@ -4298,37 +3393,30 @@ Proszę o sprawdzenie podanej nazwy pliku. QLineEdit - &Copy S&kopiuj - Cu&t W&ytnij - Delete Skasuj - &Paste &Wklej - &Redo &Przywróć - Select All Zaznacz wszystko - &Undo &Cofnij @@ -4336,23 +3424,18 @@ Proszę o sprawdzenie podanej nazwy pliku. QLocalServer - - %1: Name error %1: Błąd nazwy - %1: Permission denied %1: Brak uprawnień - %1: Address in use %1: Adres użyty - %1: Unknown error %2 %1: Nieznany błąd %2 @@ -4360,70 +3443,46 @@ Proszę o sprawdzenie podanej nazwy pliku. QLocalSocket - - %1: Connection refused %1: Odmowa połączenia - - %1: Remote closed %1: Drugi koniec odłączony - - - - %1: Invalid name %1: Niepoprawna nazwa - - %1: Socket access error %1: Błąd dostępu do gniazda - - %1: Socket resource error %1: Błąd zasobów gniazda - - %1: Socket operation timed out %1: Przekroczony czas operacji gniazda - - %1: Datagram too large %1: Za duży datagram - - - %1: Connection error %1: Błąd połączenia - - %1: The socket operation is not supported %1: Operacja nie jest obsługiwana przez gniazdo - %1: Unknown error %1: Nieznany błąd - - %1: Unknown error %2 %1: Nieznany błąd %2 @@ -4431,27 +3490,22 @@ Proszę o sprawdzenie podanej nazwy pliku. QMYSQLDriver - Unable to begin transaction Nie można rozpocząć transakcji - Unable to commit transaction Nie można potwierdzić transakcji - Unable to connect Nie można nawiązać połączenia - Unable to open database ' Nie można otworzyć bazy danych ' - Unable to rollback transaction Nie można wycofać transakcji @@ -4459,60 +3513,46 @@ Proszę o sprawdzenie podanej nazwy pliku. QMYSQLResult - - Unable to bind outvalues Nie można powiązać wartości zewnętrznych - Unable to bind value Nie można powiązać wartości - Unable to execute query Nie można wykonać zapytania - Unable to execute statement Nie można wykonać polecenia - - Unable to fetch data Nie można pobrać danych - - Unable to prepare statement Nie można przygotować polecenia - Unable to reset statement Nie można skasować polecenia - Unable to store result Nie można zachować wyników - Unable to store statement results Nie można zachować wyników polecenia - Unable to execute next query Nie można wykonać następnego zapytania - Unable to store next result Nie można zachować następnego wyniku @@ -4520,7 +3560,6 @@ Proszę o sprawdzenie podanej nazwy pliku. QMdiArea - (Untitled) (Nienazwany) @@ -4528,92 +3567,74 @@ Proszę o sprawdzenie podanej nazwy pliku. QMdiSubWindow - %1 - [%2] %1 - [%2] - Close Zamknij - Minimize Zminimalizuj - Restore Down Przywróć pod spód - &Restore &Przywróć - &Move Prze&nieś - &Size &Rozmiar - Mi&nimize Zmi&nimalizuj - Ma&ximize Zma&ksymalizuj - Stay on &Top Pozostaw na &wierzchu - &Close &Zamknij - Maximize Zmaksymalizuj - Unshade Rozwiń - Shade Zwiń - Restore Przywróć - Help Pomoc - Menu Menu - - [%1] - [%1] @@ -4621,21 +3642,14 @@ Proszę o sprawdzenie podanej nazwy pliku. QMenu - - Close Zamknij - - - Execute Wykonaj - - Open Otwórz @@ -4643,7 +3657,6 @@ Proszę o sprawdzenie podanej nazwy pliku. QMenuBar - Actions Akcje @@ -4651,40 +3664,30 @@ Proszę o sprawdzenie podanej nazwy pliku. QMessageBox - About Qt Informacje o Qt - Help Pomoc - Hide Details... Ukryj szczegóły... - - - - OK OK - <h3>About Qt</h3><p>This program uses Qt version %1.</p> <h3>Informacje o Qt</h3><p> Ten program używa Qt w wersji %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><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>Qt jest zestawem narzędzi programistycznych dedykowanym dla języka C++. Służy on do opracowywania aplikacji międzyplatformowych.</p><p>Qt umożliwia jednoźródłowe przenoszenie między systemami MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux i wszystkimi głównymi wersjami komercyjnymi systemu Unix. Środowisko Qt jest dostępne dla urządzeń wbudowanych opartych na systemie Linux ( Qt dla wbudowanego systemu Linux) oraz Windows CE.</p><p>Zestaw Qt jest dostępny w trzech różnych opcjach licencjonowania stworzonych w celu zadowolenia naszych różnych użytkowników.</p><p>Qt podlegający licencji zgodnie z naszą komercyjną umową licencyjną jest odpowiedni do opracowywania oprogramowań własnościowych/komercyjnych, dzięki czemu kod źródłowy nie jest udostępniany osobom trzecim. W przeciwnym razie zestaw Qt jest niezgodny z warunkami licencji GNU LGPL w wersji 2.1 lub GNU GPL w wersji 3.0.</p><p>Środowisko Qt objęte licencją GNU LGPL w wersji 2.1 nadaje się do tworzenia aplikacji Qt (własnościowych lub oprogramowań otwartych) tylko wtedy, gdy przestrzegane są warunki licencji GNU LGPL w wersji 2.1.</p><p>Qt objęty Powszechną Licencją Publiczną GNU w wersji 3.0 jest odpowiedni do opracowywania aplikacji QT, aby móc korzystać z aplikacji w połączeniu z oprogramowaniem podlegającym warunkom licencji GNU GPL w wersji 3.0 lub aby przestrzegać warunków licencji GNU GPL w wersji 3.0.</p><p>Więcej informacji na temat licencji Qt można znaleźć na stronie <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a>.</p><p>Copyright (C) 2010 Nokia Corporation i/lub oddziały firmy.</p><p>Qt jest produktem firmy Nokia. Dodatkowe informacje znajdują się na stronie <a href="http://qt.nokia.com/">qt.nokia.com</a> </p> - Show Details... Pokaż szczegóły... @@ -4692,7 +3695,6 @@ Proszę o sprawdzenie podanej nazwy pliku. QMultiInputContext - Select IM Wybierz metodę wprowadzania @@ -4700,12 +3702,10 @@ Proszę o sprawdzenie podanej nazwy pliku. QMultiInputContextPlugin - Multiple input method switcher Przełącznik metody wprowadzania - Multiple input method switcher that uses the context menu of the text widgets Przełącznik metody wprowadzania, który w widżetach tekstowych używa podręcznego menu @@ -4713,132 +3713,106 @@ Proszę o sprawdzenie podanej nazwy pliku. QNativeSocketEngine - Another socket is already listening on the same port Inne gniazdo nasłuchuje już na tym porcie - Attempt to use IPv6 socket on a platform with no IPv6 support Próba użycia IPv6 na platformie bez obsługi IPv6 - Connection refused Połączenie odrzucone - Connection timed out Przekroczony czas połączenia - Datagram was too large to send Datagram za długi do wysłania - Host unreachable Komputer niedostępny - Invalid socket descriptor Niepoprawny opis gniazda - Network error Błąd sieci - Network operation timed out Przekroczony czas operacji sieciowej - Network unreachable Sieć niedostępna - Operation on non-socket Nieprawidłowa operacja na gnieździe - Out of resources Zasoby wyczerpane - Permission denied Brak uprawnień - Protocol type not supported Nieobsługiwany typ protokołu - The address is not available Adres nie jest dostępny - The address is protected Adres jest zabezpieczony - The bound address is already in use Adres jest aktualnie w użyciu - The remote host closed the connection Zdalny host zakończył połączenie - Unable to initialize broadcast socket Nie można uruchomić gniazda rozsyłającego - Unable to initialize non-blocking socket Nie można uruchomić gniazda w nieblokującym trybie - Unable to receive a message Nie można odebrać wiadomości - Unable to send a message Nie można wysłać wiadomości - Unable to write Nie można zapisać - Unknown error Nieznany błąd - Unsupported socket operation Nieobsługiwana operacja gniazda - The proxy type is invalid for this operation Typ pośrednika nie jest poprawny dla tej operacji @@ -4846,7 +3820,6 @@ Proszę o sprawdzenie podanej nazwy pliku. QNetworkAccessCacheBackend - Error opening %1 Błąd otwierania %1 @@ -4854,12 +3827,10 @@ Proszę o sprawdzenie podanej nazwy pliku. QNetworkAccessDataBackend - Operation not supported on %1 Operacja nieobsługiwana na %1 - Invalid URI: %1 Niepoprawny URI: %1 @@ -4867,17 +3838,14 @@ Proszę o sprawdzenie podanej nazwy pliku. QNetworkAccessDebugPipeBackend - Write error writing to %1: %2 Błąd w trakcie zapisywania do %1: %2 - Socket error on %1: %2 Błąd gniazda na %1: %2 - Remote host closed the connection prematurely on %1 Zdalny host przedwcześnie zakończył połączenie na %1 @@ -4885,30 +3853,22 @@ Proszę o sprawdzenie podanej nazwy pliku. QNetworkAccessFileBackend - - Request for opening non-local file %1 Żądanie otwarcia zdalnego pliku %1 - - Error opening %1: %2 Błąd otwierania %1: %2 - Write error writing to %1: %2 Błąd w trakcie zapisywania do %1: %2 - - Cannot open %1: Path is a directory Nie można otworzyć %1: Ścieżka jest katalogiem - Read error reading from %1: %2 Błąd w trakcie czytania z %1: %2 @@ -4916,27 +3876,22 @@ Proszę o sprawdzenie podanej nazwy pliku. QNetworkAccessFtpBackend - No suitable proxy found Nie odnaleziono odpowiedniego pośrednika - Cannot open %1: is a directory Nie można otworzyć %1: jest to katalog - Logging in to %1 failed: authentication required Błąd podczas logowania do %1: wymagana autoryzacja - Error while downloading %1: %2 Błąd podczas pobierania %1: %2 - Error while uploading %1: %2 Błąd podczas wysyłania %1: %2 @@ -4944,7 +3899,6 @@ Proszę o sprawdzenie podanej nazwy pliku. QNetworkAccessHttpBackend - No suitable proxy found Nie odnaleziono odpowiedniego pośrednika @@ -4952,7 +3906,6 @@ Proszę o sprawdzenie podanej nazwy pliku. QNetworkAccessManager - Network access is disabled. Dostęp do sieci wyłączony. @@ -4960,22 +3913,18 @@ Proszę o sprawdzenie podanej nazwy pliku. QNetworkReply - Error downloading %1 - server replied: %2 Błąd podczas pobierania %1 - odpowiedź serwera: %2 - Protocol "%1" is unknown Protokół "%1" nie jest znany - Network session error. Błąd sesji sieciowej. - Temporary network failure. Chwilowy błąd w sieci. @@ -4983,8 +3932,6 @@ Proszę o sprawdzenie podanej nazwy pliku. QNetworkReplyImpl - - Operation canceled Operacja anulowana @@ -4992,7 +3939,6 @@ Proszę o sprawdzenie podanej nazwy pliku. QNetworkSession - Invalid configuration. Niepoprawna konfiguracja. @@ -5000,47 +3946,34 @@ Proszę o sprawdzenie podanej nazwy pliku. QNetworkSessionPrivateImpl - Roaming error Błąd roamingu - Session aborted by user or system Sesja przerwana przez użytkownika lub system - Unidentified Error Niezidentyfikowany błąd - - Unknown session error. Nieznany błąd sesji. - - The session was aborted by the user or system. Sesja została przerwana przez użytkownika lub system. - - The requested operation is not supported by the system. Zażądana operacja nie jest obsługiwana przez system. - - The specified configuration cannot be used. Podana konfiguracja nie może być użyta. - - Roaming was aborted or is not possible. Roaming przerwany albo niemożliwy. @@ -5048,28 +3981,23 @@ Proszę o sprawdzenie podanej nazwy pliku. QOCIDriver - Unable to initialize QOCIDriver Nie można dokonać inicjalizacji - Unable to logon Nie można się zalogować - Unable to begin transaction Nie można rozpocząć transakcji - Unable to commit transaction Nie można dokonać transakcji - Unable to rollback transaction Nie można wycofać transakcji @@ -5077,44 +4005,34 @@ Proszę o sprawdzenie podanej nazwy pliku. QOCIResult - - - Unable to bind column for batch execute Nie można powiązać kolumny dla wykonania zestawu poleceń - Unable to execute batch statement Nie można wykonać polecenia wsadowego - Unable to goto next Nie można przejść do kolejnego wiersza danych - Unable to alloc statement Nie można przydzielić miejsca na polecenie - Unable to prepare statement Nie można przygotować polecenia - Unable to get statement type Nie można pobrać typu polecenia - Unable to bind value Nie można powiązać wartości - Unable to execute statement Nie można wykonać polecenia @@ -5122,32 +4040,26 @@ Proszę o sprawdzenie podanej nazwy pliku. QODBCDriver - Unable to commit transaction Nie można potwierdzić transakcji - Unable to connect Nie można nawiązać połączenia - Unable to disable autocommit Nie można wyłączyć trybu automatycznego dokonywania transakcji - Unable to enable autocommit Nie można włączyć trybu automatycznego dokonywania transakcji - Unable to rollback transaction Nie można wycofać transakcji - Unable to connect - Driver doesn't support all functionality required Nie można nawiązać połączenia - sterownik nie obsługuje całej potrzebnej funkcjonalności @@ -5155,51 +4067,38 @@ Proszę o sprawdzenie podanej nazwy pliku. QODBCResult - - QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration QODBCResult::reset: Nie można ustawić 'SQL_CURSOR_STATIC' jako atrybutu polecenia. Proszę sprawdzić konfiguracje sterownika ODBC - Unable to bind variable Nie można powiązać zmiennej - - Unable to execute statement Nie można wykonać polecenia - Unable to fetch next Nie można pobrać kolejnych danych - Unable to prepare statement Nie można przygotować polecenia - - - Unable to fetch last Nie można pobrać ostatnich danych - Unable to fetch Nie można pobrać - Unable to fetch first Nie można pobrać pierwszych danych - Unable to fetch previous Nie można pobrać poprzednich danych @@ -5207,19 +4106,14 @@ Proszę o sprawdzenie podanej nazwy pliku. QObject - - PulseAudio Sound Server Serwer dźwięku PulseAudio - "%1" duplicates a previous role name and will be disabled. - - invalid query: "%1" Niepoprawne zapytanie: "%1" @@ -5227,12 +4121,10 @@ Proszę o sprawdzenie podanej nazwy pliku. QPPDOptionsModel - Name Nazwa - Value Wartość @@ -5240,32 +4132,26 @@ Proszę o sprawdzenie podanej nazwy pliku. QPSQLDriver - Could not begin transaction Nie można rozpocząć transakcji - Could not commit transaction Nie można potwierdzić transakcji - Could not rollback transaction Nie można wycofać transakcji - Unable to connect Nie można nawiązać połączenia - Unable to subscribe Nie można wykonać subskrypcji - Unable to unsubscribe Nie można zrezygnować z subskrypcji @@ -5273,12 +4159,10 @@ Proszę o sprawdzenie podanej nazwy pliku. QPSQLResult - Unable to create query Nie można utworzyć zapytania - Unable to prepare statement Nie można przygotować polecenia @@ -5286,102 +4170,82 @@ Proszę o sprawdzenie podanej nazwy pliku. QPageSetupWidget - Centimeters (cm) Centymetry (cm) - Millimeters (mm) Milimetry (mm) - Inches (in) Cale (in) - Points (pt) Punkty (pt) - Form Formularz - Paper Papier - Page size: Rozmiar strony: - Width: Szerokość: - Height: Wysokość: - Paper source: Źródło papieru: - Orientation Położenie - Portrait Portret - Landscape Pejzaż - Reverse landscape Odwrócony pejzaż - Reverse portrait Odwrócony portret - Margins Marginesy - top margin Górny margines - left margin Lewy margines - right margin Prawy margines - bottom margin Dolny margines @@ -5389,12 +4253,10 @@ Proszę o sprawdzenie podanej nazwy pliku. QPluginLoader - Unknown error Nieznany błąd - The plugin was not loaded. Wtyczka nie została załadowana. @@ -5402,433 +4264,344 @@ Proszę o sprawdzenie podanej nazwy pliku. QPrintDialog - A0 (841 x 1189 mm) A0 (841 x 1189 mm) - A1 (594 x 841 mm) A1 (594 x 841 mm) - A2 (420 x 594 mm) A2 (420 x 594 mm) - A3 (297 x 420 mm) 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 cali) - A5 (148 x 210 mm) A5 (148 x 210 mm) - A6 (105 x 148 mm) A6 (105 x 148 mm) - A7 (74 x 105 mm) A7 (74 x 105 mm) - A8 (52 x 74 mm) A8 (52 x 74 mm) - A9 (37 x 52 mm) A9 (37 x 52 mm) - Print current page Wydrukuj bieżącą stronę - - Aliases: %1 Aliasy: %1 - B0 (1000 x 1414 mm) B0 (1000 x 1414 mm) - B1 (707 x 1000 mm) B1 (707 x 1000 mm) - B10 (31 x 44 mm) B10 (31 x 44 mm) - B2 (500 x 707 mm) B2 (500 x 707 mm) - B3 (353 x 500 mm) B3 (353 x 500 mm) - B4 (250 x 353 mm) 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 cali) - B6 (125 x 176 mm) B6 (125 x 176 mm) - B7 (88 x 125 mm) B7 (88 x 125 mm) - B8 (62 x 88 mm) B8 (62 x 88 mm) - B9 (44 x 62 mm) B9 (44 x 62 mm) - C5E (163 x 229 mm) C5E (163 x 229 mm) - DLE (110 x 220 mm) DLE (110 x 220 mm) - locally connected podłączony lokalnie - OK OK - Print all Drukuj wszystko - Print range Drukuj zakres - - unknown nieznany - Executive (7.5 x 10 inches, 191 x 254 mm) Executive (7.5 x 10 cali, 191 x 254 mm) - Folio (210 x 330 mm) Folio (210 x 330 mm) - Ledger (432 x 279 mm) Ledger (432 x 279 mm) - Legal (8.5 x 14 inches, 216 x 356 mm) Legal (8.5 x 14 cali, 216 x 356 mm) - Letter (8.5 x 11 inches, 216 x 279 mm) Letter (8.5 x 11 cali, 216 x 279 mm) - Tabloid (279 x 432 mm) Tabloid (279 x 432 mm) - US Common #10 Envelope (105 x 241 mm) US Common #10 Envelope (105 x 241 mm) - - - Print Drukowanie - Print To File ... Drukuj do pliku ... - File %1 is not writable. Please choose a different file name. Plik %1 jest plikiem tylko do odczytu. Proszę wybrać inną nazwę pliku. - %1 already exists. Do you want to overwrite it? %1 już istnieje. Czy chcesz nadpisać? - %1 is a directory. Please choose a different file name. %1 jest katalogiem. Proszę wybrać inną nazwę pliku. - File exists Plik istnieje - <qt>Do you want to overwrite it?</qt> <qt>Czy chcesz nadpisać?</qt> - Print selection Drukuj zaznaczone - 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 Executive - Folio Folio - Ledger Ledger - Legal Legal - Letter Letter - Tabloid Tabloid - US Common #10 Envelope US Common #10 Envelope - Custom Niestandardowy - - &Options >> &Opcje >> - &Print Wy&drukuj - &Options << &Opcje << - Print to File (PDF) Drukuj do pliku (PDF) - Print to File (Postscript) Drukuj do pliku (Postscript) - Local file Plik lokalny - Write %1 file Zapisz %1 plik - The 'From' value cannot be greater than the 'To' value. Wartość "od" nie może być większa od wartości "do". @@ -5836,108 +4609,86 @@ Proszę wybrać inną nazwę pliku. QPrintPreviewDialog - %1% %1% - Print Preview Podgląd wydruku - Next page Następna strona - Previous page Poprzednia strona - First page Pierwsza strona - Last page Ostatnia strona - Fit width Dopasuj szerokość - Fit page Dopasuj stronę - Zoom in Powiększ - Zoom out Pomniejsz - Portrait Portret - Landscape Pejzaż - Show single page Pokaż pojedynczą stronę - Show facing pages Pokaż sąsiednie strony - Show overview of all pages Pokaż wszystkie strony - Print Wydrukuj - Page setup Ustawienia strony - Close Zamknij - Export to PDF Wyeksportuj do PDF - Export to PostScript Wyeksportuj do PostScript - - Page Setup Ustawienia strony @@ -5945,17 +4696,14 @@ Proszę wybrać inną nazwę pliku. QPrintPropertiesWidget - Form Forma - Page Strona - Advanced Zaawansowane @@ -5963,102 +4711,82 @@ Proszę wybrać inną nazwę pliku. QPrintSettingsOutput - Form Forma - Copies Liczba kopii - Print range Zakres wydruku - Print all Drukuj wszystko - Pages from Strony od - to do - Selection Wybrane strony - Output Settings Ustawienia wyjściowe - Copies: Kopie: - Collate Parami - Reverse Odwróć - Options Opcje - Color Mode Tryb koloru - Color Kolor - Grayscale Skala szarości - Duplex Printing Drukowanie dupleksowe - None Brak - Long side Długa strona - Short side Krótka strona - Current Page Bieżąca strona @@ -6066,47 +4794,38 @@ Proszę wybrać inną nazwę pliku. QPrintWidget - Form Forma - Printer Drukarka - &Name: &Nazwa: - P&roperties &Właściwości - Location: Położenie: - Preview Podgląd - Type: Typ: - Output &file: &Plik wyjściowy: - ... ... @@ -6114,62 +4833,38 @@ Proszę wybrać inną nazwę pliku. QProcess - - Could not open input redirection for reading Nie można otworzyć wejściowego przekierowania do odczytu - - Could not open output redirection for writing Nie można otworzyć wyjściowego przekierowania do zapisu - Resource error (fork failure): %1 Błąd zasobów (błąd forkowania): %1 - - - - - - - - - Process operation timed out Przekroczony czas operacji procesu - - - - Error reading from process Błąd odczytywania z procesu - - - Error writing to process Błąd zapisywania do procesu - Process crashed Wystąpił błąd w procesie - proces zakończony - No program defined Nie zdefiniowano programu - Process failed to start: %1 Nie można rozpocząć procesu: %1 @@ -6177,7 +4872,6 @@ Proszę wybrać inną nazwę pliku. QProgressDialog - Cancel Anuluj @@ -6185,7 +4879,6 @@ Proszę wybrać inną nazwę pliku. QPushButton - Open Otwórz @@ -6193,7 +4886,6 @@ Proszę wybrać inną nazwę pliku. QRadioButton - Check Zaznacz @@ -6201,57 +4893,46 @@ Proszę wybrać inną nazwę pliku. QRegExp - bad char class syntax niepoprawna składnia klasy znakowej - bad lookahead syntax niepoprawna składnia "lookahead" - bad repetition syntax niepoprawna składnia powtórzenia - invalid interval Niepoprawny interwał - invalid category Niepoprawna kategoria - disabled feature used użyta funkcja została wyłączona - invalid octal value niepoprawna wartość ósemkowa - met internal limit napotkano wewnętrzne ograniczenie - missing left delim brakujący lewy separator - no error occurred nie pojawił się żaden błąd - unexpected end nieoczekiwany koniec @@ -6259,22 +4940,18 @@ Proszę wybrać inną nazwę pliku. QSQLite2Driver - Error opening database Błąd otwierania bazy danych - Unable to begin transaction Nie można rozpocząć transakcji - Unable to commit transaction Nie można dokonać transakcji - Unable to rollback transaction Nie można wycofać transakcji @@ -6282,12 +4959,10 @@ Proszę wybrać inną nazwę pliku. QSQLite2Result - Unable to execute statement Nie można wykonać polecenia - Unable to fetch results Nie można pobrać wyników @@ -6295,27 +4970,22 @@ Proszę wybrać inną nazwę pliku. QSQLiteDriver - Error closing database Błąd zamykania bazy danych - Error opening database Błąd otwierania bazy danych - Unable to begin transaction Nie można rozpocząć transakcji - Unable to commit transaction Nie można dokonać transakcji - Unable to rollback transaction Nie można wycofać transakcji @@ -6323,34 +4993,26 @@ Proszę wybrać inną nazwę pliku. QSQLiteResult - Parameter count mismatch Niezgodna liczba parametrów - Unable to bind parameters Nie można powiązać parametrów - Unable to execute statement Nie można wykonać polecenia - - - Unable to fetch row Nie można pobrać wiersza danych - Unable to reset statement Nie można skasować polecenia - No query Brak zapytania @@ -6358,32 +5020,26 @@ Proszę wybrać inną nazwę pliku. QScriptBreakpointsModel - ID Identyfikator - Location Położenie - Condition Warunek - Ignore-count Licznik pominięć - Single-shot - + Pojedyncze trafienie - Hit-count Licznik trafień @@ -6391,12 +5047,10 @@ Proszę wybrać inną nazwę pliku. QScriptBreakpointsWidget - New Nowy - Delete Skasuj @@ -6404,143 +5058,114 @@ Proszę wybrać inną nazwę pliku. QScriptDebugger - - Go to Line Przejdź do linii - Line: Linia: - Interrupt Przerwij - Shift+F5 Shift+F5 - Continue Kontynuuj - F5 F5 - Step Into Wskocz do wnętrza - F11 F11 - Step Over Przeskocz - F10 F10 - Step Out Wyskocz na zewnątrz - Shift+F11 Shift+F11 - Run to Cursor Uruchom do kursora - Ctrl+F10 Ctrl+F10 - Run to New Script Uruchom do nowego skryptu - Toggle Breakpoint Przełącz ustawienie pułapki - F9 F9 - Clear Debug Output Wyczyść wyjście debuggera - Clear Error Log Wyczyść log z błędami - Clear Console Wyczyść konsolę - &Find in Script... &Znajdź w skrypcie... - Ctrl+F Ctrl+F - Find &Next Znajdź &następne - F3 F3 - Find &Previous Znajdź &poprzednie - Shift+F3 Shift+F3 - Ctrl+G Ctrl+G - Debug Debuguj @@ -6548,32 +5173,26 @@ Proszę wybrać inną nazwę pliku. QScriptDebuggerCodeFinderWidget - Close Zamknij - Previous Poprzednie - Next Następne - Case Sensitive Uwzględniaj wielkość liter - Whole words Całe słowa - <img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Search wrapped <img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Przeszukano od początku @@ -6581,12 +5200,10 @@ Proszę wybrać inną nazwę pliku. QScriptDebuggerLocalsModel - Name Nazwa - Value Wartość @@ -6594,17 +5211,14 @@ Proszę wybrać inną nazwę pliku. QScriptDebuggerStackModel - Level Poziom - Name Nazwa - Location Położenie @@ -6612,22 +5226,18 @@ Proszę wybrać inną nazwę pliku. QScriptEdit - Toggle Breakpoint Przełącz ustawienie pułapki - Disable Breakpoint Wyłącz pułapkę - Enable Breakpoint Włącz pułapkę - Breakpoint Condition: Warunek dla pułapki: @@ -6635,52 +5245,42 @@ Proszę wybrać inną nazwę pliku. QScriptEngineDebugger - Loaded Scripts Załadowane skrypty - Breakpoints Pułapki - Stack Stos - Locals Zmienne lokalne - Console Konsola - Debug Output Wyjście debuggera - Error Log Log z błędami - Search Szukaj - View Widok - Qt Script Debugger Debugger Qt Script @@ -6688,7 +5288,6 @@ Proszę wybrać inną nazwę pliku. QScriptNewBreakpointWidget - Close Zamknij @@ -6696,84 +5295,66 @@ Proszę wybrać inną nazwę pliku. QScrollBar - Bottom W dół - Left edge Lewa krawędź - Line down Linia w dół - Line up Linia w górę - - Page down Strona w dół - Page left Strona w lewo - Page right Strona w prawo - - Page up Strona do góry - Position Pozycja - Right edge Prawa krawędź - Scroll down Przewiń w dół - Scroll here Przewiń tutaj - Scroll left Przewiń w lewo - Scroll right Przewiń w prawo - Scroll up Przewiń do góry - Top Do góry @@ -6781,111 +5362,78 @@ Proszę wybrać inną nazwę pliku. QSharedMemory - %1: create size is less then 0 %1: rozmiar przy tworzeniu mniejszy od 0 - - %1: unable to lock %1: nie można zablokować - %1: unable to unlock %1: nie można odblokować - - - %1: permission denied %1: brak uprawnień - - - %1: already exists %1: już istnieje - %1: doesn't exists %1: nie istnieje - - - %1: out of resources %1: zasoby wyczerpane - - - %1: unknown error %2 %1: nieznany błąd %2 - %1: key is empty %1: klucz jest pusty - %1: ftok failed %1: wystąpił błąd w funkcji ftok() - - - %1: unable to make key %1: nie można utworzyć klucza - - %1: doesn't exist %1: nie istnieje - %1: UNIX key file doesn't exist %1: unixowy plik z kluczem nie istnieje - %1: system-imposed size restrictions %1: ograniczenia rozmiarów narzucone przez system - %1: not attached %1: niedołączony - - %1: invalid size %1: niepoprawny rozmiar - - %1: key error %1: błąd klucza - %1: size query failed %1: zapytanie o rozmiar zakończone błędem - %1: unable to set key on lock %1: nie można ustawić klucza na zablokowanym segmencie pamięci współdzielonej @@ -6893,1107 +5441,884 @@ Proszę wybrać inną nazwę pliku. QShortcut - + + - - Alt Alt - Back Back - Backspace Backspace - Backtab Backtab - Bass Boost Wzmocnienie basów - Bass Down Basy w dół - Bass Up Basy w górę - Call Button to start a call (note: a separate button is used to end the call) Wywołaj - Caps Lock Caps Lock - CapsLock CapsLock - Media Pause Media player pause button - Toggle Media Play/Pause Media player button to toggle between playing and paused - Monitor Brightness Up Zwiększ jasność monitora - Monitor Brightness Down Zmniejsz jasność monitora - Keyboard Light On/Off Włącz/wyłącz podświetlenie klawiatury - Keyboard Brightness Up Zwiększ jasność klawiatury - Keyboard Brightness Down Zmniejsz jasność klawiatury - Power Off Wyłącz zasilanie - Wake Up Przebudzenie - Eject Wysuń - Screensaver Wygaszacz ekranu - WWW WWW - Sleep Uśpienie - LightBulb Żarówka - Shop Sklep - History Historia - Add Favorite Dodaj do ulubionych - Hot Links Popularne łącza - Adjust Brightness Ustaw jasność - Finance Finanse - Community Społeczność - Audio Rewind Przewijanie do tyłu - Back Forward - Application Left - Application Right - Book Książka - CD CD - Calculator Kalkulator - Clear Wyczyść - Clear Grab - Close Zamknij - Copy Skopiuj - Cut Wytnij - Display Wyświetlacz - DOS DOS - Documents Dokumenty - Spreadsheet Arkusz kalkulacyjny - Browser Przeglądarka - Game Gra - Go Przejdź - iTouch iTouch - Logoff Wyloguj - Market Rynek - Meeting Spotkanie - Keyboard Menu Menu klawiatury - Menu PB Menu PB - My Sites Moje strony - News Wiadomości - Home Office Biuro domowe - Option Opcje - Paste Wklej - Phone Telefon - Reply Odpowiedz - Reload Przeładuj - Rotate Windows Obróć okna - Rotation PB Obrót PB - Rotation KB Obrót KB - Save Zachowaj - Send Wyślij - Spellchecker Sprawdzanie pisowni - Split Screen Podziel ekran - Support Pomoc techniczna - Task Panel Panel zadań - Terminal Terminal - Tools Narzędzia - Travel Podróże - Video Wideo - Word Processor Procesor tekstu - XFer XFer - Zoom In Powiększ - Zoom Out Pomniejsz - Away - Messenger Komunikator - WebCam WebCam - Mail Forward Przekazanie poczty - Pictures Zdjęcia - Music Muzyka - Battery Bateria - Bluetooth Bluetooth - Wireless Bezprzewodowy - Ultra Wide Band Ultraszerokie pasmo - Audio Forward Przewijanie do przodu - Audio Repeat Powtarzanie - Audio Random Play Odtwarzanie losowe - Subtitle Napisy - Audio Cycle Track - Time Czas - View Widok - Top Menu Menu główne - Suspend Wstrzymanie - Hibernate Hibernacja - Context1 Kontekst1 - Context2 Kontekst2 - Context3 Kontekst3 - Context4 Kontekst4 - Toggle Call/Hangup Button that will hang up if we're in call, or make a call if we're not. - Voice Dial Button to trigger voice dialling - Last Number Redial Button to redial the last number called - Camera Shutter Button to trigger the camera shutter (take a picture) - Camera Focus Button to focus the camera - Kanji Kanji - Muhenkan Muhenkan - Henkan Henkan - Romaji Romaji - Hiragana Hiragana - Katakana Katakana - Hiragana Katakana Hiragana Katakana - Zenkaku Zenkaku - Hankaku Hankaku - Zenkaku Hankaku Zenkaku Hankaku - Touroku Touroku - Massyo Massyo - Kana Lock Kana Lock - Kana Shift Kana Shift - Eisu Shift Eisu Shift - Eisu toggle Eisu toggle - Code input Wprowadzanie kodu - Multiple Candidate Kandydat wielokrotny - Previous Candidate Poprzedni kandydat - Hangul Hangul - Hangul Start Hangul Start - Hangul End Hangul End - Hangul Hanja Hangul Hanja - Hangul Jamo Hangul Jamo - Hangul Romaja Hangul Romaja - Hangul Jeonja Hangul Jeonja - Hangul Banja Hangul Banja - Hangul PreHanja Hangul PreHanja - Hangul PostHanja Hangul PostHanja - Hangul Special Hangul Special - - Ctrl Ctrl - Del Del - Delete Delete - Down Dół - End End - Enter Enter - Esc Esc - Escape Escape - F%1 F%1 - Favorites Ulubione - Flip Odwróć - Forward Do przodu - Hangup Button to end a call (note: a separate button is used to start the call) Zawieś - Help Pomoc - Home Home - Home Page Strona startowa - Ins Ins - Insert Insert - Launch (0) Uruchom (0) - Launch (1) Uruchom (1) - Launch (2) Uruchom (2) - Launch (3) Uruchom (3) - Launch (4) Uruchom (4) - Launch (5) Uruchom (5) - Launch (6) Uruchom (6) - Launch (7) Uruchom (7) - Launch (8) Uruchom (8) - Launch (9) Uruchom (9) - Launch (A) Uruchom (A) - Launch (B) Uruchom (B) - Launch (C) Uruchom (C) - Launch (D) Uruchom (D) - Launch (E) Uruchom (E) - Launch (F) Uruchom (F) - Launch Mail Uruchom program pocztowy - Launch Media Uruchom przeglądarkę mediów - Left Lewo - Media Next Następna ścieżka - Media Play Odtwarzaj - Media Previous Poprzednia ścieżka - Media Record Nagrywaj - Media Stop Zatrzymaj - Menu Menu - - Meta Meta - No Nie - Num Lock Num Lock - Number Lock Number Lock - NumLock NumLock - Open URL Otwórz adres - Page Down Strona do góry - Page Up Strona w dół - Pause Pauza - PgDown PgDown - PgUp PgUp - Print Wydrukuj - Print Screen Wydrukuj zawartość ekranu - Refresh Odśwież - Return Powrót - Right Prawo - Scroll Lock Scroll Lock - ScrollLock ScrollLock - Search Szukaj - - Select Wybierz - - Shift Shift - 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. Spacja - Standby Tryb oczekiwania - Stop Zatrzymaj - SysReq SysReq - System Request Żądanie systemu - Tab Tabulator - Treble Down Soprany w dół - Treble Up Soprany w górę - Up Góra - Volume Down Przycisz - Volume Mute Wycisz - Volume Up Zrób głośniej - Yes Tak @@ -8001,27 +6326,22 @@ Proszę wybrać inną nazwę pliku. QSlider - Page down Strona w dół - Page left Strona w lewo - Page right Strona w prawo - Page up Strona do góry - Position Położenie @@ -8029,72 +6349,58 @@ Proszę wybrać inną nazwę pliku. QSocks5SocketEngine - Connection to proxy refused Odmowa połączenia z pośrednikiem - Connection to proxy closed prematurely Przedwczesne zakończenie połączenia z pośrednikiem - Proxy host not found Nie odnaleziono hosta pośredniczącego - Connection to proxy timed out Przekroczony czas połączenia do pośrednika - Proxy authentication failed Autoryzacja pośrednika zakończona błędem - Proxy authentication failed: %1 Autoryzacja pośrednika zakończona błędem: %1 - SOCKS version 5 protocol error Błąd protokołu SOCKS wersji 5 - General SOCKSv5 server failure Generalny błąd serwera SOCKS wersji 5 - Connection not allowed by SOCKSv5 server Połączenie niedozwolone przez serwer SOCKS wersji 5 - TTL expired TTL stracił ważność - SOCKSv5 command not supported Nieobsługiwana komenda SOCKS wersji 5 - Address type not supported Nieobsługiwany typ adresu - Unknown SOCKSv5 proxy error code 0x%1 Nieznany kod błędu (0x%1) pośrednika SOCKS wersji 5 - Network operation timed out Przekroczony czas operacji sieciowej @@ -8102,32 +6408,26 @@ Proszę wybrać inną nazwę pliku. QSoftKeyManager - Ok OK - Select Wybierz - Done Zrobione - Options Opcje - Cancel Anuluj - Exit Wyjście @@ -8135,12 +6435,10 @@ Proszę wybrać inną nazwę pliku. QSpinBox - Less Mniej - More Więcej @@ -8148,56 +6446,42 @@ Proszę wybrać inną nazwę pliku. QSql - Cancel Anuluj - Cancel your edits? Anulować zmiany? - Confirm Potwierdź - Delete Skasuj - Delete this record? Skasować ten rekord? - Insert Wstaw - - - No Nie - Save edits? Zachować zmiany? - Update Uaktualnij - - - Yes Tak @@ -8205,178 +6489,142 @@ Proszę wybrać inną nazwę pliku. QSslSocket - Unable to write data: %1 - Unable to decrypt data: %1 Nie można odszyfrować danych: %1 - - Error while reading: %1 Błąd podczas czytania: %1 - Error during SSL handshake: %1 Błąd podczas nawiązania sesji SSL: %1 - Error creating SSL context (%1) Błąd tworzenia kontekstu (%1) - Invalid or empty cipher list (%1) Niepoprawna lub pusta lista szyfrów (%1) - Private key does not certify public key, %1 Prywatny klucz nie uwiarygodnia publicznego, %1 - Error creating SSL session, %1 Błąd tworzenia sesji SSL, %1 - Error creating SSL session: %1 Błąd tworzenia sesji SSL: %1 - Cannot provide a certificate with no key, %1 Nie można dostarczyć certyfikatu bez klucza, %1 - Error loading local certificate, %1 Błąd ładowania lokalnego certyfikatu, %1 - Error loading private key, %1 Błąd ładowania prywatnego klucza, %1 - No error Brak błędu - The issuer certificate could not be found Nie można odnaleźć wydawcy certyfikatu - The certificate signature could not be decrypted Nie można odszyfrować podpisu certyfikatu - The public key in the certificate could not be read Nie można odczytać publicznego klucza w certyfikacie - The signature of the certificate is invalid Niepoprawny podpis certyfikatu - The certificate is not yet valid Certyfikat nie jest jeszcze ważny - The certificate has expired Certyfikat utracił ważność - The certificate's notBefore field contains an invalid time Pole "notBefore" certyfikatu zawiera niepoprawną datę - The certificate's notAfter field contains an invalid time Pole "notAfter" certyfikatu zawiera niepoprawną datę - The certificate is self-signed, and untrusted Niewiarygodny certyfikat z podpisem własnym - The root certificate of the certificate chain is self-signed, and untrusted Główny certyfikat łańcucha zaufania ma własny podpis i jest niewiarygodny - The issuer certificate of a locally looked up certificate could not be found Nie można odnaleźć certyfikatu wydawcy wyszukanego lokalnie certyfikatu - No certificates could be verified Nie można zweryfikować żadnych certyfikatów - One of the CA certificates is invalid Jeden z certyfikatów urzędu certyfikacji jest nieprawidłowy - The basicConstraints path length parameter has been exceeded Długość ścieżki określona w podstawowych warunkach ograniczających została przekroczona - The supplied certificate is unsuitable for this purpose Dostarczony certyfikat jest nieodpowiedni dla tego przeznaczenia - The root CA certificate is not trusted for this purpose Główny certyfikat urzędu certyfikacji nie jest wiarygodny dla tego przeznaczenia - The root CA certificate is marked to reject the specified purpose Główny certyfikat urzędu certyfikacji jest wyznaczony do odrzucania podanego przeznaczenia - The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate Certyfikat wydawcy obecnego kandydata został odrzucony, ponieważ nazwa podmiotu nie odpowiadała nazwie wydawcy obecnego certyfikatu - 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 Certyfikat wydawcy obecnego kandydata został odrzucony, ponieważ nazwa wydawcy i przedstawiony numer seryjny nie odpowiadały identyfikatorowi klucza urzędu certyfikacji obecnego certyfikatu - The peer did not present any certificate Element równorzędny nie przedstawił żadnego certyfikatu - The host name did not match any of the valid hosts for this certificate Nazwa hosta nie odpowiadała żadnemu z poprawnych hostów dla tego certyfikatu - Unknown error Nieznany błąd @@ -8384,22 +6632,18 @@ Proszę wybrać inną nazwę pliku. QStateMachine - Missing initial state in compound state '%1' Brak stanu początkowego w stanie złożonym "%1" - Missing default state in history state '%1' Brak domyślnego stanu w historycznym stanie "%1" - No common ancestor for targets and source of transition from state '%1' Brak wspólnego przodka dla stanów docelowych i stanu źródłowego w przejściu ze stanu "%1" - Unknown error Nieznany błąd @@ -8407,30 +6651,22 @@ Proszę wybrać inną nazwę pliku. QSystemSemaphore - - %1: out of resources %1: zasoby wyczerpane - - %1: permission denied %1: brak uprawnień - %1: already exists %1: już istnieje - %1: does not exist %1: nie istnieje - - %1: unknown error %2 %1: nieznany błąd %2 @@ -8438,12 +6674,10 @@ Proszę wybrać inną nazwę pliku. QTDSDriver - Unable to open connection Nie można otworzyć połączenia - Unable to use database Nie można użyć bazy danych @@ -8451,12 +6685,10 @@ Proszę wybrać inną nazwę pliku. QTabBar - Scroll Left Przewiń w lewo - Scroll Right Przewiń w prawo @@ -8464,7 +6696,6 @@ Proszę wybrać inną nazwę pliku. QTcpServer - Operation on socket is not supported Operacja na gnieździe nieobsługiwana @@ -8472,42 +6703,34 @@ Proszę wybrać inną nazwę pliku. QTextControl - &Copy S&kopiuj - Copy &Link Location Skopiuj &adres odsyłacza - Cu&t W&ytnij - Delete Skasuj - &Paste &Wklej - &Redo &Przywróć - Select All Zaznacz wszystko - &Undo &Cofnij @@ -8515,14 +6738,10 @@ Proszę wybrać inną nazwę pliku. QToolButton - - Open Otwórz - - Press Wciśnij @@ -8530,7 +6749,6 @@ Proszę wybrać inną nazwę pliku. QUdpSocket - This platform does not support IPv6 Ta platforma nie obsługuje IPv6 @@ -8538,12 +6756,10 @@ Proszę wybrać inną nazwę pliku. QUndoGroup - Redo Przywróć - Undo Cofnij @@ -8551,7 +6767,6 @@ Proszę wybrać inną nazwę pliku. QUndoModel - <empty> <pusty> @@ -8559,12 +6774,10 @@ Proszę wybrać inną nazwę pliku. QUndoStack - Redo Przywróć - Undo Cofnij @@ -8572,57 +6785,46 @@ Proszę wybrać inną nazwę pliku. QUnicodeControlCharacterMenu - Insert Unicode control character Wstaw znak kontroli Unicode - LRE Start of left-to-right embedding LRE Początek osadzania od lewej do prawej - LRM Left-to-right mark LRM znacznik od prawej do lewej - LRO Start of left-to-right override LRO Początek nadpisania od lewej do prawej - PDF Pop directional formatting PDF Formatowanie kierunkowe pop - RLE Start of right-to-left embedding RLE Początek osadzania od prawej do lewej - RLM Right-to-left mark RLM Znacznik od prawej do lewej - RLO Start of right-to-left override RLO Początek nadpisania od prawej do lewej - ZWJ Zero width joiner ZWJ Łącznik zerowej długości - ZWNJ Zero width non-joiner ZWNJ Rozdzielnik zerowej długości - ZWSP Zero width space ZWSP Przerwa zerowej długości @@ -8630,32 +6832,26 @@ Proszę wybrać inną nazwę pliku. QWebFrame - Request cancelled Prośba anulowana - Request blocked Prośba zablokowana - Cannot show URL Nie można pokazać URL - Frame load interrupted by policy change Ładowanie ramki przerwane przez zmianę strategii - Cannot show mimetype Nie można pokazać typu MIME - File does not exist Plik nie istnieje @@ -8663,621 +6859,515 @@ Proszę wybrać inną nazwę pliku. QWebPage - Submit default label for Submit buttons in forms on web pages Wyślij - Submit Submit (input element) alt text for <input> elements with no alt, title, or value Wyślij - Reset default label for Reset buttons in forms on web pages Wyczyść - Choose File title for file button used in HTML forms Wybierz plik - No file selected text to display in file button used in HTML forms when no file is selected Nie zaznaczono pliku - Open in New Window Open in New Window context menu item Otwórz w nowym oknie - Save Link... Download Linked File context menu item Zachowaj odsyłacz... - Copy Link Copy Link context menu item Skopiuj odsyłacz - Open Image Open Image in New Window context menu item Otwórz obrazek - Save Image Download Image context menu item Zachowaj obrazek - Copy Image Copy Link context menu item Skopiuj obrazek - Open Frame Open Frame in New Window context menu item Otwórz ramkę - Copy Copy context menu item Skopiuj - Go Back Back context menu item Wróć - Go Forward Forward context menu item Przejdź dalej - Stop Stop context menu item Zatrzymaj - Reload Reload context menu item Przeładuj - Cut Cut context menu item Wytnij - Paste Paste context menu item Wklej - No Guesses Found No Guesses Found context menu item Nie odnaleziono podpowiedzi - Ignore Ignore Spelling context menu item Zignoruj - Add To Dictionary Learn Spelling context menu item Dodaj do słownika - Search The Web Search The Web context menu item Wyszukaj w sieci - Look Up In Dictionary Look Up in Dictionary context menu item Poszukaj w słowniku - Open Link Open Link context menu item Otwórz odsyłacz - Ignore Ignore Grammar context menu item Zignoruj - Spelling Spelling and Grammar context sub-menu item Pisownia - Show Spelling and Grammar menu item title Pokaż pisownię i gramatykę - Hide Spelling and Grammar menu item title Schowaj pisownię i gramatykę - Check Spelling Check spelling context menu item Sprawdź pisownię - Check Spelling While Typing Check spelling while typing context menu item Sprawdzaj pisownię podczas pisania - Check Grammar With Spelling Check grammar with spelling context menu item Sprawdzaj gramatykę wraz z pisownią - Fonts Font context sub-menu item Czcionki - Bold Bold context menu item Pogrubiony - Italic Italic context menu item Kursywa - Underline Underline context menu item Podkreślenie - Outline Outline context menu item Kontur - Direction Writing direction context sub-menu item Kierunek - Text Direction Text direction context sub-menu item Kierunek tekstu - Default Default writing direction context menu item Domyślny - Missing Plug-in Label text to be used when a plug-in is missing Brakująca wtyczka - Loading... Media controller status message when the media is loading Ładowanie... - Live Broadcast Media controller status message when watching a live broadcast Transmisja na żywo - Audio Element Media controller element Element dźwiękowy - Video Element Media controller element Element wideo - Mute Button Media controller element Przycisk wyłączania głosu - Unmute Button Media controller element Przycisk włączania głosu - Play Button Media controller element Przycisk odtwarzania - Pause Button Media controller element Przycisk pauzy - Slider Media controller element Suwak - Slider Thumb Media controller element Uchwyt suwaka - Rewind Button Media controller element Przycisk przewijania - Return to Real-time Button Media controller element Przycisk powrotu do czasu rzeczywistego - Elapsed Time Media controller element Czas który upłynął - Remaining Time Media controller element Czas który pozostał - Status Display Media controller element Wyświetlacz stanu - Fullscreen Button Media controller element Przycisk trybu pełnoekranowego - Seek Forward Button Media controller element Przycisk przeszukiwania do przodu - Seek Back Button Media controller element Przycisk przeszukiwania do tyłu - Audio element playback controls and status display Media controller element Kontrolki odtwarzania dźwięku i wyświetlacz stanu - Video element playback controls and status display Media controller element Kontrolki odtwarzania wideo i wyświetlacz stanu - Mute audio tracks Media controller element Wyłącz ścieżkę dźwiękową - Unmute audio tracks Media controller element Włącz ścieżkę dźwiękową - Begin playback Media controller element Rozpocznij odtwarzanie - Pause playback Media controller element Zatrzymaj odtwarzanie - Movie time scrubber Media controller element Suwak czasu - Movie time scrubber thumb Media controller element Uchwyt suwaka czasu - Rewind movie Media controller element Przewiń film - Return streaming movie to real-time Media controller element Przywróć przesyłanie filmu do czasu rzeczywistego - Current movie time Media controller element Czas bieżącego filmu - Remaining movie time Media controller element Czas do końca filmu - Current movie status Media controller element Stan bieżącego filmu - Play movie in full-screen mode Media controller element Odtwarzaj film w trybie pełnoekranowym - Seek quickly back Media controller element Przeszukaj szybko do tyłu - Seek quickly forward Media controller element Przeszukaj szybko do przodu - Indefinite time Media time description Nieokreślony czas - %1 days %2 hours %3 minutes %4 seconds Media time description %1 dni %2 godzin %3 minut %4 sekund - %1 hours %2 minutes %3 seconds Media time description %1 godzin %2 minut %3 sekund - %1 minutes %2 seconds Media time description %1 minut %2 sekund - %1 seconds Media time description %1 sekund - Inspect Inspect Element context menu item Zwiedzaj - No recent searches Label for only item in menu that appears when clicking on the search field image, when no searches have been performed Brak ostatnich wyszukiwań - Recent searches label for first item in the menu that appears when clicking on the search field image, used as embedded menu title Ostatnie wyszukiwania - Clear recent searches menu item in Recent Searches menu that empties menu's contents Wyczyść ostatnie wyszukiwania - Unknown Unknown filesize FTP directory listing item Nieznany - Web Inspector - %2 Wizytator sieciowy - %2 - Redirection limit reached Osiągnięto limit przekierowań - Bad HTTP request Niepoprawna komenda HTTP - 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' To jest indeks wyszukiwawczy. Podaj słowa do wyszukania: - Left to Right Left to Right context menu item Z lewej na prawą - Right to Left Right to Left context menu item Z prawej na lewą - %1 (%2x%3 pixels) Title string for images %1 (%2x%3 piksli) - Scroll here Przewiń tutaj - Left edge Lewa krawędź - Top Do góry - Right edge Prawa krawędź - Bottom W dół - Page left Strona w lewo - Page up Strona do góry - Page right Strona w prawo - Page down Strona w dół - Scroll left Przewiń w lewo - Scroll up Przewiń do góry - Scroll right Przewiń w prawo - Scroll down Przewiń w dół - %n file(s) number of chosen file @@ -9287,237 +7377,190 @@ Proszę wybrać inną nazwę pliku. - JavaScript Alert - %1 Ostrzeżenie JavaScript - %1 - JavaScript Confirm - %1 Potwierdzenie JavaScript - %1 - JavaScript Prompt - %1 Zachęta JavaScript - %1 - JavaScript Problem - %1 Problem JavaScript - %1 - The script on this page appears to have a problem. Do you want to stop the script? Skrypt na tej stronie nie działa poprawnie. Czy chcesz przerwać ten skrypt? - Move the cursor to the next character Przesuń kursor do następnego znaku - Move the cursor to the previous character Przesuń kursor do poprzedniego znaku - Move the cursor to the next word Przesuń kursor do następnego słowa - Move the cursor to the previous word Przesuń kursor do poprzedniego słowa - Move the cursor to the next line Przesuń kursor do następnej linii - Move the cursor to the previous line Przesuń kursor do poprzedniej linii - Move the cursor to the start of the line Przesuń kursor do początku linii - Move the cursor to the end of the line Przesuń kursor do końca linii - Move the cursor to the start of the block Przesuń kursor do początku bloku - Move the cursor to the end of the block Przesuń kursor do końca bloku - Move the cursor to the start of the document Przesuń kursor do początku dokumentu - Move the cursor to the end of the document Przesuń kursor do końca dokumentu - Select all Zaznacz wszystko - Select to the next character Zaznacz do następnego znaku - Select to the previous character Zaznacz do poprzedniego znaku - Select to the next word Zaznacz do następnego słowa - Select to the previous word Zaznacz do poprzedniego słowa - Select to the next line Zaznacz do następnej linii - Select to the previous line Zaznacz do poprzedniej linii - Select to the start of the line Zaznacz do początku linii - Select to the end of the line Zaznacz do końca linii - Select to the start of the block Zaznacz do początku bloku - Select to the end of the block Zaznacz do końca bloku - Select to the start of the document Zaznacz do początku dokumentu - Select to the end of the document Zaznacz do końca dokumentu - Delete to the start of the word Skasuj do początku słowa - Delete to the end of the word Skasuj do końca słowa - Insert a new paragraph Wstaw nowy paragraf - Insert a new line Wstaw nową linię - Paste and Match Style Wklej i dopasuj styl - Remove formatting Usuń formatowanie - Strikethrough Przekreślenie - Subscript Indeks dolny - Superscript Indeks górny - Insert Bulleted List Wstaw listę wypunktowaną - Insert Numbered List Wstaw listę ponumerowaną - Indent Zwiększ wcięcie - Outdent Zmniejsz wcięcie - Center Wyśrodkuj - Justify Wyjustuj - Align Left Wyrównaj do lewej - Align Right Wyrównaj do prawej @@ -9525,7 +7568,6 @@ Proszę wybrać inną nazwę pliku. QWhatsThisAction - What's This? Co to jest? @@ -9533,7 +7575,6 @@ Proszę wybrać inną nazwę pliku. QWidget - * * @@ -9541,57 +7582,46 @@ Proszę wybrać inną nazwę pliku. QWizard - Go Back Wróć - Continue Kontynuuj - Commit Dokonaj - Done Zrobione - Help Pomoc - < &Back < &Wstecz - &Finish &Zakończ - Cancel Anuluj - &Help &Pomoc - &Next &Dalej - &Next > &Dalej > @@ -9599,69 +7629,54 @@ Proszę wybrać inną nazwę pliku. QWorkspace - - %1 - [%2] %1 - [%2] - Close Zamknij - &Close &Zamknij - Ma&ximize Zma&ksymalizuj - Minimize Zminimalizuj - Mi&nimize Zmi&nimalizuj - &Move &Przenieś - &Restore &Przywróć - Restore Down Przywróć pod spód - - Sh&ade &Zwiń - &Size &Rozmiar - Stay on &Top Pozostaw na &wierzchu - &Unshade R&ozwiń @@ -9669,117 +7684,94 @@ Proszę wybrać inną nazwę pliku. QXml - encoding declaration or standalone declaration expected while reading the XML declaration oczekiwano deklaracji "encoding" lub "standalone" podczas odczytywania deklaracji XML - error in the text declaration of an external entity błąd w deklaracji "text" zewnętrznej jednostki - error occurred while parsing comment wystąpił błąd podczas parsowania komentarza - error occurred while parsing content wystąpił błąd podczas parsowania zawartości - error occurred while parsing document type definition wystąpił błąd podczas parsowania typu definicji dokumentu - error occurred while parsing element wystąpił błąd podczas parsowania elementu - error occurred while parsing reference wystąpił błąd podczas parsowania odwołania - error triggered by consumer błąd wywołany przez konsumenta - external parsed general entity reference not allowed in attribute value odwołanie do jednostki ogólnej zewnętrznie przetworzonej nie dozwolone dla wartości atrybutu - external parsed general entity reference not allowed in DTD odwołanie do jednostki ogólnej zewnętrznie przetworzonej nie dozwolone w DTD - internal general entity reference not allowed in DTD odwołanie do jednostki ogólnej wewnętrznej nie dozwolone w DTD - invalid name for processing instruction niepoprawna nazwa dla instrukcji przetwarzającej - letter is expected oczekiwana jest litera - more than one document type definition więcej niż jedna definicja typu dokumentu - no error occurred nie pojawił się żaden błąd - recursive entities jednostki rekurencyjne - standalone declaration expected while reading the XML declaration deklaracja "standalone" oczekiwana podczas czytania deklaracji XML - tag mismatch niezgodny tag - unexpected character nieoczekiwany znak - unexpected end of file nieoczekiwany koniec pliku - unparsed entity reference in wrong context odwołanie do jednostki nieprzetworzonej w złym kontekście - version expected while reading the XML declaration oczekiwano wersji podczas czytania deklaracji XML - wrong value for standalone declaration błędna wartość dla deklaracji "standalone" @@ -9787,27 +7779,22 @@ Proszę wybrać inną nazwę pliku. QXmlPatternistCLI - Warning in %1, at line %2, column %3: %4 Ostrzeżenie w %1, wiersz %2, kolumna %3: %4 - Warning in %1: %2 Ostrzeżenie w %1: %2 - Unknown location Nieznane położenie - Error %1 in %2, at line %3, column %4: %5 Błąd %1 w %2, wiersz %3, kolumna %4: %5 - Error %1 in %2: %3 Błąd %1 w %2: %3 @@ -9815,184 +7802,142 @@ Proszę wybrać inną nazwę pliku. QXmlStream - - Extra content at end of document. Dodatkowa treść na końcu dokumentu. - Invalid entity value. Niepoprawna wartość jednostki. - Invalid XML character. Niepoprawny znak XML. - Sequence ']]>' not allowed in content. Ciąg ']]>' niedozwolony w treści. - Namespace prefix '%1' not declared Przedrostek przestrzeni nazw '%1' nie został zadeklarowany - Attribute redefined. Atrybut zdefiniowany wielokrotnie. - Unexpected character '%1' in public id literal. Nieoczekiwany znak '%1' w publicznej stałej znakowej. - Invalid XML version string. Niepoprawna wersja XML. - Unsupported XML version. Nieobsługiwana wersja XML. - %1 is an invalid encoding name. %1 jest niepoprawną nazwą kodowania. - Encoding %1 is unsupported Kodowanie %1 jest nieobsługiwane - Standalone accepts only yes or no. Tylko wartości "tak" lub "nie" są akceptowane przez "standalone". - Invalid attribute in XML declaration. Niepoprawny atrybut w deklaracji XML. - Premature end of document. Przedwczesne zakończenie dokumentu. - Invalid document. Niepoprawny dokument. - Expected Oczekiwano - , but got ' , ale otrzymano ' - Unexpected ' Nieoczekiwany ' - Expected character data. Oczekiwana dana znakowa. - Recursive entity detected. Wykryto jednostkę rekurencyjną. - Start tag expected. Oczekiwano rozpoczęcia tagu. - XML declaration not at start of document. Deklaracja XML nie jest na początku dokumentu. - NDATA in parameter entity declaration. NDATA w deklaracji parametru obiektu. - %1 is an invalid processing instruction name. %1 jest niepoprawną nazwą instrukcji przetwarzającej. - Invalid processing instruction name. Niepoprawna nazwa instrukcji przetwarzającej. - - - - Illegal namespace declaration. Niepoprawna deklaracja przestrzeni nazw. - Invalid XML name. Niepoprawna nazwa XML. - Opening and ending tag mismatch. Niezgodne tagi początku i końca. - Reference to unparsed entity '%1'. Odwołanie do nieprzetworzonej jednostki '%1'. - - - Entity '%1' not declared. Jednostka '%1' nie zadeklarowana. - Reference to external entity '%1' in attribute value. Odwołanie do zewnętrznej jednostki '%1' jako wartość atrybutu. - Invalid character reference. Niepoprawny znak odwołania. - - Encountered incorrectly encoded content. Natrafiono na niepoprawnie zakodowaną treść. - The standalone pseudo attribute must appear after the encoding. Pseudo atrybut "standalone" musi pojawić się po "encoding". - %1 is an invalid PUBLIC identifier. %1 jest niepoprawnym publicznym identyfikatorem. @@ -10000,707 +7945,562 @@ Proszę wybrać inną nazwę pliku. QtXmlPatterns - Network timeout. Przekroczony czas połączenia. - Element %1 can't be serialized because it appears outside the document element. Element %1 nie może być zserializowany ponieważ pojawił się poza elementem "document". - Attribute %1 can't be serialized because it appears at the top level. Atrybut %1 nie może być zserializowany ponieważ pojawił się na najwyższym poziomie. - Year %1 is invalid because it begins with %2. Rok %1 jest niepoprawny ponieważ rozpoczyna się: %2. - Day %1 is outside the range %2..%3. Dzień %1 jest poza zakresem %2..%3. - Month %1 is outside the range %2..%3. Miesiąc %1 jest poza zakresem %2..%3. - Overflow: Can't represent date %1. Przepełnienie: Nie można wyrazić daty %1. - Day %1 is invalid for month %2. Dzień %1 jest niepoprawny dla miesiąca %2. - Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; Czas 24:%1:%2:%3 jest niepoprawny. Godzina jest 24, ale minuty, sekundy i milisekundy nie są równocześnie zerami; - Time %1:%2:%3.%4 is invalid. Czas %1:%2:%3.%4 jest niepoprawny. - Overflow: Date can't be represented. Przepełnienie: Data nie może być wyrażona. - - At least one component must be present. Przynajmniej jeden komponent musi być obecny. - At least one time component must appear after the %1-delimiter. Przynajmniej jeden komponent musi wystąpić po nawiasie %1. - %1 is not a valid value of type %2. %1 nie jest poprawną wartością dla typu %2. - When casting to %1 from %2, the source value cannot be %3. W rzutowaniu %1 na %2 wartość źródłowa nie może być %3. - - Dividing a value of type %1 by %2 (not-a-number) is not allowed. Dzielenie wartości typu %1 przez %2 (typ nienumeryczny) jest niedozwolone. - Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. Dzielenie wartości typu %1 przez %2 lub %3 (plus lub minus zero) jest niedozwolone. - Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. Mnożenie wartości typu %1 przez %2 lub %3 (plus lub minus nieskończoność) jest niedozwolone. - A value of type %1 cannot have an Effective Boolean Value. Wartość typu %1 nie może posiadać efektywnej wartości boolowskiej (EBV). - Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. Efektywna wartość boolowska (EBV) nie może być obliczona dla sekwencji zawierającej dwie lub więcej wartości atomowe. - Value %1 of type %2 exceeds maximum (%3). Wartość %1 typu %2 przekracza maksimum (%3). - Value %1 of type %2 is below minimum (%3). Wartość %1 typu %2 jest poniżej minimum (%3). - A value of type %1 must contain an even number of digits. The value %2 does not. Wartość typu %1 musi zawierać parzystą liczbę cyfr. Wartość %2 nie zawiera. - %1 is not valid as a value of type %2. Wartość %1 nie jest poprawna jako wartość typu %2. - Operator %1 cannot be used on type %2. Operator %1 nie może być użyty dla typu %2. - Operator %1 cannot be used on atomic values of type %2 and %3. Operator %1 nie może być użyty dla atomowych wartości typu %2 i %3. - The namespace URI in the name for a computed attribute cannot be %1. Przestrzeń nazw URI nie może być %1 w nazwie dla obliczonego atrybutu. - The name for a computed attribute cannot have the namespace URI %1 with the local name %2. Nazwa dla wyliczonego atrybutu nie może zawierać przestrzeni nazw URI %1 z lokalną nazwą %2. - Type error in cast, expected %1, received %2. Błąd typów w rzutowaniu: oczekiwano %1, otrzymano %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. Podczas rzutowania na %1 lub na typ pochodny, wartość źródłowa musi być tego samego typu lub musi być stałą znakową. Typ %2 nie jest dozwolony. - A comment cannot contain %1 Komentarz nie może zawierać %1 - A comment cannot end with a %1. Komentarz nie może kończyć się: %1. - An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. Węzeł "attribute" nie może być podelementem węzła "document". Dlatego atrybut %1 jest w złym miejscu. - A library module cannot be evaluated directly. It must be imported from a main module. Moduł biblioteki nie może być bezpośrednio oceniony. On musi być zaimportowany z głównego modułu. - No template by name %1 exists. Szablon o nazwie %1 nie istnieje. - A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. Wartość typu %1 nie może być predykatem. Predykat musi być typu liczbowego lub Efektywną Wartość Logiczną. - A positional predicate must evaluate to a single numeric value. Wynikiem predykatu pozycyjnego musi być pojedyncza wartość liczbowa. - The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, %2 is invalid. Docelowa nazwa w instrukcji przetwarzania nie może być %1 w żadnej kombinacji wielkich i małych liter. Dlatego nazwa %2 jest niepoprawna. - %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. %1 nie jest poprawną nazwą docelową w instrukcji przetwarzania. Nazwa musi być wartością %2, np. %3. - The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. Ostatni krok w ścieżce musi zawierać albo węzły albo wartości atomowe. Nie może zawierać obu jednocześnie. - The data of a processing instruction cannot contain the string %1 Dane instrukcji przetwarzania nie mogą zawierać ciągu %1 - No namespace binding exists for the prefix %1 Żadna przestrzeń nazw nie jest powiązana z przedrostkiem %1 - No namespace binding exists for the prefix %1 in %2 Żadna przestrzeń nazw nie jest powiązana z przedrostkiem %1 w %2 - - %1 is an invalid %2 %1 jest niepoprawnym %2 - The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. Pierwszy argument w %1 nie może być typu %2. Musi on być typu liczbowego: xs:yearMonthDuration lub xs:dayTimeDuration. - The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. Pierwszy argument w %1 nie może być typu %2. Musi on być typu: %3, %4 lub %5. - The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. Drugi argument w %1 nie może być typu %2. Musi on być typu: %3, %4 lub %5. - %1 is not a valid XML 1.0 character. %1 nie jest poprawnym znakiem XML 1.0. - If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. Jeśli oba argumenty mają przesunięcia strefowe, muszą one być takie same. %1 i %2 nie są takie same. - %1 was called. Wywołano %1. - %1 must be followed by %2 or %3, not at the end of the replacement string. Po %1 musi następować %2 lub %3, lecz nie na końcu zastępczego ciągu. - In the replacement string, %1 must be followed by at least one digit when not escaped. W ciągu zastępczym, po %1 musi następować przynajmniej jedna cyfra - In the replacement string, %1 can only be used to escape itself or %2, not %3 W ciągu zastępczym, %1 może być użyte tylko do zabezpieczenia samej siebie lub %2, nigdy %3 - %1 matches newline characters %1 dopasowało znak nowej linii - %1 and %2 match the start and end of a line. %1 i %2 dopasowały początek i koniec linii. - Matches are case insensitive Dopasowania uwzględniają wielkość liter - Whitespace characters are removed, except when they appear in character classes Spacje są usuwane z wyjątkiem kiedy pojawią się w klasach znakowych - %1 is an invalid regular expression pattern: %2 %1 jest niepoprawnym wzorcem wyrażenia regularnego: %2 - %1 is an invalid flag for regular expressions. Valid flags are: %1 jest niepoprawną flagą dla wyrażeń regularnych. Poprawnymi flagami 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. Jeśli pierwszy argument jest pustą sekwencją lub zerowej długości ciągiem (przy braku przestrzeni nazw), przedrostek nie może wystąpić. Podano przedrostek %1. - It will not be possible to retrieve %1. Nie będzie można odzyskać %1. - The default collection is undefined Domyślna kolekcja jest niezdefiniowana - %1 cannot be retrieved %1 nie może być odzyskane - The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). Znormalizowana forma %1 nie jest obsługiwana. Obsługiwanymi formami są: %2, %3, %4 i %5 oraz pusta forma (brak normalizacji). - A zone offset must be in the range %1..%2 inclusive. %3 is out of range. Przesunięcie strefowe musi być w zakresie %1..%2 włącznie. %3 jest poza tym zakresem. - Required cardinality is %1; got cardinality %2. Wymagana liczność wynosi %1; otrzymano %2. - The item %1 did not match the required type %2. Element %1 nie został dopasowany do wymaganego typu %2. - - %1 is an unknown schema type. %1 jest nieznanym typem schematu. - A template with name %1 has already been declared. Szablon o nazwie %1 został już zadeklarowany. - Only one %1 declaration can occur in the query prolog. Tylko jedna deklaracja %1 może się pojawić w prologu zapytania. - The initialization of variable %1 depends on itself Inicjalizacja zmiennej %1 zależy od niej samej - The variable %1 is unused Zmienna %1 jest nieużywana - Version %1 is not supported. The supported XQuery version is 1.0. Wersja %1 nie jest obsługiwana. Obsługiwaną wersją XQuery jest wersja 1.0. - No function with signature %1 is available Żadna funkcja w postaci %1 nie jest dostępna - It is not possible to redeclare prefix %1. Nie jest możliwe ponowne zadeklarowanie przedrostka %1. - Prefix %1 is already declared in the prolog. Przedrostek %1 jest już zadeklarowany w prologu. - The name of an option must have a prefix. There is no default namespace for options. Nazwa opcji musi posiadać przedrostek. Nie istnieje domyślna przestrzeń nazw dla opcji. - The Schema Import feature is not supported, and therefore %1 declarations cannot occur. Cecha "Import schematu" nie jest obsługiwana, dlatego deklaracje %1 nie mogą pojawić. - The target namespace of a %1 cannot be empty. Docelowa przestrzeń nazw dla %1 nie może być pusta. - The module import feature is not supported Cecha "Import modułu" nie jest obsługiwana - The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. Przestrzeń nazw %1 jest zarezerwowana, dlatego funkcje zdefiniowane przez użytkownika nie mogą jej użyć. Spróbuj predefiniowany przedrostek %2, który istnieje w takich przypadkach. - 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 Przestrzeń nazw dla funkcji zdefiniowanej przez użytkownika w module bibliotecznym musi odpowiadać przestrzeni nazw modułu. Powinna to być %1 zamiast %2 - A function already exists with the signature %1. Funkcja w postaci %1 już istnieje. - No external functions are supported. All supported functions can be used directly, without first declaring them as external Zewnętrzne funkcje nie są obsługiwane. Wszystkie obsługiwane funkcje mogą być używane bezpośrednio, bez ich uprzedniego deklarowania jako zewnętrzne - The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. Nazwa zmiennej powiązanej w wyrażeniu "for" musi być inna od zmiennej pozycjonującej. W związku z tym dwie zmienne o nazwie %1 kolidują ze sobą. - The Schema Validation Feature is not supported. Hence, %1-expressions may not be used. Cecha "Walidacja schematu" nie jest obsługiwana. Dlatego też wyrażenia %1 nie mogą być użyte. - None of the pragma expressions are supported. Therefore, a fallback expression must be present Wyrażenia "pragma" nie są obsługiwane. Dlatego musi wystąpić wyrażenie zastępcze - The %1-axis is unsupported in XQuery Oś %1 nie jest obsługiwana w XQuery - %1 is not a valid numeric literal. %1 nie jest poprawną stałą liczbową. - W3C XML Schema identity constraint selector Selektor narzucenia niepowtarzalności W3C XML Schema - W3C XML Schema identity constraint field Pole narzucenia niepowtarzalności W3C XML Schema - A construct was encountered which is disallowed in the current language(%1). Wystąpiła konstrukcja która jest niedozwolona w bieżącym języku (%1). - The keyword %1 cannot occur with any other mode name. Słowo kluczowe %1 nie może wystąpić z inną nazwą trybu. - No variable with name %1 exists Zmienna o nazwie %1 nie istnieje - The value of attribute %1 must be of type %2, which %3 isn't. Wartość atrybutu %1 musi być typu %2, którym nie jest %3. - The prefix %1 cannot be bound. By default, it is already bound to the namespace %2. Przedrostek %1 nie może być powiązany. Jest on domyślnie powiązany z przestrzenią nazw %2. - A variable with name %1 has already been declared. Zmienna o nazwie %1 została już zadeklarowana. - No value is available for the external variable with name %1. Brak wartości dla zewnętrznej zmiennej o nazwie %1. - A stylesheet function must have a prefixed name. Funkcja arkusza stylu musi zawierać nazwę z przedrostkiem. - The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) Przestrzeń nazw dla funkcji zdefiniowanej przez użytkownika nie może być pusta (spróbuj predefiniowany przedrostek %1, który stworzono specjalnie do takich sytuacji) - An argument with name %1 has already been declared. Every argument name must be unique. Argument o nazwie %1 został już zadeklarowany. Każda nazwa argumentu musi być unikatowa. - When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. Gdy funkcja %1 jest wykorzystana do dopasowania wewnątrz wzorca, jej argument musi być referencją do zmiennej lub stałą znakową. - In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. We wzorze XSL-T pierwszy argument w funkcji %1 musi być stałą znakową podczas dopasowywania. - In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. We wzorze XSL-T pierwszy argument w funkcji %1 musi być stałą znakową lub nazwą zmiennej podczas dopasowywania. - In an XSL-T pattern, function %1 cannot have a third argument. We wzorze XSL-T funkcja %1 nie może zawierać trzeciego argumentu. - In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. We wzorze XSL-T tylko funkcje %1 i %2 mogą być użyte do dopasowania, zaś funkcja %3 nie. - In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. We wzorze XSL-T tylko osie %2 i %3 mogą być użyte, zaś oś %1 nie. - %1 is an invalid template mode name. %1 nie jest poprawną nazwa trybu szablonu. - Each name of a template parameter must be unique; %1 is duplicated. Każda nazwa parametru szablonu musi być unikatowa; %1 się powtarza. - No function with name %1 is available. Żadna funkcja o nazwie %1 nie jest dostępna. - An attribute with name %1 has already appeared on this element. Atrybut o nazwie %1 już się pojawił w tym elemencie. - The namespace URI cannot be the empty string when binding to a prefix, %1. Przestrzeń nazw URI nie może być pustym ciągiem w powiązaniu z przedrostkiem, %1. - %1 is an invalid namespace URI. %1 jest niepoprawną przestrzenią nazw URI. - It is not possible to bind to the prefix %1 Nie jest możliwe powiązanie z przedrostkiem %1 - Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared). Przestrzeń nazw %1 może być jedynie powiązana z %2 (w przeciwnym wypadku jest ona domyślnie zadeklarowana). - Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared). Przedrostek %1 może być jedynie powiązany z %2 (w przeciwnym wypadku jest on domyślnie zadeklarowany). - Two namespace declaration attributes have the same name: %1. Atrybuty deklaracji przestrzeni nazw mają tą samą nazwę: %1. - The namespace URI must be a constant and cannot use enclosed expressions. Przestrzeń nazw URI nie może być stałą i nie może używać zawartych w niej wyrażeń. - A direct element constructor is not well-formed. %1 is ended with %2. Konstruktor elementu bezpośredniego nie jest dobrze sformatowany. %1 jest zakończony %2. - The name %1 does not refer to any schema type. Nazwa %1 nie odpowiada żadnemu typowi schematu. - %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. %1 jest typem złożonym. Rzutowanie na typy złożone nie jest możliwe. Jednakże rzutowanie na typy atomowe np.: %2 jest dozwolone. - %1 is not an atomic type. Casting is only possible to atomic types. %1 nie jest typem atomowym. Możliwe jest rzutowanie tylko na typy atomowe. - %1 is not a valid name for a processing-instruction. %1 nie jest poprawną nazwą dla instrukcji przetwarzającej. - - %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. %1 nie jest wewnątrz zakresu deklaracji atrybutów. Zwróć uwagę że importowanie schematów nie jest obsługiwane. - The name of an extension expression must be in a namespace. Nazwa dodatkowego wyrażenia musi znajdować sie w przestrzeni nazw. - empty pusty - zero or one zero lub jeden - exactly one dokładnie jeden - one or more jeden lub więcej - zero or more zero lub więcej - Required type is %1, but %2 was found. Odnaleziono typ %2, lecz wymaganym typem jest %1. - Promoting %1 to %2 may cause loss of precision. Przekształcenie %1 do %2 może spowodować utratę precyzji. - The focus is undefined. Fokus jest niezdefiniowany. - It's not possible to add attributes after any other kind of node. Dodanie atrybutu poza węzłami nie jest możliwe. - An attribute by name %1 has already been created. Atrybut o nazwie %1 został już utworzony. - Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. Obsługiwane jest jedynie "Unicode Codepoint Collation" (%1), %2 nie jest obsługiwane. - Integer division (%1) by zero (%2) is undefined. Dzielenie w dziedzinie liczb całkowitych (%1) przez zero (%2) jest niezdefiniowane. - Division (%1) by zero (%2) is undefined. Dzielenie (%1) przez zero (%2) jest niezdefiniowane. - Modulus division (%1) by zero (%2) is undefined. Dzielenie modulo (%1) przez zero (%2) jest niezdefiniowane. - %1 takes at most %n argument(s). %2 is therefore invalid. %1 przyjmuje co najwyżej %n argument. %2 jest dlatego niepoprawne. @@ -10709,7 +8509,6 @@ Proszę wybrać inną nazwę pliku. - %1 requires at least %n argument(s). %2 is therefore invalid. %1 wymaga przynajmniej %n argumentu. %2 jest dlatego niepoprawne. @@ -10718,1651 +8517,1255 @@ Proszę wybrać inną nazwę pliku. - The root node of the second argument to function %1 must be a document node. %2 is not a document node. Głównym węzłem drugiego argumentu w funkcji %1 musi być węzeł "document". %2 nie jest węzłem "document". - %1 is not a whole number of minutes. %1 nie jest całkowitą liczbą minut. - The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. Enkodowanie %1 jest niepoprawne. Może ono zawierać jedynie znaki alfabetu łacińskiego, nie może zawierać spacji i musi być dopasowane do wyrażenia regularnego %2. - - A default namespace declaration must occur before function, variable, and option declarations. Domyślna deklaracja przestrzeni nazw musi pojawić się przed deklaracjami funkcji, zmiennych i opcji. - Namespace declarations must occur before function, variable, and option declarations. Deklaracje przestrzeni nazw muszą pojawić się przed deklaracjami funkcji, zmiennych i opcji. - Module imports must occur before function, variable, and option declarations. Importy modułów muszą pojawić się przed deklaracjami funkcji, zmiennych i opcji. - %1 is an unsupported encoding. Nieobsługiwane kodowanie %1. - %1 contains octets which are disallowed in the requested encoding %2. %1 zawiera bity które są niedozwolone w zażądanym kodowaniu %2. - The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. Kod %1 który pojawił się w %2 i który używa kodowania %3 jest niepoprawnym znakiem XML. - Ambiguous rule match. Dopasowano niejednoznaczną regułę. - In a namespace constructor, the value for a namespace cannot be an empty string. W konstruktorze przestrzeni nazw wartość przestrzeni nazw nie może być pustym ciągiem. - The prefix must be a valid %1, which %2 is not. Przedrostek musi być poprawnym %1, którym %2 nie jest. - The prefix %1 cannot be bound. Przedrostek %1 nie może być powiązany. - Only the prefix %1 can be bound to %2 and vice versa. Tylko przedrostek %1 może być powiązany z %2 i vice versa. - The parameter %1 is required, but no corresponding %2 is supplied. Wymagany jest parametr %1 lecz żaden odpowiadający mu %2 nie został dostarczony. - The parameter %1 is passed, but no corresponding %2 exists. Przekazany jest parametr %1 lecz żaden odpowiadający mu %2 nie istnieje. - The URI cannot have a fragment URI nie może posiadać fragmentu - Element %1 is not allowed at this location. Element %1 jest niedozwolony w tym miejscu. - Text nodes are not allowed at this location. Węzły tekstowe są niedozwolone w tym miejscu. - Parse error: %1 Błąd parsowania: %1 - The value of the XSL-T version attribute must be a value of type %1, which %2 isn't. Wartość atrybutu wersji XSL-T musi być typu %1, którym %2 nie jest. - Running an XSL-T 1.0 stylesheet with a 2.0 processor. Przetwarzanie arkusza XSL-T w wersji 1.0 przez procesor w wersji 2.0. - Unknown XSL-T attribute %1. Nieznany atrybut %1 XSL-T. - Attribute %1 and %2 are mutually exclusive. Atrybuty %1 i %2 wzajemnie się wykluczającą. - In a simplified stylesheet module, attribute %1 must be present. W uproszczonym module arkuszu stylu musi wystąpić atrybut %1. - If element %1 has no attribute %2, it cannot have attribute %3 or %4. Jeśli element %1 nie posiada atrybutu %2, nie może on również posiadać atrybutu %3 ani %4. - Element %1 must have at least one of the attributes %2 or %3. Element %1 musi posiadać przynajmniej jeden z atrybutów: %2 lub %3. - At least one mode must be specified in the %1-attribute on element %2. Przynajmniej jeden tryb musi być podany w atrybucie %1 elementu %2. - Element %1 must come last. Element %1 musi wystąpić jako ostatni. - At least one %1-element must occur before %2. Przynajmniej jeden element %1 musi wystąpić przed %2. - Only one %1-element can appear. Może wystąpić tylko jeden element %1. - At least one %1-element must occur inside %2. Przynajmniej jeden element %1 musi wystąpić wewnątrz %2. - When attribute %1 is present on %2, a sequence constructor cannot be used. Kiedy atrybut %1 występuje w %2 konstruktor sekwencyjny nie może być użyty. - Element %1 must have either a %2-attribute or a sequence constructor. Element %1 musi posiadać albo atrybut %2 albo sekwencyjny konstruktor. - When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. Kiedy wymagany jest parametr, domyślna wartość nie może być dostarczona przez atrybut %1 ani przez sekwencyjny konstruktor. - Element %1 cannot have children. Element %1 nie może posiadać potomków. - Element %1 cannot have a sequence constructor. Element %1 nie może posiadać sekwencyjnego konstruktora. - - The attribute %1 cannot appear on %2, when it is a child of %3. Atrybut %1 nie może wystąpić w %2 kiedy jest on potomkiem %3. - A parameter in a function cannot be declared to be a tunnel. Parametr funkcji nie może być zadeklarowany jako tunelowy. - This processor is not Schema-aware and therefore %1 cannot be used. Procesor nie obsługuje schematów, więc %1 nie może zostać użyte. - Top level stylesheet elements must be in a non-null namespace, which %1 isn't. Elementy arkusza stylu najwyższego poziomu muszą być w niezerowej przestrzeni nazw, którą %1 nie jest. - The value for attribute %1 on element %2 must either be %3 or %4, not %5. Wartością atrybutu %1 w elemencie %2 musi być %3 albo %4, lecz nie %5. - Attribute %1 cannot have the value %2. Atrybut %1 nie może posiadać wartości %2. - The attribute %1 can only appear on the first %2 element. Atrybut %1 może wystąpić jedynie w pierwszym elemencie %2. - At least one %1 element must appear as child of %2. Przynajmniej jeden element %1 musi wystąpić jako potomek %2. - %1 has inheritance loop in its base type %2. %1 ma pętlę w dziedziczeniu w jego podstawowym typie %2. - - Circular inheritance of base type %1. Cykliczne dziedziczenie podstawowego typu %1. - Circular inheritance of union %1. Cykliczne dziedziczenie unii %1. - %1 is not allowed to derive from %2 by restriction as the latter defines it as final. Nie można wywieść %1 z %2 ograniczając go ponieważ jest on zdefiniowany jako końcowy. - %1 is not allowed to derive from %2 by extension as the latter defines it as final. Nie można wywieść %1 z %2 rozszerzając go ponieważ jest on zdefiniowany jako końcowy. - Base type of simple type %1 cannot be complex type %2. Typ podstawowy dla typu prostego %1 nie może być typem złożonym %2. - Simple type %1 cannot have direct base type %2. Typ prosty %1 nie może mieć bezpośredniego typu podstawowego %2. - - Simple type %1 is not allowed to have base type %2. Typ prosty %1 nie może mieć typu podstawowego %2. - Simple type %1 can only have simple atomic type as base type. Typem podstawowym typu prostego %1 może być tylko typ atomowy. - Simple type %1 cannot derive from %2 as the latter defines restriction as final. Typ prosty %1 nie może wywodzić się z %2 ponieważ ten ostatni jest zdefiniowany jako końcowy. - - Variety of item type of %1 must be either atomic or union. Typem elementów listy %1 musi być albo typ atomowy albo unia. - - Variety of member types of %1 must be atomic. Typy składników %1 muszą być atomowe. - - %1 is not allowed to derive from %2 by list as the latter defines it as final. Nie można wywieść %1 z %2 poprzez listę ponieważ jest to zdefiniowane ostatecznie w typie podstawowym. - Simple type %1 is only allowed to have %2 facet. Typ prosty %1 może jedynie posiadać aspekt %2. - Base type of simple type %1 must have variety of type list. Typ podstawowy dla typu prostego %1 musi być listą typów. - Base type of simple type %1 has defined derivation by restriction as final. Typ podstawowy dla typu prostego %1 ma zdefiniowane wywodzenie poprzez ograniczenie jako końcowe. - Item type of base type does not match item type of %1. Typ elementów listy typu podstawowego nie pasuje do typu elementów listy %1. - - Simple type %1 contains not allowed facet type %2. Typ prosty %1 posiada niedozwolony aspekt %2. - - %1 is not allowed to derive from %2 by union as the latter defines it as final. Nie można wywieść %1 z %2 poprzez unię ponieważ jest to zdefiniowane ostatecznie w typie podstawowym. - %1 is not allowed to have any facets. %1 nie może posiadać żadnych aspektów. - Base type %1 of simple type %2 must have variety of union. Typ podstawowy %1 dla typu prostego %2 musi być unią. - Base type %1 of simple type %2 is not allowed to have restriction in %3 attribute. Typ podstawowy %1 dla typu prostego %2 nie może posiadać ograniczenia dla atrybutu %3. - Member type %1 cannot be derived from member type %2 of %3's base type %4. Typ %1 składnika nie może być wywiedziony z typu %2 który jest typem składnika %3 typu podstawowego %4. - Derivation method of %1 must be extension because the base type %2 is a simple type. Metodą wywodzenia z %1 musi być rozszerzenie ponieważ typ podstawowy %2 jest typem prostym. - Complex type %1 has duplicated element %2 in its content model. Typ złożony %1 posiada powielony element %2 w jego modelu zawartości. - Complex type %1 has non-deterministic content. Typ złożony %1 posiada nieokreśloną zawartość. - Attributes of complex type %1 are not a valid extension of the attributes of base type %2: %3. Atrybuty typu złożonego %1 nie są poprawnym rozszerzeniem atrybutów typu podstawowego %2: %3. - Content model of complex type %1 is not a valid extension of content model of %2. Model zawartości typu złożonego %1 nie jest poprawnym rozszerzeniem modelu zawartości %2. - Complex type %1 must have simple content. Typ złożony %1 musi mieć prostą zawartość. - Complex type %1 must have the same simple type as its base class %2. Typ złożony %1 musi posiadać ten sam prosty typ jaki posiada jego klasa podstawowa %2. - Complex type %1 cannot be derived from base type %2%3. Typ złożony %1 nie może być wywiedziony z typu %2%3. - Attributes of complex type %1 are not a valid restriction from the attributes of base type %2: %3. Atrybuty typu złożonego %1 nie są poprawnym ograniczeniem atrybutów typu podstawowego %2: %3. - Complex type %1 with simple content cannot be derived from complex base type %2. Typ złożony %1 z prostą zawartością nie może być wywiedziony z podstawowego typu złożonego %2. - Item type of simple type %1 cannot be a complex type. Typ elementów listy w prostym typie %1 nie może być typem złożonym. - Member type of simple type %1 cannot be a complex type. Typ składnika typu prostego %1 nie może być typem złożonym. - %1 is not allowed to have a member type with the same name as itself. %1 nie może posiadać typu składnika o tej samej nazwie jaką on sam posiada. - - - %1 facet collides with %2 facet. Aspekt %1 koliduje z aspektem %2. - %1 facet must have the same value as %2 facet of base type. Aspekt %1 musi mieć tą samą wartość jaką ma aspekt %2 typu podstawowego. - %1 facet must be equal or greater than %2 facet of base type. Wartość aspektu %1 musi większa od lub równa wartości aspektu %2 typu podstawowego. - - - - - - - - %1 facet must be less than or equal to %2 facet of base type. Wartość aspektu %1 musi być mniejsza od lub równa wartości aspektu %2 typu podstawowego. - %1 facet contains invalid regular expression Aspekt %1 zawiera niepoprawne wyrażenie regularne - Unknown notation %1 used in %2 facet. Nieznany zapis %1 użyty w aspekcie %2. - %1 facet contains invalid value %2: %3. Aspekt %1 zawiera niepoprawną wartość %2: %3. - %1 facet cannot be %2 or %3 if %4 facet of base type is %5. Aspektem %1 nie może być %2 ani %3 jeśli aspektem %4 typu podstawowego jest %5. - %1 facet cannot be %2 if %3 facet of base type is %4. Aspektem %1 nie może być %2 jeśli aspektem %3 typu podstawowego jest %4. - - - %1 facet must be less than or equal to %2 facet. Wartość aspektu %1 musi być mniejsza od lub równa wartości aspektu %2. - - - %1 facet must be less than %2 facet of base type. Wartość aspektu %1 musi być mniejsza od wartości aspektu %2 typu podstawowego. - - %1 facet and %2 facet cannot appear together. Aspekty %1 i %2 nie mogą wystąpić jednocześnie. - - - %1 facet must be greater than %2 facet of base type. Wartość aspektu %1 musi być większa od wartości aspektu %2 typu podstawowego. - - %1 facet must be less than %2 facet. Wartość aspektu %1 musi być mniejsza od wartości aspektu %2. - - %1 facet must be greater than or equal to %2 facet of base type. Wartość aspektu %1 musi być większa od lub równa wartości aspektu %2 typu podstawowego. - Simple type contains not allowed facet %1. Typ prosty zawiera niedozwolony aspekt %1. - %1, %2, %3, %4, %5 and %6 facets are not allowed when derived by list. Aspekty %1, %2, %3, %4, %5 i %6 nie są dozwolone podczas wywodzenia z listy. - Only %1 and %2 facets are allowed when derived by union. Dozwolone są jedynie aspekty %1 i %2 podczas wywodzenia z unii. - - %1 contains %2 facet with invalid data: %3. %1 zawiera aspekt %2 z niepoprawnymi danymi: %3. - Attribute group %1 contains attribute %2 twice. Grupa atrybutów %1 zawiera dwukrotnie atrybut %2. - Attribute group %1 contains two different attributes that both have types derived from %2. Grupa atrybutów %1 zawiera dwa różne atrybuty których typy są wywiedzione z %2. - Attribute group %1 contains attribute %2 that has value constraint but type that inherits from %3. Grupa atrybutów %1 zawiera atrybut %2 który ma ograniczenie wartości ale typ wywodzi się z %3. - Complex type %1 contains attribute %2 twice. Typ złożony %1 zawiera atrybut %2 dwukrotnie. - Complex type %1 contains two different attributes that both have types derived from %2. Typ złożony %1 zawiera dwa różne atrybuty których typy są wywiedzione z %2. - Complex type %1 contains attribute %2 that has value constraint but type that inherits from %3. Typ złożony %1 zawiera atrybut %2 który ma ograniczenie wartości ale typ wywodzi się z %3. - Element %1 is not allowed to have a value constraint if its base type is complex. Element %1 nie może zawierać ograniczenia wartości gdy jego typ podstawowy jest złożony. - Element %1 is not allowed to have a value constraint if its type is derived from %2. Element %1 nie może zawierać ograniczenia wartości gdy jego typ jest wywiedziony z %2. - - Value constraint of element %1 is not of elements type: %2. Ograniczenie wartości elementu %1 nie jest typu: %2. - Element %1 is not allowed to have substitution group affiliation as it is no global element. Element %1 nie może przynależeć do grupy zastępującej ponieważ nie jest on elementem globalnym. - Type of element %1 cannot be derived from type of substitution group affiliation. Typ elementu %1 nie może być wywiedziony z typu przynależnego do grupy zastępującej. - Value constraint of attribute %1 is not of attributes type: %2. Ograniczenie wartości atrybutu %1 nie jest typu: %2. - Attribute %1 has value constraint but has type derived from %2. Atrybut %1 posiada ograniczenie wartości lecz jego typ wywodzi się z %2. - %1 attribute in derived complex type must be %2 like in base type. Atrybut %1 w wywiedzionym typie złożonym musi być %2 jak w typie podstawowym. - Attribute %1 in derived complex type must have %2 value constraint like in base type. Atrybut %1 w wywiedzionym typie złożonym musi zawierać ograniczenie wartości %2 jak w typie podstawowym. - Attribute %1 in derived complex type must have the same %2 value constraint like in base type. Atrybut %1 w wywiedzionym typie złożonym musi zawierać te same ograniczenie wartości %2 jak w typie podstawowym. - Attribute %1 in derived complex type must have %2 value constraint. Atrybut %1 w wywiedzionym typie złożonym musi zawierać ograniczenie wartości %2. - processContent of base wildcard must be weaker than derived wildcard. "processContent" podstawowego dżokera musi być słabszy od wywiedzionego dżokera. - - Element %1 exists twice with different types. Istnieją dwa elementy %1 o różnych typach. - Particle contains non-deterministic wildcards. Element zawiera nieokreślone dżokery. - - Base attribute %1 is required but derived attribute is not. Wymagany jest bazowy atrybut %1, wywiedziony zaś nie. - Type of derived attribute %1 cannot be validly derived from type of base attribute. Typ wywiedzionego atrybutu %1 nie może być poprawnie wywiedziony z typu podstawowego atrybutu. - Value constraint of derived attribute %1 does not match value constraint of base attribute. Ograniczenie wartości wywiedzionego atrybutu %1 nie pasuje do ograniczenia wartości podstawowego atrybutu. - Derived attribute %1 does not exist in the base definition. Wywiedziony atrybut %1 nie istnieje w podstawowej definicji. - Derived attribute %1 does not match the wildcard in the base definition. Wywiedziony atrybut %1 nie pasuje do dżokera w podstawowej definicji. - Base attribute %1 is required but missing in derived definition. Brak wymaganego bazowego atrybutu %1 w wywiedzionej definicji. - Derived definition contains an %1 element that does not exists in the base definition Wywiedziona definicja zawiera element %1 który nie istnieje w definicji podstawowej - Derived wildcard is not a subset of the base wildcard. Wywiedziony dżoker nie jest podzbiorem podstawowego dżokera. - %1 of derived wildcard is not a valid restriction of %2 of base wildcard %1 wywiedzionego dżokera nie jest poprawnym ograniczeniem %2 podstawowego dżokera - Attribute %1 from base type is missing in derived type. Brak atrybutu %1 typu bazowego w wywiedzionej definicji. - Type of derived attribute %1 differs from type of base attribute. Typ wywiedzionego atrybutu %1 różni się od typu podstawowego atrybutu. - Base definition contains an %1 element that is missing in the derived definition Podstawowa definicja zawiera element %1 którego brakuje w wywiedzionej definicji - %1 references unknown %2 or %3 element %4. %1 odwołuje się do nieznanego elementu %2 lub %3: %4. - %1 references identity constraint %2 that is no %3 or %4 element. %1 odwołuje się do narzucenia niepowtarzalności %2 które nie jest elementem %3 ani %4. - %1 has a different number of fields from the identity constraint %2 that it references. %1 posiada inna liczbę pól od narzucenia niepowtarzalności %2 które się do niego odwołuje. - Base type %1 of %2 element cannot be resolved. Nie można rozwiązać typu podstawowego %1 elementu %2. - Item type %1 of %2 element cannot be resolved. Nie można rozwiązać typu elementów listy %1 w elemencie %2. - Member type %1 of %2 element cannot be resolved. Nie można rozwiązać typu %1 składnika elementu %2. - - - Type %1 of %2 element cannot be resolved. Nie można rozwiązać typu %1 elementu %2. - Base type %1 of complex type cannot be resolved. Nie można rozwiązać typu podstawowego %1 dla typu złożonego. - %1 cannot have complex base type that has a %2. %1 nie może mieć złożonego typu podstawowego który ma %2. - Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type. Model zawartości typu złożonego %1 posiada element %2 więc nie może być on wywiedziony poprzez rozszerzenie niepustego typu. - Complex type %1 cannot be derived by extension from %2 as the latter contains %3 element in its content model. Typ złożony %1 nie może być wywiedziony z %2 poprzez rozszerzenie ponieważ ten ostatni zawiera element %3 w jego modelu zawartości. - Type of %1 element must be a simple type, %2 is not. Typem elementu %1 musi być typ prosty, %2 nim nie jest. - Substitution group %1 of %2 element cannot be resolved. Nie można rozwiązać grupy zastępującej %1 elementu %2. - Substitution group %1 has circular definition. Grupa zastępująca %1 posiada cykliczną definicję. - - Duplicated element names %1 in %2 element. Powielona nazwa elementu %1 w elemencie %2. - - - - Reference %1 of %2 element cannot be resolved. Nie można rozwiązać odwołania %1 do elementu %2. - Circular group reference for %1. Cykliczne odwołanie do grupy dla %1. - %1 element is not allowed in this scope Element %1 nie jest dozwolony w tym zakresie - %1 element cannot have %2 attribute with value other than %3. Element %1 nie może mieć atrybutu %2 z wartością inną niż %3. - %1 element cannot have %2 attribute with value other than %3 or %4. Element %1 nie może mieć atrybutu %2 z wartością inną niż %3 lub %4. - %1 or %2 attribute of reference %3 does not match with the attribute declaration %4. Atrybut %1 lub %2 odwołania %3 nie pasuje do deklaracji atrybutu %4. - Attribute group %1 has circular reference. Grupa atrybutów %1 posiada cykliczne odwołanie. - %1 attribute in %2 must have %3 use like in base type %4. Atrybut %1 w %2 powinien używać %3 jak w typie podstawowym %4. - Attribute wildcard of %1 is not a valid restriction of attribute wildcard of base type %2. Atrybut dżokera %1 nie jest poprawnym ograniczeniem atrybutu dżokera typu podstawowego %2. - %1 has attribute wildcard but its base type %2 has not. %1 posiada atrybut dżokera lecz jego typ podstawowy %2 go nie posiada. - Union of attribute wildcard of type %1 and attribute wildcard of its base type %2 is not expressible. Nie można wyrazić unii atrybutu dżokera typu %1 i atrybutu dżokera jego typu podstawowego %2. - Enumeration facet contains invalid content: {%1} is not a value of type %2. Aspekt "enumeration" posiada niepoprawną zawartość: {%1} nie jest wartością typu %2. - Namespace prefix of qualified name %1 is not defined. Przedrostek przestrzeni nazw występujący w pełnej nazwie %1 nie jest zdefiniowany. - - %1 element %2 is not a valid restriction of the %3 element it redefines: %4. Element %1 (%2) nie jest poprawnym ograniczeniem elementu %3 który redefiniuje: %4. - Empty particle cannot be derived from non-empty particle. Pusty element nie może być wywiedziony z niepustego elementu. - Derived particle is missing element %1. Brak elementu %1 w wywiedzionym elemencie. - Derived element %1 is missing value constraint as defined in base particle. Brak ograniczenia wartości w wywiedzionym elemencie %1 takiego jak w podstawowym elemencie. - Derived element %1 has weaker value constraint than base particle. Wywiedziony element %1 posiada słabsze ograniczenie wartości niż element podstawowy. - Fixed value constraint of element %1 differs from value constraint in base particle. Ograniczenie stałej wartości elementu %1 różni się od ograniczenia wartości w podstawowym elemencie. - Derived element %1 cannot be nillable as base element is not nillable. Wywiedziony element %1 może być zerowalny ponieważ element podstawowy nie jest zerowalny. - Block constraints of derived element %1 must not be more weaker than in the base element. Ograniczenia blokujące dla wywiedzionego elementu %1 nie mogą być słabsze od ograniczeń w elemencie podstawowym. - Simple type of derived element %1 cannot be validly derived from base element. Typ prosty w elemencie wywiedzionym %1 nie może być poprawnie wywiedziony z elementu podstawowego. - Complex type of derived element %1 cannot be validly derived from base element. Typ złożony w elemencie wywiedzionym %1 nie może być poprawnie wywiedziony z elementu podstawowego. - Element %1 is missing in derived particle. Brak elementu %1 w wywiedzionym elemencie. - Element %1 does not match namespace constraint of wildcard in base particle. Element %1 nie pasuje do ograniczenia przestrzeni nazw dżokera w elemencie podstawowym. - Wildcard in derived particle is not a valid subset of wildcard in base particle. Dżoker w wywiedzionym elemencie nie jest poprawnym podzbiorem dżokera w elemencie podstawowym. - processContent of wildcard in derived particle is weaker than wildcard in base particle. "processContent" dżokera w wywiedzionym elemencie jest słabszy od dżokera w podstawowym elemencie. - Derived particle allows content that is not allowed in the base particle. Wywiedziony element pozwala na zawartość która jest niedozwolona w podstawowym elemencie. - Can not process unknown element %1, expected elements are: %2. Nie można przetworzyć nieznanego elementu %1, oczekiwanymi elementami są: %2. - Element %1 is not allowed in this scope, possible elements are: %2. Element %1 jest niedozwolony w tym zakresie, możliwymi elementami są: %2. - Child element is missing in that scope, possible child elements are: %1. Brak podelementu w tym zakresie, możliwymi podelementami są: %1. - Document is not a XML schema. Dokument nie jest schematem XML. - %1 attribute of %2 element contains invalid content: {%3} is not a value of type %4. Atrybut %1 elementu %2 posiada niepoprawną zawartość: {%3} nie jest wartością typu %4. - %1 attribute of %2 element contains invalid content: {%3}. Atrybut %1 elementu %2 posiada niepoprawną zawartość: {%3}. - Target namespace %1 of included schema is different from the target namespace %2 as defined by the including schema. Docelowa przestrzeń nazw %1 załączonego schematu jest różna od docelowej przestrzeni nazw %2 która jest zdefiniowana w schemacie załączającym. - - Target namespace %1 of imported schema is different from the target namespace %2 as defined by the importing schema. Docelowa przestrzeń nazw %1 zaimportowanego schematu jest różna od docelowej przestrzeni nazw %2 która jest zdefiniowana w schemacie importującym. - %1 element is not allowed to have the same %2 attribute value as the target namespace %3. Element %1 nie może zawierać tej samej wartości atrybutu %2 co docelowa przestrzeń nazw %3. - %1 element without %2 attribute is not allowed inside schema without target namespace. Element %1 bez atrybutu %2 jest niedozwolony wewnątrz schematu bez docelowej przestrzeni nazw. - - %1 element is not allowed inside %2 element if %3 attribute is present. Element %1 jest niedozwolony wewnątrz elementu %2 jeśli jest obecny atrybut %3. - - - %1 element has neither %2 attribute nor %3 child element. Element %1 nie posiada ani atrybutu %2 ani podelementu %3. - - - - - - - - - - - - - - %1 element with %2 child element must not have a %3 attribute. Element %1 z podelementem %2 nie może mieć atrybutu %3. - %1 attribute of %2 element must be %3 or %4. Atrybutem %1 elementu %2 musi być %3 lub %4. - %1 attribute of %2 element must have a value of %3. Atrybut %1 elementu %2 musi posiadać wartość %3. - - %1 attribute of %2 element must have a value of %3 or %4. Atrybut %1 elementu %2 musi posiadać wartość %3 lub %4. - - - - - - - - - - - - - - %1 element must not have %2 and %3 attribute together. Element %1 nie może posiadać jednocześnie atrybutów %2 i %3. - - Content of %1 attribute of %2 element must not be from namespace %3. Zawartość atrybutu %1 elementu %2 nie może pochodzić z przestrzeni nazw %3. - - %1 attribute of %2 element must not be %3. Atrybut %1 elementu %2 nie może być %3. - %1 attribute of %2 element must have the value %3 because the %4 attribute is set. Atrybut %1 elementu %2 musi zawierać wartość %3 ponieważ atrybut %4 jest ustawiony. - Specifying use='prohibited' inside an attribute group has no effect. Podawanie: use='prohibited' wewnątrz grupy atrybutów nie przynosi żadnego efektu. - %1 element must have either %2 or %3 attribute. Element %1 musi zawierać atrybut %2 albo %3. - %1 element must have either %2 attribute or %3 or %4 as child element. Element %1 musi zawierać albo atrybut %2 albo %3 lub %4 jako podelement. - %1 element requires either %2 or %3 attribute. Element %1 wymaga atrybutu %2 albo %3. - Text or entity references not allowed inside %1 element Tekst ani odwołanie nie są dozwolone wewnątrz elementu %1 - - %1 attribute of %2 element must contain %3, %4 or a list of URIs. Atrybut %1 elementu %2 musi zawierać %3, %4 lub listę URI. - %1 element is not allowed in this context. Element %1 jest niedozwolony w tym kontekście. - %1 attribute of %2 element has larger value than %3 attribute. Atrybut %1 elementu %2 posiada większą wartość niż atrybut %3. - Prefix of qualified name %1 is not defined. Przedrostek w pełnej nazwie %1 nie jest zdefiniowany. - - %1 attribute of %2 element must either contain %3 or the other values. Atrybut %1 elementu %2 musi zawierać albo %3 albo inne wartości. - Component with ID %1 has been defined previously. Komponent o identyfikatorze %1 został uprzednio zdefiniowany. - Element %1 already defined. Element %1 jest już zdefiniowany. - Attribute %1 already defined. Atrybut %1 jest już zdefiniowany. - Type %1 already defined. Typ %1 jest już zdefiniowany. - Attribute group %1 already defined. Grupa atrybutów %1 jest już zdefiniowana. - Element group %1 already defined. Grupa elementów %1 jest już zdefiniowana. - Notation %1 already defined. Zapis %1 jest już zdefiniowany. - Identity constraint %1 already defined. Narzucenie niepowtarzalności %1 jest już zdefiniowane. - Duplicated facets in simple type %1. Powielone aspekty w prostym typie %1. - - - %1 is not valid according to %2. Ponieważ nie wiadomo co jest podmiotem nie można stwierdzić czy to ma być "poprawnym", "poprawną" czy "poprawne" %1 nie jest poprawne według %2. - String content does not match the length facet. Wartość ciągu koliduje z aspektem "length". - String content does not match the minLength facet. Wartość ciągu koliduje z aspektem "minLength". - String content does not match the maxLength facet. Wartość ciągu koliduje z aspektem "maxLength". - String content does not match pattern facet. Wartość ciągu koliduje z aspektem "pattern". - String content is not listed in the enumeration facet. Wartość ciągu nie widnieje na liście aspektu "enumeration". - Signed integer content does not match the maxInclusive facet. Wartość liczby całkowitej koliduje z aspektem "maxInclusive". - Signed integer content does not match the maxExclusive facet. Wartość liczby całkowitej koliduje z aspektem "maxExclusive". - Signed integer content does not match the minInclusive facet. Wartość liczby całkowitej koliduje z aspektem "minInclusive". - Signed integer content does not match the minExclusive facet. Wartość liczby całkowitej koliduje z aspektem "minExclusive". - Signed integer content is not listed in the enumeration facet. Wartość liczby całkowitej nie widnieje na liście aspektu "enumeration". - Signed integer content does not match pattern facet. Wartość liczby całkowitej koliduje z aspektem "pattern". - Signed integer content does not match in the totalDigits facet. Wartość liczby całkowitej koliduje z aspektem "totalDigits". - Unsigned integer content does not match the maxInclusive facet. Wartość liczby naturalnej koliduje z aspektem "maxInclusive". - Unsigned integer content does not match the maxExclusive facet. Wartość liczby naturalnej koliduje z aspektem "maxExclusive". - Unsigned integer content does not match the minInclusive facet. Wartość liczby naturalnej koliduje z aspektem "minInclusive". - Unsigned integer content does not match the minExclusive facet. Wartość liczby naturalnej koliduje z aspektem "minExclusive". - Unsigned integer content is not listed in the enumeration facet. Wartość liczby naturalnej nie widnieje na liście aspektu "enumeration". - Unsigned integer content does not match pattern facet. Wartość liczby naturalnej koliduje z aspektem "pattern". - Unsigned integer content does not match in the totalDigits facet. Wartość liczby naturalnej koliduje z aspektem "totalDigits". - Double content does not match the maxInclusive facet. Wartość liczby rzeczywistej koliduje z aspektem "maxInclusive". - Double content does not match the maxExclusive facet. Wartość liczby rzeczywistej koliduje z aspektem "maxExclusive". - Double content does not match the minInclusive facet. Wartość liczby rzeczywistej koliduje z aspektem "minInclusive". - Double content does not match the minExclusive facet. Wartość liczby rzeczywistej koliduje z aspektem "minExclusive". - Double content is not listed in the enumeration facet. Wartość liczby rzeczywistej nie widnieje na liście aspektu "enumeration". - Double content does not match pattern facet. Wartość liczby rzeczywistej koliduje z aspektem "pattern". - Decimal content does not match in the fractionDigits facet. Wartość liczby rzeczywistej koliduje z aspektem "fractionDigits". - Decimal content does not match in the totalDigits facet. Wartość liczby rzeczywistej koliduje z aspektem "totalDigits". - Date time content does not match the maxInclusive facet. Zawartość daty i czasu koliduje z aspektem "maxInclusive". - Date time content does not match the maxExclusive facet. Zawartość daty i czasu koliduje z aspektem "maxExclusive". - Date time content does not match the minInclusive facet. Zawartość daty i czasu koliduje z aspektem "minInclusive". - Date time content does not match the minExclusive facet. Zawartość daty i czasu koliduje z aspektem "minExclusive". - Date time content is not listed in the enumeration facet. Zawartość daty i czasu nie widnieje na liście aspektu "enumeration". - Date time content does not match pattern facet. Zawartość daty i czasu koliduje z aspektem "pattern". - Duration content does not match the maxInclusive facet. Wartość czasu trwania koliduje z aspektem "maxInclusive". - Duration content does not match the maxExclusive facet. Wartość czasu trwania koliduje z aspektem "maxExclusive". - Duration content does not match the minInclusive facet. Wartość czasu trwania koliduje z aspektem "minInclusive". - Duration content does not match the minExclusive facet. Wartość czasu trwania koliduje z aspektem "minExclusive". - Duration content is not listed in the enumeration facet. Wartość czasu trwania nie widnieje na liście aspektu "enumeration". - Duration content does not match pattern facet. Wartość czasu trwania koliduje z aspektem "pattern". - Boolean content does not match pattern facet. Wartość boolowska koliduje z aspektem "pattern". - Binary content does not match the length facet. Wartość binarna koliduje z aspektem "length". - Binary content does not match the minLength facet. Wartość binarna koliduje z aspektem "minLength". - Binary content does not match the maxLength facet. Wartość binarna koliduje z aspektem "maxLength". - Binary content is not listed in the enumeration facet. Wartość binarna nie widnieje na liście aspektu "enumeration". - Invalid QName content: %1. Niepoprawna zawartość QName: %1. - QName content is not listed in the enumeration facet. Zawartość QName nie widnieje na liście aspektu "enumeration". - QName content does not match pattern facet. Zawartość QName koliduje z aspektem "pattern". - Notation content is not listed in the enumeration facet. Zapis zawartości nie widnieje na liście aspektu "enumeration". - List content does not match length facet. Zawartość listy koliduje z aspektem "length". - List content does not match minLength facet. Zawartość listy koliduje z aspektem "minLength". - List content does not match maxLength facet. Zawartość listy koliduje z aspektem "maxLength". - List content is not listed in the enumeration facet. Zawartość listy nie widnieje na liście aspektu "enumeration". - List content does not match pattern facet. Zawartość listy koliduje z aspektem "pattern". - Union content is not listed in the enumeration facet. Zawartość unii nie widnieje na liście aspektu "enumeration". - Union content does not match pattern facet. Zawartość unii koliduje z aspektem "pattern". - Data of type %1 are not allowed to be empty. Dane typu %1 nie mogą być puste. - Element %1 is missing child element. Brak wymaganego podelementu w elemencie %1. - There is one IDREF value with no corresponding ID: %1. Istnieje wartość IDREF bez odpowiadającej jej wartości ID: %1. - Loaded schema file is invalid. Załadowany plik nie jest poprawnym plikiem ze schematem. - %1 contains invalid data. %1 zawiera niepoprawne dane. - xsi:schemaLocation namespace %1 has already appeared earlier in the instance document. Przestrzeń nazw "xsi:schemaLocation" %1 wystąpiła już wcześniej w dokumencie. - xsi:noNamespaceSchemaLocation cannot appear after the first no-namespace element or attribute. "xsi:noNamespaceSchemaLocation" nie może wystąpić po pierwszym elemencie lub atrybucie który nie jest przestrzenią nazw. - No schema defined for validation. Brak zdefiniowanego schematu dla walidacji. - No definition for element %1 available. Brak dostępnej definicji dla elementu %1. - - - Specified type %1 is not known to the schema. Podany typ %1 nie jest schematowi znany. - Element %1 is not defined in this scope. Element %1 nie jest zdefiniowany w tym zakresie. - Declaration for element %1 does not exist. Brak deklaracji dla elementu %1. - Element %1 contains invalid content. Element %1 posiada niepoprawną zawartość. - Element %1 is declared as abstract. Element %1 jest zadeklarowany jako abstrakcyjny. - Element %1 is not nillable. Element %1 nie jest zerowalny. - Attribute %1 contains invalid data: %2 Atrybut %1 zawiera niepoprawne dane: %2 - Element contains content although it is nillable. Element posiada zawartość chociaż jest zerowalny. - Fixed value constraint not allowed if element is nillable. Ograniczenie stałej wartości jest niedozwolone gdy element jest zerowalny. - Element %1 cannot contain other elements, as it has a fixed content. Element %1 nie może zawierać innych elementów ponieważ posiada on stałą zawartość. - Specified type %1 is not validly substitutable with element type %2. Podany typ %1 nie jest poprawnie zastępowalny typem elementu %2. - Complex type %1 is not allowed to be abstract. Typ złożony %1 nie może być abstrakcyjny. - Element %1 contains not allowed attributes. Element %1 zawiera niedozwolone atrybuty. - - Element %1 contains not allowed child element. Element %1 zawiera niedozwolony podelement. - - Content of element %1 does not match its type definition: %2. Zawartość elementu %1 nie pasuje do jego definicji typu: %2. - - - Content of element %1 does not match defined value constraint. Zawartość elementu %1 nie pasuje do zdefiniowanego ograniczenia wartości. - Element %1 contains not allowed child content. Element %1 zawiera niedozwolony podelement. - Element %1 contains not allowed text content. Element %1 zawiera niedozwolony text. - Element %1 is missing required attribute %2. Brak wymaganego atrybutu %2 w elemencie %1. - Attribute %1 does not match the attribute wildcard. Atrybut %1 nie pasuje do atrybutu dżokera. - Declaration for attribute %1 does not exist. Brak deklaracji atrybutu %1. - Element %1 contains two attributes of type %2. Element %1 posiada dwa atrybuty typu %2. - Attribute %1 contains invalid content. Atrybut %1 posiada niepoprawną zawartość. - Element %1 contains unknown attribute %2. Element %1 posiada nieznany atrybut %2. - - Content of attribute %1 does not match its type definition: %2. Zawartość atrybutu %1 nie pasuje do jego definicji typu: %2. - - Content of attribute %1 does not match defined value constraint. Zawartość elementu %1 nie pasuje do zdefiniowanego ograniczenia wartości. - Non-unique value found for constraint %1. Znaleziono nieunikatową wartość dla ograniczenia %1. - Key constraint %1 contains absent fields. Ograniczenie klucza %1 zawiera nieobecne pola. - Key constraint %1 contains references nillable element %2. - No referenced value found for key reference %1. Brak wartości do której odwołuje się klucz %1. - More than one value found for field %1. Znaleziono więcej niż jedną wartość dla pola %1. - Field %1 has no simple type. Pole %1 nie posiada prostego typu. - ID value '%1' is not unique. Wartość ID "%1" nie jest unikatowa. - '%1' attribute contains invalid QName content: %2. Atrybut "%1" zawiera niepoprawną zawartość QName: %2. -- cgit v0.12 From cc1b6475a99994908cbd6309a08fd08614f18221 Mon Sep 17 00:00:00 2001 From: Gareth Stockwell Date: Tue, 10 Aug 2010 16:30:18 +0100 Subject: Test backing store is deleted after: partial reveal, full reveal, hide After the following sequence: * widget starts hidden * Partially reveal widget * Fully reveal widget * Hide widget widget's backing store should be deleted, when running on Symbian. Task-number: QTBUG-12800 Reviewed-by: Jason Barron --- tests/auto/qwidget/tst_qwidget.cpp | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/tests/auto/qwidget/tst_qwidget.cpp b/tests/auto/qwidget/tst_qwidget.cpp index f722f89..e6e8970 100644 --- a/tests/auto/qwidget/tst_qwidget.cpp +++ b/tests/auto/qwidget/tst_qwidget.cpp @@ -9758,6 +9758,43 @@ void tst_QWidget::destroyBackingStoreWhenHidden() QVERIFY(0 != backingStore(parent)); QVERIFY(0 == backingStore(child)); } + + // 6. Partial reveal followed by full reveal + { + QWidget upper; + upper.setAutoFillBackground(true); + upper.setPalette(Qt::red); + upper.setGeometry(50, 50, 100, 100); + + QWidget lower; + lower.setAutoFillBackground(true); + lower.setPalette(Qt::green); + lower.setGeometry(50, 50, 100, 100); + + lower.show(); + QTest::qWaitForWindowShown(&lower); + upper.show(); + QTest::qWaitForWindowShown(&upper); + upper.raise(); + + QVERIFY(0 != backingStore(upper)); + QVERIFY(0 == backingStore(lower)); + + // Check that upper obscures lower + QVERIFY(lower.visibleRegion().subtracted(upper.visibleRegion()).isEmpty()); + + // Partially reveal lower + upper.move(100, 100); + + // Completely reveal lower + upper.hide(); + + // Hide lower widget - this should cause its backing store to be deleted + lower.hide(); + + // Check that backing store was deleted + WAIT_AND_VERIFY(0 == backingStore(lower)); + } } #undef WAIT_AND_VERIFY -- cgit v0.12 From b5360eb223d5377beb62008fcc1da48f432dc8dd Mon Sep 17 00:00:00 2001 From: Gareth Stockwell Date: Tue, 10 Aug 2010 17:08:37 +0100 Subject: Test backing store is deleted after reparenting a visible native child widget After the following sequence: * Create a TLW, parent1 * Create a child of parent1, and make it a native widget * Create another TLW, parent2 * Show parent1 and parent2 * Reparent child so its parent is now parent2 * Hide parent1 parent1's backing store should be deleted, when running on Symbian. Task-number: QTBUG-12817 Reviewed-by: Jason Barron --- tests/auto/qwidget/tst_qwidget.cpp | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/tests/auto/qwidget/tst_qwidget.cpp b/tests/auto/qwidget/tst_qwidget.cpp index e6e8970..ba0be3e 100644 --- a/tests/auto/qwidget/tst_qwidget.cpp +++ b/tests/auto/qwidget/tst_qwidget.cpp @@ -9795,6 +9795,43 @@ void tst_QWidget::destroyBackingStoreWhenHidden() // Check that backing store was deleted WAIT_AND_VERIFY(0 == backingStore(lower)); } + + // 7. Reparenting of visible native child widget + { + QWidget parent1; + parent1.setAutoFillBackground(true); + parent1.setPalette(Qt::green); + parent1.setGeometry(50, 50, 100, 100); + + QWidget *child = new QWidget(&parent1); + child->winId(); + child->setAutoFillBackground(true); + child->setPalette(Qt::red); + child->setGeometry(10, 10, 30, 30); + + QWidget parent2; + parent2.setAutoFillBackground(true); + parent2.setPalette(Qt::blue); + parent2.setGeometry(150, 150, 100, 100); + + parent1.show(); + QTest::qWaitForWindowShown(&parent1); + QVERIFY(0 != backingStore(parent1)); + + parent2.show(); + QTest::qWaitForWindowShown(&parent2); + QVERIFY(0 != backingStore(parent2)); + + child->setParent(&parent2); + child->setGeometry(10, 10, 30, 30); + child->show(); + + parent1.hide(); + WAIT_AND_VERIFY(0 == backingStore(parent1)); + + parent2.hide(); + WAIT_AND_VERIFY(0 == backingStore(parent2)); + } } #undef WAIT_AND_VERIFY -- cgit v0.12 From cb8d2dcc70846ccd9384a8b94b2a80821c0eb285 Mon Sep 17 00:00:00 2001 From: Gareth Stockwell Date: Tue, 10 Aug 2010 16:34:19 +0100 Subject: Replaced backing store reference count with list of visible widgets Previously, the following sequence: 1. Widget is hidden 2. Widget partially revealed 3. Widget fully revealed resulted in the reference count of the backing store owned by the widget's window() being incremented twice. This patch replaces the simple reference count with a QSet which stores pointers to the native widgets which are descendents of the backing store owner, and which are currently visible. The sequence above therefore results in just a single insertion at step (2), with step (3) having no effect on the backing store. The QRefCountedWidgetBackingStore class has been renamed QWidgetBackingStoreTracker to better reflect its purpose. Task-number: QTBUG-12800 Task-number: QTBUG-12817 Reviewed-by: Jason Barron --- src/gui/kernel/qapplication_s60.cpp | 11 +++---- src/gui/kernel/qwidget.cpp | 61 +++++++++++++++++++++++++++---------- src/gui/kernel/qwidget_p.h | 17 ++++++----- 3 files changed, 58 insertions(+), 31 deletions(-) diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 559bb6a..df93bc5 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -1926,27 +1926,24 @@ int QApplicationPrivate::symbianProcessWsEvent(const QSymbianEvent *symbianEvent QWidget *const window = w->window(); if (!window->d_func()->maybeTopData()) break; - QRefCountedWidgetBackingStore &backingStore = window->d_func()->maybeTopData()->backingStore; + QWidgetBackingStoreTracker &backingStore = window->d_func()->maybeTopData()->backingStore; if (visChangedEvent->iFlags & TWsVisibilityChangedEvent::ENotVisible) { #ifdef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS S60->wsSession().SendEffectCommand(ETfxCmdDeallocateLayer); #endif - // Decrement backing store reference count - backingStore.deref(); + backingStore.unregisterWidget(w); // In order to ensure that any resources used by the window surface // are immediately freed, we flush the WSERV command buffer. S60->wsSession().Flush(); } else if (visChangedEvent->iFlags & TWsVisibilityChangedEvent::EPartiallyVisible) { if (backingStore.data()) { - // Increment backing store reference count - backingStore.ref(); + backingStore.registerWidget(w); } else { #ifdef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS S60->wsSession().SendEffectCommand(ETfxCmdRestoreLayer); #endif - // Create backing store with an initial reference count of 1 backingStore.create(window); - backingStore.ref(); + backingStore.registerWidget(w); w->d_func()->invalidateBuffer(w->rect()); w->repaint(); } diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index aaa29a1..dad4848 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -162,47 +162,76 @@ static inline bool hasBackingStoreSupport() extern bool qt_sendSpontaneousEvent(QObject*, QEvent*); // qapplication.cpp extern QDesktopWidget *qt_desktopWidget; // qapplication.cpp +/*! + \internal + \class QWidgetBackingStoreTracker + \brief Class which allows tracking of which widgets are using a given backing store -QRefCountedWidgetBackingStore::QRefCountedWidgetBackingStore() + QWidgetBackingStoreTracker is a thin wrapper around a QWidgetBackingStore pointer, + which maintains a list of the QWidgets which are currently using the backing + store. This list is modified via the registerWidget and unregisterWidget functions. + */ + +QWidgetBackingStoreTracker::QWidgetBackingStoreTracker() : m_ptr(0) - , m_count(0) { } -QRefCountedWidgetBackingStore::~QRefCountedWidgetBackingStore() +QWidgetBackingStoreTracker::~QWidgetBackingStoreTracker() { delete m_ptr; } -void QRefCountedWidgetBackingStore::create(QWidget *widget) +/*! + \internal + Destroy the contained QWidgetBackingStore, if not null, and clear the list of + widgets using the backing store, then create a new QWidgetBackingStore, providing + the QWidget. + */ +void QWidgetBackingStoreTracker::create(QWidget *widget) { destroy(); m_ptr = new QWidgetBackingStore(widget); - m_count = 0; } -void QRefCountedWidgetBackingStore::destroy() +/*! + \internal + Destroy the contained QWidgetBackingStore, if not null, and clear the list of + widgets using the backing store. + */ +void QWidgetBackingStoreTracker::destroy() { delete m_ptr; m_ptr = 0; - m_count = 0; + m_widgets.clear(); } -void QRefCountedWidgetBackingStore::ref() +/*! + \internal + Add the widget to the list of widgets currently using the backing store. + If the widget was already in the list, this function is a no-op. + */ +void QWidgetBackingStoreTracker::registerWidget(QWidget *w) { Q_ASSERT(m_ptr); - ++m_count; + Q_ASSERT(w->internalWinId()); + Q_ASSERT(qt_widget_private(w)->maybeBackingStore() == m_ptr); + m_widgets.insert(w); } -void QRefCountedWidgetBackingStore::deref() +/*! + \internal + Remove the widget from the list of widgets currently using the backing store. + If the widget was in the list, and removing it causes the list to be empty, + the backing store is deleted. + If the widget was not in the list, this function is a no-op. + */ +void QWidgetBackingStoreTracker::unregisterWidget(QWidget *w) { - if (m_count) { - Q_ASSERT(m_ptr); - if (0 == --m_count) { - delete m_ptr; - m_ptr = 0; - } + if (m_widgets.remove(w) && m_widgets.isEmpty()) { + delete m_ptr; + m_ptr = 0; } } diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h index 587d7fb..4a79dc7 100644 --- a/src/gui/kernel/qwidget_p.h +++ b/src/gui/kernel/qwidget_p.h @@ -110,17 +110,18 @@ class QWidgetItemV2; class QStyle; -class Q_AUTOTEST_EXPORT QRefCountedWidgetBackingStore +class Q_AUTOTEST_EXPORT QWidgetBackingStoreTracker { + public: - QRefCountedWidgetBackingStore(); - ~QRefCountedWidgetBackingStore(); + QWidgetBackingStoreTracker(); + ~QWidgetBackingStoreTracker(); void create(QWidget *tlw); void destroy(); - void ref(); - void deref(); + void registerWidget(QWidget *w); + void unregisterWidget(QWidget *w); inline QWidgetBackingStore* data() { @@ -143,11 +144,11 @@ public: } private: - Q_DISABLE_COPY(QRefCountedWidgetBackingStore) + Q_DISABLE_COPY(QWidgetBackingStoreTracker) private: QWidgetBackingStore* m_ptr; - int m_count; + QSet m_widgets; }; struct QTLWExtra { @@ -156,7 +157,7 @@ struct QTLWExtra { // Regular pointers (keep them together to avoid gaps on 64 bits architectures). QIcon *icon; // widget icon QPixmap *iconPixmap; - QRefCountedWidgetBackingStore backingStore; + QWidgetBackingStoreTracker backingStore; QWindowSurface *windowSurface; QPainter *sharedPainter; -- cgit v0.12 From ea85300f6456ef1bd9702296f3068edf0795736e Mon Sep 17 00:00:00 2001 From: Gareth Stockwell Date: Tue, 17 Aug 2010 16:05:01 +0100 Subject: Refactored handling of window visibility events on Symbian Task-number: QTBUG-12817 Reviewed-by: Jason Barron --- src/gui/kernel/qapplication_s60.cpp | 62 +++++++++++++++++++++---------------- src/gui/kernel/qt_s60_p.h | 1 + 2 files changed, 37 insertions(+), 26 deletions(-) diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index df93bc5..670bf34 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -135,6 +135,38 @@ void QS60Data::setStatusPaneAndButtonGroupVisibility(bool statusPaneVisible, boo } #endif +void QS60Data::controlVisibilityChanged(CCoeControl *control, bool visible) +{ + if (QWidgetPrivate::mapper && QWidgetPrivate::mapper->contains(control)) { + QWidget *const widget = QWidgetPrivate::mapper->value(control); + QWidget *const window = widget->window(); + if (QTLWExtra *topData = qt_widget_private(window)->maybeTopData()) { + QWidgetBackingStoreTracker &backingStore = topData->backingStore; + if (visible) { + if (backingStore.data()) { + backingStore.registerWidget(widget); + } else { +#ifdef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS + S60->wsSession().SendEffectCommand(ETfxCmdRestoreLayer); +#endif + backingStore.create(window); + backingStore.registerWidget(widget); + qt_widget_private(widget)->invalidateBuffer(widget->rect()); + widget->repaint(); + } + } else { +#ifdef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS + S60->wsSession().SendEffectCommand(ETfxCmdDeallocateLayer); +#endif + backingStore.unregisterWidget(widget); + // In order to ensure that any resources used by the window surface + // are immediately freed, we flush the WSERV command buffer. + S60->wsSession().Flush(); + } + } + } +} + bool qt_nograb() // application no-grab option { #if defined(QT_DEBUG) @@ -1922,32 +1954,10 @@ int QApplicationPrivate::symbianProcessWsEvent(const QSymbianEvent *symbianEvent if (callSymbianEventFilters(symbianEvent)) return 1; const TWsVisibilityChangedEvent *visChangedEvent = event->VisibilityChanged(); - QWidget *w = QWidgetPrivate::mapper->value(control); - QWidget *const window = w->window(); - if (!window->d_func()->maybeTopData()) - break; - QWidgetBackingStoreTracker &backingStore = window->d_func()->maybeTopData()->backingStore; - if (visChangedEvent->iFlags & TWsVisibilityChangedEvent::ENotVisible) { -#ifdef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS - S60->wsSession().SendEffectCommand(ETfxCmdDeallocateLayer); -#endif - backingStore.unregisterWidget(w); - // In order to ensure that any resources used by the window surface - // are immediately freed, we flush the WSERV command buffer. - S60->wsSession().Flush(); - } else if (visChangedEvent->iFlags & TWsVisibilityChangedEvent::EPartiallyVisible) { - if (backingStore.data()) { - backingStore.registerWidget(w); - } else { -#ifdef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS - S60->wsSession().SendEffectCommand(ETfxCmdRestoreLayer); -#endif - backingStore.create(window); - backingStore.registerWidget(w); - w->d_func()->invalidateBuffer(w->rect()); - w->repaint(); - } - } + if (visChangedEvent->iFlags & TWsVisibilityChangedEvent::ENotVisible) + S60->controlVisibilityChanged(control, false); + else if (visChangedEvent->iFlags & TWsVisibilityChangedEvent::EPartiallyVisible) + S60->controlVisibilityChanged(control, true); return 1; } break; diff --git a/src/gui/kernel/qt_s60_p.h b/src/gui/kernel/qt_s60_p.h index a18ea07..ad6a99a 100644 --- a/src/gui/kernel/qt_s60_p.h +++ b/src/gui/kernel/qt_s60_p.h @@ -164,6 +164,7 @@ public: static inline CEikButtonGroupContainer* buttonGroupContainer(); static void setStatusPaneAndButtonGroupVisibility(bool statusPaneVisible, bool buttonGroupVisible); #endif + static void controlVisibilityChanged(CCoeControl *control, bool visible); #ifdef Q_OS_SYMBIAN TTrapHandler *s60InstalledTrapHandler; -- cgit v0.12 From 3ae514c6cd55cb0f63eea13c9d23593db38beee8 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Wed, 18 Aug 2010 11:37:05 +0200 Subject: unbreak qmake autotest ok, that was a rather obvious braindamage ... :} --- tests/auto/qmake/tst_qmake.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/auto/qmake/tst_qmake.cpp b/tests/auto/qmake/tst_qmake.cpp index 825e49b..1a3f843 100644 --- a/tests/auto/qmake/tst_qmake.cpp +++ b/tests/auto/qmake/tst_qmake.cpp @@ -482,14 +482,14 @@ void tst_qmake::substitutes() { QString workDir = base_path + "/testdata/substitutes"; QVERIFY( test_compiler.qmake( workDir, "test" )); - QVERIFY( test_compiler.exists( workDir, "test", Exe, "1.0.0" )); - //QVERIFY( test_compiler.exists( workDir, "sub/test2", Exe, "1.0.0" )); + QVERIFY( test_compiler.exists( workDir, "test", Plain, "" )); + //QVERIFY( test_compiler.exists( workDir, "sub/test2", Plain, "" )); QVERIFY( test_compiler.makeDistClean( workDir )); QString buildDir = base_path + "/testdata/substitutes_build"; QVERIFY( test_compiler.qmake( workDir, "test", buildDir )); - QVERIFY( test_compiler.exists( buildDir, "test", Exe, "1.0.0" )); - //QVERIFY( test_compiler.exists( buildDir, "sub/test2", Exe, "1.0.0" )); + QVERIFY( test_compiler.exists( buildDir, "test", Plain, "" )); + //QVERIFY( test_compiler.exists( buildDir, "sub/test2", Plain, "" )); QVERIFY( test_compiler.makeDistClean( buildDir )); } -- cgit v0.12 From 411525a29e1d98c5e2a7052307bcd9e386710f26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 18 Aug 2010 11:48:39 +0200 Subject: Lighthouse:Only native children uses setParent --- src/gui/kernel/qwidget_qpa.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/gui/kernel/qwidget_qpa.cpp b/src/gui/kernel/qwidget_qpa.cpp index e11f1fc..b3599bd 100644 --- a/src/gui/kernel/qwidget_qpa.cpp +++ b/src/gui/kernel/qwidget_qpa.cpp @@ -109,9 +109,11 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO q_createNativeChildrenAndSetParent(q->platformWindow(),q); //if we we have a parent, then set correct parent; - if (QWidget *nativeParent = q->nativeParentWidget()) { - if (nativeParent->platformWindow()) { - platformWindow->setParent(nativeParent->platformWindow()); + if (!q->isWindow()) { + if (QWidget *nativeParent = q->nativeParentWidget()) { + if (nativeParent->platformWindow()) { + platformWindow->setParent(nativeParent->platformWindow()); + } } } -- cgit v0.12 From 3e4f85dbbdb8b8a62e33f8680b0cc87ce2ed9e7e Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Wed, 18 Aug 2010 10:00:48 +0200 Subject: respect the layout direction in the default text option This fixes a regression against 4.6 where setting the default layout direction for rich text got ignored Task-number: QT-3566 Reviewed-by: Jiang Jiang --- src/gui/text/qtextobject.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/gui/text/qtextobject.cpp b/src/gui/text/qtextobject.cpp index 5fb3384..d25fb05 100644 --- a/src/gui/text/qtextobject.cpp +++ b/src/gui/text/qtextobject.cpp @@ -1156,6 +1156,10 @@ Qt::LayoutDirection QTextBlock::textDirection() const if (dir != Qt::LayoutDirectionAuto) return dir; + dir = p->defaultTextOption.textDirection(); + if (dir != Qt::LayoutDirectionAuto) + return dir; + const QString buffer = p->buffer(); const int pos = position(); -- cgit v0.12 From bc1c472967c78579178cf7e98ab999842fee3102 Mon Sep 17 00:00:00 2001 From: Gareth Stockwell Date: Wed, 11 Aug 2010 12:58:29 +0100 Subject: Ensure native window is considered invisible when it gets destroyed The lifetime of the backing store depends, on Symbian, on the visibility of the native windows which are rendering from it. Specifically, once all such windows (i.e. the TLW window and those of any native widget descendents) have become invisible, the backing store is deleted. During re-parenting of a visible native child widget from parent1 to parent2, the following events occur: 1. QWidget::hide() is called on the child 2. The child widget's native control is deleted 3. A new native control is created, with its parent set as parent2->window()->effectiveWinId() Because there is no yield to the event loop between (1) and (2), the application does not receive a 'window hidden' notification as a result of the call to hide(). This means that the child widget is not removed from the list of visible widgets held in the backing store of parent1->window(). This patch ensures that the child is removed from this list during between steps (1) and (2). Task-number: QTBUG-12406 Task-number: QTBUG-12817 Reviewed-by: Jason Barron --- src/gui/kernel/qwidget_s60.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp index 56349ad..319f330 100644 --- a/src/gui/kernel/qwidget_s60.cpp +++ b/src/gui/kernel/qwidget_s60.cpp @@ -684,6 +684,12 @@ void QWidgetPrivate::setParent_sys(QWidget *parent, Qt::WindowFlags f) QSymbianControl *old_winid = static_cast(wasCreated ? data.winid : 0); if ((q->windowType() == Qt::Desktop)) old_winid = 0; + + // old_winid may not have received a 'not visible' visibility + // changed event before being destroyed; make sure that it is + // removed from the backing store's list of visible windows. + S60->controlVisibilityChanged(old_winid, false); + setWinId(0); // hide and reparent our own window away. Otherwise we might get -- cgit v0.12 From 0129e6e48613378a1a5548b2744ec7f9ae0d9961 Mon Sep 17 00:00:00 2001 From: Gareth Stockwell Date: Tue, 17 Aug 2010 16:08:02 +0100 Subject: Removed QEXPECT_FAIL macros for test case which now passes Task-number: QTBUG-12406 Reviewed-by: Jason Barron --- tests/auto/qwidget/tst_qwidget.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/auto/qwidget/tst_qwidget.cpp b/tests/auto/qwidget/tst_qwidget.cpp index ba0be3e..ef05b91 100644 --- a/tests/auto/qwidget/tst_qwidget.cpp +++ b/tests/auto/qwidget/tst_qwidget.cpp @@ -9742,7 +9742,6 @@ void tst_QWidget::destroyBackingStoreWhenHidden() QVERIFY(0 != backingStore(child)); // Parent is obscured, therefore its backing store should be destroyed - QEXPECT_FAIL("", "QTBUG-12406", Continue); QVERIFY(0 == backingStore(parent)); // Disable full screen -- cgit v0.12 From bc0328e334f456c789a18eb254af4427ea730187 Mon Sep 17 00:00:00 2001 From: Martin Smith Date: Wed, 18 Aug 2010 13:31:55 +0200 Subject: qdoc: Reorganized the QML elements table to be a dictionary... ...and a set of functional group pages. --- tools/qdoc3/htmlgenerator.cpp | 107 +++++++++++++++++++++++++++++------------- tools/qdoc3/node.cpp | 23 ++++++++- 2 files changed, 95 insertions(+), 35 deletions(-) diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index 50f8b56..8215ddc 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -4422,57 +4422,98 @@ bool HtmlGenerator::generatePageElement(QXmlStreamWriter& writer, return true; if (node->access() == Node::Private) return false; - if (!node->isInnerNode()) - return false; + QString t; + QString url = PageGenerator::fileName(node); QString title; QString rawTitle; QString fullTitle; - const InnerNode* inner = static_cast(node); - - writer.writeStartElement("page"); + QStringList pageWords; QXmlStreamAttributes attributes; - QString t; + + writer.writeStartElement("page"); 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"; + + if (node->isInnerNode()) { + const InnerNode* inner = static_cast(node); + switch (node->type()) { + case Node::Fake: + { + const FakeNode* fake = static_cast(node); + title = fake->fullTitle(); + pageWords << title; + break; + } + case Node::Class: + { + title = node->name() + " Class Reference"; + pageWords << node->name() << "class" << "reference"; + break; + } + case Node::Namespace: + { + rawTitle = marker->plainName(inner); + fullTitle = marker->plainFullName(inner); + title = rawTitle + " Namespace Reference"; + pageWords << rawTitle << "namespace" << "reference"; + break; + } + default: + title = node->name(); + pageWords << title; break; } - case Node::Namespace: - { - rawTitle = marker->plainName(inner); - fullTitle = marker->plainFullName(inner); - title = rawTitle + " Namespace Reference"; + + if (!inner->pageKeywords().isEmpty()) + pageWords << inner->pageKeywords(); + } + else { + switch (node->type()) { + case Node::Enum: + { + title = node->name() + " Enum Reference"; + pageWords << node->name() << "enum" << "type"; + url += "#" + node->name() + "-enum"; + break; + } + case Node::Function: + { + title = node->name() + " Function Reference"; + pageWords << node->name() << "function"; + url += "#" + node->name(); + break; + } + case Node::Property: + { + title = node->name() + " Property Reference"; + pageWords << node->name() << "property"; + url += "#" + node->name() + "-prop"; + break; + } + case Node::Typedef: + { + title = node->name() + " Type Reference"; + pageWords << node->name() << "typedef" << "type"; + url += "#" + node->name(); + break; + } + default: + title = node->name(); + pageWords << title; 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.writeCharacters(pageWords.join(" ")); + writer.writeEndElement(); writer.writeStartElement("pageTitle"); writer.writeCharacters(title); writer.writeEndElement(); writer.writeStartElement("pageUrl"); - writer.writeCharacters(PageGenerator::fileName(node)); + writer.writeCharacters(url); writer.writeEndElement(); writer.writeStartElement("pageType"); switch (node->pageType()) { diff --git a/tools/qdoc3/node.cpp b/tools/qdoc3/node.cpp index 259641e..41f90d5 100644 --- a/tools/qdoc3/node.cpp +++ b/tools/qdoc3/node.cpp @@ -652,8 +652,14 @@ NodeList InnerNode::overloads(const QString &funcName) const InnerNode::InnerNode(Type type, InnerNode *parent, const QString& name) : Node(type, parent, name) { - if (type == Class) + switch (type) { + case Class: + case Namespace: setPageType(ApiPage); + break; + default: + break; + } } /*! @@ -845,6 +851,19 @@ bool LeafNode::isInnerNode() const LeafNode::LeafNode(Type type, InnerNode *parent, const QString& name) : Node(type, parent, name) { + switch (type) { + case Enum: + case Function: + case Typedef: + case Variable: + case QmlProperty: + case QmlSignal: + case QmlMethod: + setPageType(ApiPage); + break; + default: + break; + } } /*! @@ -1600,7 +1619,7 @@ QmlPropertyNode::QmlPropertyNode(QmlPropGroupNode *parent, des(Trool_Default), att(attached) { - // nothing. + setPageType(ApiPage); } /*! -- cgit v0.12 From ccb77caba466fe0e4d28a809129513cefdbd5575 Mon Sep 17 00:00:00 2001 From: Morten Engvoldsen Date: Wed, 18 Aug 2010 13:37:21 +0200 Subject: Doc: Fixing overlapping text in header list --- doc/src/template/style/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/template/style/style.css b/doc/src/template/style/style.css index 190c60a..6f2bdce 100755 --- a/doc/src/template/style/style.css +++ b/doc/src/template/style/style.css @@ -388,9 +388,9 @@ .shortCut-topleft-inactive { padding-left: 3px; + padding-right: 3px; background: transparent url( ../images/sprites-combined.png) no-repeat 0px -58px; height: 20px; - width: 47px; } .shortCut-topleft-inactive span { -- cgit v0.12 From 74d519f87e804b624ac76337fe2905d512d363fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 18 Aug 2010 14:22:09 +0200 Subject: Lighthouse: don't force sending key events to the TLW --- src/gui/kernel/qapplication_qpa.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/gui/kernel/qapplication_qpa.cpp b/src/gui/kernel/qapplication_qpa.cpp index b89e81d..e5b5396 100644 --- a/src/gui/kernel/qapplication_qpa.cpp +++ b/src/gui/kernel/qapplication_qpa.cpp @@ -802,9 +802,6 @@ void QApplicationPrivate::processKeyEvent(QWindowSystemInterfacePrivate::KeyEven if (app_do_modal && !qt_try_modal(focusW, e->keyType)) return; - if (!focusW->isWindow()) - focusW = focusW->window(); - modifiers = e->modifiers; QKeyEvent ev(e->keyType, e->key, e->modifiers, e->unicode, e->repeat, e->repeatCount); QApplication::sendSpontaneousEvent(focusW, &ev); -- cgit v0.12 From 3014b427aa8700890f9bd8ea2a0300fc152bf3d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Wed, 18 Aug 2010 17:06:19 +0200 Subject: Revert "Outline / fill inconsistency in X11 paint engine." This reverts commit ff405f5623d7ed18c881c097368e3e9afd2e9443. Reviewed-by: Trond --- src/gui/painting/qpaintengine_x11.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/painting/qpaintengine_x11.cpp b/src/gui/painting/qpaintengine_x11.cpp index 5307142..e521e01 100644 --- a/src/gui/painting/qpaintengine_x11.cpp +++ b/src/gui/painting/qpaintengine_x11.cpp @@ -1516,8 +1516,8 @@ void QX11PaintEnginePrivate::fillPolygon_translated(const QPointF *polygonPoints for (int i = 0; i < pointCount; ++i) { translated_points[i] = polygonPoints[i] + offset; - translated_points[i].rx() = qFloor(translated_points[i].x()) + offs; - translated_points[i].ry() = qFloor(translated_points[i].y()) + offs; + translated_points[i].rx() = qRound(translated_points[i].x()) + offs; + translated_points[i].ry() = qRound(translated_points[i].y()) + offs; } fillPolygon_dev(translated_points.data(), pointCount, gcMode, mode); @@ -1754,8 +1754,8 @@ void QX11PaintEnginePrivate::fillPath(const QPainterPath &path, QX11PaintEngineP for (int j = 0; j < polys.at(i).size(); ++j) { translated_points[j] = polys.at(i).at(j); if (!X11->use_xrender || !(render_hints & QPainter::Antialiasing)) { - translated_points[j].rx() = qFloor(translated_points[j].rx() + aliasedCoordinateDelta) + offs; - translated_points[j].ry() = qFloor(translated_points[j].ry() + aliasedCoordinateDelta) + offs; + translated_points[j].rx() = qRound(translated_points[j].rx() + aliasedCoordinateDelta) + offs; + translated_points[j].ry() = qRound(translated_points[j].ry() + aliasedCoordinateDelta) + offs; } } -- cgit v0.12 From 041a68007413a20a9a9c97d0f2f04f9e03428f67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Wed, 18 Aug 2010 17:17:15 +0200 Subject: Revert "Fix the rendering of lines with the X11 paint engine" This reverts commit ebbab30af417dfbf3df47dec15c0e2f8d6a30fa6, which broke fill / outline consistency, and when trying to fix that by rounding the fill the same way that broke rendering in Creator. Unfortunately the X11 paint engine is too sensitive to changes, there have already been tons of patches to make it as consistent as possible. It's simply not possible to get the same rounding for both fill and outlines and at the same time have consistency between fill and outline (no holes or fill outside the outline), while using the integer based Xlib rendering API. Hopefully in 4.8 we'll switch to raster and the X11 paint engine will be a legacy. Reviewed-by: Trond --- src/gui/painting/qpaintengine_x11.cpp | 22 ++++++------ tests/auto/qpainter/tst_qpainter.cpp | 65 ----------------------------------- 2 files changed, 12 insertions(+), 75 deletions(-) diff --git a/src/gui/painting/qpaintengine_x11.cpp b/src/gui/painting/qpaintengine_x11.cpp index e521e01..910b2df 100644 --- a/src/gui/painting/qpaintengine_x11.cpp +++ b/src/gui/painting/qpaintengine_x11.cpp @@ -696,10 +696,11 @@ void QX11PaintEngine::drawLines(const QLine *lines, int lineCount) linef = d->matrix.map(QLineF(lines[i])); } if (clipLine(&linef, d->polygonClipper.boundingRect())) { - int x1 = qFloor(linef.x1() + aliasedCoordinateDelta); - int y1 = qFloor(linef.y1() + aliasedCoordinateDelta); - int x2 = qFloor(linef.x2() + aliasedCoordinateDelta); - int y2 = qFloor(linef.y2() + aliasedCoordinateDelta); + int x1 = qRound(linef.x1() + aliasedCoordinateDelta); + int y1 = qRound(linef.y1() + aliasedCoordinateDelta); + int x2 = qRound(linef.x2() + aliasedCoordinateDelta); + int y2 = qRound(linef.y2() + aliasedCoordinateDelta); + XDrawLine(d->dpy, d->hd, d->gc, x1, y1, x2, y2); } } @@ -729,10 +730,11 @@ void QX11PaintEngine::drawLines(const QLineF *lines, int lineCount) for (int i = 0; i < lineCount; ++i) { QLineF linef = d->matrix.map(lines[i]); if (clipLine(&linef, d->polygonClipper.boundingRect())) { - int x1 = qFloor(linef.x1() + aliasedCoordinateDelta); - int y1 = qFloor(linef.y1() + aliasedCoordinateDelta); - int x2 = qFloor(linef.x2() + aliasedCoordinateDelta); - int y2 = qFloor(linef.y2() + aliasedCoordinateDelta); + int x1 = qRound(linef.x1() + aliasedCoordinateDelta); + int y1 = qRound(linef.y1() + aliasedCoordinateDelta); + int x2 = qRound(linef.x2() + aliasedCoordinateDelta); + int y2 = qRound(linef.y2() + aliasedCoordinateDelta); + XDrawLine(d->dpy, d->hd, d->gc, x1, y1, x2, y2); } } @@ -1688,8 +1690,8 @@ void QX11PaintEnginePrivate::strokePolygon_dev(const QPointF *polygonPoints, int if (clippedCount > 0) { QVarLengthArray xpoints(clippedCount); for (int i = 0; i < clippedCount; ++i) { - xpoints[i].x = qFloor(clippedPoints[i].x + aliasedCoordinateDelta); - xpoints[i].y = qFloor(clippedPoints[i].y + aliasedCoordinateDelta); + xpoints[i].x = qRound(clippedPoints[i].x + aliasedCoordinateDelta); + xpoints[i].y = qRound(clippedPoints[i].y + aliasedCoordinateDelta); } uint numberPoints = qMin(clippedCount, xlibMaxLinePoints); XPoint *pts = xpoints.data(); diff --git a/tests/auto/qpainter/tst_qpainter.cpp b/tests/auto/qpainter/tst_qpainter.cpp index 2cbb9b2..f358681 100644 --- a/tests/auto/qpainter/tst_qpainter.cpp +++ b/tests/auto/qpainter/tst_qpainter.cpp @@ -118,12 +118,10 @@ private slots: void drawLine_task190634(); void drawLine_task229459(); void drawLine_task234891(); - void drawHorizontalLineF(); void drawRect_data() { fillData(); } void drawRect(); void drawRect2(); - void drawRectFHorizontalLine(); void fillRect(); void fillRect2(); @@ -253,7 +251,6 @@ private slots: void setPenColorOnPixmap(); void QTBUG5939_attachPainterPrivate(); - void drawHorizontalLine(); private: void fillData(); @@ -1221,26 +1218,6 @@ void tst_QPainter::drawLine_task234891() QCOMPARE(expected, img); } -void tst_QPainter::drawHorizontalLineF() -{ - QPixmap pixmap(100, 3); - pixmap.fill(); - - { - QPainter painter(&pixmap); - painter.drawLine(QLineF(1.5f, 1.5f, 98.5f, 1.5f)); - } - - QImage refImage(100, 3, QImage::Format_ARGB32); - refImage.fill(0xFFFFFFFF); - { - QPainter painter(&refImage); - painter.drawLine(QLineF(1.5f, 1.5f, 98.5f, 1.5f)); - } - - QCOMPARE(pixmap.toImage().convertToFormat(QImage::Format_ARGB32), refImage); -} - void tst_QPainter::drawLine_task216948() { QImage img(1, 10, QImage::Format_ARGB32_Premultiplied); @@ -1325,26 +1302,6 @@ void tst_QPainter::drawRect2() } } -void tst_QPainter::drawRectFHorizontalLine() -{ - QPixmap pixmap(100, 3); - pixmap.fill(); - - { - QPainter painter(&pixmap); - painter.drawRect(QRectF(1.5f, 1.5f, 98.5f, 1.5f)); - } - - QImage refImage(100, 3, QImage::Format_ARGB32); - refImage.fill(0xFFFFFFFF); - { - QPainter painter(&refImage); - painter.drawRect(QRectF(1.5f, 1.5f, 98.5f, 1.5f)); - } - - QCOMPARE(pixmap.toImage().convertToFormat(QImage::Format_ARGB32), refImage); -} - void tst_QPainter::fillRect() { QImage image(100, 100, QImage::Format_ARGB32_Premultiplied); @@ -4565,28 +4522,6 @@ void tst_QPainter::QTBUG5939_attachPainterPrivate() QCOMPARE(widget->deviceTransform, proxy->deviceTransform); } -void tst_QPainter::drawHorizontalLine() -{ - QPixmap pixmap(100, 3); - pixmap.fill(); - - { - QPainter painter(&pixmap); - painter.translate(0.3, 0.3); - painter.drawLine(QLine(1, 1, 99, 1)); - } - - QImage refImage(100, 3, QImage::Format_ARGB32); - refImage.fill(0xFFFFFFFF); - { - QPainter painter(&refImage); - painter.translate(0.3, 0.3); - painter.drawLine(QLine(1, 1, 99, 1)); - } - - QCOMPARE(pixmap.toImage().convertToFormat(QImage::Format_ARGB32), refImage); -} - QTEST_MAIN(tst_QPainter) #include "tst_qpainter.moc" -- cgit v0.12 From 8e7fb343372acd0bc5fe04db7a5c5542541d4538 Mon Sep 17 00:00:00 2001 From: Carlos Manuel Duclos Vergara Date: Wed, 11 Aug 2010 15:47:40 +0200 Subject: Crash in QX11PaintEngine::drawPixmap We receive a pixmap as a const reference and then we convert it to an X11 pixmap. This conversion could fail for many reasons, however we were not looking at the result of this conversion. This patch was contributed by Christoph Feck from KDE. Task-number: QTBUG-12826 Reviewed-by: Samuel --- src/gui/painting/qpaintengine_x11.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/painting/qpaintengine_x11.cpp b/src/gui/painting/qpaintengine_x11.cpp index 910b2df..fecf25f 100644 --- a/src/gui/painting/qpaintengine_x11.cpp +++ b/src/gui/painting/qpaintengine_x11.cpp @@ -1916,6 +1916,8 @@ void QX11PaintEngine::drawPixmap(const QRectF &r, const QPixmap &px, const QRect int sh = qRound(sr.height()); QPixmap pixmap = qt_toX11Pixmap(px); + if(pixmap.isNull()) + return; if ((d->xinfo && d->xinfo->screen() != pixmap.x11Info().screen()) || (pixmap.x11Info().screen() != DefaultScreen(X11->display))) { -- cgit v0.12 From 8dd8db250d92521fda619bdcf3e1c859b37b2da0 Mon Sep 17 00:00:00 2001 From: Carlos Manuel Duclos Vergara Date: Wed, 18 Aug 2010 17:59:04 +0200 Subject: Crash in QWidgetPrivate::init on QApplication::quit() using a modal dialog on Mac The problem was the order of deletion in the destructor. To autotest this I create an application, start a modal dialog and then quit the application. The fix was contributed by a customer. Task-number: QTBUG-12673 Reviewed-by: Olivier Goffart --- src/gui/kernel/qapplication.cpp | 24 ++++++++++++------------ tests/auto/qapplication/modal/base.cpp | 21 +++++++++++++++++++++ tests/auto/qapplication/modal/base.h | 23 +++++++++++++++++++++++ tests/auto/qapplication/modal/main.cpp | 11 +++++++++++ tests/auto/qapplication/modal/modal.pro | 8 ++++++++ tests/auto/qapplication/qapplication.pro | 1 + tests/auto/qapplication/tst_qapplication.cpp | 18 ++++++++++++++++++ 7 files changed, 94 insertions(+), 12 deletions(-) create mode 100644 tests/auto/qapplication/modal/base.cpp create mode 100644 tests/auto/qapplication/modal/base.h create mode 100644 tests/auto/qapplication/modal/main.cpp create mode 100644 tests/auto/qapplication/modal/modal.pro diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index e164baf..3d3a749 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -1055,6 +1055,18 @@ QApplication::~QApplication() QApplicationPrivate::is_app_closing = true; QApplicationPrivate::is_app_running = false; + // delete all widgets + if (QWidgetPrivate::allWidgets) { + QWidgetSet *mySet = QWidgetPrivate::allWidgets; + QWidgetPrivate::allWidgets = 0; + for (QWidgetSet::ConstIterator it = mySet->constBegin(); it != mySet->constEnd(); ++it) { + register QWidget *w = *it; + if (!w->parent()) // window + w->destroy(true, true); + } + delete mySet; + } + delete qt_desktopWidget; qt_desktopWidget = 0; @@ -1075,18 +1087,6 @@ QApplication::~QApplication() delete QWidgetPrivate::mapper; QWidgetPrivate::mapper = 0; - // delete all widgets - if (QWidgetPrivate::allWidgets) { - QWidgetSet *mySet = QWidgetPrivate::allWidgets; - QWidgetPrivate::allWidgets = 0; - for (QWidgetSet::ConstIterator it = mySet->constBegin(); it != mySet->constEnd(); ++it) { - register QWidget *w = *it; - if (!w->parent()) // window - w->destroy(true, true); - } - delete mySet; - } - delete QApplicationPrivate::app_pal; QApplicationPrivate::app_pal = 0; delete QApplicationPrivate::sys_pal; diff --git a/tests/auto/qapplication/modal/base.cpp b/tests/auto/qapplication/modal/base.cpp new file mode 100644 index 0000000..d3a7de6 --- /dev/null +++ b/tests/auto/qapplication/modal/base.cpp @@ -0,0 +1,21 @@ +#include "base.h" + +base::base(QWidget *parent) : + QWidget(parent) +{ + m_timer = new QTimer(this); + m_modalStarted = false; + m_timer->setSingleShot(false); + connect(m_timer, SIGNAL(timeout()), this, SLOT(periodicTimer())); + m_timer->start(5000); +} + +void base::periodicTimer() +{ + if(m_modalStarted) + exit(0); + m_modalDialog = new QDialog(this); + m_modalDialog->setModal(true); + m_modalDialog->show(); + m_modalStarted = true; +} diff --git a/tests/auto/qapplication/modal/base.h b/tests/auto/qapplication/modal/base.h new file mode 100644 index 0000000..ebf1198 --- /dev/null +++ b/tests/auto/qapplication/modal/base.h @@ -0,0 +1,23 @@ +#ifndef BASE_H +#define BASE_H + +#include +#include +#include + +class base : public QWidget +{ +Q_OBJECT + QTimer *m_timer; + bool m_modalStarted; + QDialog *m_modalDialog; +public: + explicit base(QWidget *parent = 0); + +signals: + +public slots: + void periodicTimer(); +}; + +#endif // BASE_H diff --git a/tests/auto/qapplication/modal/main.cpp b/tests/auto/qapplication/modal/main.cpp new file mode 100644 index 0000000..e1d39cf --- /dev/null +++ b/tests/auto/qapplication/modal/main.cpp @@ -0,0 +1,11 @@ +#include + +#include +#include "base.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + base *b = new base(); + return app.exec(); +} diff --git a/tests/auto/qapplication/modal/modal.pro b/tests/auto/qapplication/modal/modal.pro new file mode 100644 index 0000000..836f6ff --- /dev/null +++ b/tests/auto/qapplication/modal/modal.pro @@ -0,0 +1,8 @@ +TEMPLATE = app +TARGET = +DEPENDPATH += . +INCLUDEPATH += . +SOURCES += main.cpp \ + base.cpp +DESTDIR = ./ +HEADERS += base.h diff --git a/tests/auto/qapplication/qapplication.pro b/tests/auto/qapplication/qapplication.pro index 7814ad3..becc6c6 100644 --- a/tests/auto/qapplication/qapplication.pro +++ b/tests/auto/qapplication/qapplication.pro @@ -1,6 +1,7 @@ TEMPLATE = subdirs SUBDIRS = test \ desktopsettingsaware \ + modal \ wincmdline diff --git a/tests/auto/qapplication/tst_qapplication.cpp b/tests/auto/qapplication/tst_qapplication.cpp index 1a38070..91ae921 100644 --- a/tests/auto/qapplication/tst_qapplication.cpp +++ b/tests/auto/qapplication/tst_qapplication.cpp @@ -146,6 +146,7 @@ private slots: void symbianNeedForTraps(); void symbianLeaveThroughMain(); + void qtbug_12673(); }; class EventSpy : public QObject @@ -2239,6 +2240,23 @@ void tst_QApplication::symbianLeaveThroughMain() #endif } +void tst_QApplication::qtbug_12673() +{ +#ifdef Q_OS_SYMBIAN + QSKIP("This might not make sense in Symbian, but since I do not know how to test it I'll just skip it for now.", SkipAll); +#else + QProcess testProcess; + QStringList arguments; +#ifdef Q_OS_MAC + testProcess.start("modal/modal.app", arguments); +#else + testProcess.start("modal/modal", arguments); +#endif + QVERIFY(testProcess.waitForFinished(20000)); + QCOMPARE(testProcess.exitStatus(), QProcess::NormalExit); +#endif // Q_OS_SYMBIAN +} + //QTEST_APPLESS_MAIN(tst_QApplication) int main(int argc, char *argv[]) { -- cgit v0.12 From 0e443155c99a1ba9b990e7a2195132b2b8a1d36e Mon Sep 17 00:00:00 2001 From: Tuomas Suutari Date: Wed, 18 Aug 2010 12:41:24 +0200 Subject: QMake/Win32/MinGW: Fix ar script generating with absolute paths When QMake decides to use absolute path for some object file, this code used to leave the ADDMOD command out from the ar object script, which resulted in following errors from the issued "ar -M" command: Syntax error in archive script, line 2 Syntax error in archive script, line 3 etc... And the build failed in the linking phase, because the generated static library was empty. Fix this issue by prepending the file name with ADDMOD command even if the file path is absolute. Task-number: QTBUG-12959 Merge-request: 2451 Reviewed-by: Oswald Buddenhagen --- qmake/generators/win32/mingw_make.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp index 5685d6b..4717542 100644 --- a/qmake/generators/win32/mingw_make.cpp +++ b/qmake/generators/win32/mingw_make.cpp @@ -191,10 +191,7 @@ void createArObjectScriptFile(const QString &fileName, const QString &target, co QTextStream t(&file); t << "CREATE " << target << endl; for (QStringList::ConstIterator it = objList.constBegin(); it != objList.constEnd(); ++it) { - if (QDir::isRelativePath(*it)) - t << "ADDMOD " << *it << endl; - else - t << *it << endl; + t << "ADDMOD " << *it << endl; } t << "SAVE" << endl; t.flush(); -- cgit v0.12 From 4583ab15437c7744e8f08adafa1baccec238c1fa Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Wed, 18 Aug 2010 17:49:32 +0200 Subject: fix shadow builds with scratchbox seems it doesn't grok xargs -I. as some other unixes don't grok cp -s, we have two paths now ... Reviewed-by: joerg --- configure | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/configure b/configure index 7c3f9a3..bd69a0a 100755 --- a/configure +++ b/configure @@ -2414,10 +2414,15 @@ if [ "$OPT_SHADOW" = "yes" ]; then # Special case for mkspecs/features directory. # To be able to place .prf files into a shadow build directory, # we're creating links for files only. The directory structure is reproduced. - # A simple "cp -rs" doesn't work on Mac. :( rm -rf "$outpath/mkspecs/features" - find "$relpath/mkspecs/features" -type d | sed "s,^$relpath,$outpath," | xargs mkdir -p - find "$relpath/mkspecs/features" -type f | sed "s,^$relpath/,," | xargs -n 1 -I % ln -s "$relpath/%" "$outpath/%" + if [ "$UNAME_SYSTEM" = "Linux" ]; then + # This works with GNU coreutils, and is needed for ScratchBox + cp -rs "$relpath/mkspecs/features" "$outpath/mkspecs/features" + else + # A simple "cp -rs" doesn't work on Mac. :( + find "$relpath/mkspecs/features" -type d | sed "s,^$relpath,$outpath," | xargs mkdir -p + find "$relpath/mkspecs/features" -type f | sed "s,^$relpath/,," | xargs -n 1 -I % ln -s "$relpath/%" "$outpath/%" + fi # symlink the doc directory rm -rf "$outpath/doc" -- cgit v0.12 From 76d1c995e5bce542c5aa22e7bbf8a012fd5cb50e Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Wed, 18 Aug 2010 11:43:23 +0200 Subject: create missing output directories for substituted files it wasn't the fault of fileFixify() after all ... Reviewed-by: joerg --- qmake/generators/makefile.cpp | 1 + tests/auto/qmake/testdata/substitutes/test.pro | 3 +-- tests/auto/qmake/tst_qmake.cpp | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index 851e587..852471d 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -538,6 +538,7 @@ MakefileGenerator::init() continue; } } + mkdir(QFileInfo(out).absolutePath()); if(out.open(QFile::WriteOnly)) { v["QMAKE_INTERNAL_INCLUDED_FILES"].append(subs.at(i)); out.write(contents.toUtf8()); diff --git a/tests/auto/qmake/testdata/substitutes/test.pro b/tests/auto/qmake/testdata/substitutes/test.pro index 5bce312..ddad93f 100644 --- a/tests/auto/qmake/testdata/substitutes/test.pro +++ b/tests/auto/qmake/testdata/substitutes/test.pro @@ -1,2 +1 @@ -QMAKE_SUBSTITUTES += test.in -# doesn't work for the time being: sub/test2.in +QMAKE_SUBSTITUTES += test.in sub/test2.in diff --git a/tests/auto/qmake/tst_qmake.cpp b/tests/auto/qmake/tst_qmake.cpp index 1a3f843..060fa01 100644 --- a/tests/auto/qmake/tst_qmake.cpp +++ b/tests/auto/qmake/tst_qmake.cpp @@ -483,13 +483,13 @@ void tst_qmake::substitutes() QString workDir = base_path + "/testdata/substitutes"; QVERIFY( test_compiler.qmake( workDir, "test" )); QVERIFY( test_compiler.exists( workDir, "test", Plain, "" )); - //QVERIFY( test_compiler.exists( workDir, "sub/test2", Plain, "" )); + QVERIFY( test_compiler.exists( workDir, "sub/test2", Plain, "" )); QVERIFY( test_compiler.makeDistClean( workDir )); QString buildDir = base_path + "/testdata/substitutes_build"; QVERIFY( test_compiler.qmake( workDir, "test", buildDir )); QVERIFY( test_compiler.exists( buildDir, "test", Plain, "" )); - //QVERIFY( test_compiler.exists( buildDir, "sub/test2", Plain, "" )); + QVERIFY( test_compiler.exists( buildDir, "sub/test2", Plain, "" )); QVERIFY( test_compiler.makeDistClean( buildDir )); } -- cgit v0.12 From 2eba19cdaa859dc9b06eb12f2dea9da27b69ea74 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Wed, 18 Aug 2010 20:42:06 +0200 Subject: use intel linker and librarian with icc Reviewed-by: thiago Task-number: QTBUG-12937 --- mkspecs/win32-icc/qmake.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mkspecs/win32-icc/qmake.conf b/mkspecs/win32-icc/qmake.conf index 3ae18b6..2dd796d 100644 --- a/mkspecs/win32-icc/qmake.conf +++ b/mkspecs/win32-icc/qmake.conf @@ -50,7 +50,7 @@ QMAKE_RUN_CXX = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$obj $src QMAKE_RUN_CXX_IMP = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ $< QMAKE_RUN_CXX_IMP_BATCH = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ @<< -QMAKE_LINK = link +QMAKE_LINK = xilink QMAKE_LFLAGS = /NOLOGO QMAKE_LFLAGS_RELEASE = QMAKE_LFLAGS_DEBUG = /DEBUG @@ -72,7 +72,7 @@ QMAKE_UIC = $$[QT_INSTALL_BINS]\\uic.exe QMAKE_IDC = $$[QT_INSTALL_BINS]\\idc.exe QMAKE_IDL = midl -QMAKE_LIB = lib /NOLOGO +QMAKE_LIB = xilib /NOLOGO QMAKE_RC = rc QMAKE_ZIP = zip -r -9 -- cgit v0.12 From bf141a24864e48e997ea3b626ad25bf5b232c2fb Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Thu, 19 Aug 2010 08:19:41 +1000 Subject: Added license headers to new files. --- tests/auto/qapplication/modal/base.cpp | 41 ++++++++++++++++++++++++++++++++++ tests/auto/qapplication/modal/base.h | 41 ++++++++++++++++++++++++++++++++++ tests/auto/qapplication/modal/main.cpp | 41 ++++++++++++++++++++++++++++++++++ 3 files changed, 123 insertions(+) diff --git a/tests/auto/qapplication/modal/base.cpp b/tests/auto/qapplication/modal/base.cpp index d3a7de6..9022c36 100644 --- a/tests/auto/qapplication/modal/base.cpp +++ b/tests/auto/qapplication/modal/base.cpp @@ -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 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 "base.h" base::base(QWidget *parent) : diff --git a/tests/auto/qapplication/modal/base.h b/tests/auto/qapplication/modal/base.h index ebf1198..faa1765 100644 --- a/tests/auto/qapplication/modal/base.h +++ b/tests/auto/qapplication/modal/base.h @@ -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 test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #ifndef BASE_H #define BASE_H diff --git a/tests/auto/qapplication/modal/main.cpp b/tests/auto/qapplication/modal/main.cpp index e1d39cf..f9d8fb4 100644 --- a/tests/auto/qapplication/modal/main.cpp +++ b/tests/auto/qapplication/modal/main.cpp @@ -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 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 -- cgit v0.12 From 4d1f74c9c8f26e978f4c3487f2bd8a9af219167f Mon Sep 17 00:00:00 2001 From: Lorn Potter Date: Thu, 19 Aug 2010 14:34:30 +1000 Subject: cleanup and remove __FUNCTION__, which breaks build on solaris Task-number: QTBUG-12904 --- src/plugins/bearer/connman/qconnmanengine.cpp | 4 ---- .../bearer/connman/qconnmanservice_linux.cpp | 23 ++-------------------- 2 files changed, 2 insertions(+), 25 deletions(-) diff --git a/src/plugins/bearer/connman/qconnmanengine.cpp b/src/plugins/bearer/connman/qconnmanengine.cpp index 3b5ae86..341f7cd 100644 --- a/src/plugins/bearer/connman/qconnmanengine.cpp +++ b/src/plugins/bearer/connman/qconnmanengine.cpp @@ -328,7 +328,6 @@ QString QConnmanEngine::getServiceForNetwork(const QString &netPath) void QConnmanEngine::propertyChangedContext(const QString &path,const QString &item, const QDBusVariant &value) { Q_UNUSED(path); -// qDebug() << __FUNCTION__ << path << item << value.variant(); QMutexLocker locker(&mutex); if(item == "Services") { @@ -380,12 +379,10 @@ void QConnmanEngine::servicePropertyChangedContext(const QString &path,const QSt void QConnmanEngine::networkPropertyChangedContext(const QString &path,const QString &item, const QDBusVariant &value) { QMutexLocker locker(&mutex); -// qDebug() << __FUNCTION__ << path << item << value.variant(); } void QConnmanEngine::devicePropertyChangedContext(const QString &devpath,const QString &item,const QDBusVariant &value) { -// qDebug() << __FUNCTION__ << devpath << item << value.variant(); QMutexLocker locker(&mutex); if(item == "Networks") { @@ -429,7 +426,6 @@ void QConnmanEngine::devicePropertyChangedContext(const QString &devpath,const Q void QConnmanEngine::technologyPropertyChangedContext(const QString & path, const QString &item, const QDBusVariant &value) { -// qDebug() << __FUNCTION__ << path << item << value.variant(); if(item == "Devices") { QDBusArgument arg = qvariant_cast(value.variant()); QStringList list = qdbus_cast(arg); diff --git a/src/plugins/bearer/connman/qconnmanservice_linux.cpp b/src/plugins/bearer/connman/qconnmanservice_linux.cpp index b15589e..3722c43 100644 --- a/src/plugins/bearer/connman/qconnmanservice_linux.cpp +++ b/src/plugins/bearer/connman/qconnmanservice_linux.cpp @@ -481,9 +481,7 @@ QVariant QConnmanProfileInterface::getProperty(const QString &property) QVariantMap map = getProperties(); if (map.contains(property)) { var = map.value(property); - } else { - qDebug() <<__FUNCTION__<< "Could not find" << property; - } + } return var; } @@ -522,8 +520,6 @@ QConnmanServiceInterface::~QConnmanServiceInterface() void QConnmanServiceInterface::connectNotify(const char *signal) { -// qWarning() << __FUNCTION__ << signal << this->path(); - if (QLatin1String(signal) == SIGNAL(propertyChanged(QString,QDBusVariant))) { dbusConnection.connect(QLatin1String(CONNMAN_SERVICE), this->path(), @@ -569,9 +565,7 @@ QVariant QConnmanServiceInterface::getProperty(const QString &property) QVariantMap map = getProperties(); if (map.contains(property)) { var = map.value(property); - } else { -// qDebug() <<__FUNCTION__<< "Could not find" << property; - } + } return var; } @@ -1051,17 +1045,7 @@ QVariantMap QConnmanDeviceInterface::getProperties() bool QConnmanDeviceInterface::setProperty(const QString &name, const QDBusVariant &value) { - -// QList args; -#ifndef QT_NO_TEXTSTREAM - qWarning() << __FUNCTION__ << name << value.variant(); -#endif -// args << qVariantFromValue(name); -// args << qVariantFromValue(value); - QDBusMessage reply = this->call(QLatin1String("SetProperty"),name, qVariantFromValue(value)); -qWarning() << reply.errorMessage(); - return true; } @@ -1150,7 +1134,6 @@ bool QConnmanDeviceInterface::setEnabled(bool powered) << qVariantFromValue(QDBusVariant(powered)); QDBusMessage reply = this->callWithArgumentList(QDBus::AutoDetect,QLatin1String("SetProperty"),args); - qWarning() << reply.errorMessage() << reply.errorName(); return true; } @@ -1166,8 +1149,6 @@ QConnmanDBusHelper::~QConnmanDBusHelper() void QConnmanDBusHelper::propertyChanged(const QString &item, const QDBusVariant &var) { QDBusMessage msg = this->message(); -// qWarning() << sender(); - // qWarning() << msg.interface() << msg.path() << item << var.variant() <<"\n"; Q_EMIT propertyChangedContext(msg.path() ,item, var); } -- cgit v0.12