[tor-commits] [vidalia/master] Flash Message Log button when a warn status event happens

chiiph at torproject.org chiiph at torproject.org
Wed Mar 7 15:45:52 UTC 2012


commit b61cca2c672532ff2bc8f54df06ac35d85f623c4
Author: Tomás Touceda <chiiph at torproject.org>
Date:   Wed Mar 7 12:44:48 2012 -0300

    Flash Message Log button when a warn status event happens
---
 changes/bug3957             |    2 ++
 src/vidalia/MainWindow.cpp  |   31 +++++++++++++++++++++++++++++++
 src/vidalia/MainWindow.h    |    9 +++++++++
 src/vidalia/VClickLabel.cpp |   25 +++++++++++++++++++++++++
 src/vidalia/VClickLabel.h   |    7 +++++++
 5 files changed, 74 insertions(+), 0 deletions(-)

diff --git a/changes/bug3957 b/changes/bug3957
new file mode 100644
index 0000000..36e3d61
--- /dev/null
+++ b/changes/bug3957
@@ -0,0 +1,2 @@
+  o Notify users that a warning status event has appeared by flashing
+    the Message Log button. Fixes bug 3957.
\ No newline at end of file
diff --git a/src/vidalia/MainWindow.cpp b/src/vidalia/MainWindow.cpp
index a23478e..e45919d 100644
--- a/src/vidalia/MainWindow.cpp
+++ b/src/vidalia/MainWindow.cpp
@@ -105,6 +105,8 @@ MainWindow::MainWindow()
 
   ui.setupUi(this);
 
+  _warnTimer = new QTimer();
+
   /* Pressing 'Esc' or 'Ctrl+W' will close the window */
   Vidalia::createShortcut("Ctrl+W", this, ui.btnHide, SLOT(click()));
   Vidalia::createShortcut("Esc", this, ui.btnHide, SLOT(click()));
@@ -162,6 +164,8 @@ MainWindow::MainWindow()
           this, SLOT(circuitEstablished()));
   connect(_torControl, SIGNAL(dangerousPort(quint16, bool)),
           this, SLOT(warnDangerousPort(quint16, bool)));
+  connect(_torControl, SIGNAL(logMessage(tc::Severity, QString)),
+          this, SLOT(log(tc::Severity, QString)));
 
   /* Create a new HelperProcess object, used to start the web browser */
   _browserProcess = new HelperProcess(this);
@@ -186,6 +190,8 @@ MainWindow::MainWindow()
   connect(vApp, SIGNAL(running()), this, SLOT(running()));
   connect(vApp, SIGNAL(aboutToQuit()), this, SLOT(aboutToQuit()));
 
+  connect(_warnTimer, SIGNAL(timeout()), this, SLOT(warnButton()));
+
 #if defined(USE_AUTOUPDATE)
   /* Create a timer used to remind us to check for software updates */
   connect(&_updateTimer, SIGNAL(timeout()), this, SLOT(checkForUpdates()));
@@ -229,6 +235,8 @@ MainWindow::MainWindow()
   /* Vidalia launched in background (LSUIElement=true). Bring to foreground. */
   VidaliaWindow::setVisible(true);
 #endif
+
+  _flashToggle = false;
 }
 
 /** Destructor. */
@@ -439,6 +447,10 @@ MainWindow::createActions()
           _messageLog, SLOT(showWindow()));
   connect(ui.lblMessageLog, SIGNAL(clicked()),
           _messageLog, SLOT(showWindow()));
+  connect(ui.lblMessageLog, SIGNAL(clicked()),
+          _warnTimer, SLOT(stop()));
+  connect(ui.lblMessageLog, SIGNAL(clicked()),
+          ui.lblMessageLog, SLOT(disableFlashing()));
 
   _actionShowNetworkMap = new QAction(tr("Network Map"), this);
   connect(_actionShowNetworkMap, SIGNAL(triggered()), 
@@ -2122,3 +2134,22 @@ MainWindow::updateBrowserEnv() {
 
   return env;
 }
+
+void
+MainWindow::log(tc::Severity type, const QString &message)
+{
+  if(type == tc::WarnSeverity)
+    _warnTimer->start(1000);
+}
+
+void
+MainWindow::warnButton()
+{
+  if(_flashToggle) {
+    ui.lblMessageLog->enableFlashing();
+  } else {
+    ui.lblMessageLog->disableFlashing();
+  }
+
+  _flashToggle = !_flashToggle;
+}
diff --git a/src/vidalia/MainWindow.h b/src/vidalia/MainWindow.h
index dc251e1..f13fee8 100644
--- a/src/vidalia/MainWindow.h
+++ b/src/vidalia/MainWindow.h
@@ -143,6 +143,11 @@ private slots:
                            const QString &version,
                            const QStringList &recommended);
 
+  /** Called when torControl emits logMessage() */
+  void log(tc::Severity type, const QString &message);
+  /** Toggles the color for the Message Log button */
+  void warnButton();
+
 #if defined(USE_AUTOUPDATE)
   /** Called when the user clicks the 'Check Now' button in the General
    * settings page. */
@@ -290,6 +295,10 @@ private:
 
   quint16 _autoControlPort;
 
+  /** Timer and bool used to flash buttons with a different color */
+  QTimer *_warnTimer;
+  bool _flashToggle;
+
   Ui::MainWindow ui; /**< Qt Designer generated object. */
 };
 
diff --git a/src/vidalia/VClickLabel.cpp b/src/vidalia/VClickLabel.cpp
index 9691a52..3166ee2 100644
--- a/src/vidalia/VClickLabel.cpp
+++ b/src/vidalia/VClickLabel.cpp
@@ -24,6 +24,7 @@ VClickLabel::VClickLabel(QWidget *parent)
  : QWidget(parent)
 {
   setCursor(Qt::PointingHandCursor);
+  _flashToggle = false;
 }
 
 /** Returns the current size hint for this widget's current contents. */
@@ -49,6 +50,17 @@ VClickLabel::paintEvent(QPaintEvent *e)
   QPainter p(this);
   QRect rect = this->rect();
 
+  if(_flashToggle) {
+    p.setBrush(QColor(150,150,150));
+    rect.setX(rect.x()+1);
+    rect.setY(rect.y()+1);
+    rect.setWidth(rect.width());
+    rect.setHeight(rect.height());
+    p.drawRect(rect);
+  }
+
+  rect = this->rect();
+
   if (vApp->isLeftToRight()) {
     if (!_pixmap.isNull())
       p.drawPixmap(0, qMax((rect.height()-_pixmap.height())/2, 0), _pixmap);
@@ -93,3 +105,16 @@ VClickLabel::setPixmap(const QPixmap &pixmap)
   update();
 }
 
+void
+VClickLabel::enableFlashing()
+{
+  _flashToggle = true;
+  repaint();
+}
+
+void
+VClickLabel::disableFlashing()
+{
+  _flashToggle = false;
+  repaint();
+}
diff --git a/src/vidalia/VClickLabel.h b/src/vidalia/VClickLabel.h
index 2f3e677..23a2b74 100644
--- a/src/vidalia/VClickLabel.h
+++ b/src/vidalia/VClickLabel.h
@@ -46,6 +46,12 @@ public:
   Q_PROPERTY(QString text READ text WRITE setText USER true);
   Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap USER true);
 
+public slots:
+  /** Enables painting a different background color for this label */
+  void enableFlashing();
+  /** Disables the background color modification */
+  void disableFlashing();
+
 signals:
   /** Emitted when the widget is left-clicked. */
   void clicked();
@@ -59,6 +65,7 @@ protected:
 private:
   QString _text;    /**< Text label to display in the widget. */
   QPixmap _pixmap;  /**< Image to display in the widget. */
+  bool _flashToggle;/**< Bool toggle for flashing the button. */
 };
 
 #endif



More information about the tor-commits mailing list