139 lines
4.9 KiB
C
139 lines
4.9 KiB
C
|
//========= Copyright <20> 1996-2005, Valve Corporation, All rights reserved. ============//
|
|||
|
//
|
|||
|
// Purpose: Creates a HTML control
|
|||
|
//
|
|||
|
// $NoKeywords: $
|
|||
|
//=============================================================================//
|
|||
|
|
|||
|
#ifndef HTML_H
|
|||
|
#define HTML_H
|
|||
|
|
|||
|
#ifdef _WIN32
|
|||
|
#pragma once
|
|||
|
#endif
|
|||
|
|
|||
|
#include <vgui/VGUI.h>
|
|||
|
#include <vgui/IHTML.h>
|
|||
|
#include <vgui/IImage.h>
|
|||
|
#include <vgui_controls/Panel.h>
|
|||
|
#include <vgui_controls/PHandle.h>
|
|||
|
|
|||
|
namespace vgui
|
|||
|
{
|
|||
|
|
|||
|
//-----------------------------------------------------------------------------
|
|||
|
// Purpose: Control to display HTML content
|
|||
|
// This control utilises a hidden IE window to render a HTML page for you.
|
|||
|
// It can load any valid URL (i.e local files or web pages), you cannot dynamically change the
|
|||
|
// content however (internally to the control that is).
|
|||
|
//-----------------------------------------------------------------------------
|
|||
|
class HTML: public Panel, public IHTMLEvents
|
|||
|
{
|
|||
|
DECLARE_CLASS_SIMPLE( HTML, Panel );
|
|||
|
|
|||
|
public:
|
|||
|
|
|||
|
HTML(Panel *parent,const char *name, bool allowJavaScript = false);
|
|||
|
~HTML();
|
|||
|
|
|||
|
// start and stop the HTML control repainting itself periodically
|
|||
|
void StartAnimate(int time);
|
|||
|
void StopAnimate();
|
|||
|
|
|||
|
// IHTML pass through functions
|
|||
|
virtual void OpenURL(const char *URL, bool force = false); // force means ignore the offline mod override
|
|||
|
virtual bool StopLoading();
|
|||
|
virtual bool Refresh();
|
|||
|
virtual void Clear();
|
|||
|
virtual void AddText(const char *text);
|
|||
|
virtual void SetVisible( bool state );
|
|||
|
virtual void OnMove();
|
|||
|
|
|||
|
// configuration
|
|||
|
virtual void SetScrollbarsEnabled(bool state);
|
|||
|
virtual void SetContextMenuEnabled(bool state);
|
|||
|
virtual void NewWindowsOnly( bool state );
|
|||
|
|
|||
|
// events callbacks
|
|||
|
// Called when the control wishes to go to a new URL (either through the OpenURL() method or internally triggered).
|
|||
|
// Return TRUE to allow it to continue and FALSE to stop it loading the URL. Target is the frame this page will load in
|
|||
|
virtual bool OnStartURL(const char *url, const char *target, bool first);
|
|||
|
// Called when a page has finished loading an is being render. If you derive from this make SURE to
|
|||
|
// call this method also (i.e call Baseclass::OnFinishURL(url) in your derived version).
|
|||
|
virtual void OnFinishURL(const char *url);
|
|||
|
// Called as a page is loading. Maximum is the total number of "tick" events in the progress count,
|
|||
|
// current is the current amount you are into the progress. This can be used to update another
|
|||
|
// on screen control to show that the browser is active.
|
|||
|
virtual void OnProgressURL(long current, long maximum);
|
|||
|
// Called when IE has some status text it wishes to display. You can use this to provide status information
|
|||
|
// in another control.
|
|||
|
virtual void OnSetStatusText(const char *text);
|
|||
|
virtual void OnUpdate();
|
|||
|
virtual void OnLink();
|
|||
|
virtual void OffLink();
|
|||
|
|
|||
|
// url handlers, lets you have web page links fire vgui events
|
|||
|
// use to have custom web page links, eg. "steam://open/subscriptionpage"
|
|||
|
// everything after the "://" is sent to the watcher in a message "CustomURL", "url", "protocol"
|
|||
|
virtual void AddCustomURLHandler(const char *customProtocolName, vgui::Panel *target);
|
|||
|
|
|||
|
// overridden to paint our special web browser texture
|
|||
|
virtual void PaintBackground();
|
|||
|
|
|||
|
// pass messages to the texture component to tell it about resizes
|
|||
|
virtual void OnSizeChanged(int wide,int tall);
|
|||
|
// for animation task
|
|||
|
virtual void OnTick();
|
|||
|
|
|||
|
// pass mouse clicks through
|
|||
|
virtual void OnMousePressed(MouseCode code);
|
|||
|
virtual void OnMouseReleased(MouseCode code);
|
|||
|
virtual void OnCursorMoved(int x,int y);
|
|||
|
virtual void OnMouseDoublePressed(MouseCode code);
|
|||
|
virtual void OnKeyTyped(wchar_t unichar);
|
|||
|
virtual void OnKeyCodePressed(KeyCode code);
|
|||
|
virtual void PerformLayout();
|
|||
|
virtual void OnMouseWheeled(int delta);
|
|||
|
|
|||
|
vgui::ScrollBar *GetVerticalScrollBar( void ) { return _vbar; }
|
|||
|
vgui::ScrollBar *GetHorizontalScrollBar( void ) { return _hbar; }
|
|||
|
|
|||
|
protected:
|
|||
|
virtual void ApplySchemeSettings(IScheme *pScheme);
|
|||
|
|
|||
|
private:
|
|||
|
virtual void BrowserResize();
|
|||
|
virtual void CalcScrollBars(int w,int h);
|
|||
|
MESSAGE_FUNC( OnSliderMoved, "ScrollBarSliderMoved" );
|
|||
|
|
|||
|
IHTML *browser; // the interface to the browser itself
|
|||
|
|
|||
|
vgui::Label *loading;
|
|||
|
IImage *picture;
|
|||
|
vgui::ScrollBar *_hbar,*_vbar;
|
|||
|
|
|||
|
int m_iMouseX,m_iMouseY; // where the mouse is on the control
|
|||
|
long m_iNextFrameTime; // next time (in milliseconds) to repaint
|
|||
|
int m_iAnimTime; // the time between repaints (in milliseconds)
|
|||
|
int m_iScrollX,m_iScrollY;
|
|||
|
int m_iScrollBorderX,m_iScrollBorderY;
|
|||
|
bool m_bRegenerateHTMLBitmap;
|
|||
|
|
|||
|
bool m_bScrollBarEnabled;
|
|||
|
bool m_bContextMenuEnabled;
|
|||
|
int m_iScrollbarSize;
|
|||
|
bool m_bNewWindowsOnly;
|
|||
|
bool m_bSetVisibleOnPerformLayout;
|
|||
|
|
|||
|
struct CustomURLHandler_t
|
|||
|
{
|
|||
|
PHandle hPanel;
|
|||
|
char url[32];
|
|||
|
};
|
|||
|
CUtlVector<CustomURLHandler_t> m_CustomURLHandlers;
|
|||
|
};
|
|||
|
|
|||
|
} // namespace vgui
|
|||
|
|
|||
|
#endif // HTML_H
|