#include "helppanel.h"
myBaseMenu::myBaseMenu(const QMenu* BaseMenu,const int Width, QWidget *parent)
: QWidget(parent)
{
myMenu = BaseMenu;
myWidth = Width;
CreateBaseMenu();
command = new MacroAnalizer();
}
void myBaseMenu::CreateBaseMenu()
{
QListWidgetItem *myBaseMenuItem;
objectsOfBase = new QListWidget;
objectsOfSub1 = new QListWidget;
objectsOfSub1->hide();
objectsOfSub2 = new QListWidget;
objectsOfSub2->hide();
objectsOfSub3 = new QListWidget;
objectsOfSub3->hide();
QString myName;
QPalette palette;
palette.setBrush(QPalette::Base, Qt::NoBrush);
palette.setBrush(QPalette::Highlight, Qt::NoBrush);
palette.setBrush(QPalette::HighlightedText, Qt::black);
objectsOfBase->setIconSize(QSize(20, 20));
objectsOfBase->setMaximumHeight(myMenu->actions().size()*22);
objectsOfBase->setMaximumWidth(myWidth-10);
objectsOfBase->setMinimumWidth(myWidth-10);
objectsOfBase->setPalette(palette);
objectsOfBase->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
objectsOfSub1->setIconSize(QSize(20, 20));
objectsOfSub1->setMaximumWidth(myWidth);
objectsOfSub1->setMinimumWidth(myWidth);
objectsOfSub1->setPalette(palette);
objectsOfSub1->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
objectsOfSub2->setIconSize(QSize(20, 20));
objectsOfSub2->setMaximumWidth(myWidth-10);
objectsOfSub2->setMinimumWidth(myWidth-10);
objectsOfSub2->setPalette(palette);
objectsOfSub2->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
objectsOfSub3->setIconSize(QSize(20, 20));
objectsOfSub3->setMaximumWidth(myWidth);
objectsOfSub3->setMinimumWidth(myWidth);
objectsOfSub3->setPalette(palette);
objectsOfSub3->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
QHBoxLayout *OfBase = new QHBoxLayout;
OfBase->addWidget(objectsOfBase);
OfBase->setAlignment(Qt::AlignTop | Qt::AlignRight);
QHBoxLayout *OfSub1 = new QHBoxLayout;
OfSub1->addWidget(objectsOfSub1);
OfSub1->setAlignment(Qt::AlignTop);
QHBoxLayout *OfSub2 = new QHBoxLayout;
OfSub2->addWidget(objectsOfSub2);
OfSub2->setAlignment(Qt::AlignTop | Qt::AlignRight);
QHBoxLayout *OfSub3 = new QHBoxLayout;
OfSub3->addWidget(objectsOfSub3);
OfSub3->setAlignment(Qt::AlignTop);
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addLayout(OfBase);
mainLayout->addLayout(OfSub1);
mainLayout->addLayout(OfSub2);
mainLayout->addLayout(OfSub3);
mainLayout->setMargin(0);
mainLayout->setSpacing(5);
mainLayout->addStretch(1);
setLayout(mainLayout);
for (int i=0;i<myMenu->actions().size();++i)
{
myBaseMenuItem = new QListWidgetItem(objectsOfBase);
myBaseMenuItem->setIcon(QIcon(":/Tree/Resurs/Tree/item_closed.png"));
myBaseMenuItem->setText(myMenu->actions().at(i)->text());
}
connect( objectsOfBase,
SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT( changeHelpPage(QListWidgetItem *, QListWidgetItem*)) );
connect( objectsOfSub1,
SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT( changeSub1Page(QListWidgetItem *, QListWidgetItem*)) );
connect( objectsOfSub2,
SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT( changeSub2Page(QListWidgetItem *, QListWidgetItem*)) );
connect( objectsOfSub1,
SIGNAL(itemClicked(QListWidgetItem *)), this, SLOT( tryExecuteAction(QListWidgetItem *)) );
connect( objectsOfSub2,
SIGNAL(itemClicked(QListWidgetItem *)), this, SLOT( tryExecuteAction(QListWidgetItem *)) );
connect( objectsOfSub3,
SIGNAL(itemClicked(QListWidgetItem *)), this, SLOT( tryExecuteAction(QListWidgetItem *)) );
}
void myBaseMenu::changeHelpPage(QListWidgetItem *current, QListWidgetItem *previous)
{
if (!current)
current = previous;
QFont myFont;
QString myName;
if ((objectsOfBase->row(current))>(myMenu->actions().size())) return;
if (previous)
{
myFont = objectsOfBase->item(objectsOfBase->row(previous))->font();
myFont.setBold(false);
objectsOfBase->item(objectsOfBase->row(previous))->setFont(myFont);
objectsOfBase->item(objectsOfBase->row(previous))->setIcon(QIcon(":/Tree/Resurs/Tree/item_closed.png"));
}
myFont = objectsOfBase->currentItem()->font();
myFont.setBold(true);
objectsOfBase->currentItem()->setFont(myFont);
objectsOfBase->currentItem()->setIcon(QIcon(":/Tree/Resurs/Tree/item_cur.png"));
objectsOfSub1->clear();
objectsOfSub2->hide();
objectsOfSub3->hide();
objectsOfSub1->show();
mySubMenu1 = myMenu->actions().at(objectsOfBase->row(current))->menu();
QListWidgetItem *mySub1MenuItem;
QIcon icon;
for (int i=0;i<mySubMenu1->actions().size();++i)
{
mySub1MenuItem = new QListWidgetItem(objectsOfSub1);
icon = mySubMenu1->actions().at(i)->icon();
if (icon.isNull())
mySub1MenuItem->setIcon(QIcon(":/Tree/Resurs/Tree/item_closed.png"));
else mySub1MenuItem->setIcon(icon);
mySub1MenuItem->setText(mySubMenu1->actions().at(i)->text());
mySub1MenuItem->setData(32,mySubMenu1->actions().at(i)->data());
}
objectsOfSub1->setMaximumHeight(mySubMenu1->actions().size()*22);
}
void myBaseMenu::changeSub1Page(QListWidgetItem *current, QListWidgetItem *previous)
{
if (!current)
current = previous;
QFont myFont;
QString havedata;
if ((objectsOfSub1->row(current))>(mySubMenu1->actions().size())) return;
if (previous)
{
havedata = mySubMenu1->actions().at(objectsOfSub1->row(previous))->data().toString();
if (havedata.isNull())
{
myFont = objectsOfSub1->item(objectsOfSub1->row(previous))->font();
myFont.setBold(false);
objectsOfSub1->item(objectsOfSub1->row(previous))->setFont(myFont);
objectsOfSub1->item(objectsOfSub1->row(previous))->setIcon(QIcon(":/Tree/Resurs/Tree/item_closed.png"));
}
}
havedata = mySubMenu1->actions().at(objectsOfSub1->row(current))->data().toString();
if (havedata.isNull())
{
myFont = objectsOfSub1->item(objectsOfSub1->row(current))->font();
myFont.setBold(true);
objectsOfSub1->item(objectsOfSub1->row(current))->setFont(myFont);
objectsOfSub1->item(objectsOfSub1->row(current))->setIcon(QIcon(":/Tree/Resurs/Tree/item_cur.png"));
mySubMenu2 = mySubMenu1->actions().at(objectsOfSub1->row(current))->menu();
objectsOfSub2->clear();
QListWidgetItem *mySub2MenuItem;
QIcon icon;
for (int i=0;i<mySubMenu2->actions().size();++i)
{
mySub2MenuItem = new QListWidgetItem(objectsOfSub2);
icon = mySubMenu2->actions().at(i)->icon();
mySub2MenuItem->setIcon(icon);
mySub2MenuItem->setText(mySubMenu2->actions().at(i)->text());
mySub2MenuItem->setData(32,mySubMenu2->actions().at(i)->data());
}
objectsOfSub2->setMaximumHeight(mySubMenu2->actions().size()*22);
objectsOfSub3->hide();
objectsOfSub2->show();
}
}
void myBaseMenu::changeSub2Page(QListWidgetItem *current, QListWidgetItem *previous)
{
if (!current)
current = previous;
QFont myFont;
QString havedata;
if ((objectsOfSub2->row(current))>(mySubMenu2->actions().size())) return;
if (previous)
{
havedata = mySubMenu2->actions().at(objectsOfSub2->row(previous))->data().toString();
if (havedata.isNull())
{
myFont = objectsOfSub2->item(objectsOfSub2->row(previous))->font();
myFont.setBold(false);
objectsOfSub2->item(objectsOfSub2->row(previous))->setFont(myFont);
}
}
havedata = mySubMenu2->actions().at(objectsOfSub2->row(current))->data().toString();
if (havedata.isNull())
{
myFont = objectsOfSub2->item(objectsOfSub2->row(current))->font();
myFont.setBold(true);
objectsOfSub2->item(objectsOfSub2->row(current))->setFont(myFont);
mySubMenu3 = mySubMenu2->actions().at(objectsOfSub2->row(current))->menu();
objectsOfSub3->clear();
QListWidgetItem *mySub3MenuItem;
QIcon icon;
for (int i=0;i<mySubMenu3->actions().size();++i)
{
mySub3MenuItem = new QListWidgetItem(objectsOfSub3);
icon = mySubMenu3->actions().at(i)->icon();
mySub3MenuItem->setIcon(icon);
mySub3MenuItem->setText(mySubMenu3->actions().at(i)->text());
mySub3MenuItem->setData(32,mySubMenu3->actions().at(i)->data());
}
objectsOfSub3->setMaximumHeight(mySubMenu3->actions().size()*22);
objectsOfSub3->show();
}
else objectsOfSub3->hide();
}
void myBaseMenu::tryExecuteAction(QListWidgetItem *SelectedItem)
{
command->runAnalizer(SelectedItem->data(32).toString());
}