source: ntrip/trunk/BNC/bnctabledlg.cpp@ 1490

Last change on this file since 1490 was 1490, checked in by mervart, 15 years ago

* empty log message *

File size: 22.0 KB
Line 
1// Part of BNC, a utility for retrieving decoding and
2// converting GNSS data streams from NTRIP broadcasters.
3//
4// Copyright (C) 2007
5// German Federal Agency for Cartography and Geodesy (BKG)
6// http://www.bkg.bund.de
7// Czech Technical University Prague, Department of Geodesy
8// http://www.fsv.cvut.cz
9//
10// Email: euref-ip@bkg.bund.de
11//
12// This program is free software; you can redistribute it and/or
13// modify it under the terms of the GNU General Public License
14// as published by the Free Software Foundation, version 2.
15//
16// This program is distributed in the hope that it will be useful,
17// but WITHOUT ANY WARRANTY; without even the implied warranty of
18// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19// GNU General Public License for more details.
20//
21// You should have received a copy of the GNU General Public License
22// along with this program; if not, write to the Free Software
23// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24
25/* -------------------------------------------------------------------------
26 * BKG NTRIP Client
27 * -------------------------------------------------------------------------
28 *
29 * Class: bncTableDlg
30 *
31 * Purpose: Displays the source table, allows mountpoints selection
32 *
33 * Author: L. Mervart
34 *
35 * Created: 24-Dec-2005
36 *
37 * Changes:
38 *
39 * -----------------------------------------------------------------------*/
40
41#include "bnctabledlg.h"
42#include "bncgetthread.h"
43#include "bncnetqueryv2.h"
44
45using namespace std;
46
47// Constructor
48////////////////////////////////////////////////////////////////////////////
49bncTableDlg::bncTableDlg(QWidget* parent) : QDialog(parent) {
50
51 setMinimumSize(600,400);
52 setWindowTitle(tr("Add Streams"));
53
54 QVBoxLayout* mainLayout = new QVBoxLayout(this);
55
56 int ww = QFontMetrics(font()).width('w');
57
58 _casterPortLineEdit = new QLineEdit();
59 _casterPortLineEdit->setMaximumWidth(9*ww);
60
61 _casterUserLineEdit = new QLineEdit();
62 _casterUserLineEdit->setMaximumWidth(9*ww);
63
64 _casterPasswordLineEdit = new QLineEdit();
65 _casterPasswordLineEdit->setMaximumWidth(9*ww);
66 _casterPasswordLineEdit->setEchoMode(QLineEdit::Password);
67
68 _casterHostComboBox = new QComboBox();
69 _casterHostComboBox->setMaxCount(10);
70 _casterHostComboBox->setDuplicatesEnabled(false);
71 _casterHostComboBox->setEditable(true);
72 _casterHostComboBox->setMinimumWidth(20*ww);
73 _casterHostComboBox->setMaximumWidth(20*ww);
74 connect(_casterHostComboBox, SIGNAL(currentIndexChanged(const QString&)),
75 this, SLOT(slotCasterHostChanged(const QString&)));
76 QSettings settings;
77 settings.remove("casterHostList");
78 settings.remove("casterHost");
79 settings.remove("casterPort");
80 settings.remove("casterUser");
81 settings.remove("casterPassword");
82 QStringList casterUrlList = settings.value("casterUrlList").toStringList();
83 for (int ii = 0; ii < casterUrlList.count(); ii++) {
84 QUrl url(casterUrlList[ii]);
85 _casterHostComboBox->addItem(url.host());
86 }
87
88 _ntripVersionComboBox = new QComboBox();
89 _ntripVersionComboBox->addItems(QString("1,2,R").split(","));
90 int kk = _ntripVersionComboBox->findText(settings.value("ntripVersion").toString());
91 if (kk != -1) {
92 _ntripVersionComboBox->setCurrentIndex(kk);
93 }
94 _ntripVersionComboBox->setMaximumWidth(5*ww);
95
96 _buttonCasterTable = new QPushButton(tr("Show"), this);
97 connect(_buttonCasterTable, SIGNAL(clicked()), this, SLOT(slotCasterTable()));
98 _buttonCasterTable->setMaximumWidth(5*ww);
99
100 // WhatsThis
101 // ---------
102 _casterUserLineEdit->setWhatsThis(tr("<p>Access to some streams on NTRIP broadcasters may be restricted. You'll need to enter a valid 'User ID' and 'Password' for access to these protected streams.</p><p>Accounts are usually provided per NTRIP broadcaster through a registration process. Register through <u>http://igs.bkg.bund.de/index_ntrip_reg.htm</u> for access to protected streams on <u>www.euref-ip.net</u> and <u>www.igs-ip.net</u>.</p>"));
103 _casterHostComboBox->setWhatsThis(tr("<p>Enter the NTRIP broadcaster hostname or IP number.</p><p>Note that EUREF and IGS operate NTRIP broadcasters at <u>http://www.euref-ip.net/home</u> and <u>http://www.igs-ip.net/home</u>.</p>"));
104 _casterPortLineEdit->setWhatsThis(tr("Enter the NTRIP broadcaster port number."));
105 _casterPasswordLineEdit->setWhatsThis(tr("Access to some streams on NTRIP broadcasters may be restricted. You'll need to enter a valid 'Password' for access to these protected streams."));
106
107 QGridLayout* editLayout = new QGridLayout;
108 editLayout->addWidget(new QLabel(tr("Caster host")), 0, 0);
109 editLayout->addWidget(_casterHostComboBox, 0, 1);
110 editLayout->addWidget(new QLabel(tr(" Caster port")), 0, 2, Qt::AlignRight);
111 editLayout->addWidget(_casterPortLineEdit, 0, 3);
112 editLayout->addWidget(new QLabel(tr("Caster table")), 0, 4, Qt::AlignRight);
113 editLayout->addWidget(_buttonCasterTable, 0, 5);
114 editLayout->addWidget(new QLabel(tr("User")), 1, 0, Qt::AlignRight);
115 editLayout->addWidget(_casterUserLineEdit, 1, 1);
116 editLayout->addWidget(new QLabel(tr("Password")), 1, 2, Qt::AlignRight);
117 editLayout->addWidget(_casterPasswordLineEdit, 1, 3);
118 editLayout->addWidget(new QLabel(tr(" NTRIP Version")),1, 4, Qt::AlignRight);
119 editLayout->addWidget(_ntripVersionComboBox, 1, 5);
120
121 mainLayout->addLayout(editLayout);
122
123 _buttonCasterTable->setWhatsThis(tr("<p>Hit 'Show' for a table of known NTRIP broadcaster installations as maintained at <u>www.rtcm-ntrip.org/home.</u></p><p>A window opens which allows to select a broadcaster for stream retrieval.</p>"));
124 _ntripVersionComboBox->setWhatsThis(tr("<p>Select the NTRIP transport protocol version you want to use. Implemented options are:<br>&nbsp; 1:&nbsp; NTRIP version 1, TCP/IP<br>&nbsp; 2:&nbsp; NTRIP version 2, TCP/IP mode<br>&nbsp; R:&nbsp; NTRIP Version 2, RTSP/RTP mode<br>Select option '1' if you are not sure whether the NTRIP broadcaster supports NTRIP version 2.</p><p>Note that RTSP/RTP (option 'R') is sometimes not supported by mobile Internet Service Providers.</p>"));
125
126 _table = new QTableWidget(this);
127 _table->setWhatsThis(tr("<p>Use the 'Get Table' button to download the sourcetable from the selected NTRIP broadcaster. Select the desired streams line by line, using +Shift and +Ctrl when necessary. Hit 'OK' to return to the main window.</p><p>Pay attention to data field 'format'. Keep in mind that BNC can only decode and convert streams that come in RTCM Version 2.x, RTCM Version 3.x, or RTIGS format. See data field 'format-details' for available message types and their repetition rates in brackets.</p><p>The content of data field 'nmea' tells you whether a stream comes from a virtual reference station (VRS).</p>"));
128 connect(_table, SIGNAL(itemSelectionChanged()),
129 this, SLOT(slotSelectionChanged()));
130 mainLayout->addWidget(_table);
131
132 _buttonWhatsThis = new QPushButton(tr("Help=Shift+F1"), this);
133 connect(_buttonWhatsThis, SIGNAL(clicked()), this, SLOT(slotWhatsThis()));
134
135 _buttonGet = new QPushButton(tr("Get table"), this);
136 _buttonGet->setDefault(true);
137 connect(_buttonGet, SIGNAL(clicked()), this, SLOT(slotGetTable()));
138
139 _buttonCancel = new QPushButton(tr("Cancel"), this);
140 connect(_buttonCancel, SIGNAL(clicked()), this, SLOT(reject()));
141
142 _buttonOK = new QPushButton(tr("OK"), this);
143 connect(_buttonOK, SIGNAL(clicked()), this, SLOT(accept()));
144
145 QHBoxLayout* buttonLayout = new QHBoxLayout;
146 buttonLayout->addWidget(_buttonWhatsThis);
147 buttonLayout->addStretch(1);
148 buttonLayout->addWidget(_buttonGet);
149 buttonLayout->addWidget(_buttonCancel);
150 buttonLayout->addWidget(_buttonOK);
151
152 mainLayout->addLayout(buttonLayout);
153}
154
155// Destructor
156////////////////////////////////////////////////////////////////////////////
157bncTableDlg::~bncTableDlg() {
158 delete _casterHostComboBox;
159 delete _casterPortLineEdit;
160 delete _casterUserLineEdit;
161 delete _casterPasswordLineEdit;
162 delete _ntripVersionComboBox;
163 delete _buttonGet;
164 delete _buttonCancel;
165 delete _buttonOK;
166 delete _buttonWhatsThis;
167 delete _buttonCasterTable;
168 delete _table;
169}
170
171// Read Table the caster (static)
172////////////////////////////////////////////////////////////////////////////
173t_irc bncTableDlg::getFullTable(const QString& casterHost,
174 int casterPort, QStringList& allLines,
175 bool alwaysRead) {
176
177 static QMutex mutex;
178 static QMap<QString, QStringList> allTables;
179
180 QMutexLocker locker(&mutex);
181
182 if (!alwaysRead && allTables.find(casterHost) != allTables.end()) {
183 allLines = allTables.find(casterHost).value();
184 return success;
185 }
186
187 allLines.clear();
188
189 QUrl url;
190 url.setHost(casterHost);
191 url.setPort(casterPort);
192 url.setScheme("http");
193 url.setPath("/");
194
195 bncNetQueryV2 query;
196 QByteArray outData;
197 query.waitForRequestResult(url, outData);
198 if (query.status() == bncNetQuery::finished) {
199 QTextStream in(outData);
200 QString line = in.readLine();
201 while ( !line.isNull() ) {
202 allLines.append(line);
203 line = in.readLine();
204 }
205 allTables.insert(casterHost, allLines);
206 return success;
207 }
208 else {
209 return failure;
210 }
211}
212
213// Read Table from Caster
214////////////////////////////////////////////////////////////////////////////
215void bncTableDlg::slotGetTable() {
216
217 _buttonGet->setEnabled(false);
218 _buttonCasterTable->setEnabled(false);
219
220 _allLines.clear();
221
222 if ( getFullTable(_casterHostComboBox->currentText(),
223 _casterPortLineEdit->text().toInt(),
224 _allLines) != success ) {
225 QMessageBox::warning(0, "BNC", "Cannot retrieve table of data");
226 _buttonGet->setEnabled(true);
227 return;
228 }
229
230 QStringList lines;
231 QStringListIterator it(_allLines);
232 int endSourceTable = 1;
233 while (it.hasNext()) {
234 QString line = it.next();
235 if ((endSourceTable == 1 ) && line.indexOf("ENDSOURCETABLE") == 0) {
236 endSourceTable = 0;
237 }
238 if (line.indexOf("STR") == 0) {
239 lines.push_back(line);
240 }
241 }
242
243 static const QStringList labels = QString("mountpoint,identifier,format,"
244 "format-details,carrier,system,network,country,lat,long,"
245 "nmea,solution,generator,compress.,auth.,fee,bitrate,"
246 "misc").split(",");
247
248 if (lines.size() > 0) {
249 _table->setSelectionMode(QAbstractItemView::ExtendedSelection);
250 _table->setSelectionBehavior(QAbstractItemView::SelectRows);
251
252 QStringList hlp = lines[0].split(";");
253 _table->setColumnCount(hlp.size()-1);
254 _table->setRowCount(lines.size() - endSourceTable);
255
256 QListIterator<QString> it(lines);
257 int nRow = -1;
258 while (it.hasNext()) {
259 QStringList columns = it.next().split(";");
260 ++nRow;
261 for (int ic = 0; ic < columns.size()-1; ic++) {
262
263 if (ic+1 == 11) { if (columns[ic+1] == "0") { columns[ic+1] = "no"; } else { columns[ic+1] = "yes"; }}
264
265 QTableWidgetItem* it = new QTableWidgetItem(columns[ic+1]);
266 it->setFlags(it->flags() & ~Qt::ItemIsEditable);
267 _table->setItem(nRow, ic, it);
268 }
269 }
270 _table->sortItems(0);
271 _table->setHorizontalHeaderLabels(labels);
272 _table->setSortingEnabled(true);
273
274 int ww = QFontMetrics(this->font()).width('w');
275 _table->horizontalHeader()->resizeSection(0,10*ww);
276 _table->horizontalHeader()->resizeSection(1,10*ww);
277 _table->horizontalHeader()->resizeSection(2,8*ww);
278 _table->horizontalHeader()->resizeSection(3,22*ww);
279 _table->horizontalHeader()->resizeSection(4,5*ww);
280 _table->horizontalHeader()->resizeSection(5,8*ww);
281 _table->horizontalHeader()->resizeSection(6,8*ww);
282 _table->horizontalHeader()->resizeSection(7,7*ww);
283 _table->horizontalHeader()->resizeSection(8,6*ww);
284 _table->horizontalHeader()->resizeSection(9,6*ww);
285 _table->horizontalHeader()->resizeSection(10,6*ww);
286 _table->horizontalHeader()->resizeSection(11,6*ww);
287 _table->horizontalHeader()->resizeSection(12,15*ww);
288 _table->horizontalHeader()->resizeSection(13,8*ww);
289 _table->horizontalHeader()->resizeSection(14,5*ww);
290 _table->horizontalHeader()->resizeSection(15,5*ww);
291 _table->horizontalHeader()->resizeSection(16,7*ww);
292 _table->horizontalHeader()->resizeSection(17,15*ww);
293 }
294}
295
296// Accept slot
297////////////////////////////////////////////////////////////////////////////
298void bncTableDlg::accept() {
299
300 QSettings settings;
301 settings.setValue("ntripVersion", _ntripVersionComboBox->currentText());
302 QUrl url;
303 url.setScheme("http");
304 url.setHost(_casterHostComboBox->currentText());
305 url.setPort(_casterPortLineEdit->text().toInt());
306 url.setUserName(_casterUserLineEdit->text());
307 url.setPassword(_casterPasswordLineEdit->text());
308 addUrl(url);
309
310 QStringList* mountPoints = new QStringList;
311
312 if (_table) {
313 for (int ir = 0; ir < _table->rowCount(); ir++) {
314 QTableWidgetItem* item = _table->item(ir,0);
315 QString format = _table->item(ir,2)->text();
316 QString latitude = _table->item(ir,8)->text();
317 QString longitude = _table->item(ir,9)->text();
318 QString nmea = _table->item(ir,10)->text();
319 QString ntripVersion = _ntripVersionComboBox->currentText();
320 format.replace(" ", "_");
321 if (_table->isItemSelected(item)) {
322 url.setPath(item->text());
323 mountPoints->push_back(url.toString() + " " + format + " " + latitude
324 + " " + longitude + " " + nmea + " " + ntripVersion);
325 }
326 }
327 }
328 emit newMountPoints(mountPoints);
329
330 QDialog::accept();
331}
332
333// User changed the selection of mountPoints
334////////////////////////////////////////////////////////////////////////////
335void bncTableDlg::slotSelectionChanged() {
336 if (_table->selectedItems().isEmpty()) {
337 }
338}
339
340// Create RINEX skeleton header
341////////////////////////////////////////////////////////////////////////////
342void bncTableDlg::slotSkl() {
343
344 int nRows = _table->rowCount();
345 for (int iRow = 0; iRow < nRows; iRow++) {
346 if (_table->isItemSelected(_table->item(iRow,1))) {
347 QString staID = _table->item(iRow,0)->text();
348 QString net = _table->item(iRow,6)->text();
349
350 QString ftpDir;
351 QStringListIterator it(_allLines);
352 while (it.hasNext()) {
353 QString line = it.next();
354 if (line.indexOf("NET") == 0) {
355 QStringList tags = line.split(';');
356 if (tags.at(1) == net) {
357 ftpDir = tags.at(6);
358 break;
359 }
360 }
361 }
362
363 if (!ftpDir.isEmpty()) {
364 QUrl url(ftpDir);
365 QMessageBox::warning(0, "Warning", url.host() + "\n" + url.path() +
366 "\nnot yet implemented");
367 }
368 }
369 }
370}
371
372// Whats This Help
373void bncTableDlg::slotWhatsThis() {
374QWhatsThis::enterWhatsThisMode();
375}
376
377// Slot caster table
378////////////////////////////////////////////////////////////////////////////
379void bncTableDlg::slotCasterTable() {
380
381 _buttonCasterTable->setEnabled(false);
382 _casterHostComboBox->setEnabled(false);
383 _casterPortLineEdit->setEnabled(false);
384 _casterUserLineEdit->setEnabled(false);
385 _casterPasswordLineEdit->setEnabled(false);
386 _ntripVersionComboBox->setEnabled(false);
387 _buttonWhatsThis->setEnabled(false);
388 _buttonGet->setEnabled(false);
389 _buttonCancel->setEnabled(false);
390 _buttonOK->setEnabled(false);
391
392 bncCasterTableDlg* dlg = new bncCasterTableDlg(this);
393 dlg->move(this->pos().x()+50, this->pos().y()+50);
394 connect(dlg, SIGNAL(newCaster(QString, QString)),
395 this, SLOT(slotNewCaster(QString, QString)));
396 dlg->exec();
397 delete dlg;
398
399 _buttonCasterTable->setEnabled(true);
400 _casterHostComboBox->setEnabled(true);
401 _casterPortLineEdit->setEnabled(true);
402 _casterUserLineEdit->setEnabled(true);
403 _casterPasswordLineEdit->setEnabled(true);
404 _ntripVersionComboBox->setEnabled(true);
405 _buttonWhatsThis->setEnabled(true);
406 _buttonGet->setEnabled(true);
407 _buttonCancel->setEnabled(true);
408 _buttonOK->setEnabled(true);
409
410}
411
412// Caster table
413////////////////////////////////////////////////////////////////////////////
414bncCasterTableDlg::bncCasterTableDlg(QWidget* parent) :
415 QDialog(parent) {
416
417 static const QStringList labels = QString("host,port,identifier,operator,nmea,country,lat,long,link").split(",");
418
419 QStringList lines;
420 lines.clear();
421 _casterTable = new QTableWidget(this);
422
423 QUrl url;
424 url.setHost("www.rtcm-ntrip.org");
425 url.setPort(2101);
426 url.setScheme("http");
427 url.setPath("/");
428
429 bncNetQueryV2 query;
430 QByteArray outData;
431 query.waitForRequestResult(url, outData);
432 int endSourceTable = 1;
433 if (query.status() == bncNetQuery::finished) {
434 QTextStream in(outData);
435 QString line = in.readLine();
436 while ( !line.isNull() ) {
437 line = in.readLine();
438 if ((endSourceTable == 1 ) && line.indexOf("ENDSOURCETABLE") == 0) {
439 endSourceTable = 0;
440 }
441 if (line.indexOf("CAS") == 0) {
442 lines.append(line);
443 }
444 }
445 }
446 if (lines.size() > 0) {
447 _casterTable->setSelectionMode(QAbstractItemView::ExtendedSelection);
448 _casterTable->setSelectionBehavior(QAbstractItemView::SelectRows);
449
450 QStringList hlp = lines[0].split(";");
451 _casterTable->setColumnCount(hlp.size()-1);
452 _casterTable->setRowCount(lines.size() - endSourceTable);
453
454 QListIterator<QString> it(lines);
455 int nRow = -1;
456 while (it.hasNext()) {
457 QStringList columns = it.next().split(";");
458 ++nRow;
459 for (int ic = 0; ic < columns.size()-1; ic++) {
460 if (ic+1 == 5) { if (columns[ic+1] == "0") { columns[ic+1] = "no"; } else { columns[ic+1] = "yes"; }}
461 QTableWidgetItem* it = new QTableWidgetItem(columns[ic+1]);
462 it->setFlags(it->flags() & ~Qt::ItemIsEditable);
463 _casterTable->setItem(nRow, ic, it);
464 }
465 }
466 }
467 _casterTable->sortItems(0);
468 _casterTable->setHorizontalHeaderLabels(labels);
469 _casterTable->setSortingEnabled(true);
470
471 int ww = QFontMetrics(this->font()).width('w');
472 _casterTable->horizontalHeader()->resizeSection(0,15*ww);
473 _casterTable->horizontalHeader()->resizeSection(1,5*ww);
474 _casterTable->horizontalHeader()->resizeSection(2,15*ww);
475 _casterTable->horizontalHeader()->resizeSection(3,15*ww);
476 _casterTable->horizontalHeader()->resizeSection(4,5*ww);
477 _casterTable->horizontalHeader()->resizeSection(5,7*ww);
478 _casterTable->horizontalHeader()->resizeSection(6,7*ww);
479 _casterTable->horizontalHeader()->resizeSection(7,7*ww);
480 _casterTable->horizontalHeader()->resizeSection(8,15*ww);
481
482 ww = QFontMetrics(font()).width('w');
483
484 _closeButton = new QPushButton("Cancel");
485 connect(_closeButton, SIGNAL(clicked()), this, SLOT(close()));
486 _closeButton->setMinimumWidth(8*ww);
487 _closeButton->setMaximumWidth(8*ww);
488
489 _okButton = new QPushButton(tr("OK"), this);
490 connect(_okButton, SIGNAL(clicked()), this, SLOT(slotAcceptCasterTable()));
491 _okButton->setMinimumWidth(8*ww);
492 _okButton->setMaximumWidth(8*ww);
493
494 _whatsThisButton = new QPushButton(tr("Help=Shift+F1"), this);
495 connect(_whatsThisButton, SIGNAL(clicked()), this, SLOT(slotWhatsThis()));
496 _whatsThisButton->setMinimumWidth(12*ww);
497 _whatsThisButton->setMaximumWidth(12*ww);
498
499 _casterTable->setWhatsThis(tr("<p>Select an NTRIP broadcaster and hit 'OK'.</p><p>See <u>http://www.rtcm-ntrip.org/home</u> for further details on known NTRIP broadcaster installations.</u>."));
500
501 QGridLayout* dlgLayout = new QGridLayout();
502 dlgLayout->addWidget(new QLabel(" List of NTRIP Broadcasters from www.rtcm-ntrip.org"), 0,0,1,3,Qt::AlignLeft);
503 dlgLayout->addWidget(_casterTable, 1, 0, 1, 3);
504 dlgLayout->addWidget(_whatsThisButton, 2, 0);
505 dlgLayout->addWidget(_closeButton, 2, 1, Qt::AlignRight);
506 dlgLayout->addWidget(_okButton, 2, 2);
507
508 setMinimumSize(600,400);
509 setWindowTitle(tr("Select Broadcaster"));
510 setLayout(dlgLayout);
511 resize(68*ww, 60*ww);
512 show();
513}
514
515// Caster table destructor
516////////////////////////////////////////////////////////////////////////////
517bncCasterTableDlg::~bncCasterTableDlg() {
518 delete _casterTable;
519 delete _okButton;
520 delete _closeButton;
521 delete _whatsThisButton;
522}
523
524// Caster table what's this
525////////////////////////////////////////////////////////////////////////////
526void bncCasterTableDlg:: slotWhatsThis() {
527 QWhatsThis::enterWhatsThisMode();
528}
529
530// Accept caster table
531////////////////////////////////////////////////////////////////////////////
532void bncCasterTableDlg::slotAcceptCasterTable() {
533 if (_casterTable) {
534 for (int ir = _casterTable->rowCount() - 1; ir >= 0 ; ir--) {
535 if (_casterTable->isItemSelected(_casterTable->item(ir,0))) {
536 emit newCaster(_casterTable->item(ir,0)->text(),
537 _casterTable->item(ir,1)->text());
538 }
539 }
540 }
541 QDialog::accept();
542}
543
544// New caster selected
545////////////////////////////////////////////////////////////////////////////
546void bncTableDlg::slotNewCaster(QString newCasterHost, QString newCasterPort) {
547
548 _casterHostComboBox->insertItem(0, newCasterHost);
549 _casterHostComboBox->setCurrentIndex(0);
550 _casterUserLineEdit->setText("");
551 _casterPortLineEdit->setText(newCasterPort);
552
553 QUrl url;
554 url.setScheme("http");
555 url.setHost(newCasterHost);
556 url.setPort(newCasterPort.toInt());
557 addUrl(url);
558
559 _casterHostComboBox->setCurrentIndex(0);
560}
561
562// New caster selected
563////////////////////////////////////////////////////////////////////////////
564void bncTableDlg::addUrl(const QUrl& url) {
565 QSettings settings;
566 QStringList oldUrlList = settings.value("casterUrlList").toStringList();
567 QStringList newUrlList;
568 newUrlList << url.toString();
569 for (int ii = 0; ii < oldUrlList.count(); ii++) {
570 QUrl oldUrl(oldUrlList[ii]);
571 if (url.host() != oldUrl.host()) {
572 newUrlList << oldUrl.toString();
573 }
574 }
575 settings.setValue("casterUrlList", newUrlList);
576 settings.sync();
577}
578
579// New caster selected in combobox
580////////////////////////////////////////////////////////////////////////////
581void bncTableDlg::slotCasterHostChanged(const QString& newHost) {
582 QSettings settings;
583 QStringList casterUrlList = settings.value("casterUrlList").toStringList();
584 for (int ii = 0; ii < casterUrlList.count(); ii++) {
585 QUrl url(casterUrlList[ii]);
586 if (url.host() == newHost) {
587 _casterUserLineEdit->setText(url.userName());
588 _casterPasswordLineEdit->setText(url.password());
589 if (url.port() > 0) {
590 _casterPortLineEdit->setText(QString("%1").arg(url.port()));
591 }
592 else {
593 _casterPortLineEdit->setText("");
594 }
595 }
596 }
597}
Note: See TracBrowser for help on using the repository browser.