2 #include "filetablemodel.h"
\r
3 #include "folderpanel.h"
\r
4 #include "mainwindow.h"
\r
5 #include "ui_folderpanel.h"
\r
9 QString FilesizeToString(quint64 size)
\r
11 if (size >= 1024 * 1024 * 1024) {
\r
12 return QString("%1GB").arg(int(10 * size / (1024 * 1024 * 1024)) / 10.0);
\r
14 if (size >= 1024 * 1024) {
\r
15 return QString("%1MB").arg(int(10 * size / (1024 * 1024)) / 10.0);
\r
18 return QString("%1KB").arg(int(10 * size / 1024) / 10.0);
\r
20 return QString("%1B").arg(size);
\r
23 FolderPanel::FolderPanel(QWidget *parent) :
\r
25 ui(new Ui::FolderPanel)
\r
28 ui->fileTable->setModel(new FileTableModel(this));
\r
31 QHeaderView *header = ui->fileTable->horizontalHeader();
\r
32 header->setSectionResizeMode(0, QHeaderView::ResizeToContents);
\r
33 header->setSectionResizeMode(1, QHeaderView::Stretch);
\r
34 header->setSectionResizeMode(2, QHeaderView::ResizeToContents);
\r
35 header->setSectionResizeMode(3, QHeaderView::ResizeToContents);
\r
36 header->setDefaultSectionSize(header->minimumSectionSize());
\r
38 QHeaderView *vHeader = ui->fileTable->verticalHeader();
\r
39 vHeader->setDefaultSectionSize(vHeader->defaultSectionSize() * 0.75);
\r
42 FolderPanel::~FolderPanel()
\r
47 const QString FolderPanel::side() const
\r
49 return ui->fileTable->side();
\r
52 void FolderPanel::setSide(const QString &side)
\r
54 ui->fileTable->setSide(side);
\r
57 FileTableModel *model = new FileTableModel();
\r
58 connect(model, SIGNAL(rootChanged(QString)),
\r
59 ui->locationField, SLOT(setText(QString)));
\r
60 connect(model, SIGNAL(stateChanged(int,int,quint64)),
\r
61 this, SLOT(onStateChanged(int,int,quint64)));
\r
62 connect(model, SIGNAL(listUpdated()),
\r
63 ui->fileTable, SLOT(refresh()));
\r
64 connect(ui->fileTable, SIGNAL(filterChanged()),
\r
65 this, SLOT(onFilterChanged()));
\r
68 model->setFilter(QDir::NoDot | QDir::AllDirs | QDir::Files);
\r
69 if (settings.value(IniKey_ShowHidden).toBool()) {
\r
70 model->setFilter(model->filter() | QDir::Hidden);
\r
72 if (settings.value(IniKey_ShowSystem).toBool()) {
\r
73 model->setFilter(model->filter() | QDir::System);
\r
76 model->setSorting(QDir::Name); // 0
\r
77 int sortBy = settings.value(side + slash + IniKey_SortBy).toInt();
\r
79 case SortByDate: model->setSorting(model->sorting() | QDir::Time); break;
\r
80 case SortBySize: model->setSorting(model->sorting() | QDir::Size); break;
\r
81 case SortByType: model->setSorting(model->sorting() | QDir::Type); break;
\r
82 default: model->setSorting(model->sorting() | QDir::Name); break;
\r
84 // デフォルトだと文字列は昇順で、数値は降順…orz
\r
85 int orderBy = settings.value(side + slash + IniKey_OrderBy).toInt();
\r
86 if (((sortBy == SortByName || sortBy == SortByType) && orderBy == OrderByDesc) ||
\r
87 ((sortBy == SortByDate || sortBy == SortBySize) && orderBy == OrderByAsc))
\r
89 model->setSorting(model->sorting() | QDir::Reversed);
\r
92 switch (settings.value(side + slash + IniKey_PutDirs).toInt()) {
\r
93 case PutDirsFirst: model->setSorting(model->sorting() | QDir::DirsFirst); break;
\r
94 case PutDirsLast: model->setSorting(model->sorting() | QDir::DirsLast); break;
\r
97 if (settings.value(side + slash + IniKey_IgnoreCase).toBool()) {
\r
98 model->setSorting(model->sorting() | QDir::IgnoreCase);
\r
101 QString path = settings.value(side + slash + IniKey_Dir).toString();
\r
103 model->updateAppearance();
\r
104 ui->fileTable->setModel(model);
\r
105 ui->fileTable->setRootPath(path, true);
\r
109 void FolderPanel::updateAppearance()
\r
111 QSettings settings;
\r
115 font = settings.value(IniKey_BoxFont).value<QFont>();
\r
116 palette = ui->locationField->palette();
\r
117 palette.setColor(QPalette::Base,
\r
118 settings.value(IniKey_BoxColorBg).value<QColor>());
\r
119 palette.setColor(QPalette::Text,
\r
120 settings.value(IniKey_BoxColorFg).value<QColor>());
\r
121 ui->locationField->setFont(font);
\r
122 ui->locationField->setPalette(palette);
\r
124 palette = ui->fileTable->palette();
\r
125 palette.setColor(QPalette::Base,
\r
126 settings.value(IniKey_ViewColorBgNormal).value<QColor>());
\r
127 ui->fileTable->setPalette(palette);
\r
129 FileTableModel *model = static_cast<FileTableModel*>(ui->fileTable->model());
\r
131 model->updateAppearance();
\r
135 void FolderPanel::onStateChanged(int checkedFolders, int checkedFiles, quint64 totalSize)
\r
138 if (checkedFolders > 0) {
\r
139 msg += tr("%1個のフォルダ ").arg(checkedFolders);
\r
141 if (checkedFiles > 0) {
\r
142 msg += tr("%1個のファイル ").arg(checkedFiles);
\r
144 if (msg.length() > 0) {
\r
146 msg += FilesizeToString(totalSize);
\r
149 if (msg.isEmpty()) {
\r
153 ui->label->setText(msg);
\r
157 void FolderPanel::onFilterChanged()
\r
159 FileTableModel *m = static_cast<FileTableModel*>(ui->fileTable->model());
\r
160 QString filters = "フィルタ:";
\r
161 foreach (const QString &filter, m->nameFilters()) {
\r
162 filters += filter + " ";
\r
164 ui->label->setText(filters);
\r
167 void FolderPanel::on_locationField_editingFinished()
\r
169 ui->locationField->blockSignals(true);
\r
171 QString path = ui->locationField->text();
\r
172 ui->fileTable->setRootPath(path, true);
\r
174 ui->locationField->blockSignals(false);
\r