create custom menubar from xml file
This commit is contained in:
parent
b05ca51266
commit
7a9c88552b
3 changed files with 124 additions and 4 deletions
|
@ -518,7 +518,9 @@ void MainWindow::readSettings(const QString &argumentLayoutFileName)
|
||||||
m_stackedWidget->addWidget(room);
|
m_stackedWidget->addWidget(room);
|
||||||
roomTabWidget->addTab(room->getName());
|
roomTabWidget->addTab(room->getName());
|
||||||
|
|
||||||
stackedMenuBar->createMenuBarByName(room->getName());
|
/*- ここでMenuBarファイルをロードする -*/
|
||||||
|
std::string mbFileName = roomPath.getName() + "_menubar.xml";
|
||||||
|
stackedMenuBar->loadAndAddMenubar(ToonzFolder::getModuleFile(mbFileName));
|
||||||
|
|
||||||
//room->setDockOptions(QMainWindow::DockOptions(
|
//room->setDockOptions(QMainWindow::DockOptions(
|
||||||
// (QMainWindow::AnimatedDocks | QMainWindow::AllowNestedDocks) & ~QMainWindow::AllowTabbedDocks));
|
// (QMainWindow::AnimatedDocks | QMainWindow::AllowNestedDocks) & ~QMainWindow::AllowTabbedDocks));
|
||||||
|
@ -529,6 +531,7 @@ void MainWindow::readSettings(const QString &argumentLayoutFileName)
|
||||||
//Read the flipbook history
|
//Read the flipbook history
|
||||||
FlipBookPool::instance()->load(ToonzFolder::getMyModuleDir() + TFilePath("fliphistory.ini"));
|
FlipBookPool::instance()->load(ToonzFolder::getMyModuleDir() + TFilePath("fliphistory.ini"));
|
||||||
|
|
||||||
|
/*- レイアウト設定ファイルが見つからなかった場合、初期Roomの生成 -*/
|
||||||
//Se leggendo i settings non ho inizializzato le stanze lo faccio ora.
|
//Se leggendo i settings non ho inizializzato le stanze lo faccio ora.
|
||||||
// Puo' accadere se si buttano i file di inizializzazione.
|
// Puo' accadere se si buttano i file di inizializzazione.
|
||||||
if (rooms.empty()) {
|
if (rooms.empty()) {
|
||||||
|
@ -567,11 +570,12 @@ void MainWindow::readSettings(const QString &argumentLayoutFileName)
|
||||||
m_stackedWidget->addWidget(browserRoom);
|
m_stackedWidget->addWidget(browserRoom);
|
||||||
rooms.push_back(browserRoom);
|
rooms.push_back(browserRoom);
|
||||||
stackedMenuBar->createMenuBarByName(browserRoom->getName());
|
stackedMenuBar->createMenuBarByName(browserRoom->getName());
|
||||||
|
|
||||||
makePrivate(rooms);
|
|
||||||
writeRoomList(rooms);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*- If the layout files were loaded from template, then save them as private ones -*/
|
||||||
|
makePrivate(rooms);
|
||||||
|
writeRoomList(rooms);
|
||||||
|
|
||||||
// Imposto la stanza corrente
|
// Imposto la stanza corrente
|
||||||
fp = ToonzFolder::getModuleFile(currentRoomFileName);
|
fp = ToonzFolder::getModuleFile(currentRoomFileName);
|
||||||
Tifstream is(fp);
|
Tifstream is(fp);
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include "toonzqt/tselectionhandle.h"
|
#include "toonzqt/tselectionhandle.h"
|
||||||
#include "toonzqt/dvdialog.h"
|
#include "toonzqt/dvdialog.h"
|
||||||
#include "toonzqt/menubarcommand.h"
|
#include "toonzqt/menubarcommand.h"
|
||||||
|
#include "toonzqt/gutil.h"
|
||||||
|
|
||||||
// TnzLib includes
|
// TnzLib includes
|
||||||
#include "toonz/toonzscene.h"
|
#include "toonz/toonzscene.h"
|
||||||
|
@ -38,6 +39,8 @@
|
||||||
#include <QShortcut>
|
#include <QShortcut>
|
||||||
#include <QDesktopServices>
|
#include <QDesktopServices>
|
||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
|
#include <QtDebug>
|
||||||
|
#include <QXmlStreamReader>
|
||||||
|
|
||||||
void UrlOpener::open()
|
void UrlOpener::open()
|
||||||
{
|
{
|
||||||
|
@ -236,6 +239,116 @@ void StackedMenuBar::createMenuBarByName(const QString &roomName)
|
||||||
addWidget(createFullMenuBar());
|
addWidget(createFullMenuBar());
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
//---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void StackedMenuBar::loadAndAddMenubar(const TFilePath & fp)
|
||||||
|
{
|
||||||
|
std::wcout << fp.getWideString() << std::endl;
|
||||||
|
|
||||||
|
QFile file(toQString(fp));
|
||||||
|
if (!file.open(QFile::ReadOnly | QFile::Text)){
|
||||||
|
qDebug() << "Cannot read file" << file.errorString();
|
||||||
|
addWidget(createFullMenuBar());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QXmlStreamReader reader(&file);
|
||||||
|
|
||||||
|
QMenuBar* menuBar = new QMenuBar(this);
|
||||||
|
if (reader.readNextStartElement())
|
||||||
|
{
|
||||||
|
if (reader.name() == "menubar")
|
||||||
|
{
|
||||||
|
while (reader.readNextStartElement())
|
||||||
|
{
|
||||||
|
if (reader.name() == "menu")
|
||||||
|
{
|
||||||
|
QString title = reader.attributes().value("title").toString();
|
||||||
|
/*- Menu title will be translated if the title is registered in translation file -*/
|
||||||
|
QMenu* menu = new QMenu(tr(title.toStdString().c_str()));
|
||||||
|
|
||||||
|
if (readMenuRecursive(reader, menu))
|
||||||
|
menuBar->addMenu(menu);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
reader.raiseError(tr("Failed to load menu %1").arg(title));
|
||||||
|
delete menu;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (reader.name() == "command")
|
||||||
|
{
|
||||||
|
QString cmdName = reader.readElementText();
|
||||||
|
|
||||||
|
QAction *action = CommandManager::instance()->getAction(cmdName.toStdString().c_str());
|
||||||
|
if (action)
|
||||||
|
menuBar->addAction(action);
|
||||||
|
else
|
||||||
|
reader.raiseError(tr("Failed to add command %1").arg(cmdName));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
reader.skipCurrentElement();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
reader.raiseError(QObject::tr("Incorrect file"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reader.hasError())
|
||||||
|
{
|
||||||
|
delete menuBar;
|
||||||
|
addWidget(createFullMenuBar());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
addWidget(menuBar);
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool StackedMenuBar::readMenuRecursive( QXmlStreamReader& reader, QMenu* menu)
|
||||||
|
{
|
||||||
|
while (reader.readNextStartElement())
|
||||||
|
{
|
||||||
|
if (reader.name() == "menu")
|
||||||
|
{
|
||||||
|
QString title = reader.attributes().value("title").toString();
|
||||||
|
QMenu* subMenu = new QMenu(tr(title.toStdString().c_str()));
|
||||||
|
|
||||||
|
if (readMenuRecursive(reader, subMenu))
|
||||||
|
menu->addMenu(subMenu);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
reader.raiseError(tr("Failed to load menu %1").arg(title));
|
||||||
|
delete subMenu;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (reader.name() == "command")
|
||||||
|
{
|
||||||
|
QString cmdName = reader.readElementText();
|
||||||
|
addMenuItem(menu, cmdName.toStdString().c_str());
|
||||||
|
}
|
||||||
|
else if (reader.name() == "command_debug")
|
||||||
|
{
|
||||||
|
#ifndef NDEBUG
|
||||||
|
QString cmdName = reader.readElementText();
|
||||||
|
addMenuItem(menu, cmdName.toStdString().c_str());
|
||||||
|
#else
|
||||||
|
reader.skipCurrentElement();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else if (reader.name() == "separator")
|
||||||
|
{
|
||||||
|
menu->addSeparator();
|
||||||
|
reader.skipCurrentElement();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
reader.skipCurrentElement();
|
||||||
|
}
|
||||||
|
|
||||||
|
return !reader.hasError();
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,7 @@ class QPainterEvent;
|
||||||
class QHBoxLayout;
|
class QHBoxLayout;
|
||||||
class SubXsheetRoomTabContainer;
|
class SubXsheetRoomTabContainer;
|
||||||
class QCheckBox;
|
class QCheckBox;
|
||||||
|
class QXmlStreamReader;
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -154,6 +155,8 @@ public:
|
||||||
~StackedMenuBar(){};
|
~StackedMenuBar(){};
|
||||||
|
|
||||||
void createMenuBarByName(const QString &roomName);
|
void createMenuBarByName(const QString &roomName);
|
||||||
|
void loadAndAddMenubar(const TFilePath & fp);
|
||||||
|
bool readMenuRecursive( QXmlStreamReader&, QMenu*);
|
||||||
|
|
||||||
QMenu *addMenu(const QString &, QMenuBar *);
|
QMenu *addMenu(const QString &, QMenuBar *);
|
||||||
void addMenuItem(QMenu *, const char *);
|
void addMenuItem(QMenu *, const char *);
|
||||||
|
|
Loading…
Reference in a new issue