ginebra2/ContentToolbarSnippet.cpp
author hgs
Fri, 17 Sep 2010 12:11:40 -0400
changeset 12 afcd8e6d025b
parent 3 0954f5dd2cd0
child 16 3c88a81ff781
permissions -rw-r--r--
201037
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3
hgs
parents:
diff changeset
     1
hgs
parents:
diff changeset
     2
/*
hgs
parents:
diff changeset
     3
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     4
* All rights reserved.
hgs
parents:
diff changeset
     5
*
hgs
parents:
diff changeset
     6
* This program is free software: you can redistribute it and/or modify
hgs
parents:
diff changeset
     7
* it under the terms of the GNU Lesser General Public License as published by
hgs
parents:
diff changeset
     8
* the Free Software Foundation, version 2.1 of the License.
hgs
parents:
diff changeset
     9
*
hgs
parents:
diff changeset
    10
* This program is distributed in the hope that it will be useful,
hgs
parents:
diff changeset
    11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
hgs
parents:
diff changeset
    12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
hgs
parents:
diff changeset
    13
* GNU Lesser General Public License for more details.
hgs
parents:
diff changeset
    14
*
hgs
parents:
diff changeset
    15
* You should have received a copy of the GNU Lesser General Public License
hgs
parents:
diff changeset
    16
* along with this program.  If not,
hgs
parents:
diff changeset
    17
* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
hgs
parents:
diff changeset
    18
*
hgs
parents:
diff changeset
    19
* Description:
hgs
parents:
diff changeset
    20
* This class extends WebChromeContainerSnippet class to hold the
hgs
parents:
diff changeset
    21
* content view toolbar buttons. Showing/Hiding of the sub-chrome snippets in response to
hgs
parents:
diff changeset
    22
* the button selection is not entirely done here as we have a hybrid html-native design.
hgs
parents:
diff changeset
    23
* MostVisited: Show/Hide is handled in handleMVButton.
hgs
parents:
diff changeset
    24
* Menu: Show is handled in Javascript. Hide is handled here.
hgs
parents:
diff changeset
    25
* Zoom: Show/Hide is handled here. Zoom action buttons
hgs
parents:
diff changeset
    26
* Note: Most Visited is native while Menu and Zoom are html based. All three of them need to 
hgs
parents:
diff changeset
    27
* be dismissed if the user taps anywhere else on the screen. Since mv is native, it handles
hgs
parents:
diff changeset
    28
* all mouse events and dismisses itself. Zoom/Menu are created as PopupChromeItem which receives
hgs
parents:
diff changeset
    29
* the mouse events in its event filter and emits a signal if the user taps anywhere on the screen
hgs
parents:
diff changeset
    30
* other than itself. This signal is handled here.
hgs
parents:
diff changeset
    31
* Sub-chromes are hidden after a specified timeout if there is no user interaction with the
hgs
parents:
diff changeset
    32
* particular chrome. This class listens to the mouse events of the sub-chromes and
hgs
parents:
diff changeset
    33
* their children to manage this.
hgs
parents:
diff changeset
    34
*
hgs
parents:
diff changeset
    35
*/
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
#include "ContentToolbarSnippet.h"
hgs
parents:
diff changeset
    38
#include "ContentToolbarChromeItem.h"
hgs
parents:
diff changeset
    39
#include "mostvisitedsnippet.h"
hgs
parents:
diff changeset
    40
#include "ViewStack.h"
hgs
parents:
diff changeset
    41
#include "webpagecontroller.h"
hgs
parents:
diff changeset
    42
#include "ExternalEventCharm.h"
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
#include <QDebug>
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
namespace GVA {
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
  ContentToolbarSnippet::ContentToolbarSnippet(const QString& elementId, ChromeWidget * chrome, const QWebElement & element)
hgs
parents:
diff changeset
    51
                       : ToolbarSnippet(elementId, chrome, element),
hgs
parents:
diff changeset
    52
                       m_middleSnippet(NULL),
hgs
parents:
diff changeset
    53
                       m_subChromeSnippet(NULL)
hgs
parents:
diff changeset
    54
  {
hgs
parents:
diff changeset
    55
hgs
parents:
diff changeset
    56
      m_type = TOOLBAR_WEB_VIEW;
hgs
parents:
diff changeset
    57
      m_subChromeInactiveTimer = new QTimer(this);
hgs
parents:
diff changeset
    58
      connect(m_subChromeInactiveTimer, SIGNAL(timeout()), this, SLOT(onInactivityTimer()));
hgs
parents:
diff changeset
    59
hgs
parents:
diff changeset
    60
  }
hgs
parents:
diff changeset
    61
hgs
parents:
diff changeset
    62
  ContentToolbarSnippet::~ContentToolbarSnippet()
hgs
parents:
diff changeset
    63
  {
hgs
parents:
diff changeset
    64
      delete m_subChromeInactiveTimer;
hgs
parents:
diff changeset
    65
  }
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
  ContentToolbarSnippet * ContentToolbarSnippet::instance(const QString& elementId, ChromeWidget * chrome, const QWebElement & element)
hgs
parents:
diff changeset
    68
  {
hgs
parents:
diff changeset
    69
      ContentToolbarSnippet * that = new ContentToolbarSnippet( elementId, chrome, element );
hgs
parents:
diff changeset
    70
      that->setChromeWidget( new ContentToolbarChromeItem( that ) );
hgs
parents:
diff changeset
    71
      return that;
hgs
parents:
diff changeset
    72
  }
hgs
parents:
diff changeset
    73
  
hgs
parents:
diff changeset
    74
  void ContentToolbarSnippet::updateSize(QSize size) {
hgs
parents:
diff changeset
    75
    //qDebug() << "ContentToolbarSnippet::updateSize" << size.width() ;
hgs
parents:
diff changeset
    76
    setWidth(size.width());
hgs
parents:
diff changeset
    77
    ToolbarSnippet::updateSize(size);
hgs
parents:
diff changeset
    78
hgs
parents:
diff changeset
    79
  }
hgs
parents:
diff changeset
    80
hgs
parents:
diff changeset
    81
  void ContentToolbarSnippet::updateOwnerArea() {
hgs
parents:
diff changeset
    82
hgs
parents:
diff changeset
    83
hgs
parents:
diff changeset
    84
    //qDebug() << "ContentToolbarSnippet::updateOwnerArea" << m_chrome->width() ;
hgs
parents:
diff changeset
    85
    setWidth(m_chrome->layout()->size().width());
hgs
parents:
diff changeset
    86
    ToolbarSnippet::updateOwnerArea();
hgs
parents:
diff changeset
    87
hgs
parents:
diff changeset
    88
      //qDebug()  << "------------Relayout "<< elementId() << hidesContent();
hgs
parents:
diff changeset
    89
      // If hidesContent is true, it means that the snippet is tied to the chrome's layout. Hence, we
hgs
parents:
diff changeset
    90
      // should invalidate and activate the layout here so that the layout and recalculate all
hgs
parents:
diff changeset
    91
      // edges (we don't want to wait for the asynchronous layout request to be handled as
hgs
parents:
diff changeset
    92
      // that would cause the this snippet to be painted in incorrect position before the layoutRequest
hgs
parents:
diff changeset
    93
      // is handled
hgs
parents:
diff changeset
    94
      if (hidesContent() ) {
hgs
parents:
diff changeset
    95
	chrome()->layout()->layout()->invalidate();
hgs
parents:
diff changeset
    96
	chrome()->layout()->layout()->activate();
hgs
parents:
diff changeset
    97
      }
hgs
parents:
diff changeset
    98
  }
hgs
parents:
diff changeset
    99
hgs
parents:
diff changeset
   100
  void ContentToolbarSnippet::setWidth(int width ){
hgs
parents:
diff changeset
   101
hgs
parents:
diff changeset
   102
      QGraphicsLinearLayout* l = layout();
hgs
parents:
diff changeset
   103
hgs
parents:
diff changeset
   104
      // We are using the width of the first element as the first and last elements are the same width
hgs
parents:
diff changeset
   105
      if (l && l->itemAt(0)) {
hgs
parents:
diff changeset
   106
hgs
parents:
diff changeset
   107
          qreal snippetWidth =  width -(2 * l->itemAt(0)->geometry().width());
hgs
parents:
diff changeset
   108
          m_middleSnippet->setLayoutWidth(snippetWidth, true);
hgs
parents:
diff changeset
   109
hgs
parents:
diff changeset
   110
      }
hgs
parents:
diff changeset
   111
hgs
parents:
diff changeset
   112
  }
hgs
parents:
diff changeset
   113
hgs
parents:
diff changeset
   114
  void ContentToolbarSnippet::childAdded(ChromeSnippet* child) {
hgs
parents:
diff changeset
   115
hgs
parents:
diff changeset
   116
      addActionInfo(child->elementId());
hgs
parents:
diff changeset
   117
  }
hgs
parents:
diff changeset
   118
hgs
parents:
diff changeset
   119
  void ContentToolbarSnippet::addActionInfo(QString id) {
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
      ToolbarActions_t* t = new ToolbarActions_t();
hgs
parents:
diff changeset
   122
      if (id == "BackButtonSnippet" ) {
hgs
parents:
diff changeset
   123
          t->actionId = CONTENT_VIEW_ACTION_BACK;
hgs
parents:
diff changeset
   124
          t->actionName = CONTENT_TOTOLBAR_BACK;
hgs
parents:
diff changeset
   125
          t->normalImg = ":/chrome/bedrockchrome/toolbar.snippet/icons/icon_back.png";
hgs
parents:
diff changeset
   126
          t->disabledImg = ":/chrome/bedrockchrome/toolbar.snippet/icons/icon_back_disabled.png";
hgs
parents:
diff changeset
   127
          t->activeImg = ":/chrome/bedrockchrome/toolbar.snippet/icons/icon_back_pressed.png";
hgs
parents:
diff changeset
   128
      }
hgs
parents:
diff changeset
   129
      else if (id  == "ZoomButtonSnippet" ) {
hgs
parents:
diff changeset
   130
          t->actionId = CONTENT_VIEW_ACTION_ZOOM;
hgs
parents:
diff changeset
   131
          t->actionName = CONTENT_TOTOLBAR_ZOOM;
hgs
parents:
diff changeset
   132
          t->normalImg = ":/chrome/bedrockchrome/toolbar.snippet/icons/icon_zoom.png";
hgs
parents:
diff changeset
   133
          t->disabledImg = ":/chrome/bedrockchrome/toolbar.snippet/icons/icon_zoom_disabled.png";
hgs
parents:
diff changeset
   134
          t->activeImg = ":/chrome/bedrockchrome/toolbar.snippet/icons/icon_zoom_pressed.png";
hgs
parents:
diff changeset
   135
      }
hgs
parents:
diff changeset
   136
      else if (id == "MenuButtonSnippet" ) {
hgs
parents:
diff changeset
   137
          t->actionId = CONTENT_VIEW_ACTION_MENU;
hgs
parents:
diff changeset
   138
          t->actionName = CONTENT_TOTOLBAR_MENU;
hgs
parents:
diff changeset
   139
          t->normalImg = ":/chrome/bedrockchrome/toolbar.snippet/icons/icon_menu.png";
hgs
parents:
diff changeset
   140
          t->disabledImg = "";
hgs
parents:
diff changeset
   141
          t->activeImg = ":/chrome/bedrockchrome/toolbar.snippet/icons/icon_menu_pressed.png";
hgs
parents:
diff changeset
   142
      }
hgs
parents:
diff changeset
   143
      else if (id == "MostVisitedButtonSnippet" ) {
hgs
parents:
diff changeset
   144
          t->actionId = CONTENT_VIEW_ACTION_MOSTVISITED;
hgs
parents:
diff changeset
   145
          t->actionName = CONTENT_TOTOLBAR_MOSTVISITED;
hgs
parents:
diff changeset
   146
          t->normalImg = ":/chrome/bedrockchrome/toolbar.snippet/icons/icon_mostvisited.png";
hgs
parents:
diff changeset
   147
          t->disabledImg = "";
hgs
parents:
diff changeset
   148
          t->activeImg = ":/chrome/bedrockchrome/toolbar.snippet/icons/icon_mostvisited_pressed.png";
hgs
parents:
diff changeset
   149
      }
hgs
parents:
diff changeset
   150
      else if (id == "ToggleTBButtonSnippet" ) {
hgs
parents:
diff changeset
   151
          t->actionId = CONTENT_VIEW_ACTION_TOGGLETB;
hgs
parents:
diff changeset
   152
          t->actionName = CONTENT_TOTOLBAR_TOGGLETB;
hgs
parents:
diff changeset
   153
          t->normalImg = TOOLBAR_FULL_TB_TOGGLE_ICON;
hgs
parents:
diff changeset
   154
          t->disabledImg = "";
hgs
parents:
diff changeset
   155
          t->activeImg = TOOLBAR_FULL_TB_SELECTED_TOGGLE_ICON;
hgs
parents:
diff changeset
   156
      }
hgs
parents:
diff changeset
   157
      t->id = id;
hgs
parents:
diff changeset
   158
      m_actionInfo.append(t);
hgs
parents:
diff changeset
   159
  }
hgs
parents:
diff changeset
   160
hgs
parents:
diff changeset
   161
  void ContentToolbarSnippet::addChild(ChromeSnippet* child) {
hgs
parents:
diff changeset
   162
hgs
parents:
diff changeset
   163
      WebChromeContainerSnippet * s =  dynamic_cast<WebChromeContainerSnippet* >(child);
hgs
parents:
diff changeset
   164
      if (s) {
hgs
parents:
diff changeset
   165
          connect(child, SIGNAL(childAdded(ChromeSnippet*)), this, SLOT(childAdded(ChromeSnippet*)));
hgs
parents:
diff changeset
   166
          m_middleSnippet = s;
hgs
parents:
diff changeset
   167
          // Set the snippet width
hgs
parents:
diff changeset
   168
          setWidth(m_chrome->layout()->size().width());
hgs
parents:
diff changeset
   169
      }
hgs
parents:
diff changeset
   170
      else  {
hgs
parents:
diff changeset
   171
          addActionInfo(child->elementId());
hgs
parents:
diff changeset
   172
      }
hgs
parents:
diff changeset
   173
hgs
parents:
diff changeset
   174
      WebChromeContainerSnippet::addChild(child);
hgs
parents:
diff changeset
   175
hgs
parents:
diff changeset
   176
  }
hgs
parents:
diff changeset
   177
hgs
parents:
diff changeset
   178
  void ContentToolbarSnippet::onChromeComplete() {
hgs
parents:
diff changeset
   179
hgs
parents:
diff changeset
   180
      ChromeItem * item =  static_cast<ChromeItem* >(widget());
hgs
parents:
diff changeset
   181
      manageChildren(item);
hgs
parents:
diff changeset
   182
hgs
parents:
diff changeset
   183
      // Connect back to initialLayoutCompleted signal
hgs
parents:
diff changeset
   184
      ActionButtonSnippet * button  =  getActionButtonSnippet(CONTENT_VIEW_ACTION_BACK);
hgs
parents:
diff changeset
   185
      connect(WebPageController::getSingleton(), SIGNAL(initialLayoutCompleted()), button->widget(), SLOT(onHidden()));
hgs
parents:
diff changeset
   186
      connect(WebPageController::getSingleton(), SIGNAL(loadFinished(bool)), button->widget(), SLOT(onHidden()));
hgs
parents:
diff changeset
   187
hgs
parents:
diff changeset
   188
      connect(m_chrome, SIGNAL(aspectChanged(int)) , this, SLOT(onAspectChanged()));
hgs
parents:
diff changeset
   189
hgs
parents:
diff changeset
   190
  }
hgs
parents:
diff changeset
   191
hgs
parents:
diff changeset
   192
  void ContentToolbarSnippet::manageChildren(ChromeItem * it) {
hgs
parents:
diff changeset
   193
hgs
parents:
diff changeset
   194
hgs
parents:
diff changeset
   195
      /*!
hgs
parents:
diff changeset
   196
       * Content toolbar needs to listen to mouse events of each of the toolbar
hgs
parents:
diff changeset
   197
       * buttons as well as the snippets that pop-up on selecting these
hgs
parents:
diff changeset
   198
       * buttons. Some of these buttons are not direct children of content toolbar
hgs
parents:
diff changeset
   199
       * but placed within another container. Also, the pop-ups are not directly
hgs
parents:
diff changeset
   200
       * linked to content toolbar. Here, all these snippets are determined to connect to the
hgs
parents:
diff changeset
   201
       * widget's mosueEvent signal
hgs
parents:
diff changeset
   202
       */
hgs
parents:
diff changeset
   203
      QList<QGraphicsItem *> items = it->childItems();
hgs
parents:
diff changeset
   204
      //qDebug() << " ------------------- Num of children " << items.count();
hgs
parents:
diff changeset
   205
      for (int i = 0; i < items.count() ; i++) {
hgs
parents:
diff changeset
   206
hgs
parents:
diff changeset
   207
          // Can't use qobject_cast since QGraphicsWdiget is not a QObject
hgs
parents:
diff changeset
   208
          ChromeItem * item =  dynamic_cast<ChromeItem* >(items.at(i));
hgs
parents:
diff changeset
   209
          if (item ) {
hgs
parents:
diff changeset
   210
hgs
parents:
diff changeset
   211
              WebChromeContainerSnippet * s =  dynamic_cast<WebChromeContainerSnippet* >(item->snippet());
hgs
parents:
diff changeset
   212
              // If it is a container, need to connect to it's child items, so recurse
hgs
parents:
diff changeset
   213
              if (s ) {
hgs
parents:
diff changeset
   214
                manageChildren(item);
hgs
parents:
diff changeset
   215
              }
hgs
parents:
diff changeset
   216
              else { // Individual item
hgs
parents:
diff changeset
   217
                //qDebug() << "Item: " << item->snippet()->elementId();
hgs
parents:
diff changeset
   218
                ContentToolbarChromeItem * w = static_cast<ContentToolbarChromeItem*>(widget());
hgs
parents:
diff changeset
   219
                if (w->autoHideToolbar()) {
hgs
parents:
diff changeset
   220
                    // Connect to the snippet's mouse event to cancel auto-timeout
hgs
parents:
diff changeset
   221
                    connect(item, SIGNAL(mouseEvent(QEvent::Type)), w, SLOT(onSnippetMouseEvent(QEvent::Type)));
hgs
parents:
diff changeset
   222
                }
hgs
parents:
diff changeset
   223
hgs
parents:
diff changeset
   224
                setAction(item->snippet());
hgs
parents:
diff changeset
   225
                manageLink(item);
hgs
parents:
diff changeset
   226
            }
hgs
parents:
diff changeset
   227
        }
hgs
parents:
diff changeset
   228
    }
hgs
parents:
diff changeset
   229
hgs
parents:
diff changeset
   230
  }
hgs
parents:
diff changeset
   231
hgs
parents:
diff changeset
   232
  void ContentToolbarSnippet::manageLink(ChromeItem * item) {
hgs
parents:
diff changeset
   233
hgs
parents:
diff changeset
   234
      // If it has a linked snippet, connect to it's mouse event and also
hgs
parents:
diff changeset
   235
      // to it's children's mouse events
hgs
parents:
diff changeset
   236
      ChromeSnippet * link = item->snippet()->linkedSnippet();
hgs
parents:
diff changeset
   237
      if (link) {
hgs
parents:
diff changeset
   238
          ChromeItem* it = dynamic_cast <ChromeItem * > (link->widget());
hgs
parents:
diff changeset
   239
          if (it ) {
hgs
parents:
diff changeset
   240
              // Connect to linked snippet's mouse events to control the sub-chrome 
hgs
parents:
diff changeset
   241
              connect(it, SIGNAL(mouseEvent(QEvent::Type)), this, SLOT(onSnippetMouseEvent(QEvent::Type)));
hgs
parents:
diff changeset
   242
hgs
parents:
diff changeset
   243
              // Save the linked children to be used later for hiding
hgs
parents:
diff changeset
   244
              ContentToolbarChromeItem * w = static_cast<ContentToolbarChromeItem*>(widget());
hgs
parents:
diff changeset
   245
              w->addLinkedChild(link);
hgs
parents:
diff changeset
   246
hgs
parents:
diff changeset
   247
              // In case it has children, connect to their mouse events as well
hgs
parents:
diff changeset
   248
              QList<QGraphicsItem *> childItems = it->childItems();
hgs
parents:
diff changeset
   249
              int count = childItems.count();
hgs
parents:
diff changeset
   250
hgs
parents:
diff changeset
   251
              // If the linked snippet has children that are widgets themselves, listen to their
hgs
parents:
diff changeset
   252
              // mouse events as well. 
hgs
parents:
diff changeset
   253
              for (int i = 0; i < count ; i++) {
hgs
parents:
diff changeset
   254
                  ChromeItem * child =  dynamic_cast<ChromeItem* >(childItems.at(i));
hgs
parents:
diff changeset
   255
hgs
parents:
diff changeset
   256
                  // To control sub-chrome timer
hgs
parents:
diff changeset
   257
                  connect(child, SIGNAL(mouseEvent(QEvent::Type)), this, SLOT(onSnippetMouseEvent(QEvent::Type)));
hgs
parents:
diff changeset
   258
              }
hgs
parents:
diff changeset
   259
          }
hgs
parents:
diff changeset
   260
      }
hgs
parents:
diff changeset
   261
  }
hgs
parents:
diff changeset
   262
hgs
parents:
diff changeset
   263
hgs
parents:
diff changeset
   264
  void ContentToolbarSnippet::setAction(ChromeSnippet * s) {
hgs
parents:
diff changeset
   265
hgs
parents:
diff changeset
   266
      //qDebug() << "setAction: " << s->elementId();
hgs
parents:
diff changeset
   267
      ToolbarSnippet::setAction(s);
hgs
parents:
diff changeset
   268
      ActionButtonSnippet * button  = static_cast<ActionButtonSnippet*> (s);
hgs
parents:
diff changeset
   269
hgs
parents:
diff changeset
   270
      // Set selected on press to false here so that we can control when to
hgs
parents:
diff changeset
   271
      // change action button icon state
hgs
parents:
diff changeset
   272
      button->setActiveOnPress(false); 
hgs
parents:
diff changeset
   273
      button->getDefaultAction()->setCheckable(true);
hgs
parents:
diff changeset
   274
hgs
parents:
diff changeset
   275
      ChromeItem * item = static_cast<ChromeItem*>(s->widget());
hgs
parents:
diff changeset
   276
      connect(item, SIGNAL(mouseEvent( QEvent::Type )), this, SLOT(onMouseEvent(QEvent::Type)));
hgs
parents:
diff changeset
   277
hgs
parents:
diff changeset
   278
      int index = getIndex(s);
hgs
parents:
diff changeset
   279
hgs
parents:
diff changeset
   280
      if (index != -1) {
hgs
parents:
diff changeset
   281
          QAction * action =  button->getDefaultAction();
hgs
parents:
diff changeset
   282
          ToolbarActions_t * t = m_actionInfo.at(index);
hgs
parents:
diff changeset
   283
hgs
parents:
diff changeset
   284
          switch (t->actionId) {
hgs
parents:
diff changeset
   285
hgs
parents:
diff changeset
   286
              case CONTENT_VIEW_ACTION_ZOOM:
hgs
parents:
diff changeset
   287
                  addZoomButton(action, button);
hgs
parents:
diff changeset
   288
                  break;
hgs
parents:
diff changeset
   289
              case CONTENT_VIEW_ACTION_MENU:
hgs
parents:
diff changeset
   290
                  addMenuButton(action, button);
hgs
parents:
diff changeset
   291
                  break;
hgs
parents:
diff changeset
   292
              case CONTENT_VIEW_ACTION_MOSTVISITED:
hgs
parents:
diff changeset
   293
                  addMostVisitedButton(action, button);
hgs
parents:
diff changeset
   294
                  break;
hgs
parents:
diff changeset
   295
              case CONTENT_VIEW_ACTION_TOGGLETB:
hgs
parents:
diff changeset
   296
                  addToggleTBButton(action, button);
hgs
parents:
diff changeset
   297
                  break;
hgs
parents:
diff changeset
   298
              default:
hgs
parents:
diff changeset
   299
                  break;
hgs
parents:
diff changeset
   300
          }
hgs
parents:
diff changeset
   301
      }
hgs
parents:
diff changeset
   302
hgs
parents:
diff changeset
   303
  }
hgs
parents:
diff changeset
   304
hgs
parents:
diff changeset
   305
  void ContentToolbarSnippet::addZoomButton(QAction * action, ActionButtonSnippet* button) {
hgs
parents:
diff changeset
   306
hgs
parents:
diff changeset
   307
      assert(action);
hgs
parents:
diff changeset
   308
      assert(button);
hgs
parents:
diff changeset
   309
      connect(action,  SIGNAL(triggered()), this, SLOT(handleZoomButton()));
hgs
parents:
diff changeset
   310
hgs
parents:
diff changeset
   311
hgs
parents:
diff changeset
   312
      // Connect to hide and show signals of the linked snippet
hgs
parents:
diff changeset
   313
      connectHideShowSignals(button);
hgs
parents:
diff changeset
   314
      connect( button->linkedSnippet(),  SIGNAL(externalMouseEvent(QEvent *, const QString , const QString )), this, SLOT(onExternalMouse(QEvent *, const QString , const QString)));
hgs
parents:
diff changeset
   315
hgs
parents:
diff changeset
   316
     
hgs
parents:
diff changeset
   317
  }
hgs
parents:
diff changeset
   318
hgs
parents:
diff changeset
   319
  void ContentToolbarSnippet::addMenuButton(QAction * action, ActionButtonSnippet* button) {
hgs
parents:
diff changeset
   320
hgs
parents:
diff changeset
   321
      assert(action);
hgs
parents:
diff changeset
   322
      assert(button);
hgs
parents:
diff changeset
   323
hgs
parents:
diff changeset
   324
      connect(action,  SIGNAL(triggered()), this, SLOT(handleMenuButton()));
hgs
parents:
diff changeset
   325
hgs
parents:
diff changeset
   326
      // Connect to hide and show signals of the linked snippet
hgs
parents:
diff changeset
   327
      connectHideShowSignals(button);
hgs
parents:
diff changeset
   328
      connect( button->linkedSnippet(),  SIGNAL(externalMouseEvent(QEvent *, const QString , const QString )), this, SLOT(onExternalMouse(QEvent *, const QString , const QString)));
hgs
parents:
diff changeset
   329
      
hgs
parents:
diff changeset
   330
  }
hgs
parents:
diff changeset
   331
hgs
parents:
diff changeset
   332
  void ContentToolbarSnippet::addMostVisitedButton(QAction * action, ActionButtonSnippet* button) {
hgs
parents:
diff changeset
   333
hgs
parents:
diff changeset
   334
      assert(action);
hgs
parents:
diff changeset
   335
      assert(button);
hgs
parents:
diff changeset
   336
hgs
parents:
diff changeset
   337
      connect(action,  SIGNAL(triggered()), this, SLOT(handleMVButton()));
hgs
parents:
diff changeset
   338
hgs
parents:
diff changeset
   339
      // Connect to hide and show signals of the linked snippet
hgs
parents:
diff changeset
   340
      connectHideShowSignals(button);
12
hgs
parents: 3
diff changeset
   341
      //Connect to handle external events of back press
hgs
parents: 3
diff changeset
   342
      connect( button->linkedSnippet(),  SIGNAL(externalMouseEvent(QEvent *, const QString , const QString )), this, SLOT(onExternalMouse(QEvent *, const QString , const QString)));
3
hgs
parents:
diff changeset
   343
  }
hgs
parents:
diff changeset
   344
hgs
parents:
diff changeset
   345
  void ContentToolbarSnippet::addToggleTBButton(QAction * action, ActionButtonSnippet* button) {
hgs
parents:
diff changeset
   346
hgs
parents:
diff changeset
   347
      assert(action);
hgs
parents:
diff changeset
   348
      assert(button);
hgs
parents:
diff changeset
   349
hgs
parents:
diff changeset
   350
      connect(action,  SIGNAL(triggered()), this, SLOT(handleToggleTBButton()));
hgs
parents:
diff changeset
   351
  }
hgs
parents:
diff changeset
   352
hgs
parents:
diff changeset
   353
hgs
parents:
diff changeset
   354
  void ContentToolbarSnippet::handleZoomButton() {
hgs
parents:
diff changeset
   355
hgs
parents:
diff changeset
   356
      ActionButtonSnippet * button  = getActionButtonSnippet(CONTENT_VIEW_ACTION_ZOOM);
hgs
parents:
diff changeset
   357
      ChromeSnippet * zoomSnippet = button->linkedSnippet();
hgs
parents:
diff changeset
   358
hgs
parents:
diff changeset
   359
hgs
parents:
diff changeset
   360
      if (zoomSnippet->isVisible() ) {
hgs
parents:
diff changeset
   361
          zoomSnippet->hide();  
hgs
parents:
diff changeset
   362
      }
hgs
parents:
diff changeset
   363
      else {
hgs
parents:
diff changeset
   364
          hideOtherPopups(button->elementId());
hgs
parents:
diff changeset
   365
          zoomSnippet->show();  
hgs
parents:
diff changeset
   366
hgs
parents:
diff changeset
   367
          // Show the action buttons. We can get the snippets by their id or do this to show them.
hgs
parents:
diff changeset
   368
          ChromeItem* it = dynamic_cast <ChromeItem * > (zoomSnippet->widget());
hgs
parents:
diff changeset
   369
          QList<QGraphicsItem *> childItems = it->childItems();
hgs
parents:
diff changeset
   370
          int count = childItems.count();
hgs
parents:
diff changeset
   371
hgs
parents:
diff changeset
   372
          for (int i = 0; i < count ; i++) {
hgs
parents:
diff changeset
   373
              ChromeItem * child =  dynamic_cast<ChromeItem* >(childItems.at(i));
hgs
parents:
diff changeset
   374
              child->snippet()->show();
hgs
parents:
diff changeset
   375
          
hgs
parents:
diff changeset
   376
          }
hgs
parents:
diff changeset
   377
      }
hgs
parents:
diff changeset
   378
hgs
parents:
diff changeset
   379
  }
hgs
parents:
diff changeset
   380
hgs
parents:
diff changeset
   381
  void ContentToolbarSnippet::handleMenuButton() {
hgs
parents:
diff changeset
   382
hgs
parents:
diff changeset
   383
      ActionButtonSnippet * button  = getActionButtonSnippet(CONTENT_VIEW_ACTION_MENU);
hgs
parents:
diff changeset
   384
      ChromeSnippet * menuSnippet = button->linkedSnippet();
hgs
parents:
diff changeset
   385
hgs
parents:
diff changeset
   386
      if (!menuSnippet->isVisible() ) {
hgs
parents:
diff changeset
   387
hgs
parents:
diff changeset
   388
          emit menuButtonSelected();
hgs
parents:
diff changeset
   389
          hideOtherPopups(button->elementId());
hgs
parents:
diff changeset
   390
      
hgs
parents:
diff changeset
   391
      }
hgs
parents:
diff changeset
   392
      else {
hgs
parents:
diff changeset
   393
          menuSnippet->hide();
hgs
parents:
diff changeset
   394
      }
hgs
parents:
diff changeset
   395
hgs
parents:
diff changeset
   396
  }
hgs
parents:
diff changeset
   397
hgs
parents:
diff changeset
   398
  void ContentToolbarSnippet::handleMVButton() {
hgs
parents:
diff changeset
   399
hgs
parents:
diff changeset
   400
      //qDebug() << "ContentToolbarSnippet::handleMVButton() ";
hgs
parents:
diff changeset
   401
      ActionButtonSnippet * button  = getActionButtonSnippet(CONTENT_VIEW_ACTION_MOSTVISITED);
hgs
parents:
diff changeset
   402
      hideOtherPopups(button->elementId());
hgs
parents:
diff changeset
   403
      button->linkedSnippet()->toggleVisibility();
hgs
parents:
diff changeset
   404
  }
hgs
parents:
diff changeset
   405
hgs
parents:
diff changeset
   406
 void ContentToolbarSnippet::handleToggleTBButton() {
hgs
parents:
diff changeset
   407
     ContentToolbarChromeItem * w = static_cast<ContentToolbarChromeItem*>(widget());
hgs
parents:
diff changeset
   408
     w->toggleMiddleSnippet();
hgs
parents:
diff changeset
   409
  }
hgs
parents:
diff changeset
   410
hgs
parents:
diff changeset
   411
hgs
parents:
diff changeset
   412
  void ContentToolbarSnippet::hideOtherPopups(QString id) {
hgs
parents:
diff changeset
   413
hgs
parents:
diff changeset
   414
  
hgs
parents:
diff changeset
   415
    for (int i = 0; i < m_actionInfo.size() ; i++ ) {
hgs
parents:
diff changeset
   416
hgs
parents:
diff changeset
   417
        ToolbarActions_t * t = m_actionInfo.at(i);
hgs
parents:
diff changeset
   418
        if (t->id != id ) {
hgs
parents:
diff changeset
   419
            ActionButtonSnippet * buttonSnippet  = static_cast<ActionButtonSnippet*> ( m_chrome->getSnippet(t->id));
hgs
parents:
diff changeset
   420
            ChromeSnippet * linkedSnippet = buttonSnippet->linkedSnippet();
hgs
parents:
diff changeset
   421
hgs
parents:
diff changeset
   422
            // If there is another sub-chrome visible, hide it
hgs
parents:
diff changeset
   423
            if (linkedSnippet ) {
hgs
parents:
diff changeset
   424
                if ( linkedSnippet->isVisible()) {
hgs
parents:
diff changeset
   425
                    linkedSnippet->hide();
hgs
parents:
diff changeset
   426
                }
hgs
parents:
diff changeset
   427
                else {
hgs
parents:
diff changeset
   428
                 	  // When the user selects the menu button, menu is displayed after certain timeout
hgs
parents:
diff changeset
   429
                    // and it is possible that the user can select another button. So cancel it if the 
hgs
parents:
diff changeset
   430
                    // button is 'checked' if we get another action trigger
hgs
parents:
diff changeset
   431
                    
hgs
parents:
diff changeset
   432
                    //qDebug() << "ContentToolbarSnippet::hideOtherPopups: "  << id << "Button: " << t->id << buttonSnippet->isChecked();
hgs
parents:
diff changeset
   433
hgs
parents:
diff changeset
   434
                    if ( (buttonSnippet->elementId() == "MenuButtonSnippet" ) && (buttonSnippet->isChecked() )) {
hgs
parents:
diff changeset
   435
                        emit menuButtonCanceled();
hgs
parents:
diff changeset
   436
                        buttonSnippet->updateButtonState(false);
hgs
parents:
diff changeset
   437
                    }
hgs
parents:
diff changeset
   438
                }
hgs
parents:
diff changeset
   439
            } 
hgs
parents:
diff changeset
   440
        }
hgs
parents:
diff changeset
   441
hgs
parents:
diff changeset
   442
    }
hgs
parents:
diff changeset
   443
  
hgs
parents:
diff changeset
   444
hgs
parents:
diff changeset
   445
  }
hgs
parents:
diff changeset
   446
hgs
parents:
diff changeset
   447
  void ContentToolbarSnippet::connectHideShowSignals(ActionButtonSnippet * button) {
hgs
parents:
diff changeset
   448
hgs
parents:
diff changeset
   449
      // Connect to hide and show signals of the linked snippet
hgs
parents:
diff changeset
   450
      ChromeSnippet * snippet = button->linkedSnippet();
hgs
parents:
diff changeset
   451
      ActionButton * actionButton = static_cast<ActionButton*>(button->widget());
hgs
parents:
diff changeset
   452
      connect(snippet, SIGNAL(hidden()), actionButton, SLOT(onHidden()));
hgs
parents:
diff changeset
   453
      connect(snippet, SIGNAL(shown()), actionButton, SLOT(onShown()));
hgs
parents:
diff changeset
   454
hgs
parents:
diff changeset
   455
      connect(snippet, SIGNAL(hidden()), this, SLOT(onHidden()));
hgs
parents:
diff changeset
   456
      connect(snippet, SIGNAL(shown()), this, SLOT(onShown()));
hgs
parents:
diff changeset
   457
hgs
parents:
diff changeset
   458
  }
hgs
parents:
diff changeset
   459
hgs
parents:
diff changeset
   460
  void ContentToolbarSnippet::onAspectChanged( ) {
hgs
parents:
diff changeset
   461
12
hgs
parents: 3
diff changeset
   462
      updateOwnerArea();
3
hgs
parents:
diff changeset
   463
      // Hide any pop-up that is visible
hgs
parents:
diff changeset
   464
      hideOtherPopups(QString());
hgs
parents:
diff changeset
   465
  }
hgs
parents:
diff changeset
   466
hgs
parents:
diff changeset
   467
  void ContentToolbarSnippet::onSnippetMouseEvent( QEvent::Type type) {
hgs
parents:
diff changeset
   468
hgs
parents:
diff changeset
   469
      //qDebug() << "ContentToolbarSnippet::onSnippetMouseEvent : Type" << type;
hgs
parents:
diff changeset
   470
      if (type == QEvent::GraphicsSceneMousePress || type == QEvent::MouseButtonPress ) {
hgs
parents:
diff changeset
   471
          resetTimer(false);
hgs
parents:
diff changeset
   472
      }
hgs
parents:
diff changeset
   473
      else if (type == QEvent::GraphicsSceneMouseRelease  || type == QEvent::MouseButtonRelease ) {
hgs
parents:
diff changeset
   474
          resetTimer();
hgs
parents:
diff changeset
   475
      }
hgs
parents:
diff changeset
   476
  }
hgs
parents:
diff changeset
   477
hgs
parents:
diff changeset
   478
  void ContentToolbarSnippet::onMouseEvent( QEvent::Type type) {
hgs
parents:
diff changeset
   479
hgs
parents:
diff changeset
   480
      ActionButton* button  = static_cast<ActionButton*> ( sender());
hgs
parents:
diff changeset
   481
      ActionButtonSnippet * buttonSnippet =  static_cast<ActionButtonSnippet*>( button->snippet());
hgs
parents:
diff changeset
   482
      ChromeSnippet * linkedSnippet = buttonSnippet->linkedSnippet();
hgs
parents:
diff changeset
   483
      //qDebug() << "ContentToolbarSnippet::onMouseEvent : Button : " << buttonSnippet->elementId() << " type: " << type ;
hgs
parents:
diff changeset
   484
      
hgs
parents:
diff changeset
   485
      // Set the action button state to active so that we can show a selected image before the
hgs
parents:
diff changeset
   486
      // action is acted upon
hgs
parents:
diff changeset
   487
      if ( (button->defaultAction()->isEnabled() && type == QEvent::GraphicsSceneMousePress ) ||  
hgs
parents:
diff changeset
   488
           (button->defaultAction()->isEnabled() && type == QEvent::GraphicsSceneMouseDoubleClick )) {
hgs
parents:
diff changeset
   489
hgs
parents:
diff changeset
   490
          // Set active flag if there is no linked snippet (the button acts as toggle if it
hgs
parents:
diff changeset
   491
          // has a linked snippet. If there is linked snippet, set active flag if the linked snippet 
hgs
parents:
diff changeset
   492
          // is not visible
hgs
parents:
diff changeset
   493
          if (!linkedSnippet || (linkedSnippet && (!linkedSnippet->isVisible() ))) {
hgs
parents:
diff changeset
   494
              buttonSnippet->setActive(true);
hgs
parents:
diff changeset
   495
          } 
hgs
parents:
diff changeset
   496
      }
hgs
parents:
diff changeset
   497
  }
hgs
parents:
diff changeset
   498
hgs
parents:
diff changeset
   499
  void ContentToolbarSnippet::onHidden() {
hgs
parents:
diff changeset
   500
      
hgs
parents:
diff changeset
   501
      ChromeSnippet * snippet = static_cast<ChromeSnippet *> (sender());
hgs
parents:
diff changeset
   502
      //qDebug() << "ContentToolbarSnippet::onHidden" << snippet->elementId();
hgs
parents:
diff changeset
   503
      if (snippet  == m_subChromeSnippet ) {
hgs
parents:
diff changeset
   504
hgs
parents:
diff changeset
   505
          //qDebug() << "ContentToolbarSnippet::onHidden  hide shown snippet" << snippet->elementId();
hgs
parents:
diff changeset
   506
          resetTimer(false); 
hgs
parents:
diff changeset
   507
          m_subChromeSnippet = NULL;
hgs
parents:
diff changeset
   508
      }
hgs
parents:
diff changeset
   509
hgs
parents:
diff changeset
   510
  }
hgs
parents:
diff changeset
   511
hgs
parents:
diff changeset
   512
  void ContentToolbarSnippet::onShown() {
hgs
parents:
diff changeset
   513
hgs
parents:
diff changeset
   514
      // If one sub-chrome is being displayed when another is requested to be launched by the user, to avoid 
hgs
parents:
diff changeset
   515
      //depending on the order of receiving hidden and shown signals for each of those, we save the snippet
hgs
parents:
diff changeset
   516
      // being shown and then later when hidden signal is received, the sender is compared to the 
hgs
parents:
diff changeset
   517
      // snippet for which we started the timer so that the timer is started and stopped for the
hgs
parents:
diff changeset
   518
      // correct snippet. If 'shown' signal for the second is received before hidden for the second, the timer 
hgs
parents:
diff changeset
   519
      // is stopped and restarted and the sub-chrome snippet is set to the new one. When 'hidden' is received
hgs
parents:
diff changeset
   520
      // for the first, it is ignored as it doesn't match our saved snippet value.
hgs
parents:
diff changeset
   521
      m_subChromeSnippet = static_cast<ChromeSnippet *> (sender());
hgs
parents:
diff changeset
   522
      //qDebug() << "ContentToolbarSnippet::onShown" << m_subChromeSnippet->elementId();
hgs
parents:
diff changeset
   523
       
hgs
parents:
diff changeset
   524
      resetTimer();
hgs
parents:
diff changeset
   525
hgs
parents:
diff changeset
   526
  }
hgs
parents:
diff changeset
   527
hgs
parents:
diff changeset
   528
hgs
parents:
diff changeset
   529
  void ContentToolbarSnippet::onInactivityTimer() {
hgs
parents:
diff changeset
   530
hgs
parents:
diff changeset
   531
      //qDebug() << "ContentToolbarSnippet::onInactivityTimer" << m_subChromeSnippet->elementId();
hgs
parents:
diff changeset
   532
      if (m_subChromeSnippet->elementId() == "MostVisitedViewId" ) {
hgs
parents:
diff changeset
   533
          MostVisitedSnippet * mv = static_cast<MostVisitedSnippet *>(m_subChromeSnippet);
hgs
parents:
diff changeset
   534
          mv->close();
hgs
parents:
diff changeset
   535
          // Stop the timer here as there is animation to complete before hide is received
hgs
parents:
diff changeset
   536
          resetTimer(false);
hgs
parents:
diff changeset
   537
          m_subChromeSnippet = NULL;
hgs
parents:
diff changeset
   538
      }
hgs
parents:
diff changeset
   539
      else {
hgs
parents:
diff changeset
   540
hgs
parents:
diff changeset
   541
          // Hide the snippet. onHidden slot will be called when the snippet is hidden
hgs
parents:
diff changeset
   542
          // and there we will stop the timer and reset m_subChromeSnippet
hgs
parents:
diff changeset
   543
          m_subChromeSnippet->hide();
hgs
parents:
diff changeset
   544
      }
hgs
parents:
diff changeset
   545
  }
hgs
parents:
diff changeset
   546
hgs
parents:
diff changeset
   547
hgs
parents:
diff changeset
   548
  void ContentToolbarSnippet::resetTimer(bool start) {
hgs
parents:
diff changeset
   549
hgs
parents:
diff changeset
   550
      int duration =  TOOLBAR_POPUP_INACTIVITY_DURATION;
hgs
parents:
diff changeset
   551
      if (m_subChromeInactiveTimer->isActive() ) {
hgs
parents:
diff changeset
   552
          //qDebug() << " Stop timer for " << m_subChromeSnippet->elementId();
hgs
parents:
diff changeset
   553
          m_subChromeInactiveTimer->stop();
hgs
parents:
diff changeset
   554
      }
hgs
parents:
diff changeset
   555
hgs
parents:
diff changeset
   556
      if (start) {
hgs
parents:
diff changeset
   557
          if (m_subChromeSnippet->elementId() == "ZoomBarId" ) {
hgs
parents:
diff changeset
   558
              duration = TOOLBAR_ZOOMBAR_INACTIVITY_DURATION;
hgs
parents:
diff changeset
   559
          }
hgs
parents:
diff changeset
   560
          //qDebug() << " Start timer for " << m_subChromeSnippet->elementId();
hgs
parents:
diff changeset
   561
          m_subChromeInactiveTimer->start(duration);
hgs
parents:
diff changeset
   562
      }
hgs
parents:
diff changeset
   563
hgs
parents:
diff changeset
   564
  }
hgs
parents:
diff changeset
   565
  void ContentToolbarSnippet::onExternalMouse( QEvent * ev ,
hgs
parents:
diff changeset
   566
                                               const QString & name,
hgs
parents:
diff changeset
   567
                                               const QString & description) {
hgs
parents:
diff changeset
   568
hgs
parents:
diff changeset
   569
      Q_UNUSED(description);
hgs
parents:
diff changeset
   570
      ChromeSnippet * snippet = static_cast<ChromeSnippet *> (sender());
hgs
parents:
diff changeset
   571
      QGraphicsSceneMouseEvent * me = static_cast<QGraphicsSceneMouseEvent*>(ev);
hgs
parents:
diff changeset
   572
      ChromeSnippet * linkedButton = getLinkedButton(snippet);
hgs
parents:
diff changeset
   573
hgs
parents:
diff changeset
   574
      // For sub-chromes like zoom and menu, we get mouse events anywhere on the
hgs
parents:
diff changeset
   575
      // screen including the ones on the corresponding button on the toolbar. Hide
hgs
parents:
diff changeset
   576
      // the sub-chrome only if the mouse press is anywhere other than the 
hgs
parents:
diff changeset
   577
      // corresponding button
hgs
parents:
diff changeset
   578
      if (linkedButton )  {
hgs
parents:
diff changeset
   579
          ChromeItem * item =  static_cast<ChromeItem* >(linkedButton->widget());
hgs
parents:
diff changeset
   580
          if (item && item->sceneBoundingRect().contains(me->scenePos() )) {
hgs
parents:
diff changeset
   581
              return;
hgs
parents:
diff changeset
   582
          }
hgs
parents:
diff changeset
   583
      }
hgs
parents:
diff changeset
   584
    
hgs
parents:
diff changeset
   585
      if (name  == ExternalEventCharm::s_mouseClick) {
hgs
parents:
diff changeset
   586
          snippet->hide();
hgs
parents:
diff changeset
   587
      }
hgs
parents:
diff changeset
   588
hgs
parents:
diff changeset
   589
      
hgs
parents:
diff changeset
   590
  }
hgs
parents:
diff changeset
   591
hgs
parents:
diff changeset
   592
hgs
parents:
diff changeset
   593
void ContentToolbarSnippet::handleToolbarStateChange(ContentToolbarState state){
hgs
parents:
diff changeset
   594
hgs
parents:
diff changeset
   595
hgs
parents:
diff changeset
   596
    ActionButtonSnippet * button  =  getActionButtonSnippet(CONTENT_VIEW_ACTION_TOGGLETB);
hgs
parents:
diff changeset
   597
hgs
parents:
diff changeset
   598
    // set the appopriate icons based on the state
hgs
parents:
diff changeset
   599
hgs
parents:
diff changeset
   600
    if (state != CONTENT_TOOLBAR_STATE_INVALID ) {
hgs
parents:
diff changeset
   601
        if (state  == CONTENT_TOOLBAR_STATE_PARTIAL ) {
hgs
parents:
diff changeset
   602
            button->setIcon(TOOLBAR_PARTIAL_TB_TOGGLE_ICON);
hgs
parents:
diff changeset
   603
            button->setActiveIcon(TOOLBAR_PARTIAL_TB_SELECTED_TOGGLE_ICON);
hgs
parents:
diff changeset
   604
        }
hgs
parents:
diff changeset
   605
        else if (state == CONTENT_TOOLBAR_STATE_FULL ) {
hgs
parents:
diff changeset
   606
            button->setIcon(TOOLBAR_FULL_TB_TOGGLE_ICON);
hgs
parents:
diff changeset
   607
            button->setActiveIcon(TOOLBAR_FULL_TB_SELECTED_TOGGLE_ICON);
hgs
parents:
diff changeset
   608
hgs
parents:
diff changeset
   609
        }
hgs
parents:
diff changeset
   610
        // Also reset the button state if the change in state was triggered by toggle-button selection 
hgs
parents:
diff changeset
   611
        button->updateButtonState(false);
hgs
parents:
diff changeset
   612
hgs
parents:
diff changeset
   613
    }
hgs
parents:
diff changeset
   614
}  
hgs
parents:
diff changeset
   615
hgs
parents:
diff changeset
   616
ChromeSnippet* ContentToolbarSnippet::getLinkedButton(ChromeSnippet * snippet ) {
hgs
parents:
diff changeset
   617
hgs
parents:
diff changeset
   618
    ChromeSnippet * linkedButton = NULL;
hgs
parents:
diff changeset
   619
    for (int i = 0; i < m_actionInfo.size() ; i++ ) {
hgs
parents:
diff changeset
   620
        ToolbarActions_t * t = m_actionInfo.at(i);
hgs
parents:
diff changeset
   621
        ChromeSnippet * s = getActionButtonSnippet (t->actionId) ;
hgs
parents:
diff changeset
   622
        if (s->linkedSnippet() && s->linkedSnippet()->elementId() == snippet->elementId() )  {
hgs
parents:
diff changeset
   623
            linkedButton = s;
hgs
parents:
diff changeset
   624
            break;
hgs
parents:
diff changeset
   625
        }
hgs
parents:
diff changeset
   626
hgs
parents:
diff changeset
   627
    }
hgs
parents:
diff changeset
   628
    return linkedButton;
hgs
parents:
diff changeset
   629
hgs
parents:
diff changeset
   630
hgs
parents:
diff changeset
   631
}
hgs
parents:
diff changeset
   632
hgs
parents:
diff changeset
   633
} // end of namespace GVA
hgs
parents:
diff changeset
   634
hgs
parents:
diff changeset
   635