29 #include <QApplication>
32 #include <QFontDatabase>
47 const char *file = context.file ? context.file :
"";
48 const char *
function = context.function ? context.function :
"";
51 fprintf(stderr,
"Debug: %s (%s:%u, %s)\n", localMsg.
constData(), file, context.line,
function);
54 fprintf(stderr,
"Info: %s (%s:%u, %s)\n", localMsg.
constData(), file, context.line,
function);
57 fprintf(stderr,
"Warning: %s (%s:%u, %s)\n", localMsg.
constData(), file, context.line,
function);
60 fprintf(stderr,
"Critical: %s (%s:%u, %s)\n", localMsg.
constData(), file, context.line,
function);
63 fprintf(stderr,
"Fatal: %s (%s:%u, %s)\n", localMsg.
constData(), file, context.line,
function);
67 if (localMsg.
startsWith(
"QFSFileEngine::open"))
68 fprintf(stderr,
"***break***\n");
73 return std::make_unique<PluginGui>();
92 enum OpenArgs { None = 0, OpenProject = 1, DefaultImport = 2, ImportToProject = 3 } openArgs = None;
94 std::filesystem::path fileName;
99 openArgs = (OpenArgs) (openArgs|OpenProject);
101 log_info(
"gui",
"GUI started with project {}.", projDir.string());
105 openArgs = (OpenArgs) (openArgs|DefaultImport);
106 fileName = std::filesystem::path(args.
get_parameter(
"--import-netlist"));
107 log_info(
"gui",
"GUI started with file {}.", fileName.string());
122 case ImportToProject:
125 log_error(
"gui",
"Cannot create project directory {}.", projDir.string());
133 log_error(
"gui",
"Failed to open netlist '{}'.", fileName.string());
139 static void cleanup()
150 static void mCleanup(
int sig)
154 log_info(
"gui",
"Detected Ctrl+C in terminal");
159 static void mCrashHandler(
int sig)
161 log_info(
"gui",
"Emergency dump of executed actions on signal {}", sig);
223 MainWindow::StyleSheetOption::Dark,
225 "Specifies which theme should be used. Light style is designed to print screenshots and not recommended for regular use."
232 case MainWindow::StyleSheetOption::Dark : styleSheetToOpen =
":/style/dark";
break;
233 case MainWindow::StyleSheetOption::Light : styleSheetToOpen =
":/style/light";
break;
235 default: styleSheetToOpen =
":/style/dark";
238 QFile stylesheet(styleSheetToOpen);
246 qRegisterMetaType<u32>(
"u32");
247 qRegisterMetaType<spdlog::level::level_enum>(
"spdlog::level::level_enum");
248 qRegisterMetaType<std::string>(
"std::string");
260 const int handleSignals[] = { SIGTERM, SIGSEGV, SIGILL, SIGABRT, SIGFPE, 0 };
261 for (
int isignal=0; handleSignals[isignal]; isignal++)
262 signal(handleSignals[isignal], mCrashHandler);
263 signal(SIGINT, mCleanup);
266 handleProgramArguments(args);
274 return std::string(
"hal_gui");
279 return std::string(
"2.0");
284 return std::string(
"GUI control for HAL app (can't be unloaded)");
289 const char* gui_info_channel[] = {
"user",
"gui",
"python",
"UserStudy",
nullptr };
290 for (
int i=0; gui_info_channel[i]; i++)
298 mDescription.
add({
"--gui",
"-g"},
"start graphical user interface");
309 if (mLayoutLockerList.isEmpty())
return;
ProgramOptions get_cli_options() const override
Manages all ContentWidgets.
void openProject(QString projPath)
static FileManager * get_instance()
Holds information about the state (e.g. saved/unsaved) of all loaded files (i.e. ....
User interface to manage all GraphContexts.
Interface to interact with the gui itself.
std::shared_ptr< spdlog::logger > add_channel(const std::string &channel_name, const std::vector< std::shared_ptr< log_sink >> &sinks, const std::string &level="info")
static std::shared_ptr< log_sink > create_gui_sink()
static std::shared_ptr< log_sink > create_file_sink(const std::filesystem::path &file_name="", const bool truncate=false)
static std::shared_ptr< log_sink > create_stdout_sink(const bool colored=true)
static LogManager * get_instance(const std::filesystem::path &file_name="")
void set_file_name(const std::filesystem::path &file_name)
static SettingsItemDropdown * sSettingStyle
Connects the hal-core events to the gui.
std::string get_version() const override
void initialize_logging() override
bool exec(ProgramArguments &args) override
void set_layout_locker(bool enable) override
std::string get_description() const override
std::string get_name() const override
Forwards plugin related events from the core to the gui.
std::string get_parameter(const std::string &flag) const
void get_original_arguments(int *argc, const char ***argv)
bool is_option_set(const std::string &flag) const
bool add(const std::string &flag, const std::string &description, const std::initializer_list< std::string > ¶meters={})
std::filesystem::path get_default_filename(const std::string &extension=std::string()) const
static ProjectManager * instance()
bool create_project_directory(const std::string &path)
const ProjectDirectory & get_project_directory() const
Stores and manages the gui's selection state.
A SettingsItem that represents a dropdown menu.
virtual QVariant value() const override
static UserActionManager * instance()
#define log_error(channel,...)
#define log_info(channel,...)
std::filesystem::path get_user_config_directory()
PythonContext * gPythonContext
ContentManager * gContentManager
void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
PluginRelay * gPluginRelay
FileStatusManager * gFileStatusManager
std::unique_ptr< BasePluginInterface > create_plugin_instance()
GraphContextManager * gGraphContextManager
SelectionRelay * gSelectionRelay
CommentManager * gCommentManager
NetlistRelay * gNetlistRelay
std::shared_ptr< Netlist > gNetlistOwner
void setStyleSheet(const QString &sheet)
const char * constData() const const
bool startsWith(const QByteArray &ba) const const
void setApplicationName(const QString &application)
void exit(int returnCode)
void setOrganizationDomain(const QString &orgDomain)
void setOrganizationName(const QString &orgName)
void setAttribute(Qt::ApplicationAttribute attribute, bool on)
virtual bool open(QIODevice::OpenMode mode) override
virtual void close() override
int addApplicationFont(const QString &fileName)
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
bool registerResource(const QString &rccFileName, const QString &mapRoot)
QString fromStdString(const std::string &str)
QByteArray toLocal8Bit() const const
int toInt(bool *ok) const const