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

133 lines
3.8 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.

#pragma once
#include "browser_box.h"
enum ThreadId
{
kThreadUI
};
/** @class MultiBrowserManager
* @brief 多标签浏览器管理类,用于统一管理多标签浏览器打开、合并、拆分、拖拽功能
* @date 2019/3/20
*/
class SdkDataObject;
class MultiBrowserManager : public nbase::SupportWeakCallback
{
public:
SINGLETON_DEFINE(MultiBrowserManager);
public:
MultiBrowserManager();
~MultiBrowserManager();
/**
* 创建一个浏览器盒子
* @param[in] browser_form 浏览器窗口如果为NULL则创建一个新的窗口否则在这个窗口里新建浏览器盒子
* @param[in] id 某个浏览器盒子的唯一标识
* @param[in] url 初始化URL
* @return BorwserBox* 浏览器盒子指针
*/
BrowserBox* CreateBorwserBox(MultiBrowserForm *browser_form, const std::string &id, const std::wstring &url);
/**
* 判断某个浏览器盒子是否处于激活状态
* @param[in] id 某个浏览器盒子的唯一标识
* @return bool true 激活false 非激活
*/
bool IsBorwserBoxActive(const std::string& id);
/**
* 根据会话id找回浏览器盒子
* @param[in] id 某个浏览器盒子的唯一标识
* @return BorwserBox* 返回浏览器盒子的指针
*/
BrowserBox* FindBorwserBox(const std::string &id);
/**
* 根据会话id移除本类中浏览器盒子信息
* @param[in] id 某个浏览器盒子的唯一标识
* @param[in] box id对应的浏览器盒子指针
* @return void 无返回值
*/
void RemoveBorwserBox(std::string id, const BrowserBox* box = NULL);
public:
/**
* 设置是否开启标签合并功能
* @param[in] enable true:开启合并功能,自动合并当前所有浏览器盒子
* false:关闭合并功能,自动拆分当前所有浏览器盒子
* @return 无返回值
*/
void SetEnableMerge(bool enable);
/**
* 是否开启标签合并功能
* @return bool true 是false 否
*/
bool IsEnableMerge() const;
/**
* 设置是否使用自定义的拖拽缩略图
* @param[in] use true:使用自定义拖拽缩略图,会使用低级键盘钩子,一些安全软件会拦截
* false:使用系统的拖拽缩略图,效果上不如自定义的好
* @return 无返回值
*/
void SetUseCustomDragImage(bool use);
/**
* 是否使用自定义的拖拽缩略图
* @return bool true 是false 否
*/
bool IsUseCustomDragImage() const;
/**
* 当前是否正在拖拽浏览器盒子
* @return bool true 是false 否
*/
bool IsDragingBorwserBox() const;
/**
* 设置被放入浏览器盒子的浏览器窗体
* @param[in] browser_form 浏览器窗口
* @return void 无返回值
*/
void SetDropForm(MultiBrowserForm *browser_form);
/**
* 执行拖拽浏览器盒子的操作
* @param[in] browser_box 浏览器盒子
* @param[in] bitmap 浏览器盒子生成的位图
* @param[in] pt_offset 拖拽图像相对于鼠标的偏移
* @return bool true 成功false 失败
*/
bool DoDragBorwserBox(BrowserBox *browser_box, HBITMAP bitmap, POINT pt_offset);
private:
/**
* 创建一个用于拖拽的IDataObject对象
* @param[in] bitmap 用于生成拖拽效果的位图
* @param[in] pt_offset 拖拽图像相对于鼠标的偏移
* @return SdkDataObject* IDataObject对象
*/
SdkDataObject* CreateDragDataObject(HBITMAP bitmap, POINT pt_offset);
/**
* 执行拖拽操作前被调用
* @return void 无返回值
*/
void OnBeforeDragBorwserBox(BrowserBox *browser_box, HBITMAP bitmap, POINT pt_offset);
/**
* 执行拖拽操作后被调用
* @return void 无返回值
*/
void OnAfterDragBorwserBox();
private:
bool enable_merge_;
bool use_custom_drag_image_;
BrowserBox *draging_box_; // 当下正在被拖拽的浏览器盒子
MultiBrowserForm *drop_browser_form_; // 拖入浏览器盒子的浏览器窗口,用于附加拖拽来的浏览器盒子
std::map<std::string, BrowserBox*> box_map_;
};