Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for strikethrough text style #73

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -89,14 +89,16 @@ target_sources(
"src/OutputLinearBarGraphComponent.cpp"
"src/OutputPolygonComponent.cpp"
"src/InputStringComponent.cpp"
"src/NumberComponent.cpp"
"src/AlarmMaskAudio.cpp"
"src/AppImages.cpp"
"src/ASCIILogFile.cpp"
"src/ConfigureHardwareWindow.cpp"
"src/ConfigureHardwareComponent.cpp"
"src/StringEncodingConversions.cpp"
"src/InputListComponent.cpp"
"src/ShortcutsWindow.cpp")
"src/ShortcutsWindow.cpp"
"src/TextDrawingComponent.cpp")

target_include_directories(AgISOVirtualTerminal
PRIVATE ${CMAKE_CURRENT_LIST_DIR}/include)
Expand Down
9 changes: 2 additions & 7 deletions include/InputNumberComponent.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,19 @@
#ifndef INPUT_NUMBER_COMPONENT_HPP
#define INPUT_NUMBER_COMPONENT_HPP

#include "NumberComponent.hpp"
#include "isobus/isobus/isobus_virtual_terminal_objects.hpp"
#include "isobus/isobus/isobus_virtual_terminal_server_managed_working_set.hpp"

#include "JuceHeader.h"

class InputNumberComponent : public isobus::InputNumber
, public Component
, public NumberComponent
{
public:
InputNumberComponent(std::shared_ptr<isobus::VirtualTerminalServerManagedWorkingSet> workingSet, isobus::InputNumber sourceObject);

void paint(Graphics &g) override;

static Justification convert_justification(HorizontalJustification horizontalJustification, VerticalJustification verticalJustification);

private:
std::shared_ptr<isobus::VirtualTerminalServerManagedWorkingSet> parentWorkingSet;

JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(InputNumberComponent)
};

Expand Down
9 changes: 3 additions & 6 deletions include/InputStringComponent.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,22 @@
#ifndef INPUT_STRING_COMPONENT_HPP
#define INPUT_STRING_COMPONENT_HPP

#include "TextDrawingComponent.hpp"
#include "isobus/isobus/isobus_virtual_terminal_objects.hpp"
#include "isobus/isobus/isobus_virtual_terminal_server_managed_working_set.hpp"

#include "JuceHeader.h"

class InputStringComponent : public isobus::InputString
, public Component
, public TextDrawingComponent
{
public:
InputStringComponent(std::shared_ptr<isobus::VirtualTerminalServerManagedWorkingSet> workingSet, isobus::InputString sourceObject);

void paint(Graphics &g) override;

static Justification convert_justification(HorizontalJustification horizontalJustification, VerticalJustification verticalJustification);

private:
std::shared_ptr<isobus::VirtualTerminalServerManagedWorkingSet> parentWorkingSet;

JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(InputStringComponent)
};

#endif // INPUT_STRING_COMPONENT_HPP
#endif // INPUT_STRING_COMPONENT_HPP
31 changes: 31 additions & 0 deletions include/NumberComponent.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
//================================================================================================
/// @file NumberComponent.hpp
///
/// @brief Common functions for drawing numbers
/// @author Miklos Marton
///
/// @copyright 2024 Adrian Del Grosso
//================================================================================================
#ifndef NUMBER_COMPONENT_HPP
#define NUMBER_COMPONENT_HPP

#include "TextDrawingComponent.hpp"
#include "isobus/isobus/isobus_virtual_terminal_objects.hpp"
#include "isobus/isobus/isobus_virtual_terminal_server_managed_working_set.hpp"

#include "JuceHeader.h"

class NumberComponent : public TextDrawingComponent
{
public:
NumberComponent(std::shared_ptr<isobus::VirtualTerminalServerManagedWorkingSet> workingSet);

void paint(Graphics &g) override;

protected:
std::shared_ptr<isobus::VirtualTerminalServerManagedWorkingSet> parentWorkingSet;

JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(NumberComponent)
};

#endif // NUMBER_COMPONENT_HPP
9 changes: 2 additions & 7 deletions include/OutputNumberComponent.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,19 @@
#ifndef OUTPUT_NUMBER_COMPONENT_HPP
#define OUTPUT_NUMBER_COMPONENT_HPP

#include "NumberComponent.hpp"
#include "isobus/isobus/isobus_virtual_terminal_objects.hpp"
#include "isobus/isobus/isobus_virtual_terminal_server_managed_working_set.hpp"

#include "JuceHeader.h"

class OutputNumberComponent : public isobus::OutputNumber
, public Component
, public NumberComponent
{
public:
OutputNumberComponent(std::shared_ptr<isobus::VirtualTerminalServerManagedWorkingSet> workingSet, isobus::OutputNumber sourceObject);

void paint(Graphics &g) override;

static Justification convert_justification(HorizontalJustification horizontalJustification, VerticalJustification verticalJustification);

private:
std::shared_ptr<isobus::VirtualTerminalServerManagedWorkingSet> parentWorkingSet;

JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(OutputNumberComponent)
};

Expand Down
5 changes: 2 additions & 3 deletions include/OutputStringComponent.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,14 @@
#ifndef OUTPUT_STRING_COMPONENT_HPP
#define OUTPUT_STRING_COMPONENT_HPP

#include "TextDrawingComponent.hpp"
#include "isobus/isobus/isobus_virtual_terminal_objects.hpp"
#include "isobus/isobus/isobus_virtual_terminal_server_managed_working_set.hpp"

#include "JuceHeader.h"

class OutputStringComponent : public isobus::OutputString
, public Component
, public TextDrawingComponent
{
public:
OutputStringComponent(std::shared_ptr<isobus::VirtualTerminalServerManagedWorkingSet> workingSet, isobus::OutputString sourceObject);
Expand All @@ -25,8 +26,6 @@ class OutputStringComponent : public isobus::OutputString
static Justification convert_justification(HorizontalJustification horizontalJustification, VerticalJustification verticalJustification);

private:
std::shared_ptr<isobus::VirtualTerminalServerManagedWorkingSet> parentWorkingSet;

JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(OutputStringComponent)
};

Expand Down
39 changes: 39 additions & 0 deletions include/TextDrawingComponent.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
//================================================================================================
/// @file TextDawingComponent.hpp
///
/// @brief Common functions for drawing numbers
/// @author Miklos Marton
///
//================================================================================================
#ifndef TEXTDRAWING_COMPONENT_HPP
#define TEXTDRAWING_COMPONENT_HPP

#include "isobus/isobus/isobus_virtual_terminal_objects.hpp"
#include "isobus/isobus/isobus_virtual_terminal_server_managed_working_set.hpp"

#include "JuceHeader.h"

class TextDrawingComponent : public Component
{
public:
TextDrawingComponent(std::shared_ptr<isobus::VirtualTerminalServerManagedWorkingSet> workingSet);

void setSourceObject(isobus::VTObject *newSourceObject);

protected:
static Justification convert_justification(isobus::TextualVTObject::HorizontalJustification horizontalJustification,
isobus::TextualVTObject::VerticalJustification verticalJustification);
uint8_t prepare_text_painting(Graphics &g,
std::shared_ptr<isobus::FontAttributes> font_attributes,
char referenceCharForWidthCalc);

void paintText(Graphics &g, const std::string &text, bool enabled = true);
std::shared_ptr<isobus::VirtualTerminalServerManagedWorkingSet> parentWorkingSet;
isobus::VTObject *sourceObject;

void drawStrikeThrough(Graphics &g, int w, int h, const String &str, isobus::TextualVTObject::HorizontalJustification justification);

JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(TextDrawingComponent)
};

#endif // TEXTDRAWING_COMPONENT_HPP
151 changes: 3 additions & 148 deletions src/InputNumberComponent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,12 @@

InputNumberComponent::InputNumberComponent(std::shared_ptr<isobus::VirtualTerminalServerManagedWorkingSet> workingSet, isobus::InputNumber sourceObject) :
isobus::InputNumber(sourceObject),
parentWorkingSet(workingSet)
NumberComponent(workingSet)
{
setSourceObject(this);
setSize(get_width(), get_height());

if (get_option(Options::Transparent))
if (get_option(isobus::NumberVTObject::Options::Transparent))
{
setOpaque(false);
}
Expand All @@ -23,149 +24,3 @@ InputNumberComponent::InputNumberComponent(std::shared_ptr<isobus::VirtualTermin
setOpaque(true);
}
}

void InputNumberComponent::paint(Graphics &g)
{
if (isOpaque())
{
auto vtColour = parentWorkingSet->get_colour(backgroundColor);
g.fillAll(Colour::fromFloatRGBA(vtColour.r, vtColour.g, vtColour.b, 1.0f));
}

float scaledValue = (get_value() + get_offset()) * get_scale();
g.setColour(getLookAndFeel().findColour(ListBox::textColourId));

// Get font data
if (isobus::NULL_OBJECT_ID != get_font_attributes())
{
auto child = get_object_by_id(get_font_attributes(), parentWorkingSet->get_object_tree());

if ((nullptr != child) &&
(isobus::VirtualTerminalObjectType::FontAttributes == child->get_object_type()))
{
auto font = std::static_pointer_cast<isobus::FontAttributes>(child);
auto colour = parentWorkingSet->get_colour(font->get_colour());
Font juceFont(Font::getDefaultMonospacedFontName(), font->get_font_height_pixels(), Font::FontStyleFlags::plain);
auto fontWidth = juceFont.getStringWidthFloat("1");
juceFont.setHorizontalScale(static_cast<float>(font->get_font_width_pixels()) / fontWidth);
g.setColour(Colour::fromFloatRGBA(colour.r, colour.g, colour.b, 1.0f));
g.setFont(juceFont);
}
}

if (isobus::NULL_OBJECT_ID != get_variable_reference())
{
auto child = get_object_by_id(get_variable_reference(), parentWorkingSet->get_object_tree());

if ((nullptr != child) &&
(isobus::VirtualTerminalObjectType::NumberVariable == child->get_object_type()))
{
scaledValue = (std::static_pointer_cast<isobus::NumberVariable>(child)->get_value() + get_offset()) * get_scale();
}
}

std::ostringstream valueText;
valueText << std::fixed << std::setprecision(get_number_of_decimals()) << scaledValue;
g.drawText(valueText.str(), 0, 0, get_width(), get_height(), convert_justification(get_horizontal_justification(), get_vertical_justification()), false);
}

Justification InputNumberComponent::convert_justification(HorizontalJustification horizontalJustification, VerticalJustification verticalJustification)
{
Justification retVal = Justification::topLeft;

switch (horizontalJustification)
{
case HorizontalJustification::PositionLeft:
{
switch (verticalJustification)
{
case VerticalJustification::PositionTop:
{
retVal = Justification::topLeft;
}
break;

case VerticalJustification::PositionMiddle:
{
retVal = Justification::centredLeft;
}
break;

case VerticalJustification::PositionBottom:
{
retVal = Justification::bottomLeft;
}
break;

case VerticalJustification::Reserved:
default:
break;
}
}
break;

case HorizontalJustification::PositionMiddle:
{
switch (verticalJustification)
{
case VerticalJustification::PositionTop:
{
retVal = Justification::centredTop;
}
break;

case VerticalJustification::PositionMiddle:
{
retVal = Justification::centred;
}
break;

case VerticalJustification::PositionBottom:
{
retVal = Justification::centredBottom;
}
break;

case VerticalJustification::Reserved:
default:
break;
}
}
break;

case HorizontalJustification::PositionRight:
{
switch (verticalJustification)
{
case VerticalJustification::PositionTop:
{
retVal = Justification::topRight;
}
break;

case VerticalJustification::PositionMiddle:
{
retVal = Justification::centredRight;
}
break;

case VerticalJustification::PositionBottom:
{
retVal = Justification::bottomRight;
}
break;

case VerticalJustification::Reserved:
default:
break;
}
}
break;

default:
{
}
break;
}
return retVal;
}
Loading
Loading