00001 #include "mainwindow.h"
00002 #include "actionsdialog.h"
00003
00004 ActionsDialog::ActionsDialog(QList<QAction *> actions,
00005 QWidget *parent)
00006 : QDialog(parent)
00007 , settings(new QSettings)
00008 , m_actions(actions)
00009 {
00010 setupUi();
00011 }
00012
00013 ActionsDialog::~ActionsDialog()
00014 {
00015 }
00016
00017 void ActionsDialog::changeEvent(QEvent *e)
00018 {
00019 QDialog::changeEvent(e);
00020 switch (e->type()) {
00021 case QEvent::LanguageChange:
00022 retranslateUi();
00023 break;
00024 default:
00025 break;
00026 }
00027 }
00028
00029 void ActionsDialog::recordAction(int curr_row, int curr_col,
00030 int prev_row, int prev_col)
00031 {
00032 Q_UNUSED(prev_row);
00033 Q_UNUSED(prev_col);
00034 oldAccelText = TableWidgetActions->item(curr_row, curr_col)->text();
00035 }
00036
00037 void ActionsDialog::validateAction(int row, int column)
00038 {
00039 QTableWidgetItem *item;
00040 item = TableWidgetActions->item(row, column);
00041 QString accelText = QString(QKeySequence(item->text()));
00042
00043 if(accelText.isEmpty() && item->text().isEmpty())
00044 ;
00045 else
00046 item->setText(accelText);
00047 }
00048
00049 void ActionsDialog::accept()
00050 {
00051 for (qint32 row = 0; row < actionsList.size(); ++row)
00052 actionsList.at(row)->setShortcut(QKeySequence(TableWidgetActions
00053 ->item(row, 1)->text()));
00054 mSaveShortcuts();
00055 QDialog::accept();
00056 }
00057
00058 void ActionsDialog::mSaveShortcuts()
00059 {
00060 settings->beginGroup("Action");
00061 foreach (const QAction *action, actionsList)
00062 settings->setValue(action->text(), QString(action->shortcut()));
00063
00064 settings->endGroup();
00065 }
00066
00067 void ActionsDialog::setupUi()
00068 {
00069 if (objectName().isEmpty())
00070 setObjectName(QString::fromUtf8("ActionsDialog"));
00071
00072 gridLayout = new QGridLayout(this);
00073 gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
00074 TableWidgetActions = new QTableWidget(this);
00075 TableWidgetActions->setObjectName(QString::fromUtf8("TableWidgetActions"));
00076 TableWidgetActions->setShowGrid(true);
00077
00078 gridLayout->addWidget(TableWidgetActions, 0, 0, 1, 1);
00079
00080 buttonBox = new QDialogButtonBox(this);
00081 buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
00082 buttonBox->setOrientation(Qt::Horizontal);
00083 buttonBox->setStandardButtons(QDialogButtonBox::Cancel
00084 | QDialogButtonBox::Ok
00085 | QDialogButtonBox::Apply);
00086
00087 gridLayout->addWidget(buttonBox, 1, 0, 1, 1);
00088 TableWidgetActions->setRowCount(m_actions.count());
00089 TableWidgetActions->setColumnCount(2);
00090 QStringList TableWidgetHorizontalHeaderLabels;
00091 TableWidgetHorizontalHeaderLabels << tr("Description") << tr("Shortcut");
00092 TableWidgetActions->setHorizontalHeaderLabels(TableWidgetHorizontalHeaderLabels);
00093 TableWidgetActions->verticalHeader()->hide();
00094
00095 int row = 0;
00096
00097 foreach (QAction *action, m_actions) {
00098 QTableWidgetItem *TableWidgetItemDesc = new QTableWidgetItem;
00099 TableWidgetItemDesc->setText(action->text());
00100 TableWidgetActions->setItem(row, 0, TableWidgetItemDesc);
00101
00102 QTableWidgetItem *TableWidgetItemShortcut = new QTableWidgetItem;
00103 TableWidgetItemShortcut->setText(QString(action->shortcut()));
00104 TableWidgetActions->setItem(row, 1, TableWidgetItemShortcut);
00105 actionsList.append(action);
00106 ++row;
00107 }
00108
00109 retranslateUi();
00110
00111 connect(TableWidgetActions, SIGNAL(currentCellChanged(int, int, int, int))
00112 , SLOT(recordAction(int, int, int, int)));
00113 connect(TableWidgetActions, SIGNAL(cellChanged(int, int))
00114 , SLOT(validateAction(int, int)));
00115
00116 connect(buttonBox, SIGNAL(accepted()), SLOT(accept()));
00117 connect(buttonBox, SIGNAL(rejected()), SLOT(reject()));
00118 connect(buttonBox, SIGNAL(clicked(QAbstractButton*))
00119 , SLOT(buttonBoxClicked(QAbstractButton*)));
00120 }
00121
00122 void ActionsDialog::retranslateUi()
00123 {
00124 setWindowTitle(QApplication::translate("ActionsDialog", "Dialog", 0,
00125 QApplication::UnicodeUTF8));
00126 }
00127
00128 void ActionsDialog::setFallbacksEnabled(bool enabled)
00129 {
00130 if (settings)
00131 settings->setFallbacksEnabled(enabled);
00132 }
00133
00134 void ActionsDialog::buttonBoxClicked(QAbstractButton *optionsDialogPushButton)
00135 {
00136 if((optionsDialogPushButton == buttonBox->button(QDialogButtonBox::Apply))
00137 | (optionsDialogPushButton == buttonBox->button(QDialogButtonBox::Ok)))
00138 mSaveShortcuts();
00139
00140 }
00141
00142 #include "actionsdialog.moc"