pattern/ux: Added copying support to console, clip content, removed prefix

This commit is contained in:
WerWolv 2022-01-24 00:45:46 +01:00
parent 541c0d7547
commit 65212f22a6
3 changed files with 84 additions and 67 deletions

View File

@ -5,13 +5,7 @@
namespace hex::pl { namespace hex::pl {
void LogConsole::log(Level level, const std::string &message) { void LogConsole::log(Level level, const std::string &message) {
switch (level) { this->m_consoleLog.emplace_back(level, message);
default:
case Level::Debug: this->m_consoleLog.emplace_back(level, "[-] " + message); break;
case Level::Info: this->m_consoleLog.emplace_back(level, "[i] " + message); break;
case Level::Warning: this->m_consoleLog.emplace_back(level, "[*] " + message); break;
case Level::Error: this->m_consoleLog.emplace_back(level, "[!] " + message); break;
}
} }
[[noreturn]] [[noreturn]]

View File

@ -158,32 +158,46 @@ namespace hex::plugin::builtin {
if (ImGui::BeginTabBar("about_tab_bar")) { if (ImGui::BeginTabBar("about_tab_bar")) {
if (ImGui::BeginTabItem("ImHex")) { if (ImGui::BeginTabItem("ImHex")) {
ImGui::NewLine(); if (ImGui::BeginChild(1)) {
this->drawAboutMainPage(); this->drawAboutMainPage();
}
ImGui::EndChild();
ImGui::EndTabItem(); ImGui::EndTabItem();
} }
if (ImGui::BeginTabItem("hex.builtin.view.help.about.contributor"_lang)) { if (ImGui::BeginTabItem("hex.builtin.view.help.about.contributor"_lang)) {
ImGui::NewLine(); ImGui::NewLine();
this->drawContributorPage(); if (ImGui::BeginChild(1)) {
this->drawContributorPage();
}
ImGui::EndChild();
ImGui::EndTabItem(); ImGui::EndTabItem();
} }
if (ImGui::BeginTabItem("hex.builtin.view.help.about.libs"_lang)) { if (ImGui::BeginTabItem("hex.builtin.view.help.about.libs"_lang)) {
ImGui::NewLine(); ImGui::NewLine();
this->drawLibraryCreditsPage(); if (ImGui::BeginChild(1)) {
this->drawLibraryCreditsPage();
}
ImGui::EndChild();
ImGui::EndTabItem(); ImGui::EndTabItem();
} }
if (ImGui::BeginTabItem("hex.builtin.view.help.about.paths"_lang)) { if (ImGui::BeginTabItem("hex.builtin.view.help.about.paths"_lang)) {
ImGui::NewLine(); ImGui::NewLine();
this->drawPathsPage(); if (ImGui::BeginChild(1)) {
this->drawPathsPage();
}
ImGui::EndChild();
ImGui::EndTabItem(); ImGui::EndTabItem();
} }
if (ImGui::BeginTabItem("hex.builtin.view.help.about.license"_lang)) { if (ImGui::BeginTabItem("hex.builtin.view.help.about.license"_lang)) {
ImGui::NewLine(); ImGui::NewLine();
this->drawLicensePage(); if (ImGui::BeginChild(1)) {
this->drawLicensePage();
}
ImGui::EndChild();
ImGui::EndTabItem(); ImGui::EndTabItem();
} }

View File

@ -344,29 +344,34 @@ namespace hex::plugin::builtin {
void ViewPatternEditor::drawConsole(ImVec2 size) { void ViewPatternEditor::drawConsole(ImVec2 size) {
ImGui::PushStyleColor(ImGuiCol_ChildBg, this->m_textEditor.GetPalette()[u32(TextEditor::PaletteIndex::Background)]); ImGui::PushStyleColor(ImGuiCol_ChildBg, this->m_textEditor.GetPalette()[u32(TextEditor::PaletteIndex::Background)]);
if (ImGui::BeginChild("##console", size, true, ImGuiWindowFlags_AlwaysVerticalScrollbar)) { if (ImGui::BeginChild("##console", size, true, ImGuiWindowFlags_AlwaysVerticalScrollbar | ImGuiWindowFlags_HorizontalScrollbar)) {
for (auto &[level, message] : this->m_console) { ImGuiListClipper clipper(this->m_console.size());
switch (level) { while (clipper.Step())
case pl::LogConsole::Level::Debug: for (u64 i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) {
ImGui::PushStyleColor(ImGuiCol_Text, this->m_textEditor.GetPalette()[u32(TextEditor::PaletteIndex::Comment)]); const auto &[level, message] = this->m_console[i];
break;
case pl::LogConsole::Level::Info: switch (level) {
ImGui::PushStyleColor(ImGuiCol_Text, this->m_textEditor.GetPalette()[u32(TextEditor::PaletteIndex::Default)]); case pl::LogConsole::Level::Debug:
break; ImGui::PushStyleColor(ImGuiCol_Text, this->m_textEditor.GetPalette()[u32(TextEditor::PaletteIndex::Comment)]);
case pl::LogConsole::Level::Warning: break;
ImGui::PushStyleColor(ImGuiCol_Text, this->m_textEditor.GetPalette()[u32(TextEditor::PaletteIndex::Preprocessor)]); case pl::LogConsole::Level::Info:
break; ImGui::PushStyleColor(ImGuiCol_Text, this->m_textEditor.GetPalette()[u32(TextEditor::PaletteIndex::Default)]);
case pl::LogConsole::Level::Error: break;
ImGui::PushStyleColor(ImGuiCol_Text, this->m_textEditor.GetPalette()[u32(TextEditor::PaletteIndex::ErrorMarker)]); case pl::LogConsole::Level::Warning:
break; ImGui::PushStyleColor(ImGuiCol_Text, this->m_textEditor.GetPalette()[u32(TextEditor::PaletteIndex::Preprocessor)]);
default: continue; break;
case pl::LogConsole::Level::Error:
ImGui::PushStyleColor(ImGuiCol_Text, this->m_textEditor.GetPalette()[u32(TextEditor::PaletteIndex::ErrorMarker)]);
break;
default: continue;
}
if (ImGui::Selectable(message.c_str()))
ImGui::SetClipboardText(message.c_str());
ImGui::PopStyleColor();
} }
ImGui::TextUnformatted(message.c_str());
ImGui::PopStyleColor();
}
} }
ImGui::EndChild(); ImGui::EndChild();
ImGui::PopStyleColor(1); ImGui::PopStyleColor(1);
@ -470,46 +475,50 @@ namespace hex::plugin::builtin {
void ViewPatternEditor::drawVariableSettings(ImVec2 size) { void ViewPatternEditor::drawVariableSettings(ImVec2 size) {
if (ImGui::BeginChild("##settings", size, true, ImGuiWindowFlags_AlwaysVerticalScrollbar)) { if (ImGui::BeginChild("##settings", size, true, ImGuiWindowFlags_AlwaysVerticalScrollbar)) {
if (ImGui::BeginTable("##in_out_vars_table", 2, ImGuiTableFlags_SizingStretchProp | ImGuiTableFlags_BordersInnerH)) { if (this->m_patternVariables.empty()) {
ImGui::TableSetupColumn("Name", ImGuiTableColumnFlags_WidthStretch, 0.4F); ImGui::TextFormattedCentered("hex.builtin.view.pattern_editor.no_in_out_vars"_lang);
ImGui::TableSetupColumn("Value", ImGuiTableColumnFlags_WidthStretch, 0.6F); } else {
if (ImGui::BeginTable("##in_out_vars_table", 2, ImGuiTableFlags_SizingStretchProp | ImGuiTableFlags_BordersInnerH)) {
ImGui::TableSetupColumn("Name", ImGuiTableColumnFlags_WidthStretch, 0.4F);
ImGui::TableSetupColumn("Value", ImGuiTableColumnFlags_WidthStretch, 0.6F);
for (auto &[name, variable] : this->m_patternVariables) { for (auto &[name, variable] : this->m_patternVariables) {
ImGui::TableNextRow(); ImGui::TableNextRow();
ImGui::TableNextColumn(); ImGui::TableNextColumn();
ImGui::TextUnformatted(name.c_str()); ImGui::TextUnformatted(name.c_str());
ImGui::TableNextColumn(); ImGui::TableNextColumn();
if (variable.outVariable) { if (variable.outVariable) {
ImGui::TextUnformatted(pl::Token::literalToString(variable.value, true).c_str()); ImGui::TextUnformatted(pl::Token::literalToString(variable.value, true).c_str());
} else if (variable.inVariable) { } else if (variable.inVariable) {
if (pl::Token::isSigned(variable.type)) { if (pl::Token::isSigned(variable.type)) {
i64 value = hex::get_or<i128>(variable.value, 0); i64 value = hex::get_or<i128>(variable.value, 0);
ImGui::InputScalar("", ImGuiDataType_S64, &value); ImGui::InputScalar("", ImGuiDataType_S64, &value);
variable.value = i128(value); variable.value = i128(value);
} else if (pl::Token::isUnsigned(variable.type)) { } else if (pl::Token::isUnsigned(variable.type)) {
u64 value = hex::get_or<u128>(variable.value, 0); u64 value = hex::get_or<u128>(variable.value, 0);
ImGui::InputScalar("", ImGuiDataType_U64, &value); ImGui::InputScalar("", ImGuiDataType_U64, &value);
variable.value = u128(value); variable.value = u128(value);
} else if (pl::Token::isFloatingPoint(variable.type)) { } else if (pl::Token::isFloatingPoint(variable.type)) {
double value = hex::get_or<double>(variable.value, 0.0); double value = hex::get_or<double>(variable.value, 0.0);
ImGui::InputScalar("", ImGuiDataType_Double, &value); ImGui::InputScalar("", ImGuiDataType_Double, &value);
variable.value = value; variable.value = value;
} else if (variable.type == pl::Token::ValueType::Boolean) { } else if (variable.type == pl::Token::ValueType::Boolean) {
bool value = hex::get_or<bool>(variable.value, false); bool value = hex::get_or<bool>(variable.value, false);
ImGui::Checkbox("", &value); ImGui::Checkbox("", &value);
variable.value = value; variable.value = value;
} else if (variable.type == pl::Token::ValueType::Character) { } else if (variable.type == pl::Token::ValueType::Character) {
char buffer[2]; char buffer[2];
ImGui::InputText("", buffer, 2); ImGui::InputText("", buffer, 2);
variable.value = buffer[0]; variable.value = buffer[0];
}
} }
} }
}
ImGui::EndTable(); ImGui::EndTable();
}
} }
} }
ImGui::EndChild(); ImGui::EndChild();