Hello community,
here is the log from the commit of package fate for openSUSE:Factory checked in at 2017-08-16 16:14:52
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/fate (Old)
and /work/SRC/openSUSE:Factory/.fate.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "fate"
Wed Aug 16 16:14:52 2017 rev:10 rq:516804 version:1.6.0.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/fate/fate.changes 2017-08-01 09:26:02.838048737 +0200
+++ /work/SRC/openSUSE:Factory/.fate.new/fate.changes 2017-08-16 16:15:15.796332794 +0200
@@ -1,0 +2,10 @@
+Mon Aug 14 11:53:52 UTC 2017 - jplack@suse.com
+
+- bugfix release 1.6.0.3
+ * fix #1049390 - Standard approvers are not prepopulated anymore in ECOs
+ * fix #1052788 - attachments are accepted , but not added / referenced
+ * fix #1053025 - Crash when trying to approve an ECO
+ * fix #1052391 - Cannot add Engineering Manager
+ * fix #1052799 - Cannot change Priority
+
+-------------------------------------------------------------------
Old:
----
fate-20170731-4baa429b.tar.bz2
New:
----
fate-20170814-415babab.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ fate.spec ++++++
--- /var/tmp/diff_new_pack.ySCSie/_old 2017-08-16 16:15:16.828187954 +0200
+++ /var/tmp/diff_new_pack.ySCSie/_new 2017-08-16 16:15:16.832187393 +0200
@@ -17,8 +17,8 @@
%define baseversion 1.6
-%define patchlevel .0.2
-%define snapshot 20170731-4baa429b
+%define patchlevel .0.3
+%define snapshot 20170814-415babab
Name: fate
Version: %{baseversion}%{patchlevel}
Release: 0
++++++ fate-20170731-4baa429b.tar.bz2 -> fate-20170814-415babab.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fate-20170731-4baa429b/src/fate/editor/approvallistedit.cpp new/fate-20170814-415babab/src/fate/editor/approvallistedit.cpp
--- old/fate-20170731-4baa429b/src/fate/editor/approvallistedit.cpp 2017-07-31 10:53:53.773448590 +0200
+++ new/fate-20170814-415babab/src/fate/editor/approvallistedit.cpp 2017-08-14 13:32:09.669465494 +0200
@@ -170,6 +170,7 @@
QString myself(Prefs::self()->serverUser());
ECO::Approval::List::Iterator it;
int row;
+ bool changed = false;
for (it = mApprovals.begin(), row = 0; it != mApprovals.end(); ++it, ++row) {
if (it->actor.userid != myself || isRowHidden(row))
@@ -178,9 +179,11 @@
if (!it->given) {
it->setState(true);
renderRow(row, *it);
- emit modified();
+ changed = true;
}
}
+ if (changed)
+ emit modified();
}
void
@@ -190,6 +193,7 @@
QString myself(Prefs::self()->serverUser());
ECO::Approval::List::Iterator it;
int row;
+ bool changed = false;
for (it = mApprovals.begin(), row = 0; it != mApprovals.end(); ++it, ++row) {
if (it->actor.userid != myself || isRowHidden(row))
@@ -198,9 +202,11 @@
if (it->given) {
it->setState(false);
renderRow(row, *it);
- emit modified();
+ changed = true;
}
}
+ if (changed)
+ emit modified();
}
void
@@ -301,7 +307,12 @@
approval.actor = dlg.actor();
approval.given = false;
approval.dateGiven = QString::null;
- updateRow(r, approval);
+
+ // updateRow(r, approval);
+ if (r < mApprovals.size())
+ mApprovals[r] = approval;
+ renderRow(r, approval);
+
emit modified();
}
}
@@ -392,13 +403,10 @@
if (r < 0)
return;
-#ifdef notyet
- ECO::Approval approval(approvalForRow(row));
-
- // show yesnot dialog
-#endif
+ // removeRow(r);
+ mApprovals.removeAt(r);
+ ListEdit::removeRow(r);
- removeRow(r);
emit modified();
}
@@ -532,21 +540,4 @@
i->setIcon(approval.given? KIcon("dialog-ok-apply") : QIcon());
}
-void
-ApproverListEdit::updateRow(int row, const ECO::Approval &approval)
-{
- if (0 < row && row < mApprovals.size())
- mApprovals[row] = approval;
- renderRow(row, approval);
-}
-
-void
-ApproverListEdit::removeRow(int row)
-{
- if (row >= 0) {
- mApprovals.removeAt(row);
- ListEdit::removeRow(row);
- }
-}
-
#include "approvallistedit.moc"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fate-20170731-4baa429b/src/fate/editor/approvallistedit.h new/fate-20170814-415babab/src/fate/editor/approvallistedit.h
--- old/fate-20170731-4baa429b/src/fate/editor/approvallistedit.h 2017-07-31 10:53:53.773448590 +0200
+++ new/fate-20170814-415babab/src/fate/editor/approvallistedit.h 2017-08-14 13:32:09.669465494 +0200
@@ -53,23 +53,12 @@
signals:
void modified();
- public slots:
- //void addActor();
-
protected:
-
- //ActorItem *findItem( const QString &userid, const QString &email, const QString &fullname, const QString &role );
void setToolTip(const FeatureData::Actor *actor, QTableWidgetItem *item);
const FeatureData::Actor &actorForRow(int) const;
ECO::Approval approvalForRow(int) const;
-
- void updateRow(int row, const ECO::Approval &approval);
void renderRow(int row, const ECO::Approval &approval);
-
- void insertRow(int row, const ECO::Approval &approval);
- void removeRow(int row);
-
void addApproval(const ECO::Approval &approval, bool hidden = false);
QString renderApproverRole(const ECO::Approval &approval);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fate-20170731-4baa429b/src/fate/editor/ecoeditor.cpp new/fate-20170814-415babab/src/fate/editor/ecoeditor.cpp
--- old/fate-20170731-4baa429b/src/fate/editor/ecoeditor.cpp 2017-07-31 10:53:53.773448590 +0200
+++ new/fate-20170814-415babab/src/fate/editor/ecoeditor.cpp 2017-08-14 13:32:09.669465494 +0200
@@ -74,9 +74,6 @@
void
EcoEditor::setFeature(Feature *feature)
{
- if (mFeature) {
- mFeature->eco(); // trigger ECO saving
- }
FeatureViewBase_setFeature(feature);
if (mFeature) {
ECO *eco = mFeature->eco();
@@ -85,7 +82,7 @@
page->clear();
page->load(eco);
}
- connect(mFeature, SIGNAL(saveECO(ECO *)), SLOT(saveToFeature(ECO *)));
+ connect(mFeature, SIGNAL(featureChanged()), SLOT(updateFeature()));
}
else {
foreach (EcoPage *page, mPages) {
@@ -96,19 +93,18 @@
}
void
-EcoEditor::saveToFeature(ECO *eco)
+EcoEditor::updateFeature()
{
- if (eco)
- foreach (EcoPage *page, mPages) {
- page->save(eco);
- }
+ setFeature(mFeature);
}
void
EcoEditor::slotModified()
{
if (mFeature) {
+ disconnect(mFeature, SIGNAL(featureChanged()));
mFeature->setModified(true);
+ connect(mFeature, SIGNAL(featureChanged()), SLOT(updateFeature()));
}
}
@@ -492,10 +488,10 @@
// ECO Approvals
//////////////////////////////////////////////////////////////////
EcoApprovalPage::EcoApprovalPage(QWidget *parent)
-: EcoPage(parent)
+ : EcoPage(parent), mEco(0)
{
mListEdit = addApproverListEdit(i18n("Approvals"));
- connect(mListEdit, SIGNAL(modified()), SIGNAL(modified()));
+ connect(mListEdit, SIGNAL(modified()), SLOT(slotModified()));
}
void
@@ -507,16 +503,18 @@
void
EcoApprovalPage::load(ECO *eco)
{
+ mEco = eco;
if (eco)
mListEdit->setApprovals(eco->approvals());
}
void
-EcoApprovalPage::save(ECO *eco)
+EcoApprovalPage::slotModified()
{
- if (eco != 0) {
- eco->setApprovals(mListEdit->approvals());
+ if (mEco) {
+ mEco->setApprovals(mListEdit->approvals());
}
+ emit modified();
}
#include "ecoeditor.moc"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fate-20170731-4baa429b/src/fate/editor/ecoeditor.h new/fate-20170814-415babab/src/fate/editor/ecoeditor.h
--- old/fate-20170731-4baa429b/src/fate/editor/ecoeditor.h 2017-07-31 10:53:53.773448590 +0200
+++ new/fate-20170814-415babab/src/fate/editor/ecoeditor.h 2017-08-14 13:32:09.669465494 +0200
@@ -36,7 +36,6 @@
class ApproverListEdit;
class QCheckBox;
class QLabel;
-class QPushButton;
class EcoGeneralPage;
class EcoJustificationPage;
@@ -57,10 +56,6 @@
virtual void clear();
virtual void load(ECO *) = 0;
- virtual void save(ECO *) {
- // This is a no-op per default because the Editable classes
- // have already done it most of the time
- }
signals:
void modified();
@@ -82,8 +77,8 @@
void clear() { setFeature(0); }
private slots:
- void saveToFeature(ECO *);
void updateFinalized ();
+ void updateFeature();
void slotModified();
protected:
@@ -102,10 +97,6 @@
EcoApprovalPage *mApprovalPage;
QList mPages;
-
- QPushButton *mSaveButton;
- QPushButton *mSaveAllButton;
- QPushButton *mDiffButton;
};
//////////////////////////////////////////////////////////////////
@@ -311,10 +302,12 @@
virtual void clear();
void load(ECO *);
- virtual void save(ECO *);
+ private slots:
+ void slotModified();
private:
ApproverListEdit *mListEdit;
+ ECO *mEco;
};
#endif // ECOEDITOR_H
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fate-20170731-4baa429b/src/fate/editor/featurediffview.cpp new/fate-20170814-415babab/src/fate/editor/featurediffview.cpp
--- old/fate-20170731-4baa429b/src/fate/editor/featurediffview.cpp 2017-07-31 10:53:53.773448590 +0200
+++ new/fate-20170814-415babab/src/fate/editor/featurediffview.cpp 2017-08-14 13:32:09.669465494 +0200
@@ -126,11 +126,9 @@
void FeatureDiffView::setFeature(Feature *f)
{
if (mProc) { // Stop any remaining diff process
- mProc->kill();
- delete mProc;
+ mProc->deleteLater();
delete mNewFile;
delete mOldFile;
- mOldFile = 0;
mProc = 0;
}
FeatureViewBase_setFeature(f);
@@ -168,8 +166,8 @@
}
}
- if (mOldFile) { // still another diff process running
- qWarning() << "still another diff process running";
+ if (mProc && mProc->state() != QProcess::NotRunning) {
+ // Collision:: still another diff process running!
return;
}
@@ -252,6 +250,9 @@
void FeatureDiffView::processExited(FATE::Process *proc, bool success)
{
+ if (proc != mProc)
+ return;
+
QString output;
if (!success)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fate-20170731-4baa429b/src/fate/editor/featureview.cpp new/fate-20170814-415babab/src/fate/editor/featureview.cpp
--- old/fate-20170731-4baa429b/src/fate/editor/featureview.cpp 2017-07-31 10:53:53.777448609 +0200
+++ new/fate-20170814-415babab/src/fate/editor/featureview.cpp 2017-08-14 13:32:09.669465494 +0200
@@ -333,9 +333,12 @@
}
mFeatureMap = mFeature->featureMap();
- if ( mFeatureMap && mFeatureMap->view() == this) {
- connect( mFeatureMap, SIGNAL( currentFeatureChanged( Feature * ) ),
- SLOT( setFeature( Feature * ) ) );
+ if ( mFeatureMap ) {
+ if (mFeatureMap->view() == this)
+ connect( mFeatureMap, SIGNAL( currentFeatureChanged( Feature * ) ),
+ SLOT( setFeature( Feature * ) ) );
+ connect( mFeatureMap, SIGNAL( featureReloaded( Feature * ) ),
+ SLOT( setFeature( Feature * ) ) );
}
if (mFeature->eco()) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fate-20170731-4baa429b/src/fate/mainview.cpp new/fate-20170814-415babab/src/fate/mainview.cpp
--- old/fate-20170731-4baa429b/src/fate/mainview.cpp 2017-07-31 10:53:53.777448609 +0200
+++ new/fate-20170814-415babab/src/fate/mainview.cpp 2017-08-14 13:32:09.673465514 +0200
@@ -177,10 +177,6 @@
SLOT( slotQueryDone() ) );
connect( &mFeatureMap, SIGNAL( dataChanged() ),
SLOT( slotFeatureDataChanged() ) );
-
- // Thinks we do not need that in the end ...
- connect( &mFeatureMap, SIGNAL( featureChanged( Feature * ) ),
- SLOT( slotFeatureReloaded( Feature * ) ) );
connect( &mFeatureMap, SIGNAL( connectionEstablished( bool ) ),
SIGNAL( connectionEstablished( bool ) ) );
// TODO: may be move this completely to FeatureMapListView
@@ -258,11 +254,11 @@
view->addAction(c.action(i));
connect( &mFeatureMap, SIGNAL(dataAboutToBeReset()),
- view, SLOT(close()));
+ view, SLOT(deleteLater()));
disconnect( feature, SIGNAL(destroyed()),
view, 0);
connect( feature, SIGNAL(destroyed()),
- view, SLOT(close()));
+ view, SLOT(deleteLater()));
connect( view, SIGNAL(destroyed()),
SLOT(aboutToDestroyFeatureView()));
// TODO: load and store a default size
@@ -1166,14 +1162,6 @@
mFeatureMap.doReload( feature );
}
-void MainView::slotFeatureReloaded( Feature * f )
-{
- Feature *currentFeature = mFeatureMap.currentFeature();
- if ( !currentFeature || currentFeature->id() == f->id() ) {
- mFeatureView->setFeature( f );
- }
-}
-
void MainView::doDelayedQuery()
{
kDebug() << k_funcinfo;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fate-20170731-4baa429b/src/fate/mainview.h new/fate-20170814-415babab/src/fate/mainview.h
--- old/fate-20170731-4baa429b/src/fate/mainview.h 2017-07-31 10:53:53.777448609 +0200
+++ new/fate-20170814-415babab/src/fate/mainview.h 2017-08-14 13:32:09.673465514 +0200
@@ -158,7 +158,6 @@
void slotPreconditionChanged( StartupSequence::Precondition p, bool on );
void slotFeatureDataChanged();
void slotQueryDone();
- void slotFeatureReloaded( Feature * );
void keeperChanged( const QString & );
void clientLocked( bool );
void editRelationTree();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fate-20170731-4baa429b/src/libfate/feature.cpp new/fate-20170814-415babab/src/libfate/feature.cpp
--- old/fate-20170731-4baa429b/src/libfate/feature.cpp 2017-07-31 10:53:53.785448648 +0200
+++ new/fate-20170814-415babab/src/libfate/feature.cpp 2017-08-14 13:32:09.677465533 +0200
@@ -718,7 +718,6 @@
ECO * Feature::eco()
{
- emit saveECO(mECO);
return mECO;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fate-20170731-4baa429b/src/libfate/feature.h new/fate-20170814-415babab/src/libfate/feature.h
--- old/fate-20170731-4baa429b/src/libfate/feature.h 2017-07-31 10:53:53.785448648 +0200
+++ new/fate-20170814-415babab/src/libfate/feature.h 2017-08-14 13:32:09.677465533 +0200
@@ -173,7 +173,6 @@
void productsChanged( const ProductContext::List & );
void actorsChanged( const FeatureData::Actor::List & );
void relationsChanged( const Relation::List & );
- void saveECO( ECO * );
public:
bool hasActor( const QString &role ) const;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fate-20170731-4baa429b/src/libfate/featuremap.cpp new/fate-20170814-415babab/src/libfate/featuremap.cpp
--- old/fate-20170731-4baa429b/src/libfate/featuremap.cpp 2017-07-31 10:53:53.785448648 +0200
+++ new/fate-20170814-415babab/src/libfate/featuremap.cpp 2017-08-14 13:32:09.681465554 +0200
@@ -323,13 +323,6 @@
emit featuresModified();
}
-void FeatureMap::signalFeatureModification( Feature *f )
-{
- if (!f) f = mCurrentFeature;
- f->setModified(true);
- emit featureChanged( f );
-}
-
Feature *
FeatureMap::feature(const QString &id) const
{
@@ -724,6 +717,7 @@
f->setFeatureMap( this );
f->setModified(false); // emit a Feature::featureChanged() and thus
// a FeatureMap::featureChanged(f)
+ emit featureReloaded(f);
if( mCache ) {
mCache->removeModifiedItem( f->id() );
}
@@ -767,15 +761,13 @@
void FeatureMap::finishSave( Feature *f )
{
- f->setModified( false );
+ f->mModified = false; // no signal Feature::featureChanged() here!!
if( mCache ) {
mCache->removeModifiedItem( f->id() );
mCache->save( f->id(), QString::number( f->revision() ), f );
}
- emit featureChanged( f );
-
doReload( f );
}
@@ -945,6 +937,7 @@
CheckResultsDialog resultsDialog( f, mView );
bool failed = false;
bool warn = false;
+ f->createDomTree(false);
FeatureCheck::Map map = xclv.validate( f->domElement(), f );
QList<QString> groups = map.keys();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fate-20170731-4baa429b/src/libfate/featuremap.h new/fate-20170814-415babab/src/libfate/featuremap.h
--- old/fate-20170731-4baa429b/src/libfate/featuremap.h 2017-07-31 10:53:53.785448648 +0200
+++ new/fate-20170814-415babab/src/libfate/featuremap.h 2017-08-14 13:32:09.681465554 +0200
@@ -83,7 +83,6 @@
void cancelQuery();
void addNewFeature( Feature * );
void removeFeature( Feature * );
- void signalFeatureModification( Feature *f = 0 );
bool saveCache( const Feature::List & );
bool saveKeeper( Feature * );
@@ -110,7 +109,8 @@
void featureAdded( Feature * );
// a feature in the map has been changed
void featureChanged( Feature * );
-
+ // a feature has been reloaded, featureChanged() emitted before that;
+ void featureReloaded( Feature * );
// passthrough signal from QueryEngine
void connectionEstablished( bool );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fate-20170731-4baa429b/src/libfate/process.cpp new/fate-20170814-415babab/src/libfate/process.cpp
--- old/fate-20170731-4baa429b/src/libfate/process.cpp 2017-07-31 10:53:53.785448648 +0200
+++ new/fate-20170814-415babab/src/libfate/process.cpp 2017-08-14 13:32:09.681465554 +0200
@@ -6,7 +6,7 @@
#include "process.h"
-#include "qdebug.h"
+#include <QDebug>
FATE::Process::Process(QObject *parent, const QString &cmdName)
: QProcess(parent), mCmdName(cmdName), mComplete(false)
@@ -19,6 +19,15 @@
{
}
+FATE::Process::~Process()
+{
+ if (!waitForFinished(1)) {
+ // avoid QProcess to be whining
+ kill();
+ waitForFinished(500); // wait max half a second
+ }
+}
+
bool
FATE::Process::start(void)
{
@@ -29,12 +38,6 @@
connect(this, SIGNAL(readyReadStandardError ()), SLOT(grabStandardError()));
connect(this, SIGNAL(finished(int, QProcess::ExitStatus)), SLOT(complete(int, QProcess::ExitStatus)));
- if (mArgs.isEmpty()) {
- qDebug() << "Starting process:" << mCmdName;
- } else {
- qDebug() << "Starting process:" << mCmdName << mArgs.join("\" \"");
- }
-
QProcess::start(mCmdName, mArgs, QIODevice::ReadOnly);
return true;
}
@@ -118,6 +121,8 @@
void
FATE::Process::complete(int exitCode, QProcess::ExitStatus exitStatus)
{
+ Q_UNUSED(exitCode);
+
mComplete = true;
if (exitStatus != QProcess::NormalExit) {
qDebug() << "Process" << mCmdName << "crashed";
@@ -129,8 +134,6 @@
grabStandardOutput();
grabStandardError();
- qDebug() << "Process" << mCmdName << "exited with status code " << exitCode;
-
emit done(this, true);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fate-20170731-4baa429b/src/libfate/process.h new/fate-20170814-415babab/src/libfate/process.h
--- old/fate-20170731-4baa429b/src/libfate/process.h 2017-07-31 10:53:53.785448648 +0200
+++ new/fate-20170814-415babab/src/libfate/process.h 2017-08-14 13:32:09.681465554 +0200
@@ -7,7 +7,7 @@
#ifndef __LIBDFATE_PROCESS_H__
#define __LIBDFATE_PROCESS_H__
-#include
+#include <QProcess>
namespace FATE {
@@ -16,6 +16,7 @@
public:
Process(QObject *, const QString &cmdName);
Process(QObject *, const QString &cmdName, const QStringList &args);
+ ~Process();
void addArgument(const QString &);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fate-20170731-4baa429b/src/libfate/ui/featurelistview.cpp new/fate-20170814-415babab/src/libfate/ui/featurelistview.cpp
--- old/fate-20170731-4baa429b/src/libfate/ui/featurelistview.cpp 2017-07-31 10:53:53.789448668 +0200
+++ new/fate-20170814-415babab/src/libfate/ui/featurelistview.cpp 2017-08-14 13:32:09.681465554 +0200
@@ -824,8 +824,6 @@
// handle signals from FeatureTableView
connect( this, SIGNAL( featureSelected( Feature * ) ),
mFeatureMap, SLOT( setCurrentFeature( Feature * ) ) );
- connect( this, SIGNAL( requestFeatureView( Feature * ) ),
- SIGNAL( requestFeatureView( Feature * ) ) );
connect( this, SIGNAL( requestRemoveFeature( Feature * ) ),
mFeatureMap, SLOT( removeFeature( Feature * ) ) );
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fate-20170731-4baa429b/src/libfate/ui/featurelistview.h new/fate-20170814-415babab/src/libfate/ui/featurelistview.h
--- old/fate-20170731-4baa429b/src/libfate/ui/featurelistview.h 2017-07-31 10:53:53.789448668 +0200
+++ new/fate-20170814-415babab/src/libfate/ui/featurelistview.h 2017-08-14 13:32:09.681465554 +0200
@@ -237,9 +237,6 @@
~FeatureMapListView();
void setupActions(KActionCollection*);
- signals:
- void requestFeatureView(Feature *);
-
protected slots:
void updateFeature(Feature *f);
void queryDone();