1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 05:27:45 +00:00

LibGUI: Add a ClipboardClient for GUI::Clipboard

Anyone who inherits from `GUI::Clipboard::ClipboardClient` will receive
clipboard notifications via `clipboard_content_did_change()`.

Update ClipboardHistoryModel, TextEditor and TerminalWidget to inherit
from this class.
This commit is contained in:
TheFightingCatfish 2021-07-27 03:19:56 +08:00 committed by Andreas Kling
parent 95f393ebcd
commit 0c53c2dfa2
8 changed files with 106 additions and 72 deletions

View file

@ -10,7 +10,8 @@
#include <LibGUI/Clipboard.h>
#include <LibGUI/Model.h>
class ClipboardHistoryModel final : public GUI::Model {
class ClipboardHistoryModel final : public GUI::Model
, public GUI::Clipboard::ClipboardClient {
public:
static NonnullRefPtr<ClipboardHistoryModel> create();
@ -24,16 +25,21 @@ public:
virtual ~ClipboardHistoryModel() override;
const GUI::Clipboard::DataAndType& item_at(int index) const { return m_history_items[index]; }
void add_item(const GUI::Clipboard::DataAndType& item);
void remove_item(int index);
private:
void add_item(const GUI::Clipboard::DataAndType& item);
// ^GUI::Model
virtual int row_count(const GUI::ModelIndex&) const override { return m_history_items.size(); }
virtual String column_name(int) const override;
virtual int column_count(const GUI::ModelIndex&) const override { return Column::__Count; }
virtual GUI::Variant data(const GUI::ModelIndex&, GUI::ModelRole) const override;
virtual void update() override;
// ^GUI::Clipboard::ClipboardClient
virtual void clipboard_content_did_change(const String&) override { add_item(GUI::Clipboard::the().data_and_type()); }
Vector<GUI::Clipboard::DataAndType> m_history_items;
size_t m_history_limit { 20 };
};