|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "texception.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tpropertytype.h"
|
|
Toshihiro Shimizu |
890ddd |
//#include "timageinfo.h"
|
|
Toshihiro Shimizu |
890ddd |
//#include "tlevel_io.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tproperty.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tiio.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
|
db7f14 |
#if !defined(x64) && !defined(__LP64__) && !defined(LINUX) && !(defined(__GNUC__) && defined(_WIN32))
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//*******************************************************************************
|
|
Toshihiro Shimizu |
890ddd |
// 32-bit version
|
|
Toshihiro Shimizu |
890ddd |
//*******************************************************************************
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
9f5a1b |
#ifdef _WIN32
|
|
|
e280ae |
#ifdef _MSC_VER
|
|
Toshihiro Shimizu |
890ddd |
#pragma warning(disable : 4996)
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
fd19c4 |
#define list QuickTime_list
|
|
Shinya Kitaoka |
fd19c4 |
#define map QuickTime_map
|
|
Shinya Kitaoka |
fd19c4 |
#define iterator QuickTime_iterator
|
|
Shinya Kitaoka |
fd19c4 |
#define float_t QuickTime_float_t
|
|
Shinya Kitaoka |
fd19c4 |
#define GetProcessInformation QuickTime_GetProcessInformation
|
|
Shinya Kitaoka |
fd19c4 |
#define int_fast8_t QuickTime_int_fast8_t
|
|
Shinya Kitaoka |
fd19c4 |
#define int_fast16_t QuickTime_int_fast16_t
|
|
Shinya Kitaoka |
fd19c4 |
#define uint_fast16_t QuickTime_uint_fast16_t
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "QTML.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "Movies.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "Script.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "FixMath.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "Sound.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "QuickTimeComponents.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tquicktime.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#undef list
|
|
Toshihiro Shimizu |
890ddd |
#undef map
|
|
Toshihiro Shimizu |
890ddd |
#undef iterator
|
|
Toshihiro Shimizu |
890ddd |
#undef float_t
|
|
Shinya Kitaoka |
fd19c4 |
#undef GetProcessInformation
|
|
Shinya Kitaoka |
fd19c4 |
#undef int_fast8_t
|
|
Shinya Kitaoka |
fd19c4 |
#undef int_fast16_t
|
|
Shinya Kitaoka |
fd19c4 |
#undef uint_fast16_t
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#define list List
|
|
Toshihiro Shimizu |
890ddd |
#define map Map
|
|
Toshihiro Shimizu |
890ddd |
#define iterator Iterator
|
|
Toshihiro Shimizu |
890ddd |
#define float_t Float_t
|
|
Toshihiro Shimizu |
890ddd |
#include <carbon carbon.h=""></carbon>
|
|
Toshihiro Shimizu |
890ddd |
#include <quicktime movies.h=""></quicktime>
|
|
Toshihiro Shimizu |
890ddd |
#include <quicktime imagecompression.h=""></quicktime>
|
|
Toshihiro Shimizu |
890ddd |
#include <quicktime quicktimecomponents.h=""></quicktime>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#undef list
|
|
Toshihiro Shimizu |
890ddd |
#undef map
|
|
Toshihiro Shimizu |
890ddd |
#undef iterator
|
|
Toshihiro Shimizu |
890ddd |
#undef float_t
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
/*
|
|
Shinya Kitaoka |
120a6e |
questo file gestisce il salvataggio in un .tnz e il caricamento dei setting dei
|
|
Shinya Kitaoka |
120a6e |
mov.
|
|
Shinya Kitaoka |
120a6e |
viene usato il popup fornito da quicktime, con tutti i suoi setting e i sotto
|
|
Shinya Kitaoka |
120a6e |
settings.
|
|
Shinya Kitaoka |
120a6e |
i setting sono memorizzati da quicktime in un componentInstance. Da qui, possono
|
|
Shinya Kitaoka |
120a6e |
essere convertiti in un atomContainer,
|
|
Shinya Kitaoka |
120a6e |
che e' una struttura simile alla nostra propertyGroup, ma con gli atomi
|
|
Shinya Kitaoka |
120a6e |
strutturati ad albero.
|
|
Shinya Kitaoka |
120a6e |
sono state scritte due funzioni di conversione da atomContainer a propertygroup
|
|
Shinya Kitaoka |
120a6e |
e viceversa
|
|
Shinya Kitaoka |
120a6e |
ogni atom ha un type, id, e numero figli. se numero figli=0 allora l'atomo e'una
|
|
Shinya Kitaoka |
120a6e |
foglia,
|
|
Toshihiro Shimizu |
890ddd |
e quindi ha un buffer di dati di valori char.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
ogni atomo viene trasformato in una stringProperty. il nome della stringProperty
|
|
Shinya Kitaoka |
120a6e |
e'
|
|
Toshihiro Shimizu |
890ddd |
"type id numeroFigli"
|
|
Shinya Kitaoka |
120a6e |
se numerofigli>0, allora la stringProperty ha un valore nullo, e le prossime
|
|
Shinya Kitaoka |
120a6e |
numerofigli property contengono i figli;
|
|
Shinya Kitaoka |
120a6e |
se numerofigli==0, allora il valore della property contiene il buffer di dati,
|
|
Toshihiro Shimizu |
890ddd |
convertito in stringa.
|
|
Toshihiro Shimizu |
890ddd |
ecco coem viene convertito il buffer in stringa:
|
|
Shinya Kitaoka |
120a6e |
se ad esempio il buffer e' composto di 3 bytes, buf[0] = 13 buf[1]=0 buf[2]=231
|
|
Shinya Kitaoka |
120a6e |
allora la strnga valore sara' "13 0 231"
|
|
Shinya Kitaoka |
120a6e |
se ci sono piu 0 consecutivi, vengono memorizzati per salvare spazio come "z
|
|
Shinya Kitaoka |
120a6e |
count" in cui count e' il numero di 0.
|
|
Toshihiro Shimizu |
890ddd |
esempio: buf[0] = 13 buf[1]=0 buf[2]=0 buf[3]=0 buf[4]=0 buf5]=231
|
|
Toshihiro Shimizu |
890ddd |
allora str = "13 z 4 231"
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "movsettings.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void visitAtoms(const QTAtomContainer &atoms, const QTAtom &parent,
|
|
Shinya Kitaoka |
120a6e |
TPropertyGroup &pg) {
|
|
Shinya Kitaoka |
120a6e |
QTAtom curr = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
do {
|
|
Shinya Kitaoka |
120a6e |
if (QTNextChildAnyType(atoms, parent, curr, &curr) != noErr) assert(false);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (curr == 0) break;
|
|
Shinya Kitaoka |
120a6e |
QTAtomType atomType;
|
|
Shinya Kitaoka |
120a6e |
QTAtomID id;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
QTGetAtomTypeAndID(atoms, curr, &atomType, &id);
|
|
Shinya Kitaoka |
120a6e |
int sonCount = QTCountChildrenOfType(atoms, curr, 0);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
char buffer[1024];
|
|
Rozhuk Ivan |
823a31 |
snprintf(buffer, sizeof(buffer), "%d %d %d",
|
|
Rozhuk Ivan |
823a31 |
(int)atomType, (int)id, sonCount);
|
|
Shinya Kitaoka |
120a6e |
string str(buffer);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (sonCount > 0) {
|
|
Shinya Kitaoka |
120a6e |
pg.add(new TStringProperty(str, TString()));
|
|
Shinya Kitaoka |
120a6e |
visitAtoms(atoms, curr, pg);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
else {
|
|
Shinya Kitaoka |
120a6e |
long size;
|
|
Shinya Kitaoka |
120a6e |
UCHAR *atomData;
|
|
Shinya Kitaoka |
120a6e |
if (QTGetAtomDataPtr(atoms, curr, &size, (char **)&atomData) != noErr)
|
|
Shinya Kitaoka |
120a6e |
assert(false);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
string strapp;
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < size; i++) {
|
|
Shinya Kitaoka |
120a6e |
string num;
|
|
Shinya Kitaoka |
120a6e |
if (atomData[i] == 0) {
|
|
Shinya Kitaoka |
120a6e |
int count = 1;
|
|
Shinya Kitaoka |
120a6e |
while ((i + 1) < size && atomData[i + 1] == 0) i++, count++;
|
|
Shinya Kitaoka |
120a6e |
if (count > 1) {
|
|
Shinya Kitaoka |
120a6e |
num = std::to_string(count);
|
|
Shinya Kitaoka |
120a6e |
strapp = strapp + "z " + num + " ";
|
|
Shinya Kitaoka |
120a6e |
continue;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
num = std::to_string(atomData[i]);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
strapp = strapp + string(num) + " ";
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// unsigned short*buffer = new unsigned short[size];
|
|
Shinya Kitaoka |
120a6e |
// buffer[size]=0;
|
|
Shinya Kitaoka |
120a6e |
// for (i=0; i
|
|
Shinya Kitaoka |
120a6e |
// buffer[i] = atomData[i]+1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
wstring data = ::to_wstring(strapp);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
pg.add(new TStringProperty(str, data));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
} while (curr != 0);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------
|
|
Shinya Kitaoka |
120a6e |
namespace {
|
|
Shinya Kitaoka |
120a6e |
void compareAtoms(const QTAtomContainer &atoms1, QTAtom parent1,
|
|
Shinya Kitaoka |
120a6e |
const QTAtomContainer &atoms2, QTAtom parent2) {
|
|
Shinya Kitaoka |
120a6e |
QTAtom curr1 = 0, curr2 = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
assert(QTCountChildrenOfType(atoms1, parent1, 0) ==
|
|
Shinya Kitaoka |
120a6e |
QTCountChildrenOfType(atoms2, parent2, 0));
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
do {
|
|
Shinya Kitaoka |
120a6e |
if (QTNextChildAnyType(atoms1, parent1, curr1, &curr1) != noErr)
|
|
Shinya Kitaoka |
120a6e |
assert(false);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (QTNextChildAnyType(atoms2, parent2, curr2, &curr2) != noErr)
|
|
Shinya Kitaoka |
120a6e |
assert(false);
|
|
Shinya Kitaoka |
120a6e |
assert((curr1 != 0 && curr2 != 0) || (curr1 == 0 && curr2 == 0));
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (curr1 == 0 || curr2 == 0) break;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
QTAtomType atomType1, atomType2;
|
|
Shinya Kitaoka |
120a6e |
QTAtomID id1, id2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
QTGetAtomTypeAndID(atoms1, curr1, &atomType1, &id1);
|
|
Shinya Kitaoka |
120a6e |
QTGetAtomTypeAndID(atoms2, curr2, &atomType2, &id2);
|
|
Shinya Kitaoka |
120a6e |
assert(atomType1 == atomType2);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
int sonCount1 = QTCountChildrenOfType(atoms1, curr1, 0);
|
|
Shinya Kitaoka |
120a6e |
int sonCount2 = QTCountChildrenOfType(atoms2, curr2, 0);
|
|
Shinya Kitaoka |
120a6e |
assert(sonCount1 == sonCount2);
|
|
Shinya Kitaoka |
120a6e |
if (sonCount1 > 0)
|
|
Shinya Kitaoka |
120a6e |
compareAtoms(atoms1, curr1, atoms2, curr2);
|
|
Shinya Kitaoka |
120a6e |
else {
|
|
Shinya Kitaoka |
120a6e |
long size1;
|
|
Shinya Kitaoka |
120a6e |
UCHAR *atomData1;
|
|
Shinya Kitaoka |
120a6e |
long size2;
|
|
Shinya Kitaoka |
120a6e |
UCHAR *atomData2;
|
|
Shinya Kitaoka |
120a6e |
if (QTGetAtomDataPtr(atoms1, curr1, &size1, (char **)&atomData1) != noErr)
|
|
Shinya Kitaoka |
120a6e |
assert(false);
|
|
Shinya Kitaoka |
120a6e |
if (QTGetAtomDataPtr(atoms2, curr2, &size2, (char **)&atomData2) != noErr)
|
|
Shinya Kitaoka |
120a6e |
assert(false);
|
|
Shinya Kitaoka |
120a6e |
assert(size1 == size2);
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < size1; i++) assert(atomData1[i] == atomData2[i]);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
} while (curr1 != 0 && curr2 != 0);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void fromAtomsToProperties(const QTAtomContainer &atoms, TPropertyGroup &pg) {
|
|
Shinya Kitaoka |
120a6e |
pg.clear();
|
|
Shinya Kitaoka |
120a6e |
visitAtoms(atoms, kParentAtomIsContainer, pg);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------
|
|
Shinya Kitaoka |
120a6e |
void visitprops(TPropertyGroup &pg, int &index, QTAtomContainer &atoms,
|
|
Shinya Kitaoka |
120a6e |
QTAtom parent) {
|
|
Shinya Kitaoka |
120a6e |
int count = pg.getPropertyCount();
|
|
Shinya Kitaoka |
120a6e |
while (index < count) {
|
|
Shinya Kitaoka |
120a6e |
TStringProperty *p = (TStringProperty *)pg.getProperty(index++);
|
|
Shinya Kitaoka |
120a6e |
string str0 = p->getName();
|
|
Shinya Kitaoka |
120a6e |
const char *buf = str0.c_str();
|
|
Shinya Kitaoka |
120a6e |
int atomType, id, sonCount;
|
|
Shinya Kitaoka |
120a6e |
sscanf(buf, "%d %d %d", &atomType, &id, &sonCount);
|
|
Shinya Kitaoka |
120a6e |
QTAtom newAtom;
|
|
Shinya Kitaoka |
120a6e |
if (sonCount == 0) {
|
|
Shinya Kitaoka |
120a6e |
wstring appow = p->getValue();
|
|
Shinya Kitaoka |
120a6e |
string appo = ::to_string(appow);
|
|
Shinya Kitaoka |
120a6e |
const char *str = appo.c_str();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
vector<uchar> buf;</uchar>
|
|
Shinya Kitaoka |
120a6e |
while (strlen(str) > 0) {
|
|
Shinya Kitaoka |
120a6e |
if (str[0] == 'z') {
|
|
Shinya Kitaoka |
120a6e |
int count = atoi(str + 1);
|
|
Shinya Kitaoka |
120a6e |
str += (count < 10) ? 4 : ((count < 100) ? 5 : 6);
|
|
Shinya Kitaoka |
120a6e |
while (count--) buf.push_back(0);
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
int val = atoi(str);
|
|
Shinya Kitaoka |
120a6e |
assert(val >= 0 && val < 256);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
str += (val < 10) ? 2 : ((val < 100) ? 3 : 4);
|
|
Shinya Kitaoka |
120a6e |
buf.push_back(val);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
// const unsigned short*bufs = str1.c_str();
|
|
Shinya Kitaoka |
120a6e |
// UCHAR *bufc = new UCHAR[size];
|
|
Shinya Kitaoka |
120a6e |
// for (int i=0; i
|
|
Shinya Kitaoka |
120a6e |
// {
|
|
Shinya Kitaoka |
120a6e |
// assert(bufs[i]<257);
|
|
Shinya Kitaoka |
120a6e |
// bufc[i] = (UCHAR)(bufs[i]-1);
|
|
Shinya Kitaoka |
120a6e |
// }
|
|
Shinya Kitaoka |
120a6e |
void *ptr = 0;
|
|
Shinya Kitaoka |
120a6e |
if (buf.size() != 0) {
|
|
Shinya Kitaoka |
120a6e |
ptr = &(buf[0]);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
QTInsertChild(atoms, parent, (QTAtomType)atomType, (QTAtomID)id, 0,
|
|
Shinya Kitaoka |
120a6e |
buf.size(), (void *)ptr, 0);
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
QTInsertChild(atoms, parent, (QTAtomType)atomType, (QTAtomID)id, 0, 0, 0,
|
|
Shinya Kitaoka |
120a6e |
&newAtom);
|
|
Shinya Kitaoka |
120a6e |
visitprops(pg, index, atoms, newAtom);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void fromPropertiesToAtoms(TPropertyGroup &pg, QTAtomContainer &atoms) {
|
|
Shinya Kitaoka |
120a6e |
int index = 0;
|
|
Shinya Kitaoka |
120a6e |
visitprops(pg, index, atoms, kParentAtomIsContainer);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
/*
|
|
Toshihiro Shimizu |
890ddd |
#ifdef MACOSX
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
SCExtendedProcs gProcStruct, ptr;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
static Boolean QTCmpr_FilterProc
|
|
Shinya Kitaoka |
120a6e |
(DialogPtr theDialog, EventRecord *theEvent,
|
|
Toshihiro Shimizu |
890ddd |
short *theItemHit, long theRefCon)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
#pragma unused(theItemHit, theRefCon)
|
|
Toshihiro Shimizu |
890ddd |
Boolean myEventHandled = false;
|
|
Toshihiro Shimizu |
890ddd |
WindowRef myEventWindow = NULL;
|
|
Toshihiro Shimizu |
890ddd |
WindowRef myDialogWindow = NULL;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
myDialogWindow = GetDialogWindow(theDialog);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
switch (theEvent->what) {
|
|
Toshihiro Shimizu |
890ddd |
case updateEvt:
|
|
Toshihiro Shimizu |
890ddd |
myEventWindow = (WindowRef)theEvent->message;
|
|
Shinya Kitaoka |
120a6e |
// Change the window class
|
|
Toshihiro Shimizu |
890ddd |
HIWindowChangeClass(myEventWindow,kUtilityWindowClass);
|
|
Shinya Kitaoka |
120a6e |
// Activate the window scope
|
|
Shinya Kitaoka |
120a6e |
SetWindowActivationScope(myEventWindow,kWindowActivationScopeAll);
|
|
Shinya Kitaoka |
120a6e |
// Set the brushed metal theme on the window
|
|
Shinya Kitaoka |
120a6e |
SetThemeWindowBackground(myEventWindow,kThemeBrushUtilityWindowBackgroundActive,true);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
return(myEventHandled);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void openMovSettingsPopup(TPropertyGroup *props, bool macBringToFront) {
|
|
Shinya Kitaoka |
9f5a1b |
#ifdef _WIN32
|
|
Shinya Kitaoka |
120a6e |
if (InitializeQTML(0) != noErr) return;
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
ComponentInstance ci =
|
|
Shinya Kitaoka |
120a6e |
OpenDefaultComponent(StandardCompressionType, StandardCompressionSubType);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
QTAtomContainer atoms;
|
|
Shinya Kitaoka |
120a6e |
QTNewAtomContainer(&atoms);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
fromPropertiesToAtoms(*props, atoms);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
ComponentResult err;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if ((err = SCSetSettingsFromAtomContainer(ci, atoms)) != noErr) {
|
|
Shinya Kitaoka |
120a6e |
CloseComponent(ci);
|
|
Shinya Kitaoka |
120a6e |
ci = OpenDefaultComponent(StandardCompressionType,
|
|
Shinya Kitaoka |
120a6e |
StandardCompressionSubType);
|
|
Shinya Kitaoka |
120a6e |
assert(false);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
QTDisposeAtomContainer(atoms);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifdef MACOSX
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// Install an external procedure to use a callback filter on the request
|
|
Shinya Kitaoka |
120a6e |
// settings dialog
|
|
Shinya Kitaoka |
120a6e |
// On MACOSX we need to change the dialog appearance in order to pop-up in front
|
|
Shinya Kitaoka |
120a6e |
// of the
|
|
Toshihiro Shimizu |
890ddd |
// toonz main window.
|
|
Toshihiro Shimizu |
890ddd |
/*
|
|
Toshihiro Shimizu |
890ddd |
gProcStruct.filterProc = NewSCModalFilterUPP(QTCmpr_FilterProc);
|
|
Toshihiro Shimizu |
890ddd |
// I don't install any hook
|
|
Toshihiro Shimizu |
890ddd |
gProcStruct.hookProc = NULL;
|
|
Toshihiro Shimizu |
890ddd |
gProcStruct.customName[0] = 0;
|
|
Shinya Kitaoka |
120a6e |
// I don't use refcon
|
|
Toshihiro Shimizu |
890ddd |
gProcStruct.refcon = 0;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// set the current extended procs
|
|
Toshihiro Shimizu |
890ddd |
SCSetInfo(ci, scExtendedProcsType, &gProcStruct);
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
err = SCRequestSequenceSettings(ci);
|
|
Shinya Kitaoka |
120a6e |
// assert(err==noErr);
|
|
Shinya Kitaoka |
120a6e |
QTAtomContainer atomsOut;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (SCGetSettingsAsAtomContainer(ci, &atomsOut) != noErr) assert(false);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
fromAtomsToProperties(atomsOut, *props);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
QTDisposeAtomContainer(atomsOut);
|
|
Shinya Kitaoka |
120a6e |
CloseComponent(ci);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// int dataSize=0, numChildren = 0, numLevels=0;
|
|
Shinya Kitaoka |
120a6e |
// retrieveData(settings, kParentAtomIsContainer, dataSize, numChildren,
|
|
Shinya Kitaoka |
120a6e |
// numLevels);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bool Tiio::isQuicktimeInstalled() {
|
|
Toshihiro Shimizu |
890ddd |
#ifdef MACOSX
|
|
Shinya Kitaoka |
120a6e |
return true;
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
static int ret = -1;
|
|
Shinya Kitaoka |
120a6e |
if (ret == -1) ret = (InitializeQTML(0) == noErr) ? 1 : 0;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
return (ret == 1);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
#else // x64
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//*******************************************************************************
|
|
Toshihiro Shimizu |
890ddd |
// 64-bit proxied version
|
|
Toshihiro Shimizu |
890ddd |
//*******************************************************************************
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// Toonz includes
|
|
Toshihiro Shimizu |
890ddd |
#include "tfilepath.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tstream.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// tipc includes
|
|
Toshihiro Shimizu |
890ddd |
#include "tipc.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "t32bitsrv_wrap.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// MAC-Specific includes
|
|
Toshihiro Shimizu |
890ddd |
#ifdef MACOSX
|
|
Toshihiro Shimizu |
890ddd |
#include <applicationservices applicationservices.h=""></applicationservices>
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "movsettings.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// Using 32-bit background server correspondence to achieve the same result
|
|
Shinya Kitaoka |
120a6e |
void openMovSettingsPopup(TPropertyGroup *props, bool unused) {
|
|
Shinya Kitaoka |
120a6e |
QLocalSocket socket;
|
|
Shinya Kitaoka |
120a6e |
if (!tipc::startSlaveConnection(&socket, t32bitsrv::srvName(), 3000,
|
|
Shinya Kitaoka |
120a6e |
t32bitsrv::srvCmdline(), "_main"))
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// Send the appropriate commands to the server
|
|
Shinya Kitaoka |
120a6e |
tipc::Stream stream(&socket);
|
|
Shinya Kitaoka |
120a6e |
tipc::Message msg;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// We'll communicate through temporary files.
|
|
Shinya Kitaoka |
120a6e |
stream << (msg << QString("$tmpfile_request") << QString("openMovSets"));
|
|
Shinya Kitaoka |
120a6e |
QString res(tipc::readMessage(stream, msg));
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
QString fp;
|
|
Shinya Kitaoka |
120a6e |
msg >> fp;
|
|
Shinya Kitaoka |
120a6e |
assert(res == "ok" && !fp.isEmpty());
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TFilePath tfp(fp.toStdWString());
|
|
Shinya Kitaoka |
120a6e |
{
|
|
Shinya Kitaoka |
120a6e |
// Save the input props to the temporary file
|
|
Shinya Kitaoka |
120a6e |
TOStream os(tfp);
|
|
Shinya Kitaoka |
120a6e |
props->saveData(os);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// Invoke the settings popup
|
|
Shinya Kitaoka |
120a6e |
stream << (msg << tipc::clr << QString("$openMovSettingsPopup") << fp);
|
|
Shinya Kitaoka |
120a6e |
res =
|
|
Shinya Kitaoka |
120a6e |
tipc::readMessageNB(stream, msg, -1, QEventLoop::ExcludeUserInputEvents);
|
|
Shinya Kitaoka |
120a6e |
assert(res == "ok");
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifdef MACOSX
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// Bring this application back to front
|
|
Shinya Kitaoka |
120a6e |
ProcessSerialNumber psn = {0, kCurrentProcess};
|
|
Shinya Kitaoka |
120a6e |
SetFrontProcess(&psn);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
#endif // MACOSX
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
props->clear();
|
|
Shinya Kitaoka |
120a6e |
{
|
|
Shinya Kitaoka |
120a6e |
// Save the input props to the temporary file
|
|
Shinya Kitaoka |
120a6e |
TIStream is(tfp);
|
|
Shinya Kitaoka |
120a6e |
props->loadData(is);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// Release the temporary file
|
|
Shinya Kitaoka |
120a6e |
stream << (msg << tipc::clr << QString("$tmpfile_release")
|
|
Shinya Kitaoka |
120a6e |
<< QString("openMovSets"));
|
|
Shinya Kitaoka |
120a6e |
res = tipc::readMessage(stream, msg);
|
|
Shinya Kitaoka |
120a6e |
assert(res == "ok");
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bool Tiio::isQuicktimeInstalled() {
|
|
Shinya Kitaoka |
120a6e |
// NOTE: This is *NOT* the same function as IsQuickTimeInstalled(), which is
|
|
Shinya Kitaoka |
120a6e |
// implemented locally in the image lib and used there. This function here is
|
|
Shinya Kitaoka |
120a6e |
// actually NEVER USED throughout Toonz, so we're placing a dummy
|
|
Shinya Kitaoka |
120a6e |
// implementation here.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
assert(false);
|
|
Shinya Kitaoka |
120a6e |
return false;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
#endif // else
|