Files
Adaptix-Framework-AdaptixC2/Client/Source/UI/Dialogs/DialogExtender.cpp
T
2024-12-19 12:47:45 +03:00

161 lines
5.6 KiB
C++

#include <UI/Dialogs/DialogExtender.h>
DialogExtender::DialogExtender(Extender* e)
{
extender = e;
this->createUI();
connect(buttonClose, &QPushButton::clicked, this, &DialogExtender::close);
connect(tableWidget, &QTableWidget::customContextMenuRequested, this, &DialogExtender::handleMenu);
connect(tableWidget, &QTableWidget::cellClicked, this, &DialogExtender::onRowSelect);
}
DialogExtender::~DialogExtender() = default;
void DialogExtender::createUI()
{
this->setWindowTitle("Extender");
this->resize(1200, 600);
tableWidget = new QTableWidget(this );
tableWidget->setColumnCount(5 );
tableWidget->setContextMenuPolicy(Qt::CustomContextMenu );
tableWidget->setAutoFillBackground(false );
tableWidget->setShowGrid(false );
tableWidget->setSortingEnabled(true );
tableWidget->setWordWrap(true );
tableWidget->setCornerButtonEnabled(false );
tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows );
tableWidget->setSelectionMode(QAbstractItemView::SingleSelection );
tableWidget->setFocusPolicy(Qt::NoFocus );
tableWidget->setAlternatingRowColors(true );
tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch );
tableWidget->horizontalHeader()->setCascadingSectionResizes(true );
tableWidget->horizontalHeader()->setHighlightSections(false );
tableWidget->verticalHeader()->setVisible(false );
tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("Name" ) );
tableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem("Path" ) );
tableWidget->setHorizontalHeaderItem(2, new QTableWidgetItem("Description" ) );
tableWidget->setHorizontalHeaderItem(3, new QTableWidgetItem("Status" ) );
tableWidget->setHorizontalHeaderItem(4, new QTableWidgetItem("Comment" ) );
tableWidget->setItemDelegate(new PaddingDelegate(tableWidget));
tableWidget->hideColumn(4);
textComment = new QTextEdit(this);
textComment->setReadOnly( true );
auto hSpacer1 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
auto hSpacer2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
buttonClose = new QPushButton("Close", this);
buttonClose->setFixedWidth(180);
layout = new QGridLayout(this);
layout->setContentsMargins( 4, 4, 4, 4);
layout->addWidget(tableWidget, 0, 0, 1, 3);
layout->addWidget(textComment, 1, 0, 1, 3);
layout->addItem( hSpacer1, 2, 0, 1, 1);
layout->addWidget( buttonClose, 2, 1, 1, 1);
layout->addItem( hSpacer2, 2, 2, 1, 1);
this->setLayout(layout);
}
void DialogExtender::AddExtenderItem(ExtensionFile extenderItem)
{
auto item_Name = new QTableWidgetItem( extenderItem.Name );
auto item_Path = new QTableWidgetItem( extenderItem.FilePath );
auto item_Description = new QTableWidgetItem( extenderItem.Description );
auto item_Comment = new QTableWidgetItem( extenderItem.Comment );
auto item_Status = new QTableWidgetItem( "" );
item_Name->setFlags( item_Name->flags() ^ Qt::ItemIsEditable );
item_Path->setFlags( item_Path->flags() ^ Qt::ItemIsEditable );
item_Description->setFlags( item_Description->flags() ^ Qt::ItemIsEditable );
item_Status->setFlags( item_Status->flags() ^ Qt::ItemIsEditable );
item_Status->setTextAlignment( Qt::AlignCenter );
if ( extenderItem.Enabled ) {
item_Status->setText("On");
item_Status->setForeground(QColor(COLOR_NeonGreen));
}
else {
item_Status->setText("Off");
item_Status->setForeground(QColor(COLOR_ChiliPepper));
}
if( tableWidget->rowCount() < 1 )
tableWidget->setRowCount( 1 );
else
tableWidget->setRowCount( tableWidget->rowCount() + 1 );
bool isSortingEnabled = tableWidget->isSortingEnabled();
tableWidget->setSortingEnabled( false );
tableWidget->setItem( tableWidget->rowCount() - 1, 0, item_Name );
tableWidget->setItem( tableWidget->rowCount() - 1, 1, item_Path );
tableWidget->setItem( tableWidget->rowCount() - 1, 2, item_Description );
tableWidget->setItem( tableWidget->rowCount() - 1, 3, item_Status );
tableWidget->setItem( tableWidget->rowCount() - 1, 4, item_Comment );
tableWidget->setSortingEnabled( isSortingEnabled );
tableWidget->horizontalHeader()->setSectionResizeMode( 0, QHeaderView::ResizeToContents );
tableWidget->horizontalHeader()->setSectionResizeMode( 1, QHeaderView::ResizeToContents );
tableWidget->horizontalHeader()->setSectionResizeMode( 3, QHeaderView::ResizeToContents );
}
void DialogExtender::UpdateExtenderItem(ExtensionFile extenderItem)
{
}
/// SLOTS
void DialogExtender::handleMenu(const QPoint &pos ) const
{
QMenu menu = QMenu();
menu.addAction("Add new", this, &DialogExtender::onActionAdd );
menu.addSeparator();
menu.addAction("Enable", this, &DialogExtender::onActionEnable );
menu.addAction("Disable", this, &DialogExtender::onActionDisable );
menu.addSeparator();
menu.addAction("Remove", this, &DialogExtender::onActionRemove );
QPoint globalPos = tableWidget->mapToGlobal(pos );
menu.exec(globalPos );
}
void DialogExtender::onActionAdd()
{
QString filePath = QFileDialog::getOpenFileName( nullptr, "Select file", QDir::homePath(), "*.json");
if ( filePath.isEmpty())
return;
extender->LoadFromFile(filePath);
}
void DialogExtender::onActionEnable()
{
}
void DialogExtender::onActionDisable()
{
}
void DialogExtender::onActionRemove()
{
}
void DialogExtender::onRowSelect(int row, int column)
{
textComment->setText(tableWidget->item(row,4)->text());
}