Replace layouts toolbar with custom list on the right side of the menu bar

parent 813ab1b1
......@@ -3,11 +3,11 @@
2=Editing
3=Audio
4=Effects
5=Color Correction
5=Color
[Layouts]
Logging=AAAA/wAAAAD9AAAAAQAAAAIAAAUAAAABVfwBAAAADfsAAAAYAG4AbwB0AGUAcwBfAHcAaQBkAGcAZQB0AAAAAAD/////AAAAZwEAAAP7AAAADgBsAGkAYgByAGEAcgB5AAAAAAD/////AAAAZwEAAAP7AAAAFABzAGMAcgBlAGUAbgBnAHIAYQBiAAAAAAD/////AAAAYAEAAAP7AAAAGgBhAHUAZABpAG8AcwBwAGUAYwB0AHIAdQBtAAAAAAD/////AAAAZgEAAAP8AAAAAAAAAUEAAACLAP////oAAAAAAQAAAAP7AAAAFgBwAHIAbwBqAGUAYwB0AF8AYgBpAG4BAAAAAP////8AAABbAQAAA/sAAAAYAGUAZgBmAGUAYwB0AF8AcwB0AGEAYwBrAQAAAAD/////AAAAVwEAAAP7AAAAHgBjAGwAaQBwAF8AcAByAG8AcABlAHIAdABpAGUAcwAAAAAA/////wAAAGABAAAD/AAAAUIAAADQAAAAiwD////6AAAAAQEAAAAC+wAAAB4AdAByAGEAbgBzAGkAdABpAG8AbgBfAGwAaQBzAHQBAAAAAP////8AAAAEAQAAA/sAAAAWAGUAZgBmAGUAYwB0AF8AbABpAHMAdAEAAAAA/////wAAAAQBAAAD/AAAAhMAAAGJAAABRAD////6AAAAAQEAAAAC+wAAABgAYwBsAGkAcABfAG0AbwBuAGkAdABvAHIBAAAAAP////8AAAFEAQAAA/sAAAAeAHAAcgBvAGoAZQBjAHQAXwBtAG8AbgBpAHQAbwByAQAAAAD/////AAABRAEAAAP7AAAAGAB1AG4AZABvAF8AaABpAHMAdABvAHIAeQAAAAAA/////wAAAGABAAAD+wAAAAoAbQBpAHgAZQByAQAAA50AAAFjAAABJAEAAAP7AAAAFgB2AGUAYwB0AG8AcgBzAGMAbwBwAGUAAAAAAP////8AAAEyAQAAA/sAAAAQAHcAYQB2AGUAZgBvAHIAbQAAAAAA/////wAAAKgBAAAD+wAAABQAcgBnAGIAXwBwAGEAcgBhAGQAZQAAAAAA/////wAAAKQBAAAD+wAAABIAaABpAHMAdABvAGcAcgBhAG0AAAAAAP////8AAAFKAQAAAwAABQAAAAFFAAAABAAAAAQAAAAIAAAACPwAAAABAAAAAgAAAAIAAAAWAG0AYQBpAG4AVABvAG8AbABCAGEAcgEAAAAA/////wAAAAAAAAAAAAAAGABlAHgAdAByAGEAVABvAG8AbABCAGEAcgEAAAIp/////wAAAAAAAAAA
Editing=AAAA/wAAAAD9AAAAAgAAAAAAAAEDAAABRfwCAAAAAfsAAAAWAHAAcgBvAGoAZQBjAHQAXwBiAGkAbgEAAAGaAAABRQAAAJsBAAADAAAAAgAABQAAAAFV/AEAAAAN+wAAABgAbgBvAHQAZQBzAF8AdwBpAGQAZwBlAHQAAAAAAP////8AAABnAQAAA/sAAAAOAGwAaQBiAHIAYQByAHkAAAAAAP////8AAABnAQAAA/sAAAAUAHMAYwByAGUAZQBuAGcAcgBhAGIAAAAAAP////8AAABgAQAAA/sAAAAaAGEAdQBkAGkAbwBzAHAAZQBjAHQAcgB1AG0AAAAAAP////8AAABmAQAAA/wAAAAAAAABQQAAAGAA////+gAAAAABAAAAAvsAAAAYAGUAZgBmAGUAYwB0AF8AcwB0AGEAYwBrAQAAAAD/////AAAAYAEAAAP7AAAAHgBjAGwAaQBwAF8AcAByAG8AcABlAHIAdABpAGUAcwAAAAAA/////wAAAGABAAAD/AAAAUIAAADQAAAAiwD////6AAAAAQEAAAAC+wAAAB4AdAByAGEAbgBzAGkAdABpAG8AbgBfAGwAaQBzAHQBAAAAAP////8AAAAEAQAAA/sAAAAWAGUAZgBmAGUAYwB0AF8AbABpAHMAdAEAAAAA/////wAAAAQBAAAD/AAAAhMAAAGJAAABRAD////6AAAAAQEAAAAC+wAAABgAYwBsAGkAcABfAG0AbwBuAGkAdABvAHIBAAAAAP////8AAAFEAQAAA/sAAAAeAHAAcgBvAGoAZQBjAHQAXwBtAG8AbgBpAHQAbwByAQAAAAD/////AAABRAEAAAP7AAAAGAB1AG4AZABvAF8AaABpAHMAdABvAHIAeQAAAAAA/////wAAAGABAAAD+wAAAAoAbQBpAHgAZQByAQAAA50AAAFjAAABJAEAAAP7AAAAFgB2AGUAYwB0AG8AcgBzAGMAbwBwAGUAAAAAAP////8AAAEyAQAAA/sAAAAQAHcAYQB2AGUAZgBvAHIAbQAAAAAA/////wAAAKgBAAAD+wAAABQAcgBnAGIAXwBwAGEAcgBhAGQAZQAAAAAA/////wAAAKQBAAAD+wAAABIAaABpAHMAdABvAGcAcgBhAG0AAAAAAP////8AAAFKAQAAAwAAA/wAAAFFAAAABAAAAAQAAAAIAAAACPwAAAABAAAAAgAAAAIAAAAWAG0AYQBpAG4AVABvAG8AbABCAGEAcgEAAAAA/////wAAAAAAAAAAAAAAGABlAHgAdAByAGEAVABvAG8AbABCAGEAcgEAAAIp/////wAAAAAAAAAA
Audio=AAAA/wAAAAD9AAAAAgAAAAAAAAEDAAABRfwCAAAAAfsAAAAWAHAAcgBvAGoAZQBjAHQAXwBiAGkAbgEAAAGaAAABRQAAAJsBAAADAAAAAgAABQAAAAFV/AEAAAAN+wAAABgAbgBvAHQAZQBzAF8AdwBpAGQAZwBlAHQAAAAAAP////8AAABnAQAAA/sAAAAOAGwAaQBiAHIAYQByAHkAAAAAAP////8AAABnAQAAA/sAAAAUAHMAYwByAGUAZQBuAGcAcgBhAGIAAAAAAP////8AAABgAQAAA/sAAAAaAGEAdQBkAGkAbwBzAHAAZQBjAHQAcgB1AG0AAAAAAP////8AAABmAQAAA/wAAAAAAAABQQAAAGAA////+gAAAAABAAAAAvsAAAAYAGUAZgBmAGUAYwB0AF8AcwB0AGEAYwBrAQAAAAD/////AAAAYAEAAAP7AAAAHgBjAGwAaQBwAF8AcAByAG8AcABlAHIAdABpAGUAcwAAAAAA/////wAAAGABAAAD/AAAAUIAAADQAAAAiwD////6AAAAAQEAAAAC+wAAAB4AdAByAGEAbgBzAGkAdABpAG8AbgBfAGwAaQBzAHQBAAAAAP////8AAAAEAQAAA/sAAAAWAGUAZgBmAGUAYwB0AF8AbABpAHMAdAEAAAAA/////wAAAAQBAAAD/AAAAhMAAAGJAAABRAD////6AAAAAQEAAAAC+wAAABgAYwBsAGkAcABfAG0AbwBuAGkAdABvAHIBAAAAAP////8AAAFEAQAAA/sAAAAeAHAAcgBvAGoAZQBjAHQAXwBtAG8AbgBpAHQAbwByAQAAAAD/////AAABRAEAAAP7AAAAGAB1AG4AZABvAF8AaABpAHMAdABvAHIAeQAAAAAA/////wAAAGABAAAD+wAAAAoAbQBpAHgAZQByAQAAA50AAAFjAAABJAEAAAP7AAAAFgB2AGUAYwB0AG8AcgBzAGMAbwBwAGUAAAAAAP////8AAAEyAQAAA/sAAAAQAHcAYQB2AGUAZgBvAHIAbQAAAAAA/////wAAAKgBAAAD+wAAABQAcgBnAGIAXwBwAGEAcgBhAGQAZQAAAAAA/////wAAAKQBAAAD+wAAABIAaABpAHMAdABvAGcAcgBhAG0AAAAAAP////8AAAFKAQAAAwAAA/wAAAFFAAAABAAAAAQAAAAIAAAACPwAAAABAAAAAgAAAAIAAAAWAG0AYQBpAG4AVABvAG8AbABCAGEAcgEAAAAA/////wAAAAAAAAAAAAAAGABlAHgAdAByAGEAVABvAG8AbABCAGEAcgEAAAIp/////wAAAAAAAAAA
Effects=AAAA/wAAAAD9AAAAAgAAAAAAAAEDAAABRfwCAAAAAfsAAAAWAHAAcgBvAGoAZQBjAHQAXwBiAGkAbgEAAAGaAAABRQAAAJsBAAADAAAAAgAABQAAAAFV/AEAAAAN+wAAABgAbgBvAHQAZQBzAF8AdwBpAGQAZwBlAHQAAAAAAP////8AAABnAQAAA/sAAAAOAGwAaQBiAHIAYQByAHkAAAAAAP////8AAABnAQAAA/sAAAAUAHMAYwByAGUAZQBuAGcAcgBhAGIAAAAAAP////8AAABgAQAAA/sAAAAaAGEAdQBkAGkAbwBzAHAAZQBjAHQAcgB1AG0AAAAAAP////8AAABmAQAAA/wAAAAAAAABQQAAAGAA////+gAAAAABAAAAAvsAAAAYAGUAZgBmAGUAYwB0AF8AcwB0AGEAYwBrAQAAAAD/////AAAAYAEAAAP7AAAAHgBjAGwAaQBwAF8AcAByAG8AcABlAHIAdABpAGUAcwAAAAAA/////wAAAGABAAAD/AAAAUIAAADQAAAAiwD////6AAAAAQEAAAAC+wAAAB4AdAByAGEAbgBzAGkAdABpAG8AbgBfAGwAaQBzAHQBAAAAAP////8AAAAEAQAAA/sAAAAWAGUAZgBmAGUAYwB0AF8AbABpAHMAdAEAAAAA/////wAAAAQBAAAD/AAAAhMAAAGJAAABRAD////6AAAAAQEAAAAC+wAAABgAYwBsAGkAcABfAG0AbwBuAGkAdABvAHIBAAAAAP////8AAAFEAQAAA/sAAAAeAHAAcgBvAGoAZQBjAHQAXwBtAG8AbgBpAHQAbwByAQAAAAD/////AAABRAEAAAP7AAAAGAB1AG4AZABvAF8AaABpAHMAdABvAHIAeQAAAAAA/////wAAAGABAAAD+wAAAAoAbQBpAHgAZQByAQAAA50AAAFjAAABJAEAAAP7AAAAFgB2AGUAYwB0AG8AcgBzAGMAbwBwAGUAAAAAAP////8AAAEyAQAAA/sAAAAQAHcAYQB2AGUAZgBvAHIAbQAAAAAA/////wAAAKgBAAAD+wAAABQAcgBnAGIAXwBwAGEAcgBhAGQAZQAAAAAA/////wAAAKQBAAAD+wAAABIAaABpAHMAdABvAGcAcgBhAG0AAAAAAP////8AAAFKAQAAAwAAA/wAAAFFAAAABAAAAAQAAAAIAAAACPwAAAABAAAAAgAAAAIAAAAWAG0AYQBpAG4AVABvAG8AbABCAGEAcgEAAAAA/////wAAAAAAAAAAAAAAGABlAHgAdAByAGEAVABvAG8AbABCAGEAcgEAAAIp/////wAAAAAAAAAA
Color Correction=AAAA/wAAAAD9AAAAAgAAAAAAAAEDAAABRfwCAAAAAfsAAAAWAHAAcgBvAGoAZQBjAHQAXwBiAGkAbgEAAAGaAAABRQAAAJsBAAADAAAAAgAABQAAAAFV/AEAAAAN+wAAABgAbgBvAHQAZQBzAF8AdwBpAGQAZwBlAHQAAAAAAP////8AAABnAQAAA/sAAAAOAGwAaQBiAHIAYQByAHkAAAAAAP////8AAABnAQAAA/sAAAAUAHMAYwByAGUAZQBuAGcAcgBhAGIAAAAAAP////8AAABgAQAAA/sAAAAaAGEAdQBkAGkAbwBzAHAAZQBjAHQAcgB1AG0AAAAAAP////8AAABmAQAAA/wAAAAAAAABQQAAAGAA////+gAAAAABAAAAAvsAAAAYAGUAZgBmAGUAYwB0AF8AcwB0AGEAYwBrAQAAAAD/////AAAAYAEAAAP7AAAAHgBjAGwAaQBwAF8AcAByAG8AcABlAHIAdABpAGUAcwAAAAAA/////wAAAGABAAAD/AAAAUIAAADQAAAAiwD////6AAAAAQEAAAAC+wAAAB4AdAByAGEAbgBzAGkAdABpAG8AbgBfAGwAaQBzAHQBAAAAAP////8AAAAEAQAAA/sAAAAWAGUAZgBmAGUAYwB0AF8AbABpAHMAdAEAAAAA/////wAAAAQBAAAD/AAAAhMAAAGJAAABRAD////6AAAAAQEAAAAC+wAAABgAYwBsAGkAcABfAG0AbwBuAGkAdABvAHIBAAAAAP////8AAAFEAQAAA/sAAAAeAHAAcgBvAGoAZQBjAHQAXwBtAG8AbgBpAHQAbwByAQAAAAD/////AAABRAEAAAP7AAAAGAB1AG4AZABvAF8AaABpAHMAdABvAHIAeQAAAAAA/////wAAAGABAAAD+wAAAAoAbQBpAHgAZQByAQAAA50AAAFjAAABJAEAAAP7AAAAFgB2AGUAYwB0AG8AcgBzAGMAbwBwAGUAAAAAAP////8AAAEyAQAAA/sAAAAQAHcAYQB2AGUAZgBvAHIAbQAAAAAA/////wAAAKgBAAAD+wAAABQAcgBnAGIAXwBwAGEAcgBhAGQAZQAAAAAA/////wAAAKQBAAAD+wAAABIAaABpAHMAdABvAGcAcgBhAG0AAAAAAP////8AAAFKAQAAAwAAA/wAAAFFAAAABAAAAAQAAAAIAAAACPwAAAABAAAAAgAAAAIAAAAWAG0AYQBpAG4AVABvAG8AbABCAGEAcgEAAAAA/////wAAAAAAAAAAAAAAGABlAHgAdAByAGEAVABvAG8AbABCAGEAcgEAAAIp/////wAAAAAAAAAA
Color=AAAA/wAAAAD9AAAAAgAAAAAAAAEDAAABRfwCAAAAAfsAAAAWAHAAcgBvAGoAZQBjAHQAXwBiAGkAbgEAAAGaAAABRQAAAJsBAAADAAAAAgAABQAAAAFV/AEAAAAN+wAAABgAbgBvAHQAZQBzAF8AdwBpAGQAZwBlAHQAAAAAAP////8AAABnAQAAA/sAAAAOAGwAaQBiAHIAYQByAHkAAAAAAP////8AAABnAQAAA/sAAAAUAHMAYwByAGUAZQBuAGcAcgBhAGIAAAAAAP////8AAABgAQAAA/sAAAAaAGEAdQBkAGkAbwBzAHAAZQBjAHQAcgB1AG0AAAAAAP////8AAABmAQAAA/wAAAAAAAABQQAAAGAA////+gAAAAABAAAAAvsAAAAYAGUAZgBmAGUAYwB0AF8AcwB0AGEAYwBrAQAAAAD/////AAAAYAEAAAP7AAAAHgBjAGwAaQBwAF8AcAByAG8AcABlAHIAdABpAGUAcwAAAAAA/////wAAAGABAAAD/AAAAUIAAADQAAAAiwD////6AAAAAQEAAAAC+wAAAB4AdAByAGEAbgBzAGkAdABpAG8AbgBfAGwAaQBzAHQBAAAAAP////8AAAAEAQAAA/sAAAAWAGUAZgBmAGUAYwB0AF8AbABpAHMAdAEAAAAA/////wAAAAQBAAAD/AAAAhMAAAGJAAABRAD////6AAAAAQEAAAAC+wAAABgAYwBsAGkAcABfAG0AbwBuAGkAdABvAHIBAAAAAP////8AAAFEAQAAA/sAAAAeAHAAcgBvAGoAZQBjAHQAXwBtAG8AbgBpAHQAbwByAQAAAAD/////AAABRAEAAAP7AAAAGAB1AG4AZABvAF8AaABpAHMAdABvAHIAeQAAAAAA/////wAAAGABAAAD+wAAAAoAbQBpAHgAZQByAQAAA50AAAFjAAABJAEAAAP7AAAAFgB2AGUAYwB0AG8AcgBzAGMAbwBwAGUAAAAAAP////8AAAEyAQAAA/sAAAAQAHcAYQB2AGUAZgBvAHIAbQAAAAAA/////wAAAKgBAAAD+wAAABQAcgBnAGIAXwBwAGEAcgBhAGQAZQAAAAAA/////wAAAKQBAAAD+wAAABIAaABpAHMAdABvAGcAcgBhAG0AAAAAAP////8AAAFKAQAAAwAAA/wAAAFFAAAABAAAAAQAAAAIAAAACPwAAAABAAAAAgAAAAIAAAAWAG0AYQBpAG4AVABvAG8AbABCAGEAcgEAAAAA/////wAAAAAAAAAAAAAAGABlAHgAdAByAGEAVABvAG8AbABCAGEAcgEAAAIp/////wAAAAAAAAAA
<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
<kpartgui name="kdenlive" version="189" translationDomain="kdenlive">
<kpartgui name="kdenlive" version="192" translationDomain="kdenlive">
<MenuBar>
<Menu name="file" >
<Action name="file_save"/>
......@@ -285,13 +285,5 @@
<text>Extra Toolbar</text>
<Action name="project_render_button" />
</ToolBar>
<ToolBar name="layoutsToolBar" fullWidth="false" newline="true" noMerge="1" position="top">
<text>Layouts</text>
<Action name="load_layout1" />
<Action name="load_layout2" />
<Action name="load_layout3" />
<Action name="load_layout4" />
<Action name="load_layout5" />
</ToolBar>
</kpartgui>
......@@ -17,8 +17,11 @@ the Free Software Foundation, either version 3 of the License, or
#include <QDialog>
#include <QDialogButtonBox>
#include <QListWidget>
#include <QMenuBar>
#include <QButtonGroup>
#include <KConfigGroup>
#include <KColorScheme>
#include <KSharedConfig>
#include <KXMLGUIFactory>
#include <klocalizedstring.h>
......@@ -45,6 +48,21 @@ LayoutManagement::LayoutManagement(QObject *parent)
QAction *load = new QAction(QIcon(), QString(), this);
m_layoutActions <<layoutActions->addAction("load_layout" + QString::number(i), load);
}
MainWindow *main = pCore->window();
m_container = new QWidget(main);
m_containerGrp = new QButtonGroup(m_container);
QVBoxLayout *l1 = new QVBoxLayout;
l1->addStretch();
m_containerLayout = new QHBoxLayout;
m_containerLayout->setSpacing(0);
m_containerLayout->setContentsMargins(0, 0, 0, 0);
l1->addLayout(m_containerLayout);
m_container->setLayout(l1);
KColorScheme scheme(main->palette().currentColorGroup(), KColorScheme::Button);
QColor bg = scheme.background(KColorScheme::AlternateBackground).color();
QString style = QString("padding-left: %4; padding-right: %4;background-color: rgb(%1,%2,%3);").arg(bg.red()).arg(bg.green()).arg(bg.blue()).arg(main->fontInfo().pixelSize()/2);
m_container->setStyleSheet(style);
main->menuBar()->setCornerWidget(m_container, Qt::TopRightCorner);
initializeLayouts();
}
......@@ -53,6 +71,11 @@ void LayoutManagement::initializeLayouts()
if (m_loadLayout == nullptr) {
return;
}
MainWindow *main = pCore->window();
// Delete existing buttons
while (auto item = m_containerLayout->takeAt(0)) {
delete item->widget();
}
// Load default base layouts
KConfig defaultConfig(QStringLiteral("kdenlivedefaultlayouts.rc"), KConfig::CascadeConfig, QStandardPaths::AppDataLocation);
......@@ -63,6 +86,7 @@ void LayoutManagement::initializeLayouts()
// Load User defined layouts
KSharedConfigPtr config = KSharedConfig::openConfig(QStringLiteral("kdenlive-layoutsrc"), KConfig::NoCascade);
KConfigGroup layoutGroup(config, "Layouts");
KConfigGroup layoutOrder(config, "Order");
// If we don't have any layout saved, check in main config file
if (!layoutGroup.exists()) {
config = KSharedConfig::openConfig();
......@@ -72,20 +96,24 @@ void LayoutManagement::initializeLayouts()
layoutGroup2.copyTo(&layoutGroup);
}
}
if (!layoutGroup.exists()) {
defaultLayout.copyTo(&layoutGroup);
defaultOrder.copyTo(&layoutOrder);
}
m_loadLayout->removeAllActions();
KConfigGroup layoutOrder(config, "Order");
QStringList entries;
bool addedDefault = false;
if (!layoutOrder.exists()) {
// This is an old or newly created config file, import defaults
defaultLayouts = defaultOrder.entryMap().values();
entries = layoutGroup.keyList();
addedDefault = true;
} else {
// User sorted list
entries = layoutOrder.entryMap().values();
}
// Add default layouts to user config in they don't exist
bool addedDefault = false;
for (const QString &lay : defaultLayouts)
{
if (!entries.contains(lay)) {
......@@ -115,6 +143,15 @@ void LayoutManagement::initializeLayouts()
load->setIcon(QIcon());
} else {
load->setText(i18n("Layout %1: %2", i, layoutName));
if (i < 6) {
QPushButton *lab = new QPushButton(i18n(layoutName.toUtf8().constData()), m_container);
connect(lab, &QPushButton::clicked, load, &QAction::trigger);
lab->setCheckable(true);
lab->setFlat(true);
lab->setFont(main->menuBar()->font());
m_containerGrp->addButton(lab);
m_containerLayout->addWidget(lab);
}
}
load->setData(layoutName);
if (!layoutName.isEmpty()) {
......@@ -124,6 +161,8 @@ void LayoutManagement::initializeLayouts()
load->setEnabled(false);
}
}
// Required to trigger a refresh of the container buttons
main->menuBar()->resize(main->menuBar()->sizeHint());
}
void LayoutManagement::slotLoadLayout(QAction *action)
......
......@@ -16,6 +16,8 @@ the Free Software Foundation, either version 3 of the License, or
class KSelectAction;
class QAction;
class QButtonGroup;
class QHBoxLayout;
class LayoutManagement : public QObject
{
......@@ -35,6 +37,9 @@ private slots:
private:
/** @brief Populates the "load layout" menu. */
void initializeLayouts();
QWidget *m_container;
QButtonGroup *m_containerGrp;
QHBoxLayout *m_containerLayout;
KSelectAction *m_loadLayout;
QList <QAction *> m_layoutActions;
};
......
......@@ -261,8 +261,7 @@ Monitor::Monitor(Kdenlive::MonitorId id, MonitorManager *manager, QWidget *paren
m_speedLabel = new QLabel(this);
m_speedLabel->setFont(QFontDatabase::systemFont(QFontDatabase::SmallestReadableFont));
KColorScheme scheme(palette().currentColorGroup(), KColorScheme::Button);
QColor bg = scheme.background(KColorScheme::LinkBackground).color();
bg = scheme.background(KColorScheme::PositiveBackground).color();
QColor bg = scheme.background(KColorScheme::PositiveBackground).color();
m_speedLabel->setStyleSheet(QString("padding-left: %4; padding-right: %4;background-color: rgb(%1,%2,%3);").arg(bg.red()).arg(bg.green()).arg(bg.blue()).arg(m_speedLabel->sizeHint().height()/4));
m_toolbar->addWidget(m_speedLabel);
m_speedLabel->setFixedWidth(0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment