Replaced QGit icons
[qgit4/bulb.git] / src / customactionimpl.cpp
blobfae76cc31943d5a631f08ba23dbac71530431d61
1 /*
2 Description: custom action handling
4 Author: Marco Costalba (C) 2006-2007
6 Copyright: See COPYING file that comes with this distribution
8 */
9 #include <QSettings>
10 #include <QMessageBox>
11 #include <QInputDialog>
12 #include "common.h"
13 #include "customactionimpl.h"
15 using namespace QGit;
17 CustomActionImpl::CustomActionImpl() {
19 setAttribute(Qt::WA_DeleteOnClose);
20 setupUi(this);
22 QSettings settings;
23 restoreGeometry(settings.value(ACT_GEOM_KEY).toByteArray());
24 QStringList actions = settings.value(ACT_LIST_KEY).toStringList();
26 listWidgetNames->insertItems(0, actions);
27 if (listWidgetNames->count())
28 listWidgetNames->setCurrentItem(listWidgetNames->item(0));
29 else
30 listWidgetNames_currentItemChanged(NULL, NULL);
33 void CustomActionImpl::closeEvent(QCloseEvent* ce) {
35 QSettings settings;
36 settings.setValue(ACT_GEOM_KEY, saveGeometry());
37 QWidget::closeEvent(ce);
40 void CustomActionImpl::loadAction(const QString& name) {
42 const QString flags(ACT_GROUP_KEY + name + ACT_FLAGS_KEY);
43 checkBoxRefreshAfterAction->setChecked(testFlag(ACT_REFRESH_F, flags));
44 checkBoxAskArgs->setChecked(testFlag(ACT_CMD_LINE_F, flags));
45 QSettings set;
46 const QString& data(set.value(ACT_GROUP_KEY + name + ACT_TEXT_KEY, "").toString());
47 textEditAction->setPlainText(data);
50 void CustomActionImpl::removeAction(const QString& name) {
52 QSettings set;
53 set.remove(ACT_GROUP_KEY + name);
56 const QStringList CustomActionImpl::actions() {
58 QStringList actionsList;
59 QListWidgetItem* item;
60 int row = 0;
61 while ((item = listWidgetNames->item(row)) != 0) {
62 actionsList.append(item->text());
63 row++;
65 return actionsList;
68 void CustomActionImpl::updateActions() {
70 QSettings settings;
71 settings.setValue(ACT_LIST_KEY, actions());
72 emit listChanged(actions());
75 void CustomActionImpl::listWidgetNames_currentItemChanged(QListWidgetItem* item, QListWidgetItem*) {
77 bool empty = (item == NULL);
79 if (!empty) {
80 loadAction(item->text());
81 listWidgetNames->scrollToItem(item);
82 } else {
83 textEditAction->clear();
84 if (checkBoxRefreshAfterAction->isChecked())
85 checkBoxRefreshAfterAction->toggle();
87 if (checkBoxAskArgs->isChecked())
88 checkBoxAskArgs->toggle();
90 textEditAction->setEnabled(!empty);
91 checkBoxRefreshAfterAction->setEnabled(!empty);
92 checkBoxAskArgs->setEnabled(!empty);
93 pushButtonRename->setEnabled(!empty);
94 pushButtonRemove->setEnabled(!empty);
95 pushButtonMoveUp->setEnabled(!empty && (item != listWidgetNames->item(0)));
96 int lastRow = listWidgetNames->count() - 1;
97 pushButtonMoveDown->setEnabled(!empty && (item != listWidgetNames->item(lastRow)));
100 bool CustomActionImpl::getNewName(QString& name, const QString& caption) {
102 bool ok;
103 const QString oldName = name;
104 name = QInputDialog::getText(this, caption + " - QGit", "Enter action name:",
105 QLineEdit::Normal, name, &ok);
107 if (!ok || name.isEmpty() || name == oldName)
108 return false;
110 if (actions().contains(name)) {
111 QMessageBox::warning(this, caption + " - QGit", "Sorry, action name "
112 "already exists.\nPlease choose a different name.");
113 return false;
115 return true;
118 void CustomActionImpl::pushButtonNew_clicked() {
120 QString name;
121 if (!getNewName(name, "Create new action"))
122 return;
124 QListWidgetItem* item = new QListWidgetItem(name);
125 listWidgetNames->addItem(item);
126 updateActions();
127 listWidgetNames->setCurrentItem(item);
128 textEditAction->setPlainText("<write here your action's commands sequence>");
129 textEditAction->selectAll();
130 textEditAction->setFocus();
133 void CustomActionImpl::pushButtonRename_clicked() {
135 QListWidgetItem* item = listWidgetNames->currentItem();
136 if (!item || !item->isSelected())
137 return;
139 QString newName(item->text());
140 if (!getNewName(newName, "Rename action"))
141 return;
143 const QString oldActionName(item->text());
144 item->setText(newName);
145 updateActions();
146 listWidgetNames_currentItemChanged(item, item);
147 loadAction(oldActionName);
148 removeAction(oldActionName);
151 void CustomActionImpl::pushButtonRemove_clicked() {
153 QListWidgetItem* item = listWidgetNames->currentItem();
154 if (!item || !item->isSelected())
155 return;
157 removeAction(item->text());
158 delete item;
159 updateActions();
160 if (!listWidgetNames->count())
161 listWidgetNames_currentItemChanged(NULL, NULL);
164 void CustomActionImpl::pushButtonMoveUp_clicked() {
166 QListWidgetItem* item = listWidgetNames->currentItem();
167 int row = listWidgetNames->row(item);
168 if (!item || row == 0)
169 return;
171 item = listWidgetNames->takeItem(row);
172 listWidgetNames->insertItem(row - 1, item);
173 updateActions();
174 listWidgetNames->setCurrentItem(item);
177 void CustomActionImpl::pushButtonMoveDown_clicked() {
179 QListWidgetItem* item = listWidgetNames->currentItem();
180 int row = listWidgetNames->row(item);
181 if (!item || row == listWidgetNames->count() - 1)
182 return;
184 item = listWidgetNames->takeItem(row);
185 listWidgetNames->insertItem(row + 1, item);
186 updateActions();
187 listWidgetNames->setCurrentItem(item);
190 void CustomActionImpl::textEditAction_textChanged() {
192 QListWidgetItem* item = listWidgetNames->currentItem();
193 if (item) {
194 QSettings s;
195 QString key(ACT_GROUP_KEY + item->text() + ACT_TEXT_KEY);
196 s.setValue(key, textEditAction->toPlainText());
200 void CustomActionImpl::checkBoxRefreshAfterAction_toggled(bool b) {
202 QListWidgetItem* item = listWidgetNames->currentItem();
203 if (item) {
204 QString flags(ACT_GROUP_KEY + item->text() + ACT_FLAGS_KEY);
205 setFlag(ACT_REFRESH_F, b, flags);
209 void CustomActionImpl::checkBoxAskArgs_toggled(bool b) {
211 QListWidgetItem* item = listWidgetNames->currentItem();
212 if (item) {
213 QString flags(ACT_GROUP_KEY + item->text() + ACT_FLAGS_KEY);
214 setFlag(ACT_CMD_LINE_F, b, flags);
218 void CustomActionImpl::pushButtonOk_clicked() {
220 close();