diff --git a/bin/app/data/ApplicationSettings_template.xml b/bin/app/data/ApplicationSettings_template.xml index 240ede3b..7a86c6df 100644 --- a/bin/app/data/ApplicationSettings_template.xml +++ b/bin/app/data/ApplicationSettings_template.xml @@ -26,12 +26,14 @@ + + + + + - - - diff --git a/bin/app/data/gui/code_view/code_view.css b/bin/app/data/gui/code_view/code_view.css index a1703c12..31ca6d17 100644 --- a/bin/app/data/gui/code_view/code_view.css +++ b/bin/app/data/gui/code_view/code_view.css @@ -13,7 +13,6 @@ border-top-left-radius: 10px; border-top-right-radius: 10px; margin-bottom: 5px; - min-height: 28px; padding-right: 5px; } @@ -21,9 +20,8 @@ background: none; border: none; border-radius: 3px; - font-size: 14px; padding: 2px 4px; - margin: 2px 8px; + margin: 1px 8px 3px; } #code_file #title_label:hover { @@ -48,8 +46,6 @@ background: none; color: gray; border: none; - font-family: "Source Code Pro"; - font-size: 14px; } #code_file #code_snippet #dots { @@ -63,13 +59,6 @@ #code_area { background-color: transparent; - font-family: "Source Code Pro"; - font-size: 14px; -} - -#code_area #line_number_area { - font-family: "Source Code Pro"; - font-size: 14px; } #code_file #maximize_button, #code_file #snippet_button, #code_file #minimize_button { diff --git a/bin/app/data/gui/search_view/search_element.css b/bin/app/data/gui/search_view/search_element.css deleted file mode 100644 index 08079121..00000000 --- a/bin/app/data/gui/search_view/search_element.css +++ /dev/null @@ -1,8 +0,0 @@ -QPushButton { - border: none; - font-family: "Source Code Pro"; - font-size: 16px; - height: 20px; - padding-left: 4px; - padding-right: 4px; -} diff --git a/bin/app/data/gui/search_view/search_view.css b/bin/app/data/gui/search_view/search_view.css index e0fa4f14..a864f6c3 100644 --- a/bin/app/data/gui/search_view/search_view.css +++ b/bin/app/data/gui/search_view/search_view.css @@ -13,23 +13,17 @@ QWidget#search_box_container { QLineEdit#search_box { background: #E0E0E0; border: none; - font-family: "Source Code Pro"; - font-size: 16px; - height: 24px; selection-background-color: #B2B2B2; } QWidget#search_box_highlight { background: #B2B2B2; border: none; - height: 24px; } QAbstractItemView#search_box_popup { background-color: white; border: none; - font-family: "Source Code Pro"; - font-size: 14pt; margin: 8px 0 0; min-height: 26px; selection-background-color: #B2B2B2; @@ -41,7 +35,6 @@ QPushButton#search_button { border-bottom-right-radius: 12px; border-top-right-radius: 12px; background-position: 15px 5px; - height: 30px; width: 30px; } @@ -53,18 +46,6 @@ QPushButton#search_button { background: #626262; } -/*QPushButton#case_sensitive_button { - border: none; - border-image: url(data/gui/search_view/images/button_case_sensitive_inactive.png); - height: 26px; - width: 26px; - margin-left: 4px; -} - -QPushButton#case_sensitive_button:checked { - border-image: url(data/gui/search_view/images/button_case_sensitive_active.png); -}*/ - QToolTip { background-color: rgb(204, 204, 204); border: 1px solid rgb(0, 0, 0); diff --git a/src/app/qt/element/QtAutocompletionList.cpp b/src/app/qt/element/QtAutocompletionList.cpp index 45c1fa9d..6421c070 100644 --- a/src/app/qt/element/QtAutocompletionList.cpp +++ b/src/app/qt/element/QtAutocompletionList.cpp @@ -145,7 +145,7 @@ void QtAutocompletionDelegate::paint(QPainter* painter, const QStyleOptionViewIt if (font.pointSize() > 0) { QFont typeFont = font; - typeFont.setPointSize(10); + typeFont.setPointSize(ApplicationSettings::getInstance()->getFontSize() - 4); painter->setFont(typeFont); } diff --git a/src/app/qt/element/QtCodeArea.cpp b/src/app/qt/element/QtCodeArea.cpp index bdfb14e2..6c2cd658 100644 --- a/src/app/qt/element/QtCodeArea.cpp +++ b/src/app/qt/element/QtCodeArea.cpp @@ -57,9 +57,8 @@ QtCodeArea::QtCodeArea( setObjectName("code_area"); setReadOnly(true); setFrameStyle(QFrame::NoFrame); - setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Fixed); - setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setLineWrapMode(QPlainTextEdit::NoWrap); + setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Fixed); m_lineNumberArea = new LineNumberArea(this); m_highlighter = new QtHighlighter(document()); @@ -90,9 +89,16 @@ QtCodeArea::~QtCodeArea() QSize QtCodeArea::sizeHint() const { - int width = 480; - int height = (document()->size().height() + 0.7f) * fontMetrics().lineSpacing() - 3; - return QSize(width, height); + QTextBlock block = firstVisibleBlock(); + float height = blockBoundingGeometry(block).translated(contentOffset()).top(); + + while (block.isValid()) + { + height += blockBoundingRect(block).height(); + block = block.next(); + } + + return QSize(320, height + 1); } void QtCodeArea::lineNumberAreaPaintEvent(QPaintEvent *event) @@ -170,7 +176,7 @@ void QtCodeArea::showEvent(QShowEvent* event) int tabWidth = ApplicationSettings::getInstance()->getCodeTabWidth(); setTabStopWidth(tabWidth * fontMetrics().width('9')); - setMaximumHeight(sizeHint().height()); + setFixedHeight(sizeHint().height()); } void QtCodeArea::paintEvent(QPaintEvent* event) diff --git a/src/app/qt/element/QtCodeArea.h b/src/app/qt/element/QtCodeArea.h index bd5c9354..91616b19 100644 --- a/src/app/qt/element/QtCodeArea.h +++ b/src/app/qt/element/QtCodeArea.h @@ -49,7 +49,7 @@ public: ); virtual ~QtCodeArea(); - QSize sizeHint() const; + virtual QSize sizeHint() const; void lineNumberAreaPaintEvent(QPaintEvent *event); int lineNumberDigits() const; diff --git a/src/app/qt/element/QtCodeFile.cpp b/src/app/qt/element/QtCodeFile.cpp index d793e908..29300785 100644 --- a/src/app/qt/element/QtCodeFile.cpp +++ b/src/app/qt/element/QtCodeFile.cpp @@ -39,9 +39,12 @@ QtCodeFile::QtCodeFile(const FilePath& filePath, QtCodeFileList* parent) 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->setFixedHeight(std::max(m_title->fontMetrics().height() * 1.2, 28.0)); m_title->setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Fixed); titleLayout->addWidget(m_title); + titleWidget->setMinimumHeight(m_title->height() + 4); + titleLayout->addStretch(3); m_minimizeButton = new QPushButton(this); diff --git a/src/app/qt/element/QtMainWindow.cpp b/src/app/qt/element/QtMainWindow.cpp index ba43fca8..821a6712 100644 --- a/src/app/qt/element/QtMainWindow.cpp +++ b/src/app/qt/element/QtMainWindow.cpp @@ -21,6 +21,7 @@ #include "utility/messaging/type/MessageSaveProject.h" #include "utility/messaging/type/MessageUndo.h" #include "utility/messaging/type/MessageWindowFocus.h" +#include "utility/messaging/type/MessageZoom.h" QtMainWindow::QtMainWindow() { @@ -34,6 +35,7 @@ QtMainWindow::QtMainWindow() setupProjectMenu(); setupEditMenu(); + setupViewMenu(); setupHelpMenu(); setupShortcuts(); @@ -216,6 +218,16 @@ void QtMainWindow::redo() MessageRedo().dispatch(); } +void QtMainWindow::zoomIn() +{ + MessageZoom(true).dispatch(); +} + +void QtMainWindow::zoomOut() +{ + MessageZoom(false).dispatch(); +} + void QtMainWindow::handleEscapeShortcut() { m_startScreen->hide(); @@ -247,11 +259,20 @@ void QtMainWindow::setupEditMenu() menuBar()->addMenu(menu); menu->addAction(tr("&Refresh"), this, SLOT(refresh()), QKeySequence::Refresh); - menu->addAction(tr("Undo"), this, SLOT(undo()), QKeySequence::Undo ); - menu->addAction(tr("Redo"), this, SLOT(redo()), QKeySequence::Redo ); + menu->addAction(tr("Undo"), this, SLOT(undo()), QKeySequence::Undo); + menu->addAction(tr("Redo"), this, SLOT(redo()), QKeySequence::Redo); menu->addAction(tr("&Find"), this, SLOT(find()), QKeySequence::Find); } +void QtMainWindow::setupViewMenu() +{ + QMenu *menu = new QMenu(tr("&View"), this); + menuBar()->addMenu(menu); + + menu->addAction(tr("Larger font"), this, SLOT(zoomIn()), QKeySequence::ZoomIn); + menu->addAction(tr("Smaller font"), this, SLOT(zoomOut()), QKeySequence::ZoomOut); +} + void QtMainWindow::setupHelpMenu() { QMenu *menu = new QMenu(tr("&Help"), this); diff --git a/src/app/qt/element/QtMainWindow.h b/src/app/qt/element/QtMainWindow.h index f0e87ce6..23d71d36 100644 --- a/src/app/qt/element/QtMainWindow.h +++ b/src/app/qt/element/QtMainWindow.h @@ -45,12 +45,15 @@ public slots: void showLicences(); void undo(); void redo(); + void zoomIn(); + void zoomOut(); void handleEscapeShortcut(); private: void setupEditMenu(); void setupProjectMenu(); + void setupViewMenu(); void setupHelpMenu(); void setupShortcuts(); diff --git a/src/app/qt/element/QtRefreshBar.cpp b/src/app/qt/element/QtRefreshBar.cpp index 229cca41..3520ba48 100644 --- a/src/app/qt/element/QtRefreshBar.cpp +++ b/src/app/qt/element/QtRefreshBar.cpp @@ -6,6 +6,8 @@ #include "utility/messaging/type/MessageAutoRefreshChanged.h" #include "utility/messaging/type/MessageRefresh.h" +#include "settings/ApplicationSettings.h" + QtRefreshBar::QtRefreshBar() { setObjectName("refresh_bar"); @@ -48,3 +50,11 @@ void QtRefreshBar::autoRefreshClicked() { MessageAutoRefreshChanged(m_autoRefreshButton->isChecked()).dispatch(); } + +void QtRefreshBar::refreshStyle() +{ + float height = std::max(ApplicationSettings::getInstance()->getFontSize() + 16, 30); + + m_refreshButton->setFixedHeight(height); + m_autoRefreshButton->setFixedHeight(height); +} diff --git a/src/app/qt/element/QtRefreshBar.h b/src/app/qt/element/QtRefreshBar.h index e0b2c17c..22723402 100644 --- a/src/app/qt/element/QtRefreshBar.h +++ b/src/app/qt/element/QtRefreshBar.h @@ -14,6 +14,8 @@ public: QtRefreshBar(); virtual ~QtRefreshBar(); + void refreshStyle(); + private slots: void refreshClicked(); void autoRefreshClicked(); diff --git a/src/app/qt/element/QtSearchBar.cpp b/src/app/qt/element/QtSearchBar.cpp index a0770cc9..9a95f2fc 100644 --- a/src/app/qt/element/QtSearchBar.cpp +++ b/src/app/qt/element/QtSearchBar.cpp @@ -5,6 +5,7 @@ #include #include "qt/element/QtSmartSearchBox.h" +#include "settings/ApplicationSettings.h" QtSearchBar::QtSearchBar() { @@ -23,7 +24,7 @@ QtSearchBar::QtSearchBar() layout->addWidget(m_searchBoxContainer); QBoxLayout* innerLayout = new QHBoxLayout(); - innerLayout->setContentsMargins(7, 3, 5, 3); + innerLayout->setContentsMargins(7, 3, 5, 2); m_searchBoxContainer->setLayout(innerLayout); m_searchBox = new QtSmartSearchBox(m_searchBoxContainer); @@ -41,14 +42,9 @@ QtSearchBar::QtSearchBar() m_searchButton->setIcon(QIcon("data/gui/search_view/images/search.png")); layout->addWidget(m_searchButton); - // m_caseSensitiveButton = new QPushButton(this); - // m_caseSensitiveButton->setObjectName("case_sensitive_button"); - // m_caseSensitiveButton->setCheckable(true); - // m_caseSensitiveButton->setToolTip("case sensitive"); - // m_caseSensitiveButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac - // layout->addWidget(m_caseSensitiveButton); - connect(m_searchButton, SIGNAL(clicked()), m_searchBox, SLOT(search())); + + refreshStyle(); } QtSearchBar::~QtSearchBar() @@ -83,3 +79,9 @@ QAbstractItemView* QtSearchBar::getCompleterPopup() } return nullptr; } + +void QtSearchBar::refreshStyle() +{ + m_searchBox->setFixedHeight(std::max(ApplicationSettings::getInstance()->getFontSize() + 11, 25)); + m_searchButton->setFixedHeight(m_searchBox->height() + 5); +} diff --git a/src/app/qt/element/QtSearchBar.h b/src/app/qt/element/QtSearchBar.h index f2f71d62..9a9677ec 100644 --- a/src/app/qt/element/QtSearchBar.h +++ b/src/app/qt/element/QtSearchBar.h @@ -28,11 +28,12 @@ public: QAbstractItemView* getCompleterPopup(); + void refreshStyle(); + private: QWidget* m_searchBoxContainer; // used for correct clipping inside the search box QtSmartSearchBox* m_searchBox; QPushButton* m_searchButton; - // QPushButton* m_caseSensitiveButton; }; #endif // QT_SEARCH_BAR_H diff --git a/src/app/qt/element/QtSmartSearchBox.cpp b/src/app/qt/element/QtSmartSearchBox.cpp index 1b2de8eb..90122a51 100644 --- a/src/app/qt/element/QtSmartSearchBox.cpp +++ b/src/app/qt/element/QtSmartSearchBox.cpp @@ -581,10 +581,11 @@ void QtSmartSearchBox::updateElements() std::shared_ptr element = std::make_shared(QString::fromStdString(name), this); m_elements.push_back(element); + std::string color = "#000000"; std::string hoverColor = "#000000"; - if(token.queryNodeType == QueryNode::QUERYNODETYPE_TOKEN) + if (token.queryNodeType == QueryNode::QUERYNODETYPE_TOKEN) { element->setObjectName(QString::fromStdString("search_element_" + token.getNodeTypeAsString())); color = ApplicationSettings::getInstance()->getNodeTypeColor(token.nodeType); @@ -597,19 +598,18 @@ void QtSmartSearchBox::updateElements() hoverColor = ApplicationSettings::getInstance()->getQueryNodeTypeColor(token.queryNodeType, "hover"); } - std::string stylesheet = "QPushButton {background-color:"; - stylesheet += color; - stylesheet += ";} QPushButton:hover{ background-color:"; - stylesheet += hoverColor; - stylesheet += ";}"; + std::stringstream css; + css << "QPushButton { border: none; padding: 0px 4px; background-color:"; + css << color; + css << ";} QPushButton:hover { background-color:"; + css << hoverColor; + css << ";}"; - element->setStyleSheet(stylesheet.c_str()); + element->setStyleSheet(css.str().c_str()); connect(element.get(), SIGNAL(wasChecked(QtQueryElement*)), this, SLOT(onElementSelected(QtQueryElement*))); } - setStyleSheet(TextAccess::createFromFile("data/gui/search_view/search_element.css")->getText().c_str()); - updatePlaceholder(); hideAutoCompletions(); diff --git a/src/app/qt/element/QtUndoRedo.cpp b/src/app/qt/element/QtUndoRedo.cpp index ee1259f7..dfdc26c0 100644 --- a/src/app/qt/element/QtUndoRedo.cpp +++ b/src/app/qt/element/QtUndoRedo.cpp @@ -3,9 +3,10 @@ #include #include -#include -#include +#include "utility/messaging/type/MessageUndo.h" +#include "utility/messaging/type/MessageRedo.h" +#include "settings/ApplicationSettings.h" QtUndoRedo::QtUndoRedo() { @@ -35,6 +36,8 @@ QtUndoRedo::QtUndoRedo() connect(m_undoButton, SIGNAL(clicked()), this, SLOT(undo())); connect(m_redoButton, SIGNAL(clicked()), this, SLOT(redo())); + + refreshStyle(); } QtUndoRedo::~QtUndoRedo() @@ -60,3 +63,11 @@ void QtUndoRedo::setRedoButtonEnabled(bool enabled) { m_redoButton->setEnabled(enabled); } + +void QtUndoRedo::refreshStyle() +{ + float height = std::max(ApplicationSettings::getInstance()->getFontSize() + 16, 30); + + m_undoButton->setFixedHeight(height); + m_redoButton->setFixedHeight(height); +} diff --git a/src/app/qt/element/QtUndoRedo.h b/src/app/qt/element/QtUndoRedo.h index c5732393..db23f9b5 100644 --- a/src/app/qt/element/QtUndoRedo.h +++ b/src/app/qt/element/QtUndoRedo.h @@ -15,9 +15,12 @@ class QtUndoRedo public: QtUndoRedo(); ~QtUndoRedo(); + void setRedoButtonEnabled(bool enabled); void setUndoButtonEnabled(bool enabled); + void refreshStyle(); + private slots: void undo(); void redo(); diff --git a/src/app/qt/graphics/QtStraightLineItem.cpp b/src/app/qt/graphics/QtStraightLineItem.cpp index 2a567a5d..09d33453 100644 --- a/src/app/qt/graphics/QtStraightLineItem.cpp +++ b/src/app/qt/graphics/QtStraightLineItem.cpp @@ -15,7 +15,7 @@ QtStraightLineItem::QtStraightLineItem(QGraphicsItem* parent) this->setAcceptHoverEvents(true); m_circle = new QtRoundedRectItem(this); - m_circle->setRadius(10); + m_circle->setRadius(100); m_circle->setBrush(QBrush(QColor("#FFF"))); m_circle->setAcceptHoverEvents(true); @@ -87,13 +87,15 @@ void QtStraightLineItem::updateLine( Vec2f mid = (op + tp) / 2; + size_t radius = GraphViewStyle::getFontSizeOfExpandToggleNode(); + if (showArrow) { Vec2f unit = (tp - op).normalize(); Vec2f nUnit(-unit.y, unit.x); - Vec2f arrow = mid + unit * 22; + Vec2f arrow = mid + unit * (radius + 13); - Vec2f arrowSide = mid + unit * 15 + nUnit * 7; + Vec2f arrowSide = mid + unit * (radius + 6) + nUnit * 7; m_arrowRight->setLine(arrow.x, arrow.y, arrowSide.x, arrowSide.y); arrowSide -= nUnit * 14; @@ -111,7 +113,7 @@ void QtStraightLineItem::updateLine( m_arrowRight->hide(); } - m_circle->setRect(mid.x - 10, mid.y - 10, 20, 20); + m_circle->setRect(mid.x - radius, mid.y - radius, 2 * radius, 2 * radius); m_circle->setPen(QPen(QColor("#E0E0E0"), 2)); QString numberStr = QString::number(number); diff --git a/src/app/qt/view/QtCodeView.cpp b/src/app/qt/view/QtCodeView.cpp index 3e304993..75febb93 100644 --- a/src/app/qt/view/QtCodeView.cpp +++ b/src/app/qt/view/QtCodeView.cpp @@ -1,10 +1,13 @@ #include "qt/view/QtCodeView.h" +#include + #include "utility/file/FileSystem.h" #include "utility/text/TextAccess.h" #include "qt/element/QtCodeFileList.h" #include "qt/view/QtViewWidgetWrapper.h" +#include "settings/ApplicationSettings.h" QtCodeView::QtCodeView(ViewLayout* viewLayout) : CodeView(viewLayout) @@ -114,5 +117,10 @@ void QtCodeView::doDefocusToken() void QtCodeView::setStyleSheet(QWidget* widget) const { - widget->setStyleSheet(TextAccess::createFromFile("data/gui/code_view/code_view.css")->getText().c_str()); + std::stringstream css; + css << TextAccess::createFromFile("data/gui/code_view/code_view.css")->getText(); + css << "* { font-size: " << ApplicationSettings::getInstance()->getFontSize() << "pt; }"; + css << "#code_file #code_snippet * { font-family: " << ApplicationSettings::getInstance()->getFontName() << "; }"; + + widget->setStyleSheet(css.str().c_str()); } diff --git a/src/app/qt/view/QtGraphViewStyleImpl.cpp b/src/app/qt/view/QtGraphViewStyleImpl.cpp index 3bd032bf..22c65b0e 100644 --- a/src/app/qt/view/QtGraphViewStyleImpl.cpp +++ b/src/app/qt/view/QtGraphViewStyleImpl.cpp @@ -6,3 +6,8 @@ float QtGraphViewStyleImpl::getCharWidthForNodeType(Node::NodeType type) { return QFontMetrics(QtGraphNode::getFontForNodeType(type)).width("QtGraphNode::QtGraphNode::QtGraphNode") / 37.0f; } + +float QtGraphViewStyleImpl::getCharHeightForNodeType(Node::NodeType type) +{ + return QFontMetrics(QtGraphNode::getFontForNodeType(type)).height(); +} diff --git a/src/app/qt/view/QtGraphViewStyleImpl.h b/src/app/qt/view/QtGraphViewStyleImpl.h index 9957a9da..67140985 100644 --- a/src/app/qt/view/QtGraphViewStyleImpl.h +++ b/src/app/qt/view/QtGraphViewStyleImpl.h @@ -9,6 +9,7 @@ class QtGraphViewStyleImpl { public: virtual float getCharWidthForNodeType(Node::NodeType type); + virtual float getCharHeightForNodeType(Node::NodeType type); }; #endif // QT_GRAPH_VIEW_STYLE_IMPL_H diff --git a/src/app/qt/view/QtRefreshView.cpp b/src/app/qt/view/QtRefreshView.cpp index abbd803b..b0bc960b 100644 --- a/src/app/qt/view/QtRefreshView.cpp +++ b/src/app/qt/view/QtRefreshView.cpp @@ -1,8 +1,12 @@ #include "qt/view/QtRefreshView.h" +#include + +#include "utility/text/TextAccess.h" + #include "component/controller/RefreshController.h" #include "qt/view/QtViewWidgetWrapper.h" -#include "utility/text/TextAccess.h" +#include "settings/ApplicationSettings.h" QtRefreshView::QtRefreshView(ViewLayout* viewLayout) : RefreshView(viewLayout) @@ -33,11 +37,14 @@ void QtRefreshView::refreshView() void QtRefreshView::doRefreshView() { setStyleSheet(); + m_widget->refreshStyle(); } void QtRefreshView::setStyleSheet() { - std::string css = TextAccess::createFromFile("data/gui/refresh_view/refresh_view.css")->getText(); + std::stringstream css; + css << TextAccess::createFromFile("data/gui/refresh_view/refresh_view.css")->getText(); + css << "* { font-size: " << ApplicationSettings::getInstance()->getFontSize() << "pt; }"; - m_widget->setStyleSheet(css.c_str()); + m_widget->setStyleSheet(css.str().c_str()); } diff --git a/src/app/qt/view/QtSearchView.cpp b/src/app/qt/view/QtSearchView.cpp index c6c4975c..dae0b3ad 100644 --- a/src/app/qt/view/QtSearchView.cpp +++ b/src/app/qt/view/QtSearchView.cpp @@ -1,8 +1,12 @@ #include "qt/view/QtSearchView.h" +#include + +#include "utility/text/TextAccess.h" + #include "component/controller/SearchController.h" #include "qt/view/QtViewWidgetWrapper.h" -#include "utility/text/TextAccess.h" +#include "settings/ApplicationSettings.h" QtSearchView::QtSearchView(ViewLayout* viewLayout) : SearchView(viewLayout) @@ -51,6 +55,7 @@ void QtSearchView::setAutocompletionList(const std::vector& autocom void QtSearchView::doRefreshView() { setStyleSheet(); + m_widget->refreshStyle(); m_widget->setMatches(std::deque()); } @@ -73,12 +78,16 @@ void QtSearchView::doSetAutocompletionList(const std::vector& autoc void QtSearchView::setStyleSheet() { - std::string css = TextAccess::createFromFile("data/gui/search_view/search_view.css")->getText(); + std::stringstream css; + css << TextAccess::createFromFile("data/gui/search_view/search_view.css")->getText(); + css << "* { font-size: " << ApplicationSettings::getInstance()->getFontSize() << "pt; }"; + css << "#search_box, #search_box *, #search_box_popup { font-family: " << ApplicationSettings::getInstance()->getFontName() << "; }"; + css << "#search_box, #search_box * { font-size: " << ApplicationSettings::getInstance()->getFontSize() + 2 << "pt; }"; - m_widget->setStyleSheet(css.c_str()); + m_widget->setStyleSheet(css.str().c_str()); if (m_widget->getCompleterPopup()) { - m_widget->getCompleterPopup()->setStyleSheet(css.c_str()); + m_widget->getCompleterPopup()->setStyleSheet(css.str().c_str()); } } diff --git a/src/app/qt/view/QtUndoRedoView.cpp b/src/app/qt/view/QtUndoRedoView.cpp index 14ce118c..ef70e869 100644 --- a/src/app/qt/view/QtUndoRedoView.cpp +++ b/src/app/qt/view/QtUndoRedoView.cpp @@ -1,8 +1,12 @@ #include "qt/view/QtUndoRedoView.h" +#include + +#include "utility/text/TextAccess.h" + #include "qt/view/QtMainView.h" #include "qt/view/QtViewWidgetWrapper.h" -#include "utility/text/TextAccess.h" +#include "settings/ApplicationSettings.h" QtUndoRedoView::QtUndoRedoView(ViewLayout* viewLayout) : UndoRedoView(viewLayout) @@ -28,15 +32,17 @@ void QtUndoRedoView::initView() void QtUndoRedoView::refreshView() { + setStyleSheet(); + m_widget->refreshStyle(); } - void QtUndoRedoView::setStyleSheet() { - std::string css = TextAccess::createFromFile("data/gui/undoredo_view/undoredo_view.css")->getText(); - - m_widget->setStyleSheet(css.c_str()); + std::stringstream css; + css << TextAccess::createFromFile("data/gui/undoredo_view/undoredo_view.css")->getText(); + css << "* { font-size: " << ApplicationSettings::getInstance()->getFontSize() << "pt; }"; + m_widget->setStyleSheet(css.str().c_str()); } void QtUndoRedoView::doSetRedoButtonEnabled(bool enabled) diff --git a/src/app/qt/view/graphElements/QtGraphNodeAccess.cpp b/src/app/qt/view/graphElements/QtGraphNodeAccess.cpp index e68f42fb..559062a8 100644 --- a/src/app/qt/view/graphElements/QtGraphNodeAccess.cpp +++ b/src/app/qt/view/graphElements/QtGraphNodeAccess.cpp @@ -52,7 +52,7 @@ void QtGraphNodeAccess::updateStyle() font.setCapitalization(QFont::AllUppercase); m_text->setFont(font); - m_text->setPos(style.textOffset.x + m_accessIconSize + 3, style.textOffset.y + m_accessIconSize / 2 - 1); + m_text->setPos(style.textOffset.x + m_accessIconSize + 3, style.textOffset.x + m_accessIconSize + 2 - style.fontSize); m_accessIcon->setPos(style.textOffset.x, style.textOffset.y); } diff --git a/src/app/qt/view/graphElements/QtGraphNodeExpandToggle.cpp b/src/app/qt/view/graphElements/QtGraphNodeExpandToggle.cpp index 8b14aeb8..c7888b42 100644 --- a/src/app/qt/view/graphElements/QtGraphNodeExpandToggle.cpp +++ b/src/app/qt/view/graphElements/QtGraphNodeExpandToggle.cpp @@ -64,11 +64,11 @@ void QtGraphNodeExpandToggle::updateStyle() m_text->setPos( (m_rect->rect().width() - QFontMetrics(m_text->font()).width(m_text->text())) / 2, - 5 + 6 ); m_icon->setPos( (m_rect->rect().width() - m_icon->pixmap().width() / QtDeviceScaledPixmap::devicePixelRatio()) / 2, - (m_invisibleSubNodeCount == 0 ? 9 : 14) + (m_invisibleSubNodeCount == 0 ? m_rect->rect().height() / 2 - 2 : m_rect->rect().height() - 8) ); } diff --git a/src/lib/Application.cpp b/src/lib/Application.cpp index 8e62ae5b..c175ab5d 100644 --- a/src/lib/Application.cpp +++ b/src/lib/Application.cpp @@ -6,6 +6,7 @@ #include "utility/messaging/type/MessageStatus.h" #include "utility/scheduling/TaskScheduler.h" +#include "component/view/GraphViewStyle.h" #include "component/view/MainView.h" #include "component/view/ViewFactory.h" #include "data/StorageCache.h" @@ -31,9 +32,11 @@ std::shared_ptr Application::create(ViewFactory* viewFactory) void Application::loadSettings() { ApplicationSettings::getInstance()->load("data/ApplicationSettings.xml"); + GraphViewStyle::loadStyleSettings(); } Application::Application() + : m_isInitialParse(true) { TaskScheduler::getInstance()->startSchedulerLoopThreaded(); MessageQueue::getInstance()->setSendMessagesAsTasks(true); @@ -96,11 +99,13 @@ void Application::handleMessage(MessageFinishedParsing* message) { m_project->logStats(); - if (message->errorCount > 0) + if (!m_isInitialParse || message->errorCount > 0) { return; } + m_isInitialParse = false; + Id mainId = m_storageCache->getIdForNodeWithName("main"); if (!mainId) @@ -126,17 +131,26 @@ void Application::handleMessage(MessageFinishedParsing* message) void Application::handleMessage(MessageLoadProject* message) { + m_isInitialParse = true; loadProject(message->projectSettingsFilePath); } void Application::handleMessage(MessageLoadSource* message) { + m_isInitialParse = true; loadSource(message->sourceDirectoryPath); } void Application::handleMessage(MessageRefresh* message) { loadSettings(); + + if (message->uiOnly) + { + m_componentManager->refreshViews(); + return; + } + reloadProject(); } diff --git a/src/lib/Application.h b/src/lib/Application.h index f71276c4..b34823b3 100644 --- a/src/lib/Application.h +++ b/src/lib/Application.h @@ -48,6 +48,8 @@ private: std::shared_ptr m_mainView; std::shared_ptr m_componentManager; + + bool m_isInitialParse; }; #endif // APPLICATION_H diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index d1abce5b..3813b9e1 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -267,15 +267,16 @@ add_files( utility/messaging/type/MessageInterruptTasks.h utility/messaging/type/MessageLoadProject.h utility/messaging/type/MessageLoadSource.h + utility/messaging/type/MessageRedo.h utility/messaging/type/MessageRefresh.h utility/messaging/type/MessageSaveProject.h utility/messaging/type/MessageSearch.h utility/messaging/type/MessageSearchAutocomplete.h utility/messaging/type/MessageShowFile.h utility/messaging/type/MessageStatus.h - utility/messaging/type/MessageRedo.h utility/messaging/type/MessageUndo.h utility/messaging/type/MessageWindowFocus.h + utility/messaging/type/MessageZoom.h utility/messaging/Message.h utility/messaging/MessageBase.h diff --git a/src/lib/component/controller/CodeController.cpp b/src/lib/component/controller/CodeController.cpp index 76771aa9..dcd3a4fa 100644 --- a/src/lib/component/controller/CodeController.cpp +++ b/src/lib/component/controller/CodeController.cpp @@ -25,7 +25,7 @@ const uint CodeController::s_lineRadius = 2; void CodeController::handleMessage(MessageActivateTokens* message) { - if (message->isIgnorable()) + if (message->isEdge && message->isIgnorable()) { return; } diff --git a/src/lib/component/controller/FeatureController.cpp b/src/lib/component/controller/FeatureController.cpp index 6b4c3a39..e137e25e 100644 --- a/src/lib/component/controller/FeatureController.cpp +++ b/src/lib/component/controller/FeatureController.cpp @@ -1,8 +1,10 @@ #include "component/controller/FeatureController.h" #include "utility/messaging/type/MessageActivateTokens.h" +#include "utility/messaging/type/MessageRefresh.h" #include "data/access/StorageAccess.h" +#include "settings/ApplicationSettings.h" FeatureController::FeatureController(StorageAccess* storageAccess) : m_storageAccess(storageAccess) @@ -85,3 +87,12 @@ void FeatureController::handleMessage(MessageSearch* message) m.undoRedoType = message->undoRedoType; m.dispatchImmediately(); } + +void FeatureController::handleMessage(MessageZoom* message) +{ + ApplicationSettings* settings = ApplicationSettings::getInstance().get(); + settings->setFontSize(std::max(settings->getFontSize() + (message->zoomIn ? 1 : -1), 5)); + settings->save(); + + MessageRefresh(true).dispatch(); +} diff --git a/src/lib/component/controller/FeatureController.h b/src/lib/component/controller/FeatureController.h index cf1c7db4..2d6bc2b5 100644 --- a/src/lib/component/controller/FeatureController.h +++ b/src/lib/component/controller/FeatureController.h @@ -7,6 +7,7 @@ #include "utility/messaging/type/MessageActivateNode.h" #include "utility/messaging/type/MessageActivateTokenLocation.h" #include "utility/messaging/type/MessageSearch.h" +#include "utility/messaging/type/MessageZoom.h" #include "component/controller/Controller.h" @@ -19,6 +20,7 @@ class FeatureController , public MessageListener , public MessageListener , public MessageListener + , public MessageListener { public: FeatureController(StorageAccess* storageAccess); @@ -30,6 +32,7 @@ private: virtual void handleMessage(MessageActivateNode* message); virtual void handleMessage(MessageActivateTokenLocation* message); virtual void handleMessage(MessageSearch* message); + virtual void handleMessage(MessageZoom* message); StorageAccess* m_storageAccess; }; diff --git a/src/lib/component/controller/GraphController.cpp b/src/lib/component/controller/GraphController.cpp index 09416e20..0103048a 100644 --- a/src/lib/component/controller/GraphController.cpp +++ b/src/lib/component/controller/GraphController.cpp @@ -712,7 +712,7 @@ void GraphController::layoutNestingRecursive(DummyNode& node) const } subNode.position.x = margins.left + x; - subNode.position.y = margins.top + y; + subNode.position.y = margins.top + margins.charHeight + y; if (layoutHorizontal) { @@ -747,7 +747,7 @@ void GraphController::layoutNestingRecursive(DummyNode& node) const } node.size.x = margins.left + width + margins.right; - node.size.y = margins.top + y + height + margins.bottom; + node.size.y = margins.top + margins.charHeight + y + height + margins.bottom; for (DummyNode& subNode : node.subNodes) { diff --git a/src/lib/component/controller/RefreshController.cpp b/src/lib/component/controller/RefreshController.cpp index 4112fa3b..8f880cc2 100644 --- a/src/lib/component/controller/RefreshController.cpp +++ b/src/lib/component/controller/RefreshController.cpp @@ -1,5 +1,7 @@ #include "component/controller/RefreshController.h" +#include "utility/messaging/type/MessageRefresh.h" + #include "component/view/RefreshView.h" RefreshController::RefreshController() @@ -16,11 +18,6 @@ void RefreshController::handleMessage(MessageAutoRefreshChanged* message) m_autoRefreshEnabled = message->enabled; } -void RefreshController::handleMessage(MessageRefresh* message) -{ - getView()->refreshView(); -} - void RefreshController::handleMessage(MessageWindowFocus* message) { if (m_autoRefreshEnabled) diff --git a/src/lib/component/controller/RefreshController.h b/src/lib/component/controller/RefreshController.h index 54ae9d1c..ae19f909 100644 --- a/src/lib/component/controller/RefreshController.h +++ b/src/lib/component/controller/RefreshController.h @@ -4,7 +4,6 @@ #include "component/controller/Controller.h" #include "utility/messaging/MessageListener.h" #include "utility/messaging/type/MessageAutoRefreshChanged.h" -#include "utility/messaging/type/MessageRefresh.h" #include "utility/messaging/type/MessageWindowFocus.h" class RefreshView; @@ -12,7 +11,6 @@ class RefreshView; class RefreshController : public Controller , public MessageListener - , public MessageListener , public MessageListener { public: @@ -21,7 +19,6 @@ public: private: virtual void handleMessage(MessageAutoRefreshChanged* message); - virtual void handleMessage(MessageRefresh* message); virtual void handleMessage(MessageWindowFocus* message); RefreshView* getView(); diff --git a/src/lib/component/controller/UndoRedoController.cpp b/src/lib/component/controller/UndoRedoController.cpp index fd4a1215..bd7c5cf8 100644 --- a/src/lib/component/controller/UndoRedoController.cpp +++ b/src/lib/component/controller/UndoRedoController.cpp @@ -99,6 +99,34 @@ void UndoRedoController::handleMessage(MessageRedo* message) } } +void UndoRedoController::handleMessage(MessageRefresh* message) +{ + if (!m_lastCommand.message) + { + return; + } + + if (m_lastCommand.order > 0) + { + replayCommands(false); + } + + std::shared_ptr msg = m_lastCommand.message; + + if (m_undo.size()) + { + m_lastCommand = m_undo.back(); + m_undo.pop_back(); + } + else + { + m_lastCommand.message.reset(); + } + + msg->undoRedoType = MessageBase::UNDOTYPE_REDO; + msg->dispatch(); +} + void UndoRedoController::handleMessage(MessageSearch* message) { if (m_lastCommand.message && m_lastCommand.message->getType() == message->getType() && @@ -112,6 +140,11 @@ void UndoRedoController::handleMessage(MessageSearch* message) } void UndoRedoController::handleMessage(MessageUndo* message) +{ + replayCommands(true); +} + +void UndoRedoController::replayCommands(bool removeLast) { if (!m_undo.empty()) { @@ -131,8 +164,17 @@ void UndoRedoController::handleMessage(MessageUndo* message) } m = m_undo.back().message; - m_undo.pop_back(); - m->undoRedoType = MessageBase::UNDOTYPE_UNDO; + + if (removeLast) + { + m_undo.pop_back(); + m->undoRedoType = MessageBase::UNDOTYPE_UNDO; + } + else + { + m->undoRedoType = MessageBase::UNDOTYPE_IGNORE; + } + m->dispatch(); } } diff --git a/src/lib/component/controller/UndoRedoController.h b/src/lib/component/controller/UndoRedoController.h index ad48847e..5f90b17d 100644 --- a/src/lib/component/controller/UndoRedoController.h +++ b/src/lib/component/controller/UndoRedoController.h @@ -14,6 +14,7 @@ #include "utility/messaging/type/MessageLoadProject.h" #include "utility/messaging/type/MessageLoadSource.h" #include "utility/messaging/type/MessageRedo.h" +#include "utility/messaging/type/MessageRefresh.h" #include "utility/messaging/type/MessageSearch.h" #include "utility/messaging/type/MessageUndo.h" @@ -32,6 +33,7 @@ class UndoRedoController , public MessageListener , public MessageListener , public MessageListener + , public MessageListener , public MessageListener , public MessageListener { @@ -59,9 +61,12 @@ private: virtual void handleMessage(MessageLoadProject* message); virtual void handleMessage(MessageLoadSource* message); virtual void handleMessage(MessageRedo* message); + virtual void handleMessage(MessageRefresh* message); virtual void handleMessage(MessageSearch* message); virtual void handleMessage(MessageUndo* message); + void replayCommands(bool removeLast); + void processCommand(const Command& command); void processNormalCommand(const Command& command); void processRedoCommand(const Command& command); diff --git a/src/lib/component/view/GraphViewStyle.cpp b/src/lib/component/view/GraphViewStyle.cpp index 1357f093..7e5c4218 100644 --- a/src/lib/component/view/GraphViewStyle.cpp +++ b/src/lib/component/view/GraphViewStyle.cpp @@ -14,6 +14,7 @@ GraphViewStyle::NodeMargins::NodeMargins() , spacingY(0) , minWidth(0) , charWidth(0.0f) + , charHeight(0.0f) { } @@ -56,6 +57,15 @@ void GraphViewStyle::setImpl(std::shared_ptr impl) s_impl = impl; } +void GraphViewStyle::loadStyleSettings() +{ + s_fontSize = ApplicationSettings::getInstance()->getFontSize(); + s_fontName = ApplicationSettings::getInstance()->getFontName(); + + s_charWidths.clear(); + s_charHeights.clear(); +} + float GraphViewStyle::getCharWidthForNodeType(Node::NodeType type) { std::map::const_iterator it = s_charWidths.find(type); @@ -70,13 +80,27 @@ float GraphViewStyle::getCharWidthForNodeType(Node::NodeType type) return charWidth; } +float GraphViewStyle::getCharHeightForNodeType(Node::NodeType type) +{ + std::map::const_iterator it = s_charHeights.find(type); + + if (it != s_charHeights.end()) + { + return it->second; + } + + float charHeight = getImpl()->getCharHeightForNodeType(type); + s_charHeights.emplace(type, charHeight); + return charHeight; +} + size_t GraphViewStyle::getFontSizeForNodeType(Node::NodeType type) { switch (type) { case Node::NODE_UNDEFINED: case Node::NODE_NAMESPACE: - return 12; + return s_fontSize - 2; case Node::NODE_UNDEFINED_TYPE: case Node::NODE_STRUCT: @@ -85,7 +109,7 @@ size_t GraphViewStyle::getFontSizeForNodeType(Node::NodeType type) case Node::NODE_TYPEDEF: case Node::NODE_TEMPLATE_PARAMETER_TYPE: case Node::NODE_FILE: - return 14; + return s_fontSize; case Node::NODE_UNDEFINED_FUNCTION: case Node::NODE_UNDEFINED_VARIABLE: @@ -94,23 +118,23 @@ size_t GraphViewStyle::getFontSizeForNodeType(Node::NodeType type) case Node::NODE_GLOBAL_VARIABLE: case Node::NODE_FIELD: case Node::NODE_ENUM_CONSTANT: - return 11; + return s_fontSize - 3; } } size_t GraphViewStyle::getFontSizeOfAccessNode() { - return 11; + return s_fontSize - 3; } size_t GraphViewStyle::getFontSizeOfExpandToggleNode() { - return 9; + return s_fontSize - 5; } std::string GraphViewStyle::getFontNameForNodeType(Node::NodeType type) { - return "Source Code Pro"; + return s_fontName; } std::string GraphViewStyle::getFontNameOfAccessNode() @@ -134,7 +158,7 @@ GraphViewStyle::NodeMargins GraphViewStyle::getMarginsForNodeType(Node::NodeType case Node::NODE_UNDEFINED: case Node::NODE_NAMESPACE: margins.left = margins.right = 15; - margins.top = 28; + margins.top = 10; margins.bottom = 15; break; @@ -148,33 +172,30 @@ GraphViewStyle::NodeMargins GraphViewStyle::getMarginsForNodeType(Node::NodeType if (hasChildren) { margins.left = margins.right = 10; - margins.top = 33; + margins.top = 15; margins.bottom = 10; } else { margins.left = margins.right = 8; - margins.top = margins.bottom = 17; + margins.top = margins.bottom = 8; } break; case Node::NODE_UNDEFINED_FUNCTION: case Node::NODE_FUNCTION: case Node::NODE_METHOD: - margins.left = margins.right = 5; - margins.top = margins.bottom = 10; - break; - case Node::NODE_UNDEFINED_VARIABLE: case Node::NODE_GLOBAL_VARIABLE: case Node::NODE_FIELD: case Node::NODE_ENUM_CONSTANT: margins.left = margins.right = 5; - margins.top = margins.bottom = 10; + margins.top = margins.bottom = 3; break; } margins.charWidth = getCharWidthForNodeType(type); + margins.charHeight = getCharHeightForNodeType(type); return margins; } @@ -211,8 +232,8 @@ GraphViewStyle::NodeMargins GraphViewStyle::getMarginsOfExpandToggleNode() { NodeMargins margins; - margins.left = margins.right = margins.top = margins.bottom = 11; - margins.minWidth = 0; + margins.left = margins.right = margins.top = margins.bottom = 7; + margins.minWidth = margins.charHeight = getFontSizeOfExpandToggleNode(); return margins; } @@ -364,7 +385,7 @@ GraphViewStyle::NodeStyle GraphViewStyle::getStyleOfExpandToggleNode() style.color = "#FFFFFF"; style.borderColor = "#00000000"; - style.cornerRadius = 12; + style.cornerRadius = 100; style.fontName = getFontNameOfExpandToggleNode(); style.fontSize = getFontSizeOfExpandToggleNode(); @@ -466,4 +487,9 @@ size_t GraphViewStyle::s_gridCellSize = 5; size_t GraphViewStyle::s_gridCellPadding = 10; std::map GraphViewStyle::s_charWidths; +std::map GraphViewStyle::s_charHeights; + std::shared_ptr GraphViewStyle::s_impl; + +int GraphViewStyle::s_fontSize; +std::string GraphViewStyle::s_fontName; diff --git a/src/lib/component/view/GraphViewStyle.h b/src/lib/component/view/GraphViewStyle.h index d661151e..63e80417 100644 --- a/src/lib/component/view/GraphViewStyle.h +++ b/src/lib/component/view/GraphViewStyle.h @@ -29,7 +29,9 @@ public: int spacingY; int minWidth; + float charWidth; + float charHeight; }; struct NodeStyle @@ -81,7 +83,10 @@ public: static std::shared_ptr getImpl(); static void setImpl(std::shared_ptr impl); + static void loadStyleSettings(); + static float getCharWidthForNodeType(Node::NodeType type); + static float getCharHeightForNodeType(Node::NodeType type); static size_t getFontSizeForNodeType(Node::NodeType type); static size_t getFontSizeOfAccessNode(); @@ -110,7 +115,12 @@ public: private: static std::map s_charWidths; + static std::map s_charHeights; + static std::shared_ptr s_impl; + + static int s_fontSize; + static std::string s_fontName; }; #endif // GRAPH_VIEW_STYLE_H diff --git a/src/lib/component/view/GraphViewStyleImpl.h b/src/lib/component/view/GraphViewStyleImpl.h index 818bdfd8..c343e30f 100644 --- a/src/lib/component/view/GraphViewStyleImpl.h +++ b/src/lib/component/view/GraphViewStyleImpl.h @@ -7,6 +7,7 @@ class GraphViewStyleImpl { public: virtual float getCharWidthForNodeType(Node::NodeType type) = 0; + virtual float getCharHeightForNodeType(Node::NodeType type) = 0; }; #endif // GRAPH_VIEW_STYLE_IMPL_H diff --git a/src/lib/settings/ApplicationSettings.cpp b/src/lib/settings/ApplicationSettings.cpp index f896ca7d..952a26a5 100644 --- a/src/lib/settings/ApplicationSettings.cpp +++ b/src/lib/settings/ApplicationSettings.cpp @@ -26,6 +26,26 @@ bool ApplicationSettings::filterUndefinedNodesFromGraph() const return getValue("FilterUndefinedNodesFromGraph", false); } +std::string ApplicationSettings::getFontName() const +{ + return getValue("application/font_name", "Source Code Pro"); +} + +void ApplicationSettings::setFontName(const std::string& fontName) +{ + setValue("application/font_name", fontName); +} + +int ApplicationSettings::getFontSize() const +{ + return getValue("application/font_size", 14); +} + +void ApplicationSettings::setFontSize(int fontSize) +{ + setValue("application/font_size", fontSize); +} + int ApplicationSettings::getCodeTabWidth() const { return getValue("code/TabWidth", 4); @@ -36,26 +56,6 @@ void ApplicationSettings::setCodeTabWidth(int codeTabWidth) setValue("code/TabWidth", codeTabWidth); } -std::string ApplicationSettings::getCodeFontName() const -{ - return getValue("code/FontName", "Courier"); -} - -void ApplicationSettings::setCodeFontName(const std::string& codeFontName) -{ - setValue("code/FontName", codeFontName); -} - -int ApplicationSettings::getCodeFontSize() const -{ - return getValue("code/FontSize", 12); -} - -void ApplicationSettings::setCodeFontSize(int codeFontSize) -{ - setValue("code/FontSize", codeFontSize); -} - int ApplicationSettings::getCodeSnippetSnapRange() const { return getValue("code/snippet/snap_range", 4); diff --git a/src/lib/settings/ApplicationSettings.h b/src/lib/settings/ApplicationSettings.h index e37f8138..a3254e7f 100644 --- a/src/lib/settings/ApplicationSettings.h +++ b/src/lib/settings/ApplicationSettings.h @@ -19,16 +19,17 @@ public: std::string getStartupProjectFilePath() const; bool filterUndefinedNodesFromGraph() const; + // application + std::string getFontName() const; + void setFontName(const std::string& fontName); + + int getFontSize() const; + void setFontSize(int fontSize); + // code int getCodeTabWidth() const; void setCodeTabWidth(int codeTabWidth); - std::string getCodeFontName() const; - void setCodeFontName(const std::string& codeFontName); - - int getCodeFontSize() const; - void setCodeFontSize(int codeFontSize); - int getCodeSnippetSnapRange() const; void setCodeSnippetSnapRange(int range); diff --git a/src/lib/settings/Settings.cpp b/src/lib/settings/Settings.cpp index 0ac1aa0d..a83406e6 100644 --- a/src/lib/settings/Settings.cpp +++ b/src/lib/settings/Settings.cpp @@ -14,16 +14,29 @@ bool Settings::load(const std::string& filePath) if (FileSystem::exists(filePath)) { m_config = ConfigManager::createAndLoad(TextAccess::createFromFile(filePath)); + m_filePath = filePath; return true; } else { - m_config = ConfigManager::createEmpty(); + clear(); LOG_WARNING("File for Settings not found."); return false; } } +void Settings::save() +{ + if (m_config.get() && m_filePath.size()) + { + m_config->save(m_filePath); + } + else + { + LOG_WARNING("Settings were not saved."); + } +} + void Settings::save(const std::string& filePath) { if (m_config) @@ -39,6 +52,7 @@ void Settings::save(const std::string& filePath) void Settings::clear() { m_config = ConfigManager::createEmpty(); + m_filePath.clear(); } Settings::Settings() diff --git a/src/lib/settings/Settings.h b/src/lib/settings/Settings.h index 03e8f12e..25844ae7 100644 --- a/src/lib/settings/Settings.h +++ b/src/lib/settings/Settings.h @@ -13,6 +13,7 @@ public: virtual ~Settings(); bool load(const std::string& filePath); + void save(); void save(const std::string& filePath); void clear(); @@ -32,6 +33,7 @@ protected: bool setValues(const std::string& key, std::vector values); private: + std::string m_filePath; std::shared_ptr m_config; }; diff --git a/src/lib/utility/messaging/type/MessageRefresh.h b/src/lib/utility/messaging/type/MessageRefresh.h index 4946d8d5..307e2442 100644 --- a/src/lib/utility/messaging/type/MessageRefresh.h +++ b/src/lib/utility/messaging/type/MessageRefresh.h @@ -6,7 +6,8 @@ class MessageRefresh: public Message { public: - MessageRefresh() + MessageRefresh(bool uiOnly = false) + : uiOnly(uiOnly) { } @@ -14,6 +15,8 @@ public: { return "MessageRefresh"; } + + const bool uiOnly; }; #endif // MESSAGE_REFRESH_H diff --git a/src/lib/utility/messaging/type/MessageZoom.h b/src/lib/utility/messaging/type/MessageZoom.h new file mode 100644 index 00000000..989733c5 --- /dev/null +++ b/src/lib/utility/messaging/type/MessageZoom.h @@ -0,0 +1,23 @@ +#ifndef MESSAGE_ZOOM_H +#define MESSAGE_ZOOM_H + +#include "utility/messaging/Message.h" + +class MessageZoom + : public Message +{ +public: + MessageZoom(bool zoomIn) + : zoomIn(zoomIn) + { + } + + static const std::string getStaticType() + { + return "MessageZoom"; + } + + const bool zoomIn; +}; + +#endif // MESSAGE_ZOOM_H