00001
00002
00003
00004
00005
00006
00007
00008
00009 #include <qsettings.h>
00010 #include <qlistview.h>
00011 #include <qinputdialog.h>
00012 #include <qmessagebox.h>
00013 #include <qpushbutton.h>
00014 #include <qtextedit.h>
00015 #include <qcheckbox.h>
00016 #include "common.h"
00017 #include "customactionimpl.h"
00018
00019 using namespace QGit;
00020
00021 CustomActionImpl::CustomActionImpl() : CustomActionBase(0, 0, Qt::WDestructiveClose) {
00022
00023 listViewNames->setSorting(-1);
00024
00025 QSettings set;
00026 actionList = QStringList::split(",", set.readEntry(APP_KEY + MCR_LIST_KEY, ""));
00027 QListViewItem* lastItem = NULL;
00028 FOREACH_SL (it, actionList)
00029 lastItem = new QListViewItem(listViewNames, lastItem, *it);
00030
00031 QListViewItem* item = listViewNames->currentItem();
00032 listViewNames_currentChanged(item);
00033 if (item)
00034 item->setSelected(true);
00035 }
00036
00037 void CustomActionImpl::loadAction(const QString& name) {
00038
00039 checkBoxRefreshAfterAction->setChecked(testFlag(MCR_REFRESH_F, name));
00040 checkBoxAskArgs->setChecked(testFlag(MCR_CMD_LINE_F, name));
00041 QSettings set;
00042 textEditAction->setText(set.readEntry(APP_KEY + name + MCR_TEXT_KEY, ""));
00043 }
00044
00045 void CustomActionImpl::removeAction(const QString& name) {
00046
00047 QSettings set;
00048 set.removeEntry(APP_KEY + name + FLAGS_KEY);
00049 set.removeEntry(APP_KEY + name + MCR_TEXT_KEY);
00050 }
00051
00052 void CustomActionImpl::updateActionList() {
00053
00054 actionList.clear();
00055 QListViewItemIterator it(listViewNames);
00056 while (it.current()) {
00057 actionList.append(it.current()->text(0));
00058 ++it;
00059 }
00060 writeSetting(MCR_LIST_KEY, actionList.join(","));
00061 emit listChanged(actionList);
00062 }
00063
00064 void CustomActionImpl::listViewNames_currentChanged(QListViewItem* item) {
00065
00066 bool emptyList = (item == NULL);
00067
00068 if (!emptyList) {
00069 curAction = "Macro " + item->text(0) + "/";
00070 loadAction(curAction);
00071 listViewNames->ensureItemVisible(item);
00072 } else {
00073 curAction = "";
00074 textEditAction->clear();
00075 if (checkBoxRefreshAfterAction->isChecked())
00076 checkBoxRefreshAfterAction->toggle();
00077
00078 if (checkBoxAskArgs->isChecked())
00079 checkBoxAskArgs->toggle();
00080 }
00081 textEditAction->setEnabled(!emptyList);
00082 checkBoxRefreshAfterAction->setEnabled(!emptyList);
00083 checkBoxAskArgs->setEnabled(!emptyList);
00084 pushButtonRename->setEnabled(!emptyList);
00085 pushButtonRemove->setEnabled(!emptyList);
00086 pushButtonMoveUp->setEnabled(!emptyList && (item != listViewNames->firstChild()));
00087 pushButtonMoveDown->setEnabled(!emptyList && (item != listViewNames->lastItem()));
00088 }
00089
00090 bool CustomActionImpl::getNewName(QString& name, const QString& caption) {
00091
00092 bool ok;
00093 const QString oldName = name;
00094 name = QInputDialog::getText(caption + " - QGit", "Enter action name:",
00095 QLineEdit::Normal, name, &ok, this);
00096
00097 if (!ok || name.isEmpty() || name == oldName)
00098 return false;
00099
00100 if (actionList.contains(name)) {
00101 QMessageBox::warning(this, caption + " - QGit", "Sorry, action name "
00102 "already exists.\nPlease choose a different name.");
00103 return false;
00104 }
00105 return true;
00106 }
00107
00108 void CustomActionImpl::pushButtonNew_clicked() {
00109
00110 QString name;
00111 if (!getNewName(name, "Create new action"))
00112 return;
00113
00114 QListViewItem* item = new QListViewItem(listViewNames, listViewNames->lastItem(), name);
00115 listViewNames->setCurrentItem(item);
00116 listViewNames_currentChanged(item);
00117 updateActionList();
00118 textEditAction->setText("<write here your action's commands sequence>");
00119 textEditAction->selectAll();
00120 textEditAction->setFocus();
00121 }
00122
00123 void CustomActionImpl::pushButtonRename_clicked() {
00124
00125 QListViewItem* item = listViewNames->currentItem();
00126 if (!item || !item->isSelected())
00127 return;
00128
00129 QString newName(item->text(0));
00130 if (!getNewName(newName, "Rename action"))
00131 return;
00132
00133 item->setText(0, newName);
00134 updateActionList();
00135 const QString oldActionName(curAction);
00136 listViewNames_currentChanged(listViewNames->currentItem());
00137 loadAction(oldActionName);
00138 removeAction(oldActionName);
00139 }
00140
00141 void CustomActionImpl::pushButtonRemove_clicked() {
00142
00143 QListViewItem* item = listViewNames->currentItem();
00144 if (!item || !item->isSelected())
00145 return;
00146
00147 removeAction(curAction);
00148 delete item;
00149 updateActionList();
00150 if (listViewNames->currentItem())
00151 listViewNames->currentItem()->setSelected(true);
00152 }
00153
00154 void CustomActionImpl::pushButtonMoveUp_clicked() {
00155
00156 QListViewItem* item = listViewNames->currentItem();
00157 if (!item || item == listViewNames->firstChild())
00158 return;
00159
00160 item->itemAbove()->moveItem(item);
00161 updateActionList();
00162 listViewNames_currentChanged(item);
00163 }
00164
00165 void CustomActionImpl::pushButtonMoveDown_clicked() {
00166
00167 QListViewItem* item = listViewNames->currentItem();
00168 if (!item || item == listViewNames->lastItem())
00169 return;
00170
00171 item->moveItem(item->itemBelow());
00172 updateActionList();
00173 listViewNames_currentChanged(item);
00174 }
00175
00176 void CustomActionImpl::textEditAction_textChanged() {
00177
00178 if (!curAction.isEmpty())
00179 writeSetting(MCR_TEXT_KEY, textEditAction->text(), curAction);
00180 }
00181
00182 void CustomActionImpl::checkBoxRefreshAfterAction_toggled(bool b) {
00183
00184 if (!curAction.isEmpty())
00185 setFlag(MCR_REFRESH_F, b, curAction);
00186 }
00187
00188 void CustomActionImpl::checkBoxAskArgs_toggled(bool b) {
00189
00190 if (!curAction.isEmpty())
00191 setFlag(MCR_CMD_LINE_F, b, curAction);
00192 }
00193
00194 void CustomActionImpl::pushButtonOk_clicked() {
00195
00196 close();
00197 }