%s
", log_types[next_type].class_name.c_str(), log_types[next_type].alert_contents.c_str());
messages += log_types[next_type].log_messages[log_pointers[next_type]].message;
messages += "
";
log_pointers[next_type]++;
next_type = FindNextEarliestLogType(log_pointers);
num_messages++;
}
if (message_content->HasChildNodes())
{
float last_element_top = message_content->GetLastChild()->GetAbsoluteTop();
auto_scroll = message_content->GetAbsoluteTop() + message_content->GetAbsoluteTop() > last_element_top;
}
else
auto_scroll = true;
message_content->SetInnerRML(messages);
dirty_logs = false;
}
}
}
void ElementLog::ProcessEvent(Event& event)
{
// Only process events if we're visible
if (beacon != nullptr)
{
if (event == EventId::Click)
{
if (event.GetTargetElement() == beacon->GetFirstChild())
{
if (!IsVisible())
SetProperty(PropertyId::Visibility, Property(Style::Visibility::Visible));
beacon->SetProperty(PropertyId::Visibility, Property(Style::Visibility::Hidden));
current_beacon_level = Log::LT_MAX;
}
else if (event.GetTargetElement()->GetId() == "close_button")
{
SetProperty(PropertyId::Visibility, Property(Style::Visibility::Hidden));
}
else if (event.GetTargetElement()->GetId() == "clear_button")
{
for (int i = 0; i < Log::LT_MAX; i++)
{
log_types[i].log_messages.clear();
if (!log_types[i].visible)
{
if (Element * button = GetElementById(log_types[i].button_name))
button->SetInnerRML("Off");
}
}
dirty_logs = true;
}
else
{
for (int i = 0; i < Log::LT_MAX; i++)
{
if (!log_types[i].button_name.empty() && event.GetTargetElement()->GetId() == log_types[i].button_name)
{
log_types[i].visible = !log_types[i].visible;
if (log_types[i].visible)
event.GetTargetElement()->SetInnerRML("On");
else
event.GetTargetElement()->SetInnerRML("Off");
dirty_logs = true;
}
}
}
}
}
if (event == EventId::Resize && auto_scroll)
{
if (message_content != nullptr &&
message_content->HasChildNodes())
message_content->GetLastChild()->ScrollIntoView();
}
}
int ElementLog::FindNextEarliestLogType(unsigned int log_pointers[Log::LT_MAX])
{
int log_channel = -1;
unsigned int index = UINT_MAX;
for (int i = 0; i < Log::LT_MAX; i++)
{
if (log_types[i].visible)
{
if (log_pointers[i] < log_types[i].log_messages.size())
{
if (log_types[i].log_messages[log_pointers[i]].index < index)
{
index = log_types[i].log_messages[log_pointers[i]].index;
log_channel = i;
}
}
}
}
return log_channel;
}
}
}