153 lines
5 KiB
C++
153 lines
5 KiB
C++
//=============================================================================
|
|
// 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());
|
|
if (palette->isFilterActive())
|
|
actionEdit->setVisible(false);
|
|
|
|
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.getBool(PREF_APP_USESINGLEPALETTE)) {
|
|
// 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);
|
|
}
|
|
}
|
|
|