Skip to content
Permalink
Browse files
Better fix for the issues raised in r5618 and r5626 - the selected it…
…em is now scrolled into view, even when the projection selector is being opened.

There still seems to be a slight issue when showing the Project Properties for the first time on a blank project (i.e. it scrolls *near* the WGS 84 entry, but not quite on top of it), but I'll leave that for another time.  Other situations now seem to work OK.



git-svn-id: http://svn.osgeo.org/qgis/trunk@5642 c8812cc2-4d05-0410-92ff-de0c093fc19c
  • Loading branch information
morb_au committed Jul 27, 2006
1 parent 44585e5 commit 4015a6fd36848025fbf35c6d9d7edc605fa5e06c
Showing with 35 additions and 40 deletions.
  1. +27 −40 src/widgets/projectionselector/qgsprojectionselector.cpp
  2. +8 −0 src/widgets/projectionselector/qgsprojectionselector.h
@@ -73,6 +73,17 @@ void QgsProjectionSelector::showEvent ( QShowEvent * theEvent )
applyUserProjList(&mCrsFilter);
}

// check if a paricular projection is waiting
// to be pre-selected, and if so, to select it now.
if (mSRSNameSelectionPending)
{
applySRSNameSelection();
}
if (mSRSIDSelectionPending)
{
applySRSIDSelection();
}

// Pass up the inheritance heirarchy
QWidget::showEvent(theEvent);
}
@@ -146,43 +157,33 @@ QString QgsProjectionSelector::ogcWmsCrsFilterAsSqlExpression(QSet<QString> * cr

void QgsProjectionSelector::setSelectedSRSName(QString theSRSName)
{
// ensure the projection list view is actually populated
// before we select from its contents

if (!mProjListDone)
{
applyProjList(&mCrsFilter);
}
mSRSNameSelection = theSRSName;
mSRSNameSelectionPending = TRUE;
mSRSIDSelectionPending = FALSE; // only one type can be pending at a time

if (!mUserProjListDone)
if (isVisible())
{
applyUserProjList(&mCrsFilter);
applySRSNameSelection();
}

mSRSNameSelection = theSRSName;
mSRSNameSelectionPending = TRUE;
applySRSNameSelection();
// else we will wait for the projection selector to
// become visible (with the showEvent()) and set the
// selection there
}


void QgsProjectionSelector::setSelectedSRSID(long theSRSID)
{
// ensure the projection list view is actually populated
// before we select from its contents

if (!mProjListDone)
{
applyProjList(&mCrsFilter);
}
mSRSIDSelection = theSRSID;
mSRSIDSelectionPending = TRUE;
mSRSNameSelectionPending = FALSE; // only one type can be pending at a time

if (!mUserProjListDone)
if (isVisible())
{
applyUserProjList(&mCrsFilter);
applySRSIDSelection();
}

mSRSIDSelection = theSRSID;
mSRSIDSelectionPending = TRUE;
applySRSIDSelection();
// else we will wait for the projection selector to
// become visible (with the showEvent()) and set the
// selection there
}


@@ -203,11 +204,6 @@ void QgsProjectionSelector::applySRSNameSelection()
if (nodes.count() > 0)
{
lstCoordinateSystems->setCurrentItem(nodes.first());

// The following seems to be broken in Qt 4.1.0:
// It only works if the widget is already visible.
// (Which makes it really hard to scroll to an
// item before you exec() the widget)
lstCoordinateSystems->scrollToItem(nodes.first());
}
else // unselect the selected item to avoid confusing the user
@@ -235,11 +231,6 @@ void QgsProjectionSelector::applySRSIDSelection()
if (nodes.count() > 0)
{
lstCoordinateSystems->setCurrentItem(nodes.first());

// The following seems to be broken in Qt 4.1.0:
// It only works if the widget is already visible.
// (Which makes it really hard to scroll to an
// item before you exec() the widget)
lstCoordinateSystems->scrollToItem(nodes.first());
}
else // unselect the selected item to avoid confusing the user
@@ -795,10 +786,6 @@ void QgsProjectionSelector::coordinateSystemSelected( QTreeWidgetItem * theItem)
myDescription+=(myProjString);
}

// The following seems to be broken in Qt 4.1.0:
// It only works if the widget is already visible.
// (Which makes it really hard to scroll to an
// item before you exec() the widget)
lstCoordinateSystems->scrollToItem(theItem);
teProjection->setText(myDescription);
}
@@ -127,6 +127,10 @@ class QgsProjectionSelector: public QWidget, private Ui::QgsProjectionSelectorBa
*
* \warning This function does nothing unless getUserList() and getUserProjList()
* Have already been called
*
* \warning This function only expands the parents of the selection and
* does not scroll the list to the selection if the widget is not visible.
* Therefore you will typically want to use this in a showEvent().
*/
void applySRSNameSelection();

@@ -135,6 +139,10 @@ class QgsProjectionSelector: public QWidget, private Ui::QgsProjectionSelectorBa
*
* \warning This function does nothing unless getUserList() and getUserProjList()
* Have already been called
*
* \warning This function only expands the parents of the selection and
* does not scroll the list to the selection if the widget is not visible.
* Therefore you will typically want to use this in a showEvent().
*/
void applySRSIDSelection();

0 comments on commit 4015a6f

Please sign in to comment.