nim_duilib/examples/multi_browser/browser/multi_browser_manager.h

133 lines
3.8 KiB
C
Raw Normal View History

2019-04-19 17:19:57 +08:00
#pragma once
#include "browser_box.h"
enum ThreadId
{
kThreadUI
};
2019-04-19 17:19:57 +08:00
/** @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_;
};