OSDN Git Service

アイコンを変更。
[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 bool AnyView::setViewItem(const QFileInfo &info)
48 {
49     // フォルダ
50     if (info.isDir()) {
51         changeView(ViewFolder);
52         ui->folderPanel->folderView()->setPath(info.absoluteFilePath(), true);
53         return true;
54     }
55
56     // 画像ファイル
57     changeView(ViewImage);
58     if (ui->graphicsView->setSource(info.absoluteFilePath())) {
59         return true;
60     }
61
62     QSettings settings;
63     bool isBinary = false;
64     if (!settings.value(IniKey_ViewerForceOpen).toBool()) {
65         QStringList list = settings.value(IniKey_ViewerIgnoreExt).toString().split(",");
66         foreach (const QString &ext, list) {
67             if (ext.toLower() == info.suffix().toLower()) {
68                 isBinary = true;
69                 break;
70             }
71         }
72     }
73
74     if (!isBinary) {
75         changeView(ViewText);
76         QFile file(info.absoluteFilePath());
77         if (file.open(QIODevice::ReadOnly)) {
78             ui->textView->setSource(file.readAll());
79             file.close();
80             return true;
81         }
82     }
83
84     changeView(ViewText);
85     ui->textView->setSource("");
86     return false;
87 }
88
89 FolderPanel *AnyView::folderPanel() const
90 {
91     return ui->folderPanel;
92 }
93
94 SimpleImageView *AnyView::imageView() const
95 {
96     return ui->graphicsView;
97 }
98
99 SimpleTextView *AnyView::textView() const
100 {
101     return ui->textView;
102 }
103
104 QWidget *AnyView::visibleView() const
105 {
106     if (ui->folderPanel->isVisible()) {
107         return ui->folderPanel->folderView();
108     }
109     if (ui->graphicsView->isVisible()) {
110         return ui->graphicsView;
111     }
112     if (ui->textView->isVisible()) {
113         return ui->textView;
114     }
115     return NULL;
116 }
117
118 void AnyView::focusInEvent(QFocusEvent *)
119 {
120     qDebug() << "AnyView::focusInEvent();";
121
122     if (ui->folderPanel->isVisible()) {
123         ui->folderPanel->folderView()->setFocus();
124     }
125     else if (ui->graphicsView->isVisible()) {
126         ui->graphicsView->setFocus();
127     }
128     else {
129         Q_ASSERT(ui->textView->isVisible());
130         ui->textView->setFocus();
131     }
132 }