|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "pane.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// Tnz6 includes
|
|
Toshihiro Shimizu |
890ddd |
#include "tapp.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "mainwindow.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tenv.h"
|
|
shun-iwasawa |
7a6807 |
#include "saveloadqsettings.h"
|
|
shun-iwasawa |
9b2afe |
#include "custompanelmanager.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/gutil.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// TnzLib includes
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/preferences.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/toonzfolders.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tscenehandle.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// TnzCore includes
|
|
Toshihiro Shimizu |
890ddd |
#include "tsystem.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// Qt includes
|
|
Toshihiro Shimizu |
890ddd |
#include <qpainter></qpainter>
|
|
Toshihiro Shimizu |
890ddd |
#include <qstyleoptiondockwidget></qstyleoptiondockwidget>
|
|
Toshihiro Shimizu |
890ddd |
#include <qmouseevent></qmouseevent>
|
|
Toshihiro Shimizu |
890ddd |
#include <qmainwindow></qmainwindow>
|
|
Toshihiro Shimizu |
890ddd |
#include <qsettings></qsettings>
|
|
Toshihiro Shimizu |
890ddd |
#include <qtoolbar></qtoolbar>
|
|
Toshihiro Shimizu |
890ddd |
#include <qmap></qmap>
|
|
Toshihiro Shimizu |
890ddd |
#include <qapplication></qapplication>
|
|
Toshihiro Shimizu |
890ddd |
#include <qfile></qfile>
|
|
shun_iwasawa |
064d70 |
#include <qdrawutil.h></qdrawutil.h>
|
|
Toshihiro Shimizu |
890ddd |
#include <assert.h></assert.h>
|
|
shun-iwasawa |
7a6807 |
#include <qdesktopwidget></qdesktopwidget>
|
|
shun-iwasawa |
1f6fa7 |
#include <qdialog></qdialog>
|
|
Martin van Zijl |
624982 |
#include <qlineedit></qlineedit>
|
|
shun-iwasawa |
dfd2f7 |
#include <qtextedit></qtextedit>
|
|
shun-iwasawa |
b272a7 |
#include <qscreen></qscreen>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
extern TEnv::StringVar EnvSafeAreaName;
|
|
shun-iwasawa |
02ac7e |
extern TEnv::IntVar EnvViewerPreviewBehavior;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// TPanel
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TPanel::TPanel(QWidget *parent, Qt::WindowFlags flags,
|
|
Shinya Kitaoka |
120a6e |
TDockWidget::Orientation orientation)
|
|
Shinya Kitaoka |
120a6e |
: TDockWidget(parent, flags)
|
|
Shinya Kitaoka |
120a6e |
, m_panelType("")
|
|
Shinya Kitaoka |
120a6e |
, m_isMaximizable(true)
|
|
Shinya Kitaoka |
120a6e |
, m_isMaximized(false)
|
|
Shinya Kitaoka |
120a6e |
, m_panelTitleBar(0)
|
|
Shinya Kitaoka |
120a6e |
, m_multipleInstancesAllowed(true) {
|
|
Shinya Kitaoka |
120a6e |
// setFeatures(QDockWidget::DockWidgetMovable |
|
|
Shinya Kitaoka |
120a6e |
// QDockWidget::DockWidgetFloatable);
|
|
Shinya Kitaoka |
120a6e |
// setFloating(false);
|
|
Shinya Kitaoka |
120a6e |
m_panelTitleBar = new TPanelTitleBar(this, orientation);
|
|
Shinya Kitaoka |
120a6e |
setTitleBarWidget(m_panelTitleBar);
|
|
Shinya Kitaoka |
120a6e |
// connect(m_panelTitleBar,SIGNAL(doubleClick()),this,SLOT(onDoubleClick()));
|
|
Shinya Kitaoka |
120a6e |
connect(m_panelTitleBar, SIGNAL(doubleClick(QMouseEvent *)), this,
|
|
Shinya Kitaoka |
120a6e |
SIGNAL(doubleClick(QMouseEvent *)));
|
|
Shinya Kitaoka |
120a6e |
connect(m_panelTitleBar, SIGNAL(closeButtonPressed()), this,
|
|
Shinya Kitaoka |
120a6e |
SLOT(onCloseButtonPressed()));
|
|
Shinya Kitaoka |
120a6e |
setOrientation(orientation);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
shun-iwasawa |
7a6807 |
TPanel::~TPanel() {
|
|
luz paz |
6454c4 |
// On quitting, save the floating panel's geometry and state in order to
|
|
shun-iwasawa |
7a6807 |
// restore them when opening the floating panel next time
|
|
shun-iwasawa |
7a6807 |
if (isFloating()) {
|
|
shun-iwasawa |
7a6807 |
TFilePath savePath =
|
|
shun-iwasawa |
7a6807 |
ToonzFolder::getMyModuleDir() + TFilePath("popups.ini");
|
|
shun-iwasawa |
7a6807 |
QSettings settings(QString::fromStdWString(savePath.getWideString()),
|
|
shun-iwasawa |
7a6807 |
QSettings::IniFormat);
|
|
shun-iwasawa |
7a6807 |
settings.beginGroup("Panels");
|
|
shun-iwasawa |
7a6807 |
settings.beginGroup(QString::fromStdString(m_panelType));
|
|
shun-iwasawa |
7a6807 |
settings.setValue("geometry", geometry());
|
|
shun-iwasawa |
7a6807 |
if (SaveLoadQSettings *persistent =
|
|
shun-iwasawa |
7a6807 |
dynamic_cast<saveloadqsettings *="">(widget()))</saveloadqsettings>
|
|
shun-iwasawa |
7a6807 |
persistent->save(settings);
|
|
shun-iwasawa |
7a6807 |
}
|
|
shun-iwasawa |
7a6807 |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TPanel::paintEvent(QPaintEvent *e) {
|
|
Shinya Kitaoka |
120a6e |
QPainter painter(this);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (widget()) {
|
|
Shinya Kitaoka |
120a6e |
QRect dockRect = widget()->geometry();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
dockRect.adjust(0, 0, -1, -1);
|
|
Shinya Kitaoka |
120a6e |
painter.fillRect(dockRect, m_bgcolor);
|
|
Shinya Kitaoka |
120a6e |
painter.setPen(Qt::black);
|
|
Shinya Kitaoka |
120a6e |
painter.drawRect(dockRect);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
painter.end();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TPanel::onCloseButtonPressed() {
|
|
Shinya Kitaoka |
120a6e |
emit closeButtonPressed();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// Currently, Toonz panels that get closed indeed just remain hidden -
|
|
Shinya Kitaoka |
120a6e |
// ready to reappair if they are needed again. However, the user expects
|
|
Shinya Kitaoka |
120a6e |
// a new panel to be created - so we just reset the panel here.
|
|
Shinya Kitaoka |
120a6e |
// reset(); //Moved to panel invocation in floatingpanelcommand.cpp
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// Also, remove widget from its dock layout control
|
|
Shinya Kitaoka |
120a6e |
if (parentLayout()) parentLayout()->removeWidget(this);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Shinya Kitaoka |
120a6e |
/*! activate the panel and set focus specified widget when mouse enters
|
|
shun-iwasawa |
7a6807 |
*/
|
|
Shinya Kitaoka |
120a6e |
void TPanel::enterEvent(QEvent *event) {
|
|
Shinya Kitaoka |
120a6e |
// Only when Toonz application is active
|
|
shun-iwasawa |
1f6fa7 |
QWidget *w = qApp->activeWindow();
|
|
shun-iwasawa |
1f6fa7 |
if (w) {
|
|
Martin van Zijl |
61c133 |
// grab the focus, unless a line-edit is focused currently
|
|
Martin van Zijl |
61c133 |
QWidget *focusWidget = qApp->focusWidget();
|
|
shun-iwasawa |
dfd2f7 |
if (focusWidget && (dynamic_cast<qlineedit *="">(focusWidget) ||</qlineedit>
|
|
shun-iwasawa |
dfd2f7 |
dynamic_cast<qtextedit *="">(focusWidget))) {</qtextedit>
|
|
shun-iwasawa |
3cf6a3 |
event->accept();
|
|
shun-iwasawa |
3cf6a3 |
return;
|
|
Martin van Zijl |
624982 |
}
|
|
Martin van Zijl |
624982 |
|
|
shun-iwasawa |
3cf6a3 |
widgetFocusOnEnter();
|
|
Martin van Zijl |
624982 |
|
|
Shinya Kitaoka |
120a6e |
// Some panels (e.g. Viewer, StudioPalette, Palette, ColorModel) are
|
|
Shinya Kitaoka |
120a6e |
// activated when mouse enters. Viewer is activatable only when being
|
|
Shinya Kitaoka |
120a6e |
// docked.
|
|
shun-iwasawa |
1f6fa7 |
// Active windows will NOT switch when the current active window is dialog.
|
|
shun-iwasawa |
1f6fa7 |
if (qobject_cast<qdialog *="">(w) == 0 && isActivatableOnEnter())</qdialog>
|
|
shun-iwasawa |
1f6fa7 |
activateWindow();
|
|
Shinya Kitaoka |
120a6e |
event->accept();
|
|
Shinya Kitaoka |
120a6e |
} else
|
|
Shinya Kitaoka |
120a6e |
event->accept();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
/*! clear focus when mouse leaves
|
|
shun-iwasawa |
7a6807 |
*/
|
|
shun-iwasawa |
3cf6a3 |
void TPanel::leaveEvent(QEvent *event) {
|
|
shun-iwasawa |
3cf6a3 |
QWidget *focusWidget = qApp->focusWidget();
|
|
shun-iwasawa |
3cf6a3 |
if (focusWidget && dynamic_cast<qlineedit *="">(focusWidget)) {</qlineedit>
|
|
shun-iwasawa |
3cf6a3 |
return;
|
|
shun-iwasawa |
3cf6a3 |
}
|
|
shun-iwasawa |
3cf6a3 |
widgetClearFocusOnLeave();
|
|
shun-iwasawa |
3cf6a3 |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
shun-iwasawa |
7a6807 |
//-----------------------------------------------------------------------------
|
|
shun-iwasawa |
7a6807 |
/*! load and restore previous geometry and state of the floating panel.
|
|
shun-iwasawa |
7a6807 |
called from the function OpenFloatingPanel::getOrOpenFloatingPanel()
|
|
shun-iwasawa |
7a6807 |
in floatingpanelcommand.cpp
|
|
shun-iwasawa |
7a6807 |
*/
|
|
shun-iwasawa |
7a6807 |
void TPanel::restoreFloatingPanelState() {
|
|
shun-iwasawa |
7a6807 |
TFilePath savePath = ToonzFolder::getMyModuleDir() + TFilePath("popups.ini");
|
|
shun-iwasawa |
7a6807 |
QSettings settings(QString::fromStdWString(savePath.getWideString()),
|
|
shun-iwasawa |
7a6807 |
QSettings::IniFormat);
|
|
shun-iwasawa |
7a6807 |
settings.beginGroup("Panels");
|
|
shun-iwasawa |
7a6807 |
|
|
shun-iwasawa |
7a6807 |
if (!settings.childGroups().contains(QString::fromStdString(m_panelType)))
|
|
shun-iwasawa |
7a6807 |
return;
|
|
shun-iwasawa |
7a6807 |
|
|
shun-iwasawa |
7a6807 |
settings.beginGroup(QString::fromStdString(m_panelType));
|
|
shun-iwasawa |
7a6807 |
|
|
shun-iwasawa |
7a6807 |
QRect geom = settings.value("geometry", saveGeometry()).toRect();
|
|
shun-iwasawa |
7a6807 |
// check if it can be visible in the current screen
|
|
shun-iwasawa |
7a6807 |
if (!(geom & QApplication::desktop()->availableGeometry(this)).isEmpty())
|
|
shun-iwasawa |
7a6807 |
setGeometry(geom);
|
|
shun-iwasawa |
7a6807 |
// load optional settings
|
|
shun-iwasawa |
7a6807 |
if (SaveLoadQSettings *persistent =
|
|
shun-iwasawa |
7a6807 |
dynamic_cast<saveloadqsettings *="">(widget()))</saveloadqsettings>
|
|
shun-iwasawa |
7a6807 |
persistent->load(settings);
|
|
shun-iwasawa |
7a6807 |
}
|
|
shun-iwasawa |
7a6807 |
|
|
shun-iwasawa |
b272a7 |
//-----------------------------------------------------------------------------
|
|
shun-iwasawa |
b272a7 |
// if the panel has no contents to be zoomed, simply resize the panel here
|
|
shun-iwasawa |
b272a7 |
// currently only Flipbook and Color Model panels support resizing of contents
|
|
shun-iwasawa |
b272a7 |
void TPanel::zoomContentsAndFitGeometry(bool forward) {
|
|
shun-iwasawa |
b272a7 |
if (!m_floating) return;
|
|
shun-iwasawa |
b272a7 |
|
|
shun-iwasawa |
b272a7 |
auto getScreen = [&]() {
|
|
shun-iwasawa |
b272a7 |
QScreen *ret = nullptr;
|
|
shun-iwasawa |
b272a7 |
ret = QGuiApplication::screenAt(geometry().topLeft());
|
|
shun-iwasawa |
b272a7 |
if (ret) return ret;
|
|
shun-iwasawa |
b272a7 |
ret = QGuiApplication::screenAt(geometry().topRight());
|
|
shun-iwasawa |
b272a7 |
if (ret) return ret;
|
|
shun-iwasawa |
b272a7 |
ret = QGuiApplication::screenAt(geometry().center());
|
|
shun-iwasawa |
b272a7 |
if (ret) return ret;
|
|
shun-iwasawa |
b272a7 |
ret = QGuiApplication::screenAt(geometry().bottomLeft());
|
|
shun-iwasawa |
b272a7 |
if (ret) return ret;
|
|
shun-iwasawa |
b272a7 |
ret = QGuiApplication::screenAt(geometry().bottomRight());
|
|
shun-iwasawa |
b272a7 |
return ret;
|
|
shun-iwasawa |
b272a7 |
};
|
|
shun-iwasawa |
b272a7 |
|
|
shun-iwasawa |
b272a7 |
// Get screen geometry
|
|
shun-iwasawa |
b272a7 |
QScreen *screen = getScreen();
|
|
shun-iwasawa |
b272a7 |
if (!screen) return;
|
|
shun-iwasawa |
b272a7 |
QRect screenGeom = screen->availableGeometry();
|
|
shun-iwasawa |
b272a7 |
|
|
shun-iwasawa |
b272a7 |
QSize newSize;
|
|
shun-iwasawa |
b272a7 |
if (forward)
|
|
shun-iwasawa |
b272a7 |
// x1.2 scale
|
|
shun-iwasawa |
b272a7 |
newSize = QSize(width() * 6 / 5, height() * 6 / 5);
|
|
shun-iwasawa |
b272a7 |
else
|
|
shun-iwasawa |
b272a7 |
// 1/1.2 scale
|
|
shun-iwasawa |
b272a7 |
newSize = QSize(width() * 5 / 6, height() * 5 / 6);
|
|
shun-iwasawa |
b272a7 |
|
|
shun-iwasawa |
b272a7 |
QRect newGeom(geometry().topLeft(), newSize);
|
|
shun-iwasawa |
b272a7 |
if (!screenGeom.contains(newGeom)) {
|
|
shun-iwasawa |
b272a7 |
if (newGeom.width() > screenGeom.width())
|
|
shun-iwasawa |
b272a7 |
newGeom.setWidth(screenGeom.width());
|
|
shun-iwasawa |
b272a7 |
if (newGeom.right() > screenGeom.right())
|
|
shun-iwasawa |
b272a7 |
newGeom.moveRight(screenGeom.right());
|
|
shun-iwasawa |
b272a7 |
else if (newGeom.left() < screenGeom.left())
|
|
shun-iwasawa |
b272a7 |
newGeom.moveLeft(screenGeom.left());
|
|
shun-iwasawa |
b272a7 |
|
|
shun-iwasawa |
b272a7 |
if (newGeom.height() > screenGeom.height())
|
|
shun-iwasawa |
b272a7 |
newGeom.setHeight(screenGeom.height());
|
|
shun-iwasawa |
b272a7 |
if (newGeom.bottom() > screenGeom.bottom())
|
|
shun-iwasawa |
b272a7 |
newGeom.moveBottom(screenGeom.bottom());
|
|
shun-iwasawa |
b272a7 |
else if (newGeom.top() < screenGeom.top())
|
|
shun-iwasawa |
b272a7 |
newGeom.moveTop(screenGeom.top());
|
|
shun-iwasawa |
b272a7 |
}
|
|
shun-iwasawa |
b272a7 |
setGeometry(newGeom);
|
|
shun-iwasawa |
b272a7 |
}
|
|
shun-iwasawa |
b272a7 |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// TPanelTitleBarButton
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TPanelTitleBarButton::TPanelTitleBarButton(QWidget *parent,
|
|
Kite |
521c84 |
const QString &standardPixmapName)
|
|
Shinya Kitaoka |
120a6e |
: QWidget(parent)
|
|
Shinya Kitaoka |
120a6e |
, m_standardPixmap(standardPixmapName)
|
|
Kite |
521c84 |
, m_standardPixmapName(standardPixmapName)
|
|
Shinya Kitaoka |
120a6e |
, m_rollover(false)
|
|
Shinya Kitaoka |
120a6e |
, m_pressed(false)
|
|
Shinya Kitaoka |
120a6e |
, m_buttonSet(0)
|
|
Shinya Kitaoka |
120a6e |
, m_id(0) {
|
|
Shinya Kitaoka |
120a6e |
setFixedSize(m_standardPixmap.size());
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
shun_iwasawa |
3cc41f |
TPanelTitleBarButton::TPanelTitleBarButton(QWidget *parent,
|
|
Kite |
521c84 |
const QPixmap &standardPixmap)
|
|
shun_iwasawa |
3cc41f |
: QWidget(parent)
|
|
shun_iwasawa |
3cc41f |
, m_standardPixmap(standardPixmap)
|
|
shun_iwasawa |
3cc41f |
, m_rollover(false)
|
|
shun_iwasawa |
3cc41f |
, m_pressed(false)
|
|
shun_iwasawa |
3cc41f |
, m_buttonSet(0)
|
|
shun_iwasawa |
3cc41f |
, m_id(0) {
|
|
shun_iwasawa |
3cc41f |
setFixedSize(m_standardPixmap.size() / m_standardPixmap.devicePixelRatio());
|
|
shun_iwasawa |
3cc41f |
}
|
|
shun_iwasawa |
3cc41f |
|
|
shun_iwasawa |
3cc41f |
//-----------------------------------------------------------------------------
|
|
shun_iwasawa |
3cc41f |
|
|
Shinya Kitaoka |
120a6e |
void TPanelTitleBarButton::setButtonSet(TPanelTitleBarButtonSet *buttonSet,
|
|
Shinya Kitaoka |
120a6e |
int id) {
|
|
Shinya Kitaoka |
120a6e |
m_buttonSet = buttonSet;
|
|
Shinya Kitaoka |
120a6e |
m_id = id;
|
|
Shinya Kitaoka |
120a6e |
m_buttonSet->add(this);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TPanelTitleBarButton::setPressed(bool pressed) {
|
|
Shinya Kitaoka |
120a6e |
if (pressed != m_pressed) {
|
|
Shinya Kitaoka |
120a6e |
m_pressed = pressed;
|
|
Shinya Kitaoka |
120a6e |
update();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TPanelTitleBarButton::paintEvent(QPaintEvent *event) {
|
|
Kite |
c50ec4 |
// Set unique pressed colors if filename contains the following words:
|
|
Kite |
c50ec4 |
QColor bgColor = getPressedColor();
|
|
Kite |
c50ec4 |
if (m_standardPixmapName.contains("freeze", Qt::CaseInsensitive))
|
|
Kite |
c50ec4 |
bgColor = getFreezeColor();
|
|
Kite |
c50ec4 |
if (m_standardPixmapName.contains("preview", Qt::CaseInsensitive))
|
|
Kite |
c50ec4 |
bgColor = getPreviewColor();
|
|
Kite |
c50ec4 |
|
|
Kite |
c50ec4 |
QPixmap panePixmap = recolorPixmap(svgToPixmap(m_standardPixmapName));
|
|
Kite |
c50ec4 |
QPixmap panePixmapOff = compositePixmap(panePixmap, 0.8);
|
|
Kite |
c50ec4 |
QPixmap panePixmapOver =
|
|
Kite |
c50ec4 |
compositePixmap(panePixmap, 1, QSize(), 0, 0, getOverColor());
|
|
Kite |
c50ec4 |
QPixmap panePixmapOn = compositePixmap(panePixmap, 1, QSize(), 0, 0, bgColor);
|
|
Kite |
521c84 |
|
|
Kite |
c50ec4 |
QPainter painter(this);
|
|
shun-iwasawa |
9b2afe |
painter.drawPixmap(0, 0,
|
|
shun-iwasawa |
9b2afe |
m_pressed ? panePixmapOn
|
|
shun-iwasawa |
9b2afe |
: m_rollover ? panePixmapOver
|
|
shun-iwasawa |
9b2afe |
: panePixmapOff);
|
|
Shinya Kitaoka |
120a6e |
painter.end();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TPanelTitleBarButton::mouseMoveEvent(QMouseEvent *event) {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TPanelTitleBarButton::enterEvent(QEvent *) {
|
|
Shinya Kitaoka |
120a6e |
if (!m_rollover) {
|
|
Shinya Kitaoka |
120a6e |
m_rollover = true;
|
|
Shinya Kitaoka |
120a6e |
if (!m_pressed) update();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TPanelTitleBarButton::leaveEvent(QEvent *) {
|
|
Shinya Kitaoka |
120a6e |
if (m_rollover) {
|
|
Shinya Kitaoka |
120a6e |
m_rollover = false;
|
|
Shinya Kitaoka |
120a6e |
if (!m_pressed) update();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TPanelTitleBarButton::mousePressEvent(QMouseEvent *e) {
|
|
Shinya Kitaoka |
120a6e |
if (m_buttonSet) {
|
|
Shinya Kitaoka |
120a6e |
if (m_pressed) return;
|
|
Shinya Kitaoka |
120a6e |
m_buttonSet->select(this);
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
m_pressed = !m_pressed;
|
|
Shinya Kitaoka |
120a6e |
emit toggled(m_pressed);
|
|
Shinya Kitaoka |
120a6e |
update();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// TPanelTitleBarButtonForSafeArea
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TPanelTitleBarButtonForSafeArea::getSafeAreaNameList(
|
|
Shinya Kitaoka |
120a6e |
QList<qstring> &nameList) {</qstring>
|
|
Jeremy Bullock |
1d47b8 |
TFilePath fp = TEnv::getConfigDir();
|
|
Shinya Kitaoka |
120a6e |
QString currentSafeAreaName = QString::fromStdString(EnvSafeAreaName);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Jeremy Bullock |
1d47b8 |
std::string safeAreaFileName = "safearea.ini";
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
while (!TFileStatus(fp + safeAreaFileName).doesExist() && !fp.isRoot() &&
|
|
Shinya Kitaoka |
120a6e |
fp.getParentDir() != TFilePath())
|
|
Shinya Kitaoka |
120a6e |
fp = fp.getParentDir();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
fp = fp + safeAreaFileName;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (TFileStatus(fp).doesExist()) {
|
|
Shinya Kitaoka |
120a6e |
QSettings settings(toQString(fp), QSettings::IniFormat);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// find the current safearea name from the list
|
|
Shinya Kitaoka |
120a6e |
QStringList groups = settings.childGroups();
|
|
Shinya Kitaoka |
120a6e |
for (int g = 0; g < groups.size(); g++) {
|
|
Shinya Kitaoka |
120a6e |
settings.beginGroup(groups.at(g));
|
|
Shinya Kitaoka |
120a6e |
nameList.push_back(settings.value("name", "").toString());
|
|
Shinya Kitaoka |
120a6e |
settings.endGroup();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TPanelTitleBarButtonForSafeArea::mousePressEvent(QMouseEvent *e) {
|
|
Shinya Kitaoka |
120a6e |
if (e->button() != Qt::RightButton) {
|
|
Shinya Kitaoka |
120a6e |
m_pressed = !m_pressed;
|
|
Shinya Kitaoka |
120a6e |
emit toggled(m_pressed);
|
|
Shinya Kitaoka |
120a6e |
update();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TPanelTitleBarButtonForSafeArea::contextMenuEvent(QContextMenuEvent *e) {
|
|
Shinya Kitaoka |
120a6e |
QMenu menu(this);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
QList<qstring> safeAreaNameList;</qstring>
|
|
Shinya Kitaoka |
120a6e |
getSafeAreaNameList(safeAreaNameList);
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < safeAreaNameList.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
QAction *action = new QAction(safeAreaNameList.at(i), this);
|
|
Shinya Kitaoka |
120a6e |
action->setData(safeAreaNameList.at(i));
|
|
Shinya Kitaoka |
120a6e |
connect(action, SIGNAL(triggered()), this, SLOT(onSetSafeArea()));
|
|
Shinya Kitaoka |
120a6e |
if (safeAreaNameList.at(i) == QString::fromStdString(EnvSafeAreaName)) {
|
|
Shinya Kitaoka |
120a6e |
action->setCheckable(true);
|
|
Shinya Kitaoka |
120a6e |
action->setChecked(true);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
menu.addAction(action);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
menu.exec(e->globalPos());
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TPanelTitleBarButtonForSafeArea::onSetSafeArea() {
|
|
Shinya Kitaoka |
120a6e |
QString safeAreaName = qobject_cast<qaction *="">(sender())->data().toString();</qaction>
|
|
Shinya Kitaoka |
120a6e |
// change safearea if the different one is selected
|
|
Shinya Kitaoka |
120a6e |
if (QString::fromStdString(EnvSafeAreaName) != safeAreaName) {
|
|
Shinya Kitaoka |
120a6e |
EnvSafeAreaName = safeAreaName.toStdString();
|
|
Shinya Kitaoka |
120a6e |
// emit sceneChanged without setting dirty flag
|
|
Shinya Kitaoka |
120a6e |
TApp::instance()->getCurrentScene()->notifySceneChanged(false);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
shun-iwasawa |
02ac7e |
// TPanelTitleBarButtonForPreview
|
|
shun-iwasawa |
02ac7e |
//-----------------------------------------------------------------------------
|
|
shun-iwasawa |
02ac7e |
|
|
shun-iwasawa |
02ac7e |
void TPanelTitleBarButtonForPreview::mousePressEvent(QMouseEvent *e) {
|
|
shun-iwasawa |
02ac7e |
if (e->button() != Qt::RightButton) {
|
|
shun-iwasawa |
02ac7e |
m_pressed = !m_pressed;
|
|
shun-iwasawa |
02ac7e |
emit toggled(m_pressed);
|
|
shun-iwasawa |
02ac7e |
update();
|
|
shun-iwasawa |
02ac7e |
}
|
|
shun-iwasawa |
02ac7e |
}
|
|
shun-iwasawa |
02ac7e |
|
|
shun-iwasawa |
02ac7e |
//-----------------------------------------------------------------------------
|
|
shun-iwasawa |
02ac7e |
|
|
shun-iwasawa |
02ac7e |
void TPanelTitleBarButtonForPreview::contextMenuEvent(QContextMenuEvent *e) {
|
|
shun-iwasawa |
02ac7e |
QMenu menu(this);
|
|
shun-iwasawa |
02ac7e |
|
|
shun-iwasawa |
02ac7e |
// 0: current frame
|
|
shun-iwasawa |
02ac7e |
// 1: all frames in the preview range
|
|
shun-iwasawa |
02ac7e |
// 2: selected cell, auto play once & stop
|
|
shun-iwasawa |
02ac7e |
QStringList behaviorsStrList = {tr("Current frame"),
|
|
shun-iwasawa |
02ac7e |
tr("All preview range frames"),
|
|
shun-iwasawa |
02ac7e |
tr("Selected cells - Auto play")};
|
|
shun-iwasawa |
02ac7e |
|
|
shun-iwasawa |
02ac7e |
QActionGroup *behaviorGroup = new QActionGroup(this);
|
|
shun-iwasawa |
02ac7e |
|
|
shun-iwasawa |
02ac7e |
for (int i = 0; i < behaviorsStrList.size(); i++) {
|
|
shun-iwasawa |
02ac7e |
QAction *action = menu.addAction(behaviorsStrList.at(i));
|
|
shun-iwasawa |
02ac7e |
action->setData(i);
|
|
shun-iwasawa |
02ac7e |
connect(action, SIGNAL(triggered()), this, SLOT(onSetPreviewBehavior()));
|
|
shun-iwasawa |
02ac7e |
action->setCheckable(true);
|
|
shun-iwasawa |
02ac7e |
behaviorGroup->addAction(action);
|
|
shun-iwasawa |
02ac7e |
if (i == EnvViewerPreviewBehavior) action->setChecked(true);
|
|
shun-iwasawa |
02ac7e |
}
|
|
shun-iwasawa |
02ac7e |
|
|
shun-iwasawa |
02ac7e |
menu.exec(e->globalPos());
|
|
shun-iwasawa |
02ac7e |
}
|
|
shun-iwasawa |
02ac7e |
|
|
shun-iwasawa |
02ac7e |
//-----------------------------------------------------------------------------
|
|
shun-iwasawa |
02ac7e |
|
|
shun-iwasawa |
02ac7e |
void TPanelTitleBarButtonForPreview::onSetPreviewBehavior() {
|
|
shun-iwasawa |
02ac7e |
int behaviorId = qobject_cast<qaction *="">(sender())->data().toInt();</qaction>
|
|
shun-iwasawa |
02ac7e |
// change safearea if the different one is selected
|
|
shun-iwasawa |
02ac7e |
if (EnvViewerPreviewBehavior != behaviorId) {
|
|
shun-iwasawa |
02ac7e |
EnvViewerPreviewBehavior = behaviorId;
|
|
shun-iwasawa |
02ac7e |
// emit sceneChanged without setting dirty flag
|
|
shun-iwasawa |
02ac7e |
TApp::instance()->getCurrentScene()->notifySceneChanged(false);
|
|
shun-iwasawa |
02ac7e |
}
|
|
shun-iwasawa |
02ac7e |
}
|
|
shun-iwasawa |
02ac7e |
|
|
shun-iwasawa |
02ac7e |
//-----------------------------------------------------------------------------
|
|
shun-iwasawa |
02ac7e |
|
|
shun-iwasawa |
02ac7e |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// TPanelTitleBarButtonSet
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TPanelTitleBarButtonSet::TPanelTitleBarButtonSet() {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TPanelTitleBarButtonSet::~TPanelTitleBarButtonSet() {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TPanelTitleBarButtonSet::add(TPanelTitleBarButton *button) {
|
|
Shinya Kitaoka |
120a6e |
m_buttons.push_back(button);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TPanelTitleBarButtonSet::select(TPanelTitleBarButton *button) {
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < (int)m_buttons.size(); i++)
|
|
Shinya Kitaoka |
120a6e |
m_buttons[i]->setPressed(button == m_buttons[i]);
|
|
Shinya Kitaoka |
120a6e |
emit selected(button->getId());
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// PaneTitleBar
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TPanelTitleBar::TPanelTitleBar(QWidget *parent,
|
|
Shinya Kitaoka |
120a6e |
TDockWidget::Orientation orientation)
|
|
shun-iwasawa |
32f84c |
: QFrame(parent), m_closeButtonHighlighted(false) {
|
|
Shinya Kitaoka |
120a6e |
setMouseTracking(true);
|
|
Shinya Kitaoka |
120a6e |
setFocusPolicy(Qt::NoFocus);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
QSize TPanelTitleBar::minimumSizeHint() const { return QSize(20, 18); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TPanelTitleBar::paintEvent(QPaintEvent *) {
|
|
Shinya Kitaoka |
120a6e |
QPainter painter(this);
|
|
Shinya Kitaoka |
120a6e |
QRect rect = this->rect();
|
|
Shinya Kitaoka |
120a6e |
|
|
shun_iwasawa |
064d70 |
bool isPanelActive;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TPanel *dw = qobject_cast<tpanel *="">(parentWidget());</tpanel>
|
|
Shinya Kitaoka |
120a6e |
Q_ASSERT(dw != 0);
|
|
shun_iwasawa |
064d70 |
// docked panel
|
|
Shinya Kitaoka |
120a6e |
if (!dw->isFloating()) {
|
|
shun_iwasawa |
064d70 |
isPanelActive = dw->widgetInThisPanelIsFocused();
|
|
shun_iwasawa |
064d70 |
qDrawBorderPixmap(&painter, rect, QMargins(3, 3, 3, 3),
|
|
shun_iwasawa |
064d70 |
(isPanelActive) ? m_activeBorderPm : m_borderPm);
|
|
shun_iwasawa |
064d70 |
}
|
|
shun_iwasawa |
064d70 |
// floating panel
|
|
shun_iwasawa |
064d70 |
else {
|
|
shun_iwasawa |
064d70 |
isPanelActive = isActiveWindow();
|
|
shun_iwasawa |
064d70 |
qDrawBorderPixmap(
|
|
shun_iwasawa |
064d70 |
&painter, rect, QMargins(3, 3, 3, 3),
|
|
shun_iwasawa |
064d70 |
(isPanelActive) ? m_floatActiveBorderPm : m_floatBorderPm);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (dw->getOrientation() == TDockWidget::vertical) {
|
|
Shinya Kitaoka |
120a6e |
QString titleText = painter.fontMetrics().elidedText(
|
|
Shinya Kitaoka |
120a6e |
dw->windowTitle(), Qt::ElideRight, rect.width() - 50);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
painter.setBrush(Qt::NoBrush);
|
|
shun_iwasawa |
064d70 |
painter.setPen(isPanelActive ? m_activeTitleColor : m_titleColor);
|
|
Kite |
521c84 |
painter.drawText(QPointF(8, 13), titleText);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (dw->isFloating()) {
|
|
Kite |
521c84 |
QIcon paneCloseIcon = createQIcon("pane_close");
|
|
shun_iwasawa |
3cc41f |
const static QPixmap closeButtonPixmap(
|
|
Kite |
521c84 |
paneCloseIcon.pixmap(20, 18, QIcon::Normal, QIcon::Off));
|
|
Shinya Kitaoka |
120a6e |
const static QPixmap closeButtonPixmapOver(
|
|
Kite |
521c84 |
paneCloseIcon.pixmap(20, 18, QIcon::Active));
|
|
Shinya Kitaoka |
120a6e |
|
|
Kite |
521c84 |
QPoint closeButtonPos(rect.right() - 20, rect.top());
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (m_closeButtonHighlighted)
|
|
shun_iwasawa |
3cc41f |
painter.drawPixmap(closeButtonPos, closeButtonPixmapOver);
|
|
Shinya Kitaoka |
120a6e |
else
|
|
shun_iwasawa |
3cc41f |
painter.drawPixmap(closeButtonPos, closeButtonPixmap);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
painter.end();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TPanelTitleBar::mousePressEvent(QMouseEvent *event) {
|
|
Shinya Kitaoka |
120a6e |
TDockWidget *dw = static_cast<tdockwidget *="">(parentWidget());</tdockwidget>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
QPoint pos = event->pos();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (dw->isFloating()) {
|
|
Shinya Kitaoka |
120a6e |
QRect rect = this->rect();
|
|
Kite |
521c84 |
QRect closeButtonRect(rect.right() - 20, rect.top() + 1, 20, 18);
|
|
Shinya Kitaoka |
120a6e |
if (closeButtonRect.contains(pos) && dw->isFloating()) {
|
|
Shinya Kitaoka |
120a6e |
event->accept();
|
|
Shinya Kitaoka |
120a6e |
dw->hide();
|
|
Shinya Kitaoka |
120a6e |
m_closeButtonHighlighted = false;
|
|
Shinya Kitaoka |
120a6e |
emit closeButtonPressed();
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
event->ignore();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TPanelTitleBar::mouseMoveEvent(QMouseEvent *event) {
|
|
Shinya Kitaoka |
120a6e |
TDockWidget *dw = static_cast<tdockwidget *="">(parentWidget());</tdockwidget>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (dw->isFloating()) {
|
|
Shinya Kitaoka |
120a6e |
QPoint pos = event->pos();
|
|
Shinya Kitaoka |
120a6e |
QRect rect = this->rect();
|
|
Kite |
62f3e4 |
QRect closeButtonRect(rect.right() - 18, rect.top() + 1, 18, 18);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (closeButtonRect.contains(pos) && dw->isFloating())
|
|
Shinya Kitaoka |
120a6e |
m_closeButtonHighlighted = true;
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
m_closeButtonHighlighted = false;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
update();
|
|
Shinya Kitaoka |
120a6e |
event->ignore();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TPanelTitleBar::mouseDoubleClickEvent(QMouseEvent *me) {
|
|
Shinya Kitaoka |
120a6e |
emit doubleClick(me);
|
|
Shinya Kitaoka |
120a6e |
me->ignore();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TPanelTitleBar::add(const QPoint &pos, QWidget *widget) {
|
|
Shinya Kitaoka |
120a6e |
m_buttons.push_back(std::make_pair(pos, widget));
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TPanelTitleBar::resizeEvent(QResizeEvent *e) {
|
|
Shinya Kitaoka |
120a6e |
QWidget::resizeEvent(e);
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < (int)m_buttons.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
QPoint p = m_buttons[i].first;
|
|
Shinya Kitaoka |
120a6e |
QWidget *w = m_buttons[i].second;
|
|
Shinya Kitaoka |
120a6e |
if (p.x() < 0) p.setX(p.x() + width());
|
|
Shinya Kitaoka |
120a6e |
w->move(p);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// TPanelFactory
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TPanelFactory::TPanelFactory(QString panelType) : m_panelType(panelType) {
|
|
![](https://seccdn.libravatar.org/avatar/2e5dd0bee1e7e619066117de357c8458fc7e847f4345b0cb8a7a5413aa2a45a0?d=retro&s=16) |
2fc36c |
assert(tableInstance().count(panelType) == 0);
|
|
![](https://seccdn.libravatar.org/avatar/2e5dd0bee1e7e619066117de357c8458fc7e847f4345b0cb8a7a5413aa2a45a0?d=retro&s=16) |
2fc36c |
tableInstance()[m_panelType] = this;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
![](https://seccdn.libravatar.org/avatar/2e5dd0bee1e7e619066117de357c8458fc7e847f4345b0cb8a7a5413aa2a45a0?d=retro&s=16) |
2fc36c |
TPanelFactory::~TPanelFactory() { tableInstance().remove(m_panelType); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
shun_iwasawa |
2732f7 |
QMap<qstring, *="" tpanelfactory=""> &TPanelFactory::tableInstance() {</qstring,>
|
|
![](https://seccdn.libravatar.org/avatar/2e5dd0bee1e7e619066117de357c8458fc7e847f4345b0cb8a7a5413aa2a45a0?d=retro&s=16) |
2fc36c |
static QMap<qstring, *="" tpanelfactory=""> table;</qstring,>
|
|
![](https://seccdn.libravatar.org/avatar/2e5dd0bee1e7e619066117de357c8458fc7e847f4345b0cb8a7a5413aa2a45a0?d=retro&s=16) |
2fc36c |
return table;
|
|
![](https://seccdn.libravatar.org/avatar/2e5dd0bee1e7e619066117de357c8458fc7e847f4345b0cb8a7a5413aa2a45a0?d=retro&s=16) |
2fc36c |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TPanel *TPanelFactory::createPanel(QWidget *parent, QString panelType) {
|
|
Shinya Kitaoka |
120a6e |
TPanel *panel = 0;
|
|
Toshihiro Shimizu |
890ddd |
|
|
![](https://seccdn.libravatar.org/avatar/2e5dd0bee1e7e619066117de357c8458fc7e847f4345b0cb8a7a5413aa2a45a0?d=retro&s=16) |
2fc36c |
QMap<qstring, *="" tpanelfactory="">::iterator it = tableInstance().find(panelType);</qstring,>
|
|
![](https://seccdn.libravatar.org/avatar/2e5dd0bee1e7e619066117de357c8458fc7e847f4345b0cb8a7a5413aa2a45a0?d=retro&s=16) |
2fc36c |
if (it == tableInstance().end()) {
|
|
shun-iwasawa |
9b2afe |
if (panelType.startsWith("Custom_")) {
|
|
shun-iwasawa |
9b2afe |
panelType = panelType.right(panelType.size() - 7);
|
|
shun-iwasawa |
9b2afe |
return CustomPanelManager::instance()->createCustomPanel(panelType,
|
|
shun-iwasawa |
9b2afe |
parent);
|
|
shun-iwasawa |
9b2afe |
}
|
|
shun-iwasawa |
9b2afe |
|
|
Shinya Kitaoka |
120a6e |
TPanel *panel = new TPanel(parent);
|
|
Shinya Kitaoka |
120a6e |
panel->setPanelType(panelType.toStdString());
|
|
Shinya Kitaoka |
120a6e |
return panel;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
TPanelFactory *factory = it.value();
|
|
Shinya Kitaoka |
120a6e |
TPanel *panel = factory->createPanel(parent);
|
|
Shinya Kitaoka |
120a6e |
panel->setPanelType(panelType.toStdString());
|
|
Shinya Kitaoka |
120a6e |
return panel;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TPanel *TPanelFactory::createPanel(QWidget *parent) {
|
|
Shinya Kitaoka |
120a6e |
TPanel *panel = new TPanel(parent);
|
|
Shinya Kitaoka |
120a6e |
panel->setObjectName(getPanelType());
|
|
Shinya Kitaoka |
120a6e |
panel->setWindowTitle(getPanelType());
|
|
Shinya Kitaoka |
120a6e |
initialize(panel);
|
|
Shinya Kitaoka |
120a6e |
return panel;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|