private int getMaxButtons() {
   int extraButtons = 0;
   if (app.getLAF().undoRedoSupported()) {
     extraButtons = 90;
   }
   if (app.showMenuBar()) {
     extraButtons += 90;
   }
   if (app.isExam()) {
     extraButtons += 30;
     if (!app.getExam().is3DAllowed()) {
       extraButtons += 55;
     }
     if (!app.getExam().isCASAllowed()) {
       extraButtons += 55;
     }
   }
   return ((int) app.getWidth() - extraButtons - 15) / 45;
 }
  public void updateActionPanel() {
    rightButtonPanel.clear();
    boolean exam = app.isExam();
    setStyleName("examToolbar", exam);
    if (exam) {
      // We directly read the parameters to show the intention.
      // It may be possible that 3D is not supported from technical
      // reasons (e.g. the graphics card is problematic), but in such
      // cases we don't want to show that here.

      if (!app.getExam().isCASAllowed()) {
        Label nocas = new Label("CAS");
        nocas.getElement().getStyle().setTextDecoration(TextDecoration.LINE_THROUGH);
        nocas.getElement().setClassName("timer");
        rightButtonPanel.add(nocas);
      }
      if (!app.getExam().is3DAllowed()) {
        Label no3d = new Label("3D");
        no3d.getElement().getStyle().setTextDecoration(TextDecoration.LINE_THROUGH);
        no3d.getElement().setClassName("timer");
        rightButtonPanel.add(no3d);
      }
      rightButtonPanel.add(getTimer());
    }

    if (app.getLAF().undoRedoSupported()) {
      addUndoPanel();
    }
    if (app.getArticleElement().getDataParamShowMenuBar(false)
        || app.getArticleElement().getDataParamApp()) {
      PerspectiveResources pr =
          ((ImageFactory) GWT.create(ImageFactory.class)).getPerspectiveResources();
      this.menuBarShowing = true;
      // openMenuButton = new StandardButton(pr.button_open_menu(), null,
      // 32);
      //
      // openMenuButton.addFastClickHandler(new FastClickHandler() {
      // @Override
      // public void onClick(Widget source) {
      // app.hideKeyboard();
      // app.closePopups();
      // GGWToolBar.this.app.toggleMenu();
      // }

      openMenuButton = new StandardButton(pr.menu_header_open_menu(), null, 32);

      openMenuButton.getUpHoveringFace().setImage(getImage(pr.menu_header_open_menu_hover(), 32));

      openMenuButton.addFastClickHandler(
          new FastClickHandler() {
            @Override
            public void onClick(Widget source) {
              app.hideKeyboard();
              app.closePopups();
              GGWToolBar.this.app.toggleMenu();
            }
          });

      openMenuButton.addDomHandler(
          new KeyUpHandler() {
            public void onKeyUp(KeyUpEvent event) {
              if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
                GGWToolBar.this.app.toggleMenu();
              }
              if (event.getNativeKeyCode() == KeyCodes.KEY_LEFT) {
                GGWToolBar.this.selectMenuButton(0);
              }
              if (event.getNativeKeyCode() == KeyCodes.KEY_RIGHT) {
                GGWToolBar.this.toolBar.selectMenu(0);
              }
            }
          },
          KeyUpEvent.getType());

      if (!exam && app.enableFileFeatures()) {
        // openSearchButton = new
        // StandardButton(pr.button_open_search(),
        // null, 32);
        // openSearchButton.addFastClickHandler(new FastClickHandler() {
        // @Override
        // public void onClick(Widget source) {
        // app.openSearch(null);
        // }
        // });

        openSearchButton = new StandardButton(pr.menu_header_open_search(), null, 32);
        openSearchButton.getUpFace().setImage(getImage(pr.menu_header_open_search(), 32));
        openSearchButton
            .getUpHoveringFace()
            .setImage(getImage(pr.menu_header_open_search_hover(), 32));

        openSearchButton.addFastClickHandler(
            new FastClickHandler() {
              @Override
              public void onClick(Widget source) {
                app.openSearch(null);
              }
            });

        openSearchButton.addDomHandler(
            new KeyUpHandler() {
              public void onKeyUp(KeyUpEvent event) {
                if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
                  app.openSearch(null);
                }
                if (event.getNativeKeyCode() == KeyCodes.KEY_RIGHT) {
                  GGWToolBar.this.selectMenuButton(1);
                }
                if (event.getNativeKeyCode() == KeyCodes.KEY_LEFT) {
                  GGWToolBar.this.toolBar.selectMenu(-1);
                }
              }
            },
            KeyUpEvent.getType());

        this.rightButtonPanel.add(openSearchButton);
      }
      this.rightButtonPanel.add(openMenuButton);
    }
  }
 private void stopCheating() {
   if (app.getExam() != null) {
     app.getExam().stopCheating();
   }
 }