summaryrefslogtreecommitdiffstats
path: root/filters/kformula/png/pngexportdia.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'filters/kformula/png/pngexportdia.cpp')
-rw-r--r--filters/kformula/png/pngexportdia.cpp242
1 files changed, 242 insertions, 0 deletions
diff --git a/filters/kformula/png/pngexportdia.cpp b/filters/kformula/png/pngexportdia.cpp
new file mode 100644
index 000000000..938fed782
--- /dev/null
+++ b/filters/kformula/png/pngexportdia.cpp
@@ -0,0 +1,242 @@
+/* This file is part of the KDE project
+ Copyright (C) 2002 Ulrich Kuettler <ulrich.kuettler@mailbox.tu-dresden.de>
+
+ 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 <tqcheckbox.h>
+#include <tqimage.h>
+#include <tqlabel.h>
+#include <tqlayout.h>
+#include <tqlineedit.h>
+#include <tqpaintdevice.h>
+#include <tqrect.h>
+#include <tqvbuttongroup.h>
+#include <tqwidget.h>
+
+#include <tdeapplication.h>
+#include <kdebug.h>
+#include <tdelocale.h>
+#include <tdemessagebox.h>
+
+#include <kformulacontainer.h>
+#include <kformuladocument.h>
+#include <kformulamimesource.h>
+
+#include "pngexportdia.h"
+#include <knuminput.h>
+
+PNGExportDia::PNGExportDia( const TQDomDocument &dom, const TQString &outFile, TQWidget *parent, const char *name )
+ : KDialogBase( parent, name, true, i18n("PNG Export Filter Parameters" ), Ok|Cancel ),
+ _fileOut( outFile )
+{
+ kapp->restoreOverrideCursor();
+ wrapper = new KFormula::DocumentWrapper( kapp->config(), 0 );
+ KFormula::Document* doc = new KFormula::Document;
+ wrapper->document( doc );
+ formula = doc->createFormula();
+ if ( !doc->loadXML( dom ) ) {
+ kdError() << "Failed." << endl;
+ }
+
+ setupGUI();
+
+ TQRect rect = formula->boundingRect();
+ realWidth = rect.width();
+ realHeight = rect.height();
+ widthEdit->setValue( realWidth );
+ heightEdit->setValue( realHeight );
+ percWidthEdit->setValue( 100 );
+ percHeightEdit->setValue( 100 );
+
+ connectAll();
+ connect( proportional, TQT_SIGNAL( clicked() ),
+ this, TQT_SLOT( proportionalClicked() ) );
+}
+
+PNGExportDia::~PNGExportDia()
+{
+ delete wrapper;
+}
+
+void PNGExportDia::connectAll()
+{
+ connect( widthEdit, TQT_SIGNAL( valueChanged(int) ),
+ this, TQT_SLOT( widthChanged( int ) ) );
+ connect( heightEdit, TQT_SIGNAL( valueChanged(int) ),
+ this, TQT_SLOT( heightChanged( int ) ) );
+ connect( percWidthEdit, TQT_SIGNAL( valueChanged(double) ),
+ this, TQT_SLOT( percentWidthChanged( double ) ) );
+ connect( percHeightEdit, TQT_SIGNAL( valueChanged(double) ),
+ this, TQT_SLOT( percentHeightChanged(double ) ) );
+}
+
+void PNGExportDia::disconnectAll()
+{
+ disconnect( widthEdit, TQT_SIGNAL( valueChanged(int) ),
+ this, TQT_SLOT( widthChanged( int ) ) );
+ disconnect( heightEdit, TQT_SIGNAL( valueChanged(int) ),
+ this, TQT_SLOT( heightChanged( int ) ) );
+ disconnect( percWidthEdit, TQT_SIGNAL( valueChanged(double) ),
+ this, TQT_SLOT( percentWidthChanged( double ) ) );
+ disconnect( percHeightEdit, TQT_SIGNAL( valueChanged(double) ),
+ this, TQT_SLOT( percentHeightChanged(double ) ) );
+}
+
+void PNGExportDia::widthChanged( int width )
+{
+ disconnectAll();
+ width = TQMIN( width, realWidth*10 );
+ width = TQMAX( width, realWidth/10 );
+ double percent = 100.*static_cast<double>( width )/static_cast<double>( realWidth );
+ percWidthEdit->setValue( percent );
+ if ( proportional->isChecked() ) {
+ percHeightEdit->setValue( percent );
+ int height = static_cast<int>( realHeight*percent/100. );
+ heightEdit->setValue( height );
+ }
+ connectAll();
+}
+
+void PNGExportDia::heightChanged( int height )
+{
+ disconnectAll();
+ height = TQMIN( height, realHeight*10 );
+ height = TQMAX( height, realHeight/10 );
+ double percent = 100.*static_cast<double>( height )/static_cast<double>( realHeight );
+ percHeightEdit->setValue( percent );
+ if ( proportional->isChecked() ) {
+ percWidthEdit->setValue( percent );
+ int width = static_cast<int>( realWidth*percent/100. );
+ widthEdit->setValue( width );
+ }
+ connectAll();
+}
+
+void PNGExportDia::percentWidthChanged( double percent )
+{
+ disconnectAll();
+ percent = TQMIN( percent, 1000 );
+ percent = TQMAX( percent, 10 );
+ int width = static_cast<int>( realWidth*percent/100. );
+ widthEdit->setValue( width );
+ if ( proportional->isChecked() ) {
+ int height = static_cast<int>( realHeight*percent/100. );
+ heightEdit->setValue( height );
+ percHeightEdit->setValue( percent );
+ }
+ connectAll();
+}
+
+void PNGExportDia::percentHeightChanged( double percent )
+{
+ disconnectAll();
+ percent = TQMIN( percent, 1000 );
+ percent = TQMAX( percent, 10 );
+ if ( proportional->isChecked() ) {
+ int width = static_cast<int>( realWidth*percent/100. );
+ widthEdit->setValue( width );
+ percWidthEdit->setValue( percent );
+ }
+ int height = static_cast<int>( realHeight*percent/100. );
+ heightEdit->setValue( height );
+ connectAll();
+}
+
+void PNGExportDia::proportionalClicked()
+{
+ if ( proportional->isChecked() ) {
+ disconnectAll();
+ int width = widthEdit->value( );
+ width = TQMIN( width, realWidth*10 );
+ width = TQMAX( width, realWidth/10 );
+ double percent = 100.*static_cast<double>( width )/static_cast<double>( realWidth );
+ percHeightEdit->setValue( percent );
+ int height = static_cast<int>( realHeight*percent/100. );
+ heightEdit->setValue( height );
+ connectAll();
+ }
+}
+
+void PNGExportDia::setupGUI()
+{
+ TQWidget *page = new TQWidget( this );
+ setMainWidget(page);
+
+ TQBoxLayout* mainLayout = new TQVBoxLayout( page, KDialog::marginHint(), KDialog::spacingHint() );
+
+ proportional = new TQCheckBox( page, "proportional" );
+ proportional->setText( i18n( "Keep ratio" ) );
+ proportional->setChecked( true );
+ mainLayout->addWidget( proportional );
+
+ TQLabel* height = new TQLabel( page, "Height" );
+ height->setText( i18n( "Height" ) );
+ widthEdit = new KIntNumInput( page, "widthEdit" );
+ TQLabel* width = new TQLabel( page, "Width" );
+ width->setText( i18n( "Width" ) );
+ heightEdit = new KIntNumInput( page, "heightEdit" );
+
+ TQGridLayout* layout1 = new TQGridLayout;
+ layout1->addWidget( height, 1, 0 );
+ layout1->addWidget( widthEdit, 0, 1 );
+ layout1->addWidget( width, 0, 0 );
+ layout1->addWidget( heightEdit, 1, 1 );
+
+ mainLayout->addLayout( layout1 );
+
+ TQLabel* percentHeight = new TQLabel( page, "PercentHeight" );
+ percentHeight->setText( i18n( "Height (%)" ) );
+ TQLabel* percentWidth = new TQLabel( page, "PercentWidth" );
+ percentWidth->setText( i18n( "Width (%)" ) );
+ percWidthEdit = new KDoubleNumInput( page, "percWidthEdit" );
+ percHeightEdit = new KDoubleNumInput( page, "percHeightEdit" );
+
+ TQGridLayout* layout2 = new TQGridLayout;
+ layout2->addWidget( percWidthEdit, 0, 1 );
+ layout2->addWidget( percHeightEdit, 1, 1 );
+ layout2->addWidget( percentHeight, 1, 0 );
+ layout2->addWidget( percentWidth, 0, 0 );
+
+ mainLayout->addLayout( layout2 );
+
+ /* Display the main layout */
+ mainLayout->addStretch( 5 );
+ mainLayout->activate();
+}
+
+
+void PNGExportDia::slotOk()
+{
+ hide();
+ //doc->setZoomAndResolution( 100, 600, 600 );
+ //doc->setZoomAndResolution( 1000, TQPaintDevice::x11AppDpiX(), TQPaintDevice::x11AppDpiY() );
+ //doc->newZoomAndResolution( false, false );
+ int width = widthEdit->value();
+ int height = heightEdit->value();
+// kdDebug( KFormula::DEBUGID ) << k_funcinfo
+// << "(" << width << " " << height << ")"
+// << endl;
+// width = realWidth;
+// height = realHeight;
+ TQImage image = formula->drawImage( width, height );
+ if ( !image.save( _fileOut, "PNG" ) ) {
+ KMessageBox::error( 0, i18n( "Failed to write file." ), i18n( "PNG Export Error" ) );
+ }
+ reject();
+}
+
+#include "pngexportdia.moc"