mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 23:57:34 +00:00
Ladybird/AppKit: Implement the <input type=file> UI
This commit is contained in:
parent
834f76ef24
commit
a346f14fb4
3 changed files with 45 additions and 0 deletions
|
@ -9,6 +9,7 @@
|
||||||
#include <AK/URL.h>
|
#include <AK/URL.h>
|
||||||
#include <LibGfx/ImageFormats/PNGWriter.h>
|
#include <LibGfx/ImageFormats/PNGWriter.h>
|
||||||
#include <LibGfx/ShareableBitmap.h>
|
#include <LibGfx/ShareableBitmap.h>
|
||||||
|
#include <LibWeb/HTML/SelectedFile.h>
|
||||||
#include <LibWebView/SearchEngine.h>
|
#include <LibWebView/SearchEngine.h>
|
||||||
#include <LibWebView/SourceHighlighter.h>
|
#include <LibWebView/SourceHighlighter.h>
|
||||||
#include <LibWebView/URL.h>
|
#include <LibWebView/URL.h>
|
||||||
|
@ -612,6 +613,42 @@ static void copy_data_to_clipboard(StringView data, NSPasteboardType pasteboard_
|
||||||
[panel makeKeyAndOrderFront:nil];
|
[panel makeKeyAndOrderFront:nil];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
m_web_view_bridge->on_request_file_picker = [self](auto allow_multiple_files) {
|
||||||
|
auto* panel = [NSOpenPanel openPanel];
|
||||||
|
[panel setCanChooseFiles:YES];
|
||||||
|
[panel setCanChooseDirectories:NO];
|
||||||
|
|
||||||
|
if (allow_multiple_files == Web::HTML::AllowMultipleFiles::Yes) {
|
||||||
|
[panel setAllowsMultipleSelection:YES];
|
||||||
|
[panel setMessage:@"Select files"];
|
||||||
|
} else {
|
||||||
|
[panel setAllowsMultipleSelection:NO];
|
||||||
|
[panel setMessage:@"Select file"];
|
||||||
|
}
|
||||||
|
|
||||||
|
[panel beginSheetModalForWindow:[self window]
|
||||||
|
completionHandler:^(NSInteger result) {
|
||||||
|
Vector<Web::HTML::SelectedFile> selected_files;
|
||||||
|
|
||||||
|
auto create_selected_file = [&](NSString* ns_file_path) {
|
||||||
|
auto file_path = Ladybird::ns_string_to_byte_string(ns_file_path);
|
||||||
|
|
||||||
|
if (auto file = Web::HTML::SelectedFile::from_file_path(file_path); file.is_error())
|
||||||
|
warnln("Unable to open file {}: {}", file_path, file.error());
|
||||||
|
else
|
||||||
|
selected_files.append(file.release_value());
|
||||||
|
};
|
||||||
|
|
||||||
|
if (result == NSModalResponseOK) {
|
||||||
|
for (NSURL* url : [panel URLs]) {
|
||||||
|
create_selected_file([url path]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_web_view_bridge->file_picker_closed(move(selected_files));
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
|
||||||
self.select_dropdown = [[NSMenu alloc] initWithTitle:@"Select Dropdown"];
|
self.select_dropdown = [[NSMenu alloc] initWithTitle:@"Select Dropdown"];
|
||||||
[self.select_dropdown setDelegate:self];
|
[self.select_dropdown setDelegate:self];
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <AK/ByteString.h>
|
||||||
#include <AK/String.h>
|
#include <AK/String.h>
|
||||||
#include <AK/StringView.h>
|
#include <AK/StringView.h>
|
||||||
#include <LibGfx/Color.h>
|
#include <LibGfx/Color.h>
|
||||||
|
@ -18,6 +19,7 @@
|
||||||
namespace Ladybird {
|
namespace Ladybird {
|
||||||
|
|
||||||
String ns_string_to_string(NSString*);
|
String ns_string_to_string(NSString*);
|
||||||
|
ByteString ns_string_to_byte_string(NSString*);
|
||||||
NSString* string_to_ns_string(StringView);
|
NSString* string_to_ns_string(StringView);
|
||||||
|
|
||||||
NSData* string_to_ns_data(StringView);
|
NSData* string_to_ns_data(StringView);
|
||||||
|
|
|
@ -14,6 +14,12 @@ String ns_string_to_string(NSString* string)
|
||||||
return MUST(String::from_utf8({ utf8, strlen(utf8) }));
|
return MUST(String::from_utf8({ utf8, strlen(utf8) }));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ByteString ns_string_to_byte_string(NSString* string)
|
||||||
|
{
|
||||||
|
auto const* utf8 = [string UTF8String];
|
||||||
|
return ByteString(utf8, strlen(utf8));
|
||||||
|
}
|
||||||
|
|
||||||
NSString* string_to_ns_string(StringView string)
|
NSString* string_to_ns_string(StringView string)
|
||||||
{
|
{
|
||||||
return [[NSString alloc] initWithData:string_to_ns_data(string) encoding:NSUTF8StringEncoding];
|
return [[NSString alloc] initWithData:string_to_ns_data(string) encoding:NSUTF8StringEncoding];
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue