aboutsummaryrefslogtreecommitdiff
path: root/VMProtect/templates_window.cc
diff options
context:
space:
mode:
Diffstat (limited to 'VMProtect/templates_window.cc')
-rw-r--r--VMProtect/templates_window.cc120
1 files changed, 120 insertions, 0 deletions
diff --git a/VMProtect/templates_window.cc b/VMProtect/templates_window.cc
new file mode 100644
index 0000000..0bc96b5
--- /dev/null
+++ b/VMProtect/templates_window.cc
@@ -0,0 +1,120 @@
+#include "../core/objects.h"
+#include "../core/files.h"
+#include "../core/lang.h"
+#include "../core/core.h"
+#include "models.h"
+#include "widgets.h"
+#include "help_browser.h"
+#include "message_dialog.h"
+#include "templates_window.h"
+#include "moc/moc_templates_window.cc"
+
+/**
+ * TemplatesWindow
+ */
+
+TemplatesModel *TemplatesWindow::templates_model_ = NULL;
+
+TemplatesWindow::TemplatesWindow(QWidget *parent)
+ : QDialog(parent, Qt::WindowSystemMenuHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint)
+{
+ setWindowTitle(QString::fromUtf8(language[lsTemplates].c_str()));
+
+ renameAct_ = new QAction(QString::fromUtf8(language[lsRename].c_str()), this);
+ renameAct_->setShortcut(QString("F2"));
+ renameAct_->setEnabled(false);
+ connect(renameAct_, SIGNAL(triggered()), this, SLOT(renameClicked()));
+ delAct_ = new QAction(QString::fromUtf8(language[lsDelete].c_str()), this);
+ delAct_->setShortcut(QString("Del"));
+ delAct_->setEnabled(false);
+ connect(delAct_, SIGNAL(triggered()), this, SLOT(delClicked()));
+
+ contextMenu_ = new QMenu(this);
+ contextMenu_->addAction(delAct_);
+ contextMenu_->addAction(renameAct_);
+
+ templateTree_ = new TreeView(this);
+ templateTree_->setObjectName("grid");
+ templateTree_->setRootIsDecorated(false);
+ templateTree_->setUniformRowHeights(true);
+ templateTree_->setIconSize(QSize(18, 18));
+ templateTree_->setContextMenuPolicy(Qt::CustomContextMenu);
+ templateTree_->setItemDelegate(new TemplatesTreeDelegate(this));
+ templateTree_->setModel(templates_model_);
+ templateTree_->addAction(delAct_);
+ connect(templateTree_->selectionModel(), SIGNAL(currentChanged(QModelIndex, QModelIndex)), this, SLOT(templateIndexChanged()));
+ connect(templateTree_, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(contextMenuRequested(const QPoint &)));
+
+ QToolButton *helpButton = new QToolButton(this);
+ helpButton->setShortcut(HelpContentsKeySequence());
+ helpButton->setIconSize(QSize(20, 20));
+ helpButton->setIcon(QIcon(":/images/help_gray.png"));
+ helpButton->setToolTip(QString::fromUtf8(language[lsHelp].c_str()));
+ connect(helpButton, SIGNAL(clicked(bool)), this, SLOT(helpClicked()));
+
+ closeButton_ = new PushButton(QString::fromUtf8(language[lsClose].c_str()), this);
+ connect(closeButton_, SIGNAL(clicked()), this, SLOT(reject()));
+
+ QHBoxLayout *buttonLayout = new QHBoxLayout();
+ buttonLayout->setContentsMargins(0, 0, 0, 0);
+ buttonLayout->setSpacing(10);
+ buttonLayout->addWidget(helpButton);
+ buttonLayout->addStretch();
+ buttonLayout->addWidget(closeButton_);
+
+ QVBoxLayout *mainLayout = new QVBoxLayout();
+ mainLayout->setContentsMargins(10, 10, 10, 10);
+ mainLayout->setSpacing(10);
+ mainLayout->addWidget(templateTree_);
+ mainLayout->addLayout(buttonLayout);
+ setLayout(mainLayout);
+
+ resize(600, 300);
+}
+
+void TemplatesWindow::contextMenuRequested(const QPoint &p)
+{
+ contextMenu_->exec(templateTree_->viewport()->mapToGlobal(p));
+}
+
+void TemplatesWindow::helpClicked()
+{
+ //FIXME HelpBrowser::showTopic("templates");
+}
+
+void TemplatesWindow::templateIndexChanged()
+{
+ ProjectTemplate *pt = selectedTemplate();
+ templateTree_->selectionModel()->select(templateTree_->currentIndex(), QItemSelectionModel::ClearAndSelect);
+
+ delAct_->setEnabled(pt != NULL);
+ renameAct_->setEnabled(pt != NULL && templateTree_->currentIndex().row() > 0);
+}
+
+void TemplatesWindow::delClicked()
+{
+ ProjectTemplate *pt = selectedTemplate();
+ if (!pt)
+ return;
+
+ if (pt->is_default()) {
+ if (MessageDialog::warning(this, QString(QString::fromUtf8(language[lsDeleteDefaultTemplate].c_str())), QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes)
+ pt->Reset();
+ } else {
+ if (MessageDialog::question(this, QString(QString::fromUtf8(language[lsDeleteTemplate].c_str()) +"?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes)
+ delete pt;
+ }
+}
+
+void TemplatesWindow::renameClicked()
+{
+ templateTree_->edit(templateTree_->currentIndex());
+}
+
+ProjectTemplate *TemplatesWindow::selectedTemplate() const
+{
+ QModelIndex idx = templateTree_->currentIndex();
+ ProjectNode *node = templates_model_->indexToNode(idx);
+ return (node && node->type() == NODE_TEMPLATE) ? reinterpret_cast<ProjectTemplate *>(node->data()) : NULL;
+}
+