mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
Because some functions already have the parentheses in their name, so their type would have been Variable but it is clearer to give it the type WithoutParentheses. this is the case for nodes created from toolbox nodes.
86 lines
3.6 KiB
C++
86 lines
3.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[];
|
|
|
|
// TODO LEA remove static inline KDCoordinate maxCoordinate(KDCoordinate x, KDCoordinate y) { return x > y ? x : y; }
|
|
|
|
void ScriptNodeCell::ScriptNodeView::drawRect(KDContext * ctx, KDRect rect) const {
|
|
const KDColor backgroundColor = isHighlighted()? Palette::Select : KDColorWhite;
|
|
|
|
/* If it exists, draw the description name. If it did not fit, we would have
|
|
* put nullptr at the node creation. */
|
|
const char * descriptionName = m_scriptNode->description();
|
|
bool drawDescription = descriptionName != nullptr;
|
|
KDCoordinate rectHeightPerLine = rect.height();
|
|
if (drawDescription) {
|
|
rectHeightPerLine = rect.height() / 2;
|
|
ctx->drawString(descriptionName, KDPoint(0, rectHeightPerLine + k_verticalMargin / 2), k_font, Palette::GreyDark, backgroundColor);
|
|
}
|
|
|
|
// Draw the node name
|
|
const char * nodeName = m_scriptNode->name();
|
|
const int nodeNameLength = m_scriptNode->nameLength();
|
|
KDSize nameSize = k_font->stringSize(nodeName, nodeNameLength);
|
|
const KDCoordinate nodeNameY = rectHeightPerLine - k_verticalMargin / 2 - nameSize.height() ;
|
|
ctx->drawString(nodeName, KDPoint(0, nodeNameY), k_font, KDColorBlack, backgroundColor, nodeNameLength);
|
|
// If it is a function, draw the parentheses
|
|
if (m_scriptNode->type() == ScriptNode::Type::WithParentheses) {
|
|
ctx->drawString(ScriptNodeCell::k_parentheses, KDPoint(nameSize.width(), nodeNameY), k_font, KDColorBlack, backgroundColor);
|
|
}
|
|
|
|
/* If it exists, draw the source name. If it did not fit, we would have put
|
|
* nullptr at the node creation. */
|
|
const char * sourceName = m_scriptNode->nodeSourceName();
|
|
if (sourceName != nullptr) {
|
|
KDSize sourceNameSize = k_font->stringSize(sourceName);
|
|
ctx->drawString(sourceName, KDPoint(rect.width() - sourceNameSize.width(), nodeNameY), k_font, Palette::GreyDark, backgroundColor);
|
|
}
|
|
}
|
|
|
|
KDSize ScriptNodeCell::ScriptNodeView::minimalSizeForOptimalDisplay() const {
|
|
if (m_scriptNode->name() == nullptr) {
|
|
return KDSizeZero;
|
|
}
|
|
return KDSize(300 /*TODO LEA*/, 2*k_topBottomMargin + m_scriptNode->description() == nullptr ? k_font->glyphSize().height() : k_font->glyphSize().height() * 2 + k_verticalMargin);
|
|
#if 0
|
|
KDSize nameLineSize = k_font->stringSize(m_scriptNode->name(), m_scriptNode->nameLength());
|
|
if (m_scriptNode->type() == ScriptNode::Type::WithParentheses) {
|
|
nameLineSize = KDSize(nameLineSize.width() + k_font->stringSize(k_parentheses).width(), nameLineSize.height());
|
|
}
|
|
const char * sourceName = m_scriptNode->nodeSourceName();
|
|
if (sourceName != nullptr) {
|
|
KDSize sourceNameSize = k_font->stringSize(sourceName, nodeNameLength);
|
|
nameLineSize = KDSize(nameLineSize.width() + sourceNameSize.width() + k_font->glyphSize().width(), nameLineSize.height());
|
|
}
|
|
|
|
const char * descriptionName = m_scriptNode->description();
|
|
if (descriptionName == nullptr) {
|
|
return nameLineSize;
|
|
}
|
|
const KDSize descriptionNameSize = k_font->stringSize(descriptionName);
|
|
return KDSize(maxCoordinate(nameLineSize.width(), descriptionNameSize.width()),2*Metric::TableCellVerticalMargin + nameLineSize.width() + k_verticalMargin + descriptionNameSize.height());
|
|
#endif
|
|
}
|
|
|
|
void ScriptNodeCell::setScriptNode(ScriptNode * scriptNode) {
|
|
m_scriptNodeView.setScriptNode(scriptNode);
|
|
reloadCell();
|
|
}
|
|
|
|
void ScriptNodeCell::setHighlighted(bool highlight) {
|
|
TableCell::setHighlighted(highlight);
|
|
m_scriptNodeView.setHighlighted(highlight);
|
|
}
|
|
|
|
void ScriptNodeCell::reloadCell() {
|
|
layoutSubviews();
|
|
HighlightCell::reloadCell();
|
|
}
|
|
|
|
}
|