mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 15:40:19 +00:00
Ladybird/Qt: Add an Inspector context menu to edit the DOM
This commit is contained in:
parent
5006330bc6
commit
be53596fe6
Notes:
sideshowbarker
2024-07-17 05:13:53 +09:00
Author: https://github.com/trflynn89 Commit: https://github.com/SerenityOS/serenity/commit/be53596fe6 Pull-request: https://github.com/SerenityOS/serenity/pull/22182
2 changed files with 73 additions and 0 deletions
|
@ -5,8 +5,11 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "InspectorWidget.h"
|
#include "InspectorWidget.h"
|
||||||
|
#include <Ladybird/Qt/StringUtils.h>
|
||||||
#include <LibWebView/InspectorClient.h>
|
#include <LibWebView/InspectorClient.h>
|
||||||
|
#include <QAction>
|
||||||
#include <QCloseEvent>
|
#include <QCloseEvent>
|
||||||
|
#include <QMenu>
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
|
|
||||||
namespace Ladybird {
|
namespace Ladybird {
|
||||||
|
@ -23,6 +26,55 @@ InspectorWidget::InspectorWidget(QWidget* tab, WebContentView& content_view)
|
||||||
|
|
||||||
m_inspector_client = make<WebView::InspectorClient>(content_view, *m_inspector_view);
|
m_inspector_client = make<WebView::InspectorClient>(content_view, *m_inspector_view);
|
||||||
|
|
||||||
|
m_edit_node_action = new QAction("&Edit node", this);
|
||||||
|
connect(m_edit_node_action, &QAction::triggered, [this]() { m_inspector_client->context_menu_edit_dom_node(); });
|
||||||
|
|
||||||
|
m_delete_node_action = new QAction("&Delete node", this);
|
||||||
|
connect(m_delete_node_action, &QAction::triggered, [this]() { m_inspector_client->context_menu_remove_dom_node(); });
|
||||||
|
|
||||||
|
m_add_attribute_action = new QAction("&Add attribute", this);
|
||||||
|
connect(m_add_attribute_action, &QAction::triggered, [this]() { m_inspector_client->context_menu_add_dom_node_attribute(); });
|
||||||
|
|
||||||
|
m_remove_attribute_action = new QAction("&Remove attribute", this);
|
||||||
|
connect(m_remove_attribute_action, &QAction::triggered, [this]() { m_inspector_client->context_menu_remove_dom_node_attribute(); });
|
||||||
|
|
||||||
|
m_dom_node_text_context_menu = new QMenu("DOM text context menu", this);
|
||||||
|
m_dom_node_text_context_menu->addAction(m_edit_node_action);
|
||||||
|
m_dom_node_text_context_menu->addSeparator();
|
||||||
|
m_dom_node_text_context_menu->addAction(m_delete_node_action);
|
||||||
|
|
||||||
|
m_dom_node_tag_context_menu = new QMenu("DOM tag context menu", this);
|
||||||
|
m_dom_node_tag_context_menu->addAction(m_edit_node_action);
|
||||||
|
m_dom_node_tag_context_menu->addSeparator();
|
||||||
|
m_dom_node_tag_context_menu->addAction(m_add_attribute_action);
|
||||||
|
m_dom_node_tag_context_menu->addAction(m_delete_node_action);
|
||||||
|
|
||||||
|
m_dom_node_attribute_context_menu = new QMenu("DOM attribute context menu", this);
|
||||||
|
m_dom_node_attribute_context_menu->addAction(m_edit_node_action);
|
||||||
|
m_dom_node_attribute_context_menu->addAction(m_remove_attribute_action);
|
||||||
|
m_dom_node_attribute_context_menu->addSeparator();
|
||||||
|
m_dom_node_attribute_context_menu->addAction(m_add_attribute_action);
|
||||||
|
m_dom_node_attribute_context_menu->addAction(m_delete_node_action);
|
||||||
|
|
||||||
|
m_inspector_client->on_requested_dom_node_text_context_menu = [this](auto position) {
|
||||||
|
m_edit_node_action->setText("&Edit text");
|
||||||
|
|
||||||
|
m_dom_node_text_context_menu->exec(to_widget_position(position));
|
||||||
|
};
|
||||||
|
|
||||||
|
m_inspector_client->on_requested_dom_node_tag_context_menu = [this](auto position, auto const& tag) {
|
||||||
|
m_edit_node_action->setText(qstring_from_ak_string(MUST(String::formatted("&Edit \"{}\"", tag))));
|
||||||
|
|
||||||
|
m_dom_node_tag_context_menu->exec(to_widget_position(position));
|
||||||
|
};
|
||||||
|
|
||||||
|
m_inspector_client->on_requested_dom_node_attribute_context_menu = [this](auto position, auto const& attribute) {
|
||||||
|
m_edit_node_action->setText(qstring_from_ak_string(MUST(String::formatted("&Edit attribute \"{}\"", attribute))));
|
||||||
|
m_remove_attribute_action->setText(qstring_from_ak_string(MUST(String::formatted("&Remove attribute \"{}\"", attribute))));
|
||||||
|
|
||||||
|
m_dom_node_attribute_context_menu->exec(to_widget_position(position));
|
||||||
|
};
|
||||||
|
|
||||||
setLayout(new QVBoxLayout);
|
setLayout(new QVBoxLayout);
|
||||||
layout()->addWidget(m_inspector_view);
|
layout()->addWidget(m_inspector_view);
|
||||||
|
|
||||||
|
@ -58,4 +110,10 @@ void InspectorWidget::closeEvent(QCloseEvent* event)
|
||||||
m_inspector_client->clear_selection();
|
m_inspector_client->clear_selection();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QPoint InspectorWidget::to_widget_position(Gfx::IntPoint position) const
|
||||||
|
{
|
||||||
|
auto widget_position = m_inspector_view->mapTo(this, QPoint { position.x(), position.y() });
|
||||||
|
return mapToGlobal(widget_position);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,9 +7,13 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "WebContentView.h"
|
#include "WebContentView.h"
|
||||||
|
#include <LibGfx/Point.h>
|
||||||
#include <LibWebView/Forward.h>
|
#include <LibWebView/Forward.h>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
|
||||||
|
class QAction;
|
||||||
|
class QMenu;
|
||||||
|
|
||||||
namespace Ladybird {
|
namespace Ladybird {
|
||||||
|
|
||||||
class WebContentView;
|
class WebContentView;
|
||||||
|
@ -30,8 +34,19 @@ public:
|
||||||
private:
|
private:
|
||||||
void closeEvent(QCloseEvent*) override;
|
void closeEvent(QCloseEvent*) override;
|
||||||
|
|
||||||
|
QPoint to_widget_position(Gfx::IntPoint) const;
|
||||||
|
|
||||||
WebContentView* m_inspector_view;
|
WebContentView* m_inspector_view;
|
||||||
OwnPtr<WebView::InspectorClient> m_inspector_client;
|
OwnPtr<WebView::InspectorClient> m_inspector_client;
|
||||||
|
|
||||||
|
QMenu* m_dom_node_text_context_menu { nullptr };
|
||||||
|
QMenu* m_dom_node_tag_context_menu { nullptr };
|
||||||
|
QMenu* m_dom_node_attribute_context_menu { nullptr };
|
||||||
|
|
||||||
|
QAction* m_edit_node_action { nullptr };
|
||||||
|
QAction* m_delete_node_action { nullptr };
|
||||||
|
QAction* m_add_attribute_action { nullptr };
|
||||||
|
QAction* m_remove_attribute_action { nullptr };
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue