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

Aller à la documentation de ce fichier.
00001 /* This file is part of the KDE project
00002    Copyright (C) 2003 - 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 "kptrequestresourcespanel.h"
00021 #include "kpttask.h"
00022 #include "kptproject.h"
00023 #include "kptresource.h"
00024 #include "kptcalendar.h"
00025 
00026 #include <kdebug.h>
00027 #include <kmessagebox.h>
00028 #include <klocale.h>
00029 #include <kptcommand.h>
00030 
00031 #include <QPushButton>
00032 #include <QLineEdit>
00033 #include <QString>
00034 #include <QSpinBox>
00035 #include <qvalidator.h>
00036 #include <QComboBox>
00037 #include <QDateTime>
00038 //#include <QTableWidgetItem>
00039 #include <qtablewidget.h>
00040 
00041 #include <q3datetimeedit.h>
00042 
00043 namespace KPlato
00044 {
00045 
00046 ResourceTableItem::ResourceTableItem(Resource *resource, ResourceRequest *request, bool check) {
00047     m_resource = resource;
00048     m_request = request;
00049     m_checked = check;
00050     m_origChecked = check;
00051     m_checkitem = 0;
00052     m_units = 100;
00053     m_origUnits = 100;
00054     //kDebug()<<k_funcinfo<<"Added: '"<<resource->name()<<"' checked="<<m_checked<<endl;
00055 }
00056 
00057 ResourceTableItem::~ResourceTableItem() {
00058     //kDebug()<<k_funcinfo<<m_resource->name()<<endl;
00059 }
00060 
00061 void ResourceTableItem::update() {
00062     if (m_checkitem)
00063         m_checked = m_checkitem->checkState() == Qt::Checked;
00064     //kDebug()<<k_funcinfo<<m_resource->name()<<" checked="<<m_checked<<endl;
00065 }
00066 
00067 void ResourceTableItem::insert(QTableWidget *table, int row) {
00068     //kDebug()<<k_funcinfo<<endl;
00069     m_checkitem = new QTableWidgetItem(m_resource->name());
00070     m_checkitem->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEditable | Qt::ItemIsEnabled);
00071     m_checkitem->setCheckState(m_checked ? Qt::Checked : Qt::Unchecked);
00072     table->setItem(row, 0, m_checkitem);
00073 
00074     //kDebug()<<k_funcinfo<<"Added: '"<<m_resource->name()<<"' checked="<<m_checked<<endl;
00075 }
00076 
00077 GroupLVItem::GroupLVItem(QTreeWidget *parent, ResourceGroup *group, Task &task)
00078     : QTreeWidgetItem(parent),
00079       m_group(group),
00080       m_units(0)
00081 {
00082     setText(0, group->name());
00083     setText(1, QString("%1").arg(group->units()));
00084 
00085     m_request = task.resourceGroupRequest(group);
00086     if (m_request) {
00087         m_units = m_request->units();
00088     }
00089     foreach (Resource *r, group->resources()) {
00090         //kDebug()<<k_funcinfo<<"resource="<<r->name()<<endl;
00091         ResourceRequest *req=0;
00092         if (m_request) {
00093             req = m_request->find(r);
00094         }
00095         m_resources.append(new ResourceTableItem(r, req, (bool)req));
00096     }
00097 }
00098 
00099 GroupLVItem::~GroupLVItem() {
00100     //kDebug()<<k_funcinfo<<m_group->name()<<endl;
00101 
00102     while (!m_resources.isEmpty())
00103         delete m_resources.takeFirst();
00104 }
00105 
00106 void GroupLVItem::update() {
00107     foreach (ResourceTableItem *i, m_resources) {
00108         i->update();
00109     }
00110 }
00111 
00112 void GroupLVItem::insert(QTableWidget *table) {
00113 
00114     table->clear();
00115     table->setColumnCount(1);
00116     if (m_group->numResources() == 0) {
00117         table->setRowCount(1);
00118         table->setItem(0, 0, new QTableWidgetItem(i18n("None")));
00119     } else {
00120         table->setRowCount(m_group->numResources());
00121         int i = 0;
00122         foreach (ResourceTableItem *r, m_resources) {
00123             r->insert(table, i++);
00124         }
00125     }
00126 }
00127 
00128 int GroupLVItem::numRequests() {
00129     //kDebug()<<k_funcinfo<<endl;
00130     int value = m_units;
00131     foreach (ResourceTableItem *r, m_resources) {
00132         value += r->numRequests();
00133     }
00134     return value;
00135 }
00136 
00137 bool GroupLVItem::isNull() const {
00138     //kDebug()<<k_funcinfo<<endl;
00139     foreach (ResourceTableItem *r, m_resources) {
00140         if (r->isChecked())
00141             return false;
00142     }
00143     if (m_units > 0)
00144         return false;
00145     return true;
00146 }
00147 
00148 RequestResourcesPanel::RequestResourcesPanel(QWidget *parent, Task &task, bool baseline)
00149     : TaskResourcesPanelBase(parent),
00150       m_task(task),
00151       m_worktime(0),
00152       selectedGroup(0),
00153       m_blockChanged(false) {
00154 
00155     Project *p = dynamic_cast<Project*>(task.projectNode());
00156     if (p) {
00157         m_worktime = p->standardWorktime();
00158         foreach (ResourceGroup *grp, p->resourceGroups()) {
00159             GroupLVItem *grpitem = new GroupLVItem(groupList, grp, task);
00160             groupList-> addTopLevelItem(grpitem);
00161             //kDebug()<<k_funcinfo<<" Added group: "<<grp->name()<<endl;
00162         }
00163     }
00164     QTreeWidgetItem *item = groupList->topLevelItem(0);
00165     if (item) {
00166         item->setSelected(true);
00167         groupChanged(item);
00168     }
00169 
00170     //resourceTable->setReadOnly(baseline);
00171 
00172     connect(groupList, SIGNAL(itemSelectionChanged()),  SLOT(groupChanged()));
00173     connect(resourceTable, SIGNAL(cellChanged(int, int)), SLOT(resourceChanged(int, int)));
00174 //    connect(numUnits, SIGNAL(valueChanged(int)), SLOT(unitsChanged(int)));
00175 
00176 }
00177 
00178 void RequestResourcesPanel::groupChanged() {
00179     //kDebug()<<k_funcinfo<<endl;
00180     QTreeWidgetItem *item = 0;
00181     QList<QTreeWidgetItem*> lst = groupList->selectedItems();
00182     if (lst.count() > 0)
00183         item = lst.first();
00184     groupChanged(item);
00185 }
00186 
00187 void RequestResourcesPanel::groupChanged(QTreeWidgetItem *item) {
00188     //kDebug()<<k_funcinfo<<endl;
00189     GroupLVItem *grp = dynamic_cast<GroupLVItem *>(item);
00190     if (grp == 0)
00191         return;
00192 
00193     if (selectedGroup) {
00194         selectedGroup->update();
00195     }
00196     selectedGroup = grp;
00197 
00198 /*    m_blockChanged = true;
00199     numUnits->setMaxValue(grp->m_group->units());
00200     numUnits->setValue(grp->m_units);
00201     m_blockChanged = false;*/
00202     grp->insert(resourceTable);
00203 }
00204 
00205 void RequestResourcesPanel::resourceChanged(int /*r*/, int /*c*/) {
00206     //kDebug()<<k_funcinfo<<"("<<r<<","<<c<<")"<<endl;
00207     sendChanged();
00208 }
00209 
00210 void RequestResourcesPanel::unitsChanged(int units) {
00211     //kDebug()<<k_funcinfo<<endl;
00212     if (selectedGroup) {
00213         selectedGroup->m_units = units;
00214         sendChanged();
00215     }
00216 }
00217 
00218 KCommand *RequestResourcesPanel::buildCommand(Part *part) {
00219     //kDebug()<<k_funcinfo<<endl;
00220     KMacroCommand *cmd = 0;
00221     if (selectedGroup) {
00222         selectedGroup->update();
00223     }
00224     QTreeWidgetItem *item=0;
00225     for (int i = 0; (item = groupList->topLevelItem(i)) != 0; ++i) {
00226         GroupLVItem *grp = static_cast<GroupLVItem*>(item);
00227         foreach (ResourceTableItem *r, grp->resources()) {
00228             if (r->isChecked() != r->isOrigChecked()) {
00229                 if (!cmd) cmd = new KMacroCommand("");
00230                 if (r->isChecked()) {
00231                     if (!grp->m_request) {
00232                         grp->m_request = new ResourceGroupRequest(grp->m_group, grp->m_units);
00233                         cmd->addCommand(new AddResourceGroupRequestCmd(part, m_task, grp->m_request));
00234                     }
00235                     cmd->addCommand(new AddResourceRequestCmd(part, grp->m_request, new ResourceRequest(r->resource(), r->units())));
00236 
00237                     continue;
00238                 }
00239                 if (grp->m_request && r->request()) {
00240                     cmd->addCommand(new RemoveResourceRequestCmd(part, grp->m_request, r->request()));
00241                     if (grp->isNull()) {
00242                         cmd->addCommand(new RemoveResourceGroupRequestCmd(part, m_task, grp->m_request));
00243                     }
00244                 } else {
00245                     kError()<<k_funcinfo<<"Remove failed"<<endl;
00246                 }
00247                 continue;
00248             }
00249             if (!r->isChecked()) {
00250                 continue;
00251             }
00252         }
00253     }
00254     return cmd;
00255 }
00256 
00257 bool RequestResourcesPanel::ok() {
00258     if (selectedGroup)
00259         selectedGroup->update();
00260     return true;
00261 }
00262 
00263 void RequestResourcesPanel::sendChanged() {
00264     if (!m_blockChanged) emit changed();
00265 }
00266 
00267 }  //KPlato namespace
00268 
00269 #include "kptrequestresourcespanel.moc"

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