customactionimpl.cpp

Go to the documentation of this file.
00001 /*
00002         Description: custom action handling
00003 
00004         Author: Marco Costalba (C) 2006
00005 
00006         Copyright: See COPYING file that comes with this distribution
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()); // updates curAction
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 }

Generated on Fri Dec 7 21:57:37 2007 for QGit by  doxygen 1.5.3