OSDN Git Service

Ver0.11
[gefu/Gefu.git] / renamemultidialog.cpp
1 #include "renamemultidialog.h"\r
2 #include "ui_renamemultidialog.h"\r
3 #include <QFileIconProvider>\r
4 #include <QMessageBox>\r
5 \r
6 RenameMultiDialog::RenameMultiDialog(QWidget *parent) :\r
7     IRenameDialog(parent),\r
8     ui(new Ui::RenameMultiDialog)\r
9 {\r
10     ui->setupUi(this);\r
11 \r
12     // ヘッダーラベルを設定する\r
13     QStringList labels;\r
14     labels << tr("変更前") << tr("変更後");\r
15     ui->tableWidget->setHorizontalHeaderLabels(labels);\r
16 \r
17     ui->tableWidget->horizontalHeader()->setStretchLastSection(true);\r
18 }\r
19 \r
20 RenameMultiDialog::~RenameMultiDialog()\r
21 {\r
22     delete ui;\r
23 }\r
24 \r
25 void RenameMultiDialog::setNames(const QFileInfoList &names)\r
26 {\r
27     foreach (const QFileInfo &info, names) {\r
28         int row = ui->tableWidget->rowCount();\r
29         ui->tableWidget->insertRow(row);\r
30 \r
31         QTableWidgetItem *iBefore = new QTableWidgetItem(info.fileName());\r
32         iBefore->setFlags(iBefore->flags() ^ Qt::ItemIsEditable);\r
33         iBefore->setIcon(QFileIconProvider().icon(info));\r
34         ui->tableWidget->setItem(row, 0, iBefore);\r
35 \r
36         QTableWidgetItem *iAfter = new QTableWidgetItem(info.fileName());\r
37         ui->tableWidget->setItem(row, 1, iAfter);\r
38     }\r
39     ui->tableWidget->resizeColumnsToContents();\r
40     ui->tableWidget->resizeRowsToContents();\r
41 }\r
42 \r
43 void RenameMultiDialog::on_btn_UpperAll_clicked()\r
44 {\r
45     for (int n = 0; n < ui->tableWidget->rowCount(); n++) {\r
46         QTableWidgetItem *item = ui->tableWidget->item(n, 0);\r
47         ui->tableWidget->item(n, 1)->setText(item->text().toUpper());\r
48     }\r
49 }\r
50 \r
51 void RenameMultiDialog::on_btn_LowerAll_clicked()\r
52 {\r
53     for (int n = 0; n < ui->tableWidget->rowCount(); n++) {\r
54         QTableWidgetItem *item = ui->tableWidget->item(n, 0);\r
55         ui->tableWidget->item(n, 1)->setText(item->text().toLower());\r
56     }\r
57 }\r
58 \r
59 void RenameMultiDialog::on_btn_UpperExt_clicked()\r
60 {\r
61     for (int n = 0; n < ui->tableWidget->rowCount(); n++) {\r
62         QTableWidgetItem *item = ui->tableWidget->item(n, 0);\r
63         QFileInfo info(m_dir.absoluteFilePath(item->text()));\r
64         ui->tableWidget->item(n, 1)->setText(\r
65                     info.completeBaseName() + "." + info.suffix().toUpper());\r
66     }\r
67 }\r
68 \r
69 void RenameMultiDialog::on_btn_LowerExt_clicked()\r
70 {\r
71     for (int n = 0; n < ui->tableWidget->rowCount(); n++) {\r
72         QTableWidgetItem *item = ui->tableWidget->item(n, 0);\r
73         QFileInfo info(m_dir.absoluteFilePath(item->text()));\r
74         ui->tableWidget->item(n, 1)->setText(\r
75                     info.completeBaseName() + "." + info.suffix().toLower());\r
76     }\r
77 }\r
78 \r
79 void RenameMultiDialog::on_replaceExec_clicked()\r
80 {\r
81     for (int n = 0; n < ui->tableWidget->rowCount(); n++) {\r
82         QTableWidgetItem *item = ui->tableWidget->item(n, 0);\r
83         QString name = item->text();\r
84 \r
85         if (!ui->replaceFrom->text().isEmpty()) {\r
86             name.replace(ui->replaceFrom->text(), ui->replaceTo->text());\r
87         }\r
88         if (!ui->insertText->text().isEmpty()) {\r
89             int pos = ui->insertPos->text().toInt();\r
90             if (pos < 0) {\r
91                 pos = name.size() + pos + 1;\r
92             }\r
93             name.insert(pos, ui->insertText->text());\r
94         }\r
95         ui->tableWidget->item(n, 1)->setText(name);\r
96     }\r
97 }\r
98 \r
99 void RenameMultiDialog::on_numberExec_clicked()\r
100 {\r
101     bool bOk;\r
102     int nStart = ui->numberStart->text().toInt(&bOk);\r
103     if (!bOk) {\r
104         QMessageBox::critical(this,\r
105                               tr("エラー"),\r
106                               tr("連番開始番号が不正です。"));\r
107         ui->numberStart->setFocus();\r
108         return;\r
109     }\r
110     int nColumn = ui->numberStart->text().size();\r
111     int nStep = ui->numberStep->text().toInt();\r
112     for (int n = 0; n < ui->tableWidget->rowCount(); n++, nStart += nStep) {\r
113         QTableWidgetItem *item = ui->tableWidget->item(n, 0);\r
114         QString name = item->text();\r
115         QFileInfo info(m_dir.absoluteFilePath(name));\r
116 \r
117         QString first = ui->numberFirst->text();\r
118         first.replace("?B", info.completeBaseName());\r
119         first.replace("?E", info.suffix());\r
120 \r
121         QString last = ui->numberLast->text();\r
122         last.replace("?B", info.completeBaseName());\r
123         last.replace("?E", info.suffix());\r
124 \r
125         QString fmt = "%0" + QString("%1").arg(nColumn) + "d";\r
126         QString number;\r
127         number.sprintf(fmt.toLatin1(), nStart);\r
128 \r
129         ui->tableWidget->item(n, 1)->setText(first + number + last);\r
130     }\r
131 }\r
132 \r
133 void RenameMultiDialog::on_buttonBox_clicked(QAbstractButton *button)\r
134 {\r
135     if (button->text() == tr("Reset")) {\r
136         for (int n = 0; n < ui->tableWidget->rowCount(); n++) {\r
137             QTableWidgetItem *item = ui->tableWidget->item(n, 0);\r
138             ui->tableWidget->item(n, 1)->setText(item->text());\r
139         }\r
140     }\r
141 }\r
142 \r
143 void RenameMultiDialog::accept()\r
144 {\r
145     // 未入力チェック\r
146     for (int n = 0; n < ui->tableWidget->rowCount(); n++) {\r
147         QTableWidgetItem *item = ui->tableWidget->item(n, 1);\r
148         if (item->text().isEmpty()) {\r
149             QMessageBox::critical(this,\r
150                                   tr("エラー"),\r
151                                   tr("変更後のファイル名が未入力です。"));\r
152             ui->tableWidget->selectRow(n);\r
153             return;\r
154         }\r
155     }\r
156 \r
157     for (int n = 0; n < ui->tableWidget->rowCount(); n++) {\r
158         QTableWidgetItem *iBefore = ui->tableWidget->item(n, 0);\r
159         QTableWidgetItem *iAfter = ui->tableWidget->item(n, 1);\r
160         if (iBefore->text() != iAfter->text()) {\r
161             m_RenameMap.insert(m_dir.absoluteFilePath(iBefore->text()),\r
162                                m_dir.absoluteFilePath(iAfter->text()));\r
163         }\r
164     }\r
165 \r
166     IRenameDialog::accept();\r
167 }\r
168 \r