mirror of
https://github.com/qgis/QGIS.git
synced 2025-03-28 00:04:04 -04:00
171 lines
6.2 KiB
C++
171 lines
6.2 KiB
C++
/***************************************************************************
|
|
qgstextannotationdialog.cpp
|
|
---------------------------
|
|
begin : February 24, 2010
|
|
copyright : (C) 2010 by Marco Hugentobler
|
|
email : marco dot hugentobler at hugis dot net
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* 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 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
#include "qgstextannotationdialog.h"
|
|
#include "qgsannotationwidget.h"
|
|
#include "qgstextannotation.h"
|
|
#include "qgsmapcanvasannotationitem.h"
|
|
#include "qgsannotationmanager.h"
|
|
#include "qgsproject.h"
|
|
#include "qgsgui.h"
|
|
#include <QColorDialog>
|
|
#include <QGraphicsScene>
|
|
|
|
QgsTextAnnotationDialog::QgsTextAnnotationDialog( QgsMapCanvasAnnotationItem *item, QWidget *parent, Qt::WindowFlags f )
|
|
: QDialog( parent, f )
|
|
, mItem( item )
|
|
, mTextDocument( nullptr )
|
|
{
|
|
setupUi( this );
|
|
connect( mFontColorButton, &QgsColorButton::colorChanged, this, &QgsTextAnnotationDialog::mFontColorButton_colorChanged );
|
|
connect( mButtonBox, &QDialogButtonBox::clicked, this, &QgsTextAnnotationDialog::mButtonBox_clicked );
|
|
mEmbeddedWidget = new QgsAnnotationWidget( mItem );
|
|
mStackedWidget->addWidget( mEmbeddedWidget );
|
|
mStackedWidget->setCurrentWidget( mEmbeddedWidget );
|
|
connect( mEmbeddedWidget, &QgsAnnotationWidget::backgroundColorChanged, this, &QgsTextAnnotationDialog::backgroundColorChanged );
|
|
mTextEdit->setAttribute( Qt::WA_TranslucentBackground );
|
|
if ( mItem && mItem->annotation() )
|
|
{
|
|
QgsTextAnnotation *annotation = static_cast< QgsTextAnnotation * >( mItem->annotation() );
|
|
mTextDocument.reset( annotation->document() ? annotation->document()->clone() : nullptr );
|
|
mTextEdit->setDocument( mTextDocument.get() );
|
|
}
|
|
|
|
QgsGui::instance()->enableAutoGeometryRestore( this );
|
|
|
|
mFontColorButton->setColorDialogTitle( tr( "Select Font Color" ) );
|
|
mFontColorButton->setAllowOpacity( true );
|
|
mFontColorButton->setContext( QStringLiteral( "symbology" ) );
|
|
|
|
setCurrentFontPropertiesToGui();
|
|
|
|
QObject::connect( mButtonBox, &QDialogButtonBox::accepted, this, &QgsTextAnnotationDialog::applyTextToItem );
|
|
QObject::connect( mFontComboBox, &QFontComboBox::currentFontChanged, this, &QgsTextAnnotationDialog::changeCurrentFormat );
|
|
QObject::connect( mFontSizeSpinBox, static_cast < void ( QSpinBox::* )( int ) > ( &QSpinBox::valueChanged ), this, &QgsTextAnnotationDialog::changeCurrentFormat );
|
|
QObject::connect( mBoldPushButton, &QPushButton::toggled, this, &QgsTextAnnotationDialog::changeCurrentFormat );
|
|
QObject::connect( mItalicsPushButton, &QPushButton::toggled, this, &QgsTextAnnotationDialog::changeCurrentFormat );
|
|
QObject::connect( mTextEdit, &QTextEdit::cursorPositionChanged, this, &QgsTextAnnotationDialog::setCurrentFontPropertiesToGui );
|
|
|
|
QPushButton *deleteButton = new QPushButton( tr( "Delete" ) );
|
|
QObject::connect( deleteButton, &QPushButton::clicked, this, &QgsTextAnnotationDialog::deleteItem );
|
|
mButtonBox->addButton( deleteButton, QDialogButtonBox::RejectRole );
|
|
}
|
|
|
|
void QgsTextAnnotationDialog::showEvent( QShowEvent * )
|
|
{
|
|
backgroundColorChanged( mItem && mItem->annotation() && mItem->annotation()->fillSymbol() ? mItem->annotation()->fillSymbol()->color() : Qt::white );
|
|
}
|
|
|
|
void QgsTextAnnotationDialog::mButtonBox_clicked( QAbstractButton *button )
|
|
{
|
|
if ( mButtonBox->buttonRole( button ) == QDialogButtonBox::ApplyRole )
|
|
{
|
|
applyTextToItem();
|
|
mEmbeddedWidget->apply();
|
|
}
|
|
}
|
|
|
|
void QgsTextAnnotationDialog::backgroundColorChanged( const QColor &color )
|
|
{
|
|
QPalette p = mTextEdit->viewport()->palette();
|
|
p.setColor( QPalette::Base, color );
|
|
mTextEdit->viewport()->setPalette( p );
|
|
}
|
|
|
|
void QgsTextAnnotationDialog::applyTextToItem()
|
|
{
|
|
if ( mItem && mTextDocument && mItem->annotation() )
|
|
{
|
|
QgsTextAnnotation *annotation = static_cast< QgsTextAnnotation * >( mItem->annotation() );
|
|
//apply settings from embedded item widget
|
|
if ( mEmbeddedWidget )
|
|
{
|
|
mEmbeddedWidget->apply();
|
|
}
|
|
annotation->setDocument( mTextDocument.get() );
|
|
mItem->update();
|
|
}
|
|
}
|
|
|
|
void QgsTextAnnotationDialog::changeCurrentFormat()
|
|
{
|
|
QFont newFont;
|
|
newFont.setFamily( mFontComboBox->currentFont().family() );
|
|
|
|
//bold
|
|
if ( mBoldPushButton->isChecked() )
|
|
{
|
|
newFont.setBold( true );
|
|
}
|
|
else
|
|
{
|
|
newFont.setBold( false );
|
|
}
|
|
|
|
//italic
|
|
if ( mItalicsPushButton->isChecked() )
|
|
{
|
|
newFont.setItalic( true );
|
|
}
|
|
else
|
|
{
|
|
newFont.setItalic( false );
|
|
}
|
|
|
|
//size
|
|
newFont.setPointSize( mFontSizeSpinBox->value() );
|
|
mTextEdit->setCurrentFont( newFont );
|
|
|
|
//color
|
|
mTextEdit->setTextColor( mFontColorButton->color() );
|
|
}
|
|
|
|
void QgsTextAnnotationDialog::mFontColorButton_colorChanged( const QColor &color )
|
|
{
|
|
Q_UNUSED( color )
|
|
changeCurrentFormat();
|
|
}
|
|
|
|
void QgsTextAnnotationDialog::setCurrentFontPropertiesToGui()
|
|
{
|
|
blockAllSignals( true );
|
|
QFont currentFont = mTextEdit->currentFont();
|
|
mFontComboBox->setCurrentFont( currentFont );
|
|
mFontSizeSpinBox->setValue( currentFont.pointSize() );
|
|
mBoldPushButton->setChecked( currentFont.bold() );
|
|
mItalicsPushButton->setChecked( currentFont.italic() );
|
|
mFontColorButton->setColor( mTextEdit->textColor() );
|
|
blockAllSignals( false );
|
|
}
|
|
|
|
void QgsTextAnnotationDialog::blockAllSignals( bool block )
|
|
{
|
|
mFontComboBox->blockSignals( block );
|
|
mFontSizeSpinBox->blockSignals( block );
|
|
mBoldPushButton->blockSignals( block );
|
|
mItalicsPushButton->blockSignals( block );
|
|
mFontColorButton->blockSignals( block );
|
|
}
|
|
|
|
void QgsTextAnnotationDialog::deleteItem()
|
|
{
|
|
if ( mItem && mItem->annotation() )
|
|
QgsProject::instance()->annotationManager()->removeAnnotation( mItem->annotation() );
|
|
mItem = nullptr;
|
|
}
|
|
|