00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include <QtDebug>
00027
00028 #include "KDChartDatasetSelector.h"
00029
00030 #include "ui_KDChartDatasetSelector.h"
00031
00032 #include <KDABLibFakes>
00033
00034 using namespace KDChart;
00035
00036 DatasetSelectorWidget::DatasetSelectorWidget ( QWidget* parent )
00037 : QFrame ( parent )
00038 , mUi ( new Ui::DatasetSelector () )
00039 , mSourceRowCount ( 0 )
00040 , mSourceColumnCount ( 0 )
00041 {
00042 qWarning("For DatasetSelectorWidget to become useful, it has to be connected to the proxy model it configures!");
00043
00044 mUi->setupUi ( this );
00045 setMinimumSize ( minimumSizeHint() );
00046 }
00047
00048 void DatasetSelectorWidget::on_sbStartColumn_valueChanged ( const int )
00049 {
00050 calculateMapping();
00051 }
00052
00053 void DatasetSelectorWidget::on_sbStartRow_valueChanged( const int )
00054 {
00055 calculateMapping();
00056 }
00057
00058 void DatasetSelectorWidget::on_sbColumnCount_valueChanged ( int )
00059 {
00060 calculateMapping();
00061 }
00062
00063 void DatasetSelectorWidget::on_sbRowCount_valueChanged ( int )
00064 {
00065 calculateMapping();
00066 }
00067
00068 void DatasetSelectorWidget::on_cbReverseRows_stateChanged ( int )
00069 {
00070 calculateMapping();
00071 }
00072
00073 void DatasetSelectorWidget::on_cbReverseColumns_stateChanged ( int )
00074 {
00075 calculateMapping();
00076 }
00077
00078 void DatasetSelectorWidget::on_groupBox_toggled( bool state )
00079 {
00080 if ( state )
00081 {
00082 calculateMapping();
00083 } else {
00084 emit mappingDisabled();
00085 }
00086 }
00087
00088
00089 void DatasetSelectorWidget::setSourceRowCount ( const int& rowCount )
00090 {
00091 if ( rowCount != mSourceRowCount )
00092 {
00093 mSourceRowCount = rowCount;
00094 resetDisplayValues();
00095 }
00096 }
00097
00098 void DatasetSelectorWidget::setSourceColumnCount ( const int& columnCount )
00099 {
00100 if ( columnCount != mSourceColumnCount )
00101 {
00102 mSourceColumnCount = columnCount;
00103 resetDisplayValues();
00104 }
00105 }
00106
00107 void DatasetSelectorWidget::resetDisplayValues()
00108 {
00109 mUi->sbStartRow->setValue( 0 );
00110 mUi->sbStartRow->setMinimum ( 0 );
00111 mUi->sbStartRow->setMaximum ( qMax ( mSourceRowCount - 1, 0 ) );
00112 mUi->sbStartColumn->setValue( 0 );
00113 mUi->sbStartColumn->setMinimum ( 0 );
00114 mUi->sbStartColumn->setMaximum ( qMax ( mSourceColumnCount - 1, 0 ) );
00115 mUi->sbRowCount->setMinimum ( 1 );
00116 mUi->sbRowCount->setMaximum ( mSourceRowCount );
00117 mUi->sbRowCount->setValue( mSourceRowCount );
00118 mUi->sbColumnCount->setMinimum ( 1 );
00119 mUi->sbColumnCount->setMaximum ( mSourceColumnCount );
00120 mUi->sbColumnCount->setValue( mSourceColumnCount );
00121 mUi->groupBox->setChecked ( false );
00122 emit mappingDisabled();
00123 }
00124
00125 void DatasetSelectorWidget::calculateMapping()
00126 {
00127 if ( mSourceColumnCount < 2 && mSourceRowCount < 2 )
00128 {
00129 mUi->groupBox->setEnabled ( false );
00130 emit mappingDisabled();
00131 } else {
00132 mUi->groupBox->setEnabled ( true );
00133
00134 if ( ! mUi->groupBox->isChecked() )
00135 {
00136 emit mappingDisabled();
00137 return;
00138 }
00139
00140
00141 int startRow = mUi->sbStartRow->value();
00142 int startColumn = mUi->sbStartColumn->value();
00143 int rowCount = mUi->sbRowCount->value();
00144 int columnCount = mUi->sbColumnCount->value();
00145 bool reverseColumns = mUi->cbReverseColumns->checkState() == Qt::Checked;
00146 bool reverseRows = mUi->cbReverseRows->checkState() == Qt::Checked;
00147
00148
00149 startRow = qMin ( startRow, mSourceRowCount - 2 );
00150 startRow = qMax ( 0, startRow );
00151 startColumn = qMin ( startColumn, mSourceColumnCount - 2 );
00152 startColumn = qMax ( 0, startColumn );
00153
00154 rowCount = qMin ( rowCount, mSourceRowCount - startRow );
00155 rowCount = qMax ( 1, rowCount );
00156 columnCount = qMin ( columnCount, mSourceColumnCount - startColumn );
00157 columnCount = qMax ( 1, columnCount );
00158
00159 DatasetDescriptionVector rowConfig ( rowCount );
00160 Q_ASSERT ( rowConfig.size() > 0 );
00161 DatasetDescriptionVector columnConfig ( columnCount );
00162 Q_ASSERT ( columnConfig.size() > 0 );
00163
00164
00165 for ( int row = 0; row < rowCount; ++row )
00166 {
00167 if ( reverseRows )
00168 {
00169 rowConfig[row] = startRow + rowCount - row - 1;
00170 } else {
00171 rowConfig[row] = startRow + row;
00172 }
00173 }
00174
00175 for ( int column = 0; column < columnCount; ++ column )
00176 {
00177 if ( reverseColumns )
00178 {
00179 columnConfig[column] = startColumn + columnCount - column -1;
00180 } else {
00181 columnConfig[column] = startColumn + column;
00182 }
00183 }
00184
00185
00186 emit configureDatasetProxyModel ( rowConfig, columnConfig );
00187 }
00188 }
00189