OSDN Git Service

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