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.
krecipes/krecipes/src/dialogs/borderdialog.cpp

262 lines
7.7 KiB

/***************************************************************************
* Copyright (C) 2004 by *
* Jason Kivlighn (jkivlighn@gmail.com) *
* *
* 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 "borderdialog.h"
#include <ntqpushbutton.h>
#include <ntqgroupbox.h>
#include <ntqvbox.h>
#include <ntqlabel.h>
#include <ntqspinbox.h>
#include <ntqlayout.h>
#include <ntqtooltip.h>
#include <ntqwhatsthis.h>
#include <kdebug.h>
#include <tdehtml_part.h>
#include <tdehtmlview.h>
#include <tdelistbox.h>
#include <tdelocale.h>
#include "datablocks/kreborder.h"
BorderDialog::BorderDialog( const KreBorder &border, TQWidget* parent, const char* name )
: KDialogBase( parent, name, true, TQString::null,
KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok )
{
TQVBox *page = makeVBoxMainWidget();
borderGroupBox = new TQGroupBox( page, "borderGroupBox" );
borderGroupBox->setColumnLayout( 0, TQt::Vertical );
borderGroupBox->layout() ->setSpacing( 6 );
borderGroupBox->layout() ->setMargin( 11 );
borderGroupBoxLayout = new TQVBoxLayout( borderGroupBox->layout() );
borderGroupBoxLayout->setAlignment( TQt::AlignTop );
layout4 = new TQHBoxLayout( 0, 0, 6, "layout4" );
layout3 = new TQVBoxLayout( 0, 0, 6, "layout3" );
styleLabel = new TQLabel( borderGroupBox, "styleLabel" );
layout3->addWidget( styleLabel );
styleListBox = new TDEListBox( borderGroupBox, "styleListBox" );
layout3->addWidget( styleListBox );
layout4->addLayout( layout3 );
layout2 = new TQVBoxLayout( 0, 0, 6, "layout2" );
colorLabel = new TQLabel( borderGroupBox, "colorLabel" );
layout2->addWidget( colorLabel );
TQHBox *color_hbox = new TQHBox( borderGroupBox );
color_hbox->setSizePolicy( TQSizePolicy::MinimumExpanding, TQSizePolicy::MinimumExpanding );
hsSelector = new KHSSelector( color_hbox );
hsSelector->setMinimumSize( 140, 70 );
connect( hsSelector, TQ_SIGNAL( valueChanged( int, int ) ), TQ_SLOT( slotHSChanged( int, int ) ) );
valuePal = new KValueSelector( color_hbox );
valuePal->setMinimumSize( 26, 70 );
connect( valuePal, TQ_SIGNAL( valueChanged( int ) ), TQ_SLOT( slotVChanged( int ) ) );
layout2->addWidget( color_hbox );
layout4->addLayout( layout2 );
layout1 = new TQVBoxLayout( 0, 0, 6, "layout1" );
widthLabel = new TQLabel( borderGroupBox, "widthLabel" );
layout1->addWidget( widthLabel );
widthSpinBox = new TQSpinBox( borderGroupBox, "widthSpinBox" );
widthSpinBox->setMinValue( 1 );
layout1->addWidget( widthSpinBox );
widthListBox = new TDEListBox( borderGroupBox, "widthListBox" );
layout1->addWidget( widthListBox );
layout4->addLayout( layout1 );
borderGroupBoxLayout->addLayout( layout4 );
borderPreview = new TDEHTMLPart( borderGroupBox );
borderPreview->view() ->setSizePolicy( TQSizePolicy::Preferred, TQSizePolicy::Fixed );
borderGroupBoxLayout->addWidget( borderPreview->view() );
languageChange();
connect( widthSpinBox, TQ_SIGNAL( valueChanged( int ) ), TQ_SLOT( updatePreview() ) );
connect( widthListBox, TQ_SIGNAL( highlighted( int ) ), TQ_SLOT( updateSpinBox( int ) ) );
connect( styleListBox, TQ_SIGNAL( highlighted( int ) ), TQ_SLOT( updatePreview() ) );
initListBoxs();
loadBorder( border );
clearWState( WState_Polished );
}
BorderDialog::~BorderDialog()
{}
void BorderDialog::languageChange()
{
borderGroupBox->setTitle( i18n( "Requested Border" ) );
styleLabel->setText( i18n( "Style:" ) );
colorLabel->setText( i18n( "Color:" ) );
widthLabel->setText( i18n( "Width:" ) );
}
KreBorder BorderDialog::border() const
{
int width = widthSpinBox->value();
TQString style;
switch ( styleListBox->currentItem() ) {
case 0:
style = "none";
break;
case 1:
style = "dotted";
break;
case 2:
style = "dashed";
break;
case 3:
style = "solid";
break;
case 4:
style = "double";
break;
case 5:
style = "groove";
break;
case 6:
style = "ridge";
break;
case 7:
style = "inset";
break;
case 8:
style = "outset";
break;
}
return KreBorder( width, style, selColor );
}
void BorderDialog::loadBorder( const KreBorder &border )
{
widthSpinBox->setValue( border.width );
widthListBox->setCurrentItem( border.width - 1 );
if ( border.style == "none" )
styleListBox->setCurrentItem( 0 );
else if ( border.style == "dotted" )
styleListBox->setCurrentItem( 1 );
else if ( border.style == "dashed" )
styleListBox->setCurrentItem( 2 );
else if ( border.style == "solid" )
styleListBox->setCurrentItem( 3 );
else if ( border.style == "double" )
styleListBox->setCurrentItem( 4 );
else if ( border.style == "groove" )
styleListBox->setCurrentItem( 5 );
else if ( border.style == "ridge" )
styleListBox->setCurrentItem( 6 );
else if ( border.style == "inset" )
styleListBox->setCurrentItem( 7 );
else if ( border.style == "outset" )
styleListBox->setCurrentItem( 8 );
setColor( border.color );
updatePreview();
}
void BorderDialog::initListBoxs()
{
styleListBox->insertItem( i18n( "None" ) );
styleListBox->insertItem( i18n( "See http://krecipes.sourceforge.net/bordertypes.png for an example", "Dotted" ) );
styleListBox->insertItem( i18n( "See http://krecipes.sourceforge.net/bordertypes.png for an example", "Dashed" ) );
styleListBox->insertItem( i18n( "See http://krecipes.sourceforge.net/bordertypes.png for an example", "Solid" ) );
styleListBox->insertItem( i18n( "See http://krecipes.sourceforge.net/bordertypes.png for an example", "Double" ) );
styleListBox->insertItem( i18n( "See http://krecipes.sourceforge.net/bordertypes.png for an example", "Groove" ) );
styleListBox->insertItem( i18n( "See http://krecipes.sourceforge.net/bordertypes.png for an example", "Ridge" ) );
styleListBox->insertItem( i18n( "See http://krecipes.sourceforge.net/bordertypes.png for an example", "Inset" ) );
styleListBox->insertItem( i18n( "See http://krecipes.sourceforge.net/bordertypes.png for an example", "Outset" ) );
widthListBox->insertItem( "1" );
widthListBox->insertItem( "2" );
widthListBox->insertItem( "3" );
widthListBox->insertItem( "4" );
widthListBox->insertItem( "5" );
widthListBox->insertItem( "6" );
widthListBox->insertItem( "7" );
}
void BorderDialog::updatePreview()
{
KreBorder b( border() );
TQString html_str = TQString( "<html><body><div style=\"vertical-align: middle; border: %1px %2 %3;\"><center><h1>%4</h1></center></div></body></html>" ).arg( b.width ).arg( b.style ).arg( b.color.name() ).arg( i18n( "Border Preview" ) );
borderPreview->begin();
borderPreview->write( html_str );
borderPreview->end();
borderPreview->show();
}
void BorderDialog::updateSpinBox( int index )
{
widthSpinBox->setValue( index + 1 );
}
void BorderDialog::slotHSChanged( int h, int s )
{
int _h, _s, v;
selColor.hsv( &_h, &_s, &v );
if ( v < 1 )
v = 1;
KColor col;
col.setHsv( h, s, v );
setColor( col );
updatePreview();
}
void BorderDialog::slotVChanged( int v )
{
int h, s, _v;
selColor.hsv( &h, &s, &_v );
KColor col;
col.setHsv( h, s, v );
setColor( col );
updatePreview();
}
void BorderDialog::setColor( const KColor &color )
{
if ( color == selColor )
return ;
selColor = color;
int h, s, v;
color.hsv( &h, &s, &v );
hsSelector->setValues( h, s );
valuePal->setHue( h );
valuePal->setSaturation( s );
valuePal->setValue( v );
valuePal->updateContents();
valuePal->repaint( FALSE );
}
#include "borderdialog.moc"