⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 browserpage.cpp

📁 Last change: 2008-02-03 This is the source code of KCeasy。
💻 CPP
📖 第 1 页 / 共 2 页
字号:

    if(ClickedTab == -1)
        return;

    // always keep one tab around
    if(TabControl->Tabs->Count == 1)
        NavigateToHome();
    else
        CloseTab(ClickedTab);
}

void __fastcall TBrowserForm::CloseAllOtherTabsMnuClick(TObject *Sender)
{
    TPoint ClickPoint = TabControl->ScreenToClient(TabPopupMenu->PopupPoint);
    int ClickedTab = TabControl->IndexOfTabAt(ClickPoint.x,ClickPoint.y);

    if(ClickedTab != -1)
        CloseAllOtherTabs(ClickedTab);
}
//---------------------------------------------------------------------------

void __fastcall TBrowserForm::BackBtnClick(TObject *Sender)
{
    if(GetActiveBrowser())
        GetActiveBrowser()->GoBack();
}

void __fastcall TBrowserForm::ForwardBtnClick(TObject *Sender)
{
    if(GetActiveBrowser())
        GetActiveBrowser()->GoForward();
}

void __fastcall TBrowserForm::RefreshBtnClick(TObject *Sender)
{
    if(GetActiveBrowser())
        GetActiveBrowser()->Refresh2(0);
}

void __fastcall TBrowserForm::StopBtnClick(TObject *Sender)
{
    if(GetActiveBrowser())
        GetActiveBrowser()->Stop();
}
//---------------------------------------------------------------------------

void __fastcall TBrowserForm::HomeBtnClick(TObject *Sender)
{
    NavigateToHome();
}
//---------------------------------------------------------------------------

void __fastcall TBrowserForm::UrlEditKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
    // go to url if <return> is hit
    if(Key == VK_RETURN) {
        Key = 0; // does _not_ prevent return from showing up in OnKeyPress
        if(Shift.Contains(ssShift))
            NewTabBtnClick(NULL);
        else
            GoBtnClick(NULL);
    }
}

void __fastcall TBrowserForm::UrlEditKeyPress(TObject *Sender, char &Key)
{
    // don't send return to edit
    if(Key == 13)
        Key = 0;
}

void __fastcall TBrowserForm::GoBtnClick(TObject *Sender)
{
    string NewUrl = UrlEdit->Text.c_str();
    // google goodness
    if(NewUrl.substr(0,2) == "g ") {
        NewUrl = string("http://www.google.com/search?q=") +
                 UrlEncode(NewUrl.substr(2));
        UrlEdit->Text = NewUrl.c_str();
    }
    // navigate to url
    NavigateTo(UrlEdit->Text.c_str(),false);
}

void __fastcall TBrowserForm::NewTabBtnClick(TObject *Sender)
{
    string NewUrl = UrlEdit->Text.c_str();
    // google goodness
    if(NewUrl.substr(0,2) == "g ") {
        NewUrl = string("http://www.google.com/search?q=") +
                 UrlEncode(NewUrl.substr(2));
        UrlEdit->Text = NewUrl.c_str();
    }
    // navigate to url
    NavigateTo(UrlEdit->Text.c_str(),true);
}
//---------------------------------------------------------------------------

void __fastcall TBrowserForm::BookmarkBtnClick(TObject *Sender)
{
    // create new menu with default items
    delete BookmarkPopup;
    BookmarkPopup = new TPopupMenu(this);
    BookmarkPopup->Items->AutoLineReduction = maManual;

    TMenuItem* AddItem = new TMenuItem(BookmarkPopup);
    // TRANSLATOR: Menu item in browser bookmark menu
    AddItem->Caption = _("Add Active Page");
    AddItem->Enabled = GetActiveBrowser() != NULL;
    AddItem->OnClick = AddBookmarkMnuClick;
    BookmarkPopup->Items->Add(AddItem);

    TMenuItem* RemoveItem = new TMenuItem(BookmarkPopup);
    // TRANSLATOR: Menu item in browser bookmark menu
    RemoveItem->Caption = _("Remove Bookmark");
    BookmarkPopup->Items->Add(RemoveItem);

    // separator
    TMenuItem* SepItem = new TMenuItem(BookmarkPopup);
    SepItem->Caption = "-";
    BookmarkPopup->Items->Add(SepItem);

    // add bookmarks
    for(TBookmarkManager::Iterator itr = Bookmarks->Begin(); itr != Bookmarks->End(); ++itr) {
        // add launch item
        TMenuItem* Item = new TMenuItem(BookmarkPopup);
        Item->Caption = (*itr)->GetTitle() != "" ? (*itr)->GetTitle().c_str() : (*itr)->GetUrl().c_str();
        Item->OnClick = LaunchBookmarkMnuClick;
        Item->Tag = (int)(*itr);
        BookmarkPopup->Items->Add(Item);
        // add remove item
        Item = new TMenuItem(BookmarkPopup);
        Item->Caption = (*itr)->GetTitle() != "" ? (*itr)->GetTitle().c_str() : (*itr)->GetUrl().c_str();
        Item->OnClick = RemoveBookmarkMnuClick;
        Item->Tag = (int)(*itr);
        RemoveItem->Add(Item);
    }

    TPoint Pt = BookmarkBtn->Parent->ClientToScreen(TPoint(BookmarkBtn->Left,BookmarkBtn->Top+BookmarkBtn->Height));
    BookmarkPopup->Popup(Pt.x,Pt.y);
}

void __fastcall TBrowserForm::LaunchBookmarkMnuClick(TObject *Sender)
{
    TBookmark* Bookmark;
    if((Bookmark = (TBookmark*)((TMenuItem*)Sender)->Tag))
        NavigateTo(Bookmark->GetUrl(),Config->GetValueInt("browser/open_bookmarks_in_new_tab"));
}

void __fastcall TBrowserForm::RemoveBookmarkMnuClick(TObject *Sender)
{
    TBookmark* Bookmark;
    if((Bookmark = (TBookmark*)((TMenuItem*)Sender)->Tag))
        Bookmarks->Delete(Bookmark);
}

void __fastcall TBrowserForm::AddBookmarkMnuClick(TObject *Sender)
{
    if(!GetActiveBrowser())
        return;
    AnsiString Url = GetActiveBrowser()->LocationURL;
    AnsiString Title = AnsiString(GetActiveBrowser()->LocationName).Trim();
    if(Title.Length() == 0)
        Title = Url;

    Bookmarks->Add(Url.c_str(),Title.c_str());
}
//---------------------------------------------------------------------------

void __fastcall TBrowserForm::BrowserTitleChange(TObject *Sender,
      BSTR Title)
{
    TCppWebBrowser* Browser = (TCppWebBrowser*)Sender;

    for(int i=0; i<TabControl->Tabs->Count; i++) {
        TBrowserWrapper* Wrapper = (TBrowserWrapper*)TabControl->Tabs->Objects[i];
        if(Wrapper->GetBrowser() == Browser) {
            SetTabCaption(i,AnsiString(Title).Trim());
            break;
        }
    }

    if (Browser == GetActiveBrowser())
        UrlEdit->Text = Browser->LocationURL;
}

void __fastcall TBrowserForm::BrowserStatusTextChange(TObject *Sender,
      BSTR StatusText)
{
    TCppWebBrowser* Browser = (TCppWebBrowser*)Sender;

    // show status text
    if (Browser == GetActiveBrowser())
        MainForm->MainStatusBar->Panels->Items[1]->Text = WideString(StatusText);
}

void __fastcall TBrowserForm::BrowserCommandStateChange(TObject *Sender,
      long Command, VARIANT_BOOL Enable)
{
    TCppWebBrowser* Browser = (TCppWebBrowser*)Sender;
    switch(Command) {
    case CSC_UPDATECOMMANDS:
        // this seems not to be triggered if the browser window does not have
        // focus meaning Browser->Budy == false is never detected?
        if (Browser == GetActiveBrowser()) {
            StopBtn->Enabled = Browser->Busy;
            StatusAnimate->Visible = Browser->Busy;
            StatusAnimate->Active = Browser->Busy;
            PopupImage->Visible = !Browser->Busy && ((int)Browser->GetProperty(WideString("browser_blocked"))) > 0;
            if(Browser->Busy)
                StatusAnimate->BringToFront();
            else
                PopupImage->BringToFront();
        }
        break;
    case CSC_NAVIGATEFORWARD:
        Browser->PutProperty(WideString("browser_navigateforward"), TVariant(Enable));
        if (Browser == GetActiveBrowser())
            ForwardBtn->Enabled = Enable;
        break;
    case CSC_NAVIGATEBACK:
        Browser->PutProperty(WideString("browser_navigateback"), TVariant(Enable));
        if (Browser == GetActiveBrowser())
            BackBtn->Enabled = Enable;
        break;
    }
}

void __fastcall TBrowserForm::BrowserProgressChange(TObject* Sender,
      long Progress, long ProgressMax)
{
}

void __fastcall TBrowserForm::BrowserNavigateError(TObject *Sender,
      LPDISPATCH pDisp, VARIANT *URL, VARIANT *Frame, VARIANT *StatusCode,
      VARIANT_BOOL *Cancel)
{
    // if we tried to load the start or home urls from the config fall back
    // to the internal page
    WideString WUrl = ((wchar_t*)TVariant(URL));

    if(WUrl == WideString(Config->GetValue("browser/home_url").c_str()))
        BrowserLoadResource((TCppWebBrowser*)Sender, "startpage_htm");
}

void __fastcall TBrowserForm::BrowserNewWindow2(TObject *Sender,
      LPDISPATCH *ppDisp, VARIANT_BOOL *Cancel)
{
    // block popups
    TCppWebBrowser* Browser = (TCppWebBrowser*)Sender;
    if(Config->GetValueInt("browser/block_popups") &&
       Browser->ReadyState != Shdocvw_tlb::READYSTATE_COMPLETE)
    {
        int Blocked = Browser->GetProperty(WideString("browser_blocked"));
        Blocked++;
        Browser->PutProperty(WideString("browser_blocked"), TVariant(Blocked));
        if(Browser == GetActiveBrowser() && !Browser->Busy) {
            PopupImage->Visible = Blocked > 0;
            PopupImage->BringToFront();
        }
        *Cancel = true;
        return;
    }

    if(Config->GetValueInt("browser/open_new_windows_as_tabs") &&
       Config->GetValueInt("browser/enable_tabs"))
    {
        TBrowserWrapper* Wrapper = CreateTab(true);
        Wrapper->GetBrowser()->RegisterAsBrowser = true;
        *ppDisp = Wrapper->GetBrowser()->ControlInterface;
    }
}

void __fastcall TBrowserForm::BrowserWindowClosing(TObject * Sender,
      VARIANT_BOOL IsChildWindow, VARIANT_BOOL* Cancel)
{
    // cancel automatic closing of all windows since there is no clean way for
    // us to handle it
    *Cancel = true;
}

void __fastcall TBrowserForm::BrowserBeforeNavigate2(TObject *Sender,
      LPDISPATCH pDisp, VARIANT *URL, VARIANT *Flags,
      VARIANT *TargetFrameName, VARIANT *PostData, VARIANT *Headers,
      VARIANT_BOOL *Cancel)
{
    // reset popup count
    TCppWebBrowser* Browser = (TCppWebBrowser*)Sender;
    Browser->PutProperty(WideString("browser_blocked"), TVariant(((int)0)));

    // handle magnet uris
    if(!HandleMagnets)
        return;
    WideString WUrl = (wchar_t*)TVariant(URL);
    WideString WProto = WUrl.SubString(0,7);

    if(WProto == WideString(L"magnet:") || WProto == WideString(L"sig2dat")) {
        TMagnetForm* MagnetDlg = new TMagnetForm(this,AnsiString(WUrl).c_str());
        MagnetDlg->ShowModal();
        delete MagnetDlg;
        *Cancel = true;
    }
}

void __fastcall TBrowserForm::BrowserDocumentComplete(TObject *Sender,
      IDispatch *pDisp, VARIANT *URL)
{
#if 0
    TCppWebBrowser* Browser = (TCppWebBrowser*)Sender;

    if (pDisp == Browser->DefaultDispatch && MainForm->GetVisiblePage() == this) {
        Browser->SetFocus();
        BrowserCallScript(Browser, "KCeasyFocusSearch");
    }
#endif
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -