--- a/ginebra2/ChromeDOM.cpp Wed Jun 23 17:59:43 2010 +0300
+++ b/ginebra2/ChromeDOM.cpp Tue Jul 06 14:03:49 2010 +0300
@@ -16,6 +16,7 @@
* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
*
* Description:
+*
*
*/
@@ -120,121 +121,102 @@
}
return handlers;
}
+
+//TODO: Get rid of rectangle argument to snippets. This is redundant with the element argument!!
+//TODO: Rewrite using function table
+
+ ChromeSnippet * ChromeDOM::nativeSnippetForClassName(const QString & className, const QString elementId, QWebElement element)
+ {
+ QRectF rect = element.geometry();
+
+ if (className == "ContentToolbar") {
+ return ContentToolbarSnippet::instance(elementId, m_chrome, element);
+ }
+ else if (className == "WindowToolbar") {
+ return WindowToolbarSnippet::instance(elementId, m_chrome, element);
+ }
+ else if (className == "RecentUrlToolbar") {
+ return RecentUrlToolbarSnippet::instance(elementId, m_chrome, element);
+ }
+ else if (className == "BookmarksToolbar") {
+ return BookmarksToolbarSnippet::instance(elementId, m_chrome, element);
+ }
+ else if (className == "SettingsToolbar") {
+ return SettingsToolbarSnippet::instance(elementId, m_chrome, element);
+ }
+ else if (className == "MostVisitedPagesWidget") {
+ return MostVisitedSnippet::instance(elementId, m_chrome, element);
+ }
+ else if (className == "ActionButton") {
+ return ActionButtonSnippet::instance(elementId, m_chrome, element);
+ }
+ else if (className == "PageSnippet") {
+ return PageSnippet::instance(elementId, m_chrome, element);
+ }
+ else if (className == "UrlSearchSnippet") {
+ return GUrlSearchSnippet::instance(elementId, m_chrome, element);
+ }
+ else if (className == "TextEditSnippet") {
+ return EditorSnippet::instance(elementId, m_chrome, element);
+ }
+ else {
+ ChromeSnippet* result = new ChromeSnippet(elementId, m_chrome, 0, element);
+ result->setChromeWidget(new QGraphicsWidget());
+ return result;
+ }
+ }
+
ChromeSnippet *ChromeDOM::getSnippet(const QString &docElementId, QGraphicsItem* parent) {
Q_UNUSED(parent)
- ChromeSnippet * result = 0;
+ ChromeSnippet * snippet = 0;
QWebElement doc = m_page->mainFrame()->documentElement();
QWebElement element = doc.findFirst("#" + docElementId);
- QRect rect = element.geometry();//getElementRect(docElementId);
+ QRect rect = element.geometry();
+ //TODO: This may not be accurate since final heights may not have been computed at this point!!
m_height += rect.height();
- //m_bytes += rect.width() * rect.height() * 3; //Calculate total rendered area at 24 bit depth
- //qDebug() << "Chrome total rects at 24 bits: " << m_bytes;
+
// qDebug() << "Snippet: ID: " << docElementId << " Owner Area: " << rect << " Element Rect: " << element.geometry();
+
if (!rect.isNull()) {
QString className = element.attribute("data-GinebraNativeClass", "__NO_CLASS__");
if (className == "__NO_CLASS__") {
if (element.attribute("data-GinebraContainer", "false") == "true") {
- ChromeItem * widget = new ChromeItem(NULL);
- result = new WebChromeContainerSnippet(docElementId, m_chrome, rect, element,
- widget);
- widget->setSnippet(result);
+ snippet = new WebChromeContainerSnippet(docElementId, m_chrome, element);
+ snippet->setChromeWidget(new ChromeItem(snippet));
}
else {
- result = new WebChromeSnippet(docElementId, m_chrome, rect, element);
- m_renderer->addRenderItem((static_cast<WebChromeSnippet*> (result))->item());
+ snippet = new WebChromeSnippet(docElementId, m_chrome, element);
+ m_renderer->addRenderItem((static_cast<WebChromeSnippet*> (snippet))->item());
}
}
else {
-
- if (className == "ContentToolbar" ) {
- ContentToolbarChromeItem * widget = new ContentToolbarChromeItem();
- result = new ContentToolbarSnippet(docElementId, m_chrome, rect, element, widget);
- widget->setSnippet(result);
- }
- else if (className == "WindowToolbar" ) {
- ToolbarChromeItem * widget = new ToolbarChromeItem();
- result = new WindowToolbarSnippet(docElementId, m_chrome, rect, element, widget);
- widget->setSnippet(result);
- }
- else if (className == "RecentUrlToolbar" ) {
- ToolbarChromeItem * widget = new ToolbarChromeItem();
- result = new RecentUrlToolbarSnippet(docElementId, m_chrome, rect, element, widget);
- widget->setSnippet(result);
- }
- else if (className == "BookmarksToolbar" ) {
- ToolbarChromeItem * widget = new ToolbarChromeItem();
- result = new BookmarksToolbarSnippet(docElementId, m_chrome, rect, element, widget);
- widget->setSnippet(result);
- }
- else if (className == "SettingsToolbar" ) {
- ToolbarChromeItem * widget = new ToolbarChromeItem();
- result = new SettingsToolbarSnippet(docElementId, m_chrome, rect, element, widget);
- widget->setSnippet(result);
- }
- else if (className == "ToolBar" ) {
- ToolbarChromeItem * widget = new ToolbarChromeItem();
- result = new WebChromeContainerSnippet(docElementId, m_chrome, rect, element,
- widget);
- widget->setSnippet(result);
- }
- else {
- QGraphicsWidget * w = 0;
- if (className == "MostVisitedPagesWidget") {
- result = new MostVisitedSnippet(docElementId, m_chrome, 0, element);
- MostVisitedPagesWidget* mostVisited;
- mostVisited = new MostVisitedPagesWidget(result, m_chrome);
- mostVisited->hide();
- w = mostVisited;
- }
- else if (className == "ActionButton") {
- result = new ActionButtonSnippet(docElementId, m_chrome, 0, element);
- w = new ActionButton(result);
- }
- else if (className == "PageSnippet") {
- result = new PageSnippet(docElementId, m_chrome, 0, element);
- w = new PageItem(result, m_chrome);
- }
- else if (className == "ProgressBar") {
- result = new ProgressBarSnippet(docElementId, m_chrome, 0, element);
- w = new ProgressBarItem(result);
- }
- else if (className == "UrlSearchSnippet") {
- result = new GUrlSearchSnippet(docElementId, m_chrome, 0, element);
- w = new GUrlSearchItem(result, m_chrome);
- }
- else if (className == "TextEditSnippet") {
- result = new EditorSnippet(docElementId, m_chrome, 0, element);
- w = new TextEditItem(result, m_chrome);
- }
- else {
- //Chrome snippet takes ownership of w
- result = new ChromeSnippet(docElementId, m_chrome, 0, element);
- w = new QGraphicsWidget();
- }
- result->setWidget(w);
- //Have snippet deterimine its own size when in anchor layout
- w->resize(rect.width(), rect.height());
- w->setPreferredSize(rect.width(), rect.height());
- w->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred));
- //Have snippet determine its own location when NOT in anchor layout
- w->setPos(rect.x(), rect.y());
- }
+ snippet = nativeSnippetForClassName(className, docElementId, element);
+ //TODO: Is the following still needed?
+ QGraphicsWidget * widget = snippet->widget();
+ //Have snippet determine its own size when in anchor layout. Again, these will not
+ //necessarily be accurate at this point.
+ widget->resize(rect.width(), rect.height());
+ widget->setPreferredSize(rect.width(), rect.height());
+ widget->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred));
+ //Have snippet determine its own location when NOT in anchor layout
+ widget->setPos(rect.x(), rect.y());
+
}
QWebElement parentElem;
if (!(parentElem = findChromeParent(element)).isNull()) {
- result->setParentId(parentElem.attribute("id"));
+ snippet->setParentId(parentElem.attribute("id"));
}
//Set auto-layout attributes
- result->setAnchor(element.attribute("data-GinebraAnchor", "AnchorNone"), false);
- result->setAnchorOffset(element.attribute("data-GinebraAnchorOffset", "0").toInt());
- result->setInitiallyVisible(element.attribute("data-GinebraVisible", "false") == "true");
- result->setHidesContent(element.attribute("data-GinebraHidesContent", "false") == "true");
+ snippet->setAnchor(element.attribute("data-GinebraAnchor", "AnchorNone"), false);
+ snippet->setAnchorOffset(element.attribute("data-GinebraAnchorOffset", "0").toInt());
+ snippet->setInitiallyVisible(element.attribute("data-GinebraVisible", "false") == "true");
+ snippet->setHidesContent(element.attribute("data-GinebraHidesContent", "false") == "true");
}
- return result;
+ return snippet;
}
QWebElement ChromeDOM::findChromeParent(QWebElement element)