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
44 header->setDefaultSectionSize(header->minimumSectionSize());
\r
46 QHeaderView *vHeader = ui->fileTable->verticalHeader();
\r
47 vHeader->setDefaultSectionSize(vHeader->defaultSectionSize() * 0.75);
\r
50 FolderPanel::~FolderPanel()
\r
55 QTableView* FolderPanel::fileTable()
\r
57 return ui->fileTable;
\r
60 const QTableView *FolderPanel::fileTable() const
\r
62 return ui->fileTable;
\r
65 const QString FolderPanel::side() const
\r
67 return ui->fileTable->side();
\r
70 void FolderPanel::setSide(const QString &side)
\r
72 ui->fileTable->setSide(side);
\r
75 FileTableModel *model = new FileTableModel();
\r
76 connect(model, SIGNAL(rootChanged(QString)),
\r
77 ui->locationField, SLOT(setText(QString)));
\r
78 connect(model, SIGNAL(stateChanged(int,int,quint64)),
\r
79 this, SLOT(onStateChanged(int,int,quint64)));
\r
82 model->setFilter(QDir::NoDot | QDir::AllDirs | QDir::Files);
\r
83 if (settings.value(IniKey_ShowHidden, false).toBool()) {
\r
84 model->setFilter(model->filter() | QDir::Hidden);
\r
86 if (settings.value(IniKey_ShowSystem, false).toBool()) {
\r
87 model->setFilter(model->filter() | QDir::System);
\r
90 model->setSorting(QDir::Name); // 0
\r
91 int sortBy = settings.value(side + slash + IniKey_SortBy, SortByName).toInt();
\r
93 case SortByDate: model->setSorting(model->sorting() | QDir::Time); break;
\r
94 case SortBySize: model->setSorting(model->sorting() | QDir::Size); break;
\r
95 case SortByType: model->setSorting(model->sorting() | QDir::Type); break;
\r
96 default: model->setSorting(model->sorting() | QDir::Name); break;
\r
98 // デフォルトだと文字列は昇順で、数値は降順…orz
\r
99 int orderBy = settings.value(side + slash + IniKey_OrderBy, OrderByDesc).toInt();
\r
100 if (((sortBy == SortByName || sortBy == SortByType) && orderBy == OrderByDesc) ||
\r
101 ((sortBy == SortByDate || sortBy == SortBySize) && orderBy == OrderByAsc))
\r
103 model->setSorting(model->sorting() | QDir::Reversed);
\r
106 switch (settings.value(side + slash + IniKey_PutDirs, PutDirsFirst).toInt()) {
\r
107 case PutDirsFirst: model->setSorting(model->sorting() | QDir::DirsFirst); break;
\r
108 case PutDirsLast: model->setSorting(model->sorting() | QDir::DirsLast); break;
\r
111 if (settings.value(side + slash + IniKey_IgnoreCase, true).toBool()) {
\r
112 model->setSorting(model->sorting() | QDir::IgnoreCase);
\r
115 QString key = side + slash + IniKey_Dir;
\r
116 QString path = settings.value(key, QDir::homePath()).toString();
\r
118 model->updateAppearance();
\r
119 ui->fileTable->setModel(model);
\r
120 ui->fileTable->setRootPath(path, true);
\r
121 ui->fileTable->selectRow(0);
\r
124 void FolderPanel::updateAppearance()
\r
126 QSettings settings;
\r
130 font = ui->locationField->font();
\r
131 font = settings.value(IniKey_BoxFont, font).value<QFont>();
\r
132 palette = ui->locationField->palette();
\r
135 settings.value(IniKey_BoxColorBg, palette.base()).value<QColor>());
\r
138 settings.value(IniKey_BoxColorFg, palette.text()).value<QColor>());
\r
139 ui->locationField->setFont(font);
\r
140 ui->locationField->setPalette(palette);
\r
142 palette = ui->fileTable->palette();
\r
145 settings.value(IniKey_ViewColorBgNormal, palette.base()).value<QColor>());
\r
146 ui->fileTable->setPalette(palette);
\r
148 FileTableModel *model = static_cast<FileTableModel*>(ui->fileTable->model());
\r
150 model->updateAppearance();
\r
154 void FolderPanel::onStateChanged(int checkedFolders, int checkedFiles, quint64 totalSize)
\r
157 if (checkedFolders > 0) {
\r
158 msg += tr("%1個のフォルダ ").arg(checkedFolders);
\r
160 if (checkedFiles > 0) {
\r
161 msg += tr("%1個のファイル ").arg(checkedFiles);
\r
163 if (msg.length() > 0) {
\r
165 msg += FilesizeToString(totalSize);
\r
168 ui->label->setText(msg);
\r
172 void FolderPanel::on_locationField_editingFinished()
\r
174 ui->locationField->blockSignals(true);
\r
176 QString path = ui->locationField->text();
\r
177 ui->fileTable->setRootPath(path, true);
\r
179 ui->locationField->blockSignals(false);
\r