OSDN Git Service

Ver0.26
[gefu/Gefu.git] / renamemultidialog.cpp
1 #include "renamemultidialog.h"\r
2 #include "ui_renamemultidialog.h"\r
3 \r
4 #include <QFileIconProvider>\r
5 #include <QMessageBox>\r
6 \r
7 ///////////////////////////////////////////////////////////////////////////////\r
8 /// \brief RenameMultiDialog::RenameMultiDialog\r
9 /// \param parent   親ウィジェット\r
10 ///\r
11 /// コンストラクタ\r
12 ///\r
13 RenameMultiDialog::RenameMultiDialog(QWidget *parent) :\r
14     AbstractRenameDialog(parent),\r
15     ui(new Ui::RenameMultiDialog)\r
16 {\r
17     ui->setupUi(this);\r
18 \r
19     // ヘッダーラベルを設定する\r
20     QStringList labels;\r
21     labels << tr("変更前") << tr("変更後");\r
22     ui->tableWidget->setHorizontalHeaderLabels(labels);\r
23 \r
24     ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);\r
25     ui->tableWidget->horizontalHeader()->setStretchLastSection(true);\r
26 }\r
27 \r
28 ///////////////////////////////////////////////////////////////////////////////\r
29 /// \brief RenameMultiDialog::~RenameMultiDialog\r
30 ///\r
31 /// デストラクタ\r
32 ///\r
33 RenameMultiDialog::~RenameMultiDialog()\r
34 {\r
35     delete ui;\r
36 }\r
37 \r
38 ///////////////////////////////////////////////////////////////////////////////\r
39 /// \brief RenameMultiDialog::setNames\r
40 /// \param names    ファイルインフォリスト\r
41 ///\r
42 /// 変更前後のファイル名を設定します。\r
43 ///\r
44 void RenameMultiDialog::setNames(const QFileInfoList &names)\r
45 {\r
46     foreach (const QFileInfo &info, names) {\r
47         int row = ui->tableWidget->rowCount();\r
48         ui->tableWidget->insertRow(row);\r
49 \r
50         QTableWidgetItem *iBefore = new QTableWidgetItem(info.fileName());\r
51         iBefore->setFlags(iBefore->flags() ^ Qt::ItemIsEditable);\r
52         iBefore->setIcon(QFileIconProvider().icon(info));\r
53         ui->tableWidget->setItem(row, 0, iBefore);\r
54 \r
55         QTableWidgetItem *iAfter = new QTableWidgetItem(info.fileName());\r
56         ui->tableWidget->setItem(row, 1, iAfter);\r
57     }\r
58     ui->tableWidget->resizeColumnsToContents();\r
59     ui->tableWidget->resizeRowsToContents();\r
60 }\r
61 \r
62 ///////////////////////////////////////////////////////////////////////////////\r
63 /// \brief RenameMultiDialog::on_btn_UpperAll_clicked\r
64 ///\r
65 /// ファイル名全体を大文字にします。\r
66 ///\r
67 void RenameMultiDialog::on_btn_UpperAll_clicked()\r
68 {\r
69     for (int n = 0; n < ui->tableWidget->rowCount(); n++) {\r
70         QTableWidgetItem *item = ui->tableWidget->item(n, 0);\r
71         ui->tableWidget->item(n, 1)->setText(item->text().toUpper());\r
72     }\r
73 }\r
74 \r
75 ///////////////////////////////////////////////////////////////////////////////\r
76 /// \brief RenameMultiDialog::on_btn_LowerAll_clicked\r
77 ///\r
78 /// ファイル名全体を小文字にします。\r
79 ///\r
80 void RenameMultiDialog::on_btn_LowerAll_clicked()\r
81 {\r
82     for (int n = 0; n < ui->tableWidget->rowCount(); n++) {\r
83         QTableWidgetItem *item = ui->tableWidget->item(n, 0);\r
84         ui->tableWidget->item(n, 1)->setText(item->text().toLower());\r
85     }\r
86 }\r
87 \r
88 ///////////////////////////////////////////////////////////////////////////////\r
89 /// \brief RenameMultiDialog::on_btn_UpperExt_clicked\r
90 ///\r
91 /// 拡張子を大文字にします。\r
92 ///\r
93 void RenameMultiDialog::on_btn_UpperExt_clicked()\r
94 {\r
95     for (int n = 0; n < ui->tableWidget->rowCount(); n++) {\r
96         QTableWidgetItem *item = ui->tableWidget->item(n, 0);\r
97         QFileInfo info(m_dir.absoluteFilePath(item->text()));\r
98         ui->tableWidget->item(n, 1)->setText(\r
99                     info.completeBaseName() + "." + info.suffix().toUpper());\r
100     }\r
101 }\r
102 \r
103 ///////////////////////////////////////////////////////////////////////////////\r
104 /// \brief RenameMultiDialog::on_btn_LowerExt_clicked\r
105 ///\r
106 /// 拡張子を小文字にします。\r
107 ///\r
108 void RenameMultiDialog::on_btn_LowerExt_clicked()\r
109 {\r
110     for (int n = 0; n < ui->tableWidget->rowCount(); n++) {\r
111         QTableWidgetItem *item = ui->tableWidget->item(n, 0);\r
112         QFileInfo info(m_dir.absoluteFilePath(item->text()));\r
113         ui->tableWidget->item(n, 1)->setText(\r
114                     info.completeBaseName() + "." + info.suffix().toLower());\r
115     }\r
116 }\r
117 \r
118 ///////////////////////////////////////////////////////////////////////////////\r
119 /// \brief RenameMultiDialog::on_replaceExec_clicked\r
120 ///\r
121 /// 置換・挿入を実行します。\r
122 ///\r
123 void RenameMultiDialog::on_replaceExec_clicked()\r
124 {\r
125     for (int n = 0; n < ui->tableWidget->rowCount(); n++) {\r
126         QTableWidgetItem *item = ui->tableWidget->item(n, 0);\r
127         QString name = item->text();\r
128 \r
129         if (!ui->replaceFrom->text().isEmpty()) {\r
130             name.replace(ui->replaceFrom->text(), ui->replaceTo->text());\r
131         }\r
132         if (!ui->insertText->text().isEmpty()) {\r
133             int pos = ui->insertPos->text().toInt();\r
134             if (pos < 0) {\r
135                 pos = name.size() + pos + 1;\r
136             }\r
137             name.insert(pos, ui->insertText->text());\r
138         }\r
139         ui->tableWidget->item(n, 1)->setText(name);\r
140     }\r
141 }\r
142 \r
143 ///////////////////////////////////////////////////////////////////////////////\r
144 /// \brief RenameMultiDialog::on_numberExec_clicked\r
145 ///\r
146 /// 連番処理を実行します。\r
147 ///\r
148 void RenameMultiDialog::on_numberExec_clicked()\r
149 {\r
150     bool bOk;\r
151     int nStart = ui->numberStart->text().toInt(&bOk);\r
152     if (!bOk) {\r
153         QMessageBox::critical(this,\r
154                               tr("エラー"),\r
155                               tr("連番開始番号が不正です。"));\r
156         ui->numberStart->setFocus();\r
157         return;\r
158     }\r
159     int nColumn = ui->numberStart->text().size();\r
160     int nStep = ui->numberStep->text().toInt();\r
161     for (int n = 0; n < ui->tableWidget->rowCount(); n++, nStart += nStep) {\r
162         QTableWidgetItem *item = ui->tableWidget->item(n, 0);\r
163         QString name = item->text();\r
164         QFileInfo info(m_dir.absoluteFilePath(name));\r
165 \r
166         QString first = ui->numberFirst->text();\r
167         first.replace("?B", info.completeBaseName());\r
168         first.replace("?E", info.suffix());\r
169 \r
170         QString last = ui->numberLast->text();\r
171         last.replace("?B", info.completeBaseName());\r
172         last.replace("?E", info.suffix());\r
173 \r
174         QString fmt = "%0" + QString("%1").arg(nColumn) + "d";\r
175         QString number;\r
176         number.sprintf(fmt.toLatin1(), nStart);\r
177 \r
178         ui->tableWidget->item(n, 1)->setText(first + number + last);\r
179     }\r
180 }\r
181 \r
182 ///////////////////////////////////////////////////////////////////////////////\r
183 /// \brief RenameMultiDialog::on_buttonBox_clicked\r
184 /// \param button   押されたボタン\r
185 ///\r
186 /// リセットボタンクリック時の処理を行います。\r
187 ///\r
188 void RenameMultiDialog::on_buttonBox_clicked(QAbstractButton *button)\r
189 {\r
190     if (button->text() == tr("Reset")) {\r
191         for (int n = 0; n < ui->tableWidget->rowCount(); n++) {\r
192             QTableWidgetItem *item = ui->tableWidget->item(n, 0);\r
193             ui->tableWidget->item(n, 1)->setText(item->text());\r
194         }\r
195     }\r
196 }\r
197 \r
198 ///////////////////////////////////////////////////////////////////////////////\r
199 /// \brief RenameMultiDialog::accept\r
200 ///\r
201 /// OKボタンクリック時の処理を行います。\r
202 ///\r
203 void RenameMultiDialog::accept()\r
204 {\r
205     // 未入力チェック\r
206     for (int n = 0; n < ui->tableWidget->rowCount(); n++) {\r
207         QTableWidgetItem *item = ui->tableWidget->item(n, 1);\r
208         if (item->text().isEmpty()) {\r
209             QMessageBox::critical(this,\r
210                                   tr("エラー"),\r
211                                   tr("変更後のファイル名が未入力です。"));\r
212             ui->tableWidget->selectRow(n);\r
213             return;\r
214         }\r
215     }\r
216 \r
217     for (int n = 0; n < ui->tableWidget->rowCount(); n++) {\r
218         QTableWidgetItem *iBefore = ui->tableWidget->item(n, 0);\r
219         QTableWidgetItem *iAfter = ui->tableWidget->item(n, 1);\r
220         if (iBefore->text() != iAfter->text()) {\r
221             m_RenameMap.insert(m_dir.absoluteFilePath(iBefore->text()),\r
222                                m_dir.absoluteFilePath(iAfter->text()));\r
223         }\r
224     }\r
225 \r
226     AbstractRenameDialog::accept();\r
227 }\r