Files
2022-01-04 09:40:38 +08:00

126 lines
3.4 KiB
C++

/** @file browser_box.h
* @brief 标签页盒子
* @copyright (c) 2016, NetEase Inc. All rights reserved
* @author Redrain
* @date 2019/3/20
*/
#pragma once
class TaskbarTabItem;
class MultiBrowserForm;
class BrowserBox : public ui::VBox
{
public:
friend class MultiBrowserForm;
/**
* 构造函数
* @param[in] id 浏览器盒子的唯一标识,用于区分不同的标签页
*/
BrowserBox(std::string id);
~BrowserBox() { };
/**
* 获取id
* @return string 标识id
*/
std::string GetId() const { return browser_id_; }
/**
* 获取本浏览器盒子所属的浏览器窗口指针
* @return MultiBrowserForm* 浏览器窗口
*/
MultiBrowserForm* GetBrowserForm() const;
/**
* 获取Cef控件指针
* @return ui::CefControlBase* Cef控件
*/
nim_comp::CefControlBase* GetCefControl();
/**
* 获取网页标题
* @return std::wstring& 网页标题
*/
std::wstring& GetTitle();
/**
* 初始化浏览器盒子
* @param[in] url 初始化URL
* @return void 无返回值
*/
virtual void InitBrowserBox(const std::wstring &url);
/**
* 反初始化浏览器盒子
* @return void 无返回值
*/
virtual void UninitBrowserBox();
/**
* 根据控件类名创建自定义控件
* @param[in] pstrClass 控件类名
* @return Control* 创建的控件的指针
*/
ui::Control* CreateControl(const std::wstring& pstrClass);
//////////////////////////////////////////////////////////////////////////
//窗口合并功能相关的操作
public:
/**
* 获取与本浏览器盒子绑定的Tab指针
* @return TaskbarItem* Tab指针
*/
TaskbarTabItem* GetTaskbarItem();
/**
* 覆盖父类虚函数,用于指定本控件所属窗体及父控件信息
* @param[in] pManager 所属窗口指针
* @param[in] pParent 父控件指针
* @param[in] bInit 是否要初始化本控件
* @return void 无返回值
*/
virtual void SetWindow(ui::Window* pManager, ui::Box* pParent, bool bInit) override;
/**
* 覆盖基类虚函数,为了在任务栏显示缩略图和预览图,重写了设置子控件SetInternVisible属性的逻辑
* @param[in] bVisible 是否显示
* @return void 无返回值
*/
virtual void SetInternVisible(bool bVisible = true) override;
/**
* 覆盖基类虚函数,为了在重绘任务栏显示的缩略图
* @return void 无返回值
*/
virtual void Invalidate() override;
/**
* 覆盖基类虚函数,为了在重绘任务栏显示的缩略图
* @param[in] rc 要设置的控件的位置
* @return void 无返回值
*/
virtual void SetPos(ui::UiRect rc) override;
private:
void OnBeforeMenu(CefRefPtr<CefContextMenuParams> params, CefRefPtr<CefMenuModel> model);
bool OnMenuCommand(CefRefPtr<CefContextMenuParams> params, int command_id, CefContextMenuHandler::EventFlags event_flags);
void OnTitleChange(const std::wstring& title);
void OnUrlChange(const std::wstring& url);
bool OnLinkClick(const std::wstring& url);
CefRequestHandler::ReturnValue OnBeforeNavigate(CefRefPtr<CefRequest> request, bool is_redirect);
void OnLoadingStateChange(bool isLoading, bool canGoBack, bool canGoForward);
void OnLoadStart();
void OnLoadEnd(int httpStatusCode);
void OnLoadError(CefLoadHandler::ErrorCode errorCode, const CefString& errorText, const CefString& failedUrl);
private:
nim_comp::CefControlBase *cef_control_;
// 任务栏缩略图管理
TaskbarTabItem *taskbar_item_;
MultiBrowserForm *browser_form_;
std::string browser_id_;
std::wstring url_;
std::wstring title_;
};