optionsWidget.cc 16.4 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//=============================================================================
//
//                               OpenFlipper
//        Copyright (C) 2008 by Computer Graphics Group, RWTH Aachen
//                           www.openflipper.org
//
//-----------------------------------------------------------------------------
//
//                                License
//
//  OpenFlipper is free software: you can redistribute it and/or modify
//  it under the terms of the GNU Lesser General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
Jan Möbius's avatar
Jan Möbius committed
15
//
16
17
18
19
//  OpenFlipper is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU Lesser General Public License for more details.
Jan Möbius's avatar
Jan Möbius committed
20
//
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//  You should have received a copy of the GNU Lesser General Public License
//  along with OpenFlipper.  If not, see <http://www.gnu.org/licenses/>.
//
//-----------------------------------------------------------------------------
//
//   $Revision: 1909 $
//   $Author: wilden $
//   $Date: 2008-06-03 18:45:21 +0200 (Tue, 03 Jun 2008) $
//
//=============================================================================




#include "optionsWidget.hh"
#include <iostream>
#include <OpenFlipper/common/GlobalOptions.hh>
Dirk Wilden's avatar
Dirk Wilden committed
38
39
#include <ACG/Scenegraph/DrawModes.hh>
#include <OpenFlipper/ACGHelper/DrawModeConverter.hh>
40
#include <OpenFlipper/INIFile/INIFile.hh>
Dirk Wilden's avatar
Dirk Wilden committed
41
42

OptionsWidget::OptionsWidget(std::vector<PluginInfo>& _plugins, std::vector<KeyBinding>& _core, QWidget *parent)
Jan Möbius's avatar
Jan Möbius committed
43
44
45
46
  : QWidget(parent),
    plugins_(_plugins),
    coreKeys_(_core)

47
48
{
  setupUi(this);
Dirk Wilden's avatar
Dirk Wilden committed
49

50
51
  connect(applyButton,SIGNAL(clicked()),this,SLOT(slotApply()));
  connect(cancelButton,SIGNAL(clicked()),this,SLOT(slotCancel()));
Jan Möbius's avatar
Jan Möbius committed
52
  connect(checkUpdateButton,SIGNAL(clicked()),this,SLOT(slotCheckUpdates()));
Dirk Wilden's avatar
Dirk Wilden committed
53
  connect( restrictFPS, SIGNAL(toggled(bool)), FPS, SLOT(setEnabled(bool)) );
Dirk Wilden's avatar
Dirk Wilden committed
54
55
  uint mode = 2;
  for (uint i=1; i < 22; i++) {
56
    std::vector< QString > dm = drawModeToDescriptions( mode );
Jan Möbius's avatar
Jan Möbius committed
57

58
    if ( !dm.empty() && dm[0].trimmed() != ""){
Dirk Wilden's avatar
Dirk Wilden committed
59
      QListWidgetItem* item = new QListWidgetItem(dm[0]);
Jan Möbius's avatar
Jan Möbius committed
60

Dirk Wilden's avatar
Dirk Wilden committed
61
      item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsUserCheckable | Qt::ItemIsSelectable);
62
63
64
65
66

//       if (OpenFlipper::Options::standardDrawMode() )
//         item->setCheckState(Qt::Checked);
//       else
        item->setCheckState(Qt::Unchecked);
Dirk Wilden's avatar
Dirk Wilden committed
67
68
69

      availDrawModes->addItem( item );
    }
70

Dirk Wilden's avatar
Dirk Wilden committed
71
72
    mode = mode<<1;

73
  }
Jan Möbius's avatar
Jan Möbius committed
74

Jan Möbius's avatar
Jan Möbius committed
75
  http = new QHttp(this);
Jan Möbius's avatar
Jan Möbius committed
76

Jan Möbius's avatar
Jan Möbius committed
77
78
79
80
81
82
83
  // http specific connections
  connect(http, SIGNAL(requestFinished(int, bool)),
        this, SLOT(httpRequestFinished(int, bool)));
  connect(http, SIGNAL(responseHeaderReceived(const QHttpResponseHeader &)),
        this, SLOT(readResponseHeader(const QHttpResponseHeader &)));
  connect(http, SIGNAL(dataReadProgress(int, int)),
          this, SLOT(updateDataReadProgress(int, int)));
Jan Möbius's avatar
Jan Möbius committed
84

Jan Möbius's avatar
Jan Möbius committed
85
86
87

  progressDialog = new QProgressDialog(this);
  connect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelDownload()));
88
89
}

Dirk Wilden's avatar
Dirk Wilden committed
90
void OptionsWidget::showEvent ( QShowEvent * /*event*/ ) {
Dirk Wilden's avatar
Dirk Wilden committed
91

Jan Möbius's avatar
Jan Möbius committed
92
  //general
Dirk Wilden's avatar
Dirk Wilden committed
93
94
95
96
  fullscreen->setChecked( OpenFlipper::Options::fullScreen() );
  splash->setChecked( OpenFlipper::Options::splash() );
  toolbox->setChecked( !OpenFlipper::Options::hideToolbox() );
  logger->setChecked( !OpenFlipper::Options::hideLogger() );
Dirk Wilden's avatar
Dirk Wilden committed
97
  enableLogFile->setChecked( OpenFlipper::Options::logFileEnabled() );
Jan Möbius's avatar
Jan Möbius committed
98

Dirk Wilden's avatar
Dirk Wilden committed
99
100
  //paths
  logFile->setText( OpenFlipper::Options::logFile() );
Dirk Wilden's avatar
Dirk Wilden committed
101
102
103
104
105
106

  //viewer
  backfaceCulling->setChecked( OpenFlipper::Options::backfaceCulling() );
  wZoomFactor->setText( QString::number(OpenFlipper::Options::wheelZoomFactor(), 'f') );
  wZoomFactorShift->setText( QString::number(OpenFlipper::Options::wheelZoomFactorShift(), 'f') );

107
108
109
  restrictFPS->setChecked( OpenFlipper::Options::restrictFrameRate() );
  FPS->setValue( OpenFlipper::Options::maxFrameRate() );

110
111
112
113
114
  // updates
  updateUser->setText( OpenFlipper::Options::updateUsername() );
  updatePass->setText( OpenFlipper::Options::updatePassword() );
  updateURL->setText( OpenFlipper::Options::updateUrl( ) );

Jan Möbius's avatar
Jan Möbius committed
115
116
117
  // debugging
  slotDebugging->setChecked(OpenFlipper::Options::doSlotDebugging());

118
119
120
  //set drawmodes


Dirk Wilden's avatar
Dirk Wilden committed
121
  //keyBindings
122
123
  keyTree->clear();

Dirk Wilden's avatar
Dirk Wilden committed
124
125
126
127
128
129
130
131
132
133
134
135
136
  keyTree->setColumnCount ( 2 );

  QStringList headerdata;
  headerdata << "Action" << "Shortcut";
  keyTree->setHeaderLabels(headerdata);

  //add Core Keys
  QTreeWidgetItem * core = new QTreeWidgetItem(keyTree, QStringList("CoreWidget"));

  QList<QTreeWidgetItem *> keys;

  for (uint i=0; i < coreKeys_.size(); i++){
    QStringList row;
Jan Möbius's avatar
Jan Möbius committed
137
138
    QKeySequence keySequence( coreKeys_[i].key + coreKeys_[i].modifiers );
    row << coreKeys_[i].description << keySequence.toString();
Dirk Wilden's avatar
Dirk Wilden committed
139
140
141
142
143
144
145
146
147
148
    keys.append(new QTreeWidgetItem(core, row));
  }

  core->addChildren(keys);
  keyTree->addTopLevelItem( core );



  QList<QTreeWidgetItem *> plugins;

Dirk Wilden's avatar
Dirk Wilden committed
149
150
  int off = 0;

Dirk Wilden's avatar
Dirk Wilden committed
151
  for (uint i=0; i < plugins_.size(); i++){
Dirk Wilden's avatar
Dirk Wilden committed
152
153
//      if (( (plugins_[i]).keys).size() == 0)
//        continue;
154

Dirk Wilden's avatar
Dirk Wilden committed
155
156
157
158
159
160
    plugins.append(new QTreeWidgetItem(keyTree, QStringList( plugins_[i].name )));

    QList<QTreeWidgetItem *> keys;

    for (int k=0; k < plugins_[i].keys.count(); k++){
      QStringList row;
Jan Möbius's avatar
Jan Möbius committed
161
162
      QKeySequence keySequence( plugins_[i].keys[k].key + plugins_[i].keys[k].modifiers );
      row << plugins_[i].keys[k].description << keySequence.toString();
Dirk Wilden's avatar
Dirk Wilden committed
163
      keys.append(new QTreeWidgetItem(plugins[i-off], row));
Dirk Wilden's avatar
Dirk Wilden committed
164
165
    }

Dirk Wilden's avatar
Dirk Wilden committed
166
167
168
169
170
171
172
    if (keys.count() > 0)
      plugins[i-off]->addChildren(keys);
    else{
      delete plugins[i-off];
      plugins.removeLast();
      off++;
    }
Dirk Wilden's avatar
Dirk Wilden committed
173
174
  }

175
176
  if (plugins.count() > 0)
    keyTree->addTopLevelItems( plugins );
Dirk Wilden's avatar
Dirk Wilden committed
177

178
  keyTree->setColumnWidth(0,350);
179
180
181
182
183
184


  for (int i = 0 ; i < availDrawModes->count(); ++i )
    availDrawModes->item( i )->setCheckState(Qt::Unchecked) ;

  //Check the drawModes from StandardDrawMode
Dirk Wilden's avatar
Dirk Wilden committed
185
  std::vector< QString > dm = drawModeToDescriptions( OpenFlipper::Options::standardDrawMode() );
186
187
188
189
190
191
192
193

  for (uint i=0; i < dm.size(); i++){
    if ( !dm.empty() ) {
      QList< QListWidgetItem* > found = availDrawModes->findItems(dm[i],Qt::MatchExactly);
      for(int k=0; k < found.count(); k++)
        (found[k])->setCheckState(Qt::Checked);
    }
  }
Jan Möbius's avatar
Jan Möbius committed
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299

  updateVersionsTable();

}

void OptionsWidget::updateVersionsTable() {

  QString fileName = QDir::home().absolutePath() + OpenFlipper::Options::dirSeparator() +
                     ".OpenFlipper" + OpenFlipper::Options::dirSeparator() + "Versions.ini" ;

  INIFile ini;

  ini.connect(fileName,false);

  QString systemString = "";

  if ( OpenFlipper::Options::isWindows() ) {
    systemString = "VersionWindows";
  } else if (OpenFlipper::Options::isLinux()) {
    systemString = "VersionLinux";
  } else {
    std::cerr << "Unsupported platform for update" << std::endl;
    return;
  }

  updateList->clear();
  updateList->setRowCount( 1 + plugins_.size() );
  updateList->setColumnCount(3);

  QStringList header;

  header << "Component" << "current Version" << "latest Version" ;
  updateList->setHorizontalHeaderLabels(header);

  QBrush currentBrush(Qt::white);

  QTableWidgetItem * newItem = 0;

  QString coreVersion;

  if ( ini.is_connected() && ini.get_entry(coreVersion, "Core" , systemString ) ) {

    // Newer Version available
    if ( isNewer(OpenFlipper::Options::coreVersion(),coreVersion) )
      currentBrush.setColor(Qt::red);
    else
      currentBrush.setColor(Qt::green);

    newItem = new QTableWidgetItem( coreVersion );

  } else {

    // No local Information available
    currentBrush.setColor(Qt::yellow);

    newItem = new QTableWidgetItem( "Not Available" );
  }

  newItem->setBackground(currentBrush);
  updateList->setItem(0, 2, newItem);

  newItem = new QTableWidgetItem( OpenFlipper::Options::coreVersion() );
  newItem->setBackground(currentBrush);
  updateList->setItem(0, 1, newItem);

  newItem = new QTableWidgetItem( "Core" );
  newItem->setBackground(currentBrush);
  updateList->setItem(0, 0, newItem);


  for ( uint i = 0 ; i < plugins_.size(); ++i ) {
    QString latestVersion;

    if ( ini.is_connected() && ini.get_entry(latestVersion, plugins_[i].name , systemString ) ) {


      // Newer Version available
      if ( isNewer(plugins_[i].version,latestVersion) )
        currentBrush.setColor(Qt::red);
      else
        currentBrush.setColor(Qt::green);

      newItem = new QTableWidgetItem( latestVersion );

    } else {

      // No local Information available
      currentBrush.setColor(Qt::yellow);

      newItem = new QTableWidgetItem( "Not Available" );
    }

    newItem->setBackground(currentBrush);
    updateList->setItem( i + 1 , 2, newItem);

    newItem = new QTableWidgetItem( plugins_[i].version );
    newItem->setBackground(currentBrush);
    updateList->setItem( i + 1 , 1, newItem);

    newItem = new QTableWidgetItem( plugins_[i].name );
    newItem->setBackground(currentBrush);
    updateList->setItem( i + 1 , 0, newItem);
  }

  updateList->resizeColumnsToContents();

300
301
302
}

void OptionsWidget::slotApply() {
Dirk Wilden's avatar
Dirk Wilden committed
303

Jan Möbius's avatar
Jan Möbius committed
304
  //general
Dirk Wilden's avatar
Dirk Wilden committed
305
306
307
308
  OpenFlipper::Options::fullScreen( fullscreen->isChecked() );
  OpenFlipper::Options::splash( splash->isChecked() );
  OpenFlipper::Options::hideToolbox( !toolbox->isChecked() );
  OpenFlipper::Options::hideLogger( !logger->isChecked() );
Dirk Wilden's avatar
Dirk Wilden committed
309
310
311
312
  OpenFlipper::Options::logFileEnabled( enableLogFile->isChecked() );

  //paths
  OpenFlipper::Options::logFile( logFile->text() );
Dirk Wilden's avatar
Dirk Wilden committed
313
314
315
316
317
318

  //viewer
  OpenFlipper::Options::backfaceCulling( backfaceCulling->isChecked() );
  OpenFlipper::Options::wheelZoomFactor( wZoomFactor->text().toDouble() );
  OpenFlipper::Options::wheelZoomFactorShift( wZoomFactorShift->text().toDouble() );

319
320
321
  OpenFlipper::Options::restrictFrameRate( restrictFPS->isChecked() );
  OpenFlipper::Options::maxFrameRate( FPS->value() );

322
323
324
325
326
  // updates
  OpenFlipper::Options::updateUrl( updateURL->text() );
  OpenFlipper::Options::updateUsername( updateUser->text() );
  OpenFlipper::Options::updatePassword( updatePass->text() );

Jan Möbius's avatar
Jan Möbius committed
327
328
329
  // Debugging
  OpenFlipper::Options::doSlotDebugging(slotDebugging->isChecked());

Dirk Wilden's avatar
Dirk Wilden committed
330
331
332
333
334
335
336
  //standardDrawMode
  std::vector< QString > mode;

  for (int i=0; i < availDrawModes->count(); i++)
    if (availDrawModes->item(i)->checkState() == Qt::Checked)
      mode.push_back( availDrawModes->item(i)->text() );

337
  OpenFlipper::Options::standardDrawMode( descriptionsToDrawMode(mode) );
Dirk Wilden's avatar
Dirk Wilden committed
338

339
  emit applyOptions();
Dirk Wilden's avatar
Dirk Wilden committed
340
  emit saveOptions();
341

342
343
344
345
346
347
  hide();
}

void OptionsWidget::slotCancel() {
  hide();
}
Jan Möbius's avatar
Jan Möbius committed
348

Jan Möbius's avatar
Jan Möbius committed
349
350
void OptionsWidget::startDownload( QString _url ) {
   QUrl url(_url);
Jan Möbius's avatar
Jan Möbius committed
351

Jan Möbius's avatar
Jan Möbius committed
352
353
   // If username or passowrd are supplied, use them
   if ( ! updateUser->text().isEmpty() )
Jan Möbius's avatar
Jan Möbius committed
354
355
356
357
358
    url.setUserName(updateUser->text());

  if ( ! updatePass->text().isEmpty() )
    url.setPassword(updatePass->text());

Jan Möbius's avatar
Jan Möbius committed
359
360
361
362

  QFileInfo urlInfo(_url);

  // Download the file to the Home Directory
Jan Möbius's avatar
Jan Möbius committed
363
  QFileInfo fileInfo( QDir::home().absolutePath() + OpenFlipper::Options::dirSeparator() +
Jan Möbius's avatar
Jan Möbius committed
364
365
                      ".OpenFlipper" + OpenFlipper::Options::dirSeparator() + urlInfo.fileName() );

Jan Möbius's avatar
Jan Möbius committed
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
  QString fileName = fileInfo.filePath();

  if (QFile::exists(fileName)) {
    QFile::remove(fileName);
  }

  file = new QFile(fileName);
  if (!file->open(QIODevice::WriteOnly)) {
    std::cerr << "Unable to Open local file for writing" << std::endl;
    delete file;
    file = 0;
  } else {
    QHttp::ConnectionMode mode = url.scheme().toLower() == "https" ? QHttp::ConnectionModeHttps : QHttp::ConnectionModeHttp;
    http->setHost(url.host(), mode, url.port() == -1 ? 0 : url.port());

    if (!url.userName().isEmpty())
        http->setUser(url.userName(), url.password());

    httpRequestAborted = false;
    QByteArray path = QUrl::toPercentEncoding(url.path(), "!$&'()*+,;=:@/");
    if (path.isEmpty())
      path = "/";

    httpGetId = http->get(path, file);

Jan Möbius's avatar
Jan Möbius committed
391
    statusLabel->setText("Getting Versions file from Server");
Jan Möbius's avatar
Jan Möbius committed
392
393
394
395
396

    progressDialog->setWindowTitle(tr("HTTP"));
    progressDialog->setLabelText(tr("Downloading %1.").arg(fileName));
    checkUpdateButton->setEnabled(false);
  }
Jan Möbius's avatar
Jan Möbius committed
397
398
399
400
401
402
403
404

}

void OptionsWidget::slotCheckUpdates() {

   // http://www.graphics.rwth-aachen.de/restricted/OpenFlipper-SIL/

  downloadType = VERSIONS_FILE;
405
  QString ServerMainURL = updateURL->text() + "Versions.ini";
Jan Möbius's avatar
Jan Möbius committed
406
407
408

  startDownload(ServerMainURL);

Jan Möbius's avatar
Jan Möbius committed
409
410
411
412
413
}

void OptionsWidget::slotGetUpdates() {
}

414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
bool OptionsWidget::isNewer(QString _current, QString _latest) {

  QStringList latestVersionParts  = _latest.split('.');
  QStringList currentVersionParts = _current.split('.');

  bool newer = false;

  for ( int i = 0 ; i < latestVersionParts.size(); ++i ) {

    if ( i+1 > currentVersionParts.size() ) {
      // Versions are identical up to now. But latest version has additional version => updated
      newer = true;
      break;
    }

    bool ok = false;
    double latest  = latestVersionParts[i].toInt(&ok);
    double current = currentVersionParts[i].toInt(&ok);

    if ( !ok )
      std::cerr << "Error when parsing version strings!" << std::endl;

    if ( latest > current ) {
      newer = true;
      break;
    }
  }

  return newer;

}

void OptionsWidget::compareVersions() {

  QString fileName = QDir::home().absolutePath() + OpenFlipper::Options::dirSeparator() +
                     ".OpenFlipper" + OpenFlipper::Options::dirSeparator() + "Versions.ini" ;

  INIFile ini;
  if ( ! ini.connect(fileName,false) ) {
    std::cerr << "Failed to connect to Versions ini file" << std::endl;
    return;
  }

  statusLabel->setText("Checking for new versions");

  bool newerVersionsAvailable = false;

461
  QString systemString = "";
462
  if ( OpenFlipper::Options::isWindows() ) {
463
464
465
466
467
468
469
470
471
472
473
474
475
    systemString = "VersionWindows";
  } else if (OpenFlipper::Options::isLinux()) {
    systemString = "VersionLinux";
  } else {
    std::cerr << "Unsupported platform for update" << std::endl;
    return;
  }

  QString coreVersion;

  if ( ini.get_entry(coreVersion, "Core" , systemString )) {
    if ( isNewer( OpenFlipper::Options::coreVersion(), coreVersion ) ) {
      newerVersionsAvailable = true;
Jan Möbius's avatar
Jan Möbius committed
476
    }
477
478
479
480
481
  }

  for ( uint i = 0 ; i < plugins_.size(); ++i ) {
    QString latestVersion;
    if ( ini.get_entry(latestVersion, plugins_[i].name , systemString )) {
Jan Möbius's avatar
Jan Möbius committed
482
      if ( isNewer(  plugins_[i].version, latestVersion ) )
483
        newerVersionsAvailable = true;
484
    }
485
486
487
  }

  if ( newerVersionsAvailable ) {
Jan Möbius's avatar
Jan Möbius committed
488
    statusLabel->setText("Updates found");
489
490
  } else {
    statusLabel->setText("No updates found");
491
492
493
  }

  ini.disconnect();
Jan Möbius's avatar
Jan Möbius committed
494
495

  updateVersionsTable();
496
497
}

Jan Möbius's avatar
Jan Möbius committed
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
void OptionsWidget::httpRequestFinished(int requestId, bool error)
{
    if (requestId != httpGetId)
        return;
    if (httpRequestAborted) {
        if (file) {
            file->close();
            file->remove();
            delete file;
            file = 0;
        }

        progressDialog->hide();
        return;
    }

    if (requestId != httpGetId)
        return;

    progressDialog->hide();
    file->close();

    if (error) {
        file->remove();
Jan Möbius's avatar
Jan Möbius committed
522
        statusLabel->setText(tr("Download failed: %1.").arg(http->errorString()));
Jan Möbius's avatar
Jan Möbius committed
523
524
525
526
527
        QMessageBox::information(this, tr("HTTP"),
                                  tr("Download failed: %1.")
                                  .arg(http->errorString()));
    } else {
        QString fileName = QFileInfo(QUrl(updateURL->text()).path()).fileName();
Jan Möbius's avatar
Jan Möbius committed
528
        statusLabel->setText(tr("Downloaded %1").arg(file->fileName() ));
Jan Möbius's avatar
Jan Möbius committed
529
530
531
532
533
    }

    checkUpdateButton->setEnabled(true);
    delete file;
    file = 0;
534
535
536
537
538

    if ( !error ) {
      if ( downloadType == VERSIONS_FILE )
        compareVersions();
    }
Jan Möbius's avatar
Jan Möbius committed
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
}

void OptionsWidget::readResponseHeader(const QHttpResponseHeader &responseHeader)
{
  switch (responseHeader.statusCode()) {
  case 200:                   // Ok
  case 301:                   // Moved Permanently
  case 302:                   // Found
  case 303:                   // See Other
  case 307:                   // Temporary Redirect
    // these are not error conditions
    break;

  default:
    QMessageBox::information(this, tr("HTTP"),
                              tr("Download failed: %1.")
                              .arg(responseHeader.reasonPhrase()));
    statusLabel->setText("Download failed: " + responseHeader.reasonPhrase());
    httpRequestAborted = true;
    progressDialog->hide();
    http->abort();
  }
 }

void OptionsWidget::cancelDownload()
{
  statusLabel->setText(tr("download canceled."));
  httpRequestAborted = true;
  http->abort();
  checkUpdateButton->setEnabled(true);
}

void OptionsWidget::updateDataReadProgress(int bytesRead, int totalBytes)
{
  if (httpRequestAborted)
    return;

  progressDialog->setMaximum(totalBytes);
  progressDialog->setValue(bytesRead);
}



Jan Möbius's avatar
Jan Möbius committed
582
583