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 QTableView* FolderPanel::fileTable()
\r
49 return ui->fileTable;
\r
52 const QTableView *FolderPanel::fileTable() const
\r
54 return ui->fileTable;
\r
57 const QString FolderPanel::side() const
\r
59 return ui->fileTable->side();
\r
62 void FolderPanel::setSide(const QString &side)
\r
64 ui->fileTable->setSide(side);
\r
67 FileTableModel *model = new FileTableModel();
\r
68 connect(model, SIGNAL(rootChanged(QString)),
\r
69 ui->locationField, SLOT(setText(QString)));
\r
70 connect(model, SIGNAL(stateChanged(int,int,quint64)),
\r
71 this, SLOT(onStateChanged(int,int,quint64)));
\r
72 connect(model, SIGNAL(listUpdated()),
\r
73 ui->fileTable, SLOT(refresh()));
\r
74 connect(model, SIGNAL(filesDropped(QFileInfoList)),
\r
75 ui->fileTable, SLOT(acceptDrops(QFileInfoList)));
\r
79 model->setFilter(QDir::NoDot | QDir::AllDirs | QDir::Files);
\r
80 if (settings.value(IniKey_ShowHidden, false).toBool()) {
\r
81 model->setFilter(model->filter() | QDir::Hidden);
\r
83 if (settings.value(IniKey_ShowSystem, false).toBool()) {
\r
84 model->setFilter(model->filter() | QDir::System);
\r
87 model->setSorting(QDir::Name); // 0
\r
88 int sortBy = settings.value(side + slash + IniKey_SortBy, SortByName).toInt();
\r
90 case SortByDate: model->setSorting(model->sorting() | QDir::Time); break;
\r
91 case SortBySize: model->setSorting(model->sorting() | QDir::Size); break;
\r
92 case SortByType: model->setSorting(model->sorting() | QDir::Type); break;
\r
93 default: model->setSorting(model->sorting() | QDir::Name); break;
\r
95 // デフォルトだと文字列は昇順で、数値は降順…orz
\r
96 int orderBy = settings.value(side + slash + IniKey_OrderBy, OrderByAsc).toInt();
\r
97 if (((sortBy == SortByName || sortBy == SortByType) && orderBy == OrderByDesc) ||
\r
98 ((sortBy == SortByDate || sortBy == SortBySize) && orderBy == OrderByAsc))
\r
100 model->setSorting(model->sorting() | QDir::Reversed);
\r
103 switch (settings.value(side + slash + IniKey_PutDirs, PutDirsFirst).toInt()) {
\r
104 case PutDirsFirst: model->setSorting(model->sorting() | QDir::DirsFirst); break;
\r
105 case PutDirsLast: model->setSorting(model->sorting() | QDir::DirsLast); break;
\r
108 if (settings.value(side + slash + IniKey_IgnoreCase, true).toBool()) {
\r
109 model->setSorting(model->sorting() | QDir::IgnoreCase);
\r
112 QString key = side + slash + IniKey_Dir;
\r
113 QString path = settings.value(key, QDir::homePath()).toString();
\r
115 model->updateAppearance();
\r
116 ui->fileTable->setModel(model);
\r
117 ui->fileTable->setRootPath(path, true);
\r
120 void FolderPanel::updateAppearance()
\r
122 QSettings settings;
\r
126 font = ui->locationField->font();
\r
127 font = settings.value(IniKey_BoxFont, font).value<QFont>();
\r
128 palette = ui->locationField->palette();
\r
131 settings.value(IniKey_BoxColorBg, palette.base()).value<QColor>());
\r
134 settings.value(IniKey_BoxColorFg, palette.text()).value<QColor>());
\r
135 ui->locationField->setFont(font);
\r
136 ui->locationField->setPalette(palette);
\r
138 palette = ui->fileTable->palette();
\r
141 settings.value(IniKey_ViewColorBgNormal, palette.base()).value<QColor>());
\r
142 ui->fileTable->setPalette(palette);
\r
144 FileTableModel *model = static_cast<FileTableModel*>(ui->fileTable->model());
\r
146 model->updateAppearance();
\r
150 void FolderPanel::onStateChanged(int checkedFolders, int checkedFiles, quint64 totalSize)
\r
153 if (checkedFolders > 0) {
\r
154 msg += tr("%1個のフォルダ ").arg(checkedFolders);
\r
156 if (checkedFiles > 0) {
\r
157 msg += tr("%1個のファイル ").arg(checkedFiles);
\r
159 if (msg.length() > 0) {
\r
161 msg += FilesizeToString(totalSize);
\r
164 ui->label->setText(msg);
\r
168 void FolderPanel::on_locationField_editingFinished()
\r
170 ui->locationField->blockSignals(true);
\r
172 QString path = ui->locationField->text();
\r
173 ui->fileTable->setRootPath(path, true);
\r
175 ui->locationField->blockSignals(false);
\r