OSDN Git Service

0eff910ce3030b2006dab1ae06db47294a682a9f
[gefu/Gefu.git] / anyview.cpp
1 #include "common.h"
2 #include "folderview.h"
3 #include "anyview.h"
4 #include "ui_anyview.h"
5
6 #include <QDebug>
7 #include <QSettings>
8
9 AnyView::AnyView(QWidget *parent) :
10     QWidget(parent),
11     ui(new Ui::AnyView)
12 {
13     ui->setupUi(this);
14
15     // 初期状態では全て非表示
16     ui->folderPanel->setVisible(false);
17     ui->graphicsView->setVisible(false);
18     ui->textView->setVisible(false);
19 }
20
21 AnyView::~AnyView()
22 {
23     delete ui;
24 }
25
26 void AnyView::changeView(int viewType)
27 {
28     qDebug() << "AnyView::changeView();" << viewType;
29
30     // 一度すべてを非表示にする
31     ui->folderPanel->setVisible(false);
32     ui->graphicsView->setVisible(false);
33     ui->textView->setVisible(false);
34
35     QWidget *w;
36     switch (viewType) {
37     case AnyView::ViewFolder:   w = ui->folderPanel; break;
38     case AnyView::ViewImage:    w = ui->graphicsView; break;
39     case AnyView::ViewText:     w = ui->textView; break;
40     default: Q_ASSERT(false);   w = NULL; break;
41     }
42
43     this->setVisible(true);
44     w->setVisible(true);
45 }
46
47 void AnyView::setViewItem(const QFileInfo &info)
48 {
49     setUpdatesEnabled(false);
50
51     if (info.isDir()) {
52         changeView(ViewFolder);
53         ui->folderPanel->folderView()->setPath(info.absoluteFilePath(), true);
54     }
55     else {
56         QSettings settings;
57         bool isBinary = false;
58         if (!settings.value(IniKey_ViewerForceOpen).toBool()) {
59             QStringList list = settings.value(IniKey_ViewerIgnoreExt).toString().split(",");
60             foreach (const QString &ext, list) {
61                 if (ext.toLower() == info.suffix().toLower()) {
62                     isBinary = true;
63                     break;
64                 }
65             }
66         }
67
68         // TODO:画像ビューアで表示できるか?
69
70         if (!isBinary) {
71             changeView(ViewText);
72             QFile file(info.absoluteFilePath());
73             if (file.open(QIODevice::ReadOnly)) {
74                 ui->textView->setSource(file.readAll());
75                 file.close();
76             }
77         }
78         else {
79             changeView(ViewText);
80             ui->textView->setSource("");
81         }
82
83     }
84
85     setUpdatesEnabled(true);
86 }
87
88 FolderPanel *AnyView::folderPanel() const
89 {
90     return ui->folderPanel;
91 }
92
93 SimpleImageView *AnyView::imageView() const
94 {
95     return ui->graphicsView;
96 }
97
98 SimpleTextView *AnyView::textView() const
99 {
100     return ui->textView;
101 }
102
103
104 void AnyView::focusInEvent(QFocusEvent *)
105 {
106     qDebug() << "AnyView::focusInEvent();";
107
108     if (ui->folderPanel->isVisible()) {
109         ui->folderPanel->folderView()->setFocus();
110     }
111     else if (ui->graphicsView->isVisible()) {
112         ui->graphicsView->setFocus();
113     }
114     else {
115         Q_ASSERT(ui->textView->isVisible());
116         ui->textView->setFocus();
117     }
118 }