Пример #1
0
// =======================================================
int CInterfaceNewt::askLogin(char *szLogin, char *szPasswd, WORD size)
{
  newtComponent editLoginText;
  newtComponent editPasswdText;
  newtComponent labelLoginText;
  newtComponent labelPasswdText;

  newtComponent form;
  newtComponent btnOk;
  newtComponent btnCancel;
  newtComponent temp;
 
  int nOk = 0; 
  
  while (!nOk)
    {
      newtCenteredWindow(65, 20, i18n("Password required"));
      
      labelLoginText = newtTextbox(1, 5, 60, 1, 0);
      newtTextboxSetText(labelLoginText, i18n("Enter your login"));
      editLoginText = newtEntry(1, 6, "", 55, NULL, NEWT_ENTRY_SCROLL);

      labelPasswdText = newtTextbox(1, 9, 60, 1, 0);
      newtTextboxSetText(labelPasswdText, i18n("Enter your password"));
      editPasswdText = newtEntry(1, 10, "", 55, NULL, NEWT_FLAG_HIDDEN);

      btnOk = newtButton(15, 14, i18n("Ok"));
      btnCancel = newtButton(40, 14, i18n("Cancel"));
      
      form = newtForm(NULL, NULL, 0);
      newtFormAddComponents(form, labelLoginText, editLoginText, 
         labelPasswdText, editPasswdText, btnOk, btnCancel, NULL);
      
      temp = newtRunForm(form);
      newtPopWindow();	
      if (temp == btnCancel)
	{	
	  newtFormDestroy(form);
	  RETURN_int(-1);
	}
      
      strncpy(szLogin, newtEntryGetValue(editLoginText), size-1);
      *(szLogin+size-1) = '\0';
      strncpy(szPasswd, newtEntryGetValue(editPasswdText), size-1);
      *(szPasswd+size-1) = '\0';
      
      if (!(*szLogin) || !(*szPasswd))
	msgBoxError(i18n("Text cannot be empty"));
      else
        nOk = 1;
      
      newtFormDestroy(form);
    }
  
  return 0;
}
Пример #2
0
bool CEphList::showNoObjectSelected(int obj)
{
  if (obj < 0)
  {
    msgBoxError(this, tr("No object selected!!!"));
    return false;
  }

  return true;
}
Пример #3
0
// =======================================================
int CInterfaceNewt::askText(char *szMessage, char *szTitle, char *szDestText, WORD size)
{
  newtComponent editText;
  newtComponent labelText;
  newtComponent form;
  newtComponent btnOk;
  newtComponent btnCancel;
  newtComponent temp;
  
  *szDestText = 0;
  
  while (!*szDestText)
    {
      newtCenteredWindow(65, 20, szTitle);
      
      labelText = newtTextbox(1, 1, 60, 7, 0/*NEWT_TEXTBOX_SCROLL*/);
      newtTextboxSetText(labelText, szMessage);
      
      editText = newtEntry(1, 9, "", 55, NULL, NEWT_ENTRY_SCROLL);
      btnOk = newtButton(15, 14, i18n("Ok"));
      btnCancel = newtButton(40, 14, i18n("Cancel"));
      
      form = newtForm(NULL, NULL, 0);
      newtFormAddComponents(form, labelText, editText, btnOk, btnCancel, NULL);
      
      temp = newtRunForm(form);
      newtPopWindow();	
      if (temp == btnCancel)
	{	
	  newtFormDestroy(form);
	  RETURN_int(-1);
	}
      
      strncpy(szDestText, newtEntryGetValue(editText), size-1);
      *(szDestText+size-1) = '\0';
      
      if (*szDestText == 0)
	msgBoxError(i18n("Text cannot be empty"));
      
      newtFormDestroy(form);
    }
  
  return 0;
}
Пример #4
0
// ============================================================================
WORD CInterface::Error(CExceptions *excep, char *szFilename, char *szDevice/*=NULL*/)
{
  signed int err;
  DWORD dwArg1 = excep -> get_dwArg1();
  DWORD dwArg2 = excep -> get_dwArg2();
  //QWORD qwArg1 = excep -> get_qwArg1();
  //QWORD qwArg2 = excep -> get_qwArg2();
  char * szArg1 = excep -> get_szArg1();

  err = excep -> GetExcept();
  excep -> setCaught();
 
  if (err >= 0)
    {
      msgBoxError(i18n("Error: %s"), strerror(err));
      return ERR_QUIT;
    }

  switch (err)
    {
    case ERR_CANCELED:
      msgBoxError(i18n("Action canceled as user required"));
      return ERR_QUIT; 
    case ERR_ERRNO:
      msgBoxError(i18n("Error: %s"), strerror(dwArg1));
      return ERR_QUIT;
    case ERR_EXIST: 
      if (msgBoxYesNo(i18n("Overwrite image?"), i18n("The %s imagefile already exist. Do you want to overwrite it?"), 
		      szFilename) == MSGBOX_NO)
	return ERR_QUIT;
      else
	return ERR_RETRY;
      
    case ERR_ACCESS:
      msgBoxCancel(i18n("Access denied"), i18n("You don't have write access on %s"), szFilename);
      return ERR_QUIT;

    case ERR_COMP:
      msgBoxError(i18n("Invalid compression level for %s"), szFilename);
      return ERR_QUIT;

    case ERR_OPENED:
      msgBoxError(i18n("imagefile %s is already open"), szFilename);
      return ERR_QUIT;

    case ERR_EOF:
    case ERR_NOTFOUND:
    case ERR_PATH:
      // no code here
      return ERR_RETRY;

    case ERR_VOLUMEHEADER:
      msgBoxError(i18n("file %s is too short to be a partimage volume: "
		       "can't read header"), szFilename);
      return ERR_QUIT;

      /*case ERR_PARTITIONVOLUME:
        msgBoxError(i18n("file %s is not an partimage volume: "
	"magic string does not match"), szFilename);
        return ERR_QUIT;*/

    case ERR_WRONGMAGICINVALIMGFILE:// ERR_WRONGMAGIC:
      msgBoxError(i18n("file %s is not an partimage file: "
		       "magic string does not match"), szFilename);
      return ERR_QUIT;

    case ERR_WRONGMAGIC:
      msgBoxError(i18n("magic string does not match: error in the image file [%s]"), szFilename);
      return ERR_QUIT;

    case ERR_VOLUMEID:
      msgBoxError(i18n("the current volume doesn't fit with current image: "
		       "wrong identificator"));
      return ERR_QUIT;
      
    case ERR_NOMEM:
      msgBoxError(i18n("Out of memory."));
      return ERR_QUIT;

    case ERR_PASSWD:
      msgBoxError(i18n("incorrect password or user not in partimagedusers file"));
      return ERR_QUIT;

    case ERR_TOOMANY:
      msgBoxError(i18n("Too many clients connected to partimaged. "
		       "Please, retry later"));
      return ERR_QUIT;

    case ERR_BLOCKSIZE:
      msgBoxError(i18n("Only 4096 bytes per block %s volumes are supported. "
		       "Current one is %lu bytes/block"), szArg1, dwArg1);
      return ERR_QUIT;
    
    case ERR_LOCKED:
      msgBoxError(i18n("The partition %s id already locked by another"
		       "process. You can't work on it"), szArg1);
      return ERR_QUIT;

    case ERR_CHECK_CRC:
      ErrorCRC(excep->get_qwArg1(), excep->get_qwArg2());
      return ERR_QUIT;

    case ERR_CHECK_NUM:
      msgBoxError(i18n("Error while checking the data: Invalid block number."
		       "Maybe a volume or some data were skipped."));
      return ERR_QUIT;

    case ERR_VOLUMENUMBER:
      msgBoxError(i18n("This volume (%ld) is not the expected one: %ld."),
		  dwArg1, dwArg2);
      return ERR_QUIT;

    case ERR_HOST:
	msgBoxError(i18n("Hostname/IP Error!\n"
			 "Perhaps the hostname could not be resolved. "
			 "(Try again using IP address)"));
      return ERR_RETRY;

      /*
	case ERR_SSL_CONNECT:
        msgBoxError(i18n("Problem with SSL. Ensure partimaged uses SSL"));
        return ERR_QUIT;

	case ERR_SSL_CTX:
        msgBoxError(i18n("Problem with SSL. Contact partimage team for help"));
        return ERR_QUIT;

	case ERR_SSL_LOADCERT:
        msgBoxError(
	i18n("partimaged got trouble when loading SSL certificate %s"),CERTF);
        return ERR_QUIT;

	case ERR_SSL_LOADKEY:
        msgBoxError(
	i18n("partimaged got trouble when loading SSL keyfile %s"),CERTF);
        return ERR_QUIT;

	case ERR_SSL_PRIVKEY:
        msgBoxError("%s %s", i18n("SSL error: private key doesn't not match"),
	i18n("the certificate public key"));
        return ERR_QUIT;
      */

    case ERR_READ_BITMAP:
      ErrorReadingBitmap(dwArg1, dwArg2);
      return ERR_QUIT;
    case ERR_READING:
      ErrorReading(dwArg1, dwArg2);
      return ERR_QUIT;
    case ERR_WRITING: 
      ErrorWriting(dwArg1, dwArg2);
      return ERR_QUIT;
    case ERR_NOMBR:
      msgBoxError(i18n("No MBR was found in this imagefile. We can't "
		       "continue"));
      return ERR_QUIT;
    case ERR_FSCHK:
      msgBoxError(i18n("Partition checks found error(s) on partitions"));
      return ERR_QUIT;
    case ERR_OPENING_DEVICE:
      ErrorOpeningPartition(szFilename, dwArg1);
      return ERR_QUIT;
    case ERR_ENCRYPT:
      ErrorEncryption();
      return ERR_QUIT;
    case ERR_PART_TOOSMALL:
      //showDebug(1, "QW1=%llu and 2=%llu\n\n", qwArg1, qwArg2);
      ErrorTooSmall(excep->get_qwArg1(), excep->get_qwArg2());
      return ERR_QUIT;
    case ERR_FAT_MISMATCH:
      return ERR_QUIT;
    case ERR_SAVE_MBR:
      msgBoxError(i18n("Impossible to read MBR from disk")); 
      return ERR_QUIT;
    case ERR_WRONG_FS: 
      msgBoxError(i18n("Invalid or damaged filesystem %s"), szDevice); 
      return ERR_QUIT;
    case ERR_READ_SUPERBLOCK:
      ErrorReadingSuperblock(dwArg1);
      return ERR_QUIT;
    case ERR_ZEROING:
      msgBoxError(i18n("Impossible to zero the block on harddrive: %s"),
		  strerror(dwArg1));
      return ERR_QUIT;
    case ERR_REFUSED:
      msgBoxError(i18n("Connection refused by server:"
		       " incompatibles networking options."
                       "Try disabling login option for server with '-L'"));
      return ERR_QUIT;
    case ERR_VERSIONSMISMATCH:
      msgBoxError(i18n("Connection refused by server: versions mismatch"));
      return ERR_QUIT;

    case ERR_VERSION_NEWER:
      msgBoxError(i18n("The image file was created by a newer release (%s)" 
		       " of Partition Image. Please update this software and retry."),
		  szArg1);
      return ERR_QUIT;
    case ERR_VERSION_OLDER:
      msgBoxError(i18n("The image file was created by an older release (%s)" 
		       " of Partition Image. You must use the old version to restore"
		       "your image or you have to recreate it with current version"),
		  szArg1);
      return ERR_QUIT;

    case ERR_NOTAPARTIMAGEFILE:
      msgBoxError(i18n("%s is not a valid Partition Image file or it's"
		       " damaged. Sorry, can't continue"), szArg1);
      return ERR_QUIT;

    case ERR_NOTAREGULARFILE:
      msgBoxError(i18n("File %s is not a regular file. For security reasons,"
		       " we can't continue"), szArg1);
      return ERR_QUIT;

    case ERR_AUTOMOUNT:
      msgBoxError(i18n("Cannot mount %s"), szArg1 /*m_szMountDevice*/);
      return ERR_QUIT;

    case ERR_AUTOUMOUNT:
      msgBoxError(i18n("Cannot unmount %s"), szArg1 /*m_szMountDevice*/);
      return ERR_QUIT;

    case ERR_CREATESPACEFILE:
      msgBoxError(i18n("Cannot create temp file [%s]. Please, check there is space enough and you have access rights."), szArg1);
      return ERR_QUIT; 

    case ERR_CREATESPACEFILENOSPC:
      msgBoxError(i18n("Cannot create temp file [%s]. No space left on device."), szArg1);
      return ERR_QUIT; 

    case ERR_CREATESPACEFILEDENIED:
#ifdef MUST_CHEUID
      msgBoxError(i18n("Cannot create temp file in [%s]. Write access is denied"
         " for user 'partimag'"), szArg1);
#else
      msgBoxError(i18n("Cannot create temp file in [%s]. Write access is denied."), szArg1);
#endif
      return ERR_QUIT; 

    case ERR_FILETOOLARGE:
      msgBoxError(i18n("File too large. (larger than 2 GB). Can't continue. This problem can come from the kernel, the glibc, the file system which where the image is written"));
      return ERR_QUIT;       

    default:
      msgBoxError(i18n("Unknown error %d -> %s"), err, szFilename);
      exit(-5);
    }
}
Пример #5
0
// =======================================================
int CInterfaceNewt::guiInitMainWindow(char *szDevice, char *szImageFile, char *szNetworkIP, DWORD *dwServerPort, bool *bSsl)
{
  newtComponent formMain, btnContinue, btnExit, btnAbout;
  newtComponent labelPartition, labelImage, editPartition, editImage, btnImage;
  newtComponent widgetTemp, labelAction, radioSave, radioRestore, radioMbr;
  newtComponent checkNetwork, labelNetwork, labelPort, editNetwork, editPort, checkSsl;
  newtExitStruct event;
  char szTemp[1024];
  int nAction;
  int nRes;

  showDebug(8, "guiInitMainWindow\n");
  
  SNPRINTF(szTemp, "Partition Image %s", PACKAGE_VERSION);
  newtCenteredWindow(67, 20, szTemp);
  
  labelPartition = newtLabel(1, 0, i18n("* Partition to save/restore"));
  editPartition = newtListbox(3, 1, 7, NEWT_FLAG_SCROLL);
  labelImage = newtLabel(1, 9, i18n("* Image file to create/use"));
  editImage = newtEntry(3, 10, szImageFile, 59, NULL, NEWT_FLAG_SCROLL);
  btnImage = newtCompactButton(62, 10, "*");

  labelAction = newtLabel(1, 12, i18n("Action to be done:"));
  radioSave = newtRadiobutton(1, 13, i18n("Save partition into a new image file"), true, NULL);
  radioRestore = newtRadiobutton(1, 14, i18n("Restore partition from an image file"), false, radioSave);
  radioMbr = newtRadiobutton(1, 15, i18n("Restore an MBR from the image file"), false, radioRestore);
  
  checkNetwork = newtCheckbox(1, 17, i18n("Connect to server"), (!!(*szNetworkIP) ? 'X' : ' '), " X", NULL);
#ifdef HAVE_SSL
  checkSsl = newtCheckbox(5, 19, i18n("Encrypt data on the network with SSL"), (*bSsl ? 'X' : ' '), " X", NULL);
#else
  #ifdef MUST_LOGIN
    checkSsl = newtLabel(5, 19,i18n("SSL disabled at compile time"));
  #else
    checkSsl = newtLabel(5, 19,i18n("SSL&login disabled at compile time"));
  #endif
#endif
  labelNetwork = newtLabel(5, 18, i18n("IP/name of the server:"));
  editNetwork = newtEntry(28, 18, szNetworkIP, 25, NULL, 0);
  labelPort = newtLabel(54, 18, i18n("Port:"));
  SNPRINTF(szTemp, "%u", *dwServerPort);
  editPort = newtEntry(60, 18, szTemp, 6, NULL, 0);
  
  btnContinue = newtCompactButton(50, 12, i18n("Next (F5)"));
  btnAbout = newtCompactButton(50, 14, i18n("About"));
  btnExit = newtCompactButton(50, 16, i18n("Exit (F6)"));

  nRes = fillPartitionList(editPartition);
  if (nRes == -1)
    RETURN_int(-1);
  
  formMain = newtForm(NULL, NULL, 0);
  newtFormAddComponents(formMain, labelPartition, labelImage, editPartition, editImage,
                        btnImage, labelAction, radioSave, radioRestore, radioMbr, checkNetwork,
			labelNetwork, editNetwork, labelPort, editPort, checkSsl, 
			btnContinue, btnAbout, btnExit, NULL);
  newtFormAddHotKey(formMain, KEY_EXIT); // Exit
  newtFormAddHotKey(formMain, KEY_OKAY); // Okay

 begin:
  /*widgetTemp = */newtFormRun(formMain, &event);
  widgetTemp = newtFormGetCurrent(formMain);

  if (((event.reason == event.NEWT_EXIT_HOTKEY) && (event.u.key == KEY_EXIT)) || ((event.reason == event.NEWT_EXIT_COMPONENT) && (widgetTemp == btnExit))) 
  //if(widgetTemp == btnExit)
    return OPERATION_EXIT;

  if ((event.reason == event.NEWT_EXIT_COMPONENT) && (widgetTemp == btnAbout))
    {	
      showAboutDialog();
      goto begin;
    }

  if ((event.reason == event.NEWT_EXIT_COMPONENT) && (widgetTemp == btnImage))
    {	
      char *fs_;
      fs_=filesel(newtEntryGetValue(editImage));
      if(fs_) {
        newtEntrySet(editImage, fs_, 1);
//        free(fs_);
        }
      
      goto begin;
    }

  
  if (strcmp(newtEntryGetValue(editImage), "") == 0) // if "image" field empty
    {	
      msgBoxError(i18n("The \"Image\" field is empty. Cannot continue"));
      goto begin;
    }
  
  if (newtCheckboxGetValue(checkNetwork) == 'X')
    {
      if (!(*newtEntryGetValue(editNetwork)))	
	{
	  msgBoxError(i18n("The \"Server IP/Name\" field is empty. Cannot continue"));
	  goto begin;
	}
      
      if (!atoi((char*)newtEntryGetValue(editPort)))
	{
	  msgBoxError(i18n("The \"Server Port\" field is not a valid integer. Cannot continue"));
	  goto begin;
	}
      
    }
  
  // get device
  strcpy(szDevice, (char*)newtListboxGetCurrent(editPartition));
  
  // image file
  strcpy(szImageFile, newtEntryGetValue(editImage));
  
  // network
  if (newtCheckboxGetValue(checkNetwork) == 'X') // If network is activated
    {
      strcpy(szNetworkIP, (char*)newtEntryGetValue(editNetwork));
      *dwServerPort = atoi((char*)newtEntryGetValue(editPort));
#ifdef HAVE_SSL
      *bSsl = (newtCheckboxGetValue(checkSsl) == 'X');
#endif
    }
  else // no network
    {
      *szNetworkIP = 0;
      *dwServerPort = OPTIONS_DEFAULT_SERVERPORT;	
    }
  
  nAction = 0;
  
  if (newtRadioGetCurrent(radioRestore) == radioSave)
    {	
      nAction = OPERATION_SAVE;
    }
  else if (newtRadioGetCurrent(radioRestore) == radioRestore)
    {
      nAction = OPERATION_RESTORE;
    }
  else if (newtRadioGetCurrent(radioRestore) == radioMbr)
    {
      nAction = OPERATION_RESTMBR;
    }
  
  newtFormDestroy(formMain);
  newtPopWindow();
  
  return nAction;
}
Пример #6
0
// =======================================================
void CInterfaceNewt::showErrorInternal(const char *szText)
{
  msgBoxError(szText);
}
Пример #7
0
void CEphList::on_pushButton_4_clicked()
////////////////////////////////////////
{
  QList <int> columns;
  QStringList strCol;
  int         obj;
  int         type;
  bool        isUT;
  double      tz;
  double      jdFrom;
  double      jdTo;
  double      step = 1;
  QString     name;
  QListWidgetItem *com;

  QList  <tableRow_t> rows;

  for (int i = 0; i < EL_COLUMN_COUNT; i++)
  {
    QListWidgetItem *item = ui->listWidget_2->item(i);

    if (item->checkState() == Qt::Checked && (item->flags() & Qt::ItemIsEnabled))
    {
      columns.append(item->data(Qt::UserRole + 1).toInt());
    }
  }

  if (columns.count() == 0)
  {
    msgBoxError(this, tr("There is no selected column!!!"));
    return;
  }

  switch (ui->tabWidget->currentIndex())
  {
    case 0:
      type = MO_PLANET;
      obj = ui->listWidget->currentRow();
      if (!showNoObjectSelected(obj)) return;
      break;

    case 1:
      type = MO_COMET;
      obj = ui->listWidget_3->currentRow();
      if (!showNoObjectSelected(obj)) return;
      com = ui->listWidget_3->item(obj);
      obj = com->data(Qt::UserRole + 1).toInt();
      break;

    case 2:
      type = MO_ASTER;
      obj = ui->listWidget_4->currentRow();
      if (!showNoObjectSelected(obj)) return;
      com = ui->listWidget_4->item(obj);
      obj = com->data(Qt::UserRole + 1).toInt();
      break;
  }

  isUT = ui->checkBox->isChecked();

  if (isUT)
    tz = 0;
   else
     tz = m_view.geo.tz;

  QDateTime dt;

  dt = ui->dateTimeEdit->dateTime();
  jdFrom = jdGetJDFrom_DateTime(&dt);

  dt = ui->dateTimeEdit_2->dateTime();
  jdTo = jdGetJDFrom_DateTime(&dt);

  for (int i = 0; i < columns.count(); i++)
  {
    QString str = cELColumn[columns[i]];

    strCol.append(str);
  }

  if (jdFrom >= jdTo)
  {
    msgBoxError(this, tr("Invalid date/time range!!!"));
    return;
  }

  double mul;

  switch (ui->comboBox->currentIndex())
  {
    case 0:
      mul = JD1SEC * 60;
      break;

    case 1:
      mul = JD1SEC * 3600;
      break;

    case 2:
      mul = 1;
      break;
  }

  step = ui->spinBox->value() * mul;

  int count = (jdTo - jdFrom) / step;

  if (count > 1000)
  {
    if (QMessageBox::No == msgBoxQuest(this, tr("Calculation 1000+ positions. Do you want to continue?")))
      return;
  }

  for (double jd = jdFrom; jd <= jdTo; jd += step)
  {
    bool isMoon = false;
    tableRow_t row;
    orbit_t o;

    m_view.jd = jd - tz;
    cAstro.setParam(&m_view);

    switch (type)
    {
      case MO_PLANET:
        cAstro.calcPlanet(obj, &o);
        name = cAstro.getName(obj);
        isMoon = (obj == PT_MOON);
        break;

      case MO_COMET:
        comSolve(&tComets[obj], m_view.jd);
        name = tComets[obj].name;
        o = tComets[obj].orbit;
        break;

      case MO_ASTER:
        astSolve(&tAsteroids[obj], m_view.jd);
        name = tAsteroids[obj].name;
        o = tAsteroids[obj].orbit;
        break;
    }

    for (int j = 0; j < columns.count(); j++)
    {
      QString str;

      double ra2000 = o.lRD.Ra;
      double dec2000 = o.lRD.Dec;

      precess(&ra2000, &dec2000, m_view.jd, JD2000);

      switch (columns[j])
      {
        case 0:
          str = QString::number(m_view.jd, 'f', 6);
          break;

        case 1:
          str = getStrDate(m_view.jd, tz);
          break;

        case 2:
          str = getStrTime(m_view.jd, tz);
          break;

        case 3:
          str = getStrMag(o.mag);
          break;

        case 4:
          str = QString::number(o.phase, 'f', 3);
          break;

        case 5:
          str = QString::number(R2D(o.PA), 'f', 1) + "°";
          break;

        case 6:
          str = QString::number(o.sx, 'f', 2) + "\"";
          break;

        case 7:
          str = QString::number(o.sy, 'f', 2) + "\"";
          break;

        case 8:
          str = getStrRA(o.lRD.Ra);
          break;

        case 9:
          str = getStrDeg(o.lRD.Dec);
          break;

        case 10:
          str = getStrRA(ra2000);
          break;

        case 11:
          str = getStrDeg(dec2000);
          break;

        case 12:
          str = getStrRA(o.gRD.Ra);
          break;

        case 13:
          str = getStrDeg(o.gRD.Dec);
          break;

        case 14:
          str = getStrDeg(o.lAzm);
          break;

        case 15:
          str = getStrDeg(o.lAlt);
          break;

        case 16:
          if (!isMoon)
          {
            str = QString::number(o.R, 'f', 6) + " AU";
          }
          else
          {
            str = QString::number(o.r * EARTH_DIAM) + tr(" Km");
          }
          break;

        case 17:
          if (!isMoon)
          {
            str = QString::number(o.r, 'f', 6) + " AU";
          }
          else
          {
            str = tr("N/A");
          }
          break;

        case 18:
          str = ((o.elongation >= 0) ? "+" : "") + QString::number(R2D(o.elongation), 'f', 2) + "°";
          break;

        case 19:
          str = getStrDeg(o.hLon);
          break;

        case 20:
          str = getStrDeg(o.hLat);
          break;

        case 21:
          str = QString::number(o.hRect[0], 'f', 6) + " AU";
          break;

        case 22:
          str = QString::number(o.hRect[1], 'f', 6) + " AU";
          break;

        case 23:
          str = QString::number(o.hRect[2], 'f', 6) + " AU";
          break;

        case 24:
          str = QString::number(o.light * 24. * 60., 'f', 2) + tr(" mins.");
          break;
      }

      row.row.append(str);
    }

    rows.append(row);
  }

  CEphTable dlg(this, name, strCol, rows);

  dlg.exec();
}