From f15f0de414b2cd7be0d7316cb6d89ef7f96e4888 Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Mon, 25 May 2015 01:47:14 +0200 Subject: [PATCH] ui: new style for CodeView --- bin/app/data/gui/code_view/code_view.css | 93 +++++++++++++----- .../gui/code_view/images/button_maximize.png | Bin 1267 -> 0 bytes .../gui/code_view/images/maximize_active.png | Bin 0 -> 3144 bytes .../code_view/images/maximize_inactive.png | Bin 0 -> 3348 bytes .../gui/code_view/images/minimize_active.png | Bin 0 -> 3141 bytes .../code_view/images/minimize_inactive.png | Bin 0 -> 3354 bytes .../gui/code_view/images/snippet_active.png | Bin 0 -> 3134 bytes .../gui/code_view/images/snippet_inactive.png | Bin 0 -> 3363 bytes bin/app/data/logo_1024_1024.png | Bin 30485 -> 0 bytes src/app/qt/element/QtCodeArea.cpp | 42 +------- src/app/qt/element/QtCodeArea.h | 12 +-- src/app/qt/element/QtCodeFile.cpp | 22 +++-- src/app/qt/element/QtCodeFile.h | 4 +- src/app/qt/element/QtCodeFileList.cpp | 22 +---- src/app/qt/element/QtCodeFileList.h | 7 +- src/app/qt/element/QtCodeSnippet.cpp | 51 +++++++--- src/app/qt/element/QtCodeSnippet.h | 13 ++- src/app/qt/view/QtCodeView.cpp | 23 ++--- src/app/qt/view/QtCodeView.h | 10 +- 19 files changed, 161 insertions(+), 138 deletions(-) delete mode 100644 bin/app/data/gui/code_view/images/button_maximize.png create mode 100644 bin/app/data/gui/code_view/images/maximize_active.png create mode 100644 bin/app/data/gui/code_view/images/maximize_inactive.png create mode 100644 bin/app/data/gui/code_view/images/minimize_active.png create mode 100644 bin/app/data/gui/code_view/images/minimize_inactive.png create mode 100644 bin/app/data/gui/code_view/images/snippet_active.png create mode 100644 bin/app/data/gui/code_view/images/snippet_inactive.png delete mode 100755 bin/app/data/logo_1024_1024.png diff --git a/bin/app/data/gui/code_view/code_view.css b/bin/app/data/gui/code_view/code_view.css index 803b066f..a1703c12 100644 --- a/bin/app/data/gui/code_view/code_view.css +++ b/bin/app/data/gui/code_view/code_view.css @@ -1,62 +1,105 @@ -#code_file #title_label { - background-color: rgb(220,220,220); +#code_file_list { + background-color: white; +} + +#code_file { + background-color: white; + border: 2px solid #E0E0E0; + border-radius: 14px; +} + +#code_file #title_widget { + background-color: #E0E0E0; + border-top-left-radius: 10px; border-top-right-radius: 10px; - font-family: "Source Code Pro"; + margin-bottom: 5px; + min-height: 28px; + padding-right: 5px; +} + +#code_file #title_label { + background: none; + border: none; + border-radius: 3px; font-size: 14px; - padding: 4px 12px; + padding: 2px 4px; + margin: 2px 8px; } #code_file #title_label:hover { - background: #D2D2D2; + background-color: #D0D0D0; } #code_file #title_label:disabled { color: black; } -#code_file #code_snippet #title_label { - background-color: rgb(220,220,220); +#code_file #code_snippet{ + border-top: 2px solid #E0E0E0; + padding-top: 2px; +} + +#code_file #code_snippet[isFirst=true] { + border: none; + padding-top: 0px; +} + +#code_file #code_snippet #scope_name, #code_file #code_snippet #dots { + background: none; + color: gray; + border: none; font-family: "Source Code Pro"; - border-top-right-radius: 10px; font-size: 14px; - text-align: left; - padding: 4px 12px; +} + +#code_file #code_snippet #dots { + padding-right: 13px; + text-align: right; +} + +#code_file #code_snippet #scope_name { + padding-left: 4px; } #code_area { + background-color: transparent; font-family: "Source Code Pro"; font-size: 14px; - margin-bottom: 2px; - background-color: transparent; } #code_area #line_number_area { - background-color: white; font-family: "Source Code Pro"; font-size: 14px; } -#code_file #maximize_button { - background-color: lightgray; - border-image: none; - border-radius: 8px; - margin: 1px; +#code_file #maximize_button, #code_file #snippet_button, #code_file #minimize_button { + margin: 3px; max-height: 16px; max-width: 16px; } +#code_file #maximize_button { + border-image: url(data/gui/code_view/images/maximize_inactive.png); +} + #code_file #maximize_button:enabled { - border-image: url(data/gui/code_view/images/button_maximize.png); + border-image: url(data/gui/code_view/images/maximize_active.png); } -#code_area #maximize_button { - background-color: none; - border-image: none; - margin: 5px; +#code_file #snippet_button { + border-image: url(data/gui/code_view/images/snippet_inactive.png); } -#code_area #maximize_button:enabled { - border-image: url(data/gui/code_view/images/button_maximize.png); +#code_file #snippet_button:enabled { + border-image: url(data/gui/code_view/images/snippet_active.png); +} + +#code_file #minimize_button { + border-image: url(data/gui/code_view/images/minimize_inactive.png); +} + +#code_file #minimize_button:enabled { + border-image: url(data/gui/code_view/images/minimize_active.png); } QToolTip { diff --git a/bin/app/data/gui/code_view/images/button_maximize.png b/bin/app/data/gui/code_view/images/button_maximize.png deleted file mode 100644 index 01830e9603df36a8930ccc6446b552edfc0ab959..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1267 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 literal 0 HcmV?d00001 diff --git a/bin/app/data/gui/code_view/images/minimize_inactive.png b/bin/app/data/gui/code_view/images/minimize_inactive.png new file mode 100644 index 0000000000000000000000000000000000000000..194efd7cc49e07bab87511b8565821e609fcf8a9 GIT binary patch literal 3354 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 Y08}G}8b0kA&j0`b07*qoM6N<$f=pY<>i_@% literal 0 HcmV?d00001 diff --git a/bin/app/data/gui/code_view/images/snippet_inactive.png b/bin/app/data/gui/code_view/images/snippet_inactive.png new file mode 100644 index 0000000000000000000000000000000000000000..c8ede05b7245df6ba0b2e5e1d012b03ad4550d29 GIT binary patch literal 3363 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.height() + 0.7f) * fontMetrics().lineSpacing(); + int height = (document()->size().height() + 0.7f) * fontMetrics().lineSpacing() - 3; return QSize(width, height); } -void QtCodeArea::addMaximizeButton() -{ - QHBoxLayout* layout = new QHBoxLayout(); - layout->setMargin(0); - layout->setSpacing(0); - layout->setAlignment(Qt::AlignTop); - setLayout(layout); - - m_maximizeButton = new QPushButton(this); - m_maximizeButton->setObjectName("maximize_button"); - m_maximizeButton->setEnabled(false); - layout->addWidget(m_maximizeButton); - layout->setAlignment(m_maximizeButton, Qt::AlignRight); - - connect(m_maximizeButton, SIGNAL(clicked()), this, SLOT(clickedMaximizeButton())); -} - void QtCodeArea::lineNumberAreaPaintEvent(QPaintEvent *event) { QPainter painter(m_lineNumberArea); @@ -185,7 +167,7 @@ void QtCodeArea::showEvent(QShowEvent* event) void QtCodeArea::paintEvent(QPaintEvent* event) { QPainter painter(viewport()); - painter.fillRect(rect(), Qt::white); + // painter.fillRect(rect(), Qt::white); QTextBlock block = firstVisibleBlock(); int top = blockBoundingGeometry(block).translated(contentOffset()).top(); @@ -216,19 +198,10 @@ void QtCodeArea::paintEvent(QPaintEvent* event) void QtCodeArea::enterEvent(QEvent* event) { - if (m_maximizeButton) - { - m_maximizeButton->setEnabled(true); - } } void QtCodeArea::leaveEvent(QEvent* event) { - if (m_maximizeButton) - { - m_maximizeButton->setEnabled(false); - } - setHoveredAnnotation(nullptr); } @@ -239,7 +212,7 @@ void QtCodeArea::mouseReleaseEvent(QMouseEvent* event) QTextCursor cursor = this->cursorForPosition(event->pos()); const Annotation* annotation = findAnnotationForPosition(cursor.position()); - if (annotation) + if (annotation && !annotation->isScope) { MessageActivateTokenLocation(annotation->locationId).dispatch(); } @@ -248,9 +221,9 @@ void QtCodeArea::mouseReleaseEvent(QMouseEvent* event) void QtCodeArea::mouseDoubleClickEvent(QMouseEvent* event) { - if (event->button() == Qt::LeftButton && m_maximizeButton) + if (event->button() == Qt::LeftButton) { - clickedMaximizeButton(); + MessageShowFile(m_fileWidget->getFilePath().absoluteStr(), m_startLineNumber, m_startLineNumber + blockCount() - 1).dispatch(); } } @@ -303,11 +276,6 @@ void QtCodeArea::updateLineNumberArea(const QRect &rect, int dy) } } -void QtCodeArea::clickedMaximizeButton() -{ - MessageShowFile(m_fileWidget->getFilePath().absoluteStr(), m_startLineNumber, m_startLineNumber + blockCount() - 1).dispatch(); -} - void QtCodeArea::clearSelection() { QTextCursor cursor = textCursor(); diff --git a/src/app/qt/element/QtCodeArea.h b/src/app/qt/element/QtCodeArea.h index 6fe7cc69..3e35a634 100644 --- a/src/app/qt/element/QtCodeArea.h +++ b/src/app/qt/element/QtCodeArea.h @@ -9,7 +9,6 @@ #include "utility/types.h" class QPaintEvent; -class QPushButton; class QResizeEvent; class QSize; class QtCodeFile; @@ -19,12 +18,14 @@ class QWidget; class TokenLocation; class TokenLocationFile; -class QtCodeArea: public QPlainTextEdit +class QtCodeArea + : public QPlainTextEdit { Q_OBJECT public: - class LineNumberArea: public QWidget + class LineNumberArea + : public QWidget { public: LineNumberArea(QtCodeArea *codeArea); @@ -50,8 +51,6 @@ public: QSize sizeHint() const; - void addMaximizeButton(); - void lineNumberAreaPaintEvent(QPaintEvent *event); int lineNumberDigits() const; int lineNumberAreaWidth() const; @@ -72,7 +71,6 @@ protected: private slots: void updateLineNumberAreaWidth(int newBlockCount); void updateLineNumberArea(const QRect &, int); - void clickedMaximizeButton(); void clearSelection(); private: @@ -113,8 +111,6 @@ private: QWidget* m_lineNumberArea; QtHighlighter* m_highlighter; - QPushButton* m_maximizeButton; - const uint m_startLineNumber; std::vector m_annotations; diff --git a/src/app/qt/element/QtCodeFile.cpp b/src/app/qt/element/QtCodeFile.cpp index 214b6751..674ae03c 100644 --- a/src/app/qt/element/QtCodeFile.cpp +++ b/src/app/qt/element/QtCodeFile.cpp @@ -11,7 +11,7 @@ #include "qt/element/QtCodeSnippet.h" QtCodeFile::QtCodeFile(const FilePath& filePath, QtCodeFileList* parent) - : QWidget(parent) + : QFrame(parent) , m_parent(parent) , m_filePath(filePath) { @@ -23,11 +23,15 @@ QtCodeFile::QtCodeFile(const FilePath& filePath, QtCodeFileList* parent) layout->setAlignment(Qt::AlignTop); setLayout(layout); + QFrame* titleWidget = new QFrame(this); + titleWidget->setObjectName("title_widget"); + layout->addWidget(titleWidget); + QHBoxLayout* titleLayout = new QHBoxLayout(); titleLayout->setMargin(0); titleLayout->setSpacing(0); titleLayout->setAlignment(Qt::AlignLeft); - layout->addLayout(titleLayout); + titleWidget->setLayout(titleLayout); m_title = new QPushButton(filePath.fileName().c_str(), this); m_title->setObjectName("title_label"); @@ -41,17 +45,20 @@ QtCodeFile::QtCodeFile(const FilePath& filePath, QtCodeFileList* parent) titleLayout->addStretch(3); m_minimizeButton = new QPushButton(this); - m_minimizeButton->setObjectName("maximize_button"); + m_minimizeButton->setObjectName("minimize_button"); + m_minimizeButton->setToolTip("minimize file"); m_minimizeButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac titleLayout->addWidget(m_minimizeButton); m_snippetButton = new QPushButton(this); - m_snippetButton->setObjectName("maximize_button"); + m_snippetButton->setObjectName("snippet_button"); + m_snippetButton->setToolTip("show snippets in file"); m_snippetButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac titleLayout->addWidget(m_snippetButton); m_maximizeButton = new QPushButton(this); m_maximizeButton->setObjectName("maximize_button"); + m_maximizeButton->setToolTip("maximize file"); m_maximizeButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac titleLayout->addWidget(m_maximizeButton); @@ -109,6 +116,7 @@ void QtCodeFile::addCodeSnippet( if (locationFile->isWholeCopy) { + snippet->setProperty("isFirst", true); m_fileSnippet = snippet; clickedMaximizeButton(); return; @@ -116,9 +124,9 @@ void QtCodeFile::addCodeSnippet( m_snippets.push_back(snippet); - if (m_parent->getShowMaximizeButton()) + if (m_snippets.size() == 1) { - snippet->addMaximizeButton(); + snippet->setProperty("isFirst", true); } int maxDigits = 1; @@ -146,8 +154,6 @@ void QtCodeFile::updateContent() { m_fileSnippet->updateContent(); } - - m_title->setEnabled(m_parent->getShowMaximizeButton()); } void QtCodeFile::clickedTitle() diff --git a/src/app/qt/element/QtCodeFile.h b/src/app/qt/element/QtCodeFile.h index 5e6730e2..6d3b5309 100644 --- a/src/app/qt/element/QtCodeFile.h +++ b/src/app/qt/element/QtCodeFile.h @@ -5,7 +5,7 @@ #include #include -#include +#include #include "utility/file/FilePath.h" #include "utility/types.h" @@ -16,7 +16,7 @@ class QtCodeSnippet; class TokenLocationFile; class QtCodeFile - : public QWidget + : public QFrame { Q_OBJECT diff --git a/src/app/qt/element/QtCodeFileList.cpp b/src/app/qt/element/QtCodeFileList.cpp index 4a9da135..9debbc9d 100644 --- a/src/app/qt/element/QtCodeFileList.cpp +++ b/src/app/qt/element/QtCodeFileList.cpp @@ -3,27 +3,26 @@ #include #include +#include "utility/file/FileSystem.h" + #include "data/location/TokenLocationFile.h" #include "qt/element/QtCodeFile.h" -#include "utility/file/FileSystem.h" QtCodeFileList::QtCodeFileList(QWidget* parent) : QScrollArea(parent) , m_focusedTokenId(0) - , m_showMaximizeButton(true) { m_frame = std::make_shared(this); + m_frame->setObjectName("code_file_list"); QVBoxLayout* layout = new QVBoxLayout(m_frame.get()); - layout->setSpacing(10); - layout->setContentsMargins(15, 15, 15, 15); + layout->setSpacing(8); + layout->setContentsMargins(8, 8, 8, 8); layout->setAlignment(Qt::AlignTop); m_frame->setLayout(layout); setWidgetResizable(true); setWidget(m_frame.get()); - - setObjectName("code_file_list"); } QtCodeFileList::~QtCodeFileList() @@ -98,17 +97,6 @@ void QtCodeFileList::setErrorMessages(const std::vector& errorMessa updateFiles(); } -bool QtCodeFileList::getShowMaximizeButton() const -{ - return m_showMaximizeButton; -} - -void QtCodeFileList::setShowMaximizeButton(bool show) -{ - m_showMaximizeButton = show; - updateFiles(); -} - void QtCodeFileList::updateFiles() { for (std::shared_ptr file: m_files) diff --git a/src/app/qt/element/QtCodeFileList.h b/src/app/qt/element/QtCodeFileList.h index fdaed52c..1b6abe5b 100644 --- a/src/app/qt/element/QtCodeFileList.h +++ b/src/app/qt/element/QtCodeFileList.h @@ -12,7 +12,8 @@ class QtCodeFile; class TokenLocationFile; -class QtCodeFileList: public QScrollArea +class QtCodeFileList + : public QScrollArea { Q_OBJECT @@ -39,9 +40,6 @@ public: const std::vector& getErrorMessages() const; void setErrorMessages(const std::vector& errorMessages); - bool getShowMaximizeButton() const; - void setShowMaximizeButton(bool show); - void focusToken(Id tokenId); void defocusToken(); @@ -54,7 +52,6 @@ private: Id m_focusedTokenId; std::vector m_activeTokenIds; std::vector m_errorMessages; - bool m_showMaximizeButton; }; #endif // QT_CODE_FILE_LIST diff --git a/src/app/qt/element/QtCodeSnippet.cpp b/src/app/qt/element/QtCodeSnippet.cpp index 5935c18b..26843b38 100644 --- a/src/app/qt/element/QtCodeSnippet.cpp +++ b/src/app/qt/element/QtCodeSnippet.cpp @@ -1,6 +1,6 @@ #include "qt/element/QtCodeSnippet.h" -#include +#include #include #include "qt/element/QtCodeFile.h" @@ -12,7 +12,9 @@ QtCodeSnippet::QtCodeSnippet( std::shared_ptr locationFile, QtCodeFile* file ) - : QWidget(file) + : QFrame(file) + , m_dots(nullptr) + , m_title(nullptr) , m_codeArea(std::make_shared(startLineNumber, code, locationFile, file, this)) { setObjectName("code_snippet"); @@ -23,25 +25,35 @@ QtCodeSnippet::QtCodeSnippet( layout->setAlignment(Qt::AlignTop); setLayout(layout); - m_title = new QPushButton(title.c_str(), this); - m_title->setObjectName("title_label"); - m_title->minimumSizeHint(); // force font loading - m_title->setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac - m_title->setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Fixed); - layout->addWidget(m_title); + if (title.size()) + { + QHBoxLayout* titleLayout = new QHBoxLayout(); + titleLayout->setMargin(0); + titleLayout->setSpacing(0); + titleLayout->setAlignment(Qt::AlignLeft); + layout->addLayout(titleLayout); + + m_dots = new QPushButton(this); + m_dots->setObjectName("dots"); + m_dots->setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac + titleLayout->addWidget(m_dots); + + m_title = new QPushButton(title.c_str(), this); + m_title->setObjectName("scope_name"); + m_title->minimumSizeHint(); // force font loading + m_title->setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac + m_title->setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Fixed); + titleLayout->addWidget(m_title); + } layout->addWidget(m_codeArea.get()); + updateDots(); } QtCodeSnippet::~QtCodeSnippet() { } -void QtCodeSnippet::addMaximizeButton() -{ - m_codeArea->addMaximizeButton(); -} - int QtCodeSnippet::lineNumberDigits() const { return m_codeArea->lineNumberDigits(); @@ -50,9 +62,22 @@ int QtCodeSnippet::lineNumberDigits() const void QtCodeSnippet::updateLineNumberAreaWidthForDigits(int digits) { m_codeArea->updateLineNumberAreaWidthForDigits(digits); + updateDots(); } void QtCodeSnippet::updateContent() { m_codeArea->updateContent(); + updateDots(); +} + +void QtCodeSnippet::updateDots() +{ + if (!m_dots) + { + return; + } + + m_dots->setText(QString::fromStdString(std::string(lineNumberDigits(), '.'))); + m_dots->setMinimumWidth(m_codeArea->lineNumberAreaWidth()); } diff --git a/src/app/qt/element/QtCodeSnippet.h b/src/app/qt/element/QtCodeSnippet.h index 998d79f9..d5881b4d 100644 --- a/src/app/qt/element/QtCodeSnippet.h +++ b/src/app/qt/element/QtCodeSnippet.h @@ -4,14 +4,18 @@ #include #include +#include + #include "utility/types.h" + #include "qt/element/QtCodeArea.h" +class QPushButton; class QtCodeFile; -class QWidget; class TokenLocationFile; -class QtCodeSnippet: public QWidget +class QtCodeSnippet + : public QFrame { Q_OBJECT @@ -25,14 +29,15 @@ public: ); virtual ~QtCodeSnippet(); - void addMaximizeButton(); - int lineNumberDigits() const; void updateLineNumberAreaWidthForDigits(int digits); void updateContent(); private: + void updateDots(); + + QPushButton* m_dots; QPushButton* m_title; std::shared_ptr m_codeArea; }; diff --git a/src/app/qt/view/QtCodeView.cpp b/src/app/qt/view/QtCodeView.cpp index b826056b..82037804 100644 --- a/src/app/qt/view/QtCodeView.cpp +++ b/src/app/qt/view/QtCodeView.cpp @@ -1,9 +1,10 @@ #include "qt/view/QtCodeView.h" +#include "utility/file/FileSystem.h" +#include "utility/text/TextAccess.h" + #include "qt/element/QtCodeFileList.h" #include "qt/view/QtViewWidgetWrapper.h" -#include "utility/file/FileSystem.h" -#include "utility/text/TextAccess.h" QtCodeView::QtCodeView(ViewLayout* viewLayout) : CodeView(viewLayout) @@ -66,7 +67,6 @@ void QtCodeView::doShowCodeSnippets(const std::vector& snippe m_widget->setActiveTokenIds(m_activeTokenIds); m_widget->setErrorMessages(m_errorMessages); - m_widget->setShowMaximizeButton(m_errorMessages.size() == 0); for (const CodeSnippetParams& params : snippets) { @@ -79,18 +79,6 @@ void QtCodeView::doShowCodeFile(const CodeSnippetParams& params) m_widget->addCodeSnippet(1, params.title, params.code, params.locationFile); } -std::shared_ptr QtCodeView::createQtCodeFileList() const -{ - std::shared_ptr ptr = std::make_shared(); - setStyleSheet(ptr.get()); - return ptr; -} - -void QtCodeView::setStyleSheet(QWidget* widget) const -{ - widget->setStyleSheet(TextAccess::createFromFile("data/gui/code_view/code_view.css")->getText().c_str()); -} - void QtCodeView::focusToken(const Id tokenId) { m_focusTokenFunctor(tokenId); @@ -110,3 +98,8 @@ void QtCodeView::doDefocusToken() { m_widget->defocusToken(); } + +void QtCodeView::setStyleSheet(QWidget* widget) const +{ + widget->setStyleSheet(TextAccess::createFromFile("data/gui/code_view/code_view.css")->getText().c_str()); +} diff --git a/src/app/qt/view/QtCodeView.h b/src/app/qt/view/QtCodeView.h index ed1ab423..b4fe295c 100644 --- a/src/app/qt/view/QtCodeView.h +++ b/src/app/qt/view/QtCodeView.h @@ -4,15 +4,17 @@ #include #include +#include "utility/types.h" + #include "component/view/CodeView.h" #include "qt/utility/QtThreadedFunctor.h" -#include "utility/types.h" class QFrame; class QtCodeFileList; class QWidget; -class QtCodeView: public CodeView +class QtCodeView + : public CodeView { public: QtCodeView(ViewLayout* viewLayout); @@ -35,13 +37,13 @@ public: private: void doRefreshView(); + void doShowCodeSnippets(const std::vector& snippets); void doShowCodeFile(const CodeSnippetParams& params); + void doFocusToken(const Id tokenId); void doDefocusToken(); - std::shared_ptr createQtCodeFileList() const; - void setStyleSheet(QWidget* widget) const; QtThreadedFunctor<> m_refreshViewFunctor;