43    setWindowTitle(
"Grid Options");
 
   45    QGridLayout *mainLayout = 
new QGridLayout;
 
   46    setLayout(mainLayout);
 
   50    QString showGridWhatsThis =
 
   51        "Check or uncheck to draw or clear the grid.";
 
   52    QLabel *showGridLabel = 
new QLabel(
"&Show Grid");
 
   53    showGridLabel->setWhatsThis(showGridWhatsThis);
 
   54    mainLayout->addWidget(showGridLabel, row, 0, 1, 2);
 
   64    QString autoGridWhatsThis =
 
   65        "Draws a grid based on the current lat/lon extents (from the cubes, map, or user).";
 
   66    QLabel *autoGridLabel = 
new QLabel(
"Auto &Grid");
 
   67    autoGridLabel->setWhatsThis(autoGridWhatsThis);
 
   68    mainLayout->addWidget(autoGridLabel, row, 0, 1, 2);
 
   78    QString baseLatWhatsThis =
 
   79        "The origin for the first latitude line. The first line of the grid " 
   80        "will be drawn at the base latitude. Successive latitude lines will " 
   81        "then be drawn relative to base latitude at an increment defined by " 
   82        "the latitude increment. Base latitude can be outside the range of " 
  106    QString baseLonWhatsThis =
 
  107        "The origin for the first longitude line. The first line of the grid" 
  108        " will be drawn at the base longitude. Successive longitude lines will" 
  109        " then be drawn relative to base longitude at an increment defined by" 
  110        " the longitude increment. Base longitude can be outside the range of" 
  134    QString latIncWhatsThis =
 
  135        "The latitude increment is how often a line is drawn as the latitude " 
  136        "values change. A latitude increment of 45 will result in a line at " 
  137        "latitude = -90, -45, 0, 45, 90 for the entire longitude range.";
 
  160    QString lonIncWhatsThis =
 
  161        "The longitude increment is how often a line is drawn as the longitude " 
  162        "values change. A longitude increment of 180 will result in a line at " 
  163        "longitude = 0, 180, 360 for the entire latitude range.";
 
  185    mainLayout->setRowMinimumHeight(row, 10);
 
  188    QString latExtentWhatsThis =
 
  189        "The longitude range determines the extents of the grid. The \"Read Map File\" option will " 
  190        "derive the extents from the loaded map's projection. The \"Compute From Images\" option " 
  191        "will use the ranges covered by the open cubes. The \"Manual\" option allows you to enter " 
  192        "values of your choice.";
 
  201    m_latExtentCombo->setCurrentIndex(m_latExtentCombo->findData(m_tool->latExtents()));
 
  202    m_latExtentCombo->setWhatsThis(latExtentWhatsThis);
 
  203    connect(m_latExtentCombo, SIGNAL(currentIndexChanged(
int)),
 
  205    mainLayout->addWidget(m_latExtentCombo, row, 2, 1, 2);
 
  206    m_latExtentTypeLabel = 
new QLabel(m_tool->latType());
 
  207    mainLayout->addWidget(m_latExtentTypeLabel, row, 4, 1, 1);
 
  211    QString minLatWhatsThis =
 
  212        "The minimum latitude will be the lower edge of the grid. This parameter currently " 
  213        "expects degree input.";
 
  231    m_minLatExtentTypeLabel = 
new QLabel(
"Degrees");
 
  232    mainLayout->addWidget(m_minLatExtentTypeLabel, row, 4, 1, 1);
 
  235    QString maxLatWhatsThis =
 
  236        "The maximum latitude will be the upper edge of the grid. This parameter currently " 
  237        "expects degree input.";
 
  255    m_maxLatExtentTypeLabel = 
new QLabel(
"Degrees");
 
  256    mainLayout->addWidget(m_maxLatExtentTypeLabel, row, 4, 1, 1);
 
  258    mainLayout->setRowMinimumHeight(row, 10);
 
  261    QString lonExtentWhatsThis =
 
  262        "The longitude range determines the extents of the grid. The \"<b>Read Map File</b>\" " 
  263        "option will derive the extents from the loaded map's projection. The" 
  264        "\"Compute From Images\" option will use the ranges covered by the open cubes. The " 
  265        "\"Manual\" option allows you to enter " 
  266        "values of your choice. The domain is that of the map projection.";
 
  276    m_lonExtentCombo->setCurrentIndex(m_lonExtentCombo->findData(m_tool->lonExtents()));
 
  277    m_lonExtentCombo->setWhatsThis(lonExtentWhatsThis);
 
  278    connect(m_lonExtentCombo, SIGNAL(currentIndexChanged(
int)),
 
  280    mainLayout->addWidget(m_lonExtentCombo, row, 2, 1, 2);
 
  286    QString minLonWhatsThis =
 
  287        "The maximum longitude will be the left edge of the grid. This parameter currently " 
  288        "expects degree input.";
 
  306    m_minLonExtentTypeLabel = 
new QLabel(
"Degrees");
 
  307    mainLayout->addWidget(m_minLonExtentTypeLabel, row, 4, 1, 1);
 
  310    QString maxLonWhatsThis =
 
  311        "The maximum longitude will be the right edge of the grid. This parameter currently " 
  312        "expects degree input.";
 
  330    m_maxLonExtentTypeLabel = 
new QLabel(
"Degrees");
 
  331    mainLayout->addWidget(m_maxLonExtentTypeLabel, row, 4, 1, 1);
 
  333    mainLayout->setRowMinimumHeight(row, 10);
 
  336    QString densityWhatsThis =
 
  337        "The density is the estimated total number of straight lines used " 
  338        "to create the grid. Increasing this number will significantly slow " 
  339        "down the drawing of the grid while making curves more accurate. If " 
  340        "the grid does not look accurate then try increasing this number.";
 
  346    m_densityEdit->setValidator(
new QIntValidator(1, INT_MAX, 
this));
 
  352    mainLayout->setRowMinimumHeight(row, 10);
 
  355    QHBoxLayout *buttonsAreaLayout = 
new QHBoxLayout;
 
  356    mainLayout->addLayout(buttonsAreaLayout, row, 0, 1, 4);
 
  358    QString autoApplyWhatsThis =
 
  359        "Automatically updates the grid when parameters are changed.";
 
  364    buttonsAreaLayout->addStretch();
 
  366    QPushButton *okayButton = 
new QPushButton(
"&Ok");
 
  367    okayButton->setIcon(QIcon::fromTheme(
"dialog-ok"));
 
  368    connect(okayButton, SIGNAL(clicked()),
 
  370    connect(okayButton, SIGNAL(clicked()),
 
  371            this, SLOT(accept()));
 
  372    buttonsAreaLayout->addWidget(okayButton);
 
  374    QPushButton *applyButton = 
new QPushButton(
"&Apply");
 
  375    applyButton->setIcon(QIcon::fromTheme(
"dialog-ok-apply"));
 
  376    connect(applyButton, SIGNAL(clicked()),
 
  378    buttonsAreaLayout->addWidget(applyButton);
 
  380    QPushButton *cancelButton = 
new QPushButton(
"&Cancel");
 
  381    cancelButton->setIcon(QIcon::fromTheme(
"dialog-cancel"));
 
  382    connect(cancelButton, SIGNAL(clicked()),
 
  383            this, SLOT(reject()));
 
  384    buttonsAreaLayout->addWidget(cancelButton);
 
  386    connect(m_tool, SIGNAL(boundingRectChanged()), 
this, SLOT(
readSettings()));
 
 
  409      QValidator::State validBaseLat =
 
  411      if (validBaseLat != QValidator::Acceptable) {
 
  413              "Base Latitude value must be in the range -90 to 90",
 
  420    QValidator::State validBaseLon =
 
  422    if (validBaseLon != QValidator::Acceptable) {
 
  424          "Base Longitude value must be a double",
 
  430    QValidator::State validLatInc = 
m_latIncLineEdit->validator()->validate(latitudeInc,
 
  432    if (validLatInc != QValidator::Acceptable) {
 
  434          "Latitude increment must be in the range 0 to 180",
 
  440    QValidator::State validLonInc =
 
  442    if (validLonInc != QValidator::Acceptable) {
 
  444          "Longitude increment must be a double",
 
  450    QValidator::State validMinLatExtent =
 
  452    if (validMinLatExtent != QValidator::Acceptable) {
 
  454          "Minimum latitude extent must be a double",
 
  460    QValidator::State validMaxLatExtent =
 
  462    if (validMaxLatExtent != QValidator::Acceptable) {
 
  464          "Maximum latitude extent must be a double",
 
  470    QValidator::State validMinLonExtent =
 
  472    if (validMinLonExtent != QValidator::Acceptable) {
 
  474          "Minimum longitude extent must be a double",
 
  480    QValidator::State validMaxLonExtent =
 
  482    if (validMaxLonExtent != QValidator::Acceptable) {
 
  484          "Maximum longitude extent must be a double",
 
  490    QValidator::State validDensity =
 
  492    if (validDensity != QValidator::Acceptable) {
 
  494          "Density must be a non-zero positive integer",
 
  498    if (m_tool->sceneWidget()->getProjection()) {
 
  499      PvlGroup mapGroup(m_tool->sceneWidget()->getProjection()->Mapping());
 
  510          m_latExtentCombo->itemData(m_latExtentCombo->currentIndex()).toInt(),
 
  514          m_lonExtentCombo->itemData(m_lonExtentCombo->currentIndex()).toInt(),
 
  518      m_tool->setDensity(density.toInt());
 
  527      if (shouldReadSettings)
 
 
  612    bool enabled = m_tool->sceneWidget()->getProjection();
 
  616        m_latExtentCombo->itemData(m_latExtentCombo->currentIndex()).toInt() ==
 
  619        m_lonExtentCombo->itemData(m_lonExtentCombo->currentIndex()).toInt() ==
 
  659    m_latExtentCombo->setEnabled(showGrid);
 
  660    m_latExtentTypeLabel->setEnabled(showGrid);
 
  669    m_minLatExtentTypeLabel->setEnabled(enableLatExtents);
 
  678    m_maxLatExtentTypeLabel->setEnabled(enableLatExtents);
 
  681    m_lonExtentCombo->setEnabled(showGrid);
 
  686                                   m_tool->domainMaxLon().degrees());
 
  692    m_minLonExtentTypeLabel->setEnabled(enableLonExtents);
 
  696                                   m_tool->domainMaxLon().degrees());
 
  702    m_maxLonExtentTypeLabel->setEnabled(enableLonExtents);
 
  718      if (timer.elapsed() > 250) {