TextEditor: Make use of GFilePicker to select a file to open

This commit is contained in:
Robin Burchell 2019-05-16 02:47:28 +02:00 committed by Andreas Kling
parent 23c90da26c
commit cef161c2bc
Notes: sideshowbarker 2024-07-19 14:07:06 +09:00

View file

@ -2,6 +2,8 @@
#include <LibGUI/GWidget.h> #include <LibGUI/GWidget.h>
#include <LibGUI/GBoxLayout.h> #include <LibGUI/GBoxLayout.h>
#include <LibGUI/GApplication.h> #include <LibGUI/GApplication.h>
#include <LibGUI/GFilePicker.h>
#include <LibGUI/GMessageBox.h>
#include <LibGUI/GStatusBar.h> #include <LibGUI/GStatusBar.h>
#include <LibGUI/GToolBar.h> #include <LibGUI/GToolBar.h>
#include <LibGUI/GMenuBar.h> #include <LibGUI/GMenuBar.h>
@ -15,10 +17,23 @@
#include <signal.h> #include <signal.h>
#include <fcntl.h> #include <fcntl.h>
void open_sesame(GWindow& window, GTextEditor& editor, const String& path)
{
CFile file(path);
if (!file.open(CIODevice::ReadOnly)) {
GMessageBox::show(String::format("Opening \"%s\" failed: %s", path.characters(), strerror(errno)), "Error", GMessageBox::Type::Error, &window);
}
window.set_title(String::format("TextEditor: %s", path.characters()));
editor.set_text(String::copy(file.read_all()));
}
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
GApplication app(argc, argv); GApplication app(argc, argv);
auto* window = new GWindow;
auto* widget = new GWidget; auto* widget = new GWidget;
widget->set_layout(make<GBoxLayout>(Orientation::Vertical)); widget->set_layout(make<GBoxLayout>(Orientation::Vertical));
widget->layout()->set_spacing(0); widget->layout()->set_spacing(0);
@ -38,21 +53,19 @@ int main(int argc, char** argv)
String path = "/tmp/TextEditor.save.txt"; String path = "/tmp/TextEditor.save.txt";
if (argc >= 2) { if (argc >= 2) {
path = argv[1]; path = argv[1];
CFile file(path); open_sesame(*window, *text_editor, path);
if (!file.open(CIODevice::ReadOnly)) {
fprintf(stderr, "Opening %s: %s\n", path.characters(), file.error_string());
return 1;
}
text_editor->set_text(String::copy(file.read_all()));
} }
auto new_action = GAction::create("New document", { Mod_Ctrl, Key_N }, GraphicsBitmap::load_from_file("/res/icons/16x16/new.png"), [] (const GAction&) { auto new_action = GAction::create("New document", { Mod_Ctrl, Key_N }, GraphicsBitmap::load_from_file("/res/icons/16x16/new.png"), [] (const GAction&) {
dbgprintf("FIXME: Implement File/New\n"); dbgprintf("FIXME: Implement File/New\n");
}); });
auto open_action = GAction::create("Open document", { Mod_Ctrl, Key_O }, GraphicsBitmap::load_from_file("/res/icons/16x16/open.png"), [] (const GAction&) { auto open_action = GAction::create("Open document", { Mod_Ctrl, Key_O }, GraphicsBitmap::load_from_file("/res/icons/16x16/open.png"), [window, text_editor, &path](const GAction&) {
dbgprintf("FIXME: Implement File/Open\n"); GFilePicker picker;
if (picker.exec() == GDialog::ExecOK) {
path = picker.selected_file();
open_sesame(*window, *text_editor, path);
}
}); });
auto save_action = GAction::create("Save document", { Mod_Ctrl, Key_S }, GraphicsBitmap::load_from_file("/res/icons/16x16/save.png"), [&] (const GAction&) { auto save_action = GAction::create("Save document", { Mod_Ctrl, Key_S }, GraphicsBitmap::load_from_file("/res/icons/16x16/save.png"), [&] (const GAction&) {
@ -117,8 +130,6 @@ int main(int argc, char** argv)
toolbar->add_action(text_editor->undo_action()); toolbar->add_action(text_editor->undo_action());
toolbar->add_action(text_editor->redo_action()); toolbar->add_action(text_editor->redo_action());
auto* window = new GWindow;
window->set_title(String::format("TextEditor: %s", path.characters()));
window->set_rect(20, 200, 640, 400); window->set_rect(20, 200, 640, 400);
window->set_main_widget(widget); window->set_main_widget(widget);
window->set_should_exit_event_loop_on_close(true); window->set_should_exit_event_loop_on_close(true);