diff --git a/bin/app/data/color_schemes/bright.xml b/bin/app/data/color_schemes/bright.xml index 50e4d83d..a02e356d 100644 --- a/bin/app/data/color_schemes/bright.xml +++ b/bin/app/data/color_schemes/bright.xml @@ -52,6 +52,7 @@ #E0E0E0 #B2B2B2 #626262 + black @@ -170,8 +171,8 @@ - #88BAB3 - #6AA39B + #DDD + #CCC @@ -233,8 +234,8 @@ - #5DA399 - #5DA399 + #878787 + #878787 diff --git a/bin/app/data/color_schemes/dark.xml b/bin/app/data/color_schemes/dark.xml index 0ed9b8be..d3a750cd 100644 --- a/bin/app/data/color_schemes/dark.xml +++ b/bin/app/data/color_schemes/dark.xml @@ -52,6 +52,7 @@ #777777 #555555 #444444 + white diff --git a/bin/app/data/gui/graph_view/images/file.png b/bin/app/data/gui/graph_view/images/file.png new file mode 100644 index 00000000..f19d49e3 Binary files /dev/null and b/bin/app/data/gui/graph_view/images/file.png differ diff --git a/src/app/qt/element/QtCodeFile.cpp b/src/app/qt/element/QtCodeFile.cpp index 0a8331c1..683bd79b 100644 --- a/src/app/qt/element/QtCodeFile.cpp +++ b/src/app/qt/element/QtCodeFile.cpp @@ -9,6 +9,8 @@ #include "data/location/TokenLocationFile.h" #include "qt/element/QtCodeFileList.h" #include "qt/element/QtCodeSnippet.h" +#include "qt/utility/utilityQt.h" +#include "settings/ColorScheme.h" QtCodeFile::QtCodeFile(const FilePath& filePath, QtCodeFileList* parent) : QFrame(parent) @@ -38,9 +40,15 @@ QtCodeFile::QtCodeFile(const FilePath& filePath, QtCodeFileList* parent) m_title->minimumSizeHint(); // force font loading m_title->setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac m_title->setToolTip(QString::fromStdString(filePath.str())); - m_title->setFixedWidth(m_title->fontMetrics().width(filePath.fileName().c_str()) + 32); + m_title->setFixedWidth(m_title->fontMetrics().width(filePath.fileName().c_str()) + 52); m_title->setFixedHeight(std::max(m_title->fontMetrics().height() * 1.2, 28.0)); m_title->setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Fixed); + + m_title->setIcon(utility::colorizePixmap( + QPixmap("data/gui/graph_view/images/file.png"), + ColorScheme::getInstance()->getColor("code/file/title/icon").c_str() + )); + titleLayout->addWidget(m_title); titleWidget->setMinimumHeight(m_title->height() + 4); diff --git a/src/app/qt/view/graphElements/QtGraphNode.cpp b/src/app/qt/view/graphElements/QtGraphNode.cpp index 861a4cc9..50bfce87 100644 --- a/src/app/qt/view/graphElements/QtGraphNode.cpp +++ b/src/app/qt/view/graphElements/QtGraphNode.cpp @@ -42,6 +42,7 @@ QFont QtGraphNode::getFontForNodeType(Node::NodeType type) QtGraphNode::QtGraphNode() : m_undefinedRect(nullptr) + , m_icon(nullptr) , m_isActive(false) , m_isHovering(false) { @@ -393,7 +394,16 @@ void QtGraphNode::setStyle(const GraphViewStyle::NodeStyle& style) m_undefinedRect->setRadius(radius); } + if (style.iconPath.size()) + { + QtDeviceScaledPixmap pixmap(QString::fromStdString(style.iconPath)); + pixmap.scaleToHeight(style.iconSize); + + m_icon = new QGraphicsPixmapItem(utility::colorizePixmap(pixmap.pixmap(), style.iconColor.c_str()), this); + m_icon->setPos(style.iconOffset.x, style.iconOffset.y); + } + m_text->setFont(font); m_text->setBrush(QBrush(style.textColor.c_str())); - m_text->setPos(style.textOffset.x, style.textOffset.y); + m_text->setPos(style.iconOffset.x + style.iconSize + style.textOffset.x, style.textOffset.y); } diff --git a/src/app/qt/view/graphElements/QtGraphNode.h b/src/app/qt/view/graphElements/QtGraphNode.h index aa886749..46feac21 100644 --- a/src/app/qt/view/graphElements/QtGraphNode.h +++ b/src/app/qt/view/graphElements/QtGraphNode.h @@ -102,6 +102,7 @@ protected: QGraphicsSimpleTextItem* m_text; QtRoundedRectItem* m_rect; QtRoundedRectItem* m_undefinedRect; + QGraphicsPixmapItem* m_icon; Vec2i m_size; diff --git a/src/lib/component/controller/GraphController.cpp b/src/lib/component/controller/GraphController.cpp index a27d4bf9..bd2235d0 100644 --- a/src/lib/component/controller/GraphController.cpp +++ b/src/lib/component/controller/GraphController.cpp @@ -695,6 +695,8 @@ void GraphController::layoutNestingRecursive(DummyNode& node) const width = margins.charWidth * node.data->getName().size(); } + width += margins.iconWidth; + if (node.data->isType(Node::NODE_CLASS | Node::NODE_STRUCT) && node.subNodes.size()) { addExpandToggleNode(node); diff --git a/src/lib/component/view/GraphViewStyle.cpp b/src/lib/component/view/GraphViewStyle.cpp index b8f52978..cb330060 100644 --- a/src/lib/component/view/GraphViewStyle.cpp +++ b/src/lib/component/view/GraphViewStyle.cpp @@ -16,6 +16,7 @@ GraphViewStyle::NodeMargins::NodeMargins() , minWidth(0) , charWidth(0.0f) , charHeight(0.0f) + , iconWidth(0) { } @@ -26,6 +27,7 @@ GraphViewStyle::NodeStyle::NodeStyle() , borderDashed(false) , fontSize(0) , fontBold(false) + , iconSize(0) { } @@ -162,13 +164,14 @@ GraphViewStyle::NodeMargins GraphViewStyle::getMarginsForNodeType(Node::NodeType margins.bottom = 15; break; + case Node::NODE_FILE: + margins.iconWidth = s_fontSize + 11; case Node::NODE_UNDEFINED_TYPE: case Node::NODE_STRUCT: case Node::NODE_CLASS: case Node::NODE_ENUM: case Node::NODE_TYPEDEF: case Node::NODE_TEMPLATE_PARAMETER_TYPE: - case Node::NODE_FILE: if (hasChildren) { margins.left = margins.right = 10; @@ -325,9 +328,14 @@ GraphViewStyle::NodeStyle GraphViewStyle::getStyleForNodeType( style.fontBold = true; } - style.cornerRadius = 6; - style.textOffset.x = 8; - style.textOffset.y = 8; + style.cornerRadius = 10; + style.textOffset.x = 6; + style.textOffset.y = 9; + style.iconPath = "data/gui/graph_view/images/file.png"; + style.iconSize = s_fontSize + 2; + style.iconOffset.x = 9; + style.iconOffset.y = 9; + style.iconColor = scheme->getColor("graph/icon"); break; case Node::NODE_UNDEFINED_FUNCTION: diff --git a/src/lib/component/view/GraphViewStyle.h b/src/lib/component/view/GraphViewStyle.h index f2586bb8..a6f0bf27 100644 --- a/src/lib/component/view/GraphViewStyle.h +++ b/src/lib/component/view/GraphViewStyle.h @@ -32,6 +32,8 @@ public: float charWidth; float charHeight; + + int iconWidth; }; struct NodeStyle @@ -57,6 +59,10 @@ public: bool fontBold; Vec2i textOffset; + + std::string iconPath; + Vec2i iconOffset; + size_t iconSize; }; struct EdgeStyle diff --git a/src/lib/data/Storage.cpp b/src/lib/data/Storage.cpp index d8284b81..b227ddff 100644 --- a/src/lib/data/Storage.cpp +++ b/src/lib/data/Storage.cpp @@ -487,6 +487,10 @@ Id Storage::onFileParsed(const std::string& filePath) fileNodeId = m_sqliteStorage.addFile(nameHierarchyElementId, filePath); } + NameHierarchy nameHierarchy; + nameHierarchy.push(std::make_shared(fileName)); + m_tokenIndex.addNode(nameHierarchy)->addTokenId(fileNodeId); + return fileNodeId; }