mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 08:47:28 +01:00
73 lines
2.6 KiB
C++
73 lines
2.6 KiB
C++
#include "script_node_cell.h"
|
|
#include <kandinsky/point.h>
|
|
#include <escher.h>
|
|
|
|
namespace Code {
|
|
|
|
constexpr char ScriptNodeCell::k_parentheses[];
|
|
constexpr char ScriptNodeCell::k_parenthesesWithEmpty[];
|
|
|
|
ScriptNodeCell::ScriptNodeView::ScriptNodeView() :
|
|
HighlightCell(),
|
|
m_scriptNode(nullptr),
|
|
m_scriptStore(nullptr)
|
|
{
|
|
}
|
|
|
|
void ScriptNodeCell::ScriptNodeView::setScriptNode(ScriptNode * scriptNode) {
|
|
m_scriptNode = scriptNode;
|
|
}
|
|
|
|
void ScriptNodeCell::ScriptNodeView::setScriptStore(ScriptStore * scriptStore) {
|
|
m_scriptStore = scriptStore;
|
|
}
|
|
|
|
void ScriptNodeCell::ScriptNodeView::drawRect(KDContext * ctx, KDRect rect) const {
|
|
ctx->drawString(m_scriptNode->name(), KDPoint(0, Metric::TableCellLabelTopMargin), k_font, Palette::CodeText, isHighlighted()? Palette::CodeBackgroundSelected : Palette::CodeBackground);
|
|
KDSize nameSize = k_font->stringSize(m_scriptNode->name());
|
|
if (m_scriptNode->type() == ScriptNode::Type::Function) {
|
|
ctx->drawString(ScriptNodeCell::k_parentheses, KDPoint(nameSize.width(), Metric::TableCellLabelTopMargin), k_font, Palette::CodeText, isHighlighted()? Palette::CodeBackgroundSelected : Palette::CodeBackground);
|
|
}
|
|
ctx->drawString(m_scriptStore->scriptAtIndex(m_scriptNode->scriptIndex()).fullName(), KDPoint(0, Metric::TableCellLabelTopMargin + nameSize.height() + k_verticalMargin), k_font, Palette::SecondaryText, isHighlighted()? Palette::CodeBackgroundSelected : Palette::CodeBackground);
|
|
}
|
|
|
|
KDSize ScriptNodeCell::ScriptNodeView::minimalSizeForOptimalDisplay() const {
|
|
if (m_scriptNode->name() == nullptr) {
|
|
return KDSizeZero;
|
|
}
|
|
KDSize size1 = k_font->stringSize(m_scriptNode->name());
|
|
KDSize size2 = k_font->stringSize(m_scriptStore->scriptAtIndex(m_scriptNode->scriptIndex()).fullName());
|
|
KDSize size3 = KDSizeZero;
|
|
if (m_scriptNode->type() == ScriptNode::Type::Function) {
|
|
size3 = k_font->stringSize(ScriptNodeCell::k_parentheses);
|
|
}
|
|
return KDSize(size1.width() + size3.width() > size2.width() ? size1.width() + size3.width() : size2.width(), Metric::TableCellLabelTopMargin + size1.width() + k_verticalMargin + size2.width());
|
|
}
|
|
|
|
ScriptNodeCell::ScriptNodeCell() :
|
|
TableCell(),
|
|
m_scriptNodeView()
|
|
{
|
|
}
|
|
|
|
void ScriptNodeCell::setScriptNode(ScriptNode * scriptNode) {
|
|
m_scriptNodeView.setScriptNode(scriptNode);
|
|
reloadCell();
|
|
}
|
|
|
|
void ScriptNodeCell::setScriptStore(ScriptStore * scriptStore) {
|
|
m_scriptNodeView.setScriptStore(scriptStore);
|
|
}
|
|
|
|
void ScriptNodeCell::setHighlighted(bool highlight) {
|
|
TableCell::setHighlighted(highlight);
|
|
m_scriptNodeView.setHighlighted(highlight);
|
|
}
|
|
|
|
void ScriptNodeCell::reloadCell() {
|
|
layoutSubviews();
|
|
HighlightCell::reloadCell();
|
|
}
|
|
|
|
}
|