//=============================================================================
//  MuseScore
//  Music Composition & Notation
//
//  Copyright (C) 2013-2016 Werner Schweer
//
//  This program is free software; you can redistribute it and/or modify
//  it under the terms of the GNU General Public License version 2
//  as published by the Free Software Foundation and appearing in
//  the file LICENCE.GPL
//=============================================================================
 
#include "paletteBoxButton.h"
#include "palette.h"
#include "preferences.h"
 
namespace Ms {
 
//---------------------------------------------------------
//   PaletteBoxButton
//---------------------------------------------------------
 
PaletteBoxButton::PaletteBoxButton(Palette* p, QWidget* parent)
   : QToolButton(parent)
      {
      palette = p;
      editAction = 0;
 
      setCheckable(true);
      setFocusPolicy(Qt::NoFocus);
      connect(this, SIGNAL(clicked(bool)), this, SLOT(showPalette(bool)));
      setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
      setText(qApp->translate("Palette", palette->name().toUtf8()));
      setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
      setArrowType(Qt::RightArrow);
      showPalette(false);
      setObjectName("palette");
      }
 
//---------------------------------------------------------
//   contextMenuEvent
//---------------------------------------------------------
 
void PaletteBoxButton::contextMenuEvent(QContextMenuEvent* event)
      {
      QMenu menu;
 
      QAction* actionProperties = menu.addAction(tr("Palette Properties..."));
      QAction* actionInsert     = menu.addAction(tr("Insert New Palette..."));
      QAction* actionUp         = menu.addAction(tr("Move Palette Up"));
      QAction* actionDown       = menu.addAction(tr("Move Palette Down"));
      QAction* actionEdit       = menu.addAction(tr("Enable Editing"));
      actionEdit->setCheckable(true);
      actionEdit->setChecked(!palette->readOnly());
 
      bool _systemPalette = palette->systemPalette();
      actionProperties->setDisabled(_systemPalette);
      actionInsert->setDisabled(_systemPalette);
      actionUp->setDisabled(_systemPalette);
      actionDown->setDisabled(_systemPalette);
      actionEdit->setDisabled(_systemPalette);
 
      menu.addSeparator();
      QAction* actionSave = menu.addAction(tr("Save Palette..."));
      QAction* actionLoad = menu.addAction(tr("Load Palette..."));
      actionLoad->setDisabled(_systemPalette);
 
      menu.addSeparator();
      QAction* actionDelete = menu.addAction(tr("Delete Palette"));
      actionDelete->setDisabled(_systemPalette);
 
      QAction* action = menu.exec(mapToGlobal(event->pos()));
      if (action == actionProperties)
            propertiesTriggered();
      else if (action == actionInsert)
            newTriggered();
      else if (action == actionUp)
            upTriggered();
      else if (action == actionDown)
            downTriggered();
      else if (action == actionEdit)
            enableEditing(action->isChecked());
      else if (action == actionSave)
            saveTriggered();
      else if (action == actionLoad)
            loadTriggered();
      else if (action == actionDelete)
            deleteTriggered();
      }
 
//---------------------------------------------------------
//   enableEditing
//---------------------------------------------------------
 
void PaletteBoxButton::enableEditing(bool val)
      {
      palette->setReadOnly(!val);
      }
 
//---------------------------------------------------------
//   changeEvent
//---------------------------------------------------------
 
void PaletteBoxButton::changeEvent(QEvent* ev)
      {
      QToolButton::changeEvent(ev);
      if (ev->type() == QEvent::FontChange)
            setFixedHeight(QFontMetrics(font()).height() + 2);
      }
 
//---------------------------------------------------------
//   showPalette
//---------------------------------------------------------
 
void PaletteBoxButton::showPalette(bool visible)
      {
      if (visible && preferences.singlePalette) {
            // close all palettes
            emit closeAll();
            }
      palette->setVisible(visible);
      setChecked(visible);
      setArrowType(visible ? Qt::DownArrow : Qt::RightArrow );
      }
 
//---------------------------------------------------------
//   sizeHint
//---------------------------------------------------------
 
QSize PaletteBoxButton::sizeHint() const
      {
      QFontMetrics fm(font());
      return QSize(20, fm.lineSpacing() + 6);
      }
 
//---------------------------------------------------------
//   paintEvent
//---------------------------------------------------------
 
void PaletteBoxButton::paintEvent(QPaintEvent*)
      {
      //remove automatic menu arrow
      QStylePainter p(this);
 
      QStyleOptionToolButton opt;
      initStyleOption(&opt);
      opt.features &= (~QStyleOptionToolButton::HasMenu);
      p.drawComplexControl(QStyle::CC_ToolButton, opt);
      }
}
 

V730 It is possible that not all members of a class are initialized inside the constructor. Consider inspecting: id.