mirror of
https://github.com/ashaduri/gsmartcontrol.git
synced 2026-09-29 07:05:34 +00:00
110 lines
2.9 KiB
C++
110 lines
2.9 KiB
C++
/******************************************************************************
|
|
License: GNU General Public License v3.0 only
|
|
Copyright:
|
|
(C) 2008 - 2021 Alexander Shaduri <ashaduri@gmail.com>
|
|
******************************************************************************/
|
|
/// \file
|
|
/// \author Alexander Shaduri
|
|
/// \ingroup gsc
|
|
/// \weakgroup gsc
|
|
/// @{
|
|
|
|
#include "local_glibmm.h"
|
|
#include <gtkmm.h>
|
|
|
|
#include "gsc_executor_log_window.h"
|
|
#include "gsc_executor_error_dialog.h"
|
|
#include "gsc_text_window.h"
|
|
|
|
|
|
|
|
|
|
namespace {
|
|
|
|
/// Helper function
|
|
inline int show_executor_dialog(Gtk::MessageType type,
|
|
const std::string& message, const std::string& sec_message,
|
|
Gtk::Window* parent, bool sec_msg_markup, bool show_output_button)
|
|
{
|
|
// no markup, modal
|
|
Gtk::MessageDialog dialog("\n" + message + (sec_message.empty() ? "\n" : ""),
|
|
false, type, Gtk::BUTTONS_NONE, true);
|
|
|
|
if (!sec_message.empty())
|
|
dialog.set_secondary_text(sec_message, sec_msg_markup);
|
|
|
|
if (parent) {
|
|
dialog.set_transient_for(*parent);
|
|
dialog.set_position(Gtk::WIN_POS_CENTER_ON_PARENT);
|
|
} else {
|
|
dialog.set_position(Gtk::WIN_POS_MOUSE);
|
|
}
|
|
|
|
|
|
Gtk::Button ok_button(Gtk::Stock::OK);
|
|
ok_button.show_all();
|
|
ok_button.set_can_default(true);
|
|
dialog.add_action_widget(ok_button, Gtk::RESPONSE_OK);
|
|
|
|
|
|
Gtk::Button output_button(_("_Show Output"), true); // don't put this inside if, it needs to live beyond it.
|
|
if (show_output_button) {
|
|
output_button.show_all();
|
|
dialog.add_action_widget(output_button, Gtk::RESPONSE_HELP);
|
|
}
|
|
|
|
dialog.set_default_response(Gtk::RESPONSE_OK);
|
|
|
|
|
|
const int response = dialog.run(); // blocks until the dialog is closed
|
|
|
|
return response;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void gsc_executor_error_dialog_show(const std::string& message, const std::string& sec_message,
|
|
Gtk::Window* parent, bool sec_msg_markup, bool show_output_button)
|
|
{
|
|
const int response = show_executor_dialog(Gtk::MESSAGE_ERROR, message, sec_message,
|
|
parent, sec_msg_markup, show_output_button);
|
|
|
|
if (response == Gtk::RESPONSE_HELP) {
|
|
// this one will only hide on close.
|
|
auto win = GscExecutorLogWindow::create(); // probably already created
|
|
// win->set_transient_for(*this); // don't do this - it will make it always-on-top of this.
|
|
win->show_last(); // show the window and select last entry
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void gsc_no_info_dialog_show(const std::string& message, const std::string& sec_message,
|
|
Gtk::Window* parent, bool sec_msg_markup, const std::string& output,
|
|
const std::string& output_window_title, const std::string& default_save_filename)
|
|
{
|
|
const int response = show_executor_dialog(Gtk::MESSAGE_WARNING, message, sec_message,
|
|
parent, sec_msg_markup, !output.empty());
|
|
|
|
if (response == Gtk::RESPONSE_HELP) {
|
|
auto win = GscTextWindow<SmartctlOutputInstance>::create();
|
|
win->set_text_from_command(output_window_title, output);
|
|
|
|
if (!default_save_filename.empty())
|
|
win->set_save_filename(default_save_filename);
|
|
|
|
win->show();
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// @}
|