KD Chart 2 [rev.2.4]
|
00001 /**************************************************************************** 00002 ** Copyright (C) 2001-2012 Klaralvdalens Datakonsult AB. All rights reserved. 00003 ** 00004 ** This file is part of the KD Chart library. 00005 ** 00006 ** Licensees holding valid commercial KD Chart licenses may use this file in 00007 ** accordance with the KD Chart Commercial License Agreement provided with 00008 ** the Software. 00009 ** 00010 ** 00011 ** This file may be distributed and/or modified under the terms of the 00012 ** GNU General Public License version 2 and version 3 as published by the 00013 ** Free Software Foundation and appearing in the file LICENSE.GPL.txt included. 00014 ** 00015 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 00016 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 00017 ** 00018 ** Contact info@kdab.com if any conditions of this licensing are not 00019 ** clear to you. 00020 ** 00021 **********************************************************************/ 00022 00023 #include <QtDebug> 00024 00025 #include "KDChartDatasetSelector.h" 00026 00027 #include "ui_KDChartDatasetSelector.h" 00028 00029 #include <KDABLibFakes> 00030 00031 using namespace KDChart; 00032 00033 DatasetSelectorWidget::DatasetSelectorWidget ( QWidget* parent ) 00034 : QFrame ( parent ) 00035 , mUi ( new Ui::DatasetSelector () ) 00036 , mSourceRowCount ( 0 ) 00037 , mSourceColumnCount ( 0 ) 00038 { 00039 qWarning("For DatasetSelectorWidget to become useful, it has to be connected to the proxy model it configures!"); 00040 00041 mUi->setupUi ( this ); 00042 setMinimumSize ( minimumSizeHint() ); 00043 } 00044 00045 void DatasetSelectorWidget::on_sbStartColumn_valueChanged ( int ) 00046 { 00047 calculateMapping(); 00048 } 00049 00050 void DatasetSelectorWidget::on_sbStartRow_valueChanged( int ) 00051 { 00052 calculateMapping(); 00053 } 00054 00055 void DatasetSelectorWidget::on_sbColumnCount_valueChanged ( int ) 00056 { 00057 calculateMapping(); 00058 } 00059 00060 void DatasetSelectorWidget::on_sbRowCount_valueChanged ( int ) 00061 { 00062 calculateMapping(); 00063 } 00064 00065 void DatasetSelectorWidget::on_cbReverseRows_stateChanged ( int ) 00066 { 00067 calculateMapping(); 00068 } 00069 00070 void DatasetSelectorWidget::on_cbReverseColumns_stateChanged ( int ) 00071 { 00072 calculateMapping(); 00073 } 00074 00075 void DatasetSelectorWidget::on_groupBox_toggled( bool state ) 00076 { 00077 if ( state ) 00078 { 00079 calculateMapping(); 00080 } else { 00081 emit mappingDisabled(); 00082 } 00083 } 00084 00085 00086 void DatasetSelectorWidget::setSourceRowCount ( const int& rowCount ) 00087 { 00088 if ( rowCount != mSourceRowCount ) 00089 { 00090 mSourceRowCount = rowCount; 00091 resetDisplayValues(); 00092 } 00093 } 00094 00095 void DatasetSelectorWidget::setSourceColumnCount ( const int& columnCount ) 00096 { 00097 if ( columnCount != mSourceColumnCount ) 00098 { 00099 mSourceColumnCount = columnCount; 00100 resetDisplayValues(); 00101 } 00102 } 00103 00104 void DatasetSelectorWidget::resetDisplayValues() 00105 { 00106 mUi->sbStartRow->setValue( 0 ); 00107 mUi->sbStartRow->setMinimum ( 0 ); 00108 mUi->sbStartRow->setMaximum ( qMax ( mSourceRowCount - 1, 0 ) ); 00109 mUi->sbStartColumn->setValue( 0 ); 00110 mUi->sbStartColumn->setMinimum ( 0 ); 00111 mUi->sbStartColumn->setMaximum ( qMax ( mSourceColumnCount - 1, 0 ) ); 00112 mUi->sbRowCount->setMinimum ( 1 ); 00113 mUi->sbRowCount->setMaximum ( mSourceRowCount ); 00114 mUi->sbRowCount->setValue( mSourceRowCount ); 00115 mUi->sbColumnCount->setMinimum ( 1 ); 00116 mUi->sbColumnCount->setMaximum ( mSourceColumnCount ); 00117 mUi->sbColumnCount->setValue( mSourceColumnCount ); 00118 mUi->groupBox->setChecked ( false ); 00119 emit mappingDisabled(); 00120 } 00121 00122 void DatasetSelectorWidget::calculateMapping() 00123 { 00124 if ( mSourceColumnCount < 2 && mSourceRowCount < 2 ) 00125 { 00126 mUi->groupBox->setEnabled ( false ); 00127 emit mappingDisabled(); 00128 } else { 00129 mUi->groupBox->setEnabled ( true ); 00130 00131 if ( ! mUi->groupBox->isChecked() ) 00132 { 00133 emit mappingDisabled(); 00134 return; 00135 } 00136 00137 // retrieve values: 00138 int startRow = mUi->sbStartRow->value(); 00139 int startColumn = mUi->sbStartColumn->value(); 00140 int rowCount = mUi->sbRowCount->value(); 00141 int columnCount = mUi->sbColumnCount->value(); 00142 bool reverseColumns = mUi->cbReverseColumns->checkState() == Qt::Checked; 00143 bool reverseRows = mUi->cbReverseRows->checkState() == Qt::Checked; 00144 00145 // verify values: 00146 startRow = qMin ( startRow, mSourceRowCount - 2 ); 00147 startRow = qMax ( 0, startRow ); 00148 startColumn = qMin ( startColumn, mSourceColumnCount - 2 ); 00149 startColumn = qMax ( 0, startColumn ); 00150 00151 rowCount = qMin ( rowCount, mSourceRowCount - startRow ); 00152 rowCount = qMax ( 1, rowCount ); 00153 columnCount = qMin ( columnCount, mSourceColumnCount - startColumn ); 00154 columnCount = qMax ( 1, columnCount ); 00155 00156 DatasetDescriptionVector rowConfig ( rowCount ); 00157 Q_ASSERT ( rowConfig.size() > 0 ); 00158 DatasetDescriptionVector columnConfig ( columnCount ); 00159 Q_ASSERT ( columnConfig.size() > 0 ); 00160 00161 // fill the dataset description vectors: 00162 for ( int row = 0; row < rowCount; ++row ) 00163 { 00164 if ( reverseRows ) 00165 { 00166 rowConfig[row] = startRow + rowCount - row - 1; 00167 } else { 00168 rowConfig[row] = startRow + row; 00169 } 00170 } 00171 00172 for ( int column = 0; column < columnCount; ++ column ) 00173 { 00174 if ( reverseColumns ) 00175 { 00176 columnConfig[column] = startColumn + columnCount - column -1; 00177 } else { 00178 columnConfig[column] = startColumn + column; 00179 } 00180 } 00181 00182 // and tell the world: 00183 emit configureDatasetProxyModel ( rowConfig, columnConfig ); 00184 } 00185 } 00186