From cd0f5087a71df76c0588f06224420504cae65b7f Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Mon, 27 Nov 2023 16:42:40 -0500 Subject: [PATCH] Ladybird/AppKit: Port the Inspector to the WebView property tables --- Ladybird/AppKit/UI/Inspector.mm | 201 ++------------------------------ 1 file changed, 8 insertions(+), 193 deletions(-) diff --git a/Ladybird/AppKit/UI/Inspector.mm b/Ladybird/AppKit/UI/Inspector.mm index 0e78383089..ce9084a1f1 100644 --- a/Ladybird/AppKit/UI/Inspector.mm +++ b/Ladybird/AppKit/UI/Inspector.mm @@ -4,16 +4,12 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include -#include -#include #include #include #import #import #import -#import #if !__has_feature(objc_arc) # error "This project requires ARC" @@ -22,36 +18,13 @@ static constexpr CGFloat const WINDOW_WIDTH = 875; static constexpr CGFloat const WINDOW_HEIGHT = 825; -static NSString* const CSS_PROPERTY_COLUMN = @"Property"; -static NSString* const CSS_VALUE_COLUMN = @"Value"; - -template<> -struct AK::Traits : public DefaultTraits { - static unsigned hash(NSDictionary* dictionary) - { - return [dictionary hash]; - } -}; - -@interface Inspector () +@interface Inspector () { OwnPtr m_inspector_client; } @property (nonatomic, strong) Tab* tab; -@property (nonatomic, strong) NSTableView* computed_style_table_view; -@property (nonatomic, strong) NSDictionary* computed_style; -@property (nonatomic, strong) NSArray* computed_style_keys; - -@property (nonatomic, strong) NSTableView* resolved_style_table_view; -@property (nonatomic, strong) NSDictionary* resolved_style; -@property (nonatomic, strong) NSArray* resolved_style_keys; - -@property (nonatomic, strong) NSTableView* variables_table_view; -@property (nonatomic, strong) NSDictionary* variables; -@property (nonatomic, strong) NSArray* variables_keys; - @end @implementation Inspector @@ -80,34 +53,17 @@ struct AK::Traits : public DefaultTraits { m_inspector_client = make([[tab web_view] view], [[self web_view] view]); - __weak Inspector* weak_self = self; + auto* scroll_view = [[NSScrollView alloc] init]; + [scroll_view setHasVerticalScroller:YES]; + [scroll_view setHasHorizontalScroller:YES]; + [scroll_view setLineScroll:24]; - m_inspector_client->on_dom_node_properties_received = [weak_self](auto properties) { - Inspector* strong_self = weak_self; - if (strong_self == nil) { - return; - } + [scroll_view setContentView:self.web_view]; + [scroll_view setDocumentView:[[NSView alloc] init]]; - [strong_self onDOMNodePropertiesReceived:move(properties)]; - }; - - auto* split_view = [[NSSplitView alloc] initWithFrame:[self frame]]; - [split_view setDividerStyle:NSSplitViewDividerStylePaneSplitter]; - - [self initializeInspectorView:split_view]; - - auto* bottom_tab_view = [[NSTabView alloc] init]; - [split_view addSubview:bottom_tab_view]; - - [self initializeCSSTables:bottom_tab_view]; - [self reset]; - - [self setContentView:split_view]; + [self setContentView:scroll_view]; [self setTitle:@"Inspector"]; [self setIsVisible:YES]; - - auto split_view_height = [split_view frame].size.height; - [split_view setPosition:(split_view_height * 0.6f) ofDividerAtIndex:0]; } return self; @@ -129,18 +85,6 @@ struct AK::Traits : public DefaultTraits { - (void)reset { m_inspector_client->reset(); - - self.computed_style = @{}; - self.computed_style_keys = @[]; - [self.computed_style_table_view reloadData]; - - self.resolved_style = @{}; - self.resolved_style_keys = @[]; - [self.resolved_style_table_view reloadData]; - - self.variables = @{}; - self.variables_keys = @[]; - [self.variables_table_view reloadData]; } - (void)selectHoveredElement @@ -148,133 +92,4 @@ struct AK::Traits : public DefaultTraits { m_inspector_client->select_hovered_node(); } -#pragma mark - Private methods - -- (void)initializeInspectorView:(NSSplitView*)split_view -{ - auto* scroll_view = [[NSScrollView alloc] init]; - [scroll_view setHasVerticalScroller:YES]; - [scroll_view setHasHorizontalScroller:YES]; - [scroll_view setLineScroll:24]; - - [scroll_view setContentView:self.web_view]; - [scroll_view setDocumentView:[[NSView alloc] init]]; - - [split_view addSubview:scroll_view]; -} - -- (NSTableView*)createCSSTable:(NSTabView*)tab_view identifier:(NSString*)identifier -{ - auto* tab = [[NSTabViewItem alloc] initWithIdentifier:identifier]; - [tab setLabel:identifier]; - - auto* scroll_view = [[NSScrollView alloc] init]; - [scroll_view setHasVerticalScroller:YES]; - [scroll_view setHasHorizontalScroller:YES]; - [scroll_view setLineScroll:24]; - [tab setView:scroll_view]; - - auto* table_view = [[NSTableView alloc] initWithFrame:[tab_view frame]]; - [table_view setDataSource:self]; - [table_view setColumnAutoresizingStyle:NSTableViewUniformColumnAutoresizingStyle]; - [scroll_view setDocumentView:table_view]; - - auto* property_column = [[NSTableColumn alloc] initWithIdentifier:CSS_PROPERTY_COLUMN]; - [property_column setTitle:CSS_PROPERTY_COLUMN]; - [table_view addTableColumn:property_column]; - - auto* value_column = [[NSTableColumn alloc] initWithIdentifier:CSS_VALUE_COLUMN]; - [value_column setTitle:CSS_VALUE_COLUMN]; - [table_view addTableColumn:value_column]; - - [tab_view addTabViewItem:tab]; - - return table_view; -} - -- (void)initializeCSSTables:(NSTabView*)tab_view -{ - self.computed_style_table_view = [self createCSSTable:tab_view identifier:@"Computed Style"]; - self.resolved_style_table_view = [self createCSSTable:tab_view identifier:@"Resolved Style"]; - self.variables_table_view = [self createCSSTable:tab_view identifier:@"Variables"]; -} - -- (void)onDOMNodePropertiesReceived:(ErrorOr)properties -{ - auto deserialize_json = [](auto const& json) { - auto* dictionary = Ladybird::deserialize_json_to_dictionary(json); - if (!dictionary) { - return @{}; - } - - return dictionary; - }; - - if (!properties.is_error()) { - self.computed_style = deserialize_json(properties.value().computed_style_json); - self.resolved_style = deserialize_json(properties.value().resolved_style_json); - self.variables = deserialize_json(properties.value().custom_properties_json); - } else { - self.computed_style = @{}; - self.resolved_style = @{}; - self.variables = @{}; - } - - self.computed_style_keys = [[self.computed_style allKeys] sortedArrayUsingSelector:@selector(compare:)]; - [self.computed_style_table_view reloadData]; - - self.resolved_style_keys = [[self.resolved_style allKeys] sortedArrayUsingSelector:@selector(compare:)]; - [self.resolved_style_table_view reloadData]; - - self.variables_keys = [[self.variables allKeys] sortedArrayUsingSelector:@selector(compare:)]; - [self.variables_table_view reloadData]; -} - -#pragma mark - NSTableViewDataSource - -- (NSInteger)numberOfRowsInTableView:(NSTableView*)table_view -{ - if (table_view == self.computed_style_table_view) { - return static_cast(self.computed_style.count); - } - if (table_view == self.resolved_style_table_view) { - return static_cast(self.resolved_style.count); - } - if (table_view == self.variables_table_view) { - return static_cast(self.variables.count); - } - - return 0; -} - -- (id)tableView:(NSTableView*)table_view - objectValueForTableColumn:(NSTableColumn*)table_column - row:(NSInteger)row -{ - NSDictionary* values = nil; - NSArray* keys = nil; - - if (table_view == self.computed_style_table_view) { - values = self.computed_style; - keys = self.computed_style_keys; - } else if (table_view == self.resolved_style_table_view) { - values = self.resolved_style; - keys = self.resolved_style_keys; - } else if (table_view == self.variables_table_view) { - values = self.variables; - keys = self.variables_keys; - } else { - return nil; - } - - if ([[table_column identifier] isEqualToString:CSS_PROPERTY_COLUMN]) { - return keys[row]; - } - if ([[table_column identifier] isEqualToString:CSS_VALUE_COLUMN]) { - return values[keys[row]]; - } - - return nil; -} - @end