2 #include "filetablemodel.h"
\r
3 #include "folderpanel.h"
\r
4 #include "mainwindow.h"
\r
5 #include "ui_folderpanel.h"
\r
7 #include <QMessageBox>
\r
10 #include <QDateTime>
\r
11 #include <QDesktopServices>
\r
12 #include <QSettings>
\r
14 #include <windows.h>
\r
17 QString FilesizeToString(quint64 size)
\r
19 if (size >= 1024 * 1024 * 1024) {
\r
20 return QString("%1GB").arg(int(10 * size / (1024 * 1024 * 1024)) / 10.0);
\r
22 if (size >= 1024 * 1024) {
\r
23 return QString("%1MB").arg(int(10 * size / (1024 * 1024)) / 10.0);
\r
26 return QString("%1KB").arg(int(10 * size / 1024) / 10.0);
\r
28 return QString("%1B").arg(size);
\r
31 FolderPanel::FolderPanel(QWidget *parent) :
\r
33 ui(new Ui::FolderPanel)
\r
36 ui->fileTable->setModel(new FileTableModel(this));
\r
39 QHeaderView *header = ui->fileTable->horizontalHeader();
\r
40 header->setSectionResizeMode(0, QHeaderView::ResizeToContents);
\r
41 header->setSectionResizeMode(1, QHeaderView::Stretch);
\r
42 header->setSectionResizeMode(2, QHeaderView::ResizeToContents);
\r
43 header->setSectionResizeMode(3, QHeaderView::ResizeToContents);
\r
45 header->setDefaultSectionSize(header->minimumSectionSize());
\r
48 FolderPanel::~FolderPanel()
\r
53 QTableView* FolderPanel::fileTable()
\r
55 return ui->fileTable;
\r
58 const QTableView *FolderPanel::fileTable() const
\r
60 return ui->fileTable;
\r
63 const QString FolderPanel::side() const
\r
65 return ui->fileTable->side();
\r
68 void FolderPanel::setSide(const QString &side)
\r
70 ui->fileTable->setSide(side);
\r
73 FileTableModel *model = new FileTableModel();
\r
74 connect(model, SIGNAL(rootChanged(QString)),
\r
75 ui->locationField, SLOT(setText(QString)));
\r
76 connect(model, SIGNAL(stateChanged(int,int,quint64)),
\r
77 this, SLOT(onStateChanged(int,int,quint64)));
\r
80 model->setFilter(QDir::NoDot | QDir::AllDirs | QDir::Files);
\r
81 if (settings.value(IniKey_ShowHidden, false).toBool()) {
\r
82 model->setFilter(model->filter() | QDir::Hidden);
\r
84 if (settings.value(IniKey_ShowSystem, false).toBool()) {
\r
85 model->setFilter(model->filter() | QDir::System);
\r
88 model->setSorting(QDir::Name); // 0
\r
89 int sortBy = settings.value(side + slash + IniKey_SortBy, SortByName).toInt();
\r
91 case SortByDate: model->setSorting(model->sorting() | QDir::Time); break;
\r
92 case SortBySize: model->setSorting(model->sorting() | QDir::Size); break;
\r
93 case SortByType: model->setSorting(model->sorting() | QDir::Type); break;
\r
94 default: model->setSorting(model->sorting() | QDir::Name); break;
\r
96 // デフォルトだと文字列は昇順で、数値は降順…orz
\r
97 int orderBy = settings.value(side + slash + IniKey_OrderBy, OrderByDesc).toInt();
\r
98 if (((sortBy == SortByName || sortBy == SortByType) && orderBy == OrderByDesc) ||
\r
99 ((sortBy == SortByDate || sortBy == SortBySize) && orderBy == OrderByAsc))
\r
101 model->setSorting(model->sorting() | QDir::Reversed);
\r
104 switch (settings.value(side + slash + IniKey_PutDirs, PutDirsFirst).toInt()) {
\r
105 case PutDirsFirst: model->setSorting(model->sorting() | QDir::DirsFirst); break;
\r
106 case PutDirsLast: model->setSorting(model->sorting() | QDir::DirsLast); break;
\r
109 if (settings.value(side + slash + IniKey_IgnoreCase, true).toBool()) {
\r
110 model->setSorting(model->sorting() | QDir::IgnoreCase);
\r
113 QString key = side + slash + IniKey_Dir;
\r
114 QString path = settings.value(key, QDir::homePath()).toString();
\r
115 model->setPath(path);
\r
117 ui->fileTable->setModel(model);
\r
118 ui->fileTable->selectRow(0);
\r
119 ui->fileTable->resizeColumnsToContents();
\r
120 ui->fileTable->resizeRowsToContents();
\r
123 void FolderPanel::onStateChanged(int checkedFolders, int checkedFiles, quint64 totalSize)
\r
126 if (checkedFolders > 0) {
\r
127 msg += tr("%1個のフォルダ ").arg(checkedFolders);
\r
129 if (checkedFiles > 0) {
\r
130 msg += tr("%1個のファイル ").arg(checkedFiles);
\r
132 if (msg.length() > 0) {
\r
134 msg += FilesizeToString(totalSize);
\r
137 ui->label->setText(msg);
\r
141 void FolderPanel::on_locationField_editingFinished()
\r
143 ui->locationField->blockSignals(true);
\r
145 QString path = ui->locationField->text();
\r
146 ui->fileTable->setRootPath(path);
\r
148 ui->locationField->blockSignals(false);
\r