mirror of
https://github.com/fergalmoran/ladybird.git
synced 2025-12-22 09:19:03 +00:00
For now this is simply a counter+hook exposed by ResourceLoader and shown in the Browser status bar. This is not very nuanced, and it would be nice to expose more info so we could eventually do something like a progress bar.
124 lines
3.7 KiB
C++
124 lines
3.7 KiB
C++
#include <LibCore/CFile.h>
|
|
#include <LibGUI/GAboutDialog.h>
|
|
#include <LibGUI/GAction.h>
|
|
#include <LibGUI/GApplication.h>
|
|
#include <LibGUI/GBoxLayout.h>
|
|
#include <LibGUI/GMenu.h>
|
|
#include <LibGUI/GMenuBar.h>
|
|
#include <LibGUI/GStatusBar.h>
|
|
#include <LibGUI/GTextBox.h>
|
|
#include <LibGUI/GToolBar.h>
|
|
#include <LibGUI/GWindow.h>
|
|
#include <LibHTML/CSS/StyleResolver.h>
|
|
#include <LibHTML/DOM/Element.h>
|
|
#include <LibHTML/Dump.h>
|
|
#include <LibHTML/HtmlView.h>
|
|
#include <LibHTML/Layout/LayoutBlock.h>
|
|
#include <LibHTML/Layout/LayoutInline.h>
|
|
#include <LibHTML/Layout/LayoutNode.h>
|
|
#include <LibHTML/Parser/CSSParser.h>
|
|
#include <LibHTML/Parser/HTMLParser.h>
|
|
#include <LibHTML/ResourceLoader.h>
|
|
#include <stdio.h>
|
|
|
|
static const char* home_url = "file:///home/anon/www/welcome.html";
|
|
|
|
int main(int argc, char** argv)
|
|
{
|
|
GApplication app(argc, argv);
|
|
|
|
auto window = GWindow::construct();
|
|
window->set_rect(100, 100, 640, 480);
|
|
|
|
auto widget = GWidget::construct();
|
|
widget->set_fill_with_background_color(true);
|
|
widget->set_layout(make<GBoxLayout>(Orientation::Vertical));
|
|
widget->layout()->set_spacing(0);
|
|
|
|
auto toolbar = GToolBar::construct(widget);
|
|
auto html_widget = HtmlView::construct(widget);
|
|
|
|
toolbar->add_action(GCommonActions::make_go_back_action([&](auto&) {
|
|
// FIXME: Implement back action
|
|
}));
|
|
|
|
toolbar->add_action(GCommonActions::make_go_forward_action([&](auto&) {
|
|
// FIXME: Implement forward action
|
|
}));
|
|
|
|
toolbar->add_action(GCommonActions::make_go_home_action([&](auto&) {
|
|
html_widget->load(home_url);
|
|
}));
|
|
|
|
toolbar->add_action(GCommonActions::make_reload_action([&](auto&) {
|
|
html_widget->reload();
|
|
}));
|
|
|
|
auto location_box = GTextBox::construct(toolbar);
|
|
|
|
location_box->on_return_pressed = [&] {
|
|
html_widget->load(location_box->text());
|
|
};
|
|
|
|
html_widget->on_load_start = [&](auto& url) {
|
|
location_box->set_text(url.to_string());
|
|
};
|
|
|
|
html_widget->on_link_click = [&](auto& url) {
|
|
html_widget->load(html_widget->document()->complete_url(url));
|
|
};
|
|
|
|
html_widget->on_title_change = [&](auto& title) {
|
|
window->set_title(String::format("%s - Browser", title.characters()));
|
|
};
|
|
|
|
auto focus_location_box_action = GAction::create("Focus location box", { Mod_Ctrl, Key_L }, [&](auto&) {
|
|
location_box->select_all();
|
|
location_box->set_focus(true);
|
|
});
|
|
|
|
auto statusbar = GStatusBar::construct(widget);
|
|
|
|
ResourceLoader::the().on_load_counter_change = [&] {
|
|
if (ResourceLoader::the().pending_loads() == 0) {
|
|
statusbar->set_text("");
|
|
return;
|
|
}
|
|
statusbar->set_text(String::format("Loading (%d pending resources...)", ResourceLoader::the().pending_loads()));
|
|
};
|
|
|
|
auto menubar = make<GMenuBar>();
|
|
|
|
auto app_menu = make<GMenu>("Browser");
|
|
app_menu->add_action(GCommonActions::make_quit_action([&](auto&) {
|
|
app.quit();
|
|
}));
|
|
menubar->add_menu(move(app_menu));
|
|
|
|
auto help_menu = make<GMenu>("Help");
|
|
help_menu->add_action(GAction::create("About", [&](const GAction&) {
|
|
GAboutDialog::show("Browser", GraphicsBitmap::load_from_file("/res/icons/32x32/filetype-html.png"), window);
|
|
}));
|
|
menubar->add_menu(move(help_menu));
|
|
|
|
app.set_menubar(move(menubar));
|
|
|
|
window->set_icon(GraphicsBitmap::load_from_file("/res/icons/16x16/filetype-html.png"));
|
|
|
|
window->set_title("Browser");
|
|
window->set_main_widget(widget);
|
|
window->show();
|
|
|
|
URL url_to_load = home_url;
|
|
|
|
if (app.args().size() >= 1) {
|
|
url_to_load = URL();
|
|
url_to_load.set_protocol("file");
|
|
url_to_load.set_path(app.args()[0]);
|
|
}
|
|
|
|
html_widget->load(url_to_load);
|
|
|
|
return app.exec();
|
|
}
|