//========= Copyright © 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 #include #include #include #include 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 m_CustomURLHandlers; }; } // namespace vgui #endif // HTML_H