Skip to content

Commit

Permalink
improved legend checkbox handling in case of several QgsLegendLayerFi…
Browse files Browse the repository at this point in the history
…les in one QgsLegendLayer

git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@4344 c8812cc2-4d05-0410-92ff-de0c093fc19c
  • Loading branch information
mhugent committed Dec 15, 2005
1 parent 9baf4e6 commit bf7d5e2
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 21 deletions.
52 changes: 41 additions & 11 deletions src/legend/qgslegend.cpp
Expand Up @@ -1287,6 +1287,27 @@ void QgsLegend::handleItemChange(QTreeWidgetItem* item, int row)
{
bool checked = (item->checkState(0) == Qt::Checked);
theLayer->setVisible(checked);
//todo: check, how the checkbox of the legendlayer needs to be updated
QgsLegendLayer* ll = dynamic_cast<QgsLegendLayer*>(item->parent()->parent());
std::list<QgsLegendLayerFile*> llfiles = ll->legendLayerFiles();
std::list<QgsLegendLayerFile*>::iterator iter = llfiles.begin();
Qt::CheckState theState = (*iter)->checkState(0);
for(; iter != llfiles.end(); ++iter)
{
if(theState != (*iter)->checkState(0))
{
theState = Qt::PartiallyChecked;
break;
}
}
//and update the checkbox of the legendlayer if necessary
if(theState != ll->checkState(0));
{
blockSignals(true);
ll->setCheckState(0, theState);
mStateOfCheckBoxes[ll] = theState;
blockSignals(false);
}
}
mStateOfCheckBoxes[item] = item->checkState(0);
}
Expand All @@ -1300,22 +1321,31 @@ void QgsLegend::handleItemChange(QTreeWidgetItem* item, int row)
#ifdef QGISDEBUG
qWarning("item is a QgsLegendLayer");
#endif
bool checked = (item->checkState(0) == Qt::Checked);
std::list<QgsLegendLayerFile*> llflist = ll->legendLayerFiles();
mMapCanvas->setRenderFlag(false);
for(std::list<QgsLegendLayerFile*>::iterator it = llflist.begin(); it != llflist.end(); ++it)
std::map<QTreeWidgetItem*, Qt::CheckState>::iterator it = mStateOfCheckBoxes.find(item);
if(it != mStateOfCheckBoxes.end())
{
if(checked)
{
(*it)->setCheckState(0, Qt::Checked);
}
else
if(it->second != item->checkState(0)) //the checkState has changed
{
(*it)->setCheckState(0, Qt::Unchecked);
bool checked = (item->checkState(0) == Qt::Checked);
std::list<QgsLegendLayerFile*> llflist = ll->legendLayerFiles();
mMapCanvas->setRenderFlag(false);
//go through all the legendlayerfiles and set their checkState
for(std::list<QgsLegendLayerFile*>::iterator it = llflist.begin(); it != llflist.end(); ++it)
{
if(checked)
{
(*it)->setCheckState(0, Qt::Checked);
mStateOfCheckBoxes[(*it)] = Qt::Checked;
}
else
{
(*it)->setCheckState(0, Qt::Unchecked);
mStateOfCheckBoxes[(*it)] = Qt::Unchecked;
}
}
}
}
mMapCanvas->setRenderFlag(true);

}
}

Expand Down
4 changes: 2 additions & 2 deletions src/legend/qgslegendgroup.cpp
Expand Up @@ -30,7 +30,7 @@ QgsLegendGroup::QgsLegendGroup(QTreeWidgetItem * theItem ,QString theName)
#else
QString pkgDataPath(PKGDATAPATH);
#endif
setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled);
setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
QIcon myIcon(pkgDataPath+QString("/images/icons/folder.png"));
setIcon(0, myIcon);
}
Expand All @@ -43,7 +43,7 @@ QgsLegendGroup::QgsLegendGroup(QTreeWidget* theListView, QString theString)
#else
QString pkgDataPath(PKGDATAPATH);
#endif
setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled);
setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
QIcon myIcon(pkgDataPath+QString("/images/icons/folder.png"));
setIcon(0, myIcon);
}
Expand Down
4 changes: 0 additions & 4 deletions src/legend/qgslegenditem.cpp
Expand Up @@ -32,9 +32,7 @@ QgsLegendItem::QgsLegendItem(QTreeWidgetItem * theItem ,QString theName)
#else
QString pkgDataPath(PKGDATAPATH);
#endif
QIcon myIcon(pkgDataPath+QString("/images/icons/group.png"));
setText(0, theName);
setIcon(0,myIcon);
}

QgsLegendItem::QgsLegendItem(QTreeWidget* theListView,QString theString)
Expand All @@ -45,9 +43,7 @@ QgsLegendItem::QgsLegendItem(QTreeWidget* theListView,QString theString)
#else
QString pkgDataPath(PKGDATAPATH);
#endif
QIcon myIcon(pkgDataPath+QString("/images/icons/group.png"));
setText(0, theString);
setIcon(0,myIcon);
}

QgsLegendItem::QgsLegendItem(): QTreeWidgetItem()
Expand Down
6 changes: 3 additions & 3 deletions src/legend/qgslegendlayer.cpp
Expand Up @@ -33,7 +33,7 @@ QgsLegendLayer::QgsLegendLayer(QTreeWidgetItem* parent,QString name)
#else
QString pkgDataPath(PKGDATAPATH);
#endif
setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
setFlags(Qt::ItemIsEditable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
QIcon myIcon(pkgDataPath+QString("/images/icons/layer.png"));
setCheckState (0, Qt::Checked);
setText(0, name);
Expand All @@ -48,7 +48,7 @@ QgsLegendLayer::QgsLegendLayer(QTreeWidget* parent, QString name): QObject(), Qg
#else
QString pkgDataPath(PKGDATAPATH);
#endif
setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
setFlags(Qt::ItemIsEditable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
setCheckState (0, Qt::Checked);
QIcon myIcon(pkgDataPath+QString("/images/icons/layer.png"));
setText(0, name);
Expand All @@ -63,7 +63,7 @@ QgsLegendLayer::QgsLegendLayer(QString name): QObject(), QgsLegendItem()
#else
QString pkgDataPath(PKGDATAPATH);
#endif
setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
setFlags(Qt::ItemIsEditable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
setCheckState (0, Qt::Checked);
QIcon myIcon(pkgDataPath+QString("/images/icons/layer.png"));
setText(0, name);
Expand Down
2 changes: 1 addition & 1 deletion src/legend/qgslegendlayerfile.cpp
Expand Up @@ -42,7 +42,7 @@ QgsLegendLayerFile::QgsLegendLayerFile(QTreeWidgetItem * theLegendItem, QString
p.drawPixmap(0,0,inOverviewPixmap);
}
QIcon originalIcon(originalPixmap);
setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
setCheckState (0, Qt::Checked );
setText(0, theString);
setIcon(0, originalIcon);
Expand Down

0 comments on commit bf7d5e2

Please sign in to comment.