/* * Copyright (c) 2020, Emanuel Sprung * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Browser { class BookmarksBarWidget final : public GUI::Widget , private GUI::ModelClient { C_OBJECT(BookmarksBarWidget); public: static BookmarksBarWidget& the(); virtual ~BookmarksBarWidget() override; void set_model(RefPtr); GUI::Model* model() { return m_model.ptr(); } const GUI::Model* model() const { return m_model.ptr(); } enum class Open { InNewTab, InSameTab, InNewWindow }; Function on_bookmark_click; Function on_bookmark_hover; bool contains_bookmark(DeprecatedString const& url); bool remove_bookmark(DeprecatedString const& url); bool add_bookmark(DeprecatedString const& url, DeprecatedString const& title); bool edit_bookmark(DeprecatedString const& url); virtual Optional calculated_min_size() const override { // Large enough to fit the `m_additional` button. return GUI::UISize(20, 20); } private: BookmarksBarWidget(DeprecatedString const&, bool enabled); // ^GUI::ModelClient virtual void model_did_update(unsigned) override; // ^GUI::Widget virtual void resize_event(GUI::ResizeEvent&) override; void update_content_size(); RefPtr m_model; RefPtr m_additional; RefPtr m_separator; RefPtr m_additional_menu; RefPtr m_context_menu; RefPtr m_context_menu_default_action; DeprecatedString m_context_menu_url; NonnullRefPtrVector m_bookmarks; int m_last_visible_index { -1 }; }; }