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
));
45 const QString
& data(set
.value(ACT_GROUP_KEY
+ name
+ ACT_TEXT_KEY
, "").toString());
46 textEditAction
->setPlainText(data
);
49 void CustomActionImpl::removeAction(const QString
& name
) {
52 set
.remove(ACT_GROUP_KEY
+ name
);
55 const QStringList
CustomActionImpl::actions() {
57 QStringList actionsList
;
58 QListWidgetItem
* item
;
60 while ((item
= listWidgetNames
->item(row
)) != 0) {
61 actionsList
.append(item
->text());
67 void CustomActionImpl::updateActions() {
70 settings
.setValue(ACT_LIST_KEY
, actions());
71 emit
listChanged(actions());
74 void CustomActionImpl::listWidgetNames_currentItemChanged(QListWidgetItem
* item
, QListWidgetItem
*) {
76 bool empty
= (item
== NULL
);
79 loadAction(item
->text());
80 listWidgetNames
->scrollToItem(item
);
82 textEditAction
->clear();
83 if (checkBoxRefreshAfterAction
->isChecked())
84 checkBoxRefreshAfterAction
->toggle();
86 textEditAction
->setEnabled(!empty
);
87 checkBoxRefreshAfterAction
->setEnabled(!empty
);
88 pushButtonRename
->setEnabled(!empty
);
89 pushButtonRemove
->setEnabled(!empty
);
90 pushButtonMoveUp
->setEnabled(!empty
&& (item
!= listWidgetNames
->item(0)));
91 int lastRow
= listWidgetNames
->count() - 1;
92 pushButtonMoveDown
->setEnabled(!empty
&& (item
!= listWidgetNames
->item(lastRow
)));
95 bool CustomActionImpl::getNewName(QString
& name
, const QString
& caption
) {
98 const QString oldName
= name
;
99 name
= QInputDialog::getText(this, caption
+ " - QGit", "Enter action name:",
100 QLineEdit::Normal
, name
, &ok
);
102 if (!ok
|| name
.isEmpty() || name
== oldName
)
105 if (actions().contains(name
)) {
106 QMessageBox::warning(this, caption
+ " - QGit", "Sorry, action name "
107 "already exists.\nPlease choose a different name.");
113 void CustomActionImpl::pushButtonNew_clicked() {
116 if (!getNewName(name
, "Create new action"))
119 QListWidgetItem
* item
= new QListWidgetItem(name
);
120 listWidgetNames
->addItem(item
);
122 listWidgetNames
->setCurrentItem(item
);
123 textEditAction
->setPlainText("<write here your action's commands sequence>");
124 textEditAction
->selectAll();
125 textEditAction
->setFocus();
128 void CustomActionImpl::pushButtonRename_clicked() {
130 QListWidgetItem
* item
= listWidgetNames
->currentItem();
131 if (!item
|| !item
->isSelected())
134 QString
newName(item
->text());
135 if (!getNewName(newName
, "Rename action"))
138 const QString
oldActionName(item
->text());
139 item
->setText(newName
);
141 listWidgetNames_currentItemChanged(item
, item
);
142 loadAction(oldActionName
);
143 removeAction(oldActionName
);
146 void CustomActionImpl::pushButtonRemove_clicked() {
148 QListWidgetItem
* item
= listWidgetNames
->currentItem();
149 if (!item
|| !item
->isSelected())
152 removeAction(item
->text());
155 if (!listWidgetNames
->count())
156 listWidgetNames_currentItemChanged(NULL
, NULL
);
159 void CustomActionImpl::pushButtonMoveUp_clicked() {
161 QListWidgetItem
* item
= listWidgetNames
->currentItem();
162 int row
= listWidgetNames
->row(item
);
163 if (!item
|| row
== 0)
166 item
= listWidgetNames
->takeItem(row
);
167 listWidgetNames
->insertItem(row
- 1, item
);
169 listWidgetNames
->setCurrentItem(item
);
172 void CustomActionImpl::pushButtonMoveDown_clicked() {
174 QListWidgetItem
* item
= listWidgetNames
->currentItem();
175 int row
= listWidgetNames
->row(item
);
176 if (!item
|| row
== listWidgetNames
->count() - 1)
179 item
= listWidgetNames
->takeItem(row
);
180 listWidgetNames
->insertItem(row
+ 1, item
);
182 listWidgetNames
->setCurrentItem(item
);
185 void CustomActionImpl::textEditAction_textChanged() {
187 QListWidgetItem
* item
= listWidgetNames
->currentItem();
190 QString
key(ACT_GROUP_KEY
+ item
->text() + ACT_TEXT_KEY
);
191 s
.setValue(key
, textEditAction
->toPlainText());
195 void CustomActionImpl::checkBoxRefreshAfterAction_toggled(bool b
) {
197 QListWidgetItem
* item
= listWidgetNames
->currentItem();
199 QString
flags(ACT_GROUP_KEY
+ item
->text() + ACT_FLAGS_KEY
);
200 setFlag(ACT_REFRESH_F
, b
, flags
);
204 void CustomActionImpl::checkBoxAskArgs_toggled(bool b
) {
206 QListWidgetItem
* item
= listWidgetNames
->currentItem();
208 QString
flags(ACT_GROUP_KEY
+ item
->text() + ACT_FLAGS_KEY
);
209 setFlag(ACT_CMD_LINE_F
, b
, flags
);
213 void CustomActionImpl::pushButtonOk_clicked() {