+#include "dlgTriggerEditorCommand.h"
+#include "Host.h"
+#include "LuaInterface.h"
+#include "VarUnit.h"
+#include "XMLimport.h"
+#include "dlgActionMainArea.h"
+#include "dlgAliasMainArea.h"
+#include "dlgKeysMainArea.h"
+#include "dlgScriptsMainArea.h"
+#include "dlgTriggerEditor.h"
+#include "dlgTriggerPatternEdit.h"
+#include "mudlet.h"
+#include <QPointer>
+
+AddTriggerCommand::AddTriggerCommand(Host* pHost, TTreeWidget* treeWidgetTriggers, bool isFolder, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpTreeWidgetTriggers = treeWidgetTriggers;
+ mIsFolder = isFolder;
+}
+
+void AddTriggerCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectTriggerByID(mItemID);
+ mpItem = mpTreeWidgetTriggers->currentItem();
+ mpParent = mpItem->parent();
+
+ if (mpParent) {
+ mpParent->removeChild(mpItem);
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ TTrigger* pParent = mpHost->getTriggerUnit()->getTrigger(parentId);
+ if (pParent) {
+ TTrigger* pT = mpHost->getTriggerUnit()->getTrigger(mItemID);
+ pParent->popChild(pT);
+ }
+ } else {
+ qDebug() << "parent is null ";
+ }
+}
+
+void AddTriggerCommand::redo()
+{
+ if (!mpEditor) {
+ return;
+ }
+ if (!mpItem) {
+ mpEditor->addTrigger(mIsFolder);
+ mpItem = mpTreeWidgetTriggers->currentItem();
+ mCurrentIndex = mpTreeWidgetTriggers->currentIndex();
+ mSiblingRow = mCurrentIndex.row();
+ mpParent = mpItem->parent();
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+
+ } else {
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ TTrigger* pParent = mpHost->getTriggerUnit()->getTrigger(parentId);
+ if (mIsFolder) {
+ mpParent->addChild(mpItem);
+ } else {
+ mpParent->insertChild(mSiblingRow, mpItem);
+ }
+ if (pParent) {
+ TTrigger* pT = mpHost->getTriggerUnit()->getTrigger(mItemID);
+ pParent->addChild(pT);
+ }
+
+ mpEditor->selectTriggerByID(mItemID);
+ }
+
+ setText(QObject::tr("Add Trigger"));
+}
+
+PasteTriggerCommand::PasteTriggerCommand(Host* pHost, TTreeWidget* treeWidgetTriggers, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpTreeWidgetTriggers = treeWidgetTriggers;
+ mpItemTrigger = nullptr;
+}
+
+void PasteTriggerCommand::undo()
+{
+ if (!mpEditor) {
+ return;
+ }
+
+ mpEditor->selectTriggerByID(mImportedItemID);
+ mpItem = mpTreeWidgetTriggers->currentItem();
+ mpParent = mpItem->parent();
+ if (mpParent) {
+ mpParent->removeChild(mpItem);
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ TTrigger* pParent = mpHost->getTriggerUnit()->getTrigger(parentId);
+ if (pParent) {
+ TTrigger* pT = mpHost->getTriggerUnit()->getTrigger(mImportedItemID);
+ pParent->popChild(pT);
+ }
+ } else {
+ qDebug() << "parent is null ";
+ }
+}
+
+void PasteTriggerCommand::redo()
+{
+ if (!mpItem) {
+ auto parent = mpTreeWidgetTriggers->currentIndex().parent();
+ auto parentRow = parent.row();
+
+ mSiblingRow = mpTreeWidgetTriggers->currentIndex().row() + 1;
+ mpItemTrigger = mpHost->getTriggerUnit()->getTrigger(mImportedItemID);
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ mpHost->getTriggerUnit()->reParentTrigger(mImportedItemID, 0, parentId, parentRow, mSiblingRow);
+
+ mpEditor->selectTriggerByID(mImportedItemID);
+ mpItem = mpTreeWidgetTriggers->currentItem();
+ mpParent = mpItem->parent();
+ } else {
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ TTrigger* pParent = mpHost->getTriggerUnit()->getTrigger(parentId);
+ const int id = mpItem->data(0, Qt::UserRole).toInt();
+ TTrigger* pT = mpHost->getTriggerUnit()->getTrigger(id);
+ mpItemTrigger = pT;
+
+ if (pParent) {
+ mpParent->insertChild(mSiblingRow, mpItem);
+ } else {
+ mpParent->addChild(mpItem);
+ }
+ if (pParent) {
+ pParent->addChild(mpItemTrigger);
+ }
+
+ mpEditor->selectTriggerByID(id);
+ }
+
+ setText(QObject::tr("Paste trigger"));
+}
+
+DeleteTriggerCommand::DeleteTriggerCommand(Host* pHost, QTreeWidgetItem* pItem, TTreeWidget* treeWidgetTriggers, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpItem = pItem;
+ mpTreeWidgetTriggers = treeWidgetTriggers;
+}
+
+void DeleteTriggerCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mpEditor->selectTriggerByID(mParentID);
+ auto mParent = mpTreeWidgetTriggers->currentItem();
+ mpParent = mParent;
+ if (mpParent) {
+ QList<QTreeWidgetItem*> childList;
+ mpTreeWidgetTriggers->getAllChildren(mpItem, childList);
+ if (mpItemTriggerList.size() != childList.size()) {
+ return;
+ }
+ for (int i = 0; i < childList.size(); ++i) {
+ mpItemTriggerList[i]->setTemporary(false);
+ mpItemTriggerList[i]->registerTrigger();
+ childList[i]->setData(0, Qt::UserRole, mpItemTriggerList[i]->getID());
+ }
+ mpParent->insertChild(mSiblingRow, mpItem);
+
+ const int itemId = mpItem->data(0, Qt::UserRole).toInt();
+
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ mpHost->getTriggerUnit()->reParentTrigger(itemId, -1, parentId, mParentRow, mSiblingRow);
+ mpEditor->selectTriggerByID(itemId);
+ mpItem = mpTreeWidgetTriggers->currentItem();
+ } else {
+ qDebug() << "parent is null ";
+ }
+}
+void DeleteTriggerCommand::redo()
+{
+ if (!mpEditor || !mpHost) {
+ return;
+ }
+ if (mpItem) {
+ auto parent = mCurrentIndex.parent();
+ auto parentRow = parent.row();
+ auto parentId = parent.data(Qt::UserRole).toInt();
+ mParentID = parentId;
+ const int siblingRow = mCurrentIndex.row();
+ mParentRow = parentRow;
+ mSiblingRow = siblingRow;
+ int itemId = mpItem->data(0, Qt::UserRole).toInt();
+ mpParent = mpItem->parent();
+ mpEditor->selectTriggerByID(itemId);
+ mpItemTriggerList.clear();
+ recurseTriggers(mpItem, mpHost);
+ mpEditor->delete_trigger();
+ }
+ setText(QObject::tr("Delete trigger"));
+}
+
+void DeleteTriggerCommand::recurseTriggers(QTreeWidgetItem* mpItem, QPointer<Host> mpHost)
+{
+ TTrigger* ptr = nullptr;
+ QList<QTreeWidgetItem*> childList;
+ mpTreeWidgetTriggers->getAllChildren(mpItem, childList);
+ for (int i = 0; i < childList.size(); ++i) {
+ const int pID = childList[i]->data(0, Qt::UserRole).toInt();
+ TTrigger* pChild = mpHost->getTriggerUnit()->getTrigger(pID);
+ if (!pChild) {
+ continue;
+ }
+ if (pChild->getParent() && mpItemTriggerList.size() > 0) {
+ for (int j = 0; j < mpItemTriggerList.size(); j++) {
+ if (mpItemTriggerList[j]->mID == pChild->getParent()->mID) {
+ ptr = new TTrigger(mpItemTriggerList[j], mpHost);
+ break;
+ }
+ }
+ } else {
+ ptr = new TTrigger(pChild->mName, pChild->mPatterns, pChild->getRegexCodePropertyList(), pChild->isMultiline(), mpHost);
+ }
+ ptr->setID(pChild->mID);
+ ptr->setName(pChild->mName);
+ ptr->setCommand(pChild->getCommand());
+ ptr->setRegexCodeList(pChild->getPatternsList(), pChild->getRegexCodePropertyList());
+ ptr->setIsFolder(pChild->isFolder());
+ ptr->setIsActive(pChild->isActive());
+ ptr->setIsMultiline(pChild->isMultiline());
+ ptr->mPerlSlashGOption = pChild->mPerlSlashGOption;
+ ptr->mFilterTrigger = pChild->mFilterTrigger;
+ ptr->mStayOpen = pChild->mStayOpen;
+ ptr->setConditionLineDelta(pChild->getConditionLineDelta());
+ ptr->mSoundFile = pChild->mSoundFile;
+ ptr->setIsColorizerTrigger(pChild->isColorizerTrigger());
+ ptr->setColorizerFgColor(pChild->getFgColor());
+ ptr->setColorizerBgColor(pChild->getBgColor());
+ ptr->setTemporary(true);
+ mpItemTriggerList.append(ptr);
+ }
+}
+
+MoveTriggerCommand::MoveTriggerCommand(Host* pHost,
+ TTreeWidget* treeWidgetTriggers,
+ int childID,
+ int oldParentID,
+ int newParentID,
+ int parentPosition,
+ int childPosition,
+ int prevParentPosition,
+ int prevChildPosition,
+ QUndoCommand* parent)
+: QUndoCommand(parent), mpHost(pHost)
+{
+ mChildID = childID;
+ mOldParentID = oldParentID;
+ mNewParentID = newParentID;
+ mParentPosition = parentPosition;
+ mChildPosition = childPosition;
+ mPrevParentPosition = prevParentPosition;
+ mPrevChildPosition = prevChildPosition;
+ mpTreeWidgetTriggers = treeWidgetTriggers;
+}
+
+void MoveTriggerCommand::undo()
+{
+ if (!mpHost) {
+ return;
+ }
+
+ mpEditor->selectTriggerByID(mItemID);
+ mpItem = mpTreeWidgetTriggers->currentItem();
+
+ mpEditor->selectTriggerByID(mOldParentID);
+ mpPrevParentItem = mpTreeWidgetTriggers->currentItem();
+
+ mpEditor->selectTriggerByID(mNewParentID);
+ mpParentItem = mpTreeWidgetTriggers->currentItem();
+
+ mpHost->getTriggerUnit()->reParentTrigger(mChildID, mNewParentID, mOldParentID, mPrevParentPosition, mPrevChildPosition);
+ mpParentItem->removeChild(mpItem);
+
+ mpPrevParentItem->insertChild(mPrevChildPosition, mpItem);
+
+ mpTreeWidgetTriggers->setCurrentItem(mpItem);
+}
+
+void MoveTriggerCommand::redo()
+{
+ if (!mpEditor) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpHost->getTriggerUnit()->reParentTrigger(mChildID, mOldParentID, mNewParentID, mParentPosition, mChildPosition);
+ if (mpPrevParentItem) {
+ mpPrevParentItem->removeChild(mpItem);
+ }
+ if (mpParentItem) {
+ const int count = mpParentItem->childCount();
+ mpParentItem->insertChild(mChildPosition, mpItem);
+ }
+
+ setText(QObject::tr("Move trigger"));
+}
+
+AddAliasCommand::AddAliasCommand(Host* pHost, TTreeWidget* treeWidget_aliases, bool isFolder, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpTreeWidgetAliases = treeWidget_aliases;
+ mIsFolder = isFolder;
+}
+
+void AddAliasCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectAliasByID(mItemID);
+ mpItem = mpTreeWidgetAliases->currentItem();
+
+ mpParent = mpItem->parent();
+ if (mpParent) {
+ mpParent->removeChild(mpItem);
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ TAlias* pParent = mpHost->getAliasUnit()->getAlias(parentId);
+ if (pParent) {
+ TAlias* pT = mpHost->getAliasUnit()->getAlias(mItemID);
+ pParent->popChild(pT);
+ }
+ } else {
+ qDebug() << "parent is null ";
+ }
+}
+
+void AddAliasCommand::redo()
+{
+ if (!mpEditor) {
+ return;
+ }
+ if (!mpItem) {
+ mpEditor->addAlias(mIsFolder);
+ mpItem = mpTreeWidgetAliases->currentItem();
+ mCurrentIndex = mpTreeWidgetAliases->currentIndex();
+ mSiblingRow = mCurrentIndex.row();
+ mpParent = mpItem->parent();
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ } else {
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ TAlias* pParent = mpHost->getAliasUnit()->getAlias(parentId);
+ if (mIsFolder) {
+ mpParent->addChild(mpItem);
+ } else {
+ mpParent->insertChild(mSiblingRow, mpItem);
+ }
+ if (pParent) {
+ TAlias* pT = mpHost->getAliasUnit()->getAlias(mItemID);
+ pParent->addChild(pT);
+ }
+
+ mpEditor->selectAliasByID(mItemID);
+ }
+
+ setText(QObject::tr("Add alias"));
+}
+
+PasteAliasCommand::PasteAliasCommand(Host* pHost, TTreeWidget* treeWidgetAliases, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpTreeWidgetAliases = treeWidgetAliases;
+}
+
+void PasteAliasCommand::undo()
+{
+ if (!mpEditor) {
+ return;
+ }
+
+ mpEditor->selectAliasByID(mImportedItemID);
+ mpItem = mpTreeWidgetAliases->currentItem();
+ TAlias* pT = mpHost->getAliasUnit()->getAlias(mImportedItemID);
+ mpItemAlias = pT;
+ mpParent = mpItem->parent();
+ if (mpParent) {
+ mpParent->removeChild(mpItem);
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ TAlias* pParent = mpHost->getAliasUnit()->getAlias(parentId);
+ if (pParent) {
+ pParent->popChild(mpItemAlias);
+ }
+ } else {
+ qDebug() << "parent is null ";
+ }
+}
+
+void PasteAliasCommand::redo()
+{
+ if (!mpItem) {
+ auto parent = mpTreeWidgetAliases->currentIndex().parent();
+ auto parentRow = parent.row();
+
+ mSiblingRow = mpTreeWidgetAliases->currentIndex().row() + 1;
+ mpItemAlias = mpHost->getAliasUnit()->getAlias(mImportedItemID);
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ mpHost->getAliasUnit()->reParentAlias(mImportedItemID, 0, parentId, parentRow, mSiblingRow);
+
+ mpEditor->selectAliasByID(mImportedItemID);
+ mpItem = mpTreeWidgetAliases->currentItem();
+ mpParent = mpItem->parent();
+ } else {
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ TAlias* pParent = mpHost->getAliasUnit()->getAlias(parentId);
+ const int id = mpItem->data(0, Qt::UserRole).toInt();
+ TAlias* pT = mpHost->getAliasUnit()->getAlias(id);
+ mpItemAlias = pT;
+
+ if (pParent) {
+ mpParent->insertChild(mSiblingRow, mpItem);
+ } else {
+ mpParent->addChild(mpItem);
+ }
+ if (pParent) {
+ pParent->addChild(mpItemAlias);
+ }
+
+ mpEditor->selectAliasByID(id);
+ }
+
+ setText(QObject::tr("Paste alias"));
+}
+
+DeleteAliasCommand::DeleteAliasCommand(Host* pHost, QTreeWidgetItem* pItem, TTreeWidget* treeWidget_aliases, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpItem = pItem;
+ mpTreeWidgetAliases = treeWidget_aliases;
+}
+
+void DeleteAliasCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mpEditor->selectAliasByID(mParentID);
+ auto mParent = mpTreeWidgetAliases->currentItem();
+ mpParent = mParent;
+ if (mpParent) {
+ QList<QTreeWidgetItem*> childList;
+ mpTreeWidgetAliases->getAllChildren(mpItem, childList);
+ if (mpItemAliasList.size() != childList.size()) {
+ return;
+ }
+ for (int i = 0; i < childList.size(); ++i) {
+ mpItemAliasList[i]->setTemporary(false);
+ mpItemAliasList[i]->registerAlias();
+ childList[i]->setData(0, Qt::UserRole, mpItemAliasList[i]->getID());
+ }
+ mpParent->insertChild(mSiblingRow, mpItem);
+
+ const int itemId = mpItem->data(0, Qt::UserRole).toInt();
+
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ mpHost->getAliasUnit()->reParentAlias(itemId, -1, parentId, mParentRow, mSiblingRow);
+ mpEditor->selectAliasByID(itemId);
+ mpItem = mpTreeWidgetAliases->currentItem();
+ } else {
+ qDebug() << "parent is null ";
+ }
+}
+
+void DeleteAliasCommand::redo()
+{
+ if (!mpEditor || !mpHost) {
+ return;
+ }
+ if (mpItem) {
+ auto parent = mCurrentIndex.parent();
+ auto parentRow = parent.row();
+ auto parentId = parent.data(Qt::UserRole).toInt();
+ mParentID = parentId;
+ const int siblingRow = mCurrentIndex.row();
+ mParentRow = parentRow;
+ mSiblingRow = siblingRow;
+ int itemId = mpItem->data(0, Qt::UserRole).toInt();
+ mpParent = mpItem->parent();
+ mpEditor->selectAliasByID(itemId);
+ mpItemAliasList.clear();
+ recurseAliases(mpItem, mpHost);
+ mpEditor->delete_alias();
+ }
+ setText(QObject::tr("Delete alias"));
+}
+
+void DeleteAliasCommand::recurseAliases(QTreeWidgetItem* mpItem, QPointer<Host> mpHost)
+{
+ TAlias* ptr = nullptr;
+ QList<QTreeWidgetItem*> childList;
+ mpTreeWidgetAliases->getAllChildren(mpItem, childList);
+ for (int i = 0; i < childList.size(); ++i) {
+ const int pID = childList[i]->data(0, Qt::UserRole).toInt();
+ TAlias* pChild = mpHost->getAliasUnit()->getAlias(pID);
+ if (pChild->getParent() && mpItemAliasList.size() > 0) {
+ for (int j = 0; j < mpItemAliasList.size(); j++) {
+ if (mpItemAliasList[j]->mID == pChild->getParent()->mID) {
+ ptr = new TAlias(mpItemAliasList[j], mpHost);
+ break;
+ }
+ }
+ } else {
+ ptr = new TAlias(pChild->mName, mpHost);
+ }
+ ptr->setID(pChild->mID);
+ ptr->setName(pChild->mName);
+ ptr->setCommand(pChild->getCommand());
+ ptr->setIsFolder(pChild->isFolder());
+ ptr->setIsActive(pChild->isActive());
+ ptr->setRegexCode(pChild->getRegexCode());
+ ptr->setTemporary(true);
+ mpItemAliasList.append(ptr);
+ }
+}
+
+MoveAliasCommand::MoveAliasCommand(Host* pHost,
+ TTreeWidget* treeWidget_aliases,
+ int childID,
+ int oldParentID,
+ int newParentID,
+ int parentPosition,
+ int childPosition,
+ int prevParentPosition,
+ int prevChildPosition,
+ QUndoCommand* parent)
+: QUndoCommand(parent), mpHost(pHost)
+{
+ mChildID = childID;
+ mOldParentID = oldParentID;
+ mNewParentID = newParentID;
+ mParentPosition = parentPosition;
+ mChildPosition = childPosition;
+ mPrevParentPosition = prevParentPosition;
+ mPrevChildPosition = prevChildPosition;
+ mpTreeWidgetAliases = treeWidget_aliases;
+}
+
+void MoveAliasCommand::undo()
+{
+ if (!mpHost) {
+ return;
+ }
+
+ mpEditor->selectAliasByID(mItemID);
+ mpItem = mpTreeWidgetAliases->currentItem();
+
+ mpEditor->selectAliasByID(mOldParentID);
+ mpPrevParentItem = mpTreeWidgetAliases->currentItem();
+
+ mpEditor->selectAliasByID(mNewParentID);
+ mpParentItem = mpTreeWidgetAliases->currentItem();
+
+ mpHost->getAliasUnit()->reParentAlias(mChildID, mNewParentID, mOldParentID, mPrevParentPosition, mPrevChildPosition);
+ mpParentItem->removeChild(mpItem);
+
+ mpPrevParentItem->insertChild(mPrevChildPosition, mpItem);
+
+ mpTreeWidgetAliases->setCurrentItem(mpItem);
+}
+
+void MoveAliasCommand::redo()
+{
+ if (!mpEditor) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpHost->getAliasUnit()->reParentAlias(mChildID, mOldParentID, mNewParentID, mParentPosition, mChildPosition);
+ if (mpPrevParentItem) {
+ mpPrevParentItem->removeChild(mpItem);
+ }
+ if (mpParentItem) {
+ const int count = mpParentItem->childCount();
+ mpParentItem->insertChild(count <= 0 ? 0 : count, mpItem);
+ }
+
+ setText(QObject::tr("Move alias"));
+}
+
+ActiveToggleAliasEditedCommand::ActiveToggleAliasEditedCommand(Host* pHost, dlgAliasMainArea* triggersMainArea, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpAliasMainArea = triggersMainArea;
+}
+
+void ActiveToggleAliasEditedCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectAliasByID(mItemID);
+ mpItem = mpTreeWidgetAliases->currentItem();
+ QIcon icon;
+ QString itemDescription;
+
+ mpItemAlias->setIsActive(mPrevAliasToggle);
+
+ if (mpItemAlias->isFolder()) {
+ if (mpItemAlias->isActive()) {
+ icon.addPixmap(QPixmap(qsl(":/icons/folder-violet.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descActiveFolder;
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/folder-violet-locked.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descInactiveFolder;
+ }
+ } else {
+ if (mpItemAlias->isActive()) {
+ itemDescription = descActive;
+ if (mpItemAlias->ancestorsActive()) {
+ icon.addPixmap(QPixmap(qsl(":/icons/tag_checkbox_checked.png")), QIcon::Normal, QIcon::Off);
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/tag_checkbox_checked_grey.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descInactiveParent.arg(itemDescription);
+ }
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/tag_checkbox.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descInactive;
+ }
+ }
+
+ if (!mpItemAlias->state()) {
+ mpItemAlias->setIsActive(false);
+ mpEditor->showError(mpEditor->tr(R"(<p><b>Unable to activate "<tt>%1</tt>"; %2.</b></p>
+ <p><i>You will need to reactivate this after the problem has been corrected.</i></p>)")
+ .arg(mpItemAlias->getName().toHtmlEscaped(), mpItemAlias->getError()));
+ icon.addPixmap(QPixmap(qsl(":/icons/tools-report-bug.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descError;
+ }
+ mpItem->setIcon(0, icon);
+ mpItem->setText(0, mpItemAlias->getName());
+ mpItem->setData(0, Qt::AccessibleDescriptionRole, itemDescription);
+
+ if (mpItem->childCount() > 0) {
+ mpEditor->children_icon_alias(mpItem);
+ }
+}
+
+void ActiveToggleAliasEditedCommand::redo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpEditor->selectAliasByID(mItemID);
+ mpItem = mpTreeWidgetAliases->currentItem();
+ QIcon icon;
+ QString itemDescription;
+ // bool prevTriggerToggle = mpItemTrigger->isActive();
+ mpItemAlias->setIsActive(mAliasToggle);
+
+ if (mpItemAlias->isFolder()) {
+ if (mpItemAlias->isActive()) {
+ icon.addPixmap(QPixmap(qsl(":/icons/folder-violet.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descActiveFolder;
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/folder-violet-locked.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descInactiveFolder;
+ }
+ } else {
+ if (mpItemAlias->isActive()) {
+ itemDescription = descActive;
+ if (mpItemAlias->ancestorsActive()) {
+ icon.addPixmap(QPixmap(qsl(":/icons/tag_checkbox_checked.png")), QIcon::Normal, QIcon::Off);
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/tag_checkbox_checked_grey.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descInactiveParent.arg(itemDescription);
+ }
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/tag_checkbox.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descInactive;
+ }
+ }
+
+ if (!mpItemAlias->state()) {
+ mpItemAlias->setIsActive(false);
+ mpEditor->showError(mpItemAlias
+ ->tr(R"(<p><b>Unable to activate "<tt>%1</tt>"; %2.</b></p>
+ <p><i>You will need to reactivate this after the problem has been corrected.</i></p>)")
+ .arg(mpItemAlias->getName().toHtmlEscaped(), mpItemAlias->getError()));
+ icon.addPixmap(QPixmap(qsl(":/icons/tools-report-bug.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descError;
+ }
+ mpItem->setIcon(0, icon);
+ mpItem->setText(0, mpItemAlias->getName());
+ mpItem->setData(0, Qt::AccessibleDescriptionRole, itemDescription);
+
+ if (mpItem->childCount() > 0) {
+ mpEditor->children_icon_alias(mpItem);
+ }
+ // mpEditor->slot_saveSelectedItem(mpItem);
+ setText(QObject::tr("Edit alias toggle"));
+}
+
+AliasNameTextEditedCommand::AliasNameTextEditedCommand(Host* pHost, dlgAliasMainArea* aliasMainArea, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpAliasMainArea = aliasMainArea;
+}
+
+void AliasNameTextEditedCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectAliasByID(mItemID);
+ mpItem = mpTreeWidgetAliases->currentItem();
+
+ mpAliasMainArea->lineEdit_alias_name->blockSignals(true);
+ mpAliasMainArea->lineEdit_alias_name->setText(mPrevAliasName);
+ mpAliasMainArea->lineEdit_alias_name->blockSignals(false);
+ mpEditor->slot_saveSelectedItem(mpItem);
+}
+
+void AliasNameTextEditedCommand::redo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpEditor->selectAliasByID(mItemID);
+ mpItem = mpTreeWidgetAliases->currentItem();
+
+ mpAliasMainArea->lineEdit_alias_name->blockSignals(true);
+ mpAliasMainArea->lineEdit_alias_name->setText(mAliasName);
+ mpAliasMainArea->lineEdit_alias_name->blockSignals(false);
+ mpEditor->slot_saveSelectedItem(mpItem);
+ setText(QObject::tr("Edit alias name"));
+}
+
+AliasCommandTextEditedCommand::AliasCommandTextEditedCommand(Host* pHost, dlgAliasMainArea* aliasMainArea, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpAliasMainArea = aliasMainArea;
+}
+
+void AliasCommandTextEditedCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectAliasByID(mItemID);
+ mpItem = mpTreeWidgetAliases->currentItem();
+
+ mpAliasMainArea->lineEdit_alias_command->setText(mPrevAliasCommand);
+ mpEditor->slot_saveSelectedItem(mpItem);
+}
+
+void AliasCommandTextEditedCommand::redo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpEditor->selectAliasByID(mItemID);
+ mpItem = mpTreeWidgetAliases->currentItem();
+
+ mpAliasMainArea->lineEdit_alias_command->blockSignals(true);
+ mpAliasMainArea->lineEdit_alias_command->setText(mAliasCommand);
+ mpAliasMainArea->lineEdit_alias_command->blockSignals(false);
+ mpEditor->slot_saveSelectedItem(mpItem);
+ setText(QObject::tr("Edit alias command"));
+}
+
+AliasPatternTextEditedCommand::AliasPatternTextEditedCommand(Host* pHost, dlgAliasMainArea* aliasMainArea, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpAliasMainArea = aliasMainArea;
+}
+
+void AliasPatternTextEditedCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectAliasByID(mItemID);
+ mpItem = mpTreeWidgetAliases->currentItem();
+
+ mpAliasMainArea->lineEdit_alias_pattern->blockSignals(true);
+ mpAliasMainArea->lineEdit_alias_pattern->setText(mPrevAliasPattern);
+ mpAliasMainArea->lineEdit_alias_pattern->blockSignals(false);
+ mpEditor->slot_saveSelectedItem(mpItem);
+}
+
+void AliasPatternTextEditedCommand::redo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpEditor->selectAliasByID(mItemID);
+ mpItem = mpTreeWidgetAliases->currentItem();
+
+ mpAliasMainArea->lineEdit_alias_pattern->blockSignals(true);
+ mpAliasMainArea->lineEdit_alias_pattern->setText(mAliasPattern);
+ mpAliasMainArea->lineEdit_alias_pattern->blockSignals(false);
+ setText(QObject::tr("Edit alias pattern"));
+ mpEditor->slot_saveSelectedItem(mpItem);
+}
+
+AddTimerCommand::AddTimerCommand(Host* pHost, TTreeWidget* treeWidgetTimers, bool isFolder, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpTreeWidgetTimers = treeWidgetTimers;
+ mIsFolder = isFolder;
+}
+
+void AddTimerCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectTimerByID(mItemID);
+ mpItem = mpTreeWidgetTimers->currentItem();
+ const int id = mpItem->data(0, Qt::UserRole).toInt();
+ TTimer* pT = mpHost->getTimerUnit()->getTimer(id);
+ mpItemTimer = pT;
+
+ mpParent = mpItem->parent();
+
+ if (mpParent) {
+ mpParent->removeChild(mpItem);
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ TTimer* pParent = mpHost->getTimerUnit()->getTimer(parentId);
+ if (pParent) {
+ pParent->popChild(mpItemTimer);
+ }
+ } else {
+ qDebug() << "parent is null ";
+ }
+}
+
+void AddTimerCommand::redo()
+{
+ if (!mpEditor) {
+ return;
+ }
+ if (!mpItem) {
+ mpEditor->addTimer(mIsFolder);
+ mpItem = mpTreeWidgetTimers->currentItem();
+ mCurrentIndex = mpTreeWidgetTimers->currentIndex();
+ mSiblingRow = mCurrentIndex.row();
+ mpParent = mpItem->parent();
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ } else {
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ TTimer* pParent = mpHost->getTimerUnit()->getTimer(parentId);
+ mpItemTimer->setTemporary(false);
+ if (mIsFolder) {
+ mpParent->addChild(mpItem);
+ } else {
+ mpParent->insertChild(mSiblingRow, mpItem);
+ }
+ if (pParent) {
+ TTimer* pT = mpHost->getTimerUnit()->getTimer(mItemID);
+ pParent->addChild(pT);
+ }
+ }
+ setText(QObject::tr("Add timer"));
+}
+
+PasteTimerCommand::PasteTimerCommand(Host* pHost, TTreeWidget* treeWidgetTimers, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpTreeWidgetTimers = treeWidgetTimers;
+}
+
+void PasteTimerCommand::undo()
+{
+ if (!mpEditor) {
+ return;
+ }
+
+ mpEditor->selectTimerByID(mImportedItemID);
+ mpItem = mpTreeWidgetTimers->currentItem();
+ TTimer* pT = mpHost->getTimerUnit()->getTimer(mImportedItemID);
+ mpItemTimer = pT;
+ mpParent = mpItem->parent();
+ if (mpParent) {
+ mpParent->removeChild(mpItem);
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ TTimer* pParent = mpHost->getTimerUnit()->getTimer(parentId);
+ if (pParent) {
+ pParent->popChild(mpItemTimer);
+ }
+ } else {
+ qDebug() << "parent is null ";
+ }
+}
+
+void PasteTimerCommand::redo()
+{
+ if (!mpItem) {
+ auto parent = mpTreeWidgetTimers->currentIndex().parent();
+ auto parentRow = parent.row();
+
+ mSiblingRow = mpTreeWidgetTimers->currentIndex().row() + 1;
+ mpItemTimer = mpHost->getTimerUnit()->getTimer(mImportedItemID);
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ mpHost->getTimerUnit()->reParentTimer(mImportedItemID, 0, parentId, parentRow, mSiblingRow);
+
+ mpEditor->selectTimerByID(mImportedItemID);
+ mpItem = mpTreeWidgetTimers->currentItem();
+ mpParent = mpItem->parent();
+ } else {
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ TTimer* pParent = mpHost->getTimerUnit()->getTimer(parentId);
+ const int id = mpItem->data(0, Qt::UserRole).toInt();
+ TTimer* pT = mpHost->getTimerUnit()->getTimer(id);
+ mpItemTimer = pT;
+
+ if (pParent) {
+ mpParent->insertChild(mSiblingRow, mpItem);
+ } else {
+ mpParent->addChild(mpItem);
+ }
+ if (pParent) {
+ pParent->addChild(mpItemTimer);
+ }
+
+ mpEditor->selectTimerByID(id);
+ }
+
+ setText(QObject::tr("Paste timer"));
+}
+
+DeleteTimerCommand::DeleteTimerCommand(Host* pHost, QTreeWidgetItem* pItem, TTreeWidget* treeWidgetTimers, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpItem = pItem;
+ mpTreeWidgetTimers = treeWidgetTimers;
+}
+
+void DeleteTimerCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mpEditor->selectTimerByID(mParentID);
+ auto mParent = mpTreeWidgetTimers->currentItem();
+ mpParent = mParent;
+ if (mpParent) {
+ QList<QTreeWidgetItem*> childList;
+ mpTreeWidgetTimers->getAllChildren(mpItem, childList);
+ if (mpItemTimerList.size() != childList.size()) {
+ return;
+ }
+ for (int i = 0; i < childList.size(); ++i) {
+ mpItemTimerList[i]->setTemporary(false);
+ mpHost->getTimerUnit()->registerTimer(mpItemTimerList[i]);
+ childList[i]->setData(0, Qt::UserRole, mpItemTimerList[i]->getID());
+ }
+ mpParent->insertChild(mSiblingRow, mpItem);
+
+ const int itemId = mpItem->data(0, Qt::UserRole).toInt();
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ mpHost->getTimerUnit()->reParentTimer(itemId, -1, parentId, mParentRow, mSiblingRow);
+ mpEditor->selectTimerByID(itemId);
+ mpItem = mpTreeWidgetTimers->currentItem();
+ } else {
+ qDebug() << "parent is null ";
+ }
+}
+
+void DeleteTimerCommand::redo()
+{
+ if (!mpEditor || !mpHost) {
+ return;
+ }
+ if (mpItem) {
+ auto parent = mCurrentIndex.parent();
+ auto parentRow = parent.row();
+ auto parentId = parent.data(Qt::UserRole).toInt();
+ mParentID = parentId;
+ const int siblingRow = mCurrentIndex.row();
+ mParentRow = parentRow;
+ mSiblingRow = siblingRow;
+ int itemId = mpItem->data(0, Qt::UserRole).toInt();
+ mpParent = mpItem->parent();
+ mpEditor->selectTimerByID(itemId);
+ mpItemTimerList.clear();
+ recurseTimers(mpItem, mpHost);
+ mpEditor->delete_timer();
+ }
+ setText(QObject::tr("Delete timer"));
+}
+
+void DeleteTimerCommand::recurseTimers(QTreeWidgetItem* mpItem, QPointer<Host> mpHost)
+{
+ TTimer* ptr = nullptr;
+ QList<QTreeWidgetItem*> childList;
+ mpTreeWidgetTimers->getAllChildren(mpItem, childList);
+ for (int i = 0; i < childList.size(); ++i) {
+ const int pID = childList[i]->data(0, Qt::UserRole).toInt();
+ TTimer* pChild = mpHost->getTimerUnit()->getTimer(pID);
+ if (pChild->getParent() && mpItemTimerList.size() > 0) {
+ for (int j = 0; j < mpItemTimerList.size(); j++) {
+ if (mpItemTimerList[j]->mID == pChild->getParent()->mID) {
+ ptr = new TTimer(mpItemTimerList[j], mpHost);
+ break;
+ }
+ }
+ } else {
+ ptr = new TTimer(pChild->getName(), pChild->getTime(), mpHost);
+ }
+ ptr->setID(pChild->mID);
+ ptr->setIsFolder(pChild->isFolder());
+ ptr->setIsActive(pChild->isActive());
+ ptr->setName(pChild->getName());
+ ptr->setCommand(pChild->getCommand());
+ ptr->setTime(pChild->getTime());
+ ptr->setTemporary(true);
+ mpItemTimerList.append(ptr);
+ }
+}
+
+MoveTimerCommand::MoveTimerCommand(Host* pHost,
+ TTreeWidget* treeWidgetTimers,
+ int childID,
+ int oldParentID,
+ int newParentID,
+ int parentPosition,
+ int childPosition,
+ int prevParentPosition,
+ int prevChildPosition,
+ QUndoCommand* parent)
+: QUndoCommand(parent), mpHost(pHost)
+{
+ mChildID = childID;
+ mOldParentID = oldParentID;
+ mNewParentID = newParentID;
+ mParentPosition = parentPosition;
+ mChildPosition = childPosition;
+ mPrevParentPosition = prevParentPosition;
+ mPrevChildPosition = prevChildPosition;
+ mpTreeWidgetTimers = treeWidgetTimers;
+}
+
+void MoveTimerCommand::undo()
+{
+ if (!mpHost) {
+ return;
+ }
+
+ mpEditor->selectTimerByID(mItemID);
+ mpItem = mpTreeWidgetTimers->currentItem();
+
+ mpEditor->selectTimerByID(mOldParentID);
+ mpPrevParentItem = mpTreeWidgetTimers->currentItem();
+
+ mpEditor->selectTimerByID(mNewParentID);
+ mpParentItem = mpTreeWidgetTimers->currentItem();
+
+ mpHost->getTimerUnit()->reParentTimer(mChildID, mNewParentID, mOldParentID, mPrevParentPosition, mPrevChildPosition);
+ mpParentItem->removeChild(mpItem);
+
+ mpPrevParentItem->insertChild(mPrevChildPosition, mpItem);
+
+ mpTreeWidgetTimers->setCurrentItem(mpItem);
+}
+
+void MoveTimerCommand::redo()
+{
+ if (!mpEditor) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpHost->getTimerUnit()->reParentTimer(mChildID, mOldParentID, mNewParentID, mParentPosition, mChildPosition);
+ if (mpPrevParentItem) {
+ mpPrevParentItem->removeChild(mpItem);
+ }
+ if (mpParentItem) {
+ const int count = mpParentItem->childCount();
+ mpParentItem->insertChild(count <= 0 ? 0 : count, mpItem);
+ }
+
+ setText(QObject::tr("Move timer"));
+}
+
+ActiveToggleTimerEditedCommand::ActiveToggleTimerEditedCommand(Host* pHost, dlgTimersMainArea* timersMainArea, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpTimersMainArea = timersMainArea;
+}
+
+void ActiveToggleTimerEditedCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectTimerByID(mItemID);
+ mpItem = mpTreeWidgetTimers->currentItem();
+ QIcon icon;
+ QString itemDescription;
+
+ if (!mpItemTimer->isOffsetTimer()) {
+ mpItemTimer->setIsActive(mPrevTimerToggle);
+ } else {
+ mpItemTimer->setShouldBeActive(mPrevTimerToggle);
+ }
+
+ if (mpItemTimer->isFolder()) {
+ // disable or enable all timers in the respective branch
+ // irrespective of the user defined state.
+ if (mpItemTimer->shouldBeActive()) {
+ mpItemTimer->enableTimer(mpItemTimer->getID());
+ } else {
+ mpItemTimer->disableTimer(mpItemTimer->getID());
+ }
+
+ if (mpItemTimer->shouldBeActive()) {
+ itemDescription = descActiveFolder;
+ if (mpItemTimer->ancestorsActive()) {
+ if (!mpItemTimer->mPackageName.isEmpty()) {
+ icon.addPixmap(QPixmap(qsl(":/icons/folder-brown.png")), QIcon::Normal, QIcon::Off);
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/folder-green.png")), QIcon::Normal, QIcon::Off);
+ }
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/folder-grey.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descInactiveParent.arg(itemDescription);
+ }
+ } else {
+ itemDescription = descInactiveFolder;
+ if (mpItemTimer->ancestorsActive()) {
+ if (!mpItemTimer->mPackageName.isEmpty()) {
+ icon.addPixmap(QPixmap(qsl(":/icons/folder-brown-locked.png")), QIcon::Normal, QIcon::Off);
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/folder-green-locked.png")), QIcon::Normal, QIcon::Off);
+ }
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/folder-grey-locked.png")), QIcon::Normal, QIcon::Off);
+ }
+ }
+ } else {
+ if (mpItemTimer->isOffsetTimer()) {
+ // state of offset timers is managed by the trigger engine
+ if (mpItemTimer->shouldBeActive()) {
+ mpItemTimer->enableTimer(mpItemTimer->getID());
+ itemDescription = descActiveOffsetTimer;
+ if (mpItemTimer->ancestorsActive()) {
+ icon.addPixmap(QPixmap(qsl(":/icons/offsettimer-on.png")), QIcon::Normal, QIcon::Off);
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/offsettimer-on-grey.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descInactiveParent.arg(itemDescription);
+ }
+ } else {
+ mpItemTimer->disableTimer(mpItemTimer->getID());
+ itemDescription = descInactiveOffsetTimer;
+ if (mpItemTimer->ancestorsActive()) {
+ icon.addPixmap(QPixmap(qsl(":/icons/offsettimer-off.png")), QIcon::Normal, QIcon::Off);
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/offsettimer-off-grey.png")), QIcon::Normal, QIcon::Off);
+ }
+ }
+ } else {
+ if (mpItemTimer->shouldBeActive()) {
+ mpItemTimer->enableTimer(mpItemTimer->getID());
+ itemDescription = descActive;
+ if (mpItemTimer->ancestorsActive()) {
+ icon.addPixmap(QPixmap(qsl(":/icons/tag_checkbox_checked.png")), QIcon::Normal, QIcon::Off);
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/tag_checkbox_checked_grey.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descInactiveParent.arg(itemDescription);
+ }
+ } else {
+ mpItemTimer->disableTimer(mpItemTimer->getID());
+ icon.addPixmap(QPixmap(qsl(":/icons/tag_checkbox.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descInactive;
+ }
+ }
+ }
+
+ if (!mpItemTimer->state()) {
+ mpItemTimer->setIsActive(false);
+ mpEditor->showError(mpEditor->tr(R"(<p><b>Unable to activate "<tt>%1</tt>": %2.</b></p>
+ <p><i>You will need to reactivate this after the problem has been corrected.</i></p>)")
+ .arg(mpItemTimer->getName().toHtmlEscaped(), mpItemTimer->getError()));
+ icon.addPixmap(QPixmap(qsl(":/icons/tools-report-bug.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descError;
+ }
+ mpItem->setIcon(0, icon);
+ mpItem->setText(0, mpItemTimer->getName());
+ mpItem->setData(0, Qt::AccessibleDescriptionRole, itemDescription);
+
+ if (mpItem->childCount() > 0) {
+ mpEditor->children_icon_timer(mpItem);
+ }
+ // mpEditor->slot_saveSelectedItem(mpItem);
+}
+
+void ActiveToggleTimerEditedCommand::redo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpEditor->selectTimerByID(mItemID);
+ mpItem = mpTreeWidgetTimers->currentItem();
+ QIcon icon;
+ QString itemDescription;
+
+ if (!mpItemTimer->isOffsetTimer()) {
+ mpItemTimer->setIsActive(mTimerToggle);
+ } else {
+ mpItemTimer->setShouldBeActive(mTimerToggle);
+ }
+
+ if (mpItemTimer->isFolder()) {
+ // disable or enable all timers in the respective branch
+ // irrespective of the user defined state.
+ if (mpItemTimer->shouldBeActive()) {
+ mpItemTimer->enableTimer(mpItemTimer->getID());
+ } else {
+ mpItemTimer->disableTimer(mpItemTimer->getID());
+ }
+
+ if (mpItemTimer->shouldBeActive()) {
+ itemDescription = descActiveFolder;
+ if (mpItemTimer->ancestorsActive()) {
+ if (!mpItemTimer->mPackageName.isEmpty()) {
+ icon.addPixmap(QPixmap(qsl(":/icons/folder-brown.png")), QIcon::Normal, QIcon::Off);
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/folder-green.png")), QIcon::Normal, QIcon::Off);
+ }
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/folder-grey.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descInactiveParent.arg(itemDescription);
+ }
+ } else {
+ itemDescription = descInactiveFolder;
+ if (mpItemTimer->ancestorsActive()) {
+ if (!mpItemTimer->mPackageName.isEmpty()) {
+ icon.addPixmap(QPixmap(qsl(":/icons/folder-brown-locked.png")), QIcon::Normal, QIcon::Off);
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/folder-green-locked.png")), QIcon::Normal, QIcon::Off);
+ }
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/folder-grey-locked.png")), QIcon::Normal, QIcon::Off);
+ }
+ }
+ } else {
+ if (mpItemTimer->isOffsetTimer()) {
+ // state of offset timers is managed by the trigger engine
+ if (mpItemTimer->shouldBeActive()) {
+ mpItemTimer->enableTimer(mpItemTimer->getID());
+ itemDescription = descActiveOffsetTimer;
+ if (mpItemTimer->ancestorsActive()) {
+ icon.addPixmap(QPixmap(qsl(":/icons/offsettimer-on.png")), QIcon::Normal, QIcon::Off);
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/offsettimer-on-grey.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descInactiveParent.arg(itemDescription);
+ }
+ } else {
+ mpItemTimer->disableTimer(mpItemTimer->getID());
+ itemDescription = descInactiveOffsetTimer;
+ if (mpItemTimer->ancestorsActive()) {
+ icon.addPixmap(QPixmap(qsl(":/icons/offsettimer-off.png")), QIcon::Normal, QIcon::Off);
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/offsettimer-off-grey.png")), QIcon::Normal, QIcon::Off);
+ }
+ }
+ } else {
+ if (mpItemTimer->shouldBeActive()) {
+ mpItemTimer->enableTimer(mpItemTimer->getID());
+ itemDescription = descActive;
+ if (mpItemTimer->ancestorsActive()) {
+ icon.addPixmap(QPixmap(qsl(":/icons/tag_checkbox_checked.png")), QIcon::Normal, QIcon::Off);
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/tag_checkbox_checked_grey.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descInactiveParent.arg(itemDescription);
+ }
+ } else {
+ mpItemTimer->disableTimer(mpItemTimer->getID());
+ icon.addPixmap(QPixmap(qsl(":/icons/tag_checkbox.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descInactive;
+ }
+ }
+ }
+
+ if (!mpItemTimer->state()) {
+ mpItemTimer->setIsActive(false);
+ mpEditor->showError(mpEditor->tr(R"(<p><b>Unable to activate "<tt>%1</tt>": %2.</b></p>
+ <p><i>You will need to reactivate this after the problem has been corrected.</i></p>)")
+ .arg(mpItemTimer->getName().toHtmlEscaped(), mpItemTimer->getError()));
+ icon.addPixmap(QPixmap(qsl(":/icons/tools-report-bug.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descError;
+ }
+ mpItem->setIcon(0, icon);
+ mpItem->setText(0, mpItemTimer->getName());
+ mpItem->setData(0, Qt::AccessibleDescriptionRole, itemDescription);
+
+ if (mpItem->childCount() > 0) {
+ mpEditor->children_icon_timer(mpItem);
+ }
+ // mpEditor->slot_saveSelectedItem(mpItem);
+ setText(QObject::tr("Edit timer toggle"));
+}
+
+TimerNameTextEditedCommand::TimerNameTextEditedCommand(Host* pHost, dlgTimersMainArea* timersMainArea, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpTimersMainArea = timersMainArea;
+}
+
+void TimerNameTextEditedCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectTimerByID(mItemID);
+ mpItem = mpTreeWidgetTimers->currentItem();
+
+ mpTreeWidgetTimers->setCurrentItem(mpItem);
+ mpTimersMainArea->lineEdit_timer_name->blockSignals(true);
+ mpTimersMainArea->lineEdit_timer_name->setText(mPrevTimerName);
+ mpTimersMainArea->lineEdit_timer_name->blockSignals(false);
+ mpEditor->slot_saveSelectedItem(mpItem);
+}
+
+void TimerNameTextEditedCommand::redo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpEditor->selectTimerByID(mItemID);
+ mpItem = mpTreeWidgetTimers->currentItem();
+ mpTimersMainArea->lineEdit_timer_name->blockSignals(true);
+ mpTimersMainArea->lineEdit_timer_name->setText(mTimerName);
+ mpTimersMainArea->lineEdit_timer_name->blockSignals(false);
+ mpEditor->slot_saveSelectedItem(mpItem);
+ setText(QObject::tr("Edit timer name"));
+}
+
+TimerCommandTextEditedCommand::TimerCommandTextEditedCommand(Host* pHost, dlgTimersMainArea* timersMainArea, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpTimersMainArea = timersMainArea;
+}
+
+void TimerCommandTextEditedCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectTimerByID(mItemID);
+ mpItem = mpTreeWidgetTimers->currentItem();
+ mpTimersMainArea->lineEdit_timer_command->blockSignals(true);
+ mpTimersMainArea->lineEdit_timer_command->setText(mPrevTimerCommand);
+ mpTimersMainArea->lineEdit_timer_command->blockSignals(false);
+}
+
+void TimerCommandTextEditedCommand::redo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpEditor->selectTimerByID(mItemID);
+ mpItem = mpTreeWidgetTimers->currentItem();
+ mpTimersMainArea->lineEdit_timer_command->blockSignals(true);
+ mpTimersMainArea->lineEdit_timer_command->setText(mTimerCommand);
+ mpTimersMainArea->lineEdit_timer_command->blockSignals(false);
+ setText(QObject::tr("Edit timer command"));
+}
+
+TimerHoursTextEditedCommand::TimerHoursTextEditedCommand(Host* pHost, dlgTimersMainArea* timersMainArea, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpTimersMainArea = timersMainArea;
+}
+
+void TimerHoursTextEditedCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectTimerByID(mItemID);
+ mpItem = mpTreeWidgetTimers->currentItem();
+
+ mpTimersMainArea->timeEdit_timer_hours->blockSignals(true);
+ mpTimersMainArea->timeEdit_timer_hours->setTime(QTime(mPrevTimerHours, 0, 0, 0));
+ mpTimersMainArea->timeEdit_timer_hours->blockSignals(false);
+}
+
+void TimerHoursTextEditedCommand::redo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpEditor->selectTimerByID(mItemID);
+ mpItem = mpTreeWidgetTimers->currentItem();
+
+ mpTimersMainArea->timeEdit_timer_hours->blockSignals(true);
+ mpTimersMainArea->timeEdit_timer_hours->setTime(QTime(mTimerHours, 0, 0, 0));
+ mpTimersMainArea->timeEdit_timer_hours->blockSignals(false);
+ setText(QObject::tr("Edit timer hours"));
+}
+
+TimerMinutesTextEditedCommand::TimerMinutesTextEditedCommand(Host* pHost, dlgTimersMainArea* timersMainArea, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpTimersMainArea = timersMainArea;
+}
+
+void TimerMinutesTextEditedCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectTimerByID(mItemID);
+ mpItem = mpTreeWidgetTimers->currentItem();
+
+ mpEditor->slot_timerSelected(mpItem);
+ mpTimersMainArea->timeEdit_timer_minutes->blockSignals(true);
+ mpTimersMainArea->timeEdit_timer_minutes->setTime(QTime(0, mPrevTimerMinutes, 0, 0));
+ mpTimersMainArea->timeEdit_timer_minutes->blockSignals(false);
+}
+
+void TimerMinutesTextEditedCommand::redo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpEditor->selectTimerByID(mItemID);
+ mpItem = mpTreeWidgetTimers->currentItem();
+
+ mpTimersMainArea->timeEdit_timer_minutes->blockSignals(true);
+ mpTimersMainArea->timeEdit_timer_minutes->setTime(QTime(0, mTimerMinutes, 0, 0));
+ mpTimersMainArea->timeEdit_timer_minutes->blockSignals(false);
+ setText(QObject::tr("Edit timer minutes"));
+}
+
+TimerSecondsTextEditedCommand::TimerSecondsTextEditedCommand(Host* pHost, dlgTimersMainArea* timersMainArea, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpTimersMainArea = timersMainArea;
+}
+
+void TimerSecondsTextEditedCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectTimerByID(mItemID);
+ mpItem = mpTreeWidgetTimers->currentItem();
+
+ mpTimersMainArea->timeEdit_timer_seconds->blockSignals(true);
+ mpTimersMainArea->timeEdit_timer_seconds->setTime(QTime(0, 0, mPrevTimerSeconds, 0));
+ mpTimersMainArea->timeEdit_timer_seconds->blockSignals(false);
+}
+
+void TimerSecondsTextEditedCommand::redo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpEditor->selectTimerByID(mItemID);
+ mpItem = mpTreeWidgetTimers->currentItem();
+
+ mpTimersMainArea->timeEdit_timer_seconds->blockSignals(true);
+ mpTimersMainArea->timeEdit_timer_seconds->setTime(QTime(0, 0, mTimerSeconds, 0));
+ mpTimersMainArea->timeEdit_timer_seconds->blockSignals(false);
+ setText(QObject::tr("Edit timer seconds"));
+}
+
+TimerMilliSecondsTextEditedCommand::TimerMilliSecondsTextEditedCommand(Host* pHost, dlgTimersMainArea* timersMainArea, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpTimersMainArea = timersMainArea;
+}
+
+void TimerMilliSecondsTextEditedCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectTimerByID(mItemID);
+ mpItem = mpTreeWidgetTimers->currentItem();
+
+ mpTimersMainArea->timeEdit_timer_msecs->blockSignals(true);
+ mpTimersMainArea->timeEdit_timer_msecs->setTime(QTime(0, 0, 0, mPrevTimerMsecs));
+ mpTimersMainArea->timeEdit_timer_msecs->blockSignals(false);
+}
+
+void TimerMilliSecondsTextEditedCommand::redo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpEditor->selectTimerByID(mItemID);
+ mpItem = mpTreeWidgetTimers->currentItem();
+
+ mpTimersMainArea->timeEdit_timer_msecs->blockSignals(true);
+ mpTimersMainArea->timeEdit_timer_msecs->setTime(QTime(0, 0, 0, mTimerMsecs));
+ mpTimersMainArea->timeEdit_timer_msecs->blockSignals(false);
+ setText(QObject::tr("Edit timer msecs"));
+}
+
+AddScriptCommand::AddScriptCommand(Host* pHost, TTreeWidget* treeWidget_scripts, bool isFolder, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpTreeWidgetScripts = treeWidget_scripts;
+ mIsFolder = isFolder;
+}
+
+void AddScriptCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectScriptByID(mItemID);
+ mpItem = mpTreeWidgetScripts->currentItem();
+ const int id = mpItem->data(0, Qt::UserRole).toInt();
+ TScript* pT = mpHost->getScriptUnit()->getScript(id);
+ mpItemScript = pT;
+
+ mpParent = mpItem->parent();
+
+ if (mpParent) {
+ mpParent->removeChild(mpItem);
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ TScript* pParent = mpHost->getScriptUnit()->getScript(parentId);
+ if (pParent) {
+ pParent->popChild(mpItemScript);
+ }
+ } else {
+ qDebug() << "parent is null ";
+ }
+}
+
+void AddScriptCommand::redo()
+{
+ if (!mpEditor) {
+ return;
+ }
+ if (!mpItem) {
+ mpEditor->addScript(mIsFolder);
+ mpItem = mpTreeWidgetScripts->currentItem();
+ mCurrentIndex = mpTreeWidgetScripts->currentIndex();
+ mSiblingRow = mCurrentIndex.row();
+ mpParent = mpItem->parent();
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ } else {
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ TScript* pParent = mpHost->getScriptUnit()->getScript(parentId);
+
+ if (mIsFolder) {
+ mpParent->addChild(mpItem);
+ } else {
+ mpParent->insertChild(mSiblingRow, mpItem);
+ }
+ if (pParent) {
+ TScript* pT = mpHost->getScriptUnit()->getScript(mItemID);
+ pParent->addChild(mpItemScript);
+ }
+
+ mpEditor->selectScriptByID(mItemID);
+ }
+
+ setText(QObject::tr("Add script"));
+}
+
+PasteScriptCommand::PasteScriptCommand(Host* pHost, TTreeWidget* treeWidgetScripts, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpTreeWidgetScripts = treeWidgetScripts;
+}
+
+void PasteScriptCommand::undo()
+{
+ if (!mpEditor) {
+ return;
+ }
+
+ mpEditor->selectScriptByID(mImportedItemID);
+ mpItem = mpTreeWidgetScripts->currentItem();
+ TScript* pT = mpHost->getScriptUnit()->getScript(mImportedItemID);
+ mpItemScript = pT;
+ mpParent = mpItem->parent();
+ if (mpParent) {
+ mpParent->removeChild(mpItem);
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ TScript* pParent = mpHost->getScriptUnit()->getScript(parentId);
+ if (pParent) {
+ pParent->popChild(mpItemScript);
+ }
+ } else {
+ qDebug() << "parent is null ";
+ }
+}
+
+void PasteScriptCommand::redo()
+{
+ if (!mpItem) {
+ auto parent = mpTreeWidgetScripts->currentIndex().parent();
+ auto parentRow = parent.row();
+
+ mSiblingRow = mpTreeWidgetScripts->currentIndex().row() + 1;
+ mpItemScript = mpHost->getScriptUnit()->getScript(mImportedItemID);
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ mpHost->getScriptUnit()->reParentScript(mImportedItemID, 0, parentId, parentRow, mSiblingRow);
+
+ mpEditor->selectScriptByID(mImportedItemID);
+ mpItem = mpTreeWidgetScripts->currentItem();
+ mpParent = mpItem->parent();
+ } else {
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ TScript* pParent = mpHost->getScriptUnit()->getScript(parentId);
+ const int id = mpItem->data(0, Qt::UserRole).toInt();
+ TScript* pT = mpHost->getScriptUnit()->getScript(id);
+ mpItemScript = pT;
+
+ if (pParent) {
+ mpParent->insertChild(mSiblingRow, mpItem);
+ } else {
+ mpParent->addChild(mpItem);
+ }
+ if (pParent) {
+ pParent->addChild(mpItemScript);
+ }
+
+ mpEditor->selectScriptByID(id);
+ }
+
+ setText(QObject::tr("Paste script"));
+}
+
+DeleteScriptCommand::DeleteScriptCommand(Host* pHost, QTreeWidgetItem* pItem, TTreeWidget* treeWidgetScripts, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpItem = pItem;
+ mpTreeWidgetScripts = treeWidgetScripts;
+}
+
+void DeleteScriptCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mpEditor->selectScriptByID(mParentID);
+ auto mParent = mpTreeWidgetScripts->currentItem();
+ mpParent = mParent;
+ if (mpParent) {
+ QList<QTreeWidgetItem*> childList;
+ mpTreeWidgetScripts->getAllChildren(mpItem, childList);
+ if (mpItemScriptList.size() != childList.size()) {
+ return;
+ }
+ for (int i = 0; i < childList.size(); ++i) {
+ mpItemScriptList[i]->setTemporary(false);
+ mpItemScriptList[i]->registerScript();
+ childList[i]->setData(0, Qt::UserRole, mpItemScriptList[i]->getID());
+ }
+ mpParent->insertChild(mSiblingRow, mpItem);
+
+ const int itemId = mpItem->data(0, Qt::UserRole).toInt();
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ mpHost->getScriptUnit()->reParentScript(itemId, -1, parentId, mParentRow, mSiblingRow);
+ mpEditor->selectScriptByID(itemId);
+ mpItem = mpTreeWidgetScripts->currentItem();
+ } else {
+ qDebug() << "parent is null ";
+ }
+}
+
+void DeleteScriptCommand::redo()
+{
+ if (!mpEditor || !mpHost) {
+ return;
+ }
+ if (mpItem) {
+ auto parent = mCurrentIndex.parent();
+ auto parentRow = parent.row();
+ auto parentId = parent.data(Qt::UserRole).toInt();
+ mParentID = parentId;
+ const int siblingRow = mCurrentIndex.row();
+ mParentRow = parentRow;
+ mSiblingRow = siblingRow;
+ int itemId = mpItem->data(0, Qt::UserRole).toInt();
+ mpParent = mpItem->parent();
+ mpEditor->selectScriptByID(itemId);
+ mpItemScriptList.clear();
+ recurseScripts(mpItem, mpHost);
+ mpEditor->delete_script();
+ }
+ setText(QObject::tr("Delete script"));
+}
+
+void DeleteScriptCommand::recurseScripts(QTreeWidgetItem* mpItem, QPointer<Host> mpHost)
+{
+ TScript* ptr = nullptr;
+ QList<QTreeWidgetItem*> childList;
+ mpTreeWidgetScripts->getAllChildren(mpItem, childList);
+ for (int i = 0; i < childList.size(); ++i) {
+ const int pID = childList[i]->data(0, Qt::UserRole).toInt();
+ TScript* pChild = mpHost->getScriptUnit()->getScript(pID);
+ if (!pChild) {
+ continue;
+ }
+ if (pChild->getParent() && mpItemScriptList.size() > 0) {
+ for (int j = 0; j < mpItemScriptList.size(); j++) {
+ if (mpItemScriptList[j]->mID == pChild->getParent()->mID) {
+ ptr = new TScript(mpItemScriptList[j], mpHost);
+ break;
+ }
+ }
+ } else {
+ ptr = new TScript(pChild->getName(), mpHost);
+ }
+ ptr->setID(pChild->mID);
+ ptr->setIsFolder(pChild->isFolder());
+ ptr->setIsActive(pChild->isActive());
+ ptr->setName(pChild->getName());
+ ptr->setScript(pChild->getScript());
+ ptr->setEventHandlerList(pChild->getEventHandlerList());
+ ptr->setTemporary(true);
+ mpItemScriptList.append(ptr);
+ }
+}
+MoveScriptCommand::MoveScriptCommand(Host* pHost,
+ TTreeWidget* treeWidget_scripts,
+ int childID,
+ int oldParentID,
+ int newParentID,
+ int parentPosition,
+ int childPosition,
+ int prevParentPosition,
+ int prevChildPosition,
+ QUndoCommand* parent)
+: QUndoCommand(parent), mpHost(pHost)
+{
+ mChildID = childID;
+ mOldParentID = oldParentID;
+ mNewParentID = newParentID;
+ mParentPosition = parentPosition;
+ mChildPosition = childPosition;
+ mPrevParentPosition = prevParentPosition;
+ mPrevChildPosition = prevChildPosition;
+ mpTreeWidgetScripts = treeWidget_scripts;
+}
+
+void MoveScriptCommand::undo()
+{
+ if (!mpHost) {
+ return;
+ }
+
+ mpEditor->selectScriptByID(mItemID);
+ mpItem = mpTreeWidgetScripts->currentItem();
+
+ mpEditor->selectScriptByID(mOldParentID);
+ mpPrevParentItem = mpTreeWidgetScripts->currentItem();
+
+ mpEditor->selectScriptByID(mNewParentID);
+ mpParentItem = mpTreeWidgetScripts->currentItem();
+
+ mpHost->getScriptUnit()->reParentScript(mChildID, mNewParentID, mOldParentID, mPrevParentPosition, mPrevChildPosition);
+ mpParentItem->removeChild(mpItem);
+
+ mpPrevParentItem->insertChild(mPrevChildPosition, mpItem);
+
+ mpTreeWidgetScripts->setCurrentItem(mpItem);
+}
+
+void MoveScriptCommand::redo()
+{
+ if (!mpEditor) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpHost->getScriptUnit()->reParentScript(mChildID, mOldParentID, mNewParentID, mParentPosition, mChildPosition);
+ if (mpPrevParentItem) {
+ mpPrevParentItem->removeChild(mpItem);
+ }
+ if (mpParentItem) {
+ const int count = mpParentItem->childCount();
+ mpParentItem->insertChild(count <= 0 ? 0 : count, mpItem);
+ }
+
+ setText(QObject::tr("Move script"));
+}
+
+ActiveToggleScriptEditedCommand::ActiveToggleScriptEditedCommand(Host* pHost, dlgScriptsMainArea* scriptsMainArea, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpScriptsMainArea = scriptsMainArea;
+}
+
+void ActiveToggleScriptEditedCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectScriptByID(mItemID);
+ mpItem = mpTreeWidgetScripts->currentItem();
+ QIcon icon;
+ QString itemDescription;
+
+ mpItemScript->setIsActive(mPrevScriptToggle);
+
+ if (mpItemScript->isFolder()) {
+ if (mpItemScript->isActive()) {
+ icon.addPixmap(QPixmap(qsl(":/icons/folder-violet.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descActiveFolder;
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/folder-violet-locked.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descInactiveFolder;
+ }
+ } else {
+ if (mpItemScript->isActive()) {
+ itemDescription = descActive;
+ if (mpItemScript->ancestorsActive()) {
+ icon.addPixmap(QPixmap(qsl(":/icons/tag_checkbox_checked.png")), QIcon::Normal, QIcon::Off);
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/tag_checkbox_checked_grey.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descInactiveParent.arg(itemDescription);
+ }
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/tag_checkbox.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descInactive;
+ }
+ }
+
+ if (!mpItemScript->state()) {
+ mpItemScript->setIsActive(false);
+ mpEditor->showError(mpEditor->tr(R"(<p><b>Unable to activate "<tt>%1</tt>"; %2.</b></p>
+ <p><i>You will need to reactivate this after the problem has been corrected.</i></p>)")
+ .arg(mpItemScript->getName().toHtmlEscaped(), mpItemScript->getError()));
+ icon.addPixmap(QPixmap(qsl(":/icons/tools-report-bug.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descError;
+ }
+ mpItem->setIcon(0, icon);
+ mpItem->setText(0, mpItemScript->getName());
+ mpItem->setData(0, Qt::AccessibleDescriptionRole, itemDescription);
+
+ if (mpItem->childCount() > 0) {
+ mpEditor->children_icon_alias(mpItem);
+ }
+ // mpEditor->slot_saveSelectedItem(mpItem);
+}
+
+void ActiveToggleScriptEditedCommand::redo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpEditor->selectScriptByID(mItemID);
+ mpItem = mpTreeWidgetScripts->currentItem();
+ QIcon icon;
+ QString itemDescription;
+ // bool prevTriggerToggle = mpItemTrigger->isActive();
+ mpItemScript->setIsActive(mScriptToggle);
+
+ if (mpItemScript->isFolder()) {
+ if (mpItemScript->isActive()) {
+ icon.addPixmap(QPixmap(qsl(":/icons/folder-violet.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descActiveFolder;
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/folder-violet-locked.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descInactiveFolder;
+ }
+ } else {
+ if (mpItemScript->isActive()) {
+ itemDescription = descActive;
+ if (mpItemScript->ancestorsActive()) {
+ icon.addPixmap(QPixmap(qsl(":/icons/tag_checkbox_checked.png")), QIcon::Normal, QIcon::Off);
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/tag_checkbox_checked_grey.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descInactiveParent.arg(itemDescription);
+ }
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/tag_checkbox.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descInactive;
+ }
+ }
+
+ if (!mpItemScript->state()) {
+ mpItemScript->setIsActive(false);
+ mpEditor->showError(mpEditor->tr(R"(<p><b>Unable to activate "<tt>%1</tt>"; %2.</b></p>
+ <p><i>You will need to reactivate this after the problem has been corrected.</i></p>)")
+ .arg(mpItemScript->getName().toHtmlEscaped(), mpItemScript->getError()));
+ icon.addPixmap(QPixmap(qsl(":/icons/tools-report-bug.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descError;
+ }
+ mpItem->setIcon(0, icon);
+ mpItem->setText(0, mpItemScript->getName());
+ mpItem->setData(0, Qt::AccessibleDescriptionRole, itemDescription);
+
+ if (mpItem->childCount() > 0) {
+ mpEditor->children_icon_alias(mpItem);
+ }
+ // mpEditor->slot_saveSelectedItem(mpItem);
+ setText(QObject::tr("Edit script toggle"));
+}
+
+ScriptNameTextEditedCommand::ScriptNameTextEditedCommand(Host* pHost, dlgScriptsMainArea* scriptsMainArea, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpScriptsMainArea = scriptsMainArea;
+}
+
+void ScriptNameTextEditedCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectScriptByID(mItemID);
+ mpItem = mpTreeWidgetScripts->currentItem();
+
+ mpScriptsMainArea->lineEdit_script_name->setText(mPrevScriptName);
+ mpEditor->slot_saveSelectedItem(mpItem);
+}
+
+void ScriptNameTextEditedCommand::redo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpEditor->selectScriptByID(mItemID);
+ mpItem = mpTreeWidgetScripts->currentItem();
+
+ mpScriptsMainArea->lineEdit_script_name->setText(mScriptName);
+ mpEditor->slot_saveSelectedItem(mpItem);
+ setText(QObject::tr("Edit script name"));
+}
+
+ScriptAddHandlerCommand::ScriptAddHandlerCommand(Host* pHost, dlgScriptsMainArea* scriptsMainArea, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpScriptsMainArea = scriptsMainArea;
+}
+
+void ScriptAddHandlerCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mpEditor->selectScriptByID(mItemID);
+ mpItem = mpTreeWidgetScripts->currentItem();
+ auto pItem = new QListWidgetItem;
+ pItem->setText(mPrevScriptEventhandler);
+ mpScriptsMainArea->listWidget_script_registered_event_handlers->takeItem(mRow);
+ mpEditor->slot_saveSelectedItem(mpItem);
+}
+
+void ScriptAddHandlerCommand::redo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpEditor->selectScriptByID(mItemID);
+ mpItem = mpTreeWidgetScripts->currentItem();
+ auto pItem = new QListWidgetItem;
+ pItem->setText(mScriptEventhandler);
+ mpScriptsMainArea->listWidget_script_registered_event_handlers->addItem(pItem);
+ mpWidgetItem = pItem;
+ mRow = mpScriptsMainArea->listWidget_script_registered_event_handlers->row(pItem);
+ mpScriptsMainArea->listWidget_script_registered_event_handlers->setCurrentRow(mRow);
+ mpEditor->slot_saveSelectedItem(mpItem);
+ setText(QObject::tr("Add script handler"));
+}
+
+ScriptRemoveHandlerCommand::ScriptRemoveHandlerCommand(Host* pHost, dlgScriptsMainArea* scriptsMainArea, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpScriptsMainArea = scriptsMainArea;
+}
+
+void ScriptRemoveHandlerCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectScriptByID(mItemID);
+ mpItem = mpTreeWidgetScripts->currentItem();
+ mpScriptsMainArea->listWidget_script_registered_event_handlers->addItem(mpWidgetItem);
+ mpEditor->slot_saveSelectedItem(mpItem);
+}
+
+void ScriptRemoveHandlerCommand::redo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpEditor->selectScriptByID(mItemID);
+ mpItem = mpTreeWidgetScripts->currentItem();
+
+ mpWidgetItem = mpScriptsMainArea->listWidget_script_registered_event_handlers->takeItem(mRow);
+ mpEditor->slot_saveSelectedItem(mpItem);
+ setText(QObject::tr("Remove script handler"));
+}
+
+AddKeyCommand::AddKeyCommand(Host* pHost, TTreeWidget* treeWidget_keys, bool isFolder, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpTreeWidgetKeys = treeWidget_keys;
+ mIsFolder = isFolder;
+}
+
+void AddKeyCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectKeyByID(mItemID);
+ mpItem = mpTreeWidgetKeys->currentItem();
+
+ mpParent = mpItem->parent();
+
+ if (mpParent) {
+ mpParent->removeChild(mpItem);
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ TKey* pParent = mpHost->getKeyUnit()->getKey(parentId);
+ if (pParent) {
+ TKey* pT = mpHost->getKeyUnit()->getKey(mItemID);
+ pParent->popChild(pT);
+ }
+ } else {
+ qDebug() << "parent is null ";
+ }
+}
+
+void AddKeyCommand::redo()
+{
+ if (!mpEditor) {
+ return;
+ }
+ if (!mpItem) {
+ mpEditor->addKey(mIsFolder);
+ mpItem = mpTreeWidgetKeys->currentItem();
+ mCurrentIndex = mpTreeWidgetKeys->currentIndex();
+ mSiblingRow = mCurrentIndex.row();
+ mpParent = mpItem->parent();
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ } else {
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ TKey* pParent = mpHost->getKeyUnit()->getKey(parentId);
+ if (mIsFolder) {
+ mpParent->addChild(mpItem);
+ } else {
+ mpParent->insertChild(mSiblingRow, mpItem);
+ }
+ if (pParent) {
+ TKey* pT = mpHost->getKeyUnit()->getKey(mItemID);
+ pParent->addChild(pT);
+ }
+ }
+
+ setText(QObject::tr("Add key"));
+}
+
+PasteKeyCommand::PasteKeyCommand(Host* pHost, TTreeWidget* treeWidgetKeys, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpTreeWidgetKeys = treeWidgetKeys;
+}
+
+void PasteKeyCommand::undo()
+{
+ if (!mpEditor) {
+ return;
+ }
+
+ mpEditor->selectKeyByID(mImportedItemID);
+ mpItem = mpTreeWidgetKeys->currentItem();
+ TKey* pT = mpHost->getKeyUnit()->getKey(mImportedItemID);
+ mpItemKey = pT;
+ mpParent = mpItem->parent();
+ if (mpParent) {
+ mpParent->removeChild(mpItem);
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ TKey* pParent = mpHost->getKeyUnit()->getKey(parentId);
+ if (pParent) {
+ pParent->popChild(mpItemKey);
+ }
+ } else {
+ qDebug() << "parent is null ";
+ }
+}
+
+void PasteKeyCommand::redo()
+{
+ if (!mpItem) {
+ auto parent = mpTreeWidgetKeys->currentIndex().parent();
+ auto parentRow = parent.row();
+
+ mSiblingRow = mpTreeWidgetKeys->currentIndex().row() + 1;
+ mpItemKey = mpHost->getKeyUnit()->getKey(mImportedItemID);
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ mpHost->getKeyUnit()->reParentKey(mImportedItemID, 0, parentId, parentRow, mSiblingRow);
+
+ mpEditor->selectKeyByID(mImportedItemID);
+ mpItem = mpTreeWidgetKeys->currentItem();
+ mpParent = mpItem->parent();
+ } else {
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ TKey* pParent = mpHost->getKeyUnit()->getKey(parentId);
+ const int id = mpItem->data(0, Qt::UserRole).toInt();
+ TKey* pT = mpHost->getKeyUnit()->getKey(id);
+ mpItemKey = pT;
+
+ if (pParent) {
+ mpParent->insertChild(mSiblingRow, mpItem);
+ } else {
+ mpParent->addChild(mpItem);
+ }
+ if (pParent) {
+ pParent->addChild(mpItemKey);
+ }
+
+ mpEditor->selectKeyByID(id);
+ }
+
+ setText(QObject::tr("Paste key"));
+}
+
+DeleteKeyCommand::DeleteKeyCommand(Host* pHost, QTreeWidgetItem* pItem, TTreeWidget* treeWidget_keys, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpItem = pItem;
+ mpTreeWidgetKeys = treeWidget_keys;
+}
+
+void DeleteKeyCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mpEditor->selectKeyByID(mParentID);
+ auto mParent = mpTreeWidgetKeys->currentItem();
+ mpParent = mParent;
+ if (mpParent) {
+ QList<QTreeWidgetItem*> childList;
+ mpTreeWidgetKeys->getAllChildren(mpItem, childList);
+ if (mpItemKeyList.size() != childList.size()) {
+ return;
+ }
+ for (int i = 0; i < childList.size(); ++i) {
+ mpItemKeyList[i]->setTemporary(false);
+ mpHost->getKeyUnit()->registerKey(mpItemKeyList[i]);
+ childList[i]->setData(0, Qt::UserRole, mpItemKeyList[i]->getID());
+ }
+ mpParent->insertChild(mSiblingRow, mpItem);
+
+ const int itemId = mpItem->data(0, Qt::UserRole).toInt();
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ mpHost->getKeyUnit()->reParentKey(itemId, -1, parentId, mParentRow, mSiblingRow);
+ mpEditor->selectKeyByID(itemId);
+ mpItem = mpTreeWidgetKeys->currentItem();
+ } else {
+ qDebug() << "parent is null ";
+ }
+}
+
+void DeleteKeyCommand::redo()
+{
+ if (!mpEditor || !mpHost) {
+ return;
+ }
+ if (mpItem) {
+ auto parent = mCurrentIndex.parent();
+ auto parentRow = parent.row();
+ auto parentId = parent.data(Qt::UserRole).toInt();
+ mParentID = parentId;
+ const int siblingRow = mCurrentIndex.row();
+ mParentRow = parentRow;
+ mSiblingRow = siblingRow;
+ int itemId = mpItem->data(0, Qt::UserRole).toInt();
+ mpParent = mpItem->parent();
+ mpEditor->selectKeyByID(itemId);
+ mpItemKeyList.clear();
+ recurseKeys(mpItem, mpHost);
+ mpEditor->delete_key();
+ }
+ setText(QObject::tr("Delete key"));
+}
+
+void DeleteKeyCommand::recurseKeys(QTreeWidgetItem* mpItem, QPointer<Host> mpHost)
+{
+ TKey* ptr = nullptr;
+ QList<QTreeWidgetItem*> childList;
+ mpTreeWidgetKeys->getAllChildren(mpItem, childList);
+ for (int i = 0; i < childList.size(); ++i) {
+ const int pID = childList[i]->data(0, Qt::UserRole).toInt();
+ TKey* pChild = mpHost->getKeyUnit()->getKey(pID);
+ if (pChild->getParent() && mpItemKeyList.size() > 0) {
+ for (int j = 0; j < mpItemKeyList.size(); j++) {
+ if (mpItemKeyList[j]->mID == pChild->getParent()->mID) {
+ ptr = new TKey(mpItemKeyList[j], mpHost);
+ break;
+ }
+ }
+ } else {
+ ptr = new TKey(pChild->getName(), mpHost);
+ }
+ ptr->setID(pChild->mID);
+ ptr->setIsFolder(pChild->isFolder());
+ ptr->setIsActive(pChild->isActive());
+ ptr->setName(pChild->getName());
+ ptr->setCommand(pChild->getCommand());
+ ptr->setKeyCode(pChild->getKeyCode());
+ ptr->setKeyModifiers(pChild->getKeyModifiers());
+ ptr->setScript(pChild->getScript());
+ ptr->setTemporary(true);
+ mpItemKeyList.append(ptr);
+ }
+}
+
+MoveKeyCommand::MoveKeyCommand(Host* pHost,
+ TTreeWidget* treeWidget_keys,
+ int childID,
+ int oldParentID,
+ int newParentID,
+ int parentPosition,
+ int childPosition,
+ int prevParentPosition,
+ int prevChildPosition,
+ QUndoCommand* parent)
+: QUndoCommand(parent), mpHost(pHost)
+{
+ mChildID = childID;
+ mOldParentID = oldParentID;
+ mNewParentID = newParentID;
+ mParentPosition = parentPosition;
+ mChildPosition = childPosition;
+ mPrevParentPosition = prevParentPosition;
+ mPrevChildPosition = prevChildPosition;
+ mpTreeWidgetKeys = treeWidget_keys;
+}
+
+void MoveKeyCommand::undo()
+{
+ if (!mpHost) {
+ return;
+ }
+
+ mpEditor->selectKeyByID(mItemID);
+ mpItem = mpTreeWidgetKeys->currentItem();
+
+ mpEditor->selectKeyByID(mOldParentID);
+ mpPrevParentItem = mpTreeWidgetKeys->currentItem();
+
+ mpEditor->selectKeyByID(mNewParentID);
+ mpParentItem = mpTreeWidgetKeys->currentItem();
+
+ mpHost->getKeyUnit()->reParentKey(mChildID, mNewParentID, mOldParentID, mPrevParentPosition, mPrevChildPosition);
+ mpParentItem->removeChild(mpItem);
+
+ mpPrevParentItem->insertChild(mPrevChildPosition, mpItem);
+
+ mpTreeWidgetKeys->setCurrentItem(mpItem);
+}
+
+void MoveKeyCommand::redo()
+{
+ if (!mpEditor) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpHost->getKeyUnit()->reParentKey(mChildID, mOldParentID, mNewParentID, mParentPosition, mChildPosition);
+ if (mpPrevParentItem) {
+ mpPrevParentItem->removeChild(mpItem);
+ }
+ if (mpParentItem) {
+ const int count = mpParentItem->childCount();
+ mpParentItem->insertChild(count <= 0 ? 0 : count, mpItem);
+ }
+
+ setText(QObject::tr("Move key"));
+}
+
+ActiveToggleKeyEditedCommand::ActiveToggleKeyEditedCommand(Host* pHost, dlgKeysMainArea* keysMainArea, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpKeysMainArea = keysMainArea;
+}
+
+void ActiveToggleKeyEditedCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectKeyByID(mItemID);
+ mpItem = mpTreeWidgetKeys->currentItem();
+ QIcon icon;
+ QString itemDescription;
+
+ mpItemKey->setIsActive(mPrevKeyToggle);
+
+ if (mpItemKey->isFolder()) {
+ if (mpItemKey->isActive()) {
+ icon.addPixmap(QPixmap(qsl(":/icons/folder-violet.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descActiveFolder;
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/folder-violet-locked.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descInactiveFolder;
+ }
+ } else {
+ if (mpItemKey->isActive()) {
+ itemDescription = descActive;
+ if (mpItemKey->ancestorsActive()) {
+ icon.addPixmap(QPixmap(qsl(":/icons/tag_checkbox_checked.png")), QIcon::Normal, QIcon::Off);
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/tag_checkbox_checked_grey.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descInactiveParent.arg(itemDescription);
+ }
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/tag_checkbox.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descInactive;
+ }
+ }
+
+ if (!mpItemKey->state()) {
+ mpItemKey->setIsActive(false);
+ mpEditor->showError(mpEditor->tr(R"(<p><b>Unable to activate "<tt>%1</tt>"; %2.</b></p>
+ <p><i>You will need to reactivate this after the problem has been corrected.</i></p>)")
+ .arg(mpItemKey->getName().toHtmlEscaped(), mpItemKey->getError()));
+ icon.addPixmap(QPixmap(qsl(":/icons/tools-report-bug.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descError;
+ }
+ mpItem->setIcon(0, icon);
+ mpItem->setText(0, mpItemKey->getName());
+ mpItem->setData(0, Qt::AccessibleDescriptionRole, itemDescription);
+
+ if (mpItem->childCount() > 0) {
+ mpEditor->children_icon_alias(mpItem);
+ }
+ // mpEditor->slot_saveSelectedItem(mpItem);
+}
+
+void ActiveToggleKeyEditedCommand::redo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpEditor->selectKeyByID(mItemID);
+ mpItem = mpTreeWidgetKeys->currentItem();
+ QIcon icon;
+ QString itemDescription;
+ // bool prevTriggerToggle = mpItemTrigger->isActive();
+ mpItemKey->setIsActive(mKeyToggle);
+
+ if (mpItemKey->isFolder()) {
+ if (mpItemKey->isActive()) {
+ icon.addPixmap(QPixmap(qsl(":/icons/folder-violet.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descActiveFolder;
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/folder-violet-locked.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descInactiveFolder;
+ }
+ } else {
+ if (mpItemKey->isActive()) {
+ itemDescription = descActive;
+ if (mpItemKey->ancestorsActive()) {
+ icon.addPixmap(QPixmap(qsl(":/icons/tag_checkbox_checked.png")), QIcon::Normal, QIcon::Off);
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/tag_checkbox_checked_grey.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descInactiveParent.arg(itemDescription);
+ }
+ } else {
+ icon.addPixmap(QPixmap(qsl(":/icons/tag_checkbox.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descInactive;
+ }
+ }
+
+ if (!mpItemKey->state()) {
+ mpItemKey->setIsActive(false);
+ mpEditor->showError(mpEditor->tr(R"(<p><b>Unable to activate "<tt>%1</tt>"; %2.</b></p>
+ <p><i>You will need to reactivate this after the problem has been corrected.</i></p>)")
+ .arg(mpItemKey->getName().toHtmlEscaped(), mpItemKey->getError()));
+ icon.addPixmap(QPixmap(qsl(":/icons/tools-report-bug.png")), QIcon::Normal, QIcon::Off);
+ itemDescription = descError;
+ }
+ mpItem->setIcon(0, icon);
+ mpItem->setText(0, mpItemKey->getName());
+ mpItem->setData(0, Qt::AccessibleDescriptionRole, itemDescription);
+
+ if (mpItem->childCount() > 0) {
+ mpEditor->children_icon_alias(mpItem);
+ }
+ // mpEditor->slot_saveSelectedItem(mpItem);
+ setText(QObject::tr("Edit key toggle"));
+}
+
+KeyNameTextEditedCommand::KeyNameTextEditedCommand(Host* pHost, dlgKeysMainArea* keysMainArea, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpKeysMainArea = keysMainArea;
+}
+
+void KeyNameTextEditedCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectKeyByID(mItemID);
+ mpItem = mpTreeWidgetKeys->currentItem();
+
+ mpKeysMainArea->lineEdit_key_name->blockSignals(true);
+ mpKeysMainArea->lineEdit_key_name->setText(mPrevKeyName);
+ mpKeysMainArea->lineEdit_key_name->blockSignals(false);
+ mpEditor->slot_saveSelectedItem(mpItem);
+}
+
+void KeyNameTextEditedCommand::redo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpEditor->selectKeyByID(mItemID);
+ mpItem = mpTreeWidgetKeys->currentItem();
+
+ mpKeysMainArea->lineEdit_key_name->blockSignals(true);
+ mpKeysMainArea->lineEdit_key_name->setText(mKeyName);
+ mpKeysMainArea->lineEdit_key_name->blockSignals(false);
+ mpEditor->slot_saveSelectedItem(mpItem);
+ setText(QObject::tr("Edit key name"));
+}
+
+KeyCommandTextEditedCommand::KeyCommandTextEditedCommand(Host* pHost, dlgKeysMainArea* keysMainArea, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpKeysMainArea = keysMainArea;
+}
+
+void KeyCommandTextEditedCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectKeyByID(mItemID);
+ mpItem = mpTreeWidgetKeys->currentItem();
+
+ mpKeysMainArea->lineEdit_key_command->blockSignals(true);
+ mpKeysMainArea->lineEdit_key_command->setText(mPrevKeyCommand);
+ mpKeysMainArea->lineEdit_key_command->blockSignals(false);
+ mpEditor->slot_saveSelectedItem(mpItem);
+}
+
+void KeyCommandTextEditedCommand::redo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpEditor->selectKeyByID(mItemID);
+ mpItem = mpTreeWidgetKeys->currentItem();
+
+ mpKeysMainArea->lineEdit_key_command->blockSignals(true);
+ mpKeysMainArea->lineEdit_key_command->setText(mKeyCommand);
+ mpKeysMainArea->lineEdit_key_command->blockSignals(false);
+ mpEditor->slot_saveSelectedItem(mpItem);
+ setText(QObject::tr("Edit key command"));
+}
+
+KeyGrabTextEditedCommand::KeyGrabTextEditedCommand(Host* pHost, dlgKeysMainArea* keysMainArea, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpKeysMainArea = keysMainArea;
+}
+
+void KeyGrabTextEditedCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectKeyByID(mItemID);
+ mpItem = mpTreeWidgetKeys->currentItem();
+
+ const int triggerID = mpItem->data(0, Qt::UserRole).toInt();
+ TKey* pT = mpHost->getKeyUnit()->getKey(triggerID);
+ if (pT) {
+ pT->setKeyCode(mPrevKey);
+ pT->setKeyModifiers(mPrevModifier);
+ }
+ mpKeysMainArea->lineEdit_key_binding->blockSignals(true);
+ mpKeysMainArea->lineEdit_key_binding->setText(mPrevKeyName);
+ mpKeysMainArea->lineEdit_key_binding->blockSignals(false);
+ mpEditor->slot_saveSelectedItem(mpItem);
+}
+
+void KeyGrabTextEditedCommand::redo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpEditor->selectKeyByID(mItemID);
+ mpItem = mpTreeWidgetKeys->currentItem();
+
+ TKey* pT = mpHost->getKeyUnit()->getKey(mItemID);
+ if (pT) {
+ mPrevKey = pT->getKeyCode();
+ mPrevModifier = pT->getKeyModifiers();
+ pT->setKeyCode(mKey);
+ pT->setKeyModifiers(mModifier);
+ }
+ mpKeysMainArea->lineEdit_key_binding->blockSignals(true);
+ mpKeysMainArea->lineEdit_key_binding->setText(mKeyName);
+ mpKeysMainArea->lineEdit_key_binding->blockSignals(false);
+ mpEditor->slot_saveSelectedItem(mpItem);
+ setText(QObject::tr("Edit key modifer"));
+}
+
+AddActionCommand::AddActionCommand(Host* pHost, TTreeWidget* treeWidget_actions, bool isFolder, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpTreeWidgetActions = treeWidget_actions;
+ mIsFolder = isFolder;
+}
+
+void AddActionCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectActionByID(mItemID);
+ mpItem = mpTreeWidgetActions->currentItem();
+ const int id = mpItem->data(0, Qt::UserRole).toInt();
+ TAction* pT = mpHost->getActionUnit()->getAction(id);
+ mpItemAction = pT;
+
+ mpParent = mpItem->parent();
+
+ if (mpParent) {
+ mpParent->removeChild(mpItem);
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ TAction* pParent = mpHost->getActionUnit()->getAction(parentId);
+ if (pParent) {
+ pParent->popChild(mpItemAction);
+ }
+ } else {
+ qDebug() << "parent is null ";
+ }
+}
+
+void AddActionCommand::redo()
+{
+ if (!mpEditor) {
+ return;
+ }
+ if (!mpItem) {
+ mpEditor->addAction(mIsFolder);
+ mpItem = mpTreeWidgetActions->currentItem();
+ mCurrentIndex = mpTreeWidgetActions->currentIndex();
+ mSiblingRow = mCurrentIndex.row();
+ mpParent = mpItem->parent();
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ } else {
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ TAction* pParent = mpHost->getActionUnit()->getAction(parentId);
+ if (mIsFolder) {
+ mpParent->addChild(mpItem);
+ } else {
+ mpParent->insertChild(mSiblingRow, mpItem);
+ }
+ if (pParent) {
+ TAction* pT = mpHost->getActionUnit()->getAction(mItemID);
+ pParent->addChild(pT);
+ }
+
+ mpEditor->selectActionByID(mItemID);
+ }
+
+ setText(QObject::tr("Add action"));
+}
+
+PasteActionCommand::PasteActionCommand(Host* pHost, TTreeWidget* treeWidgetActions, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpTreeWidgetActions = treeWidgetActions;
+}
+
+void PasteActionCommand::undo()
+{
+ if (!mpEditor) {
+ return;
+ }
+
+ mpEditor->selectActionByID(mImportedItemID);
+ mpItem = mpTreeWidgetActions->currentItem();
+ TAction* pT = mpHost->getActionUnit()->getAction(mImportedItemID);
+ mpItemAction = pT;
+ mpParent = mpItem->parent();
+ if (mpParent) {
+ mpParent->removeChild(mpItem);
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ TAction* pParent = mpHost->getActionUnit()->getAction(parentId);
+ if (pParent) {
+ pParent->popChild(mpItemAction);
+ }
+ } else {
+ qDebug() << "parent is null ";
+ }
+}
+
+void PasteActionCommand::redo()
+{
+ if (!mpItem) {
+ auto parent = mpTreeWidgetActions->currentIndex().parent();
+ auto parentRow = parent.row();
+
+ mSiblingRow = mpTreeWidgetActions->currentIndex().row() + 1;
+ mpItemAction = mpHost->getActionUnit()->getAction(mImportedItemID);
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ mpHost->getActionUnit()->reParentAction(mImportedItemID, 0, parentId, parentRow, mSiblingRow);
+
+ mpEditor->selectActionByID(mImportedItemID);
+ mpItem = mpTreeWidgetActions->currentItem();
+ mpParent = mpItem->parent();
+ } else {
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ TAction* pParent = mpHost->getActionUnit()->getAction(parentId);
+ const int id = mpItem->data(0, Qt::UserRole).toInt();
+ TAction* pT = mpHost->getActionUnit()->getAction(id);
+ mpItemAction = pT;
+
+ if (pParent) {
+ mpParent->insertChild(mSiblingRow, mpItem);
+ } else {
+ mpParent->addChild(mpItem);
+ }
+ if (pParent) {
+ pParent->addChild(mpItemAction);
+ }
+
+ mpEditor->selectActionByID(id);
+ }
+
+ setText(QObject::tr("Paste action"));
+}
+
+DeleteActionCommand::DeleteActionCommand(Host* pHost, QTreeWidgetItem* pItem, TTreeWidget* treeWidget_actions, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpItem = pItem;
+ mpTreeWidgetActions = treeWidget_actions;
+}
+
+void DeleteActionCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mpEditor->selectActionByID(mParentID);
+ auto mParent = mpTreeWidgetActions->currentItem();
+ mpParent = mParent;
+ if (mpParent) {
+ QList<QTreeWidgetItem*> childList;
+ mpTreeWidgetActions->getAllChildren(mpItem, childList);
+ if (mpItemActionList.size() != childList.size()) {
+ return;
+ }
+ for (int i = 0; i < childList.size(); ++i) {
+ mpItemActionList[i]->setTemporary(false);
+ mpHost->getActionUnit()->registerAction(mpItemActionList[i]);
+ childList[i]->setData(0, Qt::UserRole, mpItemActionList[i]->getID());
+ }
+ mpParent->insertChild(mSiblingRow, mpItem);
+
+ const int itemId = mpItem->data(0, Qt::UserRole).toInt();
+ const int parentId = mpParent->data(0, Qt::UserRole).toInt();
+ mpHost->getActionUnit()->reParentAction(itemId, -1, parentId, mParentRow, mSiblingRow);
+ mpEditor->selectActionByID(itemId);
+ mpItem = mpTreeWidgetActions->currentItem();
+ } else {
+ qDebug() << "parent is null ";
+ }
+}
+
+void DeleteActionCommand::redo()
+{
+ if (!mpEditor || !mpHost) {
+ return;
+ }
+ if (mpItem) {
+ auto parent = mCurrentIndex.parent();
+ auto parentRow = parent.row();
+ auto parentId = parent.data(Qt::UserRole).toInt();
+ mParentID = parentId;
+ const int siblingRow = mCurrentIndex.row();
+ mParentRow = parentRow;
+ mSiblingRow = siblingRow;
+ int itemId = mpItem->data(0, Qt::UserRole).toInt();
+ mpParent = mpItem->parent();
+ mpEditor->selectActionByID(itemId);
+ mpItemActionList.clear();
+ recurseActions(mpItem, mpHost);
+ mpEditor->delete_action();
+ }
+ setText(QObject::tr("Delete action"));
+}
+
+void DeleteActionCommand::recurseActions(QTreeWidgetItem* mpItem, QPointer<Host> mpHost)
+{
+ TAction* ptr = nullptr;
+ QList<QTreeWidgetItem*> childList;
+ mpTreeWidgetActions->getAllChildren(mpItem, childList);
+ for (int i = 0; i < childList.size(); ++i) {
+ const int pID = childList[i]->data(0, Qt::UserRole).toInt();
+ TAction* pChild = mpHost->getActionUnit()->getAction(pID);
+ if (pChild->getParent() && mpItemActionList.size() > 0) {
+ for (int j = 0; j < mpItemActionList.size(); j++) {
+ if (mpItemActionList[j]->mID == pChild->getParent()->mID) {
+ ptr = new TAction(mpItemActionList[j], mpHost);
+ break;
+ }
+ }
+ } else {
+ ptr = new TAction(pChild->getName(), mpHost);
+ }
+ ptr->setID(pChild->mID);
+ ptr->setIsFolder(pChild->isFolder());
+ ptr->setIsActive(pChild->isActive());
+ ptr->setName(pChild->getName());
+ ptr->setButtonRotation(pChild->getButtonRotation());
+ ptr->setIsPushDownButton(pChild->isPushDownButton());
+ ptr->setCommandButtonUp(pChild->getCommandButtonUp());
+ ptr->setCommandButtonDown(pChild->getCommandButtonDown());
+ ptr->setScript(pChild->getScript());
+ ptr->setTemporary(true);
+ mpItemActionList.append(ptr);
+ }
+}
+
+MoveActionCommand::MoveActionCommand(Host* pHost,
+ TTreeWidget* treeWidget_actions,
+ int childID,
+ int oldParentID,
+ int newParentID,
+ int parentPosition,
+ int childPosition,
+ int prevParentPosition,
+ int prevChildPosition,
+ QUndoCommand* parent)
+: QUndoCommand(parent), mpHost(pHost)
+{
+ mChildID = childID;
+ mOldParentID = oldParentID;
+ mNewParentID = newParentID;
+ mParentPosition = parentPosition;
+ mChildPosition = childPosition;
+ mPrevParentPosition = prevParentPosition;
+ mPrevChildPosition = prevChildPosition;
+ mpTreeWidgetActions = treeWidget_actions;
+}
+
+void MoveActionCommand::undo()
+{
+ if (!mpHost) {
+ return;
+ }
+
+ mpEditor->selectActionByID(mItemID);
+ mpItem = mpTreeWidgetActions->currentItem();
+
+ mpEditor->selectActionByID(mOldParentID);
+ mpPrevParentItem = mpTreeWidgetActions->currentItem();
+
+ mpEditor->selectActionByID(mNewParentID);
+ mpParentItem = mpTreeWidgetActions->currentItem();
+
+ mpHost->getActionUnit()->reParentAction(mChildID, mNewParentID, mOldParentID, mPrevParentPosition, mPrevChildPosition);
+ mpParentItem->removeChild(mpItem);
+
+ mpPrevParentItem->insertChild(mPrevChildPosition, mpItem);
+
+ mpTreeWidgetActions->setCurrentItem(mpItem);
+}
+
+void MoveActionCommand::redo()
+{
+ if (!mpEditor) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpHost->getActionUnit()->reParentAction(mChildID, mOldParentID, mNewParentID, mParentPosition, mChildPosition);
+ if (mpPrevParentItem) {
+ mpPrevParentItem->removeChild(mpItem);
+ }
+ if (mpParentItem) {
+ const int count = mpParentItem->childCount();
+ mpParentItem->insertChild(count <= 0 ? 0 : count, mpItem);
+ }
+ mpHost->getActionUnit()->updateToolbar();
+
+ setText(QObject::tr("Move action"));
+}
+
+ActiveToggleActionEditedCommand::ActiveToggleActionEditedCommand(Host* pHost, dlgActionMainArea* actionsMainArea, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpActionsMainArea = actionsMainArea;
+}
+
+void ActiveToggleActionEditedCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectActionByID(mItemID);
+ mpItem = mpTreeWidgetActions->currentItem();
+
+ mpItemAction->setIsActive(mPrevActionToggle);
+ mpItemAction->setDataChanged();
+ mpEditor->slot_saveSelectedItem(mpItem);
+}
+
+void ActiveToggleActionEditedCommand::redo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpEditor->selectActionByID(mItemID);
+ mpItem = mpTreeWidgetActions->currentItem();
+
+ mpItemAction->setIsActive(mActionToggle);
+ mpItemAction->setDataChanged();
+ mpEditor->slot_saveSelectedItem(mpItem);
+ setText(QObject::tr("Edit action toggle"));
+}
+
+ActionNameTextEditedCommand::ActionNameTextEditedCommand(Host* pHost, dlgActionMainArea* actionsMainArea, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpActionsMainArea = actionsMainArea;
+}
+
+void ActionNameTextEditedCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectActionByID(mItemID);
+ mpItem = mpTreeWidgetActions->currentItem();
+
+ mpActionsMainArea->lineEdit_action_name->blockSignals(true);
+ mpActionsMainArea->lineEdit_action_name->setText(mPrevActionName);
+ mpActionsMainArea->lineEdit_action_name->blockSignals(false);
+}
+
+void ActionNameTextEditedCommand::redo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpEditor->selectActionByID(mItemID);
+ mpItem = mpTreeWidgetActions->currentItem();
+
+ mpActionsMainArea->lineEdit_action_name->blockSignals(true);
+ mpActionsMainArea->lineEdit_action_name->setText(mActionName);
+ mpActionsMainArea->lineEdit_action_name->blockSignals(false);
+ setText(QObject::tr("Edit action name"));
+}
+
+ActionButtonRotationEditedCommand::ActionButtonRotationEditedCommand(Host* pHost, dlgActionMainArea* actionsMainArea, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpActionsMainArea = actionsMainArea;
+}
+
+void ActionButtonRotationEditedCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectActionByID(mItemID);
+ mpItem = mpTreeWidgetActions->currentItem();
+
+ mpActionsMainArea->comboBox_action_button_rotation->blockSignals(true);
+ mpActionsMainArea->comboBox_action_button_rotation->setCurrentIndex(mPrevRotation);
+ mpActionsMainArea->comboBox_action_button_rotation->blockSignals(false);
+}
+
+void ActionButtonRotationEditedCommand::redo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpEditor->selectActionByID(mItemID);
+ mpItem = mpTreeWidgetActions->currentItem();
+
+ mpActionsMainArea->comboBox_action_button_rotation->blockSignals(true);
+ mpActionsMainArea->comboBox_action_button_rotation->setCurrentIndex(mRotation);
+ mpActionsMainArea->comboBox_action_button_rotation->blockSignals(false);
+ setText(QObject::tr("Edit action rotation"));
+}
+
+ActionButtonCheckboxEditedCommand::ActionButtonCheckboxEditedCommand(Host* pHost, dlgActionMainArea* actionsMainArea, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpActionsMainArea = actionsMainArea;
+}
+
+void ActionButtonCheckboxEditedCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectActionByID(mItemID);
+ mpItem = mpTreeWidgetActions->currentItem();
+
+ mpActionsMainArea->checkBox_action_button_isPushDown->blockSignals(true);
+ mpActionsMainArea->checkBox_action_button_isPushDown->setChecked(mPrevIsPushDown);
+ mpActionsMainArea->checkBox_action_button_isPushDown->blockSignals(false);
+ if (mPrevIsPushDown) {
+ mpActionsMainArea->lineEdit_action_button_command_up->show();
+ mpActionsMainArea->label_action_button_command_up->show();
+ mpActionsMainArea->label_action_button_command_down->setText(mpEditor->tr("Command (down):"));
+ } else {
+ mpActionsMainArea->lineEdit_action_button_command_up->hide();
+ mpActionsMainArea->label_action_button_command_up->hide();
+ mpActionsMainArea->label_action_button_command_down->setText(mpEditor->tr("Command:"));
+ }
+}
+
+void ActionButtonCheckboxEditedCommand::redo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpEditor->selectActionByID(mItemID);
+ mpItem = mpTreeWidgetActions->currentItem();
+
+ mpActionsMainArea->checkBox_action_button_isPushDown->blockSignals(true);
+ mpActionsMainArea->checkBox_action_button_isPushDown->setChecked(mIsPushDown);
+ mpActionsMainArea->checkBox_action_button_isPushDown->blockSignals(false);
+ if (mIsPushDown) {
+ mpActionsMainArea->lineEdit_action_button_command_up->show();
+ mpActionsMainArea->label_action_button_command_up->show();
+ mpActionsMainArea->label_action_button_command_down->setText(mpEditor->tr("Command (down):"));
+ } else {
+ mpActionsMainArea->lineEdit_action_button_command_up->hide();
+ mpActionsMainArea->label_action_button_command_up->hide();
+ mpActionsMainArea->label_action_button_command_down->setText(mpEditor->tr("Command:"));
+ }
+ setText(QObject::tr("Edit action pushdown"));
+}
+
+ActionCommandDownTextEditedCommand::ActionCommandDownTextEditedCommand(Host* pHost, dlgActionMainArea* actionsMainArea, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpActionsMainArea = actionsMainArea;
+}
+
+void ActionCommandDownTextEditedCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpEditor->selectActionByID(mItemID);
+ mpItem = mpTreeWidgetActions->currentItem();
+
+ mpActionsMainArea->lineEdit_action_button_command_down->blockSignals(true);
+ mpActionsMainArea->lineEdit_action_button_command_down->setText(mPrevCommandDown);
+ mpActionsMainArea->lineEdit_action_button_command_down->blockSignals(false);
+}
+
+void ActionCommandDownTextEditedCommand::redo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpEditor->selectActionByID(mItemID);
+ mpItem = mpTreeWidgetActions->currentItem();
+
+ mpActionsMainArea->lineEdit_action_button_command_down->blockSignals(true);
+ mpActionsMainArea->lineEdit_action_button_command_down->setText(mCommandDown);
+ mpActionsMainArea->lineEdit_action_button_command_down->blockSignals(false);
+ setText(QObject::tr("Edit action down"));
+}
+
+ActionCommandUpTextEditedCommand::ActionCommandUpTextEditedCommand(Host* pHost, dlgActionMainArea* actionsMainArea, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpActionsMainArea = actionsMainArea;
+}
+
+void ActionCommandUpTextEditedCommand::undo()
+{
+ if (!mpItem) {
+ return;
+ }
+
+ mpEditor->selectActionByID(mItemID);
+ mpItem = mpTreeWidgetActions->currentItem();
+
+ mpActionsMainArea->lineEdit_action_button_command_up->blockSignals(true);
+ mpActionsMainArea->lineEdit_action_button_command_up->setText(mPrevCommandUp);
+ mpActionsMainArea->lineEdit_action_button_command_up->blockSignals(false);
+}
+
+void ActionCommandUpTextEditedCommand::redo()
+{
+ if (!mpItem) {
+ return;
+ }
+ mItemID = mpItem->data(0, Qt::UserRole).toInt();
+ mpEditor->selectActionByID(mItemID);
+ mpItem = mpTreeWidgetActions->currentItem();
+
+ mpActionsMainArea->lineEdit_action_button_command_up->blockSignals(true);
+ mpActionsMainArea->lineEdit_action_button_command_up->setText(mCommandUp);
+ mpActionsMainArea->lineEdit_action_button_command_up->blockSignals(false);
+ setText(QObject::tr("Edit action up"));
+}
+
+ActionCssTextEditedCommand::ActionCssTextEditedCommand(Host* pHost, dlgActionMainArea* actionsMainArea, QUndoCommand* parent) : QUndoCommand(parent), mpHost(pHost)
+{
+ mpActionsMainArea = actionsMainArea;
+}
+
+int ActionCssTextEditedCommand::id() const
+{
+ const quint16 id = reinterpret_cast<uintptr_t>(typeid(this).name());
+ return id;
+}
+
+bool ActionCssTextEditedCommand::mergeWith(const QUndoCommand* other)
+{
+ QString text = static_cast<const ActionCssTextEditedCommand*>(other)->mActionCss;
+ if (text.length() < mActionCss.length()) {
+ mActionCss = text;
+ return false;
+ }
+ QTextCursor cursor = mpActionsMainArea->plainTextEdit_action_css->textCursor();
+ if (cursor.movePosition(QTextCursor::PreviousCharacter, QTextCursor::KeepAnchor)) {
+ QString selectedChar = cursor.selectedText();
+ if (selectedChar == QChar::ParagraphSeparator || selectedChar == QChar::Space || selectedChar == QChar::CarriageReturn || selectedChar == QChar::LineFeed) {
+ return false;
+ }
+ }
+ mActionCss = text;
+ return true;
+}