--- /dev/null
+#include "filereadworker.h"
+
+#include <QDebug>
+#include <QThread>
+
+FileReadWorker::FileReadWorker() :
+ AbstractWorker(),
+ m_file()
+{
+}
+
+FileReadWorker::~FileReadWorker()
+{
+ qDebug() << "FileReadWorker::~FileReadWorker()---------------------------";
+}
+
+bool FileReadWorker::open(const QString &path)
+{
+ m_file.setFileName(path);
+ return m_file.open(QIODevice::ReadOnly);
+}
+
+void FileReadWorker::run()
+{
+ if (!m_file.isOpen()) {
+ emit finished();
+ return;
+ }
+
+ emit size(m_file.size());
+
+ QByteArray data;
+ while (!m_file.atEnd()) {
+ this->thread()->msleep(1);
+ if (isAborted()) {
+ emit finished(true);
+ m_file.close();
+ return;
+ }
+
+ data.append(m_file.read(2048));
+ emit progress(data.size());
+ }
+
+ emit resultReady(data);
+ emit finished();
+}
+#include "filereadworker.h"
#include "foldermodel.h"
#include "folderview.h"
#include "mainwindow.h"
///
Panel::Panel(QWidget *parent) :
QWidget(parent),
- ui(new Ui::Panel)
+ ui(new Ui::Panel),
+ m_worker()
{
ui->setupUi(this);
ui->imageView->setVisible(false);
ui->textView->setVisible(false);
+ ui->progressBar->setVisible(false);
}
///////////////////////////////////////////////////////////////////////////////
ui->imageView->initialize(w);
ui->folderPanel->initialize(w);
ui->textView->initialize(w);
+ ui->progressBar->installEventFilter(w);
}
///////////////////////////////////////////////////////////////////////////////
{
qDebug() << "Panel::setViewItem()" << index;
+ if (m_worker) {
+ m_worker->abort();
+ }
+
+ ui->progressBar->setVisible(false);
if (!index.isValid()) {
ui->imageView->setVisible(false);
ui->textView->setVisible(false);
return;
}
- QPixmap pixmap(path);
- if (!pixmap.isNull()) {
- ui->imageView->setSource(pixmap);
- ui->folderPanel->setVisible(false);
- ui->textView->setVisible(false);
- ui->imageView->setVisible(true);
- return;
- }
-
- QFile file(path);
- QByteArray data;
- if (file.open(QIODevice::ReadOnly)) {
- data = file.readAll();
- file.close();
- }
-
- ui->textView->setSource(data);
- ui->folderPanel->setVisible(false);
+ m_worker = new FileReadWorker();
+ connect(m_worker, SIGNAL(size(int)), ui->progressBar, SLOT(setMaximum(int)));
+ connect(m_worker, SIGNAL(progress(int)), ui->progressBar, SLOT(setValue(int)));
+ connect(m_worker, SIGNAL(resultReady(QByteArray)), this, SLOT(onReady(QByteArray)));
+ ui->progressBar->setValue(0);
+ ui->progressBar->setVisible(true);
ui->imageView->setVisible(false);
- ui->textView->setVisible(true);
+ ui->textView->setVisible(false);
+ ui->folderPanel->setVisible(false);
+
+ m_worker->open(path);
+ m_worker->start();
}
///////////////////////////////////////////////////////////////////////////////
if (ui->folderPanel->isVisible()) {
return ui->folderPanel->itemView();
}
+ if (ui->progressBar->isVisible()) {
+ return ui->progressBar;
+ }
qDebug() << ">>>>>>>>>> visibleView() Logic error <<<<<<<<<<";
return NULL;
}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Panel::onReady
+/// \param data ファイルの内容
+///
+/// ファイルの内容を表示します。
+///
+void Panel::onReady(const QByteArray &data)
+{
+ ui->progressBar->setVisible(false);
+
+ QPixmap pixmap;
+ if (pixmap.loadFromData(data)) {
+ ui->imageView->setSource(pixmap);
+ ui->folderPanel->setVisible(false);
+ ui->textView->setVisible(false);
+ ui->imageView->setVisible(true);
+ ui->imageView->setFocus();
+ return;
+ }
+
+ ui->textView->setSource(data);
+ ui->folderPanel->setVisible(false);
+ ui->imageView->setVisible(false);
+ ui->textView->setVisible(true);
+ ui->textView->setFocus();
+}