nim_duilib/examples/multi_browser/browser/browser_box.h
jiajia_deng ce1686db1a Fixed compilation errors
Signed-off-by: jiajia_deng <2894220@gmail.com>
2019-09-22 12:21:38 +08:00

126 lines
3.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/** @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_;
};