1
/***************************************************************************
3
* This program is free software; you can redistribute it and/or modify *
4
* it under the terms of the GNU General Public License as published by *
5
* the Free Software Foundation; either version 2 of the License, or *
6
* (at your option) any later version. *
8
***************************************************************************/
10
#include <QtGui/QContextMenuEvent>
11
#include <QtGui/QMenu>
13
#include "config_file.h"
18
#include "kadu_main_window.h"
20
KaduMainWindow::KaduMainWindow(QWidget *parent)
25
KaduMainWindow::~KaduMainWindow()
29
void KaduMainWindow::loadToolBarsFromConfig(const QString &prefix)
35
realPrefix = prefix + "_";
37
loadToolBarsFromConfig(realPrefix + "topDockArea", Qt::TopToolBarArea);
38
loadToolBarsFromConfig(realPrefix + "leftDockArea", Qt::LeftToolBarArea);
39
loadToolBarsFromConfig(realPrefix + "bottomDockArea", Qt::BottomToolBarArea);
40
loadToolBarsFromConfig(realPrefix + "rightDockArea", Qt::RightToolBarArea);
43
bool horizontalToolbarComparator(ToolBar *t1, ToolBar *t2)
45
if (t1->yOffset() < t2->yOffset())
47
if (t1->yOffset() > t2->yOffset())
49
return t1->xOffset() < t2->xOffset();
52
bool verticalToolbarComparator(ToolBar *t1, ToolBar *t2)
54
if (t1->xOffset() < t2->xOffset())
56
if (t1->xOffset() > t2->xOffset())
58
return t1->yOffset() < t2->yOffset();
61
bool KaduMainWindow::loadToolBarsFromConfig(const QString &configName, Qt::ToolBarArea area, bool remove)
65
QDomElement toolbarsConfig = xml_config_file->findElement(xml_config_file->rootElement(), "Toolbars");
67
if (toolbarsConfig.isNull())
70
QDomElement dockareaConfig = xml_config_file->findElementByProperty(toolbarsConfig, "DockArea", "name", configName);
71
if (dockareaConfig.isNull())
74
QList<ToolBar *> toolBars;
75
for (QDomNode n = dockareaConfig.firstChild(); !n.isNull(); n = n.nextSibling())
77
const QDomElement &toolbarConfig = n.toElement();
78
if (toolbarConfig.isNull())
80
if (toolbarConfig.tagName() != "ToolBar")
83
ToolBar* toolbar = new ToolBar(this);
84
toolbar->loadFromConfig(toolbarConfig);
87
toolBars.append(toolbar);
91
if (area == Qt::LeftToolBarArea || area == Qt::RightToolBarArea)
93
qSort(toolBars.begin(), toolBars.end(), verticalToolbarComparator);
94
foreach(ToolBar *toolBar, toolBars)
96
if (toolBar->xOffset() != currentLine)
97
addToolBarBreak(area);
99
addToolBar(area, toolBar);
100
currentLine = toolBar->xOffset();
105
qSort(toolBars.begin(), toolBars.end(), horizontalToolbarComparator);
106
foreach(ToolBar *toolBar, toolBars)
108
if (toolBar->yOffset() != currentLine)
109
addToolBarBreak(area);
111
addToolBar(area, toolBar);
112
currentLine = toolBar->yOffset();
117
toolbarsConfig.removeChild(dockareaConfig);
124
QDomElement KaduMainWindow::getToolbarsConfigElement()
126
QDomElement toolbarsConfig = xml_config_file->findElement(xml_config_file->rootElement(), "Toolbars");
127
if (toolbarsConfig.isNull())
128
toolbarsConfig = xml_config_file->createElement(xml_config_file->rootElement(), "Toolbars");
130
return toolbarsConfig;
133
QDomElement KaduMainWindow::getDockAreaConfigElement(QDomElement toolbarsConfig, const QString &name)
135
QDomElement dockAreaConfig = xml_config_file->findElementByProperty(toolbarsConfig, "DockArea", "name", name);
136
if (dockAreaConfig.isNull())
138
dockAreaConfig = xml_config_file->createElement(toolbarsConfig, "DockArea");
139
dockAreaConfig.setAttribute("name", name);
142
return dockAreaConfig;
145
void KaduMainWindow::addToolButton(QDomElement toolbarConfig, const QString &actionName, bool showLabel)
147
QDomElement buttonConfig = xml_config_file->findElementByProperty(toolbarConfig, "ToolButton", "action_name", actionName);
148
//don't add element if exists
149
if (!buttonConfig.isNull())
151
buttonConfig = xml_config_file->createElement(toolbarConfig, "ToolButton");
152
buttonConfig.setAttribute("action_name", actionName);
153
buttonConfig.setAttribute("uses_text_label", showLabel);
156
QDomElement KaduMainWindow::findExistingToolbarOnArea(const QString &areaName)
158
QDomElement dockAreaConfig = xml_config_file->findElementByProperty(getToolbarsConfigElement(), "DockArea", "name", areaName);
159
QDomElement nullResult;
161
if (dockAreaConfig.isNull())
164
QDomElement toolbarElement = xml_config_file->findElement(dockAreaConfig, "ToolBar");
165
if (toolbarElement.isNull())
168
return toolbarElement;
171
QDomElement KaduMainWindow::findExistingToolbar(const QString &prefix)
174
if (prefix.isEmpty())
177
realPrefix = prefix + "_";
179
QDomElement toolbarElement = findExistingToolbarOnArea(realPrefix + "topDockArea");
180
if (!toolbarElement.isNull())
181
return toolbarElement;
183
toolbarElement = findExistingToolbarOnArea(realPrefix + "leftDockArea");
184
if (!toolbarElement.isNull())
185
return toolbarElement;
187
toolbarElement = findExistingToolbarOnArea(realPrefix + "rightDockArea");
188
if (!toolbarElement.isNull())
189
return toolbarElement;
191
toolbarElement = findExistingToolbarOnArea(realPrefix + "bottomDockArea");
192
if (!toolbarElement.isNull())
193
return toolbarElement;
195
QDomElement dockAreaConfig = getDockAreaConfigElement(getToolbarsConfigElement(), realPrefix + "topDockArea");
196
return xml_config_file->createElement(dockAreaConfig, "ToolBar");
199
void KaduMainWindow::writeToolBarsToConfig(const QString &prefix)
202
if (prefix.isEmpty())
205
realPrefix = prefix + "_";
207
QDomElement toolbarsConfig = getToolbarsConfigElement();
209
writeToolBarsToConfig(toolbarsConfig, realPrefix + "topDockArea", Qt::TopToolBarArea);
210
writeToolBarsToConfig(toolbarsConfig, realPrefix + "leftDockArea", Qt::LeftToolBarArea);
211
writeToolBarsToConfig(toolbarsConfig, realPrefix + "bottomDockArea", Qt::BottomToolBarArea);
212
writeToolBarsToConfig(toolbarsConfig, realPrefix + "rightDockArea", Qt::RightToolBarArea);
215
void KaduMainWindow::writeToolBarsToConfig(QDomElement toolbarsConfig, const QString &configName, Qt::ToolBarArea area)
217
QDomElement dockAreaConfig = getDockAreaConfigElement(toolbarsConfig, configName);
218
xml_config_file->removeChildren(dockAreaConfig);
221
foreach(QObject *child, children())
223
ToolBar *toolBar = dynamic_cast<ToolBar *>(child);
227
if (toolBarArea(toolBar) != area)
230
toolBar->writeToConfig(dockAreaConfig);
234
void KaduMainWindow::refreshToolBars(const QString &prefix)
236
foreach (const QObject *object, children())
238
const QToolBar *toolBar = dynamic_cast<const QToolBar *>(object);
240
removeToolBar(const_cast<QToolBar *>(toolBar));
242
loadToolBarsFromConfig(prefix);
245
void KaduMainWindow::contextMenuEvent(QContextMenuEvent *event)
247
QMenu *menu = new QMenu(this);
248
menu->addAction(tr("Create new toolbar"), this, SLOT(addTopToolbar()));
250
menu->exec(event->globalPos());
253
void KaduMainWindow::addTopToolbar()
255
addToolBar(Qt::TopToolBarArea, new ToolBar(this));
258
void KaduMainWindow::addBottomToolbar()
260
addToolBar(Qt::BottomToolBarArea, new ToolBar(this));
263
void KaduMainWindow::addLeftToolbar()
265
addToolBar(Qt::LeftToolBarArea, new ToolBar(this));
268
void KaduMainWindow::addRightToolbar()
270
addToolBar(Qt::RightToolBarArea, new ToolBar(this));
273
void KaduMainWindow::actionAdded(KaduAction *action)
276
connect(userBox(), SIGNAL(userListChanged()), action, SLOT(checkState()));