mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 18:37:34 +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:
parent
95f393ebcd
commit
0c53c2dfa2
8 changed files with 106 additions and 72 deletions
|
@ -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 };
|
||||
};
|
||||
|
|
|
@ -49,11 +49,6 @@ int main(int argc, char* argv[])
|
|||
auto model = ClipboardHistoryModel::create();
|
||||
table_view.set_model(model);
|
||||
|
||||
GUI::Clipboard::the().on_change = [&](const String&) {
|
||||
auto item = GUI::Clipboard::the().data_and_type();
|
||||
model->add_item(item);
|
||||
};
|
||||
|
||||
table_view.on_activation = [&](const GUI::ModelIndex& index) {
|
||||
auto& data_and_type = model->item_at(index.row());
|
||||
GUI::Clipboard::the().set_data(data_and_type.data, data_and_type.mime_type, data_and_type.metadata);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue