cppcheck/gui/codeeditstyledialog.cpp

343 lines
12 KiB
C++

/*
* Cppcheck - A tool for static C/C++ code analysis
* Copyright (C) 2007-2019 Cppcheck team.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "codeeditstyledialog.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QFormLayout>
#include <QDialogButtonBox>
const QString StyleEditDialog::mSampleDocument(
"/*****\n"
"* Multiline Comment\n"
"*****/\n"
"#include <QApplication>\n"
"#include <iostream>\n"
"\n"
"class fwdClass;\n"
"\n"
"int main(int argc, char *argv[])\n"
"{\n"
" QApplication a(argc, argv);\n"
" int nLife = 42;\n"
" w.show();\n"
" // single line comment\n"
" // line below is highlighted\n"
" fwdClass( nLife );\n"
" return a.exec();\n"
"}\n"
"\n"
"void class fwdClass( double dValue ) {\n"
" std::cout << \"Ipsum Lorem: \"\n"
" << nValue\n"
" << std::endl;\n"
"}\n");
const QStringList StyleEditDialog::mErrSymbolsList = (
QStringList( QStringList()
<< "nLife"
<< "dValue"
<< "nValue"));
const int StyleEditDialog::mErrLineNum = 16;
StyleEditDialog::StyleEditDialog( const CodeEditorStyle& newStyle,
QWidget *parent /*= nullptr*/ ) :
QDialog( parent ),
mStyleIncoming( newStyle ),
mStyleOutgoing( newStyle )
{
QVBoxLayout *vboxMain = new QVBoxLayout(this);
QHBoxLayout *hboxEdit = new QHBoxLayout();
// Color/Weight controls
QFormLayout *flEditControls = new QFormLayout();
mBtnWidgetColorFG = new SelectColorButton( this );
flEditControls->addRow( QObject::tr("Editor Foreground Color"),
mBtnWidgetColorFG );
mBtnWidgetColorBG = new SelectColorButton( this );
flEditControls->addRow( QObject::tr("Editor Background Color"),
mBtnWidgetColorBG );
mBtnHighlightBG = new SelectColorButton( this );
flEditControls->addRow( QObject::tr("Highlight Background Color"),
mBtnHighlightBG );
mBtnLineNumFG = new SelectColorButton( this );
flEditControls->addRow( QObject::tr("Line Number Foreground Color"),
mBtnLineNumFG );
mBtnLineNumBG = new SelectColorButton( this );
flEditControls->addRow( QObject::tr("Line Number Background Color"),
mBtnLineNumBG );
mBtnKeywordFG = new SelectColorButton( this );
flEditControls->addRow( QObject::tr("Keyword Foreground Color"),
mBtnKeywordFG );
mCBKeywordWeight = new SelectFontWeightCombo( this );
flEditControls->addRow( QObject::tr("Keyword Font Weight"),
mCBKeywordWeight );
mBtnClassFG = new SelectColorButton( this );
flEditControls->addRow( QObject::tr("Class ForegroundColor"),
mBtnClassFG );
mCBClassWeight = new SelectFontWeightCombo( this );
flEditControls->addRow( QObject::tr("Class Font Weight"),
mCBClassWeight );
mBtnQuoteFG = new SelectColorButton( this );
flEditControls->addRow( QObject::tr("Quote Foreground Color"),
mBtnQuoteFG );
mCBQuoteWeight = new SelectFontWeightCombo( this );
flEditControls->addRow( QObject::tr("Quote Font Weight"),
mCBQuoteWeight );
mBtnCommentFG = new SelectColorButton( this );
flEditControls->addRow( QObject::tr("Comment Foreground Color"),
mBtnCommentFG );
mCBCommentWeight = new SelectFontWeightCombo( this );
flEditControls->addRow( QObject::tr("Comment Font Weight"),
mCBCommentWeight );
mBtnSymbolFG = new SelectColorButton( this );
flEditControls->addRow( QObject::tr("Symbol Foreground Color"),
mBtnSymbolFG );
mBtnSymbolBG = new SelectColorButton( this );
flEditControls->addRow( QObject::tr("Symbol Background Color"),
mBtnSymbolBG );
mCBSymbolWeight = new SelectFontWeightCombo( this );
flEditControls->addRow( QObject::tr("Symbol Font Weight"),
mCBSymbolWeight );
hboxEdit->addLayout( flEditControls );
// CodeEditor to display Style
mSampleEditor = new CodeEditor( this );
QFont sampleFont( "Monospace" );
QFontMetrics fm(sampleFont);
mSampleEditor->setMinimumWidth( fm.width(QString( 40, 'W' )));
// designate highlight, errors, and symbols
mSampleEditor->setError( mSampleDocument, mErrLineNum, mErrSymbolsList);
// End Controls
hboxEdit->addWidget( mSampleEditor );
vboxMain->addLayout( hboxEdit );
// Default Controls
QHBoxLayout *hboxDefaultControls = new QHBoxLayout();
mBtnDefaultLight = new QPushButton( QObject::tr("Set to Default Light"),
this );
mBtnDefaultDark = new QPushButton( QObject::tr("Set to Default Dark"),
this );
hboxDefaultControls->addStretch( 1 );
hboxDefaultControls->addWidget( mBtnDefaultLight );
hboxDefaultControls->addWidget( mBtnDefaultDark );
hboxDefaultControls->addStretch( 1 );
vboxMain->addLayout( hboxDefaultControls );
vboxMain->addStretch( 2 );
// dialog controls
QDialogButtonBox *dBtnBox = new QDialogButtonBox(
QDialogButtonBox::Cancel |
QDialogButtonBox::Ok |
QDialogButtonBox::Reset );
vboxMain->addStretch( 1 );
vboxMain->addWidget( dBtnBox );
// setup values for style controls
updateControls();
updateStyle();
connect( dBtnBox, SIGNAL( accepted() ), this, SLOT( accept() ));
connect( dBtnBox, SIGNAL( rejected() ), this, SLOT( reject() ));
connect( dBtnBox->button( QDialogButtonBox::Reset ), SIGNAL(clicked()),
this, SLOT( resetStyle() ));
connect( mBtnDefaultLight, SIGNAL( clicked() ),
this, SLOT( setStyleDefaultLight() ));
connect( mBtnDefaultDark, SIGNAL( clicked() ),
this, SLOT( setStyleDefaultDark() ));
connect( mBtnWidgetColorFG, SIGNAL( colorChanged( QColor& )),
this, SLOT( colorChangedWidgetFG( QColor& )));
connect( mBtnWidgetColorBG, SIGNAL( colorChanged( QColor& )),
this, SLOT( colorChangedWidgetBG( QColor& )));
connect( mBtnHighlightBG, SIGNAL( colorChanged( QColor& )),
this, SLOT( colorChangedHighlightBG( QColor& )));
connect( mBtnLineNumFG, SIGNAL( colorChanged( QColor& )),
this, SLOT( colorChangedLineNumFG( QColor& )));
connect( mBtnLineNumBG, SIGNAL( colorChanged( QColor& )),
this, SLOT( colorChangedLineNumBG( QColor& )));
connect( mBtnKeywordFG, SIGNAL( colorChanged( QColor& )),
this, SLOT( colorChangedKeywordFG( QColor& )));
connect( mCBKeywordWeight, SIGNAL( weightChanged( QFont::Weight& )),
this, SLOT( weightChangedKeyword( QFont::Weight& )));
connect( mBtnClassFG, SIGNAL( colorChanged( QColor& )),
this, SLOT( colorChangedClassFG( QColor& )));
connect( mCBClassWeight, SIGNAL( weightChanged( QFont::Weight& )),
this, SLOT( weightChangedClass( QFont::Weight& )));
connect( mBtnQuoteFG, SIGNAL( colorChanged( QColor& )),
this, SLOT( colorChangedQuoteFG( QColor& )));
connect( mCBQuoteWeight, SIGNAL( weightChanged( QFont::Weight& )),
this, SLOT( weightChangedQuote( QFont::Weight& )));
connect( mBtnCommentFG, SIGNAL( colorChanged( QColor& )),
this, SLOT( colorChangedCommentFG( QColor& )));
connect( mCBCommentWeight, SIGNAL( weightChanged( QFont::Weight& )),
this, SLOT( weightChangedComment( QFont::Weight& )));
connect( mBtnSymbolFG, SIGNAL( colorChanged( QColor& )),
this, SLOT( colorChangedSymbolFG( QColor& )));
connect( mBtnSymbolBG, SIGNAL( colorChanged( QColor& )),
this, SLOT( colorChangedSymbolBG( QColor& )));
connect( mCBSymbolWeight, SIGNAL( weightChanged( QFont::Weight& )),
this, SLOT( weightChangedSymbol( QFont::Weight& )));
}
void StyleEditDialog::updateControls()
{
mBtnWidgetColorFG->setColor( mStyleOutgoing.widgetFGColor );
mBtnWidgetColorBG->setColor( mStyleOutgoing.widgetBGColor );
mBtnHighlightBG->setColor( mStyleOutgoing.highlightBGColor );
mBtnLineNumFG->setColor( mStyleOutgoing.lineNumFGColor );
mBtnLineNumBG->setColor( mStyleOutgoing.lineNumBGColor );
mBtnKeywordFG->setColor( mStyleOutgoing.keywordColor );
mCBKeywordWeight->setWeight( mStyleOutgoing.keywordWeight );
mBtnClassFG->setColor( mStyleOutgoing.classColor );
mCBClassWeight->setWeight( mStyleOutgoing.classWeight );
mBtnQuoteFG->setColor( mStyleOutgoing.quoteColor );
mCBQuoteWeight->setWeight( mStyleOutgoing.quoteWeight );
mBtnCommentFG->setColor( mStyleOutgoing.commentColor );
mCBCommentWeight->setWeight( mStyleOutgoing.commentWeight );
mBtnSymbolFG->setColor( mStyleOutgoing.symbolFGColor );
mBtnSymbolBG->setColor( mStyleOutgoing.symbolBGColor );
mCBSymbolWeight->setWeight( mStyleOutgoing.symbolWeight );
}
void StyleEditDialog::updateStyle()
{
mBtnDefaultLight->setEnabled( mStyleOutgoing != defaultStyleLight );
mBtnDefaultDark->setEnabled( mStyleOutgoing != defaultStyleDark );
// set Editor Styling
mSampleEditor->setStyle( mStyleOutgoing );
}
CodeEditorStyle StyleEditDialog::getStyle()
{
return mStyleOutgoing;
}
void StyleEditDialog::resetStyle()
{
mStyleOutgoing = mStyleIncoming;
updateControls();
updateStyle();
}
void StyleEditDialog::setStyleDefaultLight()
{
mStyleOutgoing = defaultStyleLight;
updateControls();
updateStyle();
}
void StyleEditDialog::setStyleDefaultDark()
{
mStyleOutgoing = defaultStyleDark;
updateControls();
updateStyle();
}
void StyleEditDialog::colorChangedWidgetFG( QColor& newColor )
{
mStyleOutgoing.widgetFGColor = newColor;
updateStyle();
}
void StyleEditDialog::colorChangedWidgetBG( QColor& newColor )
{
mStyleOutgoing.widgetBGColor = newColor;
updateStyle();
}
void StyleEditDialog::colorChangedHighlightBG( QColor& newColor )
{
mStyleOutgoing.highlightBGColor = newColor;
updateStyle();
}
void StyleEditDialog::colorChangedLineNumFG( QColor& newColor )
{
mStyleOutgoing.lineNumFGColor = newColor;
updateStyle();
}
void StyleEditDialog::colorChangedLineNumBG( QColor& newColor )
{
mStyleOutgoing.lineNumBGColor = newColor;
updateStyle();
}
void StyleEditDialog::colorChangedKeywordFG( QColor& newColor )
{
mStyleOutgoing.keywordColor = newColor;
updateStyle();
}
void StyleEditDialog::weightChangedKeyword( QFont::Weight& newWeight )
{
mStyleOutgoing.keywordWeight = newWeight;
updateStyle();
}
void StyleEditDialog::colorChangedClassFG( QColor& newColor )
{
mStyleOutgoing.classColor = newColor;
updateStyle();
}
void StyleEditDialog::weightChangedClass( QFont::Weight& newWeight )
{
mStyleOutgoing.classWeight = newWeight;
updateStyle();
}
void StyleEditDialog::colorChangedQuoteFG( QColor& newColor )
{
mStyleOutgoing.quoteColor = newColor;
updateStyle();
}
void StyleEditDialog::weightChangedQuote( QFont::Weight& newWeight )
{
mStyleOutgoing.quoteWeight = newWeight;
updateStyle();
}
void StyleEditDialog::colorChangedCommentFG( QColor& newColor )
{
mStyleOutgoing.commentColor = newColor;
updateStyle();
}
void StyleEditDialog::weightChangedComment( QFont::Weight& newWeight )
{
mStyleOutgoing.commentWeight = newWeight;
updateStyle();
}
void StyleEditDialog::colorChangedSymbolFG( QColor& newColor )
{
mStyleOutgoing.symbolFGColor = newColor;
updateStyle();
}
void StyleEditDialog::colorChangedSymbolBG( QColor& newColor )
{
mStyleOutgoing.symbolBGColor = newColor;
updateStyle();
}
void StyleEditDialog::weightChangedSymbol( QFont::Weight& newWeight )
{
mStyleOutgoing.symbolWeight = newWeight;
updateStyle();
}