|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "fileviewerpopup.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "menubarcommand.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "menubarcommandids.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "viewerpane.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include <qhboxlayout></qhboxlayout>
|
|
Toshihiro Shimizu |
890ddd |
#include <qdragenterevent></qdragenterevent>
|
|
Toshihiro Shimizu |
890ddd |
#include <qurl></qurl>
|
|
Toshihiro Shimizu |
890ddd |
#include <qpainter></qpainter>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/toonzimageutils.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tsystem.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "timagecache.h"
|
|
Toshihiro Shimizu |
890ddd |
/*
|
|
Toshihiro Shimizu |
890ddd |
#include "imageviewer.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tdata.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tw/mainshell.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tlevel_io.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "vcrpanel.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tframe.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tsound.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tsop.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/application.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/sceneproperties.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toutputproperties.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tabscene.h"
|
|
Toshihiro Shimizu |
890ddd |
class TSoundTrack;
|
|
Toshihiro Shimizu |
890ddd |
using namespace TwConsts;*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// FileViewer
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#if QT_VERSION >= 0x050500
|
|
Toshihiro Shimizu |
890ddd |
FileViewer::FileViewer(QWidget *parent, Qt::WindowFlags flags)
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Toshihiro Shimizu |
890ddd |
FileViewer::FileViewer(QWidget *parent, Qt::WFlags flags)
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Shinya Kitaoka |
120a6e |
: QWidget(parent), m_fileSize(0), m_player(0), m_snd(0), m_soundOn(false) {
|
|
Shinya Kitaoka |
120a6e |
setAcceptDrops(true);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void FileViewer::dragEnterEvent(QDragEnterEvent *event) {
|
|
Shinya Kitaoka |
120a6e |
if (event->mimeData()->hasUrls()) event->acceptProposedAction();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void FileViewer::dropEvent(QDropEvent *event) {
|
|
Shinya Kitaoka |
120a6e |
QList<qurl> urls = event->mimeData()->urls();</qurl>
|
|
Shinya Kitaoka |
120a6e |
TFilePath path = TFilePath(urls[0].toLocalFile().toStdString());
|
|
Shinya Kitaoka |
120a6e |
if (path.isEmpty()) return;
|
|
Shinya Kitaoka |
120a6e |
setPath(path);
|
|
Shinya Kitaoka |
120a6e |
event->acceptProposedAction();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void FileViewer::setPath(const TFilePath &fp, int from, int to, int step,
|
|
Shinya Kitaoka |
120a6e |
TSoundTrack *snd) {
|
|
Shinya Kitaoka |
120a6e |
if ((int)m_fids.size() > 0) clearViewerCache();
|
|
Shinya Kitaoka |
120a6e |
m_path = fp;
|
|
Shinya Kitaoka |
120a6e |
m_snd = snd;
|
|
Shinya Kitaoka |
120a6e |
m_fids.clear();
|
|
Shinya Kitaoka |
120a6e |
m_index = -1;
|
|
Shinya Kitaoka |
120a6e |
m_fileSize = 0;
|
|
Shinya Kitaoka |
120a6e |
m_fileDate = "";
|
|
Shinya Kitaoka |
120a6e |
if (fp.getDots() == "..") {
|
|
Shinya Kitaoka |
120a6e |
m_levelName = fp.withoutParentDir().withFrame().getWideString();
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
m_levelName = fp.withoutParentDir().getWideString();
|
|
Shinya Kitaoka |
120a6e |
updateFileInfo(m_path);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
m_lr = TLevelReaderP();
|
|
Shinya Kitaoka |
120a6e |
if (step != 0) // e' un render
|
|
Shinya Kitaoka |
120a6e |
for (int i = from; i <= to; i += step) m_fids.push_back(TFrameId(i));
|
|
Shinya Kitaoka |
120a6e |
else if (fp != TFilePath() &&
|
|
Shinya Kitaoka |
120a6e |
TSystem::doesExistFileOrLevel(fp)) // e' un view
|
|
Shinya Kitaoka |
120a6e |
{
|
|
Shinya Kitaoka |
120a6e |
try {
|
|
Shinya Kitaoka |
120a6e |
m_lr = TLevelReaderP(fp);
|
|
Shinya Kitaoka |
120a6e |
TLevelP level = m_lr->loadInfo();
|
|
Shinya Kitaoka |
120a6e |
if (!level || level->getFrameCount() == 0) return;
|
|
Shinya Kitaoka |
120a6e |
m_palette = level->getPalette();
|
|
Shinya Kitaoka |
120a6e |
if (!m_palette && (fp.getType() == "tzp" || fp.getType() == "tzu"))
|
|
Shinya Kitaoka |
120a6e |
m_palette =
|
|
Shinya Kitaoka |
120a6e |
ToonzImageUtils::loadTzPalette(fp.withType("plt").withNoFrame());
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
for (TLevel::Iterator it = level->begin(); it != level->end(); ++it)
|
|
Shinya Kitaoka |
120a6e |
m_fids.push_back(it->first);
|
|
Shinya Kitaoka |
120a6e |
showFrame(0);
|
|
Shinya Kitaoka |
120a6e |
} catch (...) {
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
} else
|
|
Shinya Kitaoka |
120a6e |
m_image = TImageP();
|
|
Shinya Kitaoka |
120a6e |
// else
|
|
Shinya Kitaoka |
120a6e |
// setImage(TImageP());
|
|
Shinya Kitaoka |
120a6e |
// resetZoom();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
showFrame(0);
|
|
Shinya Kitaoka |
120a6e |
// configureNotify();
|
|
Shinya Kitaoka |
120a6e |
// if(m_listener) m_listener->onPathChange(fp);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void FileViewer::clearViewerCache() {
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < (int)m_fids.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TFrameId fid = m_fids[i];
|
|
Shinya Kitaoka |
120a6e |
string id = toString(m_levelName) + toString(fid.getNumber());
|
|
Shinya Kitaoka |
120a6e |
if (TImageCache::instance()->isCached(id))
|
|
Shinya Kitaoka |
120a6e |
TImageCache::instance()->remove(id);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void FileViewer::updateFileInfo(const TFilePath &fp) {
|
|
Shinya Kitaoka |
120a6e |
TFileStatus fs(fp);
|
|
Shinya Kitaoka |
120a6e |
if (fs.doesExist()) {
|
|
Shinya Kitaoka |
120a6e |
m_fileSize = (int)((fs.getSize() + 1023) / 1024);
|
|
Shinya Kitaoka |
120a6e |
m_fileDate = fs.getLastModificationTime().getFormattedString();
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
m_fileSize = 0;
|
|
Shinya Kitaoka |
120a6e |
m_fileDate = "";
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void FileViewer::showFrame(int index) {
|
|
Shinya Kitaoka |
120a6e |
if (m_fids.empty()) return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
index = tcrop(index, 0, (int)(m_fids.size() - 1));
|
|
Shinya Kitaoka |
120a6e |
m_index = index;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TFrameId fid = m_fids[index];
|
|
Shinya Kitaoka |
120a6e |
string id = toString(m_levelName) + toString(fid.getNumber());
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
try {
|
|
Shinya Kitaoka |
120a6e |
TImageP img;
|
|
Shinya Kitaoka |
120a6e |
if (TImageCache::instance()->isCached(id))
|
|
Shinya Kitaoka |
120a6e |
img = TImageCache::instance()->get(id, false);
|
|
Shinya Kitaoka |
120a6e |
else if (m_lr) {
|
|
Shinya Kitaoka |
120a6e |
TImageReaderP ir = m_lr->getFrameReader(fid);
|
|
Shinya Kitaoka |
120a6e |
if (m_path.getDots() == "..") {
|
|
Shinya Kitaoka |
120a6e |
if (ir)
|
|
Shinya Kitaoka |
120a6e |
updateFileInfo(ir->getFilePath());
|
|
Shinya Kitaoka |
120a6e |
else {
|
|
Shinya Kitaoka |
120a6e |
m_fileSize = 0;
|
|
Shinya Kitaoka |
120a6e |
m_fileDate = "";
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
img = ir->load();
|
|
Shinya Kitaoka |
120a6e |
if (img) {
|
|
Shinya Kitaoka |
120a6e |
if (!img->getPalette() && m_palette)
|
|
Shinya Kitaoka |
120a6e |
img->setPalette(m_palette.getPointer());
|
|
Shinya Kitaoka |
120a6e |
TImageCache::instance()->add(id, img);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
m_image = img;
|
|
Shinya Kitaoka |
120a6e |
// setImage(img);
|
|
Shinya Kitaoka |
120a6e |
} catch (...) {
|
|
Shinya Kitaoka |
120a6e |
m_image = TImageP();
|
|
Shinya Kitaoka |
120a6e |
// setImage(TImageP());
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
// invalidate();
|
|
Shinya Kitaoka |
120a6e |
update();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// if(m_listener)
|
|
Shinya Kitaoka |
120a6e |
// {
|
|
Shinya Kitaoka |
120a6e |
// m_listener->onFrameChange(getFrameId());
|
|
Shinya Kitaoka |
120a6e |
// }
|
|
Shinya Kitaoka |
120a6e |
// playSound();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void FileViewer::paintEvent(QPaintEvent *) { QPainter p(this); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
FileViewerPanel::FileViewerPanel(TWidget *parent, string name)
|
|
Toshihiro Shimizu |
890ddd |
: ImageViewer(parent, name)
|
|
Toshihiro Shimizu |
890ddd |
, m_listener(0)
|
|
Toshihiro Shimizu |
890ddd |
, m_fileSize(0)
|
|
Toshihiro Shimizu |
890ddd |
, m_player(0)
|
|
Toshihiro Shimizu |
890ddd |
, m_snd(0)
|
|
Toshihiro Shimizu |
890ddd |
, m_soundOn(false)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
enableDropTarget(this);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TDropSource::DropEffect FileViewerPanel::onEnter (const Event &event)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
return TDropSource::Copy;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TDropSource::DropEffect FileViewerPanel::onOver (const Event &event)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
return TDropSource::Copy;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FileViewerPanel::onLeave ()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TDropSource::DropEffect FileViewerPanel::onDrop (const Event &event)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
const TFilePathListData *fd =
|
|
Toshihiro Shimizu |
890ddd |
dynamic_cast<const *="" tfilepathlistdata="">(event.m_data);</const>
|
|
Toshihiro Shimizu |
890ddd |
if( fd && fd->getFilePathCount()==1)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
setPath(fd->getFilePath(0));
|
|
Shinya Kitaoka |
120a6e |
return TDropSource::Copy;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
return TDropSource::None;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FileViewerPanel::updateFileInfo(const TFilePath &fp)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
TFileStatus fs(fp);
|
|
Toshihiro Shimizu |
890ddd |
if(fs.doesExist())
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_fileSize = (int)((fs.getSize()+1023)/1024);
|
|
Toshihiro Shimizu |
890ddd |
m_fileDate = fs.getLastModificationTime().getFormattedString();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_fileSize = 0;
|
|
Toshihiro Shimizu |
890ddd |
m_fileDate = "";
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void FileViewerPanel::setPath(const TFilePath &fp, int from, int to, int step,
|
|
Shinya Kitaoka |
120a6e |
TSoundTrack*snd)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
if ((int)m_fids.size() > 0)
|
|
Shinya Kitaoka |
120a6e |
clearViewerCache();
|
|
Toshihiro Shimizu |
890ddd |
m_path = fp;
|
|
Toshihiro Shimizu |
890ddd |
m_snd = snd;
|
|
Toshihiro Shimizu |
890ddd |
m_fids.clear();
|
|
Toshihiro Shimizu |
890ddd |
m_index = -1;
|
|
Toshihiro Shimizu |
890ddd |
m_fileSize = 0;
|
|
Toshihiro Shimizu |
890ddd |
m_fileDate = "";
|
|
Toshihiro Shimizu |
890ddd |
if(fp.getDots()=="..")
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_levelName = fp.withoutParentDir().withFrame().getWideString();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_levelName = fp.withoutParentDir().getWideString();
|
|
Toshihiro Shimizu |
890ddd |
updateFileInfo(m_path);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
m_lr = TLevelReaderP();
|
|
Toshihiro Shimizu |
890ddd |
if (step!=0) //e' un render
|
|
Toshihiro Shimizu |
890ddd |
for (int i=from; i<=to; i+=step)
|
|
Toshihiro Shimizu |
890ddd |
m_fids.push_back(TFrameId(i));
|
|
Toshihiro Shimizu |
890ddd |
else if(fp != TFilePath() && TSystem::doesExistFileOrLevel(fp)) //e' un view
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
try
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_lr = TLevelReaderP(fp);
|
|
Toshihiro Shimizu |
890ddd |
TLevelP level = m_lr->loadInfo();
|
|
Toshihiro Shimizu |
890ddd |
if(!level || level->getFrameCount()==0) return;
|
|
Toshihiro Shimizu |
890ddd |
m_palette = level->getPalette();
|
|
Toshihiro Shimizu |
890ddd |
if (!m_palette && (fp.getType()=="tzp" || fp.getType()=="tzu"))
|
|
Shinya Kitaoka |
120a6e |
m_palette =
|
|
Shinya Kitaoka |
120a6e |
ToonzImageUtils::loadTzPalette(fp.withType("plt").withNoFrame());
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
for(TLevel::Iterator it = level->begin(); it != level->end(); ++it)
|
|
Toshihiro Shimizu |
890ddd |
m_fids.push_back(it->first);
|
|
Toshihiro Shimizu |
890ddd |
showFrame(0);
|
|
Toshihiro Shimizu |
890ddd |
} catch(...) {return;}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
setImage(TImageP());
|
|
Toshihiro Shimizu |
890ddd |
//resetZoom();
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
showFrame(0);
|
|
Toshihiro Shimizu |
890ddd |
configureNotify();
|
|
Toshihiro Shimizu |
890ddd |
if(m_listener) m_listener->onPathChange(fp);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FileViewerPanel::resetZoom()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
ImageViewer::resetZoom();
|
|
Toshihiro Shimizu |
890ddd |
if(m_listener) m_listener->onZoomChange();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void FileViewerPanel::zoom(const TPoint ¢er, double factor, bool
|
|
Shinya Kitaoka |
120a6e |
isZoomWheel)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
ImageViewer::zoom(center, factor, isZoomWheel);
|
|
Toshihiro Shimizu |
890ddd |
if(m_listener) m_listener->onZoomChange();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FileViewerPanel::playSound()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
static bool first = true;
|
|
Toshihiro Shimizu |
890ddd |
static bool audioCardInstalled;
|
|
Toshihiro Shimizu |
890ddd |
if (!m_snd || !m_soundOn)
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
if (first)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
audioCardInstalled = TSoundOutputDevice::installed();
|
|
Toshihiro Shimizu |
890ddd |
first = false;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (!audioCardInstalled)
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (!m_player)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_player = new TSoundOutputDevice();
|
|
Toshihiro Shimizu |
890ddd |
m_player->attach(this);
|
|
Toshihiro Shimizu |
890ddd |
m_player->setVolume(1);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
if (m_player)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
int fps = TApplication::instance()->getCurrentScene()->getProperties()
|
|
Toshihiro Shimizu |
890ddd |
->getOutputProperties()->getFrameRate();
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
int samplePerFrame = (int) m_snd->getSampleRate() / fps;
|
|
Toshihiro Shimizu |
890ddd |
TINT32 firstSample = (m_fids[m_index].getNumber()-1) * samplePerFrame;
|
|
Toshihiro Shimizu |
890ddd |
TINT32 lastSample = firstSample + samplePerFrame;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
try
|
|
Shinya Kitaoka |
120a6e |
{
|
|
Toshihiro Shimizu |
890ddd |
m_player->play(m_snd, firstSample, lastSample, false, false);
|
|
Toshihiro Shimizu |
890ddd |
if(m_player->isPlaying())
|
|
Toshihiro Shimizu |
890ddd |
m_player->setVolume(1);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
catch (TSoundDeviceException &e)
|
|
Shinya Kitaoka |
120a6e |
{
|
|
Toshihiro Shimizu |
890ddd |
string msg;
|
|
Toshihiro Shimizu |
890ddd |
if (e.getType() == TSoundDeviceException::UnsupportedFormat)
|
|
Shinya Kitaoka |
120a6e |
{
|
|
Toshihiro Shimizu |
890ddd |
try {
|
|
Shinya Kitaoka |
120a6e |
TSoundTrackFormat fmt =
|
|
Shinya Kitaoka |
120a6e |
m_player->getPreferredFormat(m_snd->getFormat());
|
|
Shinya Kitaoka |
120a6e |
m_player->play( TSop::convert(m_snd, fmt), firstSample, lastSample,
|
|
Shinya Kitaoka |
120a6e |
false, false);
|
|
Toshihiro Shimizu |
890ddd |
if(m_player->isPlaying())
|
|
Toshihiro Shimizu |
890ddd |
m_player->setVolume(1);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
catch (TSoundDeviceException &ex) {
|
|
Toshihiro Shimizu |
890ddd |
throw TException(ex.getMessage());
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
void FileViewerPanel::showFrame(int index)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
if(m_fids.empty()) return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
index = tcrop(index, 0, (int)(m_fids.size()-1));
|
|
Toshihiro Shimizu |
890ddd |
m_index = index;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TFrameId fid = m_fids[index];
|
|
Toshihiro Shimizu |
890ddd |
string id = toString(m_levelName) + toString(fid.getNumber());
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
try
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
TImageP img;
|
|
Shinya Kitaoka |
120a6e |
if(TImageCache::instance()->isCached(id))
|
|
Shinya Kitaoka |
120a6e |
img = TImageCache::instance()->get(id,false);
|
|
Shinya Kitaoka |
120a6e |
else if (m_lr)
|
|
Shinya Kitaoka |
120a6e |
{
|
|
Shinya Kitaoka |
120a6e |
TImageReaderP ir = m_lr->getFrameReader(fid);
|
|
Toshihiro Shimizu |
890ddd |
if(m_path.getDots()=="..")
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
if(ir) updateFileInfo(ir->getFilePath());
|
|
Toshihiro Shimizu |
890ddd |
else {m_fileSize=0;m_fileDate="";}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
img = ir->load();
|
|
Toshihiro Shimizu |
890ddd |
if (img)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
if(!img->getPalette() && m_palette)
|
|
Shinya Kitaoka |
120a6e |
img->setPalette(m_palette.getPointer());
|
|
Toshihiro Shimizu |
890ddd |
TImageCache::instance()->add(id,img);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
setImage(img);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
catch(...)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
setImage(TImageP());
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
invalidate();
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
if(m_listener)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
//if(m_path.getDots()=="..")
|
|
Shinya Kitaoka |
120a6e |
// m_listener->onPathChange(m_path);
|
|
Toshihiro Shimizu |
890ddd |
// else
|
|
Toshihiro Shimizu |
890ddd |
m_listener->onFrameChange(getFrameId());
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
playSound();
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FileViewerPanel::clearViewerCache()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
int i;
|
|
Toshihiro Shimizu |
890ddd |
for(i = 0; i<(int)m_fids.size(); i++)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
TFrameId fid = m_fids[i];
|
|
Toshihiro Shimizu |
890ddd |
string id = toString(m_levelName) + toString(fid.getNumber());
|
|
Toshihiro Shimizu |
890ddd |
if(TImageCache::instance()->isCached(id))
|
|
Shinya Kitaoka |
120a6e |
TImageCache::instance()->remove(id);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void FileViewerPanel::onTimer(int)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
if(m_fids.empty() || m_index>=(int)(m_fids.size()-1))
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
showFrame(0);
|
|
Toshihiro Shimizu |
890ddd |
stopTimer();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
showFrame(m_index+1);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class FileViewerPopup : public TPopup, public FileViewerPanel::Listener {
|
|
Toshihiro Shimizu |
890ddd |
FileViewerPanel *m_viewer;
|
|
Toshihiro Shimizu |
890ddd |
FlipPanel *m_flipPanel;
|
|
Toshihiro Shimizu |
890ddd |
const int m_topBarHeight, m_botBarHeight;
|
|
Toshihiro Shimizu |
890ddd |
TRect m_titleBox, m_frameBox;
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
FileViewerPopup(string name)
|
|
Toshihiro Shimizu |
890ddd |
: TPopup(TMainshell::getMainshell(), name)
|
|
Toshihiro Shimizu |
890ddd |
, m_topBarHeight(15)
|
|
Toshihiro Shimizu |
890ddd |
, m_botBarHeight(20+15) {
|
|
Toshihiro Shimizu |
890ddd |
m_isMenu = false;
|
|
Toshihiro Shimizu |
890ddd |
m_viewer = new FileViewerPanel(this, "imageViewer");
|
|
Toshihiro Shimizu |
890ddd |
m_viewer->setListener(this);
|
|
Toshihiro Shimizu |
890ddd |
m_flipPanel = new FlipPanel(this, FlipPanel::WITH_COLORFILTER|
|
|
Shinya Kitaoka |
120a6e |
FlipPanel::WITH_SPEEDSLIDER);
|
|
Toshihiro Shimizu |
890ddd |
m_flipPanel->setVCR(m_viewer);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
setSize(600,400);
|
|
Toshihiro Shimizu |
890ddd |
setCaption("Viewer");
|
|
Toshihiro Shimizu |
890ddd |
m_viewer->resetZoom();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void configureNotify(const TDimension &size) {
|
|
Toshihiro Shimizu |
890ddd |
m_titleBox = TRect(4,size.ly-m_topBarHeight+1,getLx()-5,size.ly-2);
|
|
Toshihiro Shimizu |
890ddd |
m_frameBox = m_titleBox;
|
|
Shinya Kitaoka |
120a6e |
m_viewer->setGeometry(1,m_botBarHeight+2,size.lx-2,size.ly-m_topBarHeight-2);
|
|
Toshihiro Shimizu |
890ddd |
TDimension vcrSize(size.lx-8,m_botBarHeight);
|
|
Toshihiro Shimizu |
890ddd |
TPoint p((size.lx-vcrSize.lx)/2,1);
|
|
Toshihiro Shimizu |
890ddd |
m_flipPanel->setGeometry(p, vcrSize);
|
|
Toshihiro Shimizu |
890ddd |
m_viewer->invalidate();
|
|
Toshihiro Shimizu |
890ddd |
invalidate();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void drawTitle() {
|
|
Toshihiro Shimizu |
890ddd |
TPoint p(m_titleBox.getP00()+TPoint(4,1));
|
|
Toshihiro Shimizu |
890ddd |
setColor(Black);
|
|
Toshihiro Shimizu |
890ddd |
wstring nameStr = m_viewer->getLevelName();
|
|
Toshihiro Shimizu |
890ddd |
TFrameId fid = m_viewer->getFrameId();
|
|
Toshihiro Shimizu |
890ddd |
string fidStr;
|
|
Toshihiro Shimizu |
890ddd |
if(fid.getNumber()>0) fidStr = m_viewer->getFrameId().expand();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
string framesStr = toString(m_viewer->getFrameCount())+" fr";
|
|
Toshihiro Shimizu |
890ddd |
string sizeStr = toString(m_viewer->getFileSize()) + "K";
|
|
Toshihiro Shimizu |
890ddd |
string dateStr = m_viewer->getFileDate();
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
wstring w = nameStr + L" ::";
|
|
Toshihiro Shimizu |
890ddd |
drawText(p,w);
|
|
Toshihiro Shimizu |
890ddd |
p.x += getTextSize(w).lx;
|
|
Toshihiro Shimizu |
890ddd |
m_frameBox.x0 = p.x;
|
|
Toshihiro Shimizu |
890ddd |
string s = " " + fidStr + " ";
|
|
Toshihiro Shimizu |
890ddd |
drawText(p,s);
|
|
Toshihiro Shimizu |
890ddd |
p.x += getTextSize(s).lx;
|
|
Toshihiro Shimizu |
890ddd |
m_frameBox.x1 = p.x;
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
s = ":: " + framesStr + " :: " + sizeStr + " :: " + dateStr;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
drawText(p,s);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
string zoomStr = "zoom "+toString(troundp(m_viewer->getZoomFactor())) +
|
|
Shinya Kitaoka |
120a6e |
"%";
|
|
Shinya Kitaoka |
120a6e |
TPoint p1(m_titleBox.getP10());
|
|
Shinya Kitaoka |
120a6e |
p1.x -= getTextSize(zoomStr).lx+4;
|
|
Shinya Kitaoka |
120a6e |
drawText(p1,zoomStr);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void repaint() {
|
|
Toshihiro Shimizu |
890ddd |
TDimension size = getSize();
|
|
Toshihiro Shimizu |
890ddd |
int lx = size.lx;
|
|
Toshihiro Shimizu |
890ddd |
int ly = size.ly;
|
|
Toshihiro Shimizu |
890ddd |
int y = ly-1-m_topBarHeight;
|
|
Toshihiro Shimizu |
890ddd |
TRect r(1,y+1,lx-2,ly-1);
|
|
Toshihiro Shimizu |
890ddd |
setColor(ToonzBgColor);
|
|
Toshihiro Shimizu |
890ddd |
fillRect(r);
|
|
Toshihiro Shimizu |
890ddd |
drawTitle();
|
|
Toshihiro Shimizu |
890ddd |
r.y0=1;r.y1=m_botBarHeight;
|
|
Toshihiro Shimizu |
890ddd |
setColor(Gray210);
|
|
Toshihiro Shimizu |
890ddd |
fillRect(r);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
setColor(Gray150);
|
|
Toshihiro Shimizu |
890ddd |
drawLine(1,y,lx-2,y);
|
|
Toshihiro Shimizu |
890ddd |
y = m_botBarHeight+1;
|
|
Toshihiro Shimizu |
890ddd |
drawLine(1,y,lx-2,y);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
setColor(Black);
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
TFrame::drawCorner(this, 0,0,1,1);
|
|
Toshihiro Shimizu |
890ddd |
TFrame::drawCorner(this, lx-1,0,-1,1);
|
|
Toshihiro Shimizu |
890ddd |
TFrame::drawCorner(this, 0,ly-1,1,-1);
|
|
Toshihiro Shimizu |
890ddd |
TFrame::drawCorner(this, lx-1,ly-1,-1,-1);
|
|
Toshihiro Shimizu |
890ddd |
int d = 3;
|
|
Toshihiro Shimizu |
890ddd |
drawLine(0,d,0,ly-1-d);
|
|
Toshihiro Shimizu |
890ddd |
drawLine(lx-1,d,lx-1,ly-1-d);
|
|
Toshihiro Shimizu |
890ddd |
drawLine(d,ly-1,lx-1-d,ly-1);
|
|
Toshihiro Shimizu |
890ddd |
drawLine(d,0,lx-1-d,0);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void setFrameRate(int frameRate)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_flipPanel->setFrameRate(frameRate);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
void load(const TFilePath &fp) {
|
|
Toshihiro Shimizu |
890ddd |
m_flipPanel->enableAudioButton(false);
|
|
Toshihiro Shimizu |
890ddd |
m_viewer->setPath(fp);
|
|
Toshihiro Shimizu |
890ddd |
m_flipPanel->reset();
|
|
Toshihiro Shimizu |
890ddd |
m_flipPanel->setLevel(m_viewer->getLevelFids());
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void load(const TFilePath &fp, int from, int to, int step, TSoundTrack* snd) {
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
m_viewer->setPath(fp, from, to, step, snd);
|
|
Toshihiro Shimizu |
890ddd |
m_flipPanel->enableAudioButton(snd!=0);
|
|
Toshihiro Shimizu |
890ddd |
m_flipPanel->setLevel(m_viewer->getLevelFids());
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bool onClose()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
m_viewer->setPath(TFilePath());
|
|
Toshihiro Shimizu |
890ddd |
return true;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void onPathChange(const TFilePath &fp) {invalidate(m_titleBox);}
|
|
Shinya Kitaoka |
120a6e |
void onFrameChange(const TFrameId &fid) {m_flipPanel->onViewerRepaint();
|
|
Shinya Kitaoka |
120a6e |
invalidate(m_frameBox); }
|
|
Toshihiro Shimizu |
890ddd |
void onZoomChange() {invalidate(m_titleBox);}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
namespace {
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class FileViewerPopupPool { // singleton
|
|
Shinya Kitaoka |
120a6e |
public:
|
|
Toshihiro Shimizu |
890ddd |
std::vector<fileviewerpopup*> m_popups;</fileviewerpopup*>
|
|
Toshihiro Shimizu |
890ddd |
int m_index;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
FileViewerPopupPool() : m_index(-1){}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
static FileViewerPopupPool *instance() {
|
|
Toshihiro Shimizu |
890ddd |
static FileViewerPopupPool _instance;
|
|
Toshihiro Shimizu |
890ddd |
return &_instance;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
FileViewerPopup *getNew(bool doOpen) {
|
|
Toshihiro Shimizu |
890ddd |
// prima cerco fra i chiusi
|
|
Toshihiro Shimizu |
890ddd |
for(int i=0;i<(int)m_popups.size();i++)
|
|
Toshihiro Shimizu |
890ddd |
if(!m_popups[i]->isOpen())
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
m_index = i;
|
|
Toshihiro Shimizu |
890ddd |
if (doOpen)
|
|
Toshihiro Shimizu |
890ddd |
m_popups[m_index]->openPopup();
|
|
Toshihiro Shimizu |
890ddd |
return m_popups[m_index];
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
string name("fileViewerPopup");
|
|
Toshihiro Shimizu |
890ddd |
if(m_popups.size()>0)
|
|
Toshihiro Shimizu |
890ddd |
name += toString((int)m_popups.size()+1);
|
|
Toshihiro Shimizu |
890ddd |
FileViewerPopup *popup = new FileViewerPopup(name);
|
|
Toshihiro Shimizu |
890ddd |
m_index = m_popups.size();
|
|
Toshihiro Shimizu |
890ddd |
m_popups.push_back(popup);
|
|
Toshihiro Shimizu |
890ddd |
if (doOpen)
|
|
Toshihiro Shimizu |
890ddd |
popup->openPopup();
|
|
Toshihiro Shimizu |
890ddd |
return popup;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
FileViewerPopup *getCurrent(bool doOpen=true) {
|
|
Toshihiro Shimizu |
890ddd |
if(0<=m_index && m_index<(int)m_popups.size() &&
|
|
Toshihiro Shimizu |
890ddd |
m_popups[m_index]->isOpen())
|
|
Toshihiro Shimizu |
890ddd |
return m_popups[m_index];
|
|
Toshihiro Shimizu |
890ddd |
return getNew(doOpen);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
}//namespace
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void setFrameRateInViewers(int frameRate)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
for (UINT i=0; i<fileviewerpopuppool::instance()->m_popups.size(); i++)</fileviewerpopuppool::instance()->
|
|
Toshihiro Shimizu |
890ddd |
FileViewerPopupPool::instance()->m_popups[i]->setFrameRate(frameRate);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void resetViewer()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
FileViewerPopupPool::instance()->getCurrent(false)->onClose();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
void viewFile(const TFilePath &fp)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
if(fp != TFilePath())
|
|
Toshihiro Shimizu |
890ddd |
FileViewerPopupPool::instance()->getCurrent()->load(fp);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void viewFile(const TFilePath &fp, int from, int to, int step, TSoundTrack* snd)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
if(fp != TFilePath())
|
|
Shinya Kitaoka |
120a6e |
FileViewerPopupPool::instance()->getCurrent()->load(fp, from, to, step,
|
|
Shinya Kitaoka |
120a6e |
snd);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class OpenFileViewerCommand : public TGuiCommandExecutor
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
OpenFileViewerCommand()
|
|
Toshihiro Shimizu |
890ddd |
: TGuiCommandExecutor("MI_OpenFileViewer")
|
|
Toshihiro Shimizu |
890ddd |
{}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void onCommand() {
|
|
Toshihiro Shimizu |
890ddd |
FileViewerPopupPool::instance()->getNew(true);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
} openFileViewerCommand;
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// FileViewerPopup
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#if QT_VERSION >= 0x050500
|
|
Toshihiro Shimizu |
890ddd |
FileViewerPopup::FileViewerPopup(QWidget *parent, Qt::WindowFlags flags)
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Toshihiro Shimizu |
890ddd |
FileViewerPopup::FileViewerPopup(QWidget *parent, Qt::WFlags flags)
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Shinya Kitaoka |
120a6e |
: QWidget(parent) {
|
|
Shinya Kitaoka |
120a6e |
setWindowTitle(tr("Viewer"));
|
|
Shinya Kitaoka |
120a6e |
QHBoxLayout *layout = new QHBoxLayout(this);
|
|
Shinya Kitaoka |
120a6e |
FileViewer *fileViewer = new FileViewer(this);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
layout->addWidget(fileViewer);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
setLayout(layout);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
OpenPopupCommandHandler<fileviewerpopup> openPltGizmoPopup(MI_OpenFileViewer);</fileviewerpopup>
|