/*************************************************************************** definitiondialog.cpp - description ------------------- begin : Don Apr 18 12:34:56 CEST 2002 copyright : (C) 2002 by Dominik Seichter email : domseichter@web.de ***************************************************************************/ /*************************************************************************** * * * 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 "definitiondialog.h" #include "printersettings.h" #include "labelutils.h" #include "definition.h" #include #include #include #include #include #include // KDE includes #include LabelPreview::LabelPreview( TQWidget* parent, const char* name ) : TQWidget( parent, name) { // For old DIN A4 preview PrinterSettings* ps = PrinterSettings::getInstance(); setFixedSize( TQSize( ((int)ps->pageWidth() + 20)/2, ((int)ps->pageHeight() + 20)/2 ) ); m_prv_enabled = true; } LabelPreview::~LabelPreview() { } void LabelPreview::paintEvent( TQPaintEvent* ) { TQPainter p( this ); p.fillRect( 0, 0, width(), height(), TQBrush( TQt::white ) ); p.setPen( TQPen( TQt::black ) ); p.translate( 10, 10 ); p.fillRect( 0, 0, 210/2, 297/2, TQBrush( TQt::gray ) ); p.drawRect( 0, 0, 210/2, 297/2 ); if(!m_prv_enabled) return; // int numv = measure.num_v > 0 ? measure.num_v : 1; for( int v = 0; v < measure.numV(); v++ ) { for( int h = 0; h < measure.numH(); h++ ) { if( !v && !h ) p.setPen( TQPen( TQt::red ) ); else p.setPen( TQPen( TQt::black ) ); p.fillRect( int(measure.gapLeftMM() + (measure.gapHMM() * h)) / 2, int(measure.gapTopMM() + (measure.gapVMM() * v)) / 2 , (int)measure.widthMM() / 2 , (int)measure.heightMM() / 2, TQBrush( TQt::white ) ); p.drawRect( int(measure.gapLeftMM() + (measure.gapHMM() * h)) / 2, int(measure.gapTopMM() + (measure.gapVMM() * v)) / 2, (int)measure.widthMM() / 2, (int)measure.heightMM() / 2 ); } } } /*****************************************/ DefinitionDialog::DefinitionDialog( TQWidget* parent, const char* name, bool modal, WFlags fl ) : TQDialog( parent, name, modal, fl ) { resize( 465, 345 ); setCaption( i18n( "Add Label Definition" ) ); TQHBoxLayout* layout = new TQHBoxLayout( this, 6, 6 ); DefinitionDialogLayout = new TQVBoxLayout( 0, 11, 6, "DefinitionDialogLayout"); Layout17 = new TQHBoxLayout( 0, 0, 6, "Layout17"); Layout13 = new TQVBoxLayout( 0, 0, 6, "Layout13"); TextLabel1 = new TQLabel( this, "TextLabel1" ); TextLabel1->setText( i18n( "Producer:" ) ); Layout13->addWidget( TextLabel1 ); TextLabel2 = new TQLabel( this, "TextLabel2" ); TextLabel2->setText( i18n( "Type:" ) ); Layout13->addWidget( TextLabel2 ); TextLabel3 = new TQLabel( this, "TextLabel3" ); TextLabel3->setText( TQString( i18n( "Width (in %1):" ) ).arg( Measurements::system() ) ); Layout13->addWidget( TextLabel3 ); TextLabel4 = new TQLabel( this, "TextLabel4" ); TextLabel4->setText( TQString( i18n( "Height (in %1):" ) ).arg( Measurements::system() ) ); Layout13->addWidget( TextLabel4 ); TextLabel5 = new TQLabel( this, "TextLabel5" ); TextLabel5->setText( i18n( "Horizontal Gap:" ) ); Layout13->addWidget( TextLabel5 ); TextLabel6 = new TQLabel( this, "TextLabel6" ); TextLabel6->setText( i18n( "Vertical Gap:" ) ); Layout13->addWidget( TextLabel6 ); TextLabel7 = new TQLabel( this, "TextLabel7" ); TextLabel7->setText( i18n( "Top Gap:" ) ); Layout13->addWidget( TextLabel7 ); TextLabel8 = new TQLabel( this, "TextLabel8" ); TextLabel8->setText( i18n( "Left Gap:" ) ); Layout13->addWidget( TextLabel8 ); TextLabel9 = new TQLabel( this, "TextLabel9" ); TextLabel9->setText( i18n("NumberQt::Horizontal:") ); Layout13->addWidget( TextLabel9 ); TextLabel10 = new TQLabel( this, "TextLabel10" ); TextLabel10->setText( i18n("NumberQt::Vertical:") ); Layout13->addWidget( TextLabel10 ); Layout17->addLayout( Layout13 ); Layout14 = new TQVBoxLayout( 0, 0, 6, "Layout14"); comboProducer = new KComboBox( FALSE, this, "comboProducer" ); comboProducer->setEditable( TRUE ); Layout14->addWidget( comboProducer ); comboType = new KComboBox( FALSE, this, "type" ); comboType->setEditable( TRUE ); Layout14->addWidget( comboType ); editWidth = new KRestrictedLine( this, "editWidth" ); editWidth->setText( i18n( "0" ) ); editWidth->setValidChars( i18n( "0123456789." ) ); Layout14->addWidget( editWidth ); editHeight = new KRestrictedLine( this, "editHeight" ); editHeight->setText( i18n( "0" ) ); editHeight->setValidChars( i18n( "0123456789." ) ); Layout14->addWidget( editHeight ); editHGap = new KRestrictedLine( this, "editHGap" ); editHGap->setText( i18n( "0" ) ); editHGap->setValidChars( i18n( "0123456789." ) ); Layout14->addWidget( editHGap ); editVGap = new KRestrictedLine( this, "editVGap" ); editVGap->setText( i18n( "0" ) ); editVGap->setValidChars( i18n( "0123456789." ) ); Layout14->addWidget( editVGap ); editTGap = new KRestrictedLine( this, "editTGap" ); editTGap->setText( i18n( "0" ) ); editTGap->setValidChars( i18n( "0123456789." ) ); Layout14->addWidget( editTGap ); editLGap = new KRestrictedLine( this, "editLGap" ); editLGap->setText( i18n( "0" ) ); editLGap->setValidChars( i18n( "0123456789." ) ); Layout14->addWidget( editLGap ); editNumH = new KRestrictedLine( this, "editNumH" ); editNumH->setText( i18n( "0" ) ); editNumH->setValidChars( "0123456789" ); Layout14->addWidget( editNumH ); editNumV = new KRestrictedLine( this, "editNumV" ); editNumV->setText( i18n( "0" ) ); editNumV->setValidChars( "0123456789" ); Layout14->addWidget( editNumV ); Layout17->addLayout( Layout14 ); TQSpacerItem* spacer = new TQSpacerItem( 0, 0, TQSizePolicy::Expanding, TQSizePolicy::Minimum ); Layout17->addItem( spacer ); DefinitionDialogLayout->addLayout( Layout17 ); TQSpacerItem* spacer_2 = new TQSpacerItem( 0, 0, TQSizePolicy::Minimum, TQSizePolicy::Expanding ); DefinitionDialogLayout->addItem( spacer_2 ); Layout16 = new TQHBoxLayout( 0, 0, 6, "Layout16"); buttonInfo = new KPushButton( i18n("More &Information"), this ); Layout16->addWidget( buttonInfo ); TQSpacerItem* spacer_3 = new TQSpacerItem( 0, 0, TQSizePolicy::Expanding, TQSizePolicy::Minimum ); Layout16->addItem( spacer_3 ); buttonAdd = new KPushButton( this, "buttonAdd" ); buttonAdd->setText( i18n( "&Add" ) ); Layout16->addWidget( buttonAdd ); buttonCancel = new KPushButton( this, "buttonCancel" ); buttonCancel->setText( i18n( "&Cancel" ) ); Layout16->addWidget( buttonCancel ); DefinitionDialogLayout->addLayout( Layout16 ); preview = new LabelPreview( this ); layout->addLayout( DefinitionDialogLayout ); layout->addWidget( preview ); l = new TQLabel( this ); setExtension( l ); setOrientation(Qt::Vertical ); connect( buttonCancel, TQT_SIGNAL( clicked() ), this, TQT_SLOT( reject() ) ); connect( buttonAdd, TQT_SIGNAL( clicked() ), this, TQT_SLOT( add() ) ); connect( editWidth, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( updatePreview() ) ); connect( editHeight, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( updatePreview() ) ); connect( editHGap, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( updatePreview() ) ); connect( editVGap, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( updatePreview() ) ); connect( editTGap, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( updatePreview() ) ); connect( editLGap, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( updatePreview() ) ); connect( editNumH, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( updatePreview() ) ); connect( editNumV, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( updatePreview() ) ); comboProducer->setInsertionPolicy( TQComboBox::NoInsertion ); comboType->setInsertionPolicy( TQComboBox::NoInsertion ); comboProducer->clear(); TQStringList list = Definition::getProducers(); comboProducer->insertStringList( list ); types = new TQStringList[list.count()]; for( unsigned int i = 0; i < list.count(); i++ ) types[i] = Definition::getTypes( list[i] ); connect( comboProducer, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( updateType() ) ); connect( comboType, TQT_SIGNAL( textChanged(const TQString &) ), this, TQT_SLOT( updateText() ) ); connect( buttonInfo, TQT_SIGNAL( clicked() ), this, TQT_SLOT( toggleExtension() ) ); drawGraphic(); updateType(); showExtension( false ); } DefinitionDialog::~DefinitionDialog() { delete [] types; } void DefinitionDialog::add() { Definition::write( getCurrentMeasure(), comboType->currentText(), comboProducer->currentText() ); accept(); } void DefinitionDialog::updateType() { comboType->clear(); if( comboProducer->currentText() == comboProducer->text( comboProducer->currentItem() ) ) if( comboProducer->currentItem() < comboProducer->count()) comboType->insertStringList( types[ comboProducer->currentItem() ] ); comboType->insertItem( i18n( "Custom" ), 0 ); } const Measurements DefinitionDialog::getCurrentMeasure() { Measurements m; m.setGapLeft( editLGap->text().toDouble() ); m.setGapTop( editTGap->text().toDouble() ); m.setWidth( editWidth->text().toDouble() ); m.setHeight( editHeight->text().toDouble() ); m.setGapV( editVGap->text().toDouble() ); m.setGapH( editHGap->text().toDouble() ); m.setNumH( editNumH->text().toInt() ); m.setNumV( editNumV->text().toInt() ); return m; } void DefinitionDialog::updateText() { Definition d( comboProducer->currentText(), comboType->currentText() ); Measurements m = d.getMeasurements(); editTGap->setText( I2S( m.gapTop() ) ); editLGap->setText( I2S( m.gapLeft() ) ); editWidth->setText( I2S( m.width() ) ); editHeight->setText( I2S( m.height() ) ); editVGap->setText( I2S( m.gapV() ) ); editHGap->setText( I2S( m.gapH() ) ); editNumH->setText( I2S( m.numH() ) ); editNumV->setText( I2S( m.numV() ) ); updatePreview(); } void DefinitionDialog::updatePreview() { Measurements m = getCurrentMeasure(); editHeight->setPaletteForegroundColor( TQt::black ); editWidth->setPaletteForegroundColor( TQt::black ); editVGap->setPaletteForegroundColor( TQt::black ); editHGap->setPaletteForegroundColor( TQt::black ); editTGap->setPaletteForegroundColor( TQt::black ); editLGap->setPaletteForegroundColor( TQt::black ); editNumH->setPaletteForegroundColor( TQt::black ); editNumV->setPaletteForegroundColor( TQt::black ); // Mark errors in Red if( m.heightMM() > PrinterSettings::getInstance()->pageHeight() ) editHeight->setPaletteForegroundColor( TQt::red ); if( m.widthMM() > PrinterSettings::getInstance()->pageWidth() ) editWidth->setPaletteForegroundColor( TQt::red ); if( m.gapVMM() < m.heightMM() ) editVGap->setPaletteForegroundColor( TQt::red ); if( m.gapHMM() < m.widthMM() ) editHGap->setPaletteForegroundColor( TQt::red ); if( m.gapTopMM() > PrinterSettings::getInstance()->pageHeight() - m.heightMM() ) editTGap->setPaletteForegroundColor( TQt::red ); if( m.gapLeftMM() > PrinterSettings::getInstance()->pageWidth() - m.widthMM() ) editLGap->setPaletteForegroundColor( TQt::red ); if( m.gapLeftMM() + m.numH() * m.gapHMM() > PrinterSettings::getInstance()->pageWidth() ) editNumH->setPaletteForegroundColor( TQt::red ); if( m.gapTopMM() + m.numV() * m.gapVMM() > PrinterSettings::getInstance()->pageHeight() ) editNumV->setPaletteForegroundColor( TQt::red ); preview->setRect( TQRect( (int)m.gapLeftMM(), (int)m.gapTopMM(), (int)m.widthMM(), (int)m.heightMM() ) ); preview->setMeasurements( m ); preview->repaint(); } void DefinitionDialog::drawGraphic() { TQWMatrix wm; wm.rotate( 90 ); TQPixmap pic( 450, 330 ); pic.fill( TQt::gray ); TQPainter p( &pic ); p.setPen( TQt::black ); p.fillRect( 60, 60, 450, 330, TQColor( 255, 254, 217 ) ); p.drawRect( 60, 60, 450, 330 ); p.setBrush( TQt::white ); p.setPen( TQt::DotLine ); p.drawRoundRect( 90, 90, 150, 90 ); p.drawRoundRect( 270, 90, 150, 90 ); p.drawRoundRect( 90, 210, 150, 90 ); p.drawRoundRect( 270, 210, 150, 90 ); // Draw width p.setPen( TQPen( TQt::red, 2 ) ); p.drawLine( 90, 150, 240, 150 ); // Draw numh p.drawLine( 90, 270, 450, 270 ); // Draw Gap Top p.setPen( TQPen( TQt::red, 2, TQt::DotLine ) ); p.drawLine( 0, 60, 90, 60 ); p.drawLine( 0, 90, 90, 90 ); // draw Gap V p.drawLine( 0, 210, 90, 210 ); // Draw height p.setPen( TQPen( TQt::green, 2 ) ); p.drawLine( 150, 90, 150, 180 ); // Draw numv p.drawLine( 330, 90, 330, 330 ); // Draw Gap Left p.setPen( TQPen( TQt::green, 2, TQt::DotLine ) ); p.drawLine( 60, 0, 60, 90 ); p.drawLine( 90, 0, 90, 90 ); // draw Gap H p.drawLine( 270, 0, 270, 90 ); // draw Texts: p.setPen( TQt::black ); p.drawText( 100, 140, i18n("Width") ); p.drawText( 160, 120, i18n("Height") ); p.drawText( 100, 260, i18n("Number of horizontal Labels") ); TQPixmap* pix = LabelUtils::drawString( i18n("Number of vertical Labels") ); p.drawPixmap( 340, 110, pix->xForm( wm ) ); delete pix; p.drawText( 5, 80, i18n("Gap Top") ); pix = LabelUtils::drawString( i18n("Gap Left") ); p.drawPixmap( 60, 5, pix->xForm( wm ) ); delete pix; p.drawText( 5, 150, i18n("Vertical Gap") ); p.drawText( 150, 50, i18n("Horizontal Gap") ); p.end(); l->setPixmap( pic ); } void DefinitionDialog::toggleExtension() { if( l->isVisible() ) { showExtension( false ); } else showExtension( true ); } #include "definitiondialog.moc"