2 Description: custom action handling
4 Author: Marco Costalba (C) 2006-2007
6 Copyright: See COPYING file that comes with this distribution
10 #include <QMessageBox>
11 #include <QInputDialog>
13 #include "customactionimpl.h"
17 CustomActionImpl::CustomActionImpl() {
19 setAttribute(Qt::WA_DeleteOnClose
);
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));
30 listWidgetNames_currentItemChanged(NULL
, NULL
);
33 void CustomActionImpl::closeEvent(QCloseEvent
* ce
) {
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
));
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
) {
53 set
.remove(ACT_GROUP_KEY
+ name
);
56 const QStringList
CustomActionImpl::actions() {
58 QStringList actionsList
;
59 QListWidgetItem
* item
;
61 while ((item
= listWidgetNames
->item(row
)) != 0) {
62 actionsList
.append(item
->text());
68 void CustomActionImpl::updateActions() {
71 settings
.setValue(ACT_LIST_KEY
, actions());
72 emit
listChanged(actions());
75 void CustomActionImpl::listWidgetNames_currentItemChanged(QListWidgetItem
* item
, QListWidgetItem
*) {
77 bool empty
= (item
== NULL
);
80 loadAction(item
->text());
81 listWidgetNames
->scrollToItem(item
);
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
) {
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
)
110 if (actions().contains(name
)) {
111 QMessageBox::warning(this, caption
+ " - QGit", "Sorry, action name "
112 "already exists.\nPlease choose a different name.");
118 void CustomActionImpl::pushButtonNew_clicked() {
121 if (!getNewName(name
, "Create new action"))
124 QListWidgetItem
* item
= new QListWidgetItem(name
);
125 listWidgetNames
->addItem(item
);
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())
139 QString
newName(item
->text());
140 if (!getNewName(newName
, "Rename action"))
143 const QString
oldActionName(item
->text());
144 item
->setText(newName
);
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())
157 removeAction(item
->text());
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)
171 item
= listWidgetNames
->takeItem(row
);
172 listWidgetNames
->insertItem(row
- 1, item
);
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)
184 item
= listWidgetNames
->takeItem(row
);
185 listWidgetNames
->insertItem(row
+ 1, item
);
187 listWidgetNames
->setCurrentItem(item
);
190 void CustomActionImpl::textEditAction_textChanged() {
192 QListWidgetItem
* item
= listWidgetNames
->currentItem();
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();
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();
213 QString
flags(ACT_GROUP_KEY
+ item
->text() + ACT_FLAGS_KEY
);
214 setFlag(ACT_CMD_LINE_F
, b
, flags
);
218 void CustomActionImpl::pushButtonOk_clicked() {