Mozilla/mozilla/widget/src/xpwidgets/nsHTToolbarDataModel.cpp
pinkerton%netscape.com 1ce1ff99f0 First Checked In.
git-svn-id: svn://10.0.0.236/trunk@16372 18797224-902f-48f8-a5cc-f745e15eee43
1998-12-14 23:50:02 +00:00

200 lines
5.5 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "nsHTToolbarDataModel.h"
#include "nspr.h"
#include "nsString.h"
#include "nsFont.h"
#include "nsWidgetsCID.h"
#include "nsDataModelWidget.h"
#include "nsIDeviceContext.h"
#include "nsIImageObserver.h"
#include "nsIImageRequest.h"
#include "nsIImageGroup.h"
#include "nsIContent.h"
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
static NS_DEFINE_IID(kIImageObserverIID, NS_IIMAGEREQUESTOBSERVER_IID);
NS_IMPL_ADDREF(nsHTToolbarDataModel)
NS_IMPL_RELEASE(nsHTToolbarDataModel)
nsHTToolbarDataModel::nsHTToolbarDataModel() : nsToolbarDataModel(), nsHTDataModel(),
mBGRequest(nsnull)
{
NS_INIT_REFCNT();
}
//--------------------------------------------------------------------
nsHTToolbarDataModel::~nsHTToolbarDataModel()
{
NS_IF_RELEASE(mBGRequest);
}
// ISupports Implementation --------------------------------------------------------------------
nsresult nsHTToolbarDataModel::QueryInterface(REFNSIID aIID, void** aInstancePtr)
{
if (NULL == aInstancePtr) {
return NS_ERROR_NULL_POINTER;
}
if (aIID.Equals(kISupportsIID)) {
*aInstancePtr = (void*) (nsISupports *)(nsIImageRequestObserver*)this;
AddRef();
return NS_OK;
}
if (aIID.Equals(kIImageObserverIID)) {
*aInstancePtr = (void*)(nsIImageRequestObserver*)this;
AddRef();
return NS_OK;
}
return NS_ERROR_NULL_POINTER;
}
// Hierarchical Tree Data Model Implementation ---------------------
void
nsHTToolbarDataModel::SetContentRoot(nsIContent* pContent)
{
// Construct our visible items array
SetContentRootDelegate(pContent);
}
//
// GetToolbarStyle
//
// Loads up all the style information from the DOM/CSS.
// NOTE: right now this is just hard-coded stuff. THis may all go away when the toolbar
// is integrated with the frame system.
//
void
nsHTToolbarDataModel::GetToolbarStyle ( nsIDeviceContext* dc, nsBasicStyleInfo& styleInfo ) const
{
// Initialize the font.
nsString fontFamily("Helvetica");
int fontSize = 12;
int fontWeight = 400;
int fontStyle = NS_FONT_STYLE_NORMAL;
int fontDecoration = NS_FONT_DECORATION_NONE;
float t2d;
dc->GetTwipsToDevUnits(t2d);
nsFont theFont(fontFamily, fontStyle, NS_FONT_VARIANT_NORMAL,
fontWeight, fontDecoration,
nscoord(t2d * NSIntPointsToTwips(fontSize)));
styleInfo.font = theFont;
// Init the colors
styleInfo.foregroundColor = NS_RGB(255,255,255);
styleInfo.backgroundColor = NS_RGB(0,0,0);
styleInfo.pBackgroundImage = GetBGImage();
}
//
// GetBGImage
//
// Fetch the bg image of this toolbar
//
nsIImage*
nsHTToolbarDataModel :: GetBGImage() const
{
nsString url("http://www.shadowland.org/images/ancient_glyphs.jpg");
if (mBGRequest == nsnull) {
// cast away const because we can't use mutable
nsHTToolbarDataModel* self = NS_CONST_CAST(nsHTToolbarDataModel*, this);
self->mBGRequest = RequestImage(url);
}
return mBGRequest->GetImage();
} // GetBGImage
//
// RequestImage
//
// Actually kick off the image request.
//
nsIImageRequest*
nsHTToolbarDataModel :: RequestImage(nsString& reqUrl) const
{
nsIImageGroup* pGroup = GetImageGroup();
char * url = reqUrl.ToNewCString(); //*** candidate for auto_ptr
nsIImageRequest *request = pGroup->GetImage(url,
(nsIImageRequestObserver*)this,
NULL, 0, 0,
0);
delete url;
return request;
} // RequestImage
//
// Notify
//
// image request observer implementation
//
void
nsHTToolbarDataModel::Notify(nsIImageRequest *aImageRequest,
nsIImage *aImage,
nsImageNotification aNotificationType,
PRInt32 aParam1, PRInt32 aParam2,
void *aParam3)
{
if (aNotificationType == nsImageNotification_kImageComplete)
{
// Notify the data source that we loaded. It can then inform the data source listener
// regarding what happened.
ImageLoaded(nsnull);
}
} // Notify
//
// NotifyError
//
// Called when the image observer gets an error
//
void
nsHTToolbarDataModel::NotifyError(nsIImageRequest *aImageRequest,
nsImageError aErrorType)
{
//*** what should we do here?
}
//
// CreateDataItemWithContentNode
//
// Build one of our special data items hooked up to the given content node.
//
nsHierarchicalDataItem*
nsHTToolbarDataModel :: CreateDataItemWithContentNode(nsIContent* aContent)
{
//nsHTTreeItem* pItem = new nsHTTreeItem(pContent, this);
return nsnull;
}