mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 08:17:45 +00:00
PixelPaint: Close tab now prompts for a save
This commit is contained in:
parent
a7b558bf7d
commit
d4a0ecac31
3 changed files with 39 additions and 11 deletions
|
@ -22,6 +22,7 @@
|
||||||
#include <LibGUI/Menubar.h>
|
#include <LibGUI/Menubar.h>
|
||||||
#include <LibGUI/MessageBox.h>
|
#include <LibGUI/MessageBox.h>
|
||||||
#include <LibGUI/Toolbar.h>
|
#include <LibGUI/Toolbar.h>
|
||||||
|
#include <LibGUI/Window.h>
|
||||||
#include <LibGfx/Bitmap.h>
|
#include <LibGfx/Bitmap.h>
|
||||||
|
|
||||||
namespace PixelPaint {
|
namespace PixelPaint {
|
||||||
|
@ -61,16 +62,16 @@ MainWidget::MainWidget()
|
||||||
};
|
};
|
||||||
|
|
||||||
m_tab_widget->on_tab_close_click = [&](auto& widget) {
|
m_tab_widget->on_tab_close_click = [&](auto& widget) {
|
||||||
auto& image_editor = verify_cast<PixelPaint::ImageEditor>(widget);
|
if (request_close()) {
|
||||||
|
auto& image_editor = verify_cast<PixelPaint::ImageEditor>(widget);
|
||||||
if (m_tab_widget->children().size() == 1) {
|
m_tab_widget->deferred_invoke([&] {
|
||||||
m_layer_list_widget->set_image(nullptr);
|
m_tab_widget->remove_tab(image_editor);
|
||||||
m_layer_properties_widget->set_layer(nullptr);
|
if (m_tab_widget->children().size() == 1) {
|
||||||
|
m_layer_list_widget->set_image(nullptr);
|
||||||
|
m_layer_properties_widget->set_layer(nullptr);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
m_tab_widget->deferred_invoke([&] {
|
|
||||||
m_tab_widget->remove_tab(image_editor);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
m_tab_widget->on_change = [&](auto& widget) {
|
m_tab_widget->on_change = [&](auto& widget) {
|
||||||
|
@ -173,8 +174,9 @@ void MainWidget::initialize_menubar(GUI::Window& window)
|
||||||
return;
|
return;
|
||||||
m_tab_widget->on_tab_close_click(*active_widget);
|
m_tab_widget->on_tab_close_click(*active_widget);
|
||||||
}));
|
}));
|
||||||
file_menu.add_action(GUI::CommonActions::make_quit_action([](auto&) {
|
file_menu.add_action(GUI::CommonActions::make_quit_action([this](auto&) {
|
||||||
GUI::Application::the()->quit();
|
if (request_close())
|
||||||
|
GUI::Application::the()->quit();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
auto& edit_menu = window.add_menu("&Edit");
|
auto& edit_menu = window.add_menu("&Edit");
|
||||||
|
@ -748,6 +750,24 @@ void MainWidget::create_default_image()
|
||||||
editor.set_active_layer(bg_layer);
|
editor.set_active_layer(bg_layer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool MainWidget::request_close()
|
||||||
|
{
|
||||||
|
if (m_tab_widget->children().is_empty())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
auto result = GUI::MessageBox::show(window(), "Save before closing?", "Save changes", GUI::MessageBox::Type::Warning, GUI::MessageBox::InputType::YesNoCancel);
|
||||||
|
|
||||||
|
if (result == GUI::MessageBox::ExecYes) {
|
||||||
|
m_save_image_as_action->activate();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result == GUI::MessageBox::ExecNo)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
ImageEditor* MainWidget::current_image_editor()
|
ImageEditor* MainWidget::current_image_editor()
|
||||||
{
|
{
|
||||||
if (!m_tab_widget->active_widget())
|
if (!m_tab_widget->active_widget())
|
||||||
|
|
|
@ -35,6 +35,7 @@ public:
|
||||||
|
|
||||||
void open_image_fd(int fd, String const& path);
|
void open_image_fd(int fd, String const& path);
|
||||||
void create_default_image();
|
void create_default_image();
|
||||||
|
bool request_close();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
MainWidget();
|
MainWidget();
|
||||||
|
|
|
@ -68,8 +68,15 @@ int main(int argc, char** argv)
|
||||||
window->set_icon(app_icon.bitmap_for_size(16));
|
window->set_icon(app_icon.bitmap_for_size(16));
|
||||||
|
|
||||||
auto& main_widget = window->set_main_widget<PixelPaint::MainWidget>();
|
auto& main_widget = window->set_main_widget<PixelPaint::MainWidget>();
|
||||||
|
|
||||||
main_widget.initialize_menubar(*window);
|
main_widget.initialize_menubar(*window);
|
||||||
|
|
||||||
|
window->on_close_request = [&]() -> GUI::Window::CloseRequestDecision {
|
||||||
|
if (main_widget.request_close())
|
||||||
|
return GUI::Window::CloseRequestDecision::Close;
|
||||||
|
return GUI::Window::CloseRequestDecision::StayOpen;
|
||||||
|
};
|
||||||
|
|
||||||
auto& statusbar = *main_widget.find_descendant_of_type_named<GUI::Statusbar>("statusbar");
|
auto& statusbar = *main_widget.find_descendant_of_type_named<GUI::Statusbar>("statusbar");
|
||||||
|
|
||||||
app->on_action_enter = [&statusbar](GUI::Action& action) {
|
app->on_action_enter = [&statusbar](GUI::Action& action) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue