prepare UI for release, disable unused features, rename file format to .ppi

This commit is contained in:
2018-09-20 13:25:56 +02:00
parent 27ab21ccdb
commit 4a6e69e182
10 changed files with 94 additions and 33 deletions

View File

@@ -27,7 +27,7 @@ void global_exception_handler(NSException* e)
[alert runModal]; [alert runModal];
if (App::I.canvas && App::I.canvas->m_canvas) 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(); std::terminate();
} }
@@ -40,7 +40,7 @@ void global_signal_handler(int e)
[alert runModal]; [alert runModal];
if (App::I.canvas && App::I.canvas->m_canvas) 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(); std::terminate();
} }

View File

@@ -9,10 +9,8 @@
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
AD02F0C31EDC457C00B2E692 /* sequencer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD02F0C01EDC456800B2E692 /* sequencer.cpp */; }; AD02F0C31EDC457C00B2E692 /* sequencer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD02F0C01EDC456800B2E692 /* sequencer.cpp */; };
AD02F0C41EDC457C00B2E692 /* 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 */; }; 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, ); }; }; 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 */; }; 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 */; }; 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 */; }; 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, ); }; }; 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 */; }; 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, ); }; }; 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 */; }; 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 */; }; 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 */; }; ADBC8C551FAFD0520094B339 /* app_cloud.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ADBC8C511FAFD0360094B339 /* app_cloud.cpp */; };
@@ -214,7 +210,6 @@
dstPath = ""; dstPath = "";
dstSubfolderSpec = 10; dstSubfolderSpec = 10;
files = ( files = (
AD06989D20CC894B0010825F /* ZipArchive.framework in CopyFiles */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -445,7 +440,6 @@
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
AD787ADF20D4611100C4712A /* QuickLook.framework in Frameworks */, AD787ADF20D4611100C4712A /* QuickLook.framework in Frameworks */,
AD787B0020D5AD1700C4712A /* ZipArchive.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -453,7 +447,6 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
AD787AFF20D5AD1500C4712A /* ZipArchive.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -467,7 +460,6 @@
AD3087C82061D1CD009F9260 /* CoreGraphics.framework in Frameworks */, AD3087C82061D1CD009F9260 /* CoreGraphics.framework in Frameworks */,
AD3087C62061D1B4009F9260 /* CoreVideo.framework in Frameworks */, AD3087C62061D1B4009F9260 /* CoreVideo.framework in Frameworks */,
AD3087C2205F016F009F9260 /* AVFoundation.framework in Frameworks */, AD3087C2205F016F009F9260 /* AVFoundation.framework in Frameworks */,
AD06989720CC6C350010825F /* ZipArchive.framework in Frameworks */,
AD30D8331F8049BD00B6A112 /* Photos.framework in Frameworks */, AD30D8331F8049BD00B6A112 /* Photos.framework in Frameworks */,
AD759B691F279B3900211963 /* GLKit.framework in Frameworks */, AD759B691F279B3900211963 /* GLKit.framework in Frameworks */,
ADD7D2B31EBFA42C00D5A897 /* Security.framework in Frameworks */, ADD7D2B31EBFA42C00D5A897 /* Security.framework in Frameworks */,
@@ -817,9 +809,11 @@
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = AD787AEB20D4611100C4712A /* Build configuration list for PBXNativeTarget "PanoQL" */; buildConfigurationList = AD787AEB20D4611100C4712A /* Build configuration list for PBXNativeTarget "PanoQL" */;
buildPhases = ( buildPhases = (
AD536B7221530A6C0033E46B /* Generate Version */,
AD787AD920D4611100C4712A /* Sources */, AD787AD920D4611100C4712A /* Sources */,
AD787ADA20D4611100C4712A /* Frameworks */, AD787ADA20D4611100C4712A /* Frameworks */,
AD787ADB20D4611100C4712A /* Resources */, AD787ADB20D4611100C4712A /* Resources */,
AD536B7421530AA60033E46B /* Versioning Info.plist */,
); );
buildRules = ( buildRules = (
); );
@@ -834,9 +828,11 @@
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = AD787AFC20D4637F00C4712A /* Build configuration list for PBXNativeTarget "PanoThumb" */; buildConfigurationList = AD787AFC20D4637F00C4712A /* Build configuration list for PBXNativeTarget "PanoThumb" */;
buildPhases = ( buildPhases = (
AD536B7321530A8A0033E46B /* Generate Version */,
AD787AEF20D4637E00C4712A /* Sources */, AD787AEF20D4637E00C4712A /* Sources */,
AD787AF020D4637E00C4712A /* Frameworks */, AD787AF020D4637E00C4712A /* Frameworks */,
AD787AF120D4637E00C4712A /* Resources */, AD787AF120D4637E00C4712A /* Resources */,
AD536B7521530AB80033E46B /* Versioning Info.plist */,
); );
buildRules = ( buildRules = (
); );
@@ -975,6 +971,62 @@
shellPath = /bin/sh; 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"; 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 */ = { ADB86F64214E9D0D004E7CB8 /* Generate Version */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
@@ -1443,7 +1495,7 @@
INFOPLIST_FILE = PanoQL/Info.plist; INFOPLIST_FILE = PanoQL/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.2; IPHONEOS_DEPLOYMENT_TARGET = 9.2;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; 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)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = iphoneos; SDKROOT = iphoneos;
@@ -1485,7 +1537,7 @@
INFOPLIST_FILE = PanoQL/Info.plist; INFOPLIST_FILE = PanoQL/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.2; IPHONEOS_DEPLOYMENT_TARGET = 9.2;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; 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)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = iphoneos; SDKROOT = iphoneos;
@@ -1528,7 +1580,7 @@
INFOPLIST_FILE = PanoThumb/Info.plist; INFOPLIST_FILE = PanoThumb/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.2; IPHONEOS_DEPLOYMENT_TARGET = 9.2;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; 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)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = iphoneos; SDKROOT = iphoneos;
@@ -1570,7 +1622,7 @@
INFOPLIST_FILE = PanoThumb/Info.plist; INFOPLIST_FILE = PanoThumb/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.2; IPHONEOS_DEPLOYMENT_TARGET = 9.2;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; 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)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = iphoneos; SDKROOT = iphoneos;

View File

@@ -14,7 +14,7 @@
void global_exception_handler(NSException* e) void global_exception_handler(NSException* e)
{ {
if (App::I.canvas && App::I.canvas->m_canvas) 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(); std::terminate();
} }
@@ -22,7 +22,7 @@ void global_exception_handler(NSException* e)
void global_signal_handler(int e) void global_signal_handler(int e)
{ {
if (App::I.canvas && App::I.canvas->m_canvas) 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(); std::terminate();
} }

View File

@@ -635,10 +635,12 @@
<icon icon="page_add" width="20"/> <icon icon="page_add" width="20"/>
<text text="Import" grow="1" margin="0 0 0 5" font-face="arial" font-size="11"/> <text text="Import" grow="1" margin="0 0 0 5" font-face="arial" font-size="11"/>
</button-custom> </button-custom>
<!--
<button-custom id="file-open" text="Menu" height="40" align="center" color=".2" pad="0 0 0 10" dir="row"> <button-custom id="file-open" text="Menu" height="40" align="center" color=".2" pad="0 0 0 10" dir="row">
<icon icon="page_add" width="20"/> <icon icon="page_add" width="20"/>
<text text="Open" grow="1" margin="0 0 0 5" font-face="arial" font-size="11"/> <text text="Open" grow="1" margin="0 0 0 5" font-face="arial" font-size="11"/>
</button-custom> </button-custom>
-->
<button-custom id="file-browse" text="Menu" height="40" align="center" color=".2" pad="0 0 0 10" dir="row"> <button-custom id="file-browse" text="Menu" height="40" align="center" color=".2" pad="0 0 0 10" dir="row">
<icon icon="page_add" width="20"/> <icon icon="page_add" width="20"/>
<text text="Browse" grow="1" margin="0 0 0 5" font-face="arial" font-size="11"/> <text text="Browse" grow="1" margin="0 0 0 5" font-face="arial" font-size="11"/>
@@ -662,10 +664,12 @@
<icon icon="disk" width="20"/> <icon icon="disk" width="20"/>
<text text="Export JPG" grow="1" margin="0 0 0 5" font-face="arial" font-size="11"/> <text text="Export JPG" grow="1" margin="0 0 0 5" font-face="arial" font-size="11"/>
</button-custom> </button-custom>
<!--
<button-custom id="file-export-cubes" text="Menu" height="40" align="center" color=".2" pad="0 0 0 10" dir="row"> <button-custom id="file-export-cubes" text="Menu" height="40" align="center" color=".2" pad="0 0 0 10" dir="row">
<icon icon="page_white_stack" width="20"/> <icon icon="page_white_stack" width="20"/>
<text text="Export Cubes" grow="1" margin="0 0 0 5" font-face="arial" font-size="11"/> <text text="Export Cubes" grow="1" margin="0 0 0 5" font-face="arial" font-size="11"/>
</button-custom> </button-custom>
-->
<button-custom id="file-cloud-upload" text="Menu" height="40" align="center" color=".2" pad="0 0 0 10" dir="row"> <button-custom id="file-cloud-upload" text="Menu" height="40" align="center" color=".2" pad="0 0 0 10" dir="row">
<icon icon="weather_clouds" width="20"/> <icon icon="weather_clouds" width="20"/>
<text text="Cloud Upload" grow="1" margin="0 0 0 5" font-face="arial" font-size="11"/> <text text="Cloud Upload" grow="1" margin="0 0 0 5" font-face="arial" font-size="11"/>
@@ -791,19 +795,20 @@
<button-custom id="menu-timelapse" width="80" height="100%" margin="0 0 0 0" justify="center" align="center" pad="8" color=".1"> <button-custom id="menu-timelapse" width="80" height="100%" margin="0 0 0 0" justify="center" align="center" pad="8" color=".1">
<text text="Timelapse" font-face="arial" font-size="11"/> <text text="Timelapse" font-face="arial" font-size="11"/>
</button-custom> </button-custom>
<!--
<button-custom id="menu-about" width="60" height="100%" margin="0 0 0 0" justify="center" align="center" pad="8" color=".1"> <button-custom id="menu-about" width="60" height="100%" margin="0 0 0 0" justify="center" align="center" pad="8" color=".1">
<text text="About" font-face="arial" font-size="11"/> <text text="About" font-face="arial" font-size="11"/>
</button-custom> </button-custom>
<button id="btn-anim" width="70" height="100%" margin="1 0 0 10" text="Animate"/> <button id="btn-anim" width="70" height="100%" margin="1 0 0 10" text="Animate"/>
-->
<node dir="row" justify="center" grow="1"> <node dir="row" justify="center" grow="1">
<button id="btn-pen" width="50" height="100%" margin="0 0 0 0" text="Pen"/> <button id="btn-pen" width="50" height="100%" margin="0 0 0 0" text="Pen"/>
<button id="btn-pick" width="50" height="100%" margin="0 0 0 0" text="Pick"/> <button id="btn-pick" width="50" height="100%" margin="0 0 0 0" text="Pick"/>
<button id="btn-touchlock" width="50" height="100%" margin="0 0 0 0" text="Lock"/> <button id="btn-touchlock" width="50" height="100%" margin="0 0 0 0" text="Lock"/>
<button id="btn-erase" width="60" height="100%" margin="0 0 0 5" text="Erase"/> <button id="btn-erase" width="60" height="100%" margin="0 0 0 5" text="Eraser"/>
<button id="btn-cam" width="70" height="100%" margin="0 0 0 5" text="Camera"/> <button id="btn-cam" width="70" height="100%" margin="0 0 0 5" text="Parallax"/>
<button id="btn-line" width="50" height="100%" margin="0 0 0 5" text="Line"/> <button id="btn-line" width="50" height="100%" margin="0 0 0 5" text="Line"/>
<button id="btn-grid" width="50" height="100%" margin="0 0 0 0" text="Grid"/> <button id="btn-grid" width="50" height="100%" margin="0 0 0 0" text="Grid"/>
@@ -830,7 +835,9 @@
<button-custom id="btn-stroke" width="50" height="50" margin="0 0 5 0" thickness="1" border-color=".1" pad="2"> <button-custom id="btn-stroke" width="50" height="50" margin="0 0 5 0" thickness="1" border-color=".1" pad="2">
<image path="data/ui/stroke.png" width="100%" height="100%" align="center" justify="flex-end"/> <image path="data/ui/stroke.png" width="100%" height="100%" align="center" justify="flex-end"/>
</button-custom> </button-custom>
<!--
<button id="btn-brush-preset" width="50" height="50" margin="0 0 5 0" text="Preset" thickness="1" border-color=".1" pad="2"/> <button id="btn-brush-preset" width="50" height="50" margin="0 0 5 0" text="Preset" thickness="1" border-color=".1" pad="2"/>
-->
<button-custom id="btn-brush" width="50" height="50" margin="0 0 5 0" thickness="1" border-color=".1" pad="2"> <button-custom id="btn-brush" width="50" height="50" margin="0 0 5 0" thickness="1" border-color=".1" pad="2">
<image path="data/ui/brushes.png" width="100%" height="100%" align="center" justify="flex-end"/> <image path="data/ui/brushes.png" width="100%" height="100%" align="center" justify="flex-end"/>
</button-custom> </button-custom>
@@ -840,9 +847,11 @@
<button-custom id="btn-layer" width="50" height="50" margin="0 0 5 0" thickness="1" border-color=".1" pad="2"> <button-custom id="btn-layer" width="50" height="50" margin="0 0 5 0" thickness="1" border-color=".1" pad="2">
<image path="data/ui/layers.png" width="100%" height="100%" align="center" justify="flex-end"/> <image path="data/ui/layers.png" width="100%" height="100%" align="center" justify="flex-end"/>
</button-custom> </button-custom>
<!--
<button-custom id="btn-grids-panel" width="50" height="50" margin="0 0 5 0" thickness="1" border-color=".1" pad="2"> <button-custom id="btn-grids-panel" width="50" height="50" margin="0 0 5 0" thickness="1" border-color=".1" pad="2">
<image path="data/ui/grid.png" width="100%" height="100%" align="center" justify="flex-end" mips="true"/> <image path="data/ui/grid.png" width="100%" height="100%" align="center" justify="flex-end" mips="true"/>
</button-custom> </button-custom>
-->
</border> </border>
<!-- side bar --> <!-- side bar -->
<node height="100%" dir="row" shrink="1"> <node height="100%" dir="row" shrink="1">

View File

@@ -23,7 +23,7 @@ void App::cloud_upload()
else else
{ {
std::thread([this] { 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) if (ui::Canvas::I->m_unsaved)
{ {
Canvas::I->project_save_thread(path); Canvas::I->project_save_thread(path);
@@ -34,7 +34,7 @@ void App::cloud_upload()
async_redraw(); async_redraw();
async_end(); async_end();
upload(path, doc_name + ".pano", [this,pb](float p){ upload(path, doc_name + ".ppi", [this,pb](float p){
async_start(); async_start();
pb->m_progress->SetWidthP(p * 100.f); pb->m_progress->SetWidthP(p * 100.f);
async_redraw(); async_redraw();
@@ -59,7 +59,7 @@ void App::cloud_upload()
void App::cloud_upload_all() void App::cloud_upload_all()
{ {
std::thread([this] { std::thread([this] {
auto names = Asset::list_files(data_path, false, ".*\\.pano"); auto names = Asset::list_files(data_path, false, ".*\\.ppi");
gl_state gl; gl_state gl;
std::shared_ptr<NodeProgressBar> pb; std::shared_ptr<NodeProgressBar> pb;

View File

@@ -36,7 +36,7 @@ void App::dialog_newdoc()
dialog->btn_ok->on_click = [this, dialog](Node*) dialog->btn_ok->on_click = [this, dialog](Node*)
{ {
std::string name = dialog->input->m_string; 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] { auto action = [this, dialog, name] {
std::array<int, 4> resolutions{ 512, 1024, 1536, 2048 }; std::array<int, 4> resolutions{ 512, 1024, 1536, 2048 };
@@ -255,14 +255,14 @@ void App::dialog_save_ver()
static char tmp_name[256]; static char tmp_name[256];
sprintf(tmp_name, "%s.%02d", base.c_str(), i); sprintf(tmp_name, "%s.%02d", base.c_str(), i);
next = tmp_name; next = tmp_name;
if (Asset::exist(data_path + "/" + next + ".pano", false)) if (Asset::exist(data_path + "/" + next + ".ppi", false))
continue; continue;
break; break;
} }
doc_name = next; doc_name = next;
title_update(); title_update();
canvas->m_canvas->project_save(data_path + "/" + next + ".pano"); canvas->m_canvas->project_save(data_path + "/" + next + ".ppi");
} }
void App::dialog_save() void App::dialog_save()
@@ -281,7 +281,7 @@ void App::dialog_save()
dialog->btn_ok->on_click = [this, dialog](Node*) dialog->btn_ok->on_click = [this, dialog](Node*)
{ {
std::string name = dialog->input->m_string; std::string name = dialog->input->m_string;
std::string path = data_path + "/" + name + ".pano"; std::string path = data_path + "/" + name + ".ppi";
if (name.empty()) if (name.empty())
{ {

View File

@@ -1483,7 +1483,7 @@ void ui::Canvas::export_cubes(std::string data_path)
static char name[128]; static char name[128];
sprintf(name, "%s.zip", data_path.c_str()); sprintf(name, "%s.zip", data_path.c_str());
auto zip_path = [NSString stringWithUTF8String : name]; auto zip_path = [NSString stringWithUTF8String : name];
[SSZipArchive createZipFileAtPath:zip_path withFilesAtPaths:files]; //[SSZipArchive createZipFileAtPath:zip_path withFilesAtPaths:files];
for (NSString* f : files) for (NSString* f : files)
[[NSFileManager defaultManager] removeItemAtPath:f error:nil]; [[NSFileManager defaultManager] removeItemAtPath:f error:nil];
#endif #endif
@@ -1494,7 +1494,7 @@ void ui::Canvas::project_save(std::function<void()> on_complete)
if (App::I.check_license()) if (App::I.check_license())
{ {
std::thread t([=] { 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) if (on_complete)
on_complete(); on_complete();
}); });
@@ -1524,7 +1524,7 @@ void ui::Canvas::project_save_thread(std::string file_path)
return; return;
// static char name[128]; // 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"); FILE* fp = fopen(file_path.c_str(), "wb");
if (!fp) 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) ui::Image ui::Canvas::thumbnail_read(std::string data_path)
{ {
// static char name[128]; // 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"); FILE* fp = fopen(data_path.c_str(), "rb");
if (!fp) if (!fp)
{ {

View File

@@ -272,7 +272,7 @@ static void SetupExceptionHandler()
BT_SetPreErrHandler([](INT_PTR){ BT_SetPreErrHandler([](INT_PTR){
if (ui::Canvas::I) 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); ui::Canvas::I->project_save_thread(path);
static char abspath[MAX_PATH]; static char abspath[MAX_PATH];
GetFullPathNameA(path.c_str(), MAX_PATH, abspath, NULL); GetFullPathNameA(path.c_str(), MAX_PATH, abspath, NULL);

View File

@@ -69,7 +69,7 @@ void NodeDialogBrowse::init_controls()
root()->update(); root()->update();
}; };
container = find<Node>("files-list"); container = find<Node>("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) for (const auto& n : names)
{ {
auto node = new NodeDialogBrowseItem; auto node = new NodeDialogBrowseItem;

View File

@@ -69,7 +69,7 @@ void NodeDialogOpen::init_controls()
root()->update(); root()->update();
}; };
container = find<Node>("files-list"); container = find<Node>("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) for (const auto& n : names)
{ {
auto node = new NodeDialogOpenItem; auto node = new NodeDialogOpenItem;