ginebra2/WebChromeContainerSnippet.cpp
changeset 0 1450b09d0cfd
child 3 0954f5dd2cd0
child 5 0f2326c2a325
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/WebChromeContainerSnippet.cpp	Tue May 04 12:39:35 2010 +0300
@@ -0,0 +1,105 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "WebChromeContainerSnippet.h"
+#include "WebChromeItem.h"
+#include "ChromeWidget.h"
+#include "ChromeRenderer.h"
+#include "ChromeSnippet.h"
+
+#include <QDebug>
+
+namespace GVA {
+
+  WebChromeContainerSnippet::WebChromeContainerSnippet(const QString & elementId, ChromeWidget * chrome, const QRectF& ownerArea, const QWebElement & element, QGraphicsWidget* gwidget)
+    : ChromeSnippet(elementId, chrome, gwidget, element),
+      m_ownerArea(ownerArea),
+      m_layoutHeight(0)
+  {
+    QGraphicsWidget * item = static_cast<QGraphicsWidget*> (widget());
+    //NB: maybe size should be fixed only in one direction?
+    item->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); 
+    //NB: add a method for setting owner area
+    //item->setPreferredSize(m_ownerArea.width(), m_ownerArea.height());
+    //Also resize in case item is not part of anchor layout
+    //item->resize(item->preferredSize());
+ 
+   //NB: Linear layout efaults to horizontal: handle vertical layouts too.   
+    m_layout = new QGraphicsLinearLayout();
+    m_layout->setContentsMargins(0,0,0,0);
+    m_layout->setSpacing(0);
+    
+    //Add a stretch element at the beginning.
+    m_layout->addStretch();
+    item->setLayout(m_layout);
+    //When chrome is resized owner areas for snippets may change
+    QObject::connect(m_chrome->renderer(), SIGNAL(chromeResized()), this, SLOT(updateOwnerArea()));
+  }
+
+  WebChromeContainerSnippet::~WebChromeContainerSnippet()
+  {
+    // delete m_layout;
+  }
+
+  void WebChromeContainerSnippet::positionChildren()
+  {
+    ; //Do nothing since the layout positions children automatically.
+  }
+
+  void WebChromeContainerSnippet::addChild(ChromeSnippet * child)
+  {
+    //Prevent layout from stretching the child widgets. NB: Revisit this to make configurable from chrome?
+    child->widget()->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
+    //child->widget()->setParentItem(this->widget()); // Shouldn't be needed, right?
+    m_layout->addItem(child->widget());
+    //Add a stretch after each element so the layout looks like this: |stretch|item|stretch|item . . . . stretch|item|
+    m_layout->addStretch();
+   
+    // If child is not a container itself, connect to its mouseEvent
+    WebChromeContainerSnippet * s = qobject_cast <WebChromeContainerSnippet * >(child);
+    if (!s ) {
+      //qDebug() << __PRETTY_FUNCTION__ << s  << child->elementId();
+      // Connect to mouse events of snippets
+      WebChromeItem * item = static_cast<WebChromeItem*> (child->widget());
+      connect(item, SIGNAL(mouseEvent(QEvent::Type)), this, SIGNAL(snippetMouseEvent(QEvent::Type)));
+    } 
+    qreal childHeight = child->widget()->size().height();
+    if(childHeight > m_layoutHeight){
+      m_layoutHeight = childHeight;
+      updateOwnerArea();
+    }
+  }
+
+  void WebChromeContainerSnippet:: updateOwnerArea()
+  {
+    QGraphicsWidget * item = static_cast<QGraphicsWidget*> (widget());
+    //Resize the item
+    m_ownerArea =  m_chrome->getSnippetRect(m_elementId);
+    item->setPreferredSize(m_ownerArea.width(), m_layoutHeight);
+    //Also resize in case item is not part of anchor layout
+    item->resize(item->preferredSize());
+  }
+
+  void WebChromeContainerSnippet::setLayoutHeight(int height){
+    if(m_layoutHeight != height){
+      m_layoutHeight = height;
+      updateOwnerArea();
+    }
+  }
+
+} // endof namespace GVA