1
2
3 #include "commandbar.h"
4
5 // Tnz6 includes
6 #include "tapp.h"
7 #include "menubarcommandids.h"
8 #include "tsystem.h"
9 #include "commandbarpopup.h"
10
11 // TnzQt includes
12 #include "toonzqt/menubarcommand.h"
13 #include "toonzqt/gutil.h"
14
15 // TnzLib includes
16 #include "toonz/tscenehandle.h"
17 #include "toonz/toonzscene.h"
18 #include "toonz/childstack.h"
19 #include "toonz/toonzfolders.h"
20 // Qt includes
21 #include <QWidgetAction>
22 #include <QXmlStreamReader>
23 #include <QtDebug>
24 #include <QMenuBar>
25 #include <QContextMenuEvent>
26
27 //=============================================================================
28 // Toolbar
29 //-----------------------------------------------------------------------------
30
31 #if QT_VERSION >= 0x050500
CommandBar(QWidget * parent,Qt::WindowFlags flags,bool isCollapsible,bool isXsheetToolbar)32 CommandBar::CommandBar(QWidget *parent, Qt::WindowFlags flags,
33 bool isCollapsible, bool isXsheetToolbar)
34 #else
35 CommandBar::CommandBar(QWidget *parent, Qt::WFlags flags)
36 #endif
37 : QToolBar(parent), m_isCollapsible(isCollapsible) {
38 setObjectName("cornerWidget");
39 setObjectName("CommandBar");
40 fillToolbar(this, isXsheetToolbar);
41 setIconSize(QSize(20, 20));
42 }
43
44 //-----------------------------------------------------------------------------
45
fillToolbar(CommandBar * toolbar,bool isXsheetToolbar)46 void CommandBar::fillToolbar(CommandBar *toolbar, bool isXsheetToolbar) {
47 toolbar->clear();
48 TFilePath personalPath;
49 if (isXsheetToolbar) {
50 personalPath =
51 ToonzFolder::getMyModuleDir() + TFilePath("xsheettoolbar.xml");
52 } else {
53 personalPath = ToonzFolder::getMyModuleDir() + TFilePath("commandbar.xml");
54 }
55 if (!TSystem::doesExistFileOrLevel(personalPath)) {
56 if (isXsheetToolbar) {
57 personalPath =
58 ToonzFolder::getTemplateModuleDir() + TFilePath("xsheettoolbar.xml");
59 } else {
60 personalPath =
61 ToonzFolder::getTemplateModuleDir() + TFilePath("commandbar.xml");
62 }
63 }
64 QFile file(toQString(personalPath));
65 if (!file.open(QFile::ReadOnly | QFile::Text)) {
66 qDebug() << "Cannot read file" << file.errorString();
67 buildDefaultToolbar(toolbar);
68 return;
69 }
70
71 QXmlStreamReader reader(&file);
72
73 if (reader.readNextStartElement()) {
74 if (reader.name() == "commandbar") {
75 while (reader.readNextStartElement()) {
76 if (reader.name() == "command") {
77 QString cmdName = reader.readElementText();
78 std::string cmdStr = cmdName.toStdString();
79 QAction *action =
80 CommandManager::instance()->getAction(cmdStr.c_str());
81 if (action) toolbar->addAction(action);
82 } else if (reader.name() == "separator") {
83 toolbar->addSeparator();
84 reader.skipCurrentElement();
85 } else
86 reader.skipCurrentElement();
87 }
88 } else
89 reader.raiseError(QObject::tr("Incorrect file"));
90 } else {
91 reader.raiseError(QObject::tr("Cannot Read XML File"));
92 }
93
94 if (reader.hasError()) {
95 buildDefaultToolbar(toolbar);
96 return;
97 }
98 }
99
100 //-----------------------------------------------------------------------------
101
buildDefaultToolbar(CommandBar * toolbar)102 void CommandBar::buildDefaultToolbar(CommandBar *toolbar) {
103 toolbar->clear();
104 TApp *app = TApp::instance();
105 {
106 QAction *newVectorLevel =
107 CommandManager::instance()->getAction("MI_NewVectorLevel");
108 toolbar->addAction(newVectorLevel);
109 QAction *newToonzRasterLevel =
110 CommandManager::instance()->getAction("MI_NewToonzRasterLevel");
111 toolbar->addAction(newToonzRasterLevel);
112 QAction *newRasterLevel =
113 CommandManager::instance()->getAction("MI_NewRasterLevel");
114 toolbar->addAction(newRasterLevel);
115 toolbar->addSeparator();
116 QAction *reframeOnes = CommandManager::instance()->getAction("MI_Reframe1");
117 toolbar->addAction(reframeOnes);
118 QAction *reframeTwos = CommandManager::instance()->getAction("MI_Reframe2");
119 toolbar->addAction(reframeTwos);
120 QAction *reframeThrees =
121 CommandManager::instance()->getAction("MI_Reframe3");
122 toolbar->addAction(reframeThrees);
123
124 toolbar->addSeparator();
125
126 QAction *repeat = CommandManager::instance()->getAction("MI_Dup");
127 toolbar->addAction(repeat);
128
129 toolbar->addSeparator();
130
131 QAction *collapse = CommandManager::instance()->getAction("MI_Collapse");
132 toolbar->addAction(collapse);
133 QAction *open = CommandManager::instance()->getAction("MI_OpenChild");
134 toolbar->addAction(open);
135 QAction *leave = CommandManager::instance()->getAction("MI_CloseChild");
136 toolbar->addAction(leave);
137 QAction *editInPlace =
138 CommandManager::instance()->getAction("MI_ToggleEditInPlace");
139 toolbar->addAction(editInPlace);
140 }
141 }
142
143 //-----------------------------------------------------------------------------
144
contextMenuEvent(QContextMenuEvent * event)145 void CommandBar::contextMenuEvent(QContextMenuEvent *event) {
146 QMenu *menu = new QMenu(this);
147 QAction *customizeCommandBar = menu->addAction(tr("Customize Command Bar"));
148 connect(customizeCommandBar, SIGNAL(triggered()),
149 SLOT(doCustomizeCommandBar()));
150 menu->exec(event->globalPos());
151 }
152
153 //-----------------------------------------------------------------------------
154
doCustomizeCommandBar()155 void CommandBar::doCustomizeCommandBar() {
156 CommandBarPopup *cbPopup = new CommandBarPopup();
157
158 if (cbPopup->exec()) {
159 fillToolbar(this);
160 }
161 delete cbPopup;
162 }