diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
commit | 8362bf63dea22bbf6736609b0f49c152f975eb63 (patch) | |
tree | 0eea3928e39e50fae91d4e68b21b1e6cbae25604 /kspread/dialogs/kspread_dlg_series.cc | |
download | koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.tar.gz koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.zip |
Added old abandoned KDE3 version of koffice
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kspread/dialogs/kspread_dlg_series.cc')
-rw-r--r-- | kspread/dialogs/kspread_dlg_series.cc | 213 |
1 files changed, 213 insertions, 0 deletions
diff --git a/kspread/dialogs/kspread_dlg_series.cc b/kspread/dialogs/kspread_dlg_series.cc new file mode 100644 index 00000000..666beee6 --- /dev/null +++ b/kspread/dialogs/kspread_dlg_series.cc @@ -0,0 +1,213 @@ +/* This file is part of the KDE project + Copyright (C) 2002-2004 Ariya Hidayat <[email protected]> + (C) 2002-2003 Norbert Andres <[email protected]> + (C) 2002 John Dailey <[email protected]> + (C) 1999-2002 Laurent Montel <[email protected]> + (C) 2001-2002 Philipp Mueller <[email protected]> + (C) 2000-2001 Werner Trobin <[email protected]> + (C) 1998-2000 Torben Weis <[email protected]> + + 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 "kspread_dlg_series.h" +#include "kspread_doc.h" +#include "kspread_editors.h" +#include "kspread_sheet.h" +#include "kspread_view.h" + +#include <qlayout.h> +#include <klocale.h> +#include <qlabel.h> + +#include <qbuttongroup.h> +#include <qgroupbox.h> +#include <kmessagebox.h> +#include <knumvalidator.h> + +#include <qradiobutton.h> +#include <qcheckbox.h> +#include <qlineedit.h> +#include <qwhatsthis.h> +#include <knuminput.h> + +using namespace KSpread; + +SeriesDlg::SeriesDlg( View* parent, const char* name,const QPoint &_marker) + : KDialogBase( parent, name,TRUE,i18n("Series"),Ok|Cancel ) +{ + m_pView = parent; + marker=_marker; + QWidget *page = new QWidget( this ); + setMainWidget(page); + + QBoxLayout *grid1 = new QHBoxLayout(page); + grid1->setSpacing( spacingHint() ); + + QButtonGroup* gb1 = new QButtonGroup( 2, Qt::Vertical, + i18n("Insert Values"), page ); + column = new QRadioButton( i18n("Vertical"), gb1 ); + QWhatsThis::add(column, i18n("Insert the series vertically, one below the other") ); + row = new QRadioButton( i18n("Horizontal"), gb1 ); + QWhatsThis::add(row, i18n("Insert the series horizontally, from left to right") ); + + column->setChecked(true); + + QButtonGroup* gb2 = new QButtonGroup( 2, Qt::Vertical, + i18n("Type"), page ); + linear = new QRadioButton( i18n("Linear (2,4,6,...)"), gb2 ); + QWhatsThis::add(linear, i18n("Generate a series from 'start' to 'end' and for each step add " + "the value provided in step. This creates a series where each value " + "is 'step' larger than the value before it.") ); + geometric = new QRadioButton( i18n("Geometric (2,4,8,...)"), gb2 ); + QWhatsThis::add(geometric, i18n("Generate a series from 'start' to 'end' and for each step multiply " + "the value with the value provided in step. Using a step of 5 produces a list like: " + "5, 25, 125, 625 since 5 multiplied by 5 (step) equals 25, and that multiplied by 5 equals 125, " + "which multiplied by the same step-value of 5 equals 625.") ); + + linear->setChecked(true); + + QGroupBox* gb = new QGroupBox( 1, Qt::Vertical, i18n("Parameters"), page ); + QWidget *params = new QWidget( gb ); + QGridLayout *params_layout = new QGridLayout( params, 3, 2 ); + params_layout->setSpacing( spacingHint() ); + params_layout->setAutoAdd( true ); + + new QLabel( i18n( "Start value:" ), params ); + start=new KDoubleNumInput(-999999.999, 999999.99, 0.0, 1.0, 3, params); + + new QLabel( i18n( "Stop value:" ), params ); + end=new KDoubleNumInput(-999999.999, 999999.99, 0.0, 1.0, 3, params); + + new QLabel( i18n( "Step value:" ), params ); + step=new KDoubleNumInput(-999999.999, 999999.99, 0.0, 1.0, 3, params); + + grid1->addWidget(gb); + + grid1->addWidget(gb1); + grid1->addWidget(gb2); + + start->setFocus(); + + connect( this, SIGNAL( okClicked() ), this, SLOT( slotOk() ) ); +} + + +void SeriesDlg::slotOk() +{ + + Series mode=Column; //same as Vertical + Series type=Linear; // same as Horizontal + QString tmp; + double dstep, dend, dstart; + Sheet * m_pSheet; + m_pSheet = m_pView->activeSheet(); + + if(column->isChecked()) + mode = Column; + else if(row->isChecked()) + mode = Row; + + if (linear->isChecked()) + type = Linear; + else if (geometric->isChecked()) + type = Geometric; + + dstart = start->value(); + dend= end->value(); + dstep = step->value(); + if ( type == Geometric ) + { + if ( dstart < 0 || dend < 0 ) + { + KMessageBox::error( this, i18n("End and start value must be positive.") ); + return; + } + if ( dstart > dend && dstep >= 1) + { + KMessageBox::error( this, i18n("End value must be greater than the start value or the step must be less than '1'.") ); + return; + } + if ( dstart == 0 || dend == 0 || dstep == 0) + { + KMessageBox::error( this, i18n("None of the Start, Stop or Step values may be equal to zero.") ); + return; + } + if ( dstep == 1) + { + KMessageBox::error( this, i18n("Step value must be different from 1") ); + return; + } + } + + if (dstep >= 0) + { + if (linear->isChecked() && dstep == 0) + { + KMessageBox::error( this, i18n("The step value must be greater than zero; " + "otherwise, the linear series is infinite.") ); + step->setFocus(); + return; + } + /* else if (geometric->isChecked() && dstep <= 1) + { + KMessageBox::error( this, i18n("The step value must be greater than one; " + "otherwise, the geometric series is infinite.") ); + step->setFocus(); + return; + } + */ + else if ( type == Linear && dend < dstart ) + { + KMessageBox::error( this, + i18n("If the start value is greater than the end value the step must be less than zero.") ); + return; + } + } + else if (type != Linear) + { + KMessageBox::error( this, i18n("Step is negative.") ); + return; + } + else + { + if (dstart <= dend) + { + KMessageBox::error( this, + i18n("If the step is negative, the start value must be greater then the end value.") ); + return; + } + } + + // double val_end = QMAX(dend, dstart); + // double val_start = QMIN(dend, dstart); + m_pView->doc()->emitBeginOperation( false ); + + m_pSheet->setSeries( marker, dstart, dend, dstep, mode, type ); + + Cell * cell = m_pSheet->cellAt( marker.x(), marker.y() ); + if ( cell->text() != 0L ) + m_pView->editWidget()->setText( cell->text() ); + else + m_pView->editWidget()->setText( "" ); + + m_pView->slotUpdateView( m_pView->activeSheet() ); + accept(); +} + + +#include "kspread_dlg_series.moc" |