- Timestamp:
- Feb 28, 2009, 11:09:23 AM (16 years ago)
- Location:
- trunk/BNS
- Files:
-
- 2 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/BNS/bns.cpp
r1262 r1668 23 23 #include "bnsrinex.h" 24 24 #include "bnssp3.h" 25 #include "bnssettings.h" 25 26 26 27 using namespace std; … … 35 36 this, SLOT(slotMoveSocket(QThread*))); 36 37 37 QSettings settings;38 bnsSettings settings; 38 39 39 40 // Set Proxy (application-wide) -
trunk/BNS/bns.pro
r1666 r1668 29 29 HEADERS = bns.h bnswindow.h bnshlpdlg.h bnshtml.h \ 30 30 bnseph.h bnsutils.h bnsrinex.h bnssp3.h bnsoutf.h \ 31 bnscaster.h RTCM/clock_orbit_rtcm.h 31 bnscaster.h RTCM/clock_orbit_rtcm.h bnssettings.h bnsapp.h 32 32 33 33 HEADERS += newmat/controlw.h newmat/include.h newmat/myexcept.h \ … … 37 37 SOURCES = bnsmain.cpp bns.cpp bnswindow.cpp bnshlpdlg.cpp bnshtml.cpp \ 38 38 bnseph.cpp bnsutils.cpp bnsrinex.cpp bnssp3.cpp bnsoutf.cpp \ 39 bnscaster.cpp RTCM/clock_orbit_rtcm.c 39 bnscaster.cpp bnssettings.cpp bnsapp.cpp \ 40 RTCM/clock_orbit_rtcm.c 40 41 41 42 SOURCES += newmat/bandmat.cpp newmat/cholesky.cpp newmat/evalue.cpp \ -
trunk/BNS/bnscaster.cpp
r1287 r1668 17 17 #include <math.h> 18 18 #include "bnscaster.h" 19 #include "bnssettings.h" 19 20 20 21 using namespace std; … … 30 31 _ic = ic; 31 32 32 QSettings settings;33 bnsSettings settings; 33 34 34 35 QIODevice::OpenMode oMode; … … 94 95 } 95 96 96 QSettings settings;97 bnsSettings settings; 97 98 _outSocket = new QTcpSocket(); 98 99 QString password; -
trunk/BNS/bnseph.cpp
r1208 r1668 19 19 #include "bnseph.h" 20 20 #include "bnsutils.h" 21 #include "bnssettings.h" 21 22 22 23 using namespace std; … … 30 31 _socket = 0; 31 32 32 QSettings settings;33 bnsSettings settings; 33 34 34 35 QIODevice::OpenMode oMode; … … 72 73 delete _socket; 73 74 74 QSettings settings;75 bnsSettings settings; 75 76 QString host = settings.value("ephHost").toString(); 76 77 if (host.isEmpty()) { -
trunk/BNS/bnsmain.cpp
r775 r1668 20 20 #include "bnswindow.h" 21 21 #include "bnsutils.h" 22 #include "bnsapp.h" 23 #include "bnssettings.h" 22 24 23 25 using namespace std; … … 26 28 ///////////////////////////////////////////////////////////////////////////// 27 29 int main(int argc, char *argv[]) { 30 31 QString confFileName; 28 32 29 33 // Command-Line Options … … 39 43 // Main Qt Class 40 44 // ------------- 41 QApplication app(argc, argv, GUIenabled); 45 //QApplication app(argc, argv, GUIenabled); 46 bnsApp app(argc, argv, GUIenabled); 42 47 48 app.setApplicationName("BNS"); 43 49 app.setOrganizationName("BKG"); 44 50 app.setOrganizationDomain("www.bkg.bund.de"); 45 app.set ApplicationName("BKG_NTRIP_Server");51 app.setConfFileName( confFileName ); 46 52 47 53 // Interactive Mode - open the main window -
trunk/BNS/bnsoutf.cpp
r1057 r1668 20 20 21 21 #include "bnsoutf.h" 22 #include "bnssettings.h" 22 23 23 24 using namespace std; … … 156 157 resolveFileName(GPSweek, datTim); 157 158 _out.setf(ios::showpoint | ios::fixed); 158 QSettings settings;159 bnsSettings settings; 159 160 if (QFile::exists(_fName) && 160 161 Qt::CheckState(settings.value("fileAppend").toInt()) == Qt::Checked) { -
trunk/BNS/bnswindow.cpp
r1666 r1668 20 20 #include "bnswindow.h" 21 21 #include "bnshlpdlg.h" 22 #include "bnssettings.h" 22 23 23 24 using namespace std; … … 87 88 _bns = 0; 88 89 89 QSettings settings;90 bnsSettings settings; 90 91 91 92 QString fontString = settings.value("font").toString(); … … 140 141 setCentralWidget(_canvas); 141 142 143 // Proxy Options 144 // ------------- 142 145 _proxyHostLineEdit = new QLineEdit(settings.value("proxyHost").toString()); 143 _proxyHostLineEdit->setWhatsThis(tr("<p>If you are running BNS within a protected Local Area Network (LAN), you might need to use a proxy server to access the Internet. Enter your proxy server IP and port number in case one is operated in front of BNS. If you do not know the IP and port of your proxy server, check the proxy server settings in your Internet browser or ask your network administrator.</p><p>Note that IP streaming is sometimes not allowed in a LAN. In this case you need to ask your network administrator for an appropriate modification of the local security policy or for the installation of a TCP relay to the NTRIP broadcasters. If these are not possible, you might need to run BNS outside your LAN on a network that has unobstructed connection to the Internet.</p>"));144 146 _proxyPortLineEdit = new QLineEdit(settings.value("proxyPort").toString()); 145 _proxyPortLineEdit->setWhatsThis(tr("<p>Enter your proxy server port number in case one is operated in front of BNS.</p>")); 146 _proxyPortLineEdit->setMaximumWidth(9*ww);147 147 148 // General Options 149 // --------------- 148 150 _logFileLineEdit = new QLineEdit(settings.value("logFile").toString()); 149 _logFileLineEdit->setWhatsThis(tr("<p>Records of BNS activities are shown in the Log section on the bottom of this window. They can be saved into a file when a valid path is specified in the 'Logfile (full path)' field.</p>"));150 151 _fileAppendCheckBox = new QCheckBox(); 151 152 _fileAppendCheckBox->setCheckState(Qt::CheckState(settings.value("fileAppend").toInt())); 152 _fileAppendCheckBox->setWhatsThis(tr("<p>When BNS is started, new files are created by default and any existing files with the same name will be overwritten. However, users might want to append already existing files following a restart of BNS, a system crash or when BNS crashed. Tick 'Append files' to continue with existing files and keep what has been recorded so far.</p>")); 153 153 _autoStartCheckBox = new QCheckBox(); 154 _autoStartCheckBox->setCheckState(Qt::CheckState( 155 settings.value("autoStart").toInt())); 156 157 // RINEX Ephemeris Options 158 // ----------------------- 159 _ephHostLineEdit = new QLineEdit(settings.value("ephHost").toString()); 160 _ephPortLineEdit = new QLineEdit(settings.value("ephPort").toString()); 161 _ephEchoLineEdit = new QLineEdit(settings.value("ephEcho").toString()); 162 163 // Clocks & Orbits Options 164 // ----------------------- 165 _clkPortLineEdit = new QLineEdit(settings.value("clkPort").toString()); 154 166 _inpEchoLineEdit = new QLineEdit(settings.value("inpEcho").toString()); 155 _inpEchoLineEdit->setWhatsThis(tr("Specify the full path to a file where incoming clocks and orbits are saved. Beware that the size of this file can rapidly increase. Default is an empty option field meaning that incoming clocks and orbits are not saved.")); 156 157 _ephHostLineEdit = new QLineEdit(settings.value("ephHost").toString()); 158 _ephHostLineEdit->setWhatsThis(tr("BNS reads Broadcast Ephemeris in RINEX Version 3 Navigation file format from an IP address. Specify the host IP e.g. of a BNC installation providing this information.")); 159 _ephPortLineEdit = new QLineEdit(settings.value("ephPort").toString()); 160 _ephPortLineEdit->setWhatsThis(tr("BNS reads Broadcast Ephemeris in RINEX Version 3 Navigation file format from an IP address. Specify the IP port e.g. of a BNC installation providing this information.")); 161 _ephPortLineEdit->setMaximumWidth(9*ww); 162 _ephEchoLineEdit = new QLineEdit(settings.value("ephEcho").toString()); 163 _ephEchoLineEdit->setWhatsThis(tr("Specify the full path to a file where incoming Broadcast Ephemeris are saved. Beware that the size of this file can rapidly increase. Default is an empty option field meaning that incoming Broadcast Ephemeris are not saved.")); 164 165 _clkPortLineEdit = new QLineEdit(settings.value("clkPort").toString()); 166 _clkPortLineEdit->setWhatsThis(tr("BNS reads Clocks & Orbits referring to the IGS system (X,Y,Z, ECEF) in SP3 format from an IP port. Specify a local IP port e.g. for an RTNet installation to provide this information.")); 167 _clkPortLineEdit->setMaximumWidth(9*ww); 168 167 168 169 // Ephemeris Corrections I Options 170 // ------------------------------- 169 171 _outHost_1_LineEdit = new QLineEdit(settings.value("outHost1").toString()); 170 _outHost_1_LineEdit->setWhatsThis(tr("BNS can stream clock and orbit corrections to Broadcast Ephemeris in RTCM Version 3 format. Specify the host IP of an NTRIP Broadcaster to upload the stream. An empty option field means that you don't want to upload corrections."));171 172 _outPort_1_LineEdit = new QLineEdit(settings.value("outPort1").toString()); 172 _outPort_1_LineEdit->setWhatsThis(tr("Specify the IP port of an NTRIP Broadcaster to upload the stream. Default is port 80."));173 _outPort_1_LineEdit->setMaximumWidth(9*ww);174 173 _password_1_LineEdit = new QLineEdit(settings.value("password1").toString()); 175 _password_1_LineEdit->setWhatsThis(tr("Specify the stream upload password protecting the mounpoint on an NTRIP Broadcaster."));176 _password_1_LineEdit->setMaximumWidth(9*ww);177 174 _password_1_LineEdit->setEchoMode(QLineEdit::Password); 178 179 _outHost_2_LineEdit = new QLineEdit(settings.value("outHost2").toString());180 _outHost_2_LineEdit->setWhatsThis(tr("BNS can stream clock and orbit corrections to Broadcast Ephemeris in RTCM Version 3 format. Specify the host IP of an NTRIP Broadcaster to upload the stream. An empty option field means that you don't want to upload corrections."));181 _outPort_2_LineEdit = new QLineEdit(settings.value("outPort2").toString());182 _outPort_2_LineEdit->setWhatsThis(tr("Specify the IP port of an NTRIP Broadcaster to upload the stream. Default is port 80."));183 _outPort_2_LineEdit->setMaximumWidth(9*ww);184 _password_2_LineEdit = new QLineEdit(settings.value("password2").toString());185 _password_2_LineEdit->setWhatsThis(tr("Specify the stream upload password protecting the mounpoint on an NTRIP Broadcaster."));186 _password_2_LineEdit->setMaximumWidth(9*ww);187 _password_2_LineEdit->setEchoMode(QLineEdit::Password);188 189 175 _mountpoint_1_LineEdit = new QLineEdit(settings.value("mountpoint_1").toString()); 190 _mountpoint_1_LineEdit->setWhatsThis(tr("Specify the mounpoint for stream upload to an NTRIP Broadcaster."));191 _mountpoint_1_LineEdit->setMaximumWidth(12*ww);192 _mountpoint_2_LineEdit = new QLineEdit(settings.value("mountpoint_2").toString());193 _mountpoint_2_LineEdit->setWhatsThis(tr("Specify the mounpoint for stream upload to an NTRIP Broadcaster."));194 _mountpoint_2_LineEdit->setMaximumWidth(12*ww);195 176 _refSys_1_ComboBox = new QComboBox; 196 _refSys_1_ComboBox->setMaximumWidth(12*ww);197 177 _refSys_1_ComboBox->setEditable(false); 198 178 _refSys_1_ComboBox->addItems(QString("IGS05,ETRF2000").split(",")); … … 201 181 _refSys_1_ComboBox->setCurrentIndex(ii); 202 182 } 203 _refSys_1_ComboBox->setWhatsThis(tr("Select the target reference system for outgoing clock and orbit corrections.")); 183 _outFile_1_LineEdit = new QLineEdit(settings.value("outFile_1").toString()); 184 185 // Ephemeris Corrections II Options 186 // -------------------------------- 187 _outHost_2_LineEdit = new QLineEdit(settings.value("outHost2").toString()); 188 _outPort_2_LineEdit = new QLineEdit(settings.value("outPort2").toString()); 189 _password_2_LineEdit = new QLineEdit(settings.value("password2").toString()); 190 _password_2_LineEdit->setEchoMode(QLineEdit::Password); 191 _mountpoint_2_LineEdit = new QLineEdit(settings.value("mountpoint_2").toString()); 204 192 _refSys_2_ComboBox = new QComboBox; 205 _refSys_2_ComboBox->setMaximumWidth(12*ww);206 193 _refSys_2_ComboBox->setEditable(false); 207 194 _refSys_2_ComboBox->addItems(QString("IGS05,ETRF2000").split(",")); … … 210 197 _refSys_2_ComboBox->setCurrentIndex(ii); 211 198 } 212 _refSys_2_ComboBox->setWhatsThis(tr("Select the target reference system for outgoing clock and orbit corrections."));213 _outFile_1_LineEdit = new QLineEdit(settings.value("outFile_1").toString());214 _outFile_1_LineEdit->setWhatsThis(tr("Specify the full path to a file where outgoing clock and orbit corrections to Broadcast Ephemeris are saved. Beware that the size of this file can rapidly increase. Default is an empty option field meaning that outgoing corrections are not saved."));215 199 _outFile_2_LineEdit = new QLineEdit(settings.value("outFile_2").toString()); 216 _outFile_2_LineEdit->setWhatsThis(tr("Specify the full path to a file where outgoing clock and orbit corrections to Broadcast Ephemeris are saved. Beware that the size of this file can rapidly increase. Default is an empty option field meaning that outgoing corrections are not saved.")); 217 200 201 // RINEX Clocks Options 202 // -------------------- 218 203 _rnxPathLineEdit = new QLineEdit(settings.value("rnxPath").toString()); 219 _rnxPathLineEdit->setWhatsThis(tr("Specify the path for saving the generated clock corrections as Clock RINEX files. If the specified directory does not exist, BNS will not create Clock RINEX files."));220 204 _rnxIntrComboBox = new QComboBox; 221 _rnxIntrComboBox->setMaximumWidth(9*ww);222 205 _rnxIntrComboBox->setEditable(false); 223 206 _rnxIntrComboBox->addItems(QString("1 min,2 min,5 min,10 min,15 min,30 min,1 hour,1 day").split(",")); … … 226 209 _rnxIntrComboBox->setCurrentIndex(ii); 227 210 } 228 _rnxIntrComboBox->setWhatsThis(tr("Select the length of the Clock RINEX file."));229 211 _rnxSamplSpinBox = new QSpinBox; 230 212 _rnxSamplSpinBox->setMinimum(0); … … 234 216 _rnxSamplSpinBox->setValue(settings.value("rnxSampl").toInt()); 235 217 _rnxSamplSpinBox->setSuffix(" sec"); 236 _rnxSamplSpinBox->setWhatsThis(tr("Select the Clock RINEX file sampling interval in seconds. A value of zero '0' tells BNS to store all available samples into Clock RINEX files.")); 237 218 219 // SP3 Orbits Options 220 // ------------------ 238 221 _sp3PathLineEdit = new QLineEdit(settings.value("sp3Path").toString()); 239 _sp3PathLineEdit->setWhatsThis(tr("Specify the path for saving the generated orbit corrections as SP3 orbit files. If the specified directory does not exist, BNS will not create SP3 orbit files."));240 222 _sp3IntrComboBox = new QComboBox; 241 _sp3IntrComboBox->setMaximumWidth(9*ww);242 223 _sp3IntrComboBox->setEditable(false); 243 224 _sp3IntrComboBox->addItems(QString("1 min,2 min,5 min,10 min,15 min,30 min,1 hour,1 day").split(",")); … … 246 227 _sp3IntrComboBox->setCurrentIndex(ii); 247 228 } 248 _sp3IntrComboBox->setWhatsThis(tr("Select the length of the SP3 orbit file."));249 229 _sp3SamplSpinBox = new QSpinBox; 250 230 _sp3SamplSpinBox->setMinimum(0); … … 254 234 _sp3SamplSpinBox->setValue(settings.value("sp3Sampl").toInt()); 255 235 _sp3SamplSpinBox->setSuffix(" sec"); 236 237 // Whats This 238 // ---------- 239 _proxyHostLineEdit->setWhatsThis(tr("<p>If you are running BNS within a protected Local Area Network (LAN), you might need to use a proxy server to access the Internet. Enter your proxy server IP and port number in case one is operated in front of BNS. If you do not know the IP and port of your proxy server, check the proxy server settings in your Internet browser or ask your network administrator.</p><p>Note that IP streaming is sometimes not allowed in a LAN. In this case you need to ask your network administrator for an appropriate modification of the local security policy or for the installation of a TCP relay to the NTRIP broadcasters. If these are not possible, you might need to run BNS outside your LAN on a network that has unobstructed connection to the Internet.</p>")); 240 _proxyPortLineEdit->setWhatsThis(tr("<p>Enter your proxy server port number in case one is operated in front of BNS.</p>")); 241 _logFileLineEdit->setWhatsThis(tr("<p>Records of BNS activities are shown in the Log section on the bottom of this window. They can be saved into a file when a valid path is specified in the 'Logfile (full path)' field.</p>")); 242 _fileAppendCheckBox->setWhatsThis(tr("<p>When BNS is started, new files are created by default and any existing files with the same name will be overwritten. However, users might want to append already existing files following a restart of BNS, a system crash or when BNS crashed. Tick 'Append files' to continue with existing files and keep what has been recorded so far.</p>")); 243 _inpEchoLineEdit->setWhatsThis(tr("Specify the full path to a file where incoming clocks and orbits are saved. Beware that the size of this file can rapidly increase. Default is an empty option field meaning that incoming clocks and orbits are not saved.")); 244 _ephHostLineEdit->setWhatsThis(tr("BNS reads Broadcast Ephemeris in RINEX Version 3 Navigation file format from an IP address. Specify the host IP e.g. of a BNC installation providing this information.")); 245 _ephPortLineEdit->setWhatsThis(tr("BNS reads Broadcast Ephemeris in RINEX Version 3 Navigation file format from an IP address. Specify the IP port e.g. of a BNC installation providing this information.")); 246 _ephEchoLineEdit->setWhatsThis(tr("Specify the full path to a file where incoming Broadcast Ephemeris are saved. Beware that the size of this file can rapidly increase. Default is an empty option field meaning that incoming Broadcast Ephemeris are not saved.")); 247 _clkPortLineEdit->setWhatsThis(tr("BNS reads Clocks & Orbits referring to the IGS system (X,Y,Z, ECEF) in SP3 format from an IP port. Specify a local IP port e.g. for an RTNet installation to provide this information.")); 248 _outHost_1_LineEdit->setWhatsThis(tr("BNS can stream clock and orbit corrections to Broadcast Ephemeris in RTCM Version 3 format. Specify the host IP of an NTRIP Broadcaster to upload the stream. An empty option field means that you don't want to upload corrections.")); 249 _outPort_1_LineEdit->setWhatsThis(tr("Specify the IP port of an NTRIP Broadcaster to upload the stream. Default is port 80.")); 250 _password_1_LineEdit->setWhatsThis(tr("Specify the stream upload password protecting the mounpoint on an NTRIP Broadcaster.")); 251 _mountpoint_1_LineEdit->setWhatsThis(tr("Specify the mounpoint for stream upload to an NTRIP Broadcaster.")); 252 _refSys_1_ComboBox->setWhatsThis(tr("Select the target reference system for outgoing clock and orbit corrections.")); 253 _outHost_2_LineEdit->setWhatsThis(tr("BNS can stream clock and orbit corrections to Broadcast Ephemeris in RTCM Version 3 format. Specify the host IP of an NTRIP Broadcaster to upload the stream. An empty option field means that you don't want to upload corrections.")); 254 _outPort_2_LineEdit->setWhatsThis(tr("Specify the IP port of an NTRIP Broadcaster to upload the stream. Default is port 80.")); 255 _password_2_LineEdit->setWhatsThis(tr("Specify the stream upload password protecting the mounpoint on an NTRIP Broadcaster.")); 256 _mountpoint_2_LineEdit->setWhatsThis(tr("Specify the mounpoint for stream upload to an NTRIP Broadcaster.")); 257 _refSys_2_ComboBox->setWhatsThis(tr("Select the target reference system for outgoing clock and orbit corrections.")); 258 _outFile_1_LineEdit->setWhatsThis(tr("Specify the full path to a file where outgoing clock and orbit corrections to Broadcast Ephemeris are saved. Beware that the size of this file can rapidly increase. Default is an empty option field meaning that outgoing corrections are not saved.")); 259 _outFile_2_LineEdit->setWhatsThis(tr("Specify the full path to a file where outgoing clock and orbit corrections to Broadcast Ephemeris are saved. Beware that the size of this file can rapidly increase. Default is an empty option field meaning that outgoing corrections are not saved.")); 260 _rnxPathLineEdit->setWhatsThis(tr("Specify the path for saving the generated clock corrections as Clock RINEX files. If the specified directory does not exist, BNS will not create Clock RINEX files.")); 261 _rnxIntrComboBox->setWhatsThis(tr("Select the length of the Clock RINEX file.")); 262 _rnxSamplSpinBox->setWhatsThis(tr("Select the Clock RINEX file sampling interval in seconds. A value of zero '0' tells BNS to store all available samples into Clock RINEX files.")); 263 _sp3PathLineEdit->setWhatsThis(tr("Specify the path for saving the generated orbit corrections as SP3 orbit files. If the specified directory does not exist, BNS will not create SP3 orbit files.")); 264 _sp3IntrComboBox->setWhatsThis(tr("Select the length of the SP3 orbit file.")); 256 265 _sp3SamplSpinBox->setWhatsThis(tr("Select the SP3 orbit file sampling interval in seconds. A value of zero '0' tells BNS to store all available samples into SP3 orbit files.")); 266 _autoStartCheckBox->setWhatsThis(tr("<p>Tick 'Auto start' for auto-start of BNS at startup time in window mode with preassigned processing options.</p>")); 267 257 268 258 269 // TabWidget 259 270 // --------- 260 QTabWidget*tabs = new QTabWidget();271 tabs = new QTabWidget(); 261 272 262 273 // Proxy Tab … … 267 278 268 279 QGridLayout* layout_prx = new QGridLayout; 280 269 281 layout_prx->setColumnMinimumWidth(0,9*ww); 270 271 layout_prx->addWidget(new QLabel("Host"), 0, 0, Qt::AlignLeft); 272 layout_prx->addWidget(_proxyHostLineEdit, 0, 1); 273 layout_prx->addWidget(new QLabel("Port"), 1, 0, Qt::AlignLeft); 282 _proxyPortLineEdit->setMaximumWidth(9*ww); 283 284 layout_prx->addWidget(new QLabel("Host"), 0, 0); 285 layout_prx->addWidget(_proxyHostLineEdit, 0, 1, 1, 10); 286 layout_prx->addWidget(new QLabel("Port"), 1, 0); 274 287 layout_prx->addWidget(_proxyPortLineEdit, 1, 1); 275 layout_prx->addWidget(new QLabel("Settings for the proxy in protected networks, leave boxes blank if none."),2, 0, 1, 2, Qt::AlignLeft);288 layout_prx->addWidget(new QLabel("Settings for the proxy in protected networks, leave boxes blank if none."),2, 0, 1, 50, Qt::AlignLeft); 276 289 layout_prx->addWidget(new QLabel(" "), 3, 0); 277 290 278 291 tab_prx->setLayout(layout_prx); 292 293 connect(_proxyHostLineEdit, SIGNAL(textChanged(const QString &)), 294 this, SLOT(bnsText(const QString &))); 295 if (_proxyHostLineEdit->text().isEmpty()) { 296 _proxyPortLineEdit->setStyleSheet("background-color: lightGray"); 297 _proxyPortLineEdit->setEnabled(false); 298 } 279 299 280 300 // General Tab … … 284 304 285 305 QGridLayout* layout_gen = new QGridLayout; 306 286 307 layout_gen->setColumnMinimumWidth(0,9*ww); 287 288 layout_gen->addWidget(new QLabel("Logfile (full path)"), 0, 0); 289 layout_gen->addWidget(_logFileLineEdit, 0, 1); 290 layout_gen->addWidget(new QLabel("Append files"), 1, 0); 291 layout_gen->addWidget(_fileAppendCheckBox, 1, 1); 292 layout_gen->addWidget(new QLabel("General settings for logfile and file handling."), 2, 0, 1, 2, Qt::AlignLeft); 293 layout_gen->addWidget(new QLabel(" "), 3, 0); 308 _logFileLineEdit->setMaximumWidth(40*ww); 309 310 layout_gen->addWidget(new QLabel("Logfile (full path) "), 0, 0); 311 layout_gen->addWidget(_logFileLineEdit, 0, 1); 312 layout_gen->addWidget(new QLabel("Append files"), 1, 0); 313 layout_gen->addWidget(_fileAppendCheckBox, 1, 1); 314 layout_gen->addWidget(new QLabel("Auto start"), 2, 0); 315 layout_gen->addWidget(_autoStartCheckBox, 2, 1); 316 layout_gen->addWidget(new QLabel("General settings for logfile and file handling."), 3, 0, 1, 50, Qt::AlignLeft); 294 317 295 318 tab_gen->setLayout(layout_gen); 296 319 297 // Ephemeris Tab298 // ------------- 320 // RINEX Ephemeris Tab 321 // ------------------- 299 322 QWidget* tab_eph = new QWidget(); 300 323 tabs->addTab(tab_eph, "RINEX Ephemeris"); 301 324 302 325 QGridLayout* layout_eph = new QGridLayout; 326 303 327 layout_eph->setColumnMinimumWidth(0, 9*ww); 328 _ephPortLineEdit->setMaximumWidth(9*ww); 304 329 305 330 layout_eph->addWidget(new QLabel("Host"), 0, 0); 306 layout_eph->addWidget(_ephHostLineEdit, 0, 1 );331 layout_eph->addWidget(_ephHostLineEdit, 0, 1, 1, 10); 307 332 layout_eph->addWidget(new QLabel("Port"), 1, 0); 308 333 layout_eph->addWidget(_ephPortLineEdit, 1, 1); 309 334 layout_eph->addWidget(new QLabel("Save (full path)"), 2, 0); 310 layout_eph->addWidget(_ephEchoLineEdit, 2, 1); 311 layout_eph->addWidget(new QLabel("Read broadcast ephemeris in RINEX Version 3 Navigation format."), 3, 0, 1, 2, Qt::AlignLeft); 312 //layout_eph->addWidget(new QLabel(""), 4, 0); 335 layout_eph->addWidget(_ephEchoLineEdit, 2, 1, 1, 26); 336 layout_eph->addWidget(new QLabel("Read broadcast ephemeris in RINEX Version 3 Navigation format."), 3, 0, 1, 50, Qt::AlignLeft); 313 337 314 338 tab_eph->setLayout(layout_eph); 315 339 316 // Clock & OrbitTab317 // ----------------- 340 // Clocks & Orbits Tab 341 // ------------------- 318 342 QWidget* tab_co = new QWidget(); 319 343 tabs->addTab(tab_co,"Clocks && Orbits"); 320 344 321 322 345 QGridLayout* layout_co = new QGridLayout; 346 323 347 layout_co->setColumnMinimumWidth(0, 9*ww); 348 _clkPortLineEdit->setMaximumWidth(9*ww); 324 349 325 350 layout_co->addWidget(new QLabel("Listening port"), 0, 0); 326 351 layout_co->addWidget(_clkPortLineEdit, 0, 1); 327 layout_co->addWidget(new QLabel("Save (full path) "),1, 0);352 layout_co->addWidget(new QLabel("Save (full path) "), 1, 0); 328 353 layout_co->addWidget(_inpEchoLineEdit, 1, 1); 329 layout_co->addWidget(new QLabel("Read clocks and orbits in SP3 format."), 2, 0, 1, 2, Qt::AlignLeft);354 layout_co->addWidget(new QLabel("Read clocks and orbits in SP3 format."), 2, 0, 1, 50, Qt::AlignLeft); 330 355 layout_co->addWidget(new QLabel(""), 3, 0); 331 356 332 357 tab_co->setLayout(layout_co); 333 358 334 // Caster Tab I335 // ------------ 359 // Ephemeris Corrections I Tab 360 // --------------------------- 336 361 QWidget* tab_cas1 = new QWidget(); 337 362 tabs->addTab(tab_cas1, "Ephemeris Corrections I"); 338 363 339 364 QGridLayout* layout_cas1 = new QGridLayout; 365 340 366 layout_cas1->setColumnMinimumWidth(0, 9*ww); 341 layout_cas1->addWidget(new QLabel("Host"), 0, 0); 342 layout_cas1->addWidget(_outHost_1_LineEdit, 0, 1, 1, 3); 343 layout_cas1->addWidget(new QLabel("Port"), 0, 4, Qt::AlignRight); 344 layout_cas1->addWidget(_outPort_1_LineEdit, 0, 5); 345 layout_cas1->addWidget(new QLabel("Mountpoint"), 1, 0); 346 layout_cas1->addWidget(_mountpoint_1_LineEdit, 1, 1); 347 layout_cas1->addWidget(new QLabel("Password"), 1, 2, Qt::AlignRight); 348 layout_cas1->addWidget(_password_1_LineEdit, 1, 3); 349 layout_cas1->addWidget(new QLabel(" "), 1, 4); 350 layout_cas1->addWidget(new QLabel(" "), 1, 5); 351 layout_cas1->addWidget(new QLabel("System"), 2, 0); 352 layout_cas1->addWidget(_refSys_1_ComboBox, 2, 1); 353 layout_cas1->addWidget(new QLabel("Save (full path)"), 2, 2, Qt::AlignRight); 354 layout_cas1->addWidget(_outFile_1_LineEdit, 2, 3, 1, 10); 355 layout_cas1->addWidget(new QLabel("Produce broadcast ephemeris corrections, upload to caster, reference system, local storage."), 3, 0, 1, 10); 367 _outPort_1_LineEdit->setMaximumWidth(9*ww); 368 _password_1_LineEdit->setMaximumWidth(9*ww); 369 _mountpoint_1_LineEdit->setMaximumWidth(12*ww); 370 _refSys_1_ComboBox->setMaximumWidth(12*ww); 371 372 layout_cas1->addWidget(new QLabel("Host"), 0, 0); 373 layout_cas1->addWidget(_outHost_1_LineEdit, 0, 1, 1, 3); 374 layout_cas1->addWidget(new QLabel(" Port"), 0, 4, Qt::AlignRight); 375 layout_cas1->addWidget(_outPort_1_LineEdit, 0, 5); 376 layout_cas1->addWidget(new QLabel("Mountpoint"), 1, 0); 377 layout_cas1->addWidget(_mountpoint_1_LineEdit, 1, 1); 378 layout_cas1->addWidget(new QLabel("Password"), 1, 2, Qt::AlignRight); 379 layout_cas1->addWidget(_password_1_LineEdit, 1, 3); 380 layout_cas1->addWidget(new QLabel(" "), 1, 4); 381 layout_cas1->addWidget(new QLabel(" "), 1, 5); 382 layout_cas1->addWidget(new QLabel("System"), 2, 0); 383 layout_cas1->addWidget(_refSys_1_ComboBox, 2, 1); 384 layout_cas1->addWidget(new QLabel(" Save (full path)"), 2, 2, Qt::AlignRight); 385 layout_cas1->addWidget(_outFile_1_LineEdit, 2, 3, 1, 30); 386 layout_cas1->addWidget(new QLabel("Produce broadcast ephemeris corrections, upload to caster, reference system, local storage."), 3, 0, 1, 50); 356 387 357 388 tab_cas1->setLayout(layout_cas1); 358 389 359 // Caster Tab II 360 // ------------- 390 connect(_outHost_1_LineEdit, SIGNAL(textChanged(const QString &)), 391 this, SLOT(bnsText(const QString &))); 392 if (_outHost_1_LineEdit->text().isEmpty()) { 393 _outPort_1_LineEdit->setStyleSheet("background-color: lightGray"); 394 _mountpoint_1_LineEdit->setStyleSheet("background-color: lightGray"); 395 _password_1_LineEdit->setStyleSheet("background-color: lightGray"); 396 _outFile_1_LineEdit->setStyleSheet("background-color: lightGray"); 397 _refSys_1_ComboBox->setStyleSheet("background-color: lightGray"); 398 _outPort_1_LineEdit->setEnabled(false); 399 _mountpoint_1_LineEdit->setEnabled(false); 400 _password_1_LineEdit->setEnabled(false); 401 _outFile_1_LineEdit->setEnabled(false); 402 _refSys_1_ComboBox->setEnabled(false); 403 } 404 405 // Ephemeris Corrections II Tab 406 // ---------------------------- 361 407 QWidget* tab_cas2 = new QWidget(); 362 408 tabs->addTab(tab_cas2, "Ephemeris Corrections II"); 363 409 364 410 QGridLayout* layout_cas2 = new QGridLayout; 411 365 412 layout_cas2->setColumnMinimumWidth(0, 9*ww); 366 layout_cas2->addWidget(new QLabel("Host"), 0, 0); 367 layout_cas2->addWidget(_outHost_2_LineEdit, 0, 1, 1, 3); 368 layout_cas2->addWidget(new QLabel("Port"), 0, 4, Qt::AlignRight); 369 layout_cas2->addWidget(_outPort_2_LineEdit, 0, 5); 370 layout_cas2->addWidget(new QLabel("Mountpoint"), 1, 0); 371 layout_cas2->addWidget(_mountpoint_2_LineEdit, 1, 1); 372 layout_cas2->addWidget(new QLabel("Password"), 1, 2, Qt::AlignRight); 373 layout_cas2->addWidget(_password_2_LineEdit, 1, 3); 374 layout_cas2->addWidget(new QLabel(" "), 1, 4); 375 layout_cas2->addWidget(new QLabel(" "), 1, 5); 376 layout_cas2->addWidget(new QLabel("System"), 2, 0); 377 layout_cas2->addWidget(_refSys_2_ComboBox, 2, 1); 378 layout_cas2->addWidget(new QLabel("Save (full path)"), 2, 2, Qt::AlignRight); 379 layout_cas2->addWidget(_outFile_2_LineEdit, 2, 3, 1, 10); 380 layout_cas2->addWidget(new QLabel("Produce broadcast ephemeris corrections, upload to caster, reference system, local storage."), 3, 0, 1, 10); 413 _outPort_2_LineEdit->setMaximumWidth(9*ww); 414 _password_2_LineEdit->setMaximumWidth(9*ww); 415 _mountpoint_2_LineEdit->setMaximumWidth(12*ww); 416 _refSys_2_ComboBox->setMaximumWidth(12*ww); 417 418 layout_cas2->addWidget(new QLabel("Host"), 0, 0); 419 layout_cas2->addWidget(_outHost_2_LineEdit, 0, 1, 1, 3); 420 layout_cas2->addWidget(new QLabel(" Port"), 0, 4, Qt::AlignRight); 421 layout_cas2->addWidget(_outPort_2_LineEdit, 0, 5); 422 layout_cas2->addWidget(new QLabel("Mountpoint"), 1, 0); 423 layout_cas2->addWidget(_mountpoint_2_LineEdit, 1, 1); 424 layout_cas2->addWidget(new QLabel("Password"), 1, 2, Qt::AlignRight); 425 layout_cas2->addWidget(_password_2_LineEdit, 1, 3); 426 layout_cas2->addWidget(new QLabel(" "), 1, 4); 427 layout_cas2->addWidget(new QLabel(" "), 1, 5); 428 layout_cas2->addWidget(new QLabel("System"), 2, 0); 429 layout_cas2->addWidget(_refSys_2_ComboBox, 2, 1); 430 layout_cas2->addWidget(new QLabel(" Save (full path)"), 2, 2, Qt::AlignRight); 431 layout_cas2->addWidget(_outFile_2_LineEdit, 2, 3, 1, 30); 432 layout_cas2->addWidget(new QLabel("Produce broadcast ephemeris corrections, upload to caster, reference system, local storage."), 3, 0, 1, 50); 381 433 382 434 tab_cas2->setLayout(layout_cas2); 383 435 384 // RINEX Tab 385 // --------- 436 connect(_outHost_2_LineEdit, SIGNAL(textChanged(const QString &)), 437 this, SLOT(bnsText(const QString &))); 438 if (_outHost_2_LineEdit->text().isEmpty()) { 439 _outPort_2_LineEdit->setStyleSheet("background-color: lightGray"); 440 _mountpoint_2_LineEdit->setStyleSheet("background-color: lightGray"); 441 _password_2_LineEdit->setStyleSheet("background-color: lightGray"); 442 _outFile_2_LineEdit->setStyleSheet("background-color: lightGray"); 443 _refSys_2_ComboBox->setStyleSheet("background-color: lightGray"); 444 _outPort_2_LineEdit->setEnabled(false); 445 _mountpoint_2_LineEdit->setEnabled(false); 446 _password_2_LineEdit->setEnabled(false); 447 _outFile_2_LineEdit->setEnabled(false); 448 _refSys_2_ComboBox->setEnabled(false); 449 } 450 451 // RINEX Clocks Tab 452 // ---------------- 386 453 QWidget* tab_rin = new QWidget(); 387 454 tabs->addTab(tab_rin, "RINEX Clocks "); 388 455 389 456 QGridLayout* layout_rin = new QGridLayout; 457 390 458 layout_rin->setColumnMinimumWidth(0, 9*ww); 459 _rnxIntrComboBox->setMaximumWidth(9*ww); 391 460 392 461 layout_rin->addWidget(new QLabel("Directory"), 0, 0); 393 layout_rin->addWidget(_rnxPathLineEdit, 0, 1 );462 layout_rin->addWidget(_rnxPathLineEdit, 0, 1, 1, 27); 394 463 layout_rin->addWidget(new QLabel("Interval"), 1, 0); 395 464 layout_rin->addWidget(_rnxIntrComboBox, 1, 1); 396 465 layout_rin->addWidget(new QLabel("Sampling"), 2, 0); 397 466 layout_rin->addWidget(_rnxSamplSpinBox, 2, 1); 398 layout_rin->addWidget(new QLabel("Save clock corrections in Clock RINEX file format."), 3, 0, 1, 2, Qt::AlignLeft); 467 layout_rin->addWidget(new QLabel("Save clock corrections in Clock RINEX file format."), 3, 0, 1, 50, Qt::AlignLeft); 468 layout_rin->addWidget(new QLabel(" "), 3, 0); 399 469 400 470 tab_rin->setLayout(layout_rin); 401 471 402 // SP3 Tab 403 // ------- 472 connect(_rnxPathLineEdit, SIGNAL(textChanged(const QString &)), 473 this, SLOT(bnsText(const QString &))); 474 if (_rnxPathLineEdit->text().isEmpty()) { 475 _rnxIntrComboBox->setStyleSheet("background-color: lightGray"); 476 _rnxSamplSpinBox->setStyleSheet("background-color: lightGray"); 477 _rnxIntrComboBox->setEnabled(false); 478 _rnxSamplSpinBox->setEnabled(false); 479 } 480 481 // SP3 Orbits Tab 482 // -------------- 404 483 QWidget* tab_sp3 = new QWidget(); 405 484 tabs->addTab(tab_sp3, "SP3 Orbits"); 406 485 407 486 QGridLayout* layout_sp3 = new QGridLayout; 487 408 488 layout_sp3->setColumnMinimumWidth(0, 9*ww); 489 _sp3IntrComboBox->setMaximumWidth(9*ww); 409 490 410 491 layout_sp3->addWidget(new QLabel("Directory"), 0, 0); 411 layout_sp3->addWidget(_sp3PathLineEdit, 0, 1 );492 layout_sp3->addWidget(_sp3PathLineEdit, 0, 1, 1, 27); 412 493 layout_sp3->addWidget(new QLabel("Interval"), 1, 0); 413 494 layout_sp3->addWidget(_sp3IntrComboBox, 1, 1); 414 495 layout_sp3->addWidget(new QLabel("Sampling"), 2, 0); 415 496 layout_sp3->addWidget(_sp3SamplSpinBox, 2, 1); 416 layout_sp3->addWidget(new QLabel("Save orbit corrections in SP3 file format."), 3, 0, 1, 2, Qt::AlignLeft); 497 layout_sp3->addWidget(new QLabel("Save orbit corrections in SP3 file format."), 3, 0, 1, 50, Qt::AlignLeft); 498 layout_sp3->addWidget(new QLabel(" "), 3, 0); 417 499 418 500 tab_sp3->setLayout(layout_sp3); 501 502 connect(_sp3PathLineEdit, SIGNAL(textChanged(const QString &)), 503 this, SLOT(bnsText(const QString &))); 504 if (_sp3PathLineEdit->text().isEmpty()) { 505 _sp3IntrComboBox->setStyleSheet("background-color: lightGray"); 506 _sp3SamplSpinBox->setStyleSheet("background-color: lightGray"); 507 _sp3IntrComboBox->setEnabled(false); 508 _sp3SamplSpinBox->setEnabled(false); 509 } 510 511 tabs->setCurrentIndex(settings.value("startTab").toInt()); 419 512 420 513 // Log … … 426 519 // Status 427 520 // ------ 428 //_status = new QWidget();429 521 _status = new QGroupBox(tr("Status")); 430 522 QGridLayout* layout_status = new QGridLayout; … … 466 558 467 559 _canvas->setLayout(mainLayout); 560 561 // Auto start 562 // ---------- 563 if ( Qt::CheckState(settings.value("autoStart").toInt()) == Qt::Checked) { 564 slotStart(); 565 } 566 468 567 } 469 568 … … 498 597 } 499 598 500 // Flowchart599 // Flowchart 501 600 //////////////////////////////////////////////////////////////////////////// 502 601 void bnsWindow::slotFlowchart() { … … 518 617 QFont newFont = QFontDialog::getFont(&ok, this->font(), this); 519 618 if (ok) { 520 QSettings settings;619 bnsSettings settings; 521 620 settings.setValue("font", newFont.toString()); 522 621 QApplication::setFont(newFont); … … 563 662 //////////////////////////////////////////////////////////////////////////// 564 663 void bnsWindow::slotSaveOptions() { 565 QSettings settings;664 bnsSettings settings; 566 665 settings.setValue("proxyHost", _proxyHostLineEdit->text()); 567 666 settings.setValue("proxyPort", _proxyPortLineEdit->text()); 568 667 settings.setValue("logFile", _logFileLineEdit->text()); 569 668 settings.setValue("fileAppend", _fileAppendCheckBox->checkState()); 669 settings.setValue("autoStart", _autoStartCheckBox->checkState()); 570 670 settings.setValue("refSys_1", _refSys_1_ComboBox->currentText()); 571 671 settings.setValue("refSys_2", _refSys_2_ComboBox->currentText()); … … 591 691 settings.setValue("sp3Intr", _sp3IntrComboBox->currentText()); 592 692 settings.setValue("sp3Sampl", _sp3SamplSpinBox->value()); 693 settings.setValue("startTab", tabs->currentIndex()); 593 694 } 594 695 … … 688 789 } 689 790 } 791 792 // Bns Text 793 //////////////////////////////////////////////////////////////////////////// 794 void bnsWindow::bnsText(const QString &text){ 795 796 bool isEmpty = text.isEmpty(); 797 798 QPalette palette; 799 QColor lightGray(230, 230, 230); 800 QColor white(255, 255, 255); 801 802 // Enable/disable Proxy Options 803 // ----- 804 if (tabs->currentIndex() == 0) { 805 if (!isEmpty) { 806 _proxyPortLineEdit->setStyleSheet("background-color: white"); 807 _proxyPortLineEdit->setEnabled(true); 808 } else { 809 _proxyPortLineEdit->setStyleSheet("background-color: lightGray"); 810 _proxyPortLineEdit->setEnabled(false); 811 } 812 } 813 814 // Enable/disable Ephemeris Corrections I Options 815 // ----------------------------------------------- 816 if (tabs->currentIndex() == 4) { 817 if (!isEmpty) { 818 _outPort_1_LineEdit->setStyleSheet("background-color: white"); 819 _mountpoint_1_LineEdit->setStyleSheet("background-color: white"); 820 _password_1_LineEdit->setStyleSheet("background-color: white"); 821 _outFile_1_LineEdit->setStyleSheet("background-color: white"); 822 _refSys_1_ComboBox->setStyleSheet("background-color: white"); 823 _outPort_1_LineEdit->setEnabled(true); 824 _mountpoint_1_LineEdit->setEnabled(true); 825 _password_1_LineEdit->setEnabled(true); 826 _outFile_1_LineEdit->setEnabled(true); 827 _refSys_1_ComboBox->setEnabled(true); 828 } else { 829 _outPort_1_LineEdit->setStyleSheet("background-color: lightGray"); 830 _mountpoint_1_LineEdit->setStyleSheet("background-color: lightGray"); 831 _password_1_LineEdit->setStyleSheet("background-color: lightGray"); 832 _outFile_1_LineEdit->setStyleSheet("background-color: lightGray"); 833 _refSys_1_ComboBox->setStyleSheet("background-color: lightGray"); 834 _outPort_1_LineEdit->setEnabled(false); 835 _mountpoint_1_LineEdit->setEnabled(false); 836 _password_1_LineEdit->setEnabled(false); 837 _outFile_1_LineEdit->setEnabled(false); 838 _refSys_1_ComboBox->setEnabled(false); 839 } 840 } 841 842 // Enable/disable Ephemeris Corrections II Options 843 // ----------------------------------------------- 844 if (tabs->currentIndex() == 5) { 845 if (!isEmpty) { 846 _outPort_2_LineEdit->setStyleSheet("background-color: white"); 847 _mountpoint_2_LineEdit->setStyleSheet("background-color: white"); 848 _password_2_LineEdit->setStyleSheet("background-color: white"); 849 _outFile_2_LineEdit->setStyleSheet("background-color: white"); 850 _refSys_2_ComboBox->setStyleSheet("background-color: white"); 851 _outPort_2_LineEdit->setEnabled(true); 852 _mountpoint_2_LineEdit->setEnabled(true); 853 _password_2_LineEdit->setEnabled(true); 854 _outFile_2_LineEdit->setEnabled(true); 855 _refSys_2_ComboBox->setEnabled(true); 856 } else { 857 _outPort_2_LineEdit->setStyleSheet("background-color: lightGray"); 858 _mountpoint_2_LineEdit->setStyleSheet("background-color: lightGray"); 859 _password_2_LineEdit->setStyleSheet("background-color: lightGray"); 860 _outFile_2_LineEdit->setStyleSheet("background-color: lightGray"); 861 _refSys_2_ComboBox->setStyleSheet("background-color: lightGray"); 862 _outPort_2_LineEdit->setEnabled(false); 863 _mountpoint_2_LineEdit->setEnabled(false); 864 _password_2_LineEdit->setEnabled(false); 865 _outFile_2_LineEdit->setEnabled(false); 866 _refSys_2_ComboBox->setEnabled(false); 867 } 868 } 869 870 // Enable/disable RINEX Clocks Options 871 // ----------------------------------- 872 if (tabs->currentIndex() == 6) { 873 if (!isEmpty) { 874 _rnxIntrComboBox->setStyleSheet("background-color: white"); 875 _rnxSamplSpinBox->setStyleSheet("background-color: white"); 876 _rnxIntrComboBox->setEnabled(true); 877 _rnxSamplSpinBox->setEnabled(true); 878 } else { 879 _rnxIntrComboBox->setStyleSheet("background-color: lightGray"); 880 _rnxSamplSpinBox->setStyleSheet("background-color: lightGray"); 881 _rnxIntrComboBox->setEnabled(false); 882 _rnxSamplSpinBox->setEnabled(false); 883 } 884 } 885 886 // Enable/disable SP3 Orbits Options 887 // --------------------------------- 888 if (tabs->currentIndex() == 7) { 889 if (!isEmpty) { 890 _sp3IntrComboBox->setStyleSheet("background-color: white"); 891 _sp3SamplSpinBox->setStyleSheet("background-color: white"); 892 _sp3IntrComboBox->setEnabled(true); 893 _sp3SamplSpinBox->setEnabled(true); 894 } else { 895 _sp3IntrComboBox->setStyleSheet("background-color: lightGray"); 896 _sp3SamplSpinBox->setStyleSheet("background-color: lightGray"); 897 _sp3IntrComboBox->setEnabled(false); 898 _sp3SamplSpinBox->setEnabled(false); 899 } 900 } 901 902 } -
trunk/BNS/bnswindow.h
r1258 r1668 32 32 void slotMessage(const QByteArray msg); 33 33 void slotError(const QByteArray msg); 34 void bnsText(const QString &text); 34 35 35 36 private slots: … … 98 99 QSpinBox* _sp3SamplSpinBox; 99 100 QCheckBox* _fileAppendCheckBox; 101 QCheckBox* _autoStartCheckBox; 100 102 101 103 QTextEdit* _log; 102 104 105 QTabWidget* tabs; 103 106 //QWidget* _status; 104 107 QGroupBox* _status;
Note:
See TracChangeset
for help on using the changeset viewer.