2019-04-19 17:19:57 +08:00
|
|
|
|
#include "multi_browser_form.h"
|
|
|
|
|
#include "browser/browser_box.h"
|
|
|
|
|
#include "browser/multi_browser_manager.h"
|
|
|
|
|
#include "control/browser_tab_item.h"
|
|
|
|
|
#include "custom_layout.h"
|
|
|
|
|
|
|
|
|
|
using namespace ui;
|
|
|
|
|
using namespace std;
|
2019-09-22 12:21:38 +08:00
|
|
|
|
using namespace nim_comp;
|
2019-04-19 17:19:57 +08:00
|
|
|
|
|
|
|
|
|
namespace
|
|
|
|
|
{
|
|
|
|
|
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ڶ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť<EFBFBD><C5A5>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ITaskbarList4<74>ӿ<EFBFBD>
|
|
|
|
|
UINT WM_TASKBARBUTTONCREATED = ::RegisterWindowMessage(TEXT("TaskbarButtonCreated"));
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>WM_CLOSE<53><45>Ϣ<EFBFBD><CFA2>ԭ<EFBFBD><D4AD>
|
|
|
|
|
enum CloseReason
|
|
|
|
|
{
|
|
|
|
|
kDefaultClose = 0, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>رմ<D8B1><D5B4>ڣ<EFBFBD><DAA3><EFBFBD>Alt+F4<46>ȳ<EFBFBD><C8B3><EFBFBD>ԭ<EFBFBD><D4AD>
|
|
|
|
|
kBrowserBoxClose = 1 // <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5>´<EFBFBD><C2B4>ڹر<DAB9>
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const LPCTSTR MultiBrowserForm::kClassName = L"MultiBrowserForm";
|
|
|
|
|
|
|
|
|
|
MultiBrowserForm::MultiBrowserForm()
|
|
|
|
|
{
|
|
|
|
|
btn_max_restore_ = nullptr;
|
|
|
|
|
|
|
|
|
|
drop_helper_ = NULL;
|
|
|
|
|
|
|
|
|
|
tab_list_ = NULL;
|
|
|
|
|
borwser_box_tab_ = NULL;
|
|
|
|
|
active_browser_box_ = NULL;
|
|
|
|
|
|
|
|
|
|
is_drag_state_ = false;
|
|
|
|
|
old_drag_point_.x = old_drag_point_.y = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::wstring MultiBrowserForm::GetSkinFolder()
|
|
|
|
|
{
|
|
|
|
|
return L"multi_browser";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::wstring MultiBrowserForm::GetSkinFile()
|
|
|
|
|
{
|
|
|
|
|
return L"multi_browser.xml";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::wstring MultiBrowserForm::GetWindowClassName() const
|
|
|
|
|
{
|
|
|
|
|
return kClassName;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
UINT MultiBrowserForm::GetClassStyle() const
|
|
|
|
|
{
|
|
|
|
|
return (UI_CLASSSTYLE_FRAME | CS_DBLCLKS);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ui::Control* MultiBrowserForm::CreateControl(const std::wstring& pstrClass)
|
|
|
|
|
{
|
|
|
|
|
if (pstrClass == _T("CustomTabBox"))
|
|
|
|
|
{
|
|
|
|
|
if ((GetWindowExStyle(this->GetHWND()) & WS_EX_LAYERED) != 0)
|
|
|
|
|
return new TabBox(new CustomLayout);
|
|
|
|
|
else
|
|
|
|
|
return new TabBox(new Layout);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MultiBrowserForm::InitWindow()
|
|
|
|
|
{
|
|
|
|
|
m_pRoot->AttachBubbledEvent(ui::kEventClick, nbase::Bind(&MultiBrowserForm::OnClicked, this, std::placeholders::_1));
|
|
|
|
|
btn_max_restore_ = static_cast<Button*>(FindControl(L"btn_max_restore"));
|
|
|
|
|
|
|
|
|
|
edit_url_ = static_cast<RichEdit*>(FindControl(L"edit_url"));
|
|
|
|
|
lbl_title_ = static_cast<Label*>(FindControl(L"title"));
|
|
|
|
|
edit_url_->AttachReturn(nbase::Bind(&MultiBrowserForm::OnReturn, this, std::placeholders::_1));
|
|
|
|
|
|
|
|
|
|
tab_list_ = static_cast<ListBox*>(FindControl(L"tab_list"));
|
|
|
|
|
borwser_box_tab_ = static_cast<TabBox*>(FindControl(L"browser_box_tab"));
|
|
|
|
|
|
|
|
|
|
tab_list_->AttachSelect(nbase::Bind(&MultiBrowserForm::OnTabItemSelected, this, std::placeholders::_1));
|
|
|
|
|
|
|
|
|
|
InitDragDrop();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LRESULT MultiBrowserForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
|
|
|
{
|
|
|
|
|
if (uMsg == WM_SIZE)
|
|
|
|
|
{
|
|
|
|
|
if (wParam == SIZE_RESTORED)
|
|
|
|
|
OnWndSizeMax(false);
|
|
|
|
|
else if (wParam == SIZE_MAXIMIZED)
|
|
|
|
|
OnWndSizeMax(true);
|
|
|
|
|
}
|
|
|
|
|
else if (uMsg == WM_KEYDOWN)
|
|
|
|
|
{
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>Ctrl+Tab<61><62><EFBFBD>ݼ<EFBFBD>
|
|
|
|
|
if (wParam == VK_TAB && ::GetKeyState(VK_CONTROL) < 0)
|
|
|
|
|
{
|
|
|
|
|
int next = tab_list_->GetCurSel();
|
|
|
|
|
next = (next + 1) % GetBoxCount();
|
|
|
|
|
tab_list_->SelectItem(next);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ESC<53><43><EFBFBD>ݼ<EFBFBD>
|
|
|
|
|
else if (wParam == VK_ESCAPE)
|
|
|
|
|
{
|
|
|
|
|
BOOL bHandled = FALSE;
|
|
|
|
|
if (!MultiBrowserManager::GetInstance()->IsDragingBorwserBox() && NULL != active_browser_box_)
|
|
|
|
|
{
|
|
|
|
|
this->CloseBox(active_browser_box_->GetId());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (uMsg == WM_TASKBARBUTTONCREATED)
|
|
|
|
|
{
|
|
|
|
|
taskbar_manager_.Init(this);
|
|
|
|
|
|
|
|
|
|
// <20><>Ϊ<EFBFBD><CEAA><EFBFBD>ڸմ<DAB8><D5B4><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>û<EFBFBD><C3BB><EFBFBD>յ<EFBFBD>WM_TASKBARBUTTONCREATED<45><44>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RegisterTab<61><62><EFBFBD><EFBFBD>û<EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD><C2B1><EFBFBD>һ<EFBFBD><D2BB>û<EFBFBD>б<EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>Tab
|
|
|
|
|
for (int i = 0; i < borwser_box_tab_->GetCount(); i++)
|
|
|
|
|
{
|
|
|
|
|
Control *box_item = borwser_box_tab_->GetItemAt(i);
|
|
|
|
|
ASSERT(NULL != box_item);
|
|
|
|
|
if (NULL == box_item)
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
BrowserBox* browser_box = dynamic_cast<BrowserBox*>(box_item);
|
|
|
|
|
if (NULL == browser_box)
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
TaskbarTabItem* taskbar_item = browser_box->GetTaskbarItem();
|
|
|
|
|
if (NULL == taskbar_item)
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
taskbar_manager_.RegisterTab(*taskbar_item);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return __super::HandleMessage(uMsg, wParam, lParam);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LRESULT MultiBrowserForm::OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
|
|
|
{
|
|
|
|
|
CloseReason closeReason = (CloseReason)wParam;
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6>ر<EFBFBD><D8B1>˵<EFBFBD><CBB5>´<EFBFBD><C2B4>ڹرգ<D8B1><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if (kBrowserBoxClose == closeReason)
|
|
|
|
|
{
|
|
|
|
|
return __super::OnClose(uMsg, wParam, lParam, bHandled);
|
|
|
|
|
}
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><F2B4A5B7><EFBFBD>WM_CLOSE
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
int browser_count = GetBoxCount();
|
|
|
|
|
if (browser_count > 0 && NULL != active_browser_box_)
|
|
|
|
|
{
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD>ֱ<EFBFBD>ӹر<D3B9>
|
|
|
|
|
if (1 == browser_count)
|
|
|
|
|
{
|
|
|
|
|
CloseBox(active_browser_box_->GetId());
|
|
|
|
|
}
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>û<EFBFBD>
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
MsgboxCallback cb = ToWeakCallback([this](MsgBoxRet ret)
|
|
|
|
|
{
|
|
|
|
|
if (ret == MB_YES)
|
|
|
|
|
{
|
|
|
|
|
while (GetBoxCount() > 0)
|
|
|
|
|
{
|
|
|
|
|
Control *tab_item = tab_list_->GetItemAt(0);
|
|
|
|
|
ASSERT(NULL != tab_item);
|
|
|
|
|
if (NULL == tab_item)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
CloseBox(tab_item->GetUTF8Name());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
ShowMsgBox(this->GetHWND(), cb, L"STRID_CEF_BROWSER_CLOSING", true, L"STRING_TIPS", true, L"STRING_OK", true, L"STRING_NO", true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bHandled = TRUE;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return __super::OnClose(uMsg, wParam, lParam, bHandled);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MultiBrowserForm::OnFinalMessage(HWND hWnd)
|
|
|
|
|
{
|
|
|
|
|
// ʹ<><CAB9>tab_list_<74><5F><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>browser_box_tab_<62><5F>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ
|
|
|
|
|
int browser_box_count = GetBoxCount();
|
|
|
|
|
for (int i = 0; i < browser_box_count; i++)
|
|
|
|
|
{
|
|
|
|
|
Control *box_item = borwser_box_tab_->GetItemAt(i);
|
|
|
|
|
ASSERT(NULL != box_item);
|
|
|
|
|
if (NULL == box_item)
|
|
|
|
|
continue;;
|
|
|
|
|
|
|
|
|
|
BrowserBox* browser_box = dynamic_cast<BrowserBox*>(box_item);
|
|
|
|
|
if (NULL != browser_box)
|
|
|
|
|
browser_box->UninitBrowserBox();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
UnInitDragDrop();
|
|
|
|
|
|
|
|
|
|
__super::OnFinalMessage(hWnd);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MultiBrowserForm::OnWndSizeMax(bool max)
|
|
|
|
|
{
|
|
|
|
|
if (btn_max_restore_)
|
|
|
|
|
btn_max_restore_->SetClass(max ? L"btn_wnd_restore" : L"btn_wnd_max");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool MultiBrowserForm::OnClicked( ui::EventArgs* arg )
|
|
|
|
|
{
|
|
|
|
|
std::wstring name = arg->pSender->GetName();
|
|
|
|
|
if (name == L"btn_max_restore")
|
|
|
|
|
{
|
|
|
|
|
DWORD style = GetWindowLong(GetHWND(), GWL_STYLE);
|
|
|
|
|
if (style & WS_MAXIMIZE)
|
|
|
|
|
::ShowWindow(GetHWND(), SW_RESTORE);
|
|
|
|
|
else
|
|
|
|
|
::ShowWindow(GetHWND(), SW_MAXIMIZE);
|
|
|
|
|
}
|
|
|
|
|
else if (name == L"btn_close")
|
|
|
|
|
{
|
|
|
|
|
if (NULL == active_browser_box_)
|
|
|
|
|
{
|
|
|
|
|
ASSERT(0);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CloseBox(active_browser_box_->GetId());
|
|
|
|
|
}
|
|
|
|
|
else if (name == L"btn_min")
|
|
|
|
|
{
|
|
|
|
|
SendMessage(WM_SYSCOMMAND, SC_MINIMIZE, 0);
|
|
|
|
|
}
|
|
|
|
|
else if (name == L"btn_add")
|
|
|
|
|
{
|
2019-09-20 16:27:58 +08:00
|
|
|
|
nbase::TimeDelta time_delta = nbase::TimeDelta::FromMicroseconds(nbase::Time::Now().ToInternalValue());
|
|
|
|
|
std::string timeStamp = nbase::StringPrintf("%I64u", time_delta.ToMilliseconds());
|
|
|
|
|
MultiBrowserManager::GetInstance()->CreateBorwserBox(this, timeStamp, L"");
|
2019-04-19 17:19:57 +08:00
|
|
|
|
}
|
|
|
|
|
else if (active_browser_box_)
|
|
|
|
|
{
|
|
|
|
|
auto cef_control = active_browser_box_->GetCefControl();
|
|
|
|
|
if (!cef_control)
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
if (name == L"btn_back")
|
|
|
|
|
{
|
|
|
|
|
cef_control->GoBack();
|
|
|
|
|
}
|
|
|
|
|
else if (name == L"btn_forward")
|
|
|
|
|
{
|
|
|
|
|
cef_control->GoForward();
|
|
|
|
|
}
|
|
|
|
|
else if (name == L"btn_refresh")
|
|
|
|
|
{
|
|
|
|
|
cef_control->Refresh();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool MultiBrowserForm::OnReturn(ui::EventArgs* arg)
|
|
|
|
|
{
|
|
|
|
|
std::wstring name = arg->pSender->GetName();
|
|
|
|
|
if (name == L"edit_url")
|
|
|
|
|
{
|
2019-09-20 16:27:58 +08:00
|
|
|
|
#if 0
|
|
|
|
|
// <20>ڵ<EFBFBD>ǰҳ<C7B0><D2B3><EFBFBD><EFBFBD>ת
|
|
|
|
|
auto cef_control = active_browser_box_->GetCefControl();
|
|
|
|
|
if (cef_control)
|
|
|
|
|
cef_control->LoadURL(edit_url_->GetText());
|
|
|
|
|
#endif
|
|
|
|
|
nbase::TimeDelta time_delta = nbase::TimeDelta::FromMicroseconds(nbase::Time::Now().ToInternalValue());
|
|
|
|
|
std::string timeStamp = nbase::StringPrintf("%I64u", time_delta.ToMilliseconds());
|
2019-04-19 17:19:57 +08:00
|
|
|
|
// <20>½<EFBFBD><C2BD><EFBFBD>ǩҳ
|
2019-09-20 16:27:58 +08:00
|
|
|
|
MultiBrowserManager::GetInstance()->CreateBorwserBox(this, timeStamp, edit_url_->GetText());
|
2019-04-19 17:19:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BrowserBox* MultiBrowserForm::CreateBox(const std::string &browser_id, std::wstring url)
|
|
|
|
|
{
|
|
|
|
|
std::wstring id = nbase::UTF8ToUTF16(browser_id);
|
|
|
|
|
if (NULL != FindTabItem(id))
|
|
|
|
|
{
|
|
|
|
|
ASSERT(0);
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
if (NULL != FindBox(id))
|
|
|
|
|
{
|
|
|
|
|
ASSERT(0);
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BrowserTabItem *tab_item = new BrowserTabItem;
|
|
|
|
|
GlobalManager::FillBoxWithCache(tab_item, L"multi_browser/tab_item.xml");
|
|
|
|
|
tab_list_->AddAt(tab_item, GetBoxCount());
|
|
|
|
|
tab_item->AttachAllEvents(nbase::Bind(&MultiBrowserForm::OnProcessTabItemDrag, this, std::placeholders::_1));
|
|
|
|
|
tab_item->AttachButtonDown(nbase::Bind(&MultiBrowserForm::OnTabItemSelected, this, std::placeholders::_1));
|
|
|
|
|
tab_item->InitControl(browser_id);
|
|
|
|
|
Button *btn_item_close = (Button*)tab_item->FindSubControl(L"tab_item_close");
|
|
|
|
|
btn_item_close->AttachClick(nbase::Bind(&MultiBrowserForm::OnTabItemClose, this, std::placeholders::_1, browser_id));
|
|
|
|
|
|
|
|
|
|
BrowserBox* browser_box = new BrowserBox(browser_id);
|
|
|
|
|
borwser_box_tab_->Add(browser_box);
|
|
|
|
|
GlobalManager::FillBoxWithCache(browser_box, L"multi_browser/browser_box.xml", nbase::Bind(&BrowserBox::CreateControl, browser_box, std::placeholders::_1));
|
|
|
|
|
browser_box->SetName(id);
|
|
|
|
|
browser_box->InitBrowserBox(url);
|
|
|
|
|
auto taskbar_item = browser_box->GetTaskbarItem();
|
|
|
|
|
if (taskbar_item)
|
|
|
|
|
taskbar_manager_.RegisterTab(*taskbar_item);
|
|
|
|
|
|
|
|
|
|
if (GetBoxCount() <= 1)
|
|
|
|
|
active_browser_box_ = browser_box;
|
|
|
|
|
|
|
|
|
|
// <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>tab_item<65><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>л<EFBFBD><D0BB><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
tab_item->Selected(true, false);
|
|
|
|
|
ChangeToBox(id);
|
|
|
|
|
|
|
|
|
|
return browser_box;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MultiBrowserForm::CloseBox(const std::string &browser_id)
|
|
|
|
|
{
|
|
|
|
|
if (browser_id.empty())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
std::wstring id = nbase::UTF8ToUTF16(browser_id);
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ự<EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD>Ӧitem
|
|
|
|
|
BrowserTabItem *tab_item = FindTabItem(id);
|
|
|
|
|
if (NULL != tab_item)
|
|
|
|
|
{
|
|
|
|
|
tab_list_->Remove(tab_item);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
BrowserBox *browser_box = FindBox(id);
|
|
|
|
|
ASSERT(NULL != browser_box);
|
|
|
|
|
if (NULL != browser_box)
|
|
|
|
|
{
|
|
|
|
|
auto taskbar_item = browser_box->GetTaskbarItem();
|
|
|
|
|
if (taskbar_item)
|
|
|
|
|
taskbar_manager_.UnregisterTab(*taskbar_item);
|
|
|
|
|
browser_box->UninitBrowserBox();
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD>
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>ڹر<DAB9>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊû<CEAA>пؼ<D0BF><D8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD>ɫ
|
|
|
|
|
// <20><><EFBFBD>ڹر<DAB9>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if (borwser_box_tab_->GetCount() > 1)
|
|
|
|
|
borwser_box_tab_->Remove(browser_box);
|
|
|
|
|
else
|
|
|
|
|
active_browser_box_ = NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if (GetBoxCount() == 0)
|
|
|
|
|
{
|
|
|
|
|
this->Close(kBrowserBoxClose);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool MultiBrowserForm::AttachBox(BrowserBox *browser_box)
|
|
|
|
|
{
|
|
|
|
|
if (NULL == browser_box)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
std::wstring id = nbase::UTF8ToUTF16(browser_box->GetId());
|
|
|
|
|
if (NULL != FindTabItem(id))
|
|
|
|
|
{
|
|
|
|
|
ASSERT(0);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
if (NULL != FindBox(id))
|
|
|
|
|
{
|
|
|
|
|
ASSERT(0);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BrowserTabItem *tab_item = new BrowserTabItem;
|
|
|
|
|
GlobalManager::FillBoxWithCache(tab_item, L"multi_browser/tab_item.xml");
|
|
|
|
|
tab_list_->AddAt(tab_item, GetBoxCount());
|
|
|
|
|
tab_item->AttachAllEvents(nbase::Bind(&MultiBrowserForm::OnProcessTabItemDrag, this, std::placeholders::_1));
|
|
|
|
|
tab_item->AttachButtonDown(nbase::Bind(&MultiBrowserForm::OnTabItemSelected, this, std::placeholders::_1));
|
|
|
|
|
tab_item->InitControl(browser_box->GetId());
|
|
|
|
|
tab_item->SetTitle(browser_box->GetTitle());
|
|
|
|
|
Button *btn_item_close = (Button*)tab_item->FindSubControl(L"tab_item_close");
|
|
|
|
|
btn_item_close->AttachClick(nbase::Bind(&MultiBrowserForm::OnTabItemClose, this, std::placeholders::_1, browser_box->GetId()));
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>崴<EFBFBD><E5B4B4><EFBFBD><EFBFBD>browser_box<6F><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿؼ<D3BF><D8BC><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD>ʱ
|
|
|
|
|
// Add<64><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>browser_box<6F><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿؼ<D3BF><D8BC><EFBFBD>m_pWindowΪ<77>µĴ<C2B5><C4B4><EFBFBD>ָ<EFBFBD><D6B8>
|
|
|
|
|
borwser_box_tab_->Add(browser_box);
|
|
|
|
|
auto taskbar_item = browser_box->GetTaskbarItem();
|
|
|
|
|
if (taskbar_item)
|
|
|
|
|
taskbar_manager_.RegisterTab(*taskbar_item);
|
|
|
|
|
|
|
|
|
|
if (GetBoxCount() <= 1)
|
|
|
|
|
active_browser_box_ = browser_box;
|
|
|
|
|
|
|
|
|
|
// <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>tab_item<65><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>л<EFBFBD><D0BB><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
tab_item->Selected(true, false);
|
|
|
|
|
ChangeToBox(id);
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool MultiBrowserForm::DetachBox(BrowserBox *browser_box)
|
|
|
|
|
{
|
|
|
|
|
if (NULL == browser_box)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
std::wstring id = nbase::UTF8ToUTF16(browser_box->GetId());
|
|
|
|
|
|
|
|
|
|
// <20>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD><EFBFBD>ǩҳ<C7A9>Ƴ<EFBFBD><C6B3><EFBFBD>Ӧitem
|
|
|
|
|
BrowserTabItem *tab_item = FindTabItem(id);
|
|
|
|
|
if (NULL == tab_item)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
tab_list_->Remove(tab_item);
|
|
|
|
|
|
|
|
|
|
auto taskbar_item = browser_box->GetTaskbarItem();
|
|
|
|
|
if (taskbar_item)
|
|
|
|
|
taskbar_manager_.UnregisterTab(*taskbar_item);
|
|
|
|
|
// <20><><EFBFBD>Ҳ<EFBFBD>Tab<61><62><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ﲻ<EFBFBD><EFB2BB>delete browser_box
|
|
|
|
|
bool auto_destroy = borwser_box_tab_->IsAutoDestroy();
|
|
|
|
|
borwser_box_tab_->SetAutoDestroy(false);
|
|
|
|
|
if (!borwser_box_tab_->Remove(browser_box))
|
|
|
|
|
{
|
|
|
|
|
borwser_box_tab_->SetAutoDestroy(auto_destroy);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
borwser_box_tab_->SetAutoDestroy(auto_destroy);
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if (GetBoxCount() == 0)
|
|
|
|
|
{
|
|
|
|
|
this->Close(kBrowserBoxClose);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BrowserBox* MultiBrowserForm::GetSelectedBox()
|
|
|
|
|
{
|
|
|
|
|
return active_browser_box_;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MultiBrowserForm::SetActiveBox(const std::string &browser_id)
|
|
|
|
|
{
|
|
|
|
|
if (browser_id.empty())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
ActiveWindow();
|
|
|
|
|
|
|
|
|
|
// <20>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ự<EFBFBD>б<EFBFBD><D0B1>ҵ<EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
std::wstring id = nbase::UTF8ToUTF16(browser_id);
|
|
|
|
|
BrowserTabItem *tab_item = FindTabItem(id);
|
|
|
|
|
if (NULL == tab_item)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>tab_item<65><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>л<EFBFBD><D0BB><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
tab_item->Selected(true, false);
|
|
|
|
|
ChangeToBox(id);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool MultiBrowserForm::IsActiveBox(const BrowserBox *browser_box)
|
|
|
|
|
{
|
|
|
|
|
ASSERT(NULL != browser_box);
|
|
|
|
|
return (browser_box == active_browser_box_ && ::GetForegroundWindow() == GetHWND() && !::IsIconic(GetHWND()) && IsWindowVisible(GetHWND()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool MultiBrowserForm::IsActiveBox(const std::wstring &browser_id)
|
|
|
|
|
{
|
|
|
|
|
ASSERT(!browser_id.empty());
|
|
|
|
|
return (::GetForegroundWindow() == GetHWND() && !::IsIconic(GetHWND()) && IsWindowVisible(GetHWND()) && FindBox(browser_id) == active_browser_box_);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int MultiBrowserForm::GetBoxCount() const
|
|
|
|
|
{
|
|
|
|
|
return tab_list_->GetCount() - 1; // <20><>ȥ<EFBFBD>ұ<EFBFBD><D2B1>Ǹ<EFBFBD><C7B8>Ӻŵ<D3BA><C5B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MultiBrowserForm::OnBeforeDragBoxCallback(const std::wstring &browser_id)
|
|
|
|
|
{
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ק<EFBFBD><D7A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>קʱ<D7A7><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
int box_count = this->GetBoxCount();
|
|
|
|
|
if (1 == box_count)
|
|
|
|
|
{
|
|
|
|
|
this->ShowWindow(false);
|
|
|
|
|
}
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><D8B1><EFBFBD>ק<EFBFBD><D7A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӻͱ<D3BA>ǩ
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
BrowserBox *browser_box = FindBox(browser_id);
|
|
|
|
|
if (NULL != browser_box)
|
|
|
|
|
browser_box->SetVisible(false);
|
|
|
|
|
|
|
|
|
|
BrowserTabItem *tab_item = FindTabItem(browser_id);
|
|
|
|
|
if (NULL != tab_item)
|
|
|
|
|
tab_item->SetVisible(false);
|
|
|
|
|
|
|
|
|
|
// <20>ҵ<EFBFBD><D2B5>µı<C2B5><C4B1><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
int index = tab_item->GetIndex();
|
|
|
|
|
if (index > 0)
|
|
|
|
|
index--;
|
|
|
|
|
else
|
|
|
|
|
index++;
|
|
|
|
|
BrowserTabItem *new_tab_item = static_cast<BrowserTabItem*>(tab_list_->GetItemAt(index));
|
|
|
|
|
if (NULL != new_tab_item)
|
|
|
|
|
{
|
|
|
|
|
new_tab_item->Selected(true, false);
|
|
|
|
|
ChangeToBox(new_tab_item->GetName());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
draging_browser_id_ = browser_id;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MultiBrowserForm::OnAfterDragBoxCallback(bool drop_succeed)
|
|
|
|
|
{
|
|
|
|
|
is_drag_state_ = false;
|
|
|
|
|
|
|
|
|
|
if (drop_succeed)
|
|
|
|
|
{
|
|
|
|
|
int box_count = this->GetBoxCount();
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ק<EFBFBD><D7A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ק<EFBFBD><D7A7><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ھͻ<DABE><CDBB>ر<EFBFBD>
|
|
|
|
|
if (1 == box_count)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
int box_count = this->GetBoxCount();
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ק<EFBFBD><D7A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ק<EFBFBD><D7A7><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if (1 == box_count)
|
|
|
|
|
{
|
|
|
|
|
this->ShowWindow(true);
|
|
|
|
|
}
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ק<EFBFBD><D7A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ק<EFBFBD><D7A7><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ʾ֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӻͱ<D3BA>ǩ
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
BrowserBox *browser_box = FindBox(draging_browser_id_);
|
|
|
|
|
if (NULL != browser_box)
|
|
|
|
|
browser_box->SetVisible(true);
|
|
|
|
|
|
|
|
|
|
BrowserTabItem *tab_item = FindTabItem(draging_browser_id_);
|
|
|
|
|
if (NULL != tab_item)
|
|
|
|
|
{
|
|
|
|
|
tab_item->SetVisible(true);
|
|
|
|
|
tab_item->Selected(true, false);
|
|
|
|
|
ChangeToBox(draging_browser_id_);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
draging_browser_id_.clear();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool MultiBrowserForm::OnTabItemSelected(ui::EventArgs* param)
|
|
|
|
|
{
|
|
|
|
|
if (kEventSelect == param->Type)
|
|
|
|
|
{
|
|
|
|
|
std::wstring name = param->pSender->GetName();
|
|
|
|
|
|
|
|
|
|
if (name == L"tab_list")
|
|
|
|
|
{
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD>ı<EFBFBD>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>·<EFBFBD>Tab<61><62><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD>ѡ<EFBFBD><D1A1>
|
|
|
|
|
Control *select_item = tab_list_->GetItemAt(tab_list_->GetCurSel());
|
|
|
|
|
ASSERT(NULL != select_item);
|
|
|
|
|
if (NULL == select_item)
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
std::wstring session_id = select_item->GetName();
|
|
|
|
|
ChangeToBox(session_id);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (kEventMouseButtonDown == param->Type)
|
|
|
|
|
{
|
|
|
|
|
BrowserTabItem *tab_item = dynamic_cast<BrowserTabItem*>(param->pSender);
|
|
|
|
|
if (tab_item)
|
|
|
|
|
{
|
|
|
|
|
std::wstring browser_id = tab_item->GetName();
|
|
|
|
|
ChangeToBox(browser_id);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool MultiBrowserForm::OnTabItemClose(ui::EventArgs* param, const std::string& browser_id)
|
|
|
|
|
{
|
|
|
|
|
if (param->pSender->GetName() == L"tab_item_close")
|
|
|
|
|
{
|
|
|
|
|
CloseBox(browser_id);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BrowserBox* MultiBrowserForm::FindBox(const std::wstring &browser_id)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < borwser_box_tab_->GetCount(); i++)
|
|
|
|
|
{
|
|
|
|
|
Control *box_item = borwser_box_tab_->GetItemAt(i);
|
|
|
|
|
ASSERT(NULL != box_item);
|
|
|
|
|
if (NULL == box_item)
|
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
|
|
if (box_item->GetName() == browser_id)
|
|
|
|
|
return dynamic_cast<BrowserBox*>(box_item);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BrowserTabItem* MultiBrowserForm::FindTabItem(const std::wstring &browser_id)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < GetBoxCount(); i++)
|
|
|
|
|
{
|
|
|
|
|
Control *tab_item = tab_list_->GetItemAt(i);
|
|
|
|
|
ASSERT(NULL != tab_item);
|
|
|
|
|
if (NULL == tab_item)
|
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
|
|
if (tab_item->GetName() == browser_id)
|
|
|
|
|
return static_cast<BrowserTabItem*>(tab_item);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MultiBrowserForm::SetTabItemName(const std::wstring &browser_id, const std::wstring &name)
|
|
|
|
|
{
|
|
|
|
|
BrowserTabItem *tab_item = FindTabItem(browser_id);
|
|
|
|
|
if (NULL != tab_item)
|
|
|
|
|
{
|
|
|
|
|
tab_item->SetTitle(name);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MultiBrowserForm::SetURL(const std::string &browser_id, const std::wstring &url)
|
|
|
|
|
{
|
|
|
|
|
if (active_browser_box_ && active_browser_box_->GetId() == browser_id)
|
|
|
|
|
edit_url_->SetText(url);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool MultiBrowserForm::ChangeToBox(const std::wstring &browser_id)
|
|
|
|
|
{
|
|
|
|
|
if (browser_id.empty())
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
BrowserBox *box_item = FindBox(browser_id);
|
|
|
|
|
if (NULL == box_item)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
borwser_box_tab_->SelectItem(box_item);
|
|
|
|
|
|
|
|
|
|
box_item->SetFocus();
|
|
|
|
|
active_browser_box_ = box_item;
|
|
|
|
|
edit_url_->SetText(active_browser_box_->GetCefControl()->GetURL());
|
|
|
|
|
// <20><><EFBFBD>ݵ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD>
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|