kplato

kptresourcespanel.cc

00001 /* This file is part of the KDE project
00002    Copyright (C) 2003 Thomas Zander <zander@kde.org>
00003    Copyright (C) 2004, 2005 Dag Andersen <danders@get2net.dk>
00004 
00005    This library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Library General Public
00007    License as published by the Free Software Foundation; either
00008    version 2 of the License, or (at your option) any later version.
00009 
00010    This library is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Library General Public License for more details.
00014 
00015    You should have received a copy of the GNU Library General Public License
00016    along with this library; see the file COPYING.LIB.  If not, write to
00017    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00018  * Boston, MA 02110-1301, USA.
00019 */
00020 
00021 #include "kptresourcespanel.h"
00022 #include "kptproject.h"
00023 #include "kptresourcedialog.h"
00024 #include "kptcommand.h"
00025 
00026 #include <kdebug.h>
00027 #include <klistview.h>
00028 #include <kmessagebox.h>
00029 #include <klocale.h>
00030 #include <kabc/addressee.h>
00031 #include <kabc/addresseedialog.h>
00032 
00033 #include <qgroupbox.h>
00034 #include <qheader.h>
00035 #include <qlistbox.h>
00036 #include <qlineedit.h>
00037 #include <qlistview.h>
00038 #include <qpushbutton.h>
00039 
00041 
00042 namespace KPlato
00043 {
00044 
00045 class GroupItem;
00046 class ResourcesPanelGroupLVItem;
00047 class ResourcesPanelResourceItem;
00048 class Part;
00049 
00050 class ResourcesPanelResourceItem {
00051 public:
00052     enum State {None, Modified, New};
00053 
00054     ResourcesPanelResourceItem(Resource *res, State state = None) 
00055         : m_originalResource(0),
00056           m_state(state) {
00057         if (state == New) {
00058             m_resource = res;
00059         } else {
00060             m_originalResource = res;
00061             m_resource = new Resource(res);
00062         }
00063         //kdDebug()<<k_funcinfo<<"("<<this<<")"<<" orgres="<<m_originalResource<<" newres="<<m_resource<<endl;
00064     }
00065     ~ResourcesPanelResourceItem() {
00066         //kdDebug()<<k_funcinfo<<"("<<this<<") state="<<m_state<<endl;
00067         delete m_resource;
00068     }
00069     void setState(State s) {
00070         if (m_state == New)
00071             return; // A new is allways new
00072         m_state = s;
00073     }
00074     QString name() { return m_resource->name(); }
00075     void setName(const QString &newName) { 
00076         m_resource->setName(newName);
00077         setState(Modified);
00078     }
00079     Resource *takeResource() {
00080         Resource *r = m_resource;
00081         m_resource = 0;
00082         return r;
00083     }
00084     KCommand *saveResource(Part *part, ResourceGroup *group);
00085 
00086     Resource *m_originalResource;
00087     Resource *m_resource; // work on a local copy
00088     State m_state;
00089 };
00090 KCommand *ResourcesPanelResourceItem::saveResource(Part *part, ResourceGroup *group) {
00091     KMacroCommand *m=0;
00092     if (m_state == New) {
00093         //kdDebug()<<k_funcinfo<<"Add resource: "<<m_resource->name()<<endl;
00094         if (!m) m = new KMacroCommand("Add resource");
00095         m->addCommand(new AddResourceCmd(part, group, takeResource()));
00096     } else if (m_state == Modified) {
00097         //kdDebug()<<k_funcinfo<<"Modify resource: "<<m_originalResource->name()<<endl;
00098         KCommand *cmd = ResourceDialog::buildCommand(m_originalResource, *m_resource, part);
00099         if (cmd) {
00100             if (!m) m = new KMacroCommand("Modify resource");
00101             m->addCommand(cmd);
00102         }
00103     }
00104     return m;
00105 }
00106 
00107 class ResourceLBItem : public QListBoxText {
00108 public:
00109     ResourceLBItem(ResourcesPanelResourceItem *item) { 
00110         m_resourceItem = item; setText(item->name());
00111     }
00112     QString name() { return m_resourceItem->name(); }
00113     void setName(const QString &newName) {
00114         setText(newName);
00115         m_resourceItem->setName(newName);
00116     }
00117 
00118     ResourcesPanelResourceItem *m_resourceItem;
00119 };
00120 
00121 
00122 //-------------------
00123 class GroupItem {
00124 public:
00125     enum State {None=0, Modified=1, New=2}; //bitmap
00126 
00127     GroupItem(ResourceGroup *group, State state = None) {
00128         m_group = group;
00129         m_name = group->name();
00130         m_state = state;
00131         m_resourceItems.setAutoDelete(true);
00132         m_deletedItems.setAutoDelete(true);
00133         //kdDebug()<<k_funcinfo<<"("<<this<<")"<<endl;
00134     }
00135     ~GroupItem() {
00136         //kdDebug()<<k_funcinfo<<"("<<this<<")"<<endl;
00137         if (m_state & New) {
00138             delete m_group;
00139         }
00140     }
00141     void setState(State s) { m_state |= s; }
00142     void setName(const QString &newName) {
00143         m_name = newName;
00144         if (m_state & New)
00145             m_group->setName(newName);
00146         setState(Modified);
00147         //kdDebug()<<k_funcinfo<<"New name: '"<<newName<<"', group name: '"<<m_group->name()<<"' state="<<m_state<<endl;
00148     }
00149     void addResource(ResourcesPanelResourceItem *item) {
00150         //kdDebug()<<k_funcinfo<<" add: "<<(item?item->name():"")<<" ("<<item<<")"<<endl;
00151         m_resourceItems.append(item);
00152     }
00153     void deleteResource(ResourcesPanelResourceItem *item) {
00154         //kdDebug()<<k_funcinfo<<" Deleted: "<<item->m_name<<" ("<<item<<")"<<endl;
00155         m_resourceItems.take(m_resourceItems.findRef(item));
00156         if (item->m_state == ResourcesPanelResourceItem::New)
00157             delete item;
00158         else
00159             m_deletedItems.append(item);
00160         //kdDebug()<<k_funcinfo<<"No of items now="<<m_resourceItems.count()<<", no of deleted items="<<m_deletedItems.count()<<endl;
00161     }
00162     ResourceGroup *takeGroup() {
00163         //kdDebug()<<k_funcinfo<<"("<<m_group<<")"<<endl;
00164         ResourceGroup *g = m_group;
00165         m_group = 0;
00166         return g;
00167     }
00168     void saveResources() {
00169         ResourcesPanelResourceItem *item = m_resourceItems.first();
00170         while ((item = m_resourceItems.take())) {
00171             //kdDebug()<<k_funcinfo<<item->m_resource->name()<<endl;
00172             m_group->addResource(item->takeResource(), 0);
00173             delete item;
00174         }
00175     }
00176     ResourceGroup *m_group;
00177     QString m_name;
00178     QPtrList<ResourcesPanelResourceItem> m_resourceItems;
00179     QPtrList<ResourcesPanelResourceItem> m_deletedItems;
00180     int m_state;
00181 };
00182 
00183 class ResourcesPanelGroupLVItem : public KListViewItem {
00184 public:
00185     ResourcesPanelGroupLVItem(ResourcesPanel &pan, KListView *lv, GroupItem *item)
00186     :  KListViewItem(lv, item->m_name),
00187        m_group(item),
00188        panel(pan) {
00189         
00190         setRenameEnabled(0, false);
00191         //kdDebug()<<k_funcinfo<<"("<<this<<")"<<endl;
00192     }
00193     ~ResourcesPanelGroupLVItem() {
00194         //kdDebug()<<k_funcinfo<<"("<<this<<")"<<endl;
00195     }
00196     void setName(const QString &newName) {
00197         setText(0, newName);
00198         m_group->setName(newName);
00199     }
00200     void deleteGroup() {
00201         delete m_group;
00202         m_group = 0;
00203     }
00204     GroupItem *takeGroup() {
00205         //kdDebug()<<k_funcinfo<<"("<<m_group<<")"<<endl;
00206         GroupItem *g = m_group;
00207         m_group = 0;
00208         return g;
00209     }
00210     GroupItem *m_group;
00211     ResourcesPanel &panel;
00212     QString oldText;
00213 
00214 protected:
00215     virtual void cancelRename(int col) {
00216         //kdDebug()<<k_funcinfo<<endl;
00217         if (col == 0 && oldText.isEmpty()){
00218             return;
00219         }
00220         panel.renameStopped(this);
00221         KListViewItem::cancelRename(col);
00222         setRenameEnabled(col, false);
00223     }
00224 };
00225 
00227 
00228 ResourcesPanel::ResourcesPanel(QWidget *parent, Project *p) : ResourcesPanelBase(parent) {
00229     project = p;
00230     m_groupItem = 0;
00231     m_blockResourceRename = false;
00232     m_renameItem = 0;
00233 
00234     bEditResource->setEnabled(false);
00235     bRemoveResource->setEnabled(false);
00236     resourceName->setEnabled(false);
00237     
00238     listOfGroups->header()->setStretchEnabled(true, 0);
00239     listOfGroups->setSorting(0);
00240     listOfGroups->setShowSortIndicator(true);
00241     listOfGroups->setDefaultRenameAction (QListView::Accept);
00242     bAdd->setEnabled(true);
00243     
00244     m_groupItems.setAutoDelete(true);
00245     m_deletedGroupItems.setAutoDelete(true);
00246     
00247     QPtrListIterator<ResourceGroup> git(project->resourceGroups());
00248     for(; git.current(); ++git) {
00249         ResourceGroup *grp = git.current();
00250         GroupItem *groupItem = new GroupItem(grp);
00251         //kdDebug()<<k_funcinfo<<" Added group: "<<groupItem->m_name<<" ("<<groupItem<<")"<<endl;
00252         QPtrListIterator<Resource> rit(grp->resources());
00253         for(; rit.current(); ++rit) {
00254             Resource *res = rit.current();
00255             ResourcesPanelResourceItem *ritem = new ResourcesPanelResourceItem(res);
00256             groupItem->addResource(ritem);
00257             //kdDebug()<<k_funcinfo<<"      Added resource: "<<ritem->m_name<<" ("<<ritem<<")"<<endl;
00258         }
00259         m_groupItems.append(groupItem);
00260         new ResourcesPanelGroupLVItem(*this, listOfGroups, groupItem);
00261     }
00262     listOfGroups->setSelected(listOfGroups->firstChild(), true);
00263     slotGroupChanged();
00264 
00265     connect(bAdd, SIGNAL(clicked()), SLOT(slotAddGroup()));
00266     connect(bRemove, SIGNAL(clicked()), SLOT(slotDeleteGroup()));
00267     connect(listOfGroups, SIGNAL(selectionChanged()), SLOT(slotGroupChanged()));
00268     connect(listOfGroups, SIGNAL(doubleClicked(QListViewItem*, const QPoint&, int)), SLOT(slotListDoubleClicked(QListViewItem*, const QPoint&, int)));
00269     connect(listOfGroups, SIGNAL(itemRenamed(QListViewItem*, int)), SLOT(slotItemRenamed(QListViewItem*, int)));
00270 
00271     connect(bAddResource, SIGNAL( clicked() ), this, SLOT ( slotAddResource() ));
00272     connect(bEditResource, SIGNAL( clicked() ), this, SLOT ( slotEditResource() ));
00273     connect(bRemoveResource, SIGNAL( clicked() ), this, SLOT ( slotDeleteResource() ));
00274     connect(listOfResources, SIGNAL(selectionChanged(QListBoxItem*)), SLOT(slotResourceChanged(QListBoxItem*)));
00275     connect(listOfResources, SIGNAL(currentChanged(QListBoxItem*)), SLOT(slotCurrentChanged(QListBoxItem*)));
00276     connect(resourceName, SIGNAL(textChanged(const QString&)), SLOT(slotResourceRename(const QString&)));
00277 
00278 
00279     // Internal hacks, to get renaming to behave 
00280     // Uses signals to not get in the way of QListView
00281     connect(this, SIGNAL(renameStarted(QListViewItem*, int)), SLOT(slotRenameStarted(QListViewItem*, int)));
00282     connect(this, SIGNAL(startRename(QListViewItem*, int)), SLOT(slotStartRename(QListViewItem*, int)));
00283     connect(this, SIGNAL(selectionChanged()), SLOT(slotGroupChanged()));
00284 }
00285 
00286 void ResourcesPanel::slotAddGroup() {
00287     //kdDebug()<<k_funcinfo<<endl;
00288     ResourceGroup *r = new ResourceGroup(project);
00289     GroupItem *gitem = new GroupItem(r, GroupItem::New);
00290     m_groupItems.append(gitem);
00291     ResourcesPanelGroupLVItem *groupItem = new ResourcesPanelGroupLVItem(*this, listOfGroups, gitem);
00292 
00293     slotListDoubleClicked(groupItem, QPoint(), 0);
00294 }
00295 
00296 void ResourcesPanel::slotDeleteGroup() {
00297     //kdDebug()<<k_funcinfo<<endl;
00298     ResourcesPanelGroupLVItem *groupLVItem = dynamic_cast<ResourcesPanelGroupLVItem*> (listOfGroups->selectedItem());
00299     if (groupLVItem == 0)
00300         return;
00301 
00302     listOfResources->clear();
00303     
00304     listOfGroups->takeItem(groupLVItem); // remove from listbox
00305     m_groupItems.take(m_groupItems.findRef(groupLVItem->m_group)); // remove GroupItem from active list
00306     m_deletedGroupItems.append(groupLVItem->takeGroup()); // remove GroupItem from GroupLVItem and add to deleted list
00307 
00308     //kdDebug()<<k_funcinfo<<" No of deleted groups="<<m_deletedGroupItems.count()<<", now "<<m_groupItems.count()<<" groups left"<<endl;
00309 
00310     delete groupLVItem; // delete GroupLVItem (but not GroupItem)
00311     emit changed();
00312 }
00313 
00314 void ResourcesPanel::slotAddResource() {
00315     if (!m_groupItem) {
00316         KMessageBox::sorry(this, i18n("Resources belong to resource groups, select the group first to add a new resource to"));
00317         return;
00318     }
00319     listOfResources->setSelected(listOfResources->selectedItem(), false);
00320     Resource *r = new Resource(project);
00321     ResourceDialog *dia = new ResourceDialog(*project, r);
00322     if (dia->exec()) {
00323         KCommand *cmd = dia->buildCommand();
00324         if (cmd) {
00325             cmd->execute(); // modifications -> r
00326             delete cmd;
00327         }
00328         ResourcesPanelResourceItem *resourceItem = new ResourcesPanelResourceItem(r, ResourcesPanelResourceItem::New);
00329         m_groupItem->m_group->addResource(resourceItem);
00330         ResourceLBItem *item = new ResourceLBItem(resourceItem);
00331         listOfResources->insertItem(item);
00332         resourceName->clear();
00333         listOfResources->setSelected(item, true);
00334         emit changed();
00335         //kdDebug()<<k_funcinfo<<" Added: "<<resourceItem->name()<<" to "<<m_groupItem->m_group->m_name<<endl;
00336     } else {
00337         delete r;
00338     }
00339     delete dia;
00340 }
00341 
00342 void ResourcesPanel::slotEditResource() {
00343     //kdDebug()<<k_funcinfo<<endl;
00344     ResourceLBItem *item = dynamic_cast<ResourceLBItem*> (listOfResources->selectedItem());
00345     if(item == 0) return;
00346     Resource *r = item->m_resourceItem->m_resource;
00347     ResourceDialog *dia = new ResourceDialog(*project, r);
00348     if (dia->exec()) {
00349         KCommand *cmd = dia->buildCommand();
00350         if (cmd) {
00351             cmd->execute(); // modifications -> r
00352             delete cmd;
00353         }
00354         resourceName->setText(r->name());
00355         item->m_resourceItem->setState(ResourcesPanelResourceItem::Modified);
00356         item->setName(r->name()); // refresh list
00357         listOfResources->triggerUpdate(false);
00358         emit changed();
00359     }
00360     delete dia;
00361 }
00362 
00363 void ResourcesPanel::slotDeleteResource() {
00364     //kdDebug()<<k_funcinfo<<endl;
00365     ResourceLBItem *item = dynamic_cast<ResourceLBItem*> (listOfResources->selectedItem());
00366     if(item == 0) return;
00367 
00368     //Can't delete resource from unselected group
00369     if(m_groupItem == 0) return;
00370 
00371     m_groupItem->m_group->deleteResource(item->m_resourceItem);
00372     listOfResources->removeItem(listOfResources->currentItem());
00373 
00374     emit changed();
00375 }
00376 
00377 /* Select another resource */
00378 void ResourcesPanel::slotResourceChanged( QListBoxItem *item) {
00379     if (!item) {
00380         resourceName->setEnabled(false);
00381         bEditResource->setEnabled(false);
00382         bRemoveResource->setEnabled(false);
00383         return;
00384     }
00385     resourceName->setText( ((ResourceLBItem *)item)->name());
00386     resourceName->setEnabled(true);
00387     bEditResource->setEnabled(true);
00388     bRemoveResource->setEnabled(true);
00389 }
00390 
00391 /* Select another resource */
00392 void ResourcesPanel::slotCurrentChanged( QListBoxItem *item) {
00393     if (item && !item->isSelected()) {
00394         listOfResources->setSelected(item, true);
00395     }
00396 }
00397 
00398 void ResourcesPanel::slotResourceRename( const QString &newName) {
00399     QListBoxItem *item = listOfResources->selectedItem();
00400     if(!item || m_blockResourceRename) return;
00401 
00402     ResourceLBItem *i = dynamic_cast<ResourceLBItem *>(item);
00403     if (i->name() == newName) return;
00404 
00405     i->setName(newName);
00406     listOfResources->triggerUpdate(false);
00407 
00408     emit changed();
00409 }
00410 
00411 bool ResourcesPanel::ok() {
00412     return true;
00413 }
00414 
00415 KCommand *ResourcesPanel::buildCommand(Part *part) {
00416     KMacroCommand *m=0;
00417     GroupItem *gitem;
00418 
00419     QString cmdName = "Modify resourcegroups";
00420     QPtrListIterator<GroupItem> dgit(m_deletedGroupItems);
00421     for (; (gitem = dgit.current()) != 0; ++dgit) {
00422         if (!(gitem->m_state & GroupItem::New)) {
00423             if (!m) m = new KMacroCommand(cmdName);
00424             //kdDebug()<<k_funcinfo<<"Remove group: '"<<gitem->m_name<<"'"<<endl;
00425             m->addCommand(new RemoveResourceGroupCmd(part, gitem->takeGroup()));
00426         }
00427     }
00428 
00429     QPtrListIterator<GroupItem> git(m_groupItems);
00430     for (; (gitem = git.current()) != 0; ++git) {
00431         //kdDebug()<<k_funcinfo<<"Group: "<<gitem->m_name<<" has "<<gitem->m_resourceItems.count()<<" resources"<<" and "<<gitem->m_deletedItems.count()<<" deleted resources"<<endl;
00432         //First remove deleted resources from group
00433         QPtrListIterator<ResourcesPanelResourceItem> dit(gitem->m_deletedItems);
00434         ResourcesPanelResourceItem *ditem;
00435         for (; (ditem = dit.current()) != 0; ++dit) {
00436             if (!m) m = new KMacroCommand(cmdName);
00437             //kdDebug()<<k_funcinfo<<" Deleting resource: '"<<ditem->m_originalResource->name()<<"'"<<endl;
00438             m->addCommand(new RemoveResourceCmd(part, gitem->m_group, ditem->m_originalResource));
00439         }
00440         // Now add/modify group/resources
00441         if (gitem->m_state & GroupItem::New) {
00442             if (!m) m = new KMacroCommand(cmdName);
00443             //kdDebug()<<k_funcinfo<<" Adding group: '"<<gitem->m_name<<"'"<<endl;
00444             gitem->saveResources();
00445             m->addCommand(new AddResourceGroupCmd(part, gitem->takeGroup()));
00446             continue;
00447         }
00448         ResourceGroup *rg = gitem->takeGroup();
00449         if (gitem->m_state & GroupItem::Modified) {
00450             if (gitem->m_name != rg->name()) {
00451                 if (!m) m = new KMacroCommand(cmdName);
00452                 //kdDebug()<<k_funcinfo<<" Modifying group: '"<<gitem->m_name<<"'"<<endl;
00453                 m->addCommand(new ModifyResourceGroupNameCmd(part, rg, gitem->m_name));
00454             }
00455         }
00456         QPtrListIterator<ResourcesPanelResourceItem> it(gitem->m_resourceItems);
00457         for (; it.current() != 0; ++it) {
00458             KCommand *cmd = it.current()->saveResource(part, rg);
00459             if (cmd) {
00460                 if (!m) m = new KMacroCommand(cmdName);
00461                 m->addCommand(cmd);
00462             }
00463         }
00464     }
00465     return m;
00466 }
00467 
00468 void ResourcesPanel::slotGroupChanged() {
00469     slotGroupChanged(listOfGroups->selectedItem());
00470 }
00471 
00472 void ResourcesPanel::slotGroupChanged(QListViewItem *itm) {
00473     ResourcesPanelGroupLVItem *item = static_cast<ResourcesPanelGroupLVItem*>(itm);
00474     if (!item) {
00475         bAdd->setEnabled(true);
00476         bRemove->setEnabled(false);
00477         listOfResources->clear();
00478         resourceName->clear();
00479         resourceGroupBox->setEnabled(false);
00480         return;
00481     }
00482     m_blockResourceRename = true;
00483     resourceName->clear();
00484     resourceName->setEnabled(false);
00485     m_blockResourceRename = false;
00486 
00487     m_groupItem = item;
00488     listOfResources->clear();
00489 
00490     QPtrListIterator<ResourcesPanelResourceItem> it(m_groupItem->m_group->m_resourceItems);
00491     for ( ; it.current(); ++it ) {
00492         listOfResources->insertItem(new ResourceLBItem(it.current()));
00493         //kdDebug()<<k_funcinfo<<"Insert resource item: "<<it.current()->name()<<endl;
00494     }
00495     bAdd->setEnabled(true);
00496     bRemove->setEnabled(true);
00497     slotResourceChanged(0);
00498     resourceGroupBox->setEnabled(true);
00499 }
00500 
00501 void ResourcesPanel::slotListDoubleClicked(QListViewItem* item, const QPoint&, int col) {
00502     //kdDebug()<<k_funcinfo<<(item?item->text(0):"")<<endl;
00503     if (m_renameItem)
00504         return;
00505     slotStartRename(item, col);
00506 }
00507 
00508 void ResourcesPanel::slotItemRenamed(QListViewItem *item, int col) {
00509     //kdDebug()<<k_funcinfo<<item->text(0)<<endl;
00510     item->setRenameEnabled(col, false);
00511     m_renameItem = 0;
00512     if (col != 0) {
00513         renameStopped(item);
00514         emit changed();
00515         return;
00516     }
00517     if (item->text(0).isEmpty()) {
00518         item->setText(0, static_cast<ResourcesPanelGroupLVItem*>(item)->oldText); // keep the old name
00519     }
00520     if (item->text(0).isEmpty()) {
00521         // Not allowed
00522         //kdDebug()<<k_funcinfo<<"name empty"<<endl;
00523         emit startRename(item, 0);
00524         return;
00525     }
00526     static_cast<ResourcesPanelGroupLVItem*>(item)->setName(item->text(0));
00527     bRemove->setEnabled(listOfGroups->selectedItem());
00528     bAdd->setEnabled(listOfGroups->selectedItem());
00529     renameStopped(item);
00530     emit changed();
00531 }
00532 
00533 void ResourcesPanel::slotRenameStarted(QListViewItem */*item*/, int /*col*/) {
00534     //kdDebug()<<k_funcinfo<<(item?item->text(0):"")<<endl;
00535     if (listOfGroups->isRenaming()) {
00536         bRemove->setEnabled(false);
00537         bAdd->setEnabled(false);
00538     }
00539 }
00540 
00541 void ResourcesPanel::slotStartRename(QListViewItem *item, int col) {
00542     //kdDebug()<<k_funcinfo<<(item?item->text(0):"")<<endl;
00543     static_cast<ResourcesPanelGroupLVItem*>(item)->oldText = item->text(col);
00544     item->setRenameEnabled(col, true);
00545     item->startRename(col);
00546     m_renameItem = item;
00547     
00548     emit renameStarted(item, col);
00549 }
00550 
00551 // We don't get notified when rename is cancelled, this is called from the item
00552 void ResourcesPanel::renameStopped(QListViewItem *) {
00553     //kdDebug()<<k_funcinfo<<endl;
00554     m_renameItem = 0;
00555     emit selectionChanged();
00556 }
00557 
00558 
00559 }  //KPlato namespace
00560 
00561 #include "kptresourcespanel.moc"
KDE Home | KDE Accessibility Home | Description of Access Keys