F:/KPlato/koffice/kplato/kptwbsdefinitionpanel.cc

Aller à la documentation de ce fichier.
00001 /* This file is part of the KDE project
00002    Copyright (C) 2005 Dag Andersen <danders@get2net.dk>
00003 
00004    This library is free software; you can redistribute it and/or
00005    modify it under the terms of the GNU Library General Public
00006    License as published by the Free Software Foundation;
00007    version 2 of the License.
00008 
00009    This library is distributed in the hope that it will be useful,
00010    but WITHOUT ANY WARRANTY; without even the implied warranty of
00011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012    Library General Public License for more details.
00013 
00014    You should have received a copy of the GNU Library General Public License
00015    along with this library; see the file COPYING.LIB.  If not, write to
00016    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00017  * Boston, MA 02110-1301, USA.
00018 */
00019 
00020 #include "kptwbsdefinitionpanel.h"
00021 #include "kptwbsdefinition.h"
00022 #include "kptcommand.h"
00023 #include "kptpart.h"
00024 
00025 #include <klocale.h>
00026 #include <kdebug.h>
00027 
00028 #include <QComboBox>
00029 #include <QLineEdit>
00030 #include <QCheckBox>
00031 #include <QGroupBox>
00032 #include <QPushButton>
00033 #include <QComboBox>
00034 #include <QSpinBox>
00035 #include <QTableWidget>
00036 #include <QHeaderView>
00037 #include <QStringList>
00038 
00039 namespace KPlato
00040 {
00041 
00042 ComboBoxDelegate::ComboBoxDelegate(QStringList &list, QObject *parent)
00043     : QItemDelegate(parent)
00044 {
00045     kDebug()<<k_funcinfo<<endl;
00046     setObjectName("ComboBoxDelegate");
00047     m_list = list;
00048 }
00049 
00050 QWidget *ComboBoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &/* option */, const QModelIndex &/* index */) const
00051 {
00052     kDebug()<<k_funcinfo<<endl;
00053     QComboBox *editor = new QComboBox(parent);
00054     editor->installEventFilter(const_cast<ComboBoxDelegate*>(this));
00055     return editor;
00056 }
00057 
00058 void ComboBoxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
00059 {
00060     QString value = index.model()->data(index, Qt::DisplayRole).toString();
00061     kDebug()<<k_funcinfo<<value<<": "<<m_list<<endl;
00062     QComboBox *comboBox = static_cast<QComboBox*>(editor);
00063 
00064     comboBox->insertItems(0, m_list);
00065     comboBox->setCurrentIndex(comboBox->findText(value));
00066 }
00067 
00068 void ComboBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
00069 {
00070     QComboBox *comboBox = static_cast<QComboBox*>(editor);
00071     kDebug()<<k_funcinfo<<comboBox->currentText()<<endl;
00072     model->setData(index, comboBox->currentText());
00073 }
00074 
00075 void ComboBoxDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &/* index */) const
00076 {
00077     editor->setGeometry(option.rect);
00078 }
00079 
00080 //----------------------
00081 
00082 WBSDefinitionPanel::WBSDefinitionPanel(WBSDefinition &def, QWidget *p, const char *n)
00083     : QWidget(p),
00084       selectedRow(-1),
00085       m_def(def)
00086 {
00087     setObjectName(n);
00088     setupUi(this);
00089     
00090     QStringList codeList = def.codeList();
00091     kDebug()<<k_funcinfo<<codeList<<endl;
00092     defaultSeparator->setText(def.defaultSeparator());
00093     defaultCode->addItems(codeList);
00094     defaultCode->setCurrentIndex(def.defaultCodeIndex());
00095     defaultCode->setFocus();
00096     levelsTable->setItemDelegateForColumn(0, new ComboBoxDelegate(codeList, this));
00097     levelsGroup->setChecked(def.isLevelsDefEnabled());
00098     int i = 0;
00099     const QMap<int, WBSDefinition::CodeDef> &lev = def.levelsDef();
00100     levelsTable->setRowCount(lev.count());
00101     QStringList sl;
00102     kDebug()<<"Map size="<<lev.count()<<endl;
00103     QMap<int, WBSDefinition::CodeDef>::const_iterator it;
00104     for (it = lev.begin(); it != lev.end(); ++it) {
00105         sl << QString("%1").arg(it.key());
00106         QTableWidgetItem *item = new QTableWidgetItem();
00107         item->setData(Qt::DisplayRole, it.value().code);
00108         levelsTable->setItem(i, 0, item);
00109         item = new QTableWidgetItem();
00110         item->setText(it.value().separator);
00111         levelsTable->setItem(i, 1, item);
00112         i++;
00113     }
00114     levelsTable->setVerticalHeaderLabels(sl);
00115     //levelsTable->setColumnStretchable(0, true);
00116     slotLevelChanged(level->value());
00117     
00118     connect(defaultCode, SIGNAL(activated(int)), SLOT(slotChanged()));
00119     connect(defaultSeparator, SIGNAL(textChanged(const QString&)), SLOT(slotChanged()));
00120     connect(levelsGroup, SIGNAL(toggled(bool)), SLOT(slotLevelsGroupToggled(bool)));
00121     connect(levelsTable, SIGNAL(cellChanged(int, int)), SLOT(slotChanged()));
00122     connect(levelsTable, SIGNAL(itemSelectionChanged()), SLOT(slotSelectionChanged()));
00123     connect(level, SIGNAL(valueChanged(int)), SLOT(slotLevelChanged(int)));
00124     connect(removeBtn, SIGNAL(clicked(bool)), SLOT(slotRemoveBtnClicked()));
00125     connect(addBtn, SIGNAL(clicked(bool)), SLOT(slotAddBtnClicked()));
00126 
00127     removeBtn->setEnabled(false);
00128 }
00129 
00130 void WBSDefinitionPanel::setStartValues(Part */*part*/) {
00131 }
00132 
00133 KMacroCommand *WBSDefinitionPanel::buildCommand(Part */*part*/) {
00134     KMacroCommand *cmd = new KMacroCommand(i18n("Modify WBS Definition"));
00135 
00136     return cmd;
00137 }
00138 
00139 bool WBSDefinitionPanel::ok() {
00140     kDebug()<<k_funcinfo<<endl;
00141     m_def.setDefaultCode(defaultCode->currentIndex());
00142     m_def.setDefaultSeparator(defaultSeparator->text());
00143     
00144     m_def.setLevelsDefEnabled(levelsGroup->isChecked());
00145 
00146     m_def.clearLevelsDef();
00147     for (int i = 0; i < levelsTable->rowCount(); ++i) {
00148         m_def.setLevelsDef(levelsTable->verticalHeaderItem(i)->text().toInt(), levelsTable->item(i, 0)->text(), levelsTable->item(i, 1)->text());
00149     }
00150     return true;
00151 }
00152 
00153 void WBSDefinitionPanel::slotChanged() {
00154     emit changed(true);
00155 }
00156 
00157 void WBSDefinitionPanel::slotSelectionChanged() {
00158     QString s;
00159     selectedRow = -1;
00160     QList<QTableWidgetItem *> items = levelsTable->selectedItems();
00161     if (items.count() == 2 && items[0]->row() == items[1]->row()) {
00162         selectedRow = items[0]->row();
00163         s = QString("Row[%1]=selected ").arg(selectedRow);
00164     } else {
00165         s = "None selected";
00166     }
00167     removeBtn->setEnabled(selectedRow != -1);
00168     kDebug()<<k_funcinfo<<s<<endl;
00169 }
00170 
00171 void WBSDefinitionPanel::slotRemoveBtnClicked() {
00172     kDebug()<<k_funcinfo<<selectedRow<<endl;
00173     if (selectedRow == -1) {
00174         return;
00175     }
00176     levelsTable->removeRow(selectedRow);
00177     removeBtn->setEnabled(false);
00178     slotLevelChanged(level->value());
00179 }
00180 
00181 void WBSDefinitionPanel::slotAddBtnClicked() {
00182     kDebug()<<k_funcinfo<<endl;
00183     int i=levelsTable->rowCount()-1;
00184     for (; i >= 0; --i) {
00185         kDebug()<<k_funcinfo<<"Checking row["<<i<<"]="<<levelsTable->verticalHeaderItem(i)->text()<<" with "<<level->value()<<endl;
00186         if (level->value() > levelsTable->verticalHeaderItem(i)->text().toInt()) {
00187             break;
00188         }
00189     }
00190     i++;
00191     levelsTable->insertRow(i);
00192     levelsTable->setVerticalHeaderItem(i, new QTableWidgetItem(QString("%1").arg(level->value())));
00193     QTableWidgetItem *item = new QTableWidgetItem();
00194     item->setData(Qt::DisplayRole, (m_def.codeList())[m_def.defaultCodeIndex()]);
00195     levelsTable->setItem(i, 0, item);
00196     item = new QTableWidgetItem();
00197     item->setText(m_def.defaultSeparator());
00198     levelsTable->setItem(i, 1, item);
00199     
00200     addBtn->setEnabled(false);
00201     slotChanged();
00202     
00203     kDebug()<<k_funcinfo<<"Added row="<<i<<" level="<<level->value()<<endl;
00204 }
00205 
00206 void WBSDefinitionPanel::slotLevelChanged(int value) {
00207     for (int i=0; i < levelsTable->rowCount(); ++i) {
00208         if (value == levelsTable->verticalHeaderItem(i)->text().toInt()) {
00209             addBtn->setEnabled(false);
00210             return;
00211         }
00212     }
00213     addBtn->setEnabled(levelsGroup->isChecked());
00214     slotChanged();
00215 }
00216 void WBSDefinitionPanel::slotLevelsGroupToggled(bool /*on*/) {
00217     kDebug()<<k_funcinfo<<endl;
00218     slotLevelChanged(level->value());
00219 }
00220 
00221 
00222 }  //KPlato namespace
00223 
00224 #include "kptwbsdefinitionpanel.moc"

Généré le Wed Nov 22 23:40:58 2006 pour KPlato par  doxygen 1.5.1-p1