You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
421 lines
13 KiB
421 lines
13 KiB
// -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
|
|
/* This file is part of the KDE project
|
|
Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Library General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
This library 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
|
|
Library General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
along with this library; see the file COPYING.LIB. If not, write to
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
* Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#include <KoPictureFilePreview.h>
|
|
#include "KPrBackDia.h"
|
|
#include "KPrBackground.h"
|
|
#include "KPrDocument.h"
|
|
#include "KPrPage.h"
|
|
|
|
#include <qlabel.h>
|
|
#include <qpainter.h>
|
|
#include <qcombobox.h>
|
|
#include <qslider.h>
|
|
#include <qlayout.h>
|
|
#include <qtabwidget.h>
|
|
#include <qvbox.h>
|
|
#include <qcheckbox.h>
|
|
#include <qdatetime.h>
|
|
|
|
#include <kcolorbutton.h>
|
|
#include <klocale.h>
|
|
#include <kfiledialog.h>
|
|
#include <kimageio.h>
|
|
#include <kbuttonbox.h>
|
|
#include <kurlrequester.h>
|
|
|
|
#include <KoPicture.h>
|
|
|
|
KPrBackPreview::KPrBackPreview( QWidget *parent, KPrPage *page )
|
|
: QFrame( parent )
|
|
{
|
|
setFrameStyle( WinPanel | Sunken );
|
|
back = new KPrBackGround( page );
|
|
setMinimumSize( 300, 200 );
|
|
}
|
|
|
|
KPrBackPreview::~KPrBackPreview()
|
|
{
|
|
delete back;
|
|
}
|
|
|
|
void KPrBackPreview::drawContents( QPainter *p )
|
|
{
|
|
QFrame::drawContents( p );
|
|
p->save();
|
|
p->translate( contentsRect().x(), contentsRect().y() );
|
|
back->drawBackground( p, contentsRect().size(), contentsRect(), false );
|
|
p->restore();
|
|
}
|
|
|
|
KPrBackDialog::KPrBackDialog( QWidget* parent, const char* name,
|
|
BackType backType, const QColor &backColor1,
|
|
const QColor &backColor2, BCType _bcType,
|
|
const KoPicture &backPic,
|
|
BackView backPicView, bool _unbalanced,
|
|
int _xfactor, int _yfactor, KPrPage *_page )
|
|
: KDialogBase( parent, name, true, "",KDialogBase::Ok|KDialogBase::Apply|KDialogBase::Cancel|
|
|
KDialogBase::User1|KDialogBase::User2 ),
|
|
m_useMasterBackground( 0 ), m_picture(backPic),m_oldpicture(backPic), m_page( _page )
|
|
{
|
|
lockUpdate = true;
|
|
|
|
oldUseMasterBackground=m_page->useMasterBackground();
|
|
oldBackType=backType;
|
|
oldBackColor1=backColor1;
|
|
oldBackColor2 = backColor2;
|
|
oldBcType= _bcType;
|
|
oldBackPicView=backPicView;
|
|
oldUnbalanced=_unbalanced;
|
|
oldXFactor=_xfactor;
|
|
oldYFactor=_yfactor;
|
|
|
|
QWidget *page = new QWidget( this );
|
|
setMainWidget(page);
|
|
QVBoxLayout *layout = new QVBoxLayout( page, 0, spacingHint() );
|
|
|
|
|
|
QHBoxLayout *hbox = new QHBoxLayout( layout );
|
|
hbox->setSpacing( KDialog::spacingHint() );
|
|
QVBoxLayout *vbox = new QVBoxLayout( hbox );
|
|
vbox->setSpacing( KDialog::spacingHint() );
|
|
|
|
if ( !m_page->isMasterPage() )
|
|
{
|
|
m_useMasterBackground = new QCheckBox( i18n( "Use slide master background" ), page );
|
|
connect( m_useMasterBackground, SIGNAL( clicked() ),
|
|
this, SLOT( updateConfiguration() ) );
|
|
m_useMasterBackground->setChecked( m_page->useMasterBackground() );
|
|
vbox->addWidget( m_useMasterBackground );
|
|
}
|
|
vbox->addWidget( new QLabel( i18n( "Background type:" ), page ) );
|
|
|
|
backCombo = new QComboBox( false, page );
|
|
backCombo->insertItem( i18n( "Color/Gradient" ) );
|
|
backCombo->insertItem( i18n( "Picture" ) );
|
|
backCombo->setCurrentItem( (int)backType );
|
|
connect( backCombo, SIGNAL( activated( int ) ),
|
|
this, SLOT( changeComboText(int) ) );
|
|
|
|
vbox->addWidget( backCombo );
|
|
|
|
tabWidget = new QTabWidget( page );
|
|
vbox->addWidget( tabWidget );
|
|
|
|
// color/gradient tab ---------------
|
|
|
|
QVBox *colorTab = new QVBox( tabWidget );
|
|
colorTab->setSpacing( KDialog::spacingHint() );
|
|
colorTab->setMargin( 5 );
|
|
|
|
cType = new QComboBox( false, colorTab );
|
|
cType->insertItem( i18n( "Plain" ) );
|
|
cType->insertItem( i18n( "Vertical Gradient" ) );
|
|
cType->insertItem( i18n( "Horizontal Gradient" ) );
|
|
cType->insertItem( i18n( "Diagonal Gradient 1" ) );
|
|
cType->insertItem( i18n( "Diagonal Gradient 2" ) );
|
|
cType->insertItem( i18n( "Circle Gradient" ) );
|
|
cType->insertItem( i18n( "Rectangle Gradient" ) );
|
|
cType->insertItem( i18n( "PipeCross Gradient" ) );
|
|
cType->insertItem( i18n( "Pyramid Gradient" ) );
|
|
cType->setCurrentItem( _bcType );
|
|
connect( cType, SIGNAL( activated( int ) ),
|
|
this, SLOT( updateConfiguration() ) );
|
|
|
|
color1Choose = new KColorButton( backColor1, colorTab );
|
|
connect( color1Choose, SIGNAL( changed( const QColor& ) ),
|
|
this, SLOT( updateConfiguration() ) );
|
|
|
|
color2Choose = new KColorButton( backColor2, colorTab );
|
|
connect( color2Choose, SIGNAL( changed( const QColor& ) ),
|
|
this, SLOT( updateConfiguration() ) );
|
|
|
|
unbalanced = new QCheckBox( i18n( "Unbalanced" ), colorTab );
|
|
connect( unbalanced, SIGNAL( clicked() ),
|
|
this, SLOT( updateConfiguration() ) );
|
|
unbalanced->setChecked( _unbalanced );
|
|
|
|
labXFactor =new QLabel( i18n( "X-factor:" ), colorTab );
|
|
|
|
xfactor = new QSlider( -200, 200, 1, 100, QSlider::Horizontal, colorTab );
|
|
connect( xfactor, SIGNAL( valueChanged( int ) ),
|
|
this, SLOT( updateConfiguration() ) );
|
|
xfactor->setValue( _xfactor );
|
|
|
|
labYFactor=new QLabel( i18n( "Y-factor:" ), colorTab );
|
|
|
|
yfactor = new QSlider( -200, 200, 1, 100, QSlider::Horizontal, colorTab );
|
|
connect( yfactor, SIGNAL( valueChanged( int ) ),
|
|
this, SLOT( updateConfiguration() ) );
|
|
yfactor->setValue( _yfactor );
|
|
|
|
tabWidget->addTab( colorTab, i18n( "Color/Gradient" ) );
|
|
|
|
// picture tab ---------------------
|
|
|
|
QVBox *picTab = new QVBox( tabWidget );
|
|
picTab->setSpacing( KDialog::spacingHint() );
|
|
picTab->setMargin( 5 );
|
|
|
|
QLabel *l = new QLabel( i18n( "View mode:" ), picTab );
|
|
l->setFixedHeight( l->sizeHint().height() );
|
|
|
|
picView = new QComboBox( false, picTab );
|
|
picView->insertItem( i18n( "Scaled" ) );
|
|
picView->insertItem( i18n( "Centered" ) );
|
|
picView->insertItem( i18n( "Tiled" ) );
|
|
picView->setCurrentItem( (int)backPicView );
|
|
connect( picView, SIGNAL( activated( int ) ),
|
|
this, SLOT( updateConfiguration() ) );
|
|
|
|
picChooseLabel = new QLabel( i18n("&Location:"), picTab );
|
|
picChooseLabel->setFixedHeight( picChooseLabel->sizeHint().height() );
|
|
|
|
picChoose = new KURLRequester( picTab, "picChoose" );
|
|
picChoose->setFixedHeight( picChoose->sizeHint().height() );
|
|
picChoose->setMode( KFile::ExistingOnly );
|
|
connect( picChoose, SIGNAL( openFileDialog( KURLRequester * ) ),
|
|
SLOT( aboutToSelectPic() ) );
|
|
connect( picChoose, SIGNAL( urlSelected( const QString & ) ),
|
|
SLOT( afterSelectPic( const QString & ) ) );
|
|
|
|
picChooseLabel->setBuddy( picChoose );
|
|
|
|
(void)new QWidget( picTab );
|
|
|
|
tabWidget->addTab( picTab, i18n( "Picture" ) );
|
|
|
|
// ------------------------ preview
|
|
|
|
preview = new KPrBackPreview( page, m_page );
|
|
hbox->addWidget( preview );
|
|
|
|
// ------------------------ buttons
|
|
|
|
connect( this, SIGNAL( okClicked() ),
|
|
this, SLOT( Ok() ) );
|
|
connect( this, SIGNAL( applyClicked() ),
|
|
this, SLOT( Apply() ) );
|
|
connect( this, SIGNAL( user1Clicked() ),
|
|
this, SLOT( ApplyGlobal() ) );
|
|
|
|
connect( this, SIGNAL( user2Clicked() ),
|
|
this, SLOT( slotReset() ) );
|
|
|
|
connect( this, SIGNAL( okClicked() ),
|
|
this, SLOT( accept() ) );
|
|
setButtonText(KDialogBase::User1,i18n( "Apply &Global" ));
|
|
setButtonText(KDialogBase::User2,i18n( "&Reset" ));
|
|
picChanged = true;
|
|
lockUpdate = false;
|
|
updateConfiguration();
|
|
}
|
|
|
|
void KPrBackDialog::slotReset()
|
|
{
|
|
if ( m_useMasterBackground )
|
|
m_useMasterBackground->setChecked( oldUseMasterBackground );
|
|
backCombo->setCurrentItem( (int)oldBackType );
|
|
color1Choose->setColor( oldBackColor1 );
|
|
color2Choose->setColor( oldBackColor2 );
|
|
cType->setCurrentItem( oldBcType );
|
|
|
|
m_picture=m_oldpicture;
|
|
|
|
if ( !m_picture.isNull() )
|
|
picChoose->setURL( m_picture.getKey().filename() );
|
|
else
|
|
picChoose->setURL( QString::null );
|
|
|
|
picView->setCurrentItem( (int)oldBackPicView );
|
|
unbalanced->setChecked( oldUnbalanced );
|
|
xfactor->setValue( oldXFactor );
|
|
yfactor->setValue( oldYFactor );
|
|
updateConfiguration();
|
|
}
|
|
|
|
void KPrBackDialog::changeComboText(int _p)
|
|
{
|
|
if(_p!=tabWidget->currentPageIndex ())
|
|
tabWidget->setCurrentPage(_p);
|
|
updateConfiguration();
|
|
}
|
|
|
|
void KPrBackDialog::showEvent( QShowEvent *e )
|
|
{
|
|
QDialog::showEvent( e );
|
|
lockUpdate = false;
|
|
updateConfiguration();
|
|
}
|
|
|
|
void KPrBackDialog::updateConfiguration()
|
|
{
|
|
if ( lockUpdate )
|
|
return;
|
|
|
|
if ( m_useMasterBackground )
|
|
{
|
|
tabWidget->setEnabled( !m_useMasterBackground->isChecked() );
|
|
backCombo->setEnabled( !m_useMasterBackground->isChecked() );
|
|
}
|
|
else
|
|
{
|
|
tabWidget->setEnabled( true );
|
|
backCombo->setEnabled( true );
|
|
}
|
|
if ( getBackColorType() == BCT_PLAIN )
|
|
{
|
|
unbalanced->setEnabled( false );
|
|
xfactor->setEnabled( false );
|
|
yfactor->setEnabled( false );
|
|
labXFactor->setEnabled(false);
|
|
labYFactor->setEnabled(false);
|
|
color2Choose->setEnabled( false );
|
|
}
|
|
else
|
|
{
|
|
unbalanced->setEnabled( true );
|
|
if ( unbalanced->isChecked() )
|
|
{
|
|
xfactor->setEnabled( true );
|
|
yfactor->setEnabled( true );
|
|
labXFactor->setEnabled(true);
|
|
labYFactor->setEnabled(true);
|
|
}
|
|
else
|
|
{
|
|
xfactor->setEnabled( false );
|
|
yfactor->setEnabled( false );
|
|
labXFactor->setEnabled(false);
|
|
labYFactor->setEnabled(false);
|
|
}
|
|
color2Choose->setEnabled( true );
|
|
}
|
|
|
|
if ( m_useMasterBackground && m_useMasterBackground->isChecked() )
|
|
{
|
|
kdDebug(33001) << "set backgound to master" << endl;
|
|
preview->backGround()->setBackGround( m_page->masterPage()->background()->getBackGround() );
|
|
preview->repaint( true );
|
|
}
|
|
else
|
|
{
|
|
picChanged = (getBackType() == BT_PICTURE);
|
|
preview->backGround()->setBackType( getBackType() );
|
|
preview->backGround()->setBackView( getBackView() );
|
|
preview->backGround()->setBackColor1( getBackColor1() );
|
|
preview->backGround()->setBackColor2( getBackColor2() );
|
|
preview->backGround()->setBackColorType( getBackColorType() );
|
|
preview->backGround()->setBackUnbalanced( getBackUnbalanced() );
|
|
preview->backGround()->setBackXFactor( getBackXFactor() );
|
|
preview->backGround()->setBackYFactor( getBackYFactor() );
|
|
if ( !m_picture.isNull() && picChanged )
|
|
preview->backGround()->setBackPicture( m_picture );
|
|
preview->backGround()->setBackType( getBackType() );
|
|
if ( preview->isVisible() && isVisible() ) {
|
|
preview->backGround()->reload(); // ### TODO: instead of reloading, load or remove the picture correctly.
|
|
preview->repaint( true );
|
|
}
|
|
|
|
picChanged = false;
|
|
}
|
|
}
|
|
|
|
BackType KPrBackDialog::getBackType() const
|
|
{
|
|
return (BackType)backCombo->currentItem();
|
|
}
|
|
|
|
BackView KPrBackDialog::getBackView() const
|
|
{
|
|
return (BackView)picView->currentItem();
|
|
}
|
|
|
|
QColor KPrBackDialog::getBackColor1() const
|
|
{
|
|
return color1Choose->color();
|
|
}
|
|
|
|
QColor KPrBackDialog::getBackColor2() const
|
|
{
|
|
return color2Choose->color();
|
|
}
|
|
|
|
BCType KPrBackDialog::getBackColorType() const
|
|
{
|
|
return (BCType)cType->currentItem();
|
|
}
|
|
|
|
bool KPrBackDialog::getBackUnbalanced() const
|
|
{
|
|
return unbalanced->isChecked();
|
|
}
|
|
|
|
int KPrBackDialog::getBackXFactor() const
|
|
{
|
|
return xfactor->value();
|
|
}
|
|
|
|
int KPrBackDialog::getBackYFactor() const
|
|
{
|
|
return yfactor->value();
|
|
}
|
|
|
|
KPrBackGround::Settings KPrBackDialog::getBackGround() const
|
|
{
|
|
return KPrBackGround::Settings( getBackType(), getBackColor1(),
|
|
getBackColor2(), getBackColorType(),
|
|
getBackUnbalanced(), getBackXFactor(),
|
|
getBackYFactor(), getBackPicture().getKey(),
|
|
getBackView() );
|
|
}
|
|
|
|
bool KPrBackDialog::useMasterBackground() const
|
|
{
|
|
return m_useMasterBackground ? m_useMasterBackground->isChecked():false;
|
|
}
|
|
|
|
void KPrBackDialog::aboutToSelectPic()
|
|
{
|
|
QStringList mimetypes;
|
|
mimetypes += KImageIO::mimeTypes( KImageIO::Reading );
|
|
mimetypes += KoPictureFilePreview::clipartMimeTypes();
|
|
|
|
picChoose->fileDialog()->setMimeFilter( mimetypes );
|
|
picChoose->fileDialog()->setPreviewWidget( new KoPictureFilePreview( picChoose->fileDialog() ) );
|
|
}
|
|
|
|
void KPrBackDialog::afterSelectPic( const QString &url )
|
|
{
|
|
KoPicture picture;
|
|
picture.setKeyAndDownloadPicture(url, tabWidget);
|
|
|
|
if ( picture.isNull() )
|
|
return;
|
|
|
|
backCombo->setCurrentItem( 1 );
|
|
m_picture=picture;
|
|
picChanged = true;
|
|
updateConfiguration();
|
|
}
|
|
|
|
#include "KPrGradient.h"
|
|
#include "KPrBackDia.moc"
|