schema_editor/message_source.cpp

146 lines
5.1 KiB
C++
Raw Permalink Normal View History

2022-06-19 18:10:44 +00:00
//
// Created by bbr on 14.06.22..
//
#include "message_source.h"
#include <utility>
// static instance of application
static MessageSource *messageSource = nullptr;
MessageSource *MessageSource::instance() {
if (messageSource == nullptr) {
messageSource = new MessageSource();
}
return messageSource;
}
void MessageSource::loadDefaults() {
messages.clear();
// TOOLBAR
add("msg_toolbar_load_library", "Load library");
add("msg_toolbar_load_schema", "Load schema");
add("msg_toolbar_save_schema", "Save schema");
add("msg_toolbar_generate_comdel", "Generate comdel");
// SIDEBAR
add("msg_sidebar_components", "Components:");
add("msg_sidebar_busses", "Busses:");
// VALUES
add("msg_boolean_true", "True");
add("msg_boolean_false", "False");
// SUCCESS MESSAGES
add("msg_dialog_success_title", "Success");
add("msg_dialog_success_validation", "No validation errors found!");
add("msg_dialog_success_comdel_generation", "Successfully generate COMDEL model!");
add("msg_dialog_success_save_schema", "Successfully saved schema");
// DEFAULT ACTIONS
add("msg_dialog_actions_ok", "Ok");
add("msg_dialog_actions_cancel", "Cancel");
add("msg_dialog_actions_set", "Set");
add("msg_dialog_actions_update", "Update");
add("msg_dialog_actions_update_named", "Update {name}");
add("msg_dialog_actions_remove_named", "Remove {name}");
// PIN DIALOG
add("msg_pin_update", "Update");
add("msg_pin_remove", "Remove");
add("msg_sa_pin_update_title", "Update {wire1} - {wire2}");
add("msg_sa_pin_remove_title", "Remove {wire1} - {wire2}");
add("msg_pin_update_action", "Update connection");
add("msg_pin_remove_action", "Remove connection");
// ERROR DIALOG
add("msg_dialog_error_title", "Error");
add("msg_dialog_error_close", "Close");
// WARNING DIALOG
add("msg_dialog_warning_title", "Warning");
// ATTRIBUTE DIALOG/ACTION
add("msg_dialog_attribute_update", "Update {attribute}");
add("msg_dialog_attribute_set", "Set {attribute}");
// NAME DIALOG
add("msg_dialog_name_update", "Update name");
// MEMORY DIALOG/ACTION
add("msg_dialog_memory_update", "Update memory");
add("msg_dialog_memory_set", "Set memory");
add("msg_dialog_memory_default", "No memory selected");
// CONNECTION
add("msg_dialog_sa_pin_set", "Set wire");
// VALIDATORS
add("msg_validators_component_min_count", "Missing instances of component {componentName}. Required at least {min}, found {count}!");
add("msg_validators_component_max_count", "Too many instances of component {componentname}. Expected at most {max}, found {count}!");
add("msg_validators_bus_min_count", "Missing instances of bus {busName}. Required at least {min}, found {count}!");
add("msg_validators_bus_max_count", "Too many instances of bus {busName}. Expected at most {max}, found {count}!");
add("msg_validators_memory_not_found", "Cannot find memory instance {memoryReference}");
add("msg_validators_duplicates_found", "Found multiple instances with name {instanceName}");
// LOADING/SAVING DIALOGS
add("msg_files_load_library", "Open library");
add("msg_files_load_library_format", "COMDEL library (*.csl)");
add("msg_files_load_schema", "Open schema");
add("msg_files_load_schema_format", "COMDEL schema (*.csch)");
add("msg_files_store_schema", "Store schema");
add("msg_files_store_schema_format", "COMDEL schema (*.csch)");
add("msg_files_store_comdel", "Store COMDEL system");
add("msg_files_store_comdel_format", "COMDEL system (*.system)");
}
void MessageSource::add(const std::string& key, std::string message) {
messages[key] = message;
}
std::string MessageSource::get(const std::string& key, std::map<std::string, std::string> parametars) {
std::string message;
if(messages.count(key) == 1) {
// if key not found in translations use key as message
message = messages[key];
} else {
message = key;
}
message = populateMessage(message, parametars);
return message;
}
std::string MessageSource::get(const std::string &key) {
return get(key, {});
}
std::string MessageSource::populateMessage(std::string message, std::map<std::string, std::string> parametars) {
for (auto &[key, value]: parametars) {
message = replacePlaceholder(message, key, value);
}
return message;
}
std::string MessageSource::replacePlaceholder(std::string message, const std::string key, std::string value) {
auto wholeKey = "{" + key + "}";
auto found = message.find(wholeKey);
while (found != std::string::npos) {
message.replace(found, wholeKey.length(), value);
found = message.find(key);
}
return message;
}
void MessageSource::load(std::map<std::string, std::string> _messages) {
loadDefaults();
for (auto &[key, value]: _messages) {
messages[key] = value;
}
}
std::map<std::string, std::string> MessageSource::map(std::map<std::string, domain::Value> values) {
std::map<std::string, std::string> parametars;
for (auto &[key, value]: values) {
parametars[key] = value.string();
}
return parametars;
}