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

View file

@ -37,6 +37,7 @@
#include <QMenuBar> #include <QMenuBar>
#include <QShortcut> #include <QShortcut>
#include <QDesktopServices> #include <QDesktopServices>
#include <QCheckBox>
void UrlOpener::open() void UrlOpener::open()
{ {
@ -46,6 +47,160 @@ void UrlOpener::open()
UrlOpener dvHome(QUrl("http://www.toonz.com/")); UrlOpener dvHome(QUrl("http://www.toonz.com/"));
UrlOpener manual(QUrl("file:///C:/gmt/butta/M&C in EU.pdf")); 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 // StackedMenuBar
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -63,31 +218,30 @@ void StackedMenuBar::createMenuBarByName(const QString &roomName)
std::cout << "create " << roomName.toStdString() << std::endl; std::cout << "create " << roomName.toStdString() << std::endl;
#if defined(_WIN32) || defined(_CYGWIN_) #if defined(_WIN32) || defined(_CYGWIN_)
if (roomName == "Cleanup") if (roomName == "Cleanup")
createCleanupMenuBar(); addWidget(createCleanupMenuBar());
else if (roomName == "PltEdit") else if (roomName == "PltEdit")
createPltEditMenuBar(); addWidget(createPltEditMenuBar());
else if (roomName == "InknPaint") else if (roomName == "InknPaint")
createInknPaintMenuBar(); addWidget(createInknPaintMenuBar());
else if (roomName == "Xsheet" || roomName == "Schematic" || roomName == "QAR" || roomName == "Flip") else if (roomName == "Xsheet" || roomName == "Schematic" || roomName == "QAR" || roomName == "Flip")
createXsheetMenuBar(); addWidget(createXsheetMenuBar());
else if (roomName == "Batches") else if (roomName == "Batches")
createBatchesMenuBar(); addWidget(createBatchesMenuBar());
else if (roomName == "Browser") else if (roomName == "Browser")
createBrowserMenuBar(); addWidget(createBrowserMenuBar());
else /*-- どれにもあてはまらない場合は全てのコマンドの入ったメニューバーを作る --*/ else /*-- どれにもあてはまらない場合は全てのコマンドの入ったメニューバーを作る --*/
createFullMenuBar(); addWidget(createFullMenuBar());
#else #else
/* OSX では stacked menu が動いていないのでとりあえず full のみ作成する */ /* OSX では stacked menu が動いていないのでとりあえず full のみ作成する */
createFullMenuBar(); addWidget(createFullMenuBar());
#endif #endif
} }
//--------------------------------------------------------------------------------- //---------------------------------------------------------------------------------
void StackedMenuBar::createCleanupMenuBar() QMenuBar* StackedMenuBar::createCleanupMenuBar()
{ {
QMenuBar *cleanupMenuBar; QMenuBar *cleanupMenuBar = new QMenuBar(this);
cleanupMenuBar = new QMenuBar(this);
//----Files Menu //----Files Menu
QMenu *filesMenu = addMenu(tr("Files"), cleanupMenuBar); QMenu *filesMenu = addMenu(tr("Files"), cleanupMenuBar);
addMenuItem(filesMenu, MI_LoadLevel); addMenuItem(filesMenu, MI_LoadLevel);
@ -205,15 +359,14 @@ void StackedMenuBar::createCleanupMenuBar()
QMenu *helpMenu = addMenu(tr("Help"), cleanupMenuBar); QMenu *helpMenu = addMenu(tr("Help"), cleanupMenuBar);
addMenuItem(helpMenu, MI_About); addMenuItem(helpMenu, MI_About);
addWidget(cleanupMenuBar); return cleanupMenuBar;
} }
//--------------------------------------------------------------------------------- //---------------------------------------------------------------------------------
void StackedMenuBar::createPltEditMenuBar() QMenuBar* StackedMenuBar::createPltEditMenuBar()
{ {
QMenuBar *pltEditMenuBar; QMenuBar *pltEditMenuBar = new QMenuBar(this);
pltEditMenuBar = new QMenuBar(this);
//---Files Menu //---Files Menu
QMenu *filesMenu = addMenu(tr("Files"), pltEditMenuBar); QMenu *filesMenu = addMenu(tr("Files"), pltEditMenuBar);
@ -369,15 +522,14 @@ void StackedMenuBar::createPltEditMenuBar()
QMenu *helpMenu = addMenu(tr("Help"), pltEditMenuBar); QMenu *helpMenu = addMenu(tr("Help"), pltEditMenuBar);
addMenuItem(helpMenu, MI_About); addMenuItem(helpMenu, MI_About);
addWidget(pltEditMenuBar); return pltEditMenuBar;
} }
//--------------------------------------------------------------------------------- //---------------------------------------------------------------------------------
void StackedMenuBar::createInknPaintMenuBar() QMenuBar* StackedMenuBar::createInknPaintMenuBar()
{ {
QMenuBar *inknPaintMenuBar; QMenuBar *inknPaintMenuBar = new QMenuBar(this);
inknPaintMenuBar = new QMenuBar(this);
//---Files Menu //---Files Menu
QMenu *filesMenu = addMenu(tr("Files"), inknPaintMenuBar); QMenu *filesMenu = addMenu(tr("Files"), inknPaintMenuBar);
@ -543,15 +695,14 @@ void StackedMenuBar::createInknPaintMenuBar()
QMenu *helpMenu = addMenu(tr("Help"), inknPaintMenuBar); QMenu *helpMenu = addMenu(tr("Help"), inknPaintMenuBar);
addMenuItem(helpMenu, MI_About); addMenuItem(helpMenu, MI_About);
addWidget(inknPaintMenuBar); return inknPaintMenuBar;
} }
//--------------------------------------------------------------------------------- //---------------------------------------------------------------------------------
void StackedMenuBar::createXsheetMenuBar() QMenuBar* StackedMenuBar::createXsheetMenuBar()
{ {
QMenuBar *xsheetMenuBar; QMenuBar *xsheetMenuBar = new QMenuBar(this);
xsheetMenuBar = new QMenuBar(this);
//----Xsheet Menu //----Xsheet Menu
QMenu *xsheetMenu = addMenu(tr("Xsheet"), xsheetMenuBar); QMenu *xsheetMenu = addMenu(tr("Xsheet"), xsheetMenuBar);
addMenuItem(xsheetMenu, MI_LoadScene); addMenuItem(xsheetMenu, MI_LoadScene);
@ -722,15 +873,14 @@ void StackedMenuBar::createXsheetMenuBar()
QMenu *helpMenu = addMenu(tr("Help"), xsheetMenuBar); QMenu *helpMenu = addMenu(tr("Help"), xsheetMenuBar);
addMenuItem(helpMenu, MI_About); addMenuItem(helpMenu, MI_About);
addWidget(xsheetMenuBar); return xsheetMenuBar;
} }
//--------------------------------------------------------------------------------- //---------------------------------------------------------------------------------
void StackedMenuBar::createBatchesMenuBar() QMenuBar* StackedMenuBar::createBatchesMenuBar()
{ {
QMenuBar *batchesMenuBar; QMenuBar *batchesMenuBar = new QMenuBar(this);
batchesMenuBar = new QMenuBar(this);
//---Files Menu //---Files Menu
QMenu *filesMenu = addMenu(tr("Files"), batchesMenuBar); QMenu *filesMenu = addMenu(tr("Files"), batchesMenuBar);
@ -759,15 +909,14 @@ void StackedMenuBar::createBatchesMenuBar()
QMenu *helpMenu = addMenu(tr("Help"), batchesMenuBar); QMenu *helpMenu = addMenu(tr("Help"), batchesMenuBar);
addMenuItem(helpMenu, MI_About); addMenuItem(helpMenu, MI_About);
addWidget(batchesMenuBar); return batchesMenuBar;
} }
//--------------------------------------------------------------------------------- //---------------------------------------------------------------------------------
void StackedMenuBar::createBrowserMenuBar() QMenuBar* StackedMenuBar::createBrowserMenuBar()
{ {
QMenuBar *browserMenuBar; QMenuBar * browserMenuBar = new QMenuBar(this);
browserMenuBar = new QMenuBar(this);
//---Files Menu //---Files Menu
QMenu *filesMenu = addMenu(tr("Files"), browserMenuBar); QMenu *filesMenu = addMenu(tr("Files"), browserMenuBar);
@ -798,12 +947,12 @@ void StackedMenuBar::createBrowserMenuBar()
QMenu *helpMenu = addMenu(tr("Help"), browserMenuBar); QMenu *helpMenu = addMenu(tr("Help"), browserMenuBar);
addMenuItem(helpMenu, MI_About); addMenuItem(helpMenu, MI_About);
addWidget(browserMenuBar); return browserMenuBar;
} }
//--------------------------------------------------------------------------------- //---------------------------------------------------------------------------------
void StackedMenuBar::createFullMenuBar() QMenuBar* StackedMenuBar::createFullMenuBar()
{ {
QMenuBar *fullMenuBar = new QMenuBar(this); QMenuBar *fullMenuBar = new QMenuBar(this);
//Menu' FILE //Menu' FILE
@ -1083,7 +1232,7 @@ void StackedMenuBar::createFullMenuBar()
QMenu *helpMenu = addMenu(tr("Help"), fullMenuBar); QMenu *helpMenu = addMenu(tr("Help"), fullMenuBar);
addMenuItem(helpMenu, MI_About); addMenuItem(helpMenu, MI_About);
addWidget(fullMenuBar); return fullMenuBar;
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -1106,6 +1255,32 @@ void StackedMenuBar::addMenuItem(QMenu *menu, const char *cmdId)
menu->addAction(action); 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 // DvTopBar
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -1119,12 +1294,16 @@ TopBar::TopBar(QWidget *parent)
setObjectName("TopBar"); setObjectName("TopBar");
m_containerFrame = new QFrame(this); m_containerFrame = new QFrame(this);
m_roomTabBar = new QTabBar(this); m_roomTabBar = new RoomTabWidget(this);
m_stackedMenuBar = new StackedMenuBar(this); m_stackedMenuBar = new StackedMenuBar(this);
m_lockRoomCB = new QCheckBox(this);
m_containerFrame->setObjectName("TopBarTabContainer"); m_containerFrame->setObjectName("TopBarTabContainer");
m_roomTabBar->setObjectName("TopBarTab"); m_roomTabBar->setObjectName("TopBarTab");
m_roomTabBar->setDrawBase(false); 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(); QHBoxLayout *mainLayout = new QHBoxLayout();
mainLayout->setSpacing(0); mainLayout->setSpacing(0);
@ -1141,10 +1320,19 @@ TopBar::TopBar(QWidget *parent)
mainLayout->addLayout(menuLayout); mainLayout->addLayout(menuLayout);
mainLayout->addStretch(1); mainLayout->addStretch(1);
mainLayout->addWidget(m_roomTabBar, 0); mainLayout->addWidget(m_roomTabBar, 0);
mainLayout->addSpacing(2);
mainLayout->addWidget(m_lockRoomCB, 0);
} }
m_containerFrame->setLayout(mainLayout); m_containerFrame->setLayout(mainLayout);
addWidget(m_containerFrame); 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))); 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 QPainterEvent;
class QHBoxLayout; class QHBoxLayout;
class SubXsheetRoomTabContainer; class SubXsheetRoomTabContainer;
class QCheckBox;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
/*
class RoomTabWidget : public QTabBar class RoomTabWidget : public QTabBar
{ {
Q_OBJECT Q_OBJECT
int m_clickedTabIndex; int m_clickedTabIndex;
int m_tabToDeleteIndex; int m_tabToDeleteIndex;
int m_renameTabIndex; int m_renameTabIndex;
DVGui::LineEdit* m_renameTextField; DVGui::LineEdit* m_renameTextField;
bool m_isLocked;
public: public:
RoomTabWidget(QWidget *parent); RoomTabWidget(QWidget *parent);
~RoomTabWidget(); ~RoomTabWidget();
void drawContextMenu(QContextMenuEvent *event); bool isLocked(){ return m_isLocked; }
protected: protected:
void swapIndex(int firstIndex, int secondIndex); void swapIndex(int firstIndex, int secondIndex);
void mousePressEvent(QMouseEvent *event); void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event);
void mouseDoubleClickEvent(QMouseEvent * event); void mouseDoubleClickEvent(QMouseEvent * event);
void contextMenuEvent(QContextMenuEvent *event);
protected slots: protected slots:
void updateTabName(); void updateTabName();
void addNewTab(); void addNewTab();
void deleteTab(); void deleteTab();
void setIsLocked(bool lock);
signals: signals:
void indexSwapped(int firstIndex, int secondIndex); void indexSwapped(int firstIndex, int secondIndex);
@ -62,7 +66,7 @@ signals:
}; };
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
/*
class SubSheetBar : public QFrame class SubSheetBar : public QFrame
{ {
Q_OBJECT Q_OBJECT
@ -137,13 +141,13 @@ class StackedMenuBar : public QStackedWidget
{ {
Q_OBJECT Q_OBJECT
void createCleanupMenuBar(); QMenuBar* createCleanupMenuBar();
void createPltEditMenuBar(); QMenuBar* createPltEditMenuBar();
void createInknPaintMenuBar(); QMenuBar* createInknPaintMenuBar();
void createXsheetMenuBar(); QMenuBar* createXsheetMenuBar();
void createBatchesMenuBar(); QMenuBar* createBatchesMenuBar();
void createBrowserMenuBar(); QMenuBar* createBrowserMenuBar();
void createFullMenuBar(); QMenuBar* createFullMenuBar();
public: public:
StackedMenuBar(QWidget *parent); StackedMenuBar(QWidget *parent);
@ -153,6 +157,11 @@ public:
QMenu *addMenu(const QString &, QMenuBar *); QMenu *addMenu(const QString &, QMenuBar *);
void addMenuItem(QMenu *, const char *); 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 Q_OBJECT
QFrame *m_containerFrame; QFrame *m_containerFrame;
QTabBar *m_roomTabBar; RoomTabWidget *m_roomTabBar;
StackedMenuBar *m_stackedMenuBar; StackedMenuBar *m_stackedMenuBar;
QCheckBox* m_lockRoomCB;
public: public:
TopBar(QWidget *parent); TopBar(QWidget *parent);