OSDN Git Service

18841de8af60237b8936c59a4aa106ca5a12ffec
[gefu/Gefu.git] / folderpanel.cpp
1 #include "common.h"
2 #include "mainwindow.h"
3 #include "searchbox.h"
4 #include "locationbox.h"
5 #include "folderpanel.h"
6 #include "ui_folderpanel.h"
7
8 #include <QDebug>
9
10 FolderPanel::FolderPanel(QWidget *parent) :
11     QWidget(parent),
12     ui(new Ui::FolderPanel)
13 {
14     ui->setupUi(this);
15 }
16
17 FolderPanel::~FolderPanel()
18 {
19     delete ui;
20 }
21
22 void FolderPanel::initialize(MainWindow *mainWnd)
23 {
24     qDebug() << "FolderPanel::initialize();";
25
26     // シグナル&スロット
27     connect(ui->folderView, SIGNAL(dataChanged()), this, SLOT(dataChange()));
28     connect(ui->folderView, SIGNAL(doubleClicked(QModelIndex)), mainWnd, SLOT(open(QModelIndex)));
29     connect(ui->folderView, SIGNAL(dropAccepted(QFileInfoList)), mainWnd, SLOT(dropAccept(QFileInfoList)));
30     connect(ui->folderView, SIGNAL(currentChanged(QFileInfo)), mainWnd, SLOT(currentChange(QFileInfo)));
31     connect(ui->folderView, SIGNAL(itemFound()), mainWnd, SLOT(itemFound()));
32     connect(ui->folderView, SIGNAL(itemNotFound()), mainWnd, SLOT(itemNotFound()));
33     connect(ui->folderView, SIGNAL(retrieveFinished()), mainWnd, SLOT(retrieveFinish()));
34     connect(ui->folderView, SIGNAL(requestContextMenu(QContextMenuEvent*)), mainWnd, SLOT(showContextMenu(QContextMenuEvent*)));
35     connect(ui->folderView, SIGNAL(retrieveStarted(QString)), mainWnd, SLOT(retrieveStart(QString)));
36     connect(ui->folderView, SIGNAL(retrieveStarted(QString)), ui->locationBox, SLOT(setText(QString)));
37     connect(ui->searchBox, SIGNAL(textEdited(QString)), mainWnd, SLOT(searchItem(QString)));
38     connect(ui->searchBox, SIGNAL(returnPressed()), mainWnd, SLOT(returnPressInSearchBox()));
39
40     // 初期状態では検索ボックスは非表示
41     ui->searchBox->setVisible(false);
42
43     // ロケーションボックスを初期化する
44     ui->locationBox->initialize();
45
46     // フォルダビューを初期化する
47     ui->folderView->initialize();
48 }
49
50 LocationBox *FolderPanel::locationBox() const
51 {
52     return ui->locationBox;
53 }
54
55 FolderView *FolderPanel::folderView() const
56 {
57     return ui->folderView;
58 }
59
60 SearchBox *FolderPanel::searchBox() const
61 {
62     return ui->searchBox;
63 }
64
65 QLabel *FolderPanel::filterLabel() const
66 {
67     return ui->filterLabel;
68 }
69
70 void FolderPanel::setNameFilters(const QString &filters)
71 {
72     QStringList list = filters.split(" ", QString::SkipEmptyParts);
73     if (list.isEmpty()) {
74         list << "*";
75     }
76     ui->folderView->setNameFilters(list);
77     showNameFilters();
78 }
79
80 void FolderPanel::showNameFilters()
81 {
82     ui->filterLabel->setText(tr("フィルタ:") + ui->folderView->nameFilters().join(" "));
83 }
84
85 void FolderPanel::dataChange()
86 {
87     qDebug() << "FolderPanel::dataChange();";
88
89     FolderView *view = static_cast<FolderView*>(sender());
90     Q_CHECK_PTR(view);
91
92     QFileInfoList list = view->checkedItems();
93     if (list.isEmpty()) {
94         showNameFilters();
95     }
96     else {
97         int numFolders = 0;
98         int numFiles = 0;
99         quint64 size = 0;
100         foreach (const QFileInfo &info, list) {
101             if (info.isDir()) {
102                 numFolders++;
103             }
104             else {
105                 numFiles++;
106                 size += info.size();
107             }
108         }
109
110         QString msg = QString::null;
111         if (numFolders > 0) {
112             msg += tr("%1個のフォルダ ").arg(numFolders);
113         }
114         if (numFiles > 0) {
115             msg += tr("%1個のファイル ").arg(numFiles);
116         }
117
118         if (!msg.isEmpty()) {
119             msg += tr("を選択 合計%1").arg(FilesizeToString(size));
120         }
121
122         ui->filterLabel->setText(msg);
123     }
124 }
125
126 void FolderPanel::focusInEvent(QFocusEvent *)
127 {
128     qDebug() << "FolderPanel::focusInEvent();";
129
130     ui->folderView->setFocus();
131 }