revert room edit feature

This commit is contained in:
shun_iwasawa 2016-04-07 16:09:59 +09:00
parent 6cd606de62
commit b05ca51266
3 changed files with 258 additions and 59 deletions

View file

@ -370,10 +370,10 @@ MainWindow::MainWindow(const QString &argumentLayoutFileName, QWidget *parent, Q
changeWindowTitle();
//Connetto i comandi che sono in RoomTabWidget
//connect(roomTabWidget, SIGNAL(indexSwapped(int , int )), SLOT(onIndexSwapped(int ,int )));
//connect(roomTabWidget, SIGNAL(insertNewTabRoom()), SLOT(insertNewRoom()));
//connect(roomTabWidget, SIGNAL(deleteTabRoom(int)), SLOT(deleteRoom(int)));
//connect(roomTabWidget, SIGNAL(renameTabRoom(int, const QString)), SLOT(renameRoom(int, const QString)));
connect(roomTabWidget, SIGNAL(indexSwapped(int , int )), SLOT(onIndexSwapped(int ,int )));
connect(roomTabWidget, SIGNAL(insertNewTabRoom()), SLOT(insertNewRoom()));
connect(roomTabWidget, SIGNAL(deleteTabRoom(int)), SLOT(deleteRoom(int)));
connect(roomTabWidget, SIGNAL(renameTabRoom(int, const QString)), SLOT(renameRoom(int, const QString)));
setCommandHandler("MI_Quit", this, &MainWindow::onQuit);
setCommandHandler("MI_Undo", this, &MainWindow::onUndo);
@ -651,6 +651,7 @@ void MainWindow::writeSettings()
rooms.push_back(room);
room->save();
}
writeRoomList(rooms);
//Current room settings
Tofstream os(ToonzFolder::getMyModuleDir() + currentRoomFileName);

View file

@ -37,6 +37,7 @@
#include <QMenuBar>
#include <QShortcut>
#include <QDesktopServices>
#include <QCheckBox>
void UrlOpener::open()
{
@ -46,6 +47,160 @@ void UrlOpener::open()
UrlOpener dvHome(QUrl("http://www.toonz.com/"));
UrlOpener manual(QUrl("file:///C:/gmt/butta/M&C in EU.pdf"));
TEnv::IntVar LockRoomTabToggle("LockRoomTabToggle", 0);
//=============================================================================
// RoomTabWidget
//-----------------------------------------------------------------------------
RoomTabWidget::RoomTabWidget(QWidget *parent)
: QTabBar(parent)
, m_clickedTabIndex(-1)
, m_tabToDeleteIndex(-1)
, m_renameTabIndex(-1)
, m_renameTextField(new DVGui::LineEdit(this))
, m_isLocked( LockRoomTabToggle != 0 )
{
m_renameTextField->hide();
connect(m_renameTextField, SIGNAL(editingFinished()), this, SLOT(updateTabName()));
}
//-----------------------------------------------------------------------------
RoomTabWidget::~RoomTabWidget()
{
}
//-----------------------------------------------------------------------------
void RoomTabWidget::swapIndex(int firstIndex, int secondIndex)
{
QString firstText = tabText(firstIndex);
removeTab(firstIndex);
insertTab(secondIndex, firstText);
emit indexSwapped(firstIndex, secondIndex);
setCurrentIndex(secondIndex);
}
//-----------------------------------------------------------------------------
void RoomTabWidget::mousePressEvent(QMouseEvent *event)
{
m_renameTextField->hide();
if (event->button() == Qt::LeftButton)
{
m_clickedTabIndex = tabAt(event->pos());
if (m_clickedTabIndex<0) return;
setCurrentIndex(m_clickedTabIndex);
}
}
//-----------------------------------------------------------------------------
void RoomTabWidget::mouseMoveEvent(QMouseEvent *event)
{
if (m_isLocked) return;
if (event->buttons())
{
int tabIndex = tabAt(event->pos());
if (tabIndex == m_clickedTabIndex ||
tabIndex<0 || tabIndex >= count() ||
m_clickedTabIndex<0)
return;
swapIndex(m_clickedTabIndex, tabIndex);
m_clickedTabIndex = tabIndex;
}
}
//-----------------------------------------------------------------------------
void RoomTabWidget::mouseReleaseEvent(QMouseEvent *event)
{
m_clickedTabIndex = -1;
}
//-----------------------------------------------------------------------------
/*! Set a text field with focus in event position to edit tab name.
*/
void RoomTabWidget::mouseDoubleClickEvent(QMouseEvent * event)
{
if (m_isLocked) return;
int index = tabAt(event->pos());
if (index<0) return;
m_renameTabIndex = index;
DVGui::LineEdit *fld = m_renameTextField;
fld->setText(tabText(index));
fld->setGeometry(tabRect(index));
fld->show();
fld->selectAll();
fld->setFocus(Qt::OtherFocusReason);
}
//-----------------------------------------------------------------------------
void RoomTabWidget::contextMenuEvent(QContextMenuEvent *event)
{
if (m_isLocked) return;
m_tabToDeleteIndex = -1;
QMenu *menu = new QMenu(this);
QAction* newRoom = menu->addAction(tr("New Room"));
connect(newRoom, SIGNAL(triggered()), SLOT(addNewTab()));
int index = tabAt(event->pos());
if (index != currentIndex() && index >= 0)
{
m_tabToDeleteIndex = index;
QAction* deleteRoom = menu->addAction(tr("Delete Room %1").arg(tabText(index)));
connect(deleteRoom, SIGNAL(triggered()), SLOT(deleteTab()));
}
menu->exec(event->globalPos());
}
//-----------------------------------------------------------------------------
void RoomTabWidget::updateTabName()
{
int index = m_renameTabIndex;
if (index<0) return;
m_renameTabIndex = -1;
QString newName = m_renameTextField->text();
setTabText(index, newName);
m_renameTextField->hide();
emit renameTabRoom(index, newName);
}
//-----------------------------------------------------------------------------
void RoomTabWidget::addNewTab()
{
insertTab(0, tr("Room"));
emit insertNewTabRoom();
}
//-----------------------------------------------------------------------------
void RoomTabWidget::deleteTab()
{
assert(m_tabToDeleteIndex != -1);
QString question(tr("Are you sure you want to remove room %1").arg(tabText(m_tabToDeleteIndex)));
int ret = DVGui::MsgBox(question, QObject::tr("Yes"), QObject::tr("No"));
if (ret == 0 || ret == 2) return;
emit deleteTabRoom(m_tabToDeleteIndex);
removeTab(m_tabToDeleteIndex);
m_tabToDeleteIndex = -1;
}
//-----------------------------------------------------------------------------
void RoomTabWidget::setIsLocked(bool lock)
{
m_isLocked = lock;
LockRoomTabToggle = (lock) ? 1 : 0;
}
//=============================================================================
// StackedMenuBar
//-----------------------------------------------------------------------------
@ -63,31 +218,30 @@ void StackedMenuBar::createMenuBarByName(const QString &roomName)
std::cout << "create " << roomName.toStdString() << std::endl;
#if defined(_WIN32) || defined(_CYGWIN_)
if (roomName == "Cleanup")
createCleanupMenuBar();
addWidget(createCleanupMenuBar());
else if (roomName == "PltEdit")
createPltEditMenuBar();
addWidget(createPltEditMenuBar());
else if (roomName == "InknPaint")
createInknPaintMenuBar();
addWidget(createInknPaintMenuBar());
else if (roomName == "Xsheet" || roomName == "Schematic" || roomName == "QAR" || roomName == "Flip")
createXsheetMenuBar();
addWidget(createXsheetMenuBar());
else if (roomName == "Batches")
createBatchesMenuBar();
addWidget(createBatchesMenuBar());
else if (roomName == "Browser")
createBrowserMenuBar();
addWidget(createBrowserMenuBar());
else /*-- どれにもあてはまらない場合は全てのコマンドの入ったメニューバーを作る --*/
createFullMenuBar();
addWidget(createFullMenuBar());
#else
/* OSX では stacked menu が動いていないのでとりあえず full のみ作成する */
createFullMenuBar();
addWidget(createFullMenuBar());
#endif
}
//---------------------------------------------------------------------------------
void StackedMenuBar::createCleanupMenuBar()
QMenuBar* StackedMenuBar::createCleanupMenuBar()
{
QMenuBar *cleanupMenuBar;
cleanupMenuBar = new QMenuBar(this);
QMenuBar *cleanupMenuBar = new QMenuBar(this);
//----Files Menu
QMenu *filesMenu = addMenu(tr("Files"), cleanupMenuBar);
addMenuItem(filesMenu, MI_LoadLevel);
@ -205,15 +359,14 @@ void StackedMenuBar::createCleanupMenuBar()
QMenu *helpMenu = addMenu(tr("Help"), cleanupMenuBar);
addMenuItem(helpMenu, MI_About);
addWidget(cleanupMenuBar);
return cleanupMenuBar;
}
//---------------------------------------------------------------------------------
void StackedMenuBar::createPltEditMenuBar()
QMenuBar* StackedMenuBar::createPltEditMenuBar()
{
QMenuBar *pltEditMenuBar;
pltEditMenuBar = new QMenuBar(this);
QMenuBar *pltEditMenuBar = new QMenuBar(this);
//---Files Menu
QMenu *filesMenu = addMenu(tr("Files"), pltEditMenuBar);
@ -369,15 +522,14 @@ void StackedMenuBar::createPltEditMenuBar()
QMenu *helpMenu = addMenu(tr("Help"), pltEditMenuBar);
addMenuItem(helpMenu, MI_About);
addWidget(pltEditMenuBar);
return pltEditMenuBar;
}
//---------------------------------------------------------------------------------
void StackedMenuBar::createInknPaintMenuBar()
QMenuBar* StackedMenuBar::createInknPaintMenuBar()
{
QMenuBar *inknPaintMenuBar;
inknPaintMenuBar = new QMenuBar(this);
QMenuBar *inknPaintMenuBar = new QMenuBar(this);
//---Files Menu
QMenu *filesMenu = addMenu(tr("Files"), inknPaintMenuBar);
@ -543,15 +695,14 @@ void StackedMenuBar::createInknPaintMenuBar()
QMenu *helpMenu = addMenu(tr("Help"), inknPaintMenuBar);
addMenuItem(helpMenu, MI_About);
addWidget(inknPaintMenuBar);
return inknPaintMenuBar;
}
//---------------------------------------------------------------------------------
void StackedMenuBar::createXsheetMenuBar()
QMenuBar* StackedMenuBar::createXsheetMenuBar()
{
QMenuBar *xsheetMenuBar;
xsheetMenuBar = new QMenuBar(this);
QMenuBar *xsheetMenuBar = new QMenuBar(this);
//----Xsheet Menu
QMenu *xsheetMenu = addMenu(tr("Xsheet"), xsheetMenuBar);
addMenuItem(xsheetMenu, MI_LoadScene);
@ -722,15 +873,14 @@ void StackedMenuBar::createXsheetMenuBar()
QMenu *helpMenu = addMenu(tr("Help"), xsheetMenuBar);
addMenuItem(helpMenu, MI_About);
addWidget(xsheetMenuBar);
return xsheetMenuBar;
}
//---------------------------------------------------------------------------------
void StackedMenuBar::createBatchesMenuBar()
QMenuBar* StackedMenuBar::createBatchesMenuBar()
{
QMenuBar *batchesMenuBar;
batchesMenuBar = new QMenuBar(this);
QMenuBar *batchesMenuBar = new QMenuBar(this);
//---Files Menu
QMenu *filesMenu = addMenu(tr("Files"), batchesMenuBar);
@ -759,15 +909,14 @@ void StackedMenuBar::createBatchesMenuBar()
QMenu *helpMenu = addMenu(tr("Help"), batchesMenuBar);
addMenuItem(helpMenu, MI_About);
addWidget(batchesMenuBar);
return batchesMenuBar;
}
//---------------------------------------------------------------------------------
void StackedMenuBar::createBrowserMenuBar()
QMenuBar* StackedMenuBar::createBrowserMenuBar()
{
QMenuBar *browserMenuBar;
browserMenuBar = new QMenuBar(this);
QMenuBar * browserMenuBar = new QMenuBar(this);
//---Files Menu
QMenu *filesMenu = addMenu(tr("Files"), browserMenuBar);
@ -798,12 +947,12 @@ void StackedMenuBar::createBrowserMenuBar()
QMenu *helpMenu = addMenu(tr("Help"), browserMenuBar);
addMenuItem(helpMenu, MI_About);
addWidget(browserMenuBar);
return browserMenuBar;
}
//---------------------------------------------------------------------------------
void StackedMenuBar::createFullMenuBar()
QMenuBar* StackedMenuBar::createFullMenuBar()
{
QMenuBar *fullMenuBar = new QMenuBar(this);
//Menu' FILE
@ -1083,7 +1232,7 @@ void StackedMenuBar::createFullMenuBar()
QMenu *helpMenu = addMenu(tr("Help"), fullMenuBar);
addMenuItem(helpMenu, MI_About);
addWidget(fullMenuBar);
return fullMenuBar;
}
//-----------------------------------------------------------------------------
@ -1106,6 +1255,32 @@ void StackedMenuBar::addMenuItem(QMenu *menu, const char *cmdId)
menu->addAction(action);
}
//-----------------------------------------------------------------------------
void StackedMenuBar::onIndexSwapped(int firstIndex, int secondIndex)
{
assert(firstIndex >= 0 && secondIndex >= 0);
QWidget* menuBar = widget(firstIndex);
removeWidget(menuBar);
insertWidget(secondIndex, menuBar);
}
//-----------------------------------------------------------------------------
void StackedMenuBar::insertNewMenuBar()
{
insertWidget(0, createFullMenuBar());
}
//-----------------------------------------------------------------------------
void StackedMenuBar::deleteMenuBar(int index)
{
QWidget* menuBar = widget(index);
removeWidget(menuBar);
delete menuBar;
}
//=============================================================================
// DvTopBar
//-----------------------------------------------------------------------------
@ -1119,12 +1294,16 @@ TopBar::TopBar(QWidget *parent)
setObjectName("TopBar");
m_containerFrame = new QFrame(this);
m_roomTabBar = new QTabBar(this);
m_roomTabBar = new RoomTabWidget(this);
m_stackedMenuBar = new StackedMenuBar(this);
m_lockRoomCB = new QCheckBox(this);
m_containerFrame->setObjectName("TopBarTabContainer");
m_roomTabBar->setObjectName("TopBarTab");
m_roomTabBar->setDrawBase(false);
m_lockRoomCB->setObjectName("EditToolLockButton");
m_lockRoomCB->setToolTip(tr("Lock Rooms Tab"));
m_lockRoomCB->setChecked(m_roomTabBar->isLocked());
QHBoxLayout *mainLayout = new QHBoxLayout();
mainLayout->setSpacing(0);
@ -1141,10 +1320,19 @@ TopBar::TopBar(QWidget *parent)
mainLayout->addLayout(menuLayout);
mainLayout->addStretch(1);
mainLayout->addWidget(m_roomTabBar, 0);
mainLayout->addSpacing(2);
mainLayout->addWidget(m_lockRoomCB, 0);
}
m_containerFrame->setLayout(mainLayout);
addWidget(m_containerFrame);
connect(m_roomTabBar, SIGNAL(currentChanged(int)),
bool ret = true;
ret = ret && connect(m_roomTabBar, SIGNAL(currentChanged(int)),
m_stackedMenuBar, SLOT(setCurrentIndex(int)));
ret = ret && connect(m_roomTabBar, SIGNAL(indexSwapped(int, int)), m_stackedMenuBar, SLOT(onIndexSwapped(int, int)));
ret = ret && connect(m_roomTabBar, SIGNAL(insertNewTabRoom()), m_stackedMenuBar, SLOT(insertNewMenuBar()));
ret = ret && connect(m_roomTabBar, SIGNAL(deleteTabRoom(int)), m_stackedMenuBar, SLOT(deleteMenuBar(int)));
ret = ret && connect(m_lockRoomCB, SIGNAL(toggled(bool)), m_roomTabBar, SLOT(setIsLocked(bool)));
assert(ret);
}

View file

@ -23,36 +23,40 @@ class TFilePath;
class QPainterEvent;
class QHBoxLayout;
class SubXsheetRoomTabContainer;
class QCheckBox;
//-----------------------------------------------------------------------------
/*
class RoomTabWidget : public QTabBar
{
Q_OBJECT
Q_OBJECT
int m_clickedTabIndex;
int m_clickedTabIndex;
int m_tabToDeleteIndex;
int m_renameTabIndex;
DVGui::LineEdit* m_renameTextField;
bool m_isLocked;
public:
RoomTabWidget(QWidget *parent);
~RoomTabWidget();
void drawContextMenu(QContextMenuEvent *event);
RoomTabWidget(QWidget *parent);
~RoomTabWidget();
bool isLocked(){ return m_isLocked; }
protected:
void swapIndex(int firstIndex, int secondIndex);
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void mouseDoubleClickEvent(QMouseEvent * event);
void contextMenuEvent(QContextMenuEvent *event);
protected slots:
void updateTabName();
void addNewTab();
void deleteTab();
void setIsLocked(bool lock);
signals:
void indexSwapped(int firstIndex, int secondIndex);
@ -62,7 +66,7 @@ signals:
};
//-----------------------------------------------------------------------------
/*
class SubSheetBar : public QFrame
{
Q_OBJECT
@ -137,13 +141,13 @@ class StackedMenuBar : public QStackedWidget
{
Q_OBJECT
void createCleanupMenuBar();
void createPltEditMenuBar();
void createInknPaintMenuBar();
void createXsheetMenuBar();
void createBatchesMenuBar();
void createBrowserMenuBar();
void createFullMenuBar();
QMenuBar* createCleanupMenuBar();
QMenuBar* createPltEditMenuBar();
QMenuBar* createInknPaintMenuBar();
QMenuBar* createXsheetMenuBar();
QMenuBar* createBatchesMenuBar();
QMenuBar* createBrowserMenuBar();
QMenuBar* createFullMenuBar();
public:
StackedMenuBar(QWidget *parent);
@ -153,6 +157,11 @@ public:
QMenu *addMenu(const QString &, QMenuBar *);
void addMenuItem(QMenu *, const char *);
protected slots:
void onIndexSwapped(int firstIndex, int secondIndex);
void insertNewMenuBar();
void deleteMenuBar(int index);
};
//-----------------------------------------------------------------------------
@ -162,8 +171,9 @@ class TopBar : public QToolBar
Q_OBJECT
QFrame *m_containerFrame;
QTabBar *m_roomTabBar;
RoomTabWidget *m_roomTabBar;
StackedMenuBar *m_stackedMenuBar;
QCheckBox* m_lockRoomCB;
public:
TopBar(QWidget *parent);