⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qpegps.cpp

📁 给予QT的qps开源最新源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
   case Client::STA: // status
      if ( stackViewer->visibleWidget() == viewMapDisp ) {
         stackViewer->visibleWidget()->repaint();
      } else {
         if ( tb == viewMapDisp ) {
            // update moving map
            viewMapDisp->repaint();
         } else if ( tb == viewGpsStatus ) {
            // update full GPS status
            viewGpsStatus->update();
         }
      }
      break;
   case Client::SAT: // satellite
      if ( stackViewer->visibleWidget() != viewMapDisp && 
               tb == viewGpsStatus ) {
            // update full GPS status
            viewGpsStatus->update();
         }
      break;
   }
}

void Qpegps::quitInProgress()
{
#ifndef DESKTOP
   // re-enable "light off" and "power off"
   QCopEnvelope e("QPE/System", "setScreenSaverMode(int)");
   e << (int)QPEApplication::Enable;
#endif
   // write track in memory to file
   if ( viewTrack->wDo ) {
      viewTrack->Write(viewTrack->wLog->currentText());
   }
   // close client connection
   gpsd->closeConnection();
   delete gpsd; 
}

void Qpegps::initMaps()
{
   // read maps later
   QTimer *t = new QTimer(this);
   connect(t, SIGNAL(timeout()), mapSelector, SLOT(reReadMaps()));
   t->start(500, true);
}

void Qpegps::adjustDatum(Position &pos, Altitude &altitude)
{
   double lat, lon;
   lat = deg2rad(pos.lat);
   lon = deg2rad(pos.lon);
   geoDatum->convertDatum(geodatumOptions.gpsDatumIdx, 
      geodatumOptions.mapDatumIdx,
      &lat, &lon, &altitude.val );
   pos.lat = rad2deg(lat);
   pos.lon= rad2deg(lon);
   
   // waypoint position ? altitude of waypoint ?
};

void Qpegps::setCurrentConfig(const QString &newConfig, bool add)
{
   configName = "qpegps_" + newConfig;

   // new Settings are valid
   if (!add)
      readConfig();
   writeConfig(); //creates file if it is not existing, yet
}

void Qpegps::readConfig()
{
   Config qpegpsConfig(configName);

   qpegpsConfig.setGroup("units");
   Altitude::unit =
      (Altitude::Unit)qpegpsConfig.readNumEntry("altitude", Altitude::Feet);
   Speed::unit =
      (Speed::Unit)qpegpsConfig.readNumEntry("speed", Speed::Knots);
   Distance::unit =
      (Distance::Unit)qpegpsConfig.readNumEntry("distance", Distance::Naut);
   Position::unit =
      (Position::Unit)qpegpsConfig.readNumEntry("position", Position::DegMin);

   qpegpsConfig.setGroup("show");
   viewMapDisp->mapDispOptions.showBearing = qpegpsConfig.readBoolEntry("bearing", true);
   viewMapDisp->mapDispOptions.showHeading = qpegpsConfig.readBoolEntry("heading", true);
   viewMapDisp->mapDispOptions.showTime = qpegpsConfig.readBoolEntry("time", true);
   viewMapDisp->mapDispOptions.rotateMap = qpegpsConfig.readBoolEntry("rotate", false);
   viewMapDisp->mapDispOptions.textSize = qpegpsConfig.readNumEntry("textSize", 15);
   viewMapDisp->mapDispOptions.zoom2x = qpegpsConfig.readBoolEntry("zoom2x", false);

   qpegpsConfig.setGroup("gps");
   gpsd->gpsOptions.startScript = qpegpsConfig.readListEntry("start", '@');
   if ( gpsd->gpsOptions.startScript.isEmpty() ) {
      gpsd->gpsOptions.startScript << "READY=`cardctl status 0 | grep ready | wc -l`;"
         << "if [ $READY -gt 0 ];"
         << "then"
         << "  echo \"card ready\";"
         << "else"
         << "  echo \"executing cardctl resume\";"
         << "  cardctl resume;"
         << "fi;"
         << "/opt/Qtopia/bin/gpsd /dev/ttyS3";    
   }
   gpsd->gpsOptions.resumeScript = qpegpsConfig.readListEntry("resume", '@');
   if ( gpsd->gpsOptions.resumeScript.isEmpty() ) {
      gpsd->gpsOptions.resumeScript << "READY=`cardctl status 0 | grep ready | wc -l`;"
         << "if [ $READY -gt 0 ];"
         << "then"
         << "  echo \"card ready\";"
         << "else"
         << "  echo \"executing cardctl resume\";"
         << "  cardctl resume;"
         << "fi;";
   }
   gpsd->gpsOptions.stopScript = qpegpsConfig.readListEntry("stop", '@');
   if ( gpsd->gpsOptions.stopScript.isEmpty() ) {
      gpsd->gpsOptions.stopScript << "killall gpsd";
   }
   gpsd->gpsOptions.host = qpegpsConfig.readEntry("host", gpsdDefaultHost);
   gpsd->gpsOptions.port = qpegpsConfig.readNumEntry("port", gpsdDefaultPort);

   qpegpsConfig.setGroup("map");
   mapSelector->mapOptions.mapPathStr =
      qpegpsConfig.readEntry("path", qpedir + "qpegps/maps");
   mapSelector->mapOptions.searchMapsInSubdirs = 
      qpegpsConfig.readBoolEntry("subdirs", false);
#if 0
   gpsData->updateRate = qpegpsConfig.readNumEntry("rate", 500); 
#endif

#if 0 // PROXY
   qpegpsConfig.setGroup("download");
   gpsData->proxyUrl = qpegpsConfig.readEntry("proxy", "");
#endif

   qpegpsConfig.setGroup("datum");
   geodatumOptions.gpsDatumIdx = qpegpsConfig.readNumEntry("GpsDatum", 1);
   geodatumOptions.mapDatumIdx = qpegpsConfig.readNumEntry("MapsDatum", 1);

   qpegpsConfig.setGroup("color");
   QString colorName;
   colorName = qpegpsConfig.readEntry("ok", "#000000");
   viewMapDisp->mapDispOptions.statusOkColor.setNamedColor(colorName);
   colorName = qpegpsConfig.readEntry("noFix", "#ffff00");
   viewMapDisp->mapDispOptions.statusNoFixColor.setNamedColor(colorName);
   colorName = qpegpsConfig.readEntry("heading", "#00ff00"); 
   viewMapDisp->mapDispOptions.headColor.setNamedColor(colorName);
   colorName = qpegpsConfig.readEntry("bearing", "#ff0000");
   viewMapDisp->mapDispOptions.bearColor.setNamedColor(colorName);
   colorName = qpegpsConfig.readEntry("trackC", "#ff0000");
   viewTrack->trackOptions.trackColor.setNamedColor(colorName);
   colorName = qpegpsConfig.readEntry("scale", "#ff0000");  
   viewMapDisp->mapDispOptions.scaleColor.setNamedColor(colorName);  
   colorName = qpegpsConfig.readEntry("places", "#000000");  
   viewMapDisp->placesOptions.placesColor.setNamedColor(colorName);  

   qpegpsConfig.setGroup("track");
   viewTrack->trackOptions.trackPathStr =
      qpegpsConfig.readEntry("path", qpedir + "qpegps/tracks");
   //QDir md3(gpsData->trackPathStr);
   //gpsData->trackPathStr = md3.canonicalPath();
   viewTrack->trackOptions.updt_freq = qpegpsConfig.readNumEntry("updt_freq", 10);
   viewTrack->trackOptions.track_thick = qpegpsConfig.readNumEntry("track_thick", 2);

   qpegpsConfig.setGroup("places");
   viewMapDisp->placesOptions.showPlaces = qpegpsConfig.readBoolEntry("show", false);
   viewMapDisp->placesOptions.placesTextSize = qpegpsConfig.readNumEntry("textSize", 15);
   
   // read data according to new config:
   // read places
   places->readPlaces(viewTrack->trackOptions.trackPathStr + "/places.txt");

   initMaps();
   
   // restart gpsd
   gpsd->restartGpsd();
   // update all the pages
   emit configReaded();
}

void Qpegps::writeConfig()
{
   Config qpegpsConfig(configName);

   qpegpsConfig.setGroup("units");
   qpegpsConfig.writeEntry("altitude", (int)Altitude::unit);
   //qpegpsConfig->writeEntry("altitude",(int)gpsData->altitude.altUnit);
   qpegpsConfig.writeEntry("speed", (int)Speed::unit);
   //qpegpsConfig->writeEntry("speed",(int)gpsData->speed.speedUnit);
   qpegpsConfig.writeEntry("distance", (int)Distance::unit);
   //qpegpsConfig->writeEntry("distance",(int)gpsData->wpDistance.distUnit);
   qpegpsConfig.writeEntry("position", (int)Position::unit);

   qpegpsConfig.setGroup("show");
   qpegpsConfig.writeEntry("bearing", viewMapDisp->mapDispOptions.showBearing);
   qpegpsConfig.writeEntry("heading", viewMapDisp->mapDispOptions.showHeading);
   qpegpsConfig.writeEntry("time", viewMapDisp->mapDispOptions.showTime);
   qpegpsConfig.writeEntry("rotate", viewMapDisp->mapDispOptions.rotateMap);
   qpegpsConfig.writeEntry("textSize", viewMapDisp->mapDispOptions.textSize);
   qpegpsConfig.writeEntry("zoom2x", viewMapDisp->mapDispOptions.zoom2x);

   qpegpsConfig.setGroup("gps");
   //qpegpsConfig->writeEntry("gpsd", gpsData->gpsdArgStr);
   qpegpsConfig.writeEntry("start", gpsd->gpsOptions.startScript, '@');
   qpegpsConfig.writeEntry("stop", gpsd->gpsOptions.stopScript, '@');
   qpegpsConfig.writeEntry("resume", gpsd->gpsOptions.resumeScript, '@');
   qpegpsConfig.writeEntry("host", gpsd->gpsOptions.host);
   qpegpsConfig.writeEntry("port", gpsd->gpsOptions.port);

   qpegpsConfig.setGroup("map");
   qpegpsConfig.writeEntry("path", mapSelector->mapOptions.mapPathStr);
   qpegpsConfig.writeEntry("subdirs", mapSelector->mapOptions.searchMapsInSubdirs);
#if 0
   qpegpsConfig.writeEntry("rate", gpsData->updateRate); 
#endif
#if 0 // PROXY
   qpegpsConfig.setGroup("download");
   qpegpsConfig.writeEntry("proxy", gpsData->proxyUrl);
#endif

   qpegpsConfig.setGroup("color");
   qpegpsConfig.writeEntry("ok", viewMapDisp->mapDispOptions.statusOkColor.name());
   qpegpsConfig.writeEntry("noFix", viewMapDisp->mapDispOptions.statusNoFixColor.name());
   qpegpsConfig.writeEntry("heading", viewMapDisp->mapDispOptions.headColor.name());
   qpegpsConfig.writeEntry("bearing", viewMapDisp->mapDispOptions.bearColor.name());
   qpegpsConfig.writeEntry("trackC", viewTrack->trackOptions.trackColor.name());
   qpegpsConfig.writeEntry("scale", viewMapDisp->mapDispOptions.scaleColor.name()); 
   qpegpsConfig.writeEntry("places", viewMapDisp->placesOptions.placesColor.name()); 

   qpegpsConfig.setGroup("track");
   qpegpsConfig.writeEntry("path", viewTrack->trackOptions.trackPathStr);
   qpegpsConfig.writeEntry("updt_freq", viewTrack->trackOptions.updt_freq);
   qpegpsConfig.writeEntry("track_thick", viewTrack->trackOptions.track_thick);

   qpegpsConfig.setGroup("datum");
   qpegpsConfig.writeEntry("GpsDatum", (int)geodatumOptions.gpsDatumIdx);
   qpegpsConfig.writeEntry("MapsDatum", (int)geodatumOptions.mapDatumIdx);

   qpegpsConfig.setGroup("places");
   qpegpsConfig.writeEntry("show", viewMapDisp->placesOptions.showPlaces);
   qpegpsConfig.writeEntry("textSize", viewMapDisp->placesOptions.placesTextSize);
}

int main(int argc, char ** argv)
{
   QString dir = "./";
#ifndef DESKTOP
   QPEApplication a(argc, argv);
   dir = a.qpeDir();
#else
   QApplication a(argc, argv);
#endif

   QTranslator translator( 0 );
   if ( a.argc() > 1 ) {
      printf("command line parameter \"%s\" overrides global setting of \"locale\"\n", a.argv()[1]);
      translator.load(QString("qpegps_") + a.argv()[1], dir + "/qpegps");    
   } else {
      translator.load(QString("qpegps_") + QTextCodec::locale(), dir + "/qpegps");
   }
   a.installTranslator(&translator);

   // create the *viewer* which can switch between full screen and normal
   QWidgetStack * viewer = new QWidgetStack();

   // this is the main widget
   viewer->setCaption("qpeGPS 0.9.3.1");

   // create the qpegps main appl widget (with viewer as parent)
   Qpegps * qpegps = new Qpegps(dir, viewer);

//   QObject::connect(&a, SIGNAL(appMessage(const QCString&, const QByteArray&)),
//         qpegps, SLOT(appMessage(const QCString&, const QByteArray&)) );

   // main widget to show
   viewer->addWidget(qpegps, 0);

#ifndef DESKTOP
   // register main widget with appl
   a.showMainWidget( viewer );
#else
   a.setMainWidget( viewer );
   viewer->show();
#endif

   // start the loop
   return a.exec();
}

WaitBox::WaitBox(QWidget * parent, const char * name, WFlags f)
    : QWidget( parent, name, f | WStyle_NoBorderEx )
{

}

void WaitBox::show()
{
   // resize the widget
   QSize size = QSize((2*qApp->desktop()->width())/3, 
      qApp->desktop()->height()/3);
   QSize sizeParent = parentWidget()->size();
   setGeometry((sizeParent.width()-size.width())/2, 
      (sizeParent.height()-size.height())/2, size.width(), size.height());

   QWidget::show();
}

void WaitBox::setText(const QString &newtext)
{
   strText = newtext;
}

void WaitBox::paintEvent(QPaintEvent *)
{
   // draw the text centered on the rect.
   QPainter p( this );
   QRect r(rect());
   p.drawText(r, AlignCenter | WordBreak, strText);
   // draw border
   p.setPen(colorGroup().dark());
   p.moveTo(r.left(), r.top()+2);
   p.lineTo(r.left(), r.bottom()-2);
   p.lineTo(r.left()+2, r.bottom());
   p.lineTo(r.right()-2, r.bottom());
   p.lineTo(r.right(), r.bottom()-2);
   p.lineTo(r.right(), r.top()+2);
   p.lineTo(r.right()-2, r.top());
   p.lineTo(r.left()+2, r.top());
   p.lineTo(r.left(), r.top()+2);
   p.setPen(colorGroup().light());
   p.drawLine(r.left()+2, r.top()+1, r.right()-2, r.top()+1);
   p.drawLine(r.left()+1, r.top()+2, r.left()+1, r.bottom()-2);
   p.setPen(colorGroup().shadow());
   p.drawLine(r.left()+2, r.bottom()-1, r.right()-2, r.bottom()-1);
   p.drawLine(r.right()-1, r.top()+2, r.right()-1, r.bottom()-2);
}

// end of file

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -