diff --git a/bin/app/data/color_schemes/bad_rainbow.xml b/bin/app/data/color_schemes/bad_rainbow.xml
index 1375f3d3..9ae6aa10 100644
--- a/bin/app/data/color_schemes/bad_rainbow.xml
+++ b/bin/app/data/color_schemes/bad_rainbow.xml
@@ -100,17 +100,18 @@
#494949
#CCCCCC
- #CCCCCC
+ #FFF
- #CCCCCC
+ #AAAAAA
+ #999999
black
#CCCCCC
- #BBBBBB
- #AAAAAA
+ #CCCCCC
+ #CCCCCC
black
#B1B1B1
grey
diff --git a/bin/app/data/color_schemes/bright.xml b/bin/app/data/color_schemes/bright.xml
index 23afac14..c73d4ca1 100644
--- a/bin/app/data/color_schemes/bright.xml
+++ b/bin/app/data/color_schemes/bright.xml
@@ -105,6 +105,7 @@
#D0D0D0
+ #D9D9D9
black
diff --git a/bin/app/data/color_schemes/dark.xml b/bin/app/data/color_schemes/dark.xml
index 08ba3907..984180c8 100644
--- a/bin/app/data/color_schemes/dark.xml
+++ b/bin/app/data/color_schemes/dark.xml
@@ -100,11 +100,12 @@
#272728
#C5C5C5
- #CCC
+ #999
#5C5C5C
+ #6C6C6C
#F7F7F7
diff --git a/bin/app/data/gui/code_view/code_view.css b/bin/app/data/gui/code_view/code_view.css
index 9400e2a2..ea577524 100644
--- a/bin/app/data/gui/code_view/code_view.css
+++ b/bin/app/data/gui/code_view/code_view.css
@@ -116,10 +116,9 @@
#code_file {
background-color: ;
- border: 2px solid ;
- border-radius: 12px;
+ margin-bottom: 0px;
+ border-bottom: 1px solid ; /* last file only */
font-size: px;
- padding-bottom: 7px;
}
#title_bar, #title_bar_single {
@@ -128,9 +127,12 @@
border: none;
}
+#title_bar:hover {
+ background-color: ;
+}
+
#title_bar[hovering=false] {
- border-top-left-radius: 7px;
- border-top-right-radius: 7px;
+ border-top: 1px solid ;
}
#title_bar_single {
@@ -143,13 +145,13 @@
}
#title_button {
- background-color: ;
+ background-color: transparent;
border: none;
border-radius: 3px;
color: ;
font-size: px;
padding: 2px 4px;
- margin: 1px 8px;
+ margin: 1px 8px 1px 2px;
}
#title_bar_single #title_button {
@@ -180,7 +182,7 @@
#code_file #code_snippet {
background-color: ;
- border-top: 2px solid ;
+ border-top: 1px solid ;
font-size: px;
}
@@ -190,6 +192,7 @@
color: ;
font-family: "";
font-size: px;
+ padding-bottom: 2px;
}
#code_file #code_snippet #scope_name:hover {
@@ -222,6 +225,16 @@
selection-background-color: ;
}
+#title_bar #expand_button, #title_bar_single #expand_button {
+ background: transparent;
+ border: none;
+ margin: 3px;
+ max-height: 16px;
+ max-width: 16px;
+ margin-left: 8px;
+ margin-right: 0px;
+}
+
#title_bar #file_button, #title_bar_single #file_button {
background: transparent;
border: none;
diff --git a/bin/app/data/gui/code_view/images/minimize_active.png b/bin/app/data/gui/code_view/images/minimize_active.png
deleted file mode 100644
index f423fc42..00000000
Binary files a/bin/app/data/gui/code_view/images/minimize_active.png and /dev/null differ
diff --git a/bin/app/data/gui/code_view/images/minimize_inactive.png b/bin/app/data/gui/code_view/images/minimize_inactive.png
deleted file mode 100644
index 113d8aa5..00000000
Binary files a/bin/app/data/gui/code_view/images/minimize_inactive.png and /dev/null differ
diff --git a/bin/app/data/gui/code_view/images/snippet_arrow_down.png b/bin/app/data/gui/code_view/images/snippet_arrow_down.png
new file mode 100644
index 00000000..2f5c56c8
Binary files /dev/null and b/bin/app/data/gui/code_view/images/snippet_arrow_down.png differ
diff --git a/bin/app/data/gui/code_view/images/snippet_arrow_right.png b/bin/app/data/gui/code_view/images/snippet_arrow_right.png
new file mode 100644
index 00000000..f12ba7df
Binary files /dev/null and b/bin/app/data/gui/code_view/images/snippet_arrow_right.png differ
diff --git a/src/lib_gui/qt/element/QtCodeArea.cpp b/src/lib_gui/qt/element/QtCodeArea.cpp
index a07bcea7..99d7bd04 100644
--- a/src/lib_gui/qt/element/QtCodeArea.cpp
+++ b/src/lib_gui/qt/element/QtCodeArea.cpp
@@ -131,13 +131,12 @@ QSize QtCodeArea::sizeHint() const
width = std::max(rect.width(), width);
}
- int scrollHeight = 0;
- if (horizontalScrollBar()->minimum() != horizontalScrollBar()->maximum())
+ if (horizontalScrollBar()->minimum() != horizontalScrollBar()->maximum() && utility::getOsType() != OS_MAC)
{
- scrollHeight = horizontalScrollBar()->height();
+ height += horizontalScrollBar()->height();
}
- return QSize(width + lineNumberAreaWidth() + 1, height + scrollHeight + 5);
+ return QSize(width + lineNumberAreaWidth() + 1, height + 5);
}
void QtCodeArea::lineNumberAreaPaintEvent(QPaintEvent *event)
diff --git a/src/lib_gui/qt/element/QtCodeFile.cpp b/src/lib_gui/qt/element/QtCodeFile.cpp
index 318232fd..e8390d9c 100644
--- a/src/lib_gui/qt/element/QtCodeFile.cpp
+++ b/src/lib_gui/qt/element/QtCodeFile.cpp
@@ -9,7 +9,7 @@
#include "QtCodeNavigator.h"
#include "QtCodeSnippet.h"
-QtCodeFile::QtCodeFile(const FilePath& filePath, QtCodeNavigator* navigator)
+QtCodeFile::QtCodeFile(const FilePath& filePath, QtCodeNavigator* navigator, bool isFirst)
: QFrame()
, m_navigator(navigator)
, m_filePath(filePath)
@@ -25,7 +25,7 @@ QtCodeFile::QtCodeFile(const FilePath& filePath, QtCodeNavigator* navigator)
layout->setAlignment(Qt::AlignTop);
setLayout(layout);
- m_titleBar = new QtCodeFileTitleBar();
+ m_titleBar = new QtCodeFileTitleBar(this, isFirst);
layout->addWidget(m_titleBar);
if (!m_filePath.empty())
@@ -331,8 +331,6 @@ void QtCodeFile::setMinimized()
}
m_titleBar->setMinimized();
-
- setStyleSheet("#code_file { padding-bottom: 0; } #code_file #title_bar { border-radius: 7px; }");
}
void QtCodeFile::setSnippets()
@@ -343,8 +341,6 @@ void QtCodeFile::setSnippets()
}
m_titleBar->setSnippets();
-
- setStyleSheet("");
}
void QtCodeFile::setMaximized()
diff --git a/src/lib_gui/qt/element/QtCodeFile.h b/src/lib_gui/qt/element/QtCodeFile.h
index 8211d4d3..4d75fe47 100644
--- a/src/lib_gui/qt/element/QtCodeFile.h
+++ b/src/lib_gui/qt/element/QtCodeFile.h
@@ -25,7 +25,7 @@ class QtCodeFile
Q_OBJECT
public:
- QtCodeFile(const FilePath& filePath, QtCodeNavigator* navigator);
+ QtCodeFile(const FilePath& filePath, QtCodeNavigator* navigator, bool isFirst);
virtual ~QtCodeFile();
void setModificationTime(const TimeStamp modificationTime);
diff --git a/src/lib_gui/qt/element/QtCodeFileList.cpp b/src/lib_gui/qt/element/QtCodeFileList.cpp
index 83c7967e..80d7a5d3 100644
--- a/src/lib_gui/qt/element/QtCodeFileList.cpp
+++ b/src/lib_gui/qt/element/QtCodeFileList.cpp
@@ -32,8 +32,8 @@ QtCodeFileList::QtCodeFileList(QtCodeNavigator* navigator)
m_filesArea->setObjectName("code_file_list");
QVBoxLayout* innerLayout = new QVBoxLayout();
- innerLayout->setSpacing(8);
- innerLayout->setContentsMargins(8, 8, 8, 8);
+ innerLayout->setSpacing(0);
+ innerLayout->setContentsMargins(0, 0, 0, 0);
innerLayout->setAlignment(Qt::AlignTop);
m_filesArea->setLayout(innerLayout);
@@ -105,7 +105,7 @@ QtCodeFile* QtCodeFileList::getFile(const FilePath filePath)
if (!file)
{
- file = new QtCodeFile(filePath, m_navigator);
+ file = new QtCodeFile(filePath, m_navigator, !m_files.size());
m_files.push_back(file);
m_filesArea->layout()->addWidget(file);
@@ -236,9 +236,19 @@ void QtCodeFileList::updateFiles()
{
for (QtCodeFile* file : m_files)
{
+ if (file != m_files.back())
+ {
+ file->setStyleSheet("#code_file { border: none; }");
+ }
+
file->updateContent();
}
+ if (m_files.size())
+ {
+ m_files.back()->setStyleSheet("");
+ }
+
// Perform delayed so all widgets are already visible
QTimer::singleShot(100, this, &QtCodeFileList::updateSnippetTitleAndScrollBarSlot);
}
@@ -399,12 +409,12 @@ void QtCodeFileList::updateSnippetTitleAndScrollBar(int value)
{
QRect fileRect = getFocusRectForWidget(file, m_filesArea);
- if (!firstFile && visibleRect.top() > fileRect.top() + 2 &&
- visibleRect.top() < fileRect.bottom() - 10 &&
+ if (!firstFile && visibleRect.top() > fileRect.top() &&
+ visibleRect.top() < fileRect.bottom() + 1 &&
file->getVisibleSnippets().size())
{
firstFile = file;
- fileTitleBarOffset = std::min(0, fileRect.bottom() - 10 - (visibleRect.top() + m_firstSnippetTitleBar->height()));
+ fileTitleBarOffset = std::min(0, fileRect.bottom() + 1 - (visibleRect.top() + m_firstSnippetTitleBar->height()));
}
if (visibleRect.bottom() > fileRect.top() && fileRect.bottom() > visibleRect.bottom())
diff --git a/src/lib_gui/qt/element/QtCodeFileTitleBar.cpp b/src/lib_gui/qt/element/QtCodeFileTitleBar.cpp
index 5a95e01e..2b6f9004 100644
--- a/src/lib_gui/qt/element/QtCodeFileTitleBar.cpp
+++ b/src/lib_gui/qt/element/QtCodeFileTitleBar.cpp
@@ -17,8 +17,6 @@ QtCodeFileTitleBar::QtCodeFileTitleBar(QWidget* parent, bool isHovering, bool is
if (!isSingle)
{
connect(this, &QPushButton::clicked, this, &QtCodeFileTitleBar::clickedTitleBar);
- connect(this, &QtHoverButton::hoveredIn, this, &QtCodeFileTitleBar::enteredTitleBar);
- connect(this, &QtHoverButton::hoveredOut, this, &QtCodeFileTitleBar::leftTitleBar);
}
QHBoxLayout* titleLayout = new QHBoxLayout();
@@ -27,6 +25,24 @@ QtCodeFileTitleBar::QtCodeFileTitleBar(QWidget* parent, bool isHovering, bool is
titleLayout->setAlignment(Qt::AlignLeft);
setLayout(titleLayout);
+ FilePath imageDir = ResourcePaths::getGuiPath().concatenate(L"code_view/images/");
+
+ m_expandButton = new QtSelfRefreshIconButton("", imageDir.getConcatenated(L"snippet_arrow_right.png"), "code/file/title", this);
+ m_collapseButton = new QtSelfRefreshIconButton("", imageDir.getConcatenated(L"snippet_arrow_down.png"), "code/file/title", this);
+
+ m_expandButton->setToolTip("expand");
+ m_collapseButton->setToolTip("collapse");
+
+ for (QtSelfRefreshIconButton* button : { m_expandButton, m_collapseButton })
+ {
+ button->setIconSize(QSize(9, 9));
+ button->setObjectName("expand_button");
+ titleLayout->addWidget(button);
+ }
+
+ connect(m_expandButton, &QtSelfRefreshIconButton::clicked, this, &QtCodeFileTitleBar::clickedExpandButton);
+ connect(m_collapseButton, &QtSelfRefreshIconButton::clicked, this, &QtCodeFileTitleBar::clickedCollapseButton);
+
m_titleButton = new QtCodeFileTitleButton(this);
QSizePolicy policy = m_titleButton->sizePolicy();
policy.setRetainSizeWhenHidden(true);
@@ -56,15 +72,8 @@ QtCodeFileTitleBar::QtCodeFileTitleBar(QWidget* parent, bool isHovering, bool is
}
);
- FilePath imageDir = ResourcePaths::getGuiPath().concatenate(L"code_view/images/");
QColor inactiveColor(0x5E, 0x5D, 0x5D);
- m_minimizeButton = new QtIconStateButton(this);
- m_minimizeButton->addState(QtIconStateButton::STATE_DEFAULT, imageDir.getConcatenated(L"minimize_active.png"));
- m_minimizeButton->addState(QtIconStateButton::STATE_HOVERED, imageDir.getConcatenated(L"minimize_inactive.png"), inactiveColor);
- m_minimizeButton->addState(QtIconStateButton::STATE_DISABLED, imageDir.getConcatenated(L"minimize_inactive.png"));
- m_minimizeButton->setToolTip("minimize");
-
m_snippetButton = new QtIconStateButton(this);
m_snippetButton->addState(QtIconStateButton::STATE_DEFAULT, imageDir.getConcatenated(L"snippet_active.png"));
m_snippetButton->addState(QtIconStateButton::STATE_HOVERED, imageDir.getConcatenated(L"snippet_inactive.png"), inactiveColor);
@@ -77,31 +86,29 @@ QtCodeFileTitleBar::QtCodeFileTitleBar(QWidget* parent, bool isHovering, bool is
m_maximizeButton->addState(QtIconStateButton::STATE_DISABLED, imageDir.getConcatenated(L"maximize_inactive.png"));
m_maximizeButton->setToolTip("maximize");
- for (QtIconStateButton* button : { m_minimizeButton, m_snippetButton, m_maximizeButton })
+ for (QtIconStateButton* button : { m_snippetButton, m_maximizeButton })
{
button->setIconSize(QSize(16, 16));
button->setObjectName("file_button");
button->setEnabled(false);
titleLayout->addWidget(button);
-
- if (!isSingle)
- {
- connect(button, &QtIconStateButton::hoveredIn, this, &QtCodeFileTitleBar::leftTitleBar);
- connect(button, &QtIconStateButton::hoveredOut, this, &QtCodeFileTitleBar::enteredTitleBar);
- }
}
- connect(m_minimizeButton, &QtIconStateButton::clicked, this, &QtCodeFileTitleBar::clickedMinimizeButton);
connect(m_snippetButton, &QtIconStateButton::clicked, this, &QtCodeFileTitleBar::clickedSnippetButton);
connect(m_maximizeButton, &QtIconStateButton::clicked, this, &QtCodeFileTitleBar::clickedMaximizeButton);
if (isSingle)
{
- m_minimizeButton->hide();
+ m_expandButton->hide();
+ m_collapseButton->hide();
m_maximizeButton->hide();
}
+ else
+ {
+ m_snippetButton->hide();
+ }
- titleLayout->addSpacing(3);
+ titleLayout->addSpacing(5);
}
QtCodeFileTitleButton* QtCodeFileTitleBar::getTitleButton() const
@@ -150,33 +157,33 @@ void QtCodeFileTitleBar::updateRefCount(int refCount, bool hasErrors, size_t fat
void QtCodeFileTitleBar::setMinimized()
{
- m_minimizeButton->setEnabled(false);
+ m_expandButton->setVisible(true);
+ m_collapseButton->setVisible(false);
m_snippetButton->setEnabled(true);
m_maximizeButton->setEnabled(true);
- m_minimizeButton->hoverOut();
m_snippetButton->hoverOut();
m_maximizeButton->hoverOut();
}
void QtCodeFileTitleBar::setSnippets()
{
- m_minimizeButton->setEnabled(true);
+ m_expandButton->setVisible(false);
+ m_collapseButton->setVisible(true);
m_snippetButton->setEnabled(false);
m_maximizeButton->setEnabled(true);
- m_minimizeButton->hoverOut();
m_snippetButton->hoverOut();
m_maximizeButton->hoverOut();
}
void QtCodeFileTitleBar::setMaximized()
{
- m_minimizeButton->setEnabled(false);
+ m_expandButton->setVisible(false);
+ m_collapseButton->setVisible(false);
m_snippetButton->setEnabled(true);
m_maximizeButton->setEnabled(false);
- m_minimizeButton->hoverOut();
m_snippetButton->hoverOut();
m_maximizeButton->hoverOut();
}
@@ -197,28 +204,26 @@ void QtCodeFileTitleBar::updateFromOther(const QtCodeFileTitleBar* other)
m_referenceCount->hide();
}
- m_minimizeButton->setEnabled(other->m_minimizeButton->isEnabled());
+ m_expandButton->setVisible(other->m_expandButton->isVisible());
+ m_collapseButton->setVisible(other->m_collapseButton->isVisible());
m_snippetButton->setEnabled(other->m_snippetButton->isEnabled());
m_maximizeButton->setEnabled(other->m_maximizeButton->isEnabled());
- m_minimizeButton->hoverOut();
m_snippetButton->hoverOut();
m_maximizeButton->hoverOut();
disconnect();
connect(this, &QPushButton::clicked, this, &QtCodeFileTitleBar::clickedTitleBar);
- connect(this, &QtHoverButton::hoveredIn, this, &QtCodeFileTitleBar::enteredTitleBar);
- connect(this, &QtHoverButton::hoveredOut, this, &QtCodeFileTitleBar::leftTitleBar);
}
void QtCodeFileTitleBar::clickedTitleBar()
{
- if (m_minimizeButton->isEnabled())
+ if (m_collapseButton->isVisible())
{
emit minimize();
}
- else if (m_snippetButton->isEnabled())
+ else if (m_expandButton->isVisible())
{
emit snippet();
}
@@ -228,48 +233,12 @@ void QtCodeFileTitleBar::clickedTitleBar()
}
}
-void QtCodeFileTitleBar::enteredTitleBar(QPushButton* button)
+void QtCodeFileTitleBar::clickedExpandButton()
{
- if (m_minimizeButton->isEnabled())
- {
- m_minimizeButton->hoverIn();
- }
- else if (m_snippetButton->isEnabled())
- {
- m_snippetButton->hoverIn();
- }
- else if (m_maximizeButton->isEnabled())
- {
- m_maximizeButton->hoverIn();
- }
+ emit snippet();
}
-void QtCodeFileTitleBar::leftTitleBar(QPushButton* button)
-{
- if (m_minimizeButton->isEnabled())
- {
- if (m_minimizeButton != button)
- {
- m_minimizeButton->hoverOut();
- }
- }
- else if (m_snippetButton->isEnabled())
- {
- if (m_snippetButton != button)
- {
- m_snippetButton->hoverOut();
- }
- }
- else if (m_maximizeButton->isEnabled())
- {
- if (m_maximizeButton != button)
- {
- m_maximizeButton->hoverOut();
- }
- }
-}
-
-void QtCodeFileTitleBar::clickedMinimizeButton()
+void QtCodeFileTitleBar::clickedCollapseButton()
{
emit minimize();
}
diff --git a/src/lib_gui/qt/element/QtCodeFileTitleBar.h b/src/lib_gui/qt/element/QtCodeFileTitleBar.h
index b1a7d31a..e75436e1 100644
--- a/src/lib_gui/qt/element/QtCodeFileTitleBar.h
+++ b/src/lib_gui/qt/element/QtCodeFileTitleBar.h
@@ -35,11 +35,8 @@ public:
private slots:
void clickedTitleBar();
-
- void enteredTitleBar(QPushButton* button);
- void leftTitleBar(QPushButton* button);
-
- void clickedMinimizeButton();
+ void clickedExpandButton();
+ void clickedCollapseButton();
void clickedSnippetButton();
void clickedMaximizeButton();
@@ -48,7 +45,9 @@ private:
QPushButton* m_showErrorsButton;
QLabel* m_referenceCount;
- QtIconStateButton* m_minimizeButton;
+ QtSelfRefreshIconButton* m_expandButton;
+ QtSelfRefreshIconButton* m_collapseButton;
+
QtIconStateButton* m_snippetButton;
QtIconStateButton* m_maximizeButton;
};