diff --git a/PanoPainter-OSX/main.cpp b/PanoPainter-OSX/main.cpp
index d417c47..91a1b11 100644
--- a/PanoPainter-OSX/main.cpp
+++ b/PanoPainter-OSX/main.cpp
@@ -27,7 +27,7 @@ void global_exception_handler(NSException* e)
[alert runModal];
if (App::I.canvas && App::I.canvas->m_canvas)
- App::I.canvas->m_canvas->project_save_thread(App::I.data_path + "/recovery.pano");
+ App::I.canvas->m_canvas->project_save_thread(App::I.data_path + "/recovery.ppi");
std::terminate();
}
@@ -40,7 +40,7 @@ void global_signal_handler(int e)
[alert runModal];
if (App::I.canvas && App::I.canvas->m_canvas)
- App::I.canvas->m_canvas->project_save_thread(App::I.data_path + "/recovery.pano");
+ App::I.canvas->m_canvas->project_save_thread(App::I.data_path + "/recovery.ppi");
std::terminate();
}
diff --git a/PanoPainter.xcodeproj/project.pbxproj b/PanoPainter.xcodeproj/project.pbxproj
index bc89840..08b572d 100644
--- a/PanoPainter.xcodeproj/project.pbxproj
+++ b/PanoPainter.xcodeproj/project.pbxproj
@@ -9,10 +9,8 @@
/* Begin PBXBuildFile section */
AD02F0C31EDC457C00B2E692 /* sequencer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD02F0C01EDC456800B2E692 /* sequencer.cpp */; };
AD02F0C41EDC457C00B2E692 /* sequencer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD02F0C01EDC456800B2E692 /* sequencer.cpp */; };
- AD06989720CC6C350010825F /* ZipArchive.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD06989620CC6C350010825F /* ZipArchive.framework */; };
AD06989A20CC6C4C0010825F /* ZipArchive.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD06989920CC6C4C0010825F /* ZipArchive.framework */; };
AD06989B20CC84DB0010825F /* ZipArchive.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = AD06989920CC6C4C0010825F /* ZipArchive.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- AD06989D20CC894B0010825F /* ZipArchive.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = AD06989620CC6C350010825F /* ZipArchive.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
AD0E119B1ECA215600CDA6BB /* node_scroll.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD0E11951ECA20F200CDA6BB /* node_scroll.cpp */; };
AD0E119C1ECA215600CDA6BB /* app_events.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD0E11921ECA20F200CDA6BB /* app_events.cpp */; };
AD0E119D1ECA215600CDA6BB /* app_layout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD0E11931ECA20F200CDA6BB /* app_layout.cpp */; };
@@ -119,8 +117,6 @@
AD787AEA20D4611100C4712A /* PanoQL.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = AD787ADD20D4611100C4712A /* PanoQL.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
AD787AF720D4637E00C4712A /* ThumbnailProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = AD787AF620D4637E00C4712A /* ThumbnailProvider.m */; };
AD787AFB20D4637E00C4712A /* PanoThumb.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = AD787AF320D4637E00C4712A /* PanoThumb.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
- AD787AFF20D5AD1500C4712A /* ZipArchive.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD06989620CC6C350010825F /* ZipArchive.framework */; };
- AD787B0020D5AD1700C4712A /* ZipArchive.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD06989620CC6C350010825F /* ZipArchive.framework */; };
ADBC8C4E1FAE7D360094B339 /* node_dialog_browse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ADBC8C471FAE7CC20094B339 /* node_dialog_browse.cpp */; };
ADBC8C4F1FAE7D370094B339 /* node_dialog_browse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ADBC8C471FAE7CC20094B339 /* node_dialog_browse.cpp */; };
ADBC8C551FAFD0520094B339 /* app_cloud.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ADBC8C511FAFD0360094B339 /* app_cloud.cpp */; };
@@ -214,7 +210,6 @@
dstPath = "";
dstSubfolderSpec = 10;
files = (
- AD06989D20CC894B0010825F /* ZipArchive.framework in CopyFiles */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -445,7 +440,6 @@
buildActionMask = 2147483647;
files = (
AD787ADF20D4611100C4712A /* QuickLook.framework in Frameworks */,
- AD787B0020D5AD1700C4712A /* ZipArchive.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -453,7 +447,6 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- AD787AFF20D5AD1500C4712A /* ZipArchive.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -467,7 +460,6 @@
AD3087C82061D1CD009F9260 /* CoreGraphics.framework in Frameworks */,
AD3087C62061D1B4009F9260 /* CoreVideo.framework in Frameworks */,
AD3087C2205F016F009F9260 /* AVFoundation.framework in Frameworks */,
- AD06989720CC6C350010825F /* ZipArchive.framework in Frameworks */,
AD30D8331F8049BD00B6A112 /* Photos.framework in Frameworks */,
AD759B691F279B3900211963 /* GLKit.framework in Frameworks */,
ADD7D2B31EBFA42C00D5A897 /* Security.framework in Frameworks */,
@@ -817,9 +809,11 @@
isa = PBXNativeTarget;
buildConfigurationList = AD787AEB20D4611100C4712A /* Build configuration list for PBXNativeTarget "PanoQL" */;
buildPhases = (
+ AD536B7221530A6C0033E46B /* Generate Version */,
AD787AD920D4611100C4712A /* Sources */,
AD787ADA20D4611100C4712A /* Frameworks */,
AD787ADB20D4611100C4712A /* Resources */,
+ AD536B7421530AA60033E46B /* Versioning Info.plist */,
);
buildRules = (
);
@@ -834,9 +828,11 @@
isa = PBXNativeTarget;
buildConfigurationList = AD787AFC20D4637F00C4712A /* Build configuration list for PBXNativeTarget "PanoThumb" */;
buildPhases = (
+ AD536B7321530A8A0033E46B /* Generate Version */,
AD787AEF20D4637E00C4712A /* Sources */,
AD787AF020D4637E00C4712A /* Frameworks */,
AD787AF120D4637E00C4712A /* Resources */,
+ AD536B7521530AB80033E46B /* Versioning Info.plist */,
);
buildRules = (
);
@@ -975,6 +971,62 @@
shellPath = /bin/sh;
shellScript = "# Use the commit count as CFBundleVersion\nGIT_COMMIT_COUNT=`git rev-list --count HEAD`\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion ${GIT_COMMIT_COUNT}\" \"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n\n## Use the last annotated tag as CFBundleShortVersionString\nGIT_TAG=`git describe --tags --abbrev=0`\n/usr/libexec/PlistBuddy -c \"Set :CFBundleShortVersionString ${GIT_TAG}\" \"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n";
};
+ AD536B7221530A6C0033E46B /* Generate Version */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Generate Version";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "python scripts/pre-build.py $CONFIGURATION";
+ };
+ AD536B7321530A8A0033E46B /* Generate Version */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Generate Version";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "python scripts/pre-build.py $CONFIGURATION";
+ };
+ AD536B7421530AA60033E46B /* Versioning Info.plist */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Versioning Info.plist";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "# Use the commit count as CFBundleVersion\nGIT_COMMIT_COUNT=`git rev-list --count HEAD`\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion ${GIT_COMMIT_COUNT}\" \"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n\n## Use the last annotated tag as CFBundleShortVersionString\nGIT_TAG=`git describe --tags --abbrev=0`\n/usr/libexec/PlistBuddy -c \"Set :CFBundleShortVersionString ${GIT_TAG}\" \"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n";
+ };
+ AD536B7521530AB80033E46B /* Versioning Info.plist */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Versioning Info.plist";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "# Use the commit count as CFBundleVersion\nGIT_COMMIT_COUNT=`git rev-list --count HEAD`\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion ${GIT_COMMIT_COUNT}\" \"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n\n## Use the last annotated tag as CFBundleShortVersionString\nGIT_TAG=`git describe --tags --abbrev=0`\n/usr/libexec/PlistBuddy -c \"Set :CFBundleShortVersionString ${GIT_TAG}\" \"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n";
+ };
ADB86F64214E9D0D004E7CB8 /* Generate Version */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@@ -1443,7 +1495,7 @@
INFOPLIST_FILE = PanoQL/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.2;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
- PRODUCT_BUNDLE_IDENTIFIER = com.omixlab.panopainter.ios.PanoQL;
+ PRODUCT_BUNDLE_IDENTIFIER = com.omixlab.panopainter.ios.ql;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = iphoneos;
@@ -1485,7 +1537,7 @@
INFOPLIST_FILE = PanoQL/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.2;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
- PRODUCT_BUNDLE_IDENTIFIER = com.omixlab.panopainter.ios.PanoQL;
+ PRODUCT_BUNDLE_IDENTIFIER = com.omixlab.panopainter.ios.ql;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = iphoneos;
@@ -1528,7 +1580,7 @@
INFOPLIST_FILE = PanoThumb/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.2;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
- PRODUCT_BUNDLE_IDENTIFIER = com.omixlab.panopainter.ios.PanoThumb;
+ PRODUCT_BUNDLE_IDENTIFIER = com.omixlab.panopainter.ios.thumb;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = iphoneos;
@@ -1570,7 +1622,7 @@
INFOPLIST_FILE = PanoThumb/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.2;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
- PRODUCT_BUNDLE_IDENTIFIER = com.omixlab.panopainter.ios.PanoThumb;
+ PRODUCT_BUNDLE_IDENTIFIER = com.omixlab.panopainter.ios.thumb;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = iphoneos;
diff --git a/PanoPainter/AppDelegate.m b/PanoPainter/AppDelegate.m
index 49503d8..e324913 100644
--- a/PanoPainter/AppDelegate.m
+++ b/PanoPainter/AppDelegate.m
@@ -14,7 +14,7 @@
void global_exception_handler(NSException* e)
{
if (App::I.canvas && App::I.canvas->m_canvas)
- App::I.canvas->m_canvas->project_save_thread(App::I.data_path + "/recovery.pano");
+ App::I.canvas->m_canvas->project_save_thread(App::I.data_path + "/recovery.ppi");
std::terminate();
}
@@ -22,7 +22,7 @@ void global_exception_handler(NSException* e)
void global_signal_handler(int e)
{
if (App::I.canvas && App::I.canvas->m_canvas)
- App::I.canvas->m_canvas->project_save_thread(App::I.data_path + "/recovery.pano");
+ App::I.canvas->m_canvas->project_save_thread(App::I.data_path + "/recovery.ppi");
std::terminate();
}
diff --git a/data/layout.xml b/data/layout.xml
index 6f244b1..971240d 100644
--- a/data/layout.xml
+++ b/data/layout.xml
@@ -635,10 +635,12 @@
+
@@ -662,10 +664,12 @@
+
@@ -791,19 +795,20 @@
+
-
+
-
+
@@ -830,7 +835,9 @@
+
@@ -840,9 +847,11 @@
+
diff --git a/src/app_cloud.cpp b/src/app_cloud.cpp
index 83ae2ca..fafa57b 100644
--- a/src/app_cloud.cpp
+++ b/src/app_cloud.cpp
@@ -23,7 +23,7 @@ void App::cloud_upload()
else
{
std::thread([this] {
- std::string path = data_path + "/" + doc_name + ".pano";
+ std::string path = data_path + "/" + doc_name + ".ppi";
if (ui::Canvas::I->m_unsaved)
{
Canvas::I->project_save_thread(path);
@@ -34,7 +34,7 @@ void App::cloud_upload()
async_redraw();
async_end();
- upload(path, doc_name + ".pano", [this,pb](float p){
+ upload(path, doc_name + ".ppi", [this,pb](float p){
async_start();
pb->m_progress->SetWidthP(p * 100.f);
async_redraw();
@@ -59,7 +59,7 @@ void App::cloud_upload()
void App::cloud_upload_all()
{
std::thread([this] {
- auto names = Asset::list_files(data_path, false, ".*\\.pano");
+ auto names = Asset::list_files(data_path, false, ".*\\.ppi");
gl_state gl;
std::shared_ptr pb;
diff --git a/src/app_dialogs.cpp b/src/app_dialogs.cpp
index 9505d03..48e8eb2 100644
--- a/src/app_dialogs.cpp
+++ b/src/app_dialogs.cpp
@@ -36,7 +36,7 @@ void App::dialog_newdoc()
dialog->btn_ok->on_click = [this, dialog](Node*)
{
std::string name = dialog->input->m_string;
- std::string path = data_path + "/" + name + ".pano";
+ std::string path = data_path + "/" + name + ".ppi";
auto action = [this, dialog, name] {
std::array resolutions{ 512, 1024, 1536, 2048 };
@@ -255,14 +255,14 @@ void App::dialog_save_ver()
static char tmp_name[256];
sprintf(tmp_name, "%s.%02d", base.c_str(), i);
next = tmp_name;
- if (Asset::exist(data_path + "/" + next + ".pano", false))
+ if (Asset::exist(data_path + "/" + next + ".ppi", false))
continue;
break;
}
doc_name = next;
title_update();
- canvas->m_canvas->project_save(data_path + "/" + next + ".pano");
+ canvas->m_canvas->project_save(data_path + "/" + next + ".ppi");
}
void App::dialog_save()
@@ -281,7 +281,7 @@ void App::dialog_save()
dialog->btn_ok->on_click = [this, dialog](Node*)
{
std::string name = dialog->input->m_string;
- std::string path = data_path + "/" + name + ".pano";
+ std::string path = data_path + "/" + name + ".ppi";
if (name.empty())
{
diff --git a/src/canvas.cpp b/src/canvas.cpp
index 8538278..c75ba1a 100644
--- a/src/canvas.cpp
+++ b/src/canvas.cpp
@@ -1483,7 +1483,7 @@ void ui::Canvas::export_cubes(std::string data_path)
static char name[128];
sprintf(name, "%s.zip", data_path.c_str());
auto zip_path = [NSString stringWithUTF8String : name];
- [SSZipArchive createZipFileAtPath:zip_path withFilesAtPaths:files];
+ //[SSZipArchive createZipFileAtPath:zip_path withFilesAtPaths:files];
for (NSString* f : files)
[[NSFileManager defaultManager] removeItemAtPath:f error:nil];
#endif
@@ -1494,7 +1494,7 @@ void ui::Canvas::project_save(std::function on_complete)
if (App::I.check_license())
{
std::thread t([=] {
- project_save_thread(App::I.data_path + "/" + App::I.doc_name + ".pano");
+ project_save_thread(App::I.data_path + "/" + App::I.doc_name + ".ppi");
if (on_complete)
on_complete();
});
@@ -1524,7 +1524,7 @@ void ui::Canvas::project_save_thread(std::string file_path)
return;
// static char name[128];
-// sprintf(name, "%s/latlong.pano", data_path.c_str());
+// sprintf(name, "%s/latlong.ppi", data_path.c_str());
FILE* fp = fopen(file_path.c_str(), "wb");
if (!fp)
{
@@ -1836,7 +1836,7 @@ ui::Image ui::Canvas::thumbnail_generate(int w, int h)
ui::Image ui::Canvas::thumbnail_read(std::string data_path)
{
// static char name[128];
-// sprintf(name, "%s/latlong.pano", data_path.c_str());
+// sprintf(name, "%s/latlong.ppi", data_path.c_str());
FILE* fp = fopen(data_path.c_str(), "rb");
if (!fp)
{
diff --git a/src/main.cpp b/src/main.cpp
index bd4fcdc..e6461e4 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -272,7 +272,7 @@ static void SetupExceptionHandler()
BT_SetPreErrHandler([](INT_PTR){
if (ui::Canvas::I)
{
- auto path = App::I.data_path + "/recovery.pano";
+ auto path = App::I.data_path + "/recovery.ppi";
ui::Canvas::I->project_save_thread(path);
static char abspath[MAX_PATH];
GetFullPathNameA(path.c_str(), MAX_PATH, abspath, NULL);
diff --git a/src/node_dialog_browse.cpp b/src/node_dialog_browse.cpp
index af7181b..cdd41a9 100644
--- a/src/node_dialog_browse.cpp
+++ b/src/node_dialog_browse.cpp
@@ -69,7 +69,7 @@ void NodeDialogBrowse::init_controls()
root()->update();
};
container = find("files-list");
- auto names = Asset::list_files(data_path, false, ".*\\.pano");
+ auto names = Asset::list_files(data_path, false, ".*\\.ppi");
for (const auto& n : names)
{
auto node = new NodeDialogBrowseItem;
diff --git a/src/node_dialog_open.cpp b/src/node_dialog_open.cpp
index bcafc42..49214af 100644
--- a/src/node_dialog_open.cpp
+++ b/src/node_dialog_open.cpp
@@ -69,7 +69,7 @@ void NodeDialogOpen::init_controls()
root()->update();
};
container = find("files-list");
- auto names = Asset::list_files(data_path, false, ".*\\.pano");
+ auto names = Asset::list_files(data_path, false, ".*\\.ppi");
for (const auto& n : names)
{
auto node = new NodeDialogOpenItem;