OSDN Git Service

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