NEW: homepage and UserManual

Change-Id: Iecdb4d0151a0cf76614548aee69e525ad7e1fe68
(cherry picked from commit 4c7403683b334e42d8676a933012e2133cd1ce7f)
This commit is contained in:
zorro.zhang 2022-08-26 15:58:19 +08:00 committed by Lane.Wei
parent 3b021d4443
commit f44a0b88d9
13 changed files with 478 additions and 12 deletions

View File

@ -78,7 +78,10 @@ var LangText={
"t83":"2, Close all open Bambu Studio",
"t84":"3, Delete all files under the plug-in directory",
"t85":"4, Reopen Bambu studio and install the plug-in again",
"t86":"Close"
"t86":"Close",
"t87":"User manual",
"t88":"clear",
"t89":"show in explorer"
},
"zh_CN":{
"t1":"欢迎使用Bambu Studio",
@ -159,7 +162,10 @@ var LangText={
"t83":"2, 关闭所有Bambu Studio",
"t84":"3, 删除插件所在目录下的所有文件",
"t85":"4, 重新启动Bambu Studio并尝试安装插件",
"t86":"关闭"
"t86":"关闭",
"t87":"使用引导",
"t88":"清除",
"t89":"打开文件所在路径"
}
};

View File

@ -33,6 +33,12 @@ html, body {
text-decoration:underline;
}
/*------------------*/
#DebugText
{
height:30px;
}
/*------------------*/
body
{
@ -208,6 +214,7 @@ body
padding: 0px 40px;
display: flex;
flex-direction: column;
position: relative;
}
#MenuArea
@ -274,9 +281,31 @@ body
flex-direction: column;
}
#RecentTitleBlock
{
display:flex;
align-items: center;
padding: 6px;
border-bottom: 1px solid #D9D9D9;
}
#RecentClearAllBtn
{
border: 1px solid #C4C4C4;
padding: 0px 10px;
border-radius: 6px;
line-height: 26px;
height: 26px;
margin-left: 20px;
cursor: pointer;
background-color: #00AE42;
color: #fff;
display: inline;
}
#RecentTitle
{
border-bottom: 1px solid #D9D9D9;
}
#FileList
@ -331,6 +360,68 @@ body
color: #A8A8A8;
}
#recnet_context_menu
{
position: absolute;
margin: 0px;
padding: 0px;
border: 0px;
min-width: 100px;
top: 800px;
border: 1px solid #C5C5C5;
border-radius: 6px;
background-color: #fff;
}
.CT_Item
{
line-height:30px;
padding: 0px 10px;
display: flex;
flex-direction: row;
align-content: center;
align-items: center;
}
.CT_Item:hover
{
background-color: #E9E9E9;
cursor: pointer;
}
.CT_Icon
{
margin-right: 6px;
width: 16px;
height: 16px;
}
.CT_Delete
{
background: url("../img/delete.png");
background-repeat: no-repeat;
background-size: contain;
}
.CT_Explore
{
background: url("../img/folder.png");
background-repeat: no-repeat;
background-size: contain;
}
.CT_Seperate
{
border-bottom:1px solid #C5C5C5;
}
.CT_Text
{
}
/*--------Mall------*/
#MallBoard
{
@ -364,3 +455,58 @@ body
height: 95%;
border: 1px solid #D9D9D9;
}
/*---------Wiki----------*/
#WikiGuideBigBoard
{
display:none;
}
#WikiGuideBoard
{
display: flex;
flex-wrap: wrap;
align-content: flex-start;
overflow-y: auto;
padding: 50px;
}
.GuideBlock
{
width: 320px;
margin: 0px;
margin: 0px 12px 30px 12px;
cursor: pointer;
}
.UG_IMG
{
width: 320px;
height: 200px;
}
.UG_IMG img
{
width: 320px;
height: 200px;
}
.UG_TITLE
{
font-size: 16px;
line-height: 20px;
width: 320px;
margin-top: 6px;
}
.UG_DESC
{
width: 320px;
line-height: 18px;
color: #C4C4C4;
font-size: 14px;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 341 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 514 KiB

View File

@ -39,8 +39,11 @@
<div class="BtnIcon "><img class="LeftIcon" src="img/i2.png" /></div>
<div class="trans" tid="t28">recent</div>
</div>
<div menu="wikiguide" class="BtnItem" onClick="GotoMenu('wikiguide')">
<div class="BtnIcon "><img class="LeftIcon" src="img/i1.png" /></div>
<div class="trans" tid="t87">UserGuide</div>
</div>
</div>
</div>
<div id="RightBoard">
@ -63,16 +66,21 @@
</div>
</div>
<div id="DebugText"></div>
<div id="RecentFileArea">
<div id="RecentTitle" class="Content-Title trans" tid="t35">recent open</div>
<div id="RecentTitleBlock">
<div id="RecentTitle" class="Content-Title trans" tid="t35">recent open</div>
<div id="RecentClearAllBtn" class="trans" tid="t12" onClick="OnDeleteAllRecentFiles()">Clear all</div>
</div>
<div id="FileList">
<!-- <div class="FileItem" onClick="OnOpenRecentFile('aaaa')">
<!-- <div class="FileItem" onClick="OnOpenRecentFile('aaaa')" fpath='d:\model\11.3mf'>
<a class="FileTip" title="d:\model\11.3mf"></a>
<div class="FileImg"><img src="img/b.jpg"/></div>
<a>abcd12334.3mf</a>
<div class="FileDate">2021/12/27 09:22</div>
</div>
<div class="FileItem">
<div class="FileItem" fpath='d:\model\22.3mf'>
<a class="FileTip" title="d:\model\11.3mf"></a>
<div class="FileImg"><img src="img/b.jpg"/></div>
<a>abcd12334.3mf</a>
@ -131,11 +139,89 @@
<div class="FileImg"><img src="img/b.jpg"/></div>
<a>abcd12334.3mf</a>
<div class="FileDate">2021/12/27 09:22</div>
</div>-->
</div> -->
</div>
</div>
<div style="height: 14px;"></div>
<div id="recnet_context_menu">
<div class="CT_Item" onClick="OnDeleteRecentFile()">
<div class="CT_Icon CT_Delete"></div>
<div class="CT_Text trans" tid="t88">clear</div>
</div>
<div class="CT_Item " onClick="OnExploreRecentFile()" >
<div class="CT_Icon CT_Explore"></div>
<div class="CT_Text trans" tid="t89">open in explorer </div>
</div>
</div>
</div>
<div id="WikiGuideBigBoard" board="wikiguide">
<div id="WikiGuideBoard" >
<div class="GuideBlock" onClick="OpenWikiUrl('https://www.bambulab.com')">
<div class="UG_IMG"><img src="img/wiki.png" /></div>
<div class="UG_TITLE trans" tid="wk1">Wiki Title XXXXXXX XXXXXX XXXXX XXXXX XXXXXX</div>
<div class="UG_DESC trans" tid="wk2">This is a long long long long long longlong long long long long longlong long long long long longlong long long long long longlong long long long long long text</div>
</div>
<div class="GuideBlock" onClick="OpenWikiUrl('https://www.bambulab.com')">
<div class="UG_IMG"><img src="img/wiki2.png" /></div>
<div class="UG_TITLE trans" tid="wk1">Wiki Title XXXXXXX XXXXXX XXXXX XXXXX XXXXXX</div>
<div class="UG_DESC trans" tid="wk2">This is a long long long long long longlong long long long long longlong long long long long longlong long long long long longlong long long long long long text</div>
</div>
<div class="GuideBlock" onClick="OpenWikiUrl('https://www.bambulab.com')">
<div class="UG_IMG"><img src="img/wiki3.png" /></div>
<div class="UG_TITLE trans" tid="wk1">Wiki Title XXXXXXX XXXXXX XXXXX XXXXX XXXXXX</div>
<div class="UG_DESC trans" tid="wk2">This is a long long long long long longlong long long long long longlong long long long long longlong long long long long longlong long long long long long text</div>
</div>
<div class="GuideBlock" onClick="OpenWikiUrl('https://www.bambulab.com')">
<div class="UG_IMG"><img src="img/wiki3.png" /></div>
<div class="UG_TITLE trans" tid="wk1">Wiki Title XXXXXXX XXXXXX XXXXX XXXXX XXXXXX</div>
<div class="UG_DESC trans" tid="wk2">This is a long long long long long longlong long long long long longlong long long long long longlong long long long long longlong long long long long long text</div>
</div>
<div class="GuideBlock" onClick="OpenWikiUrl('https://www.bambulab.com')">
<div class="UG_IMG"><img src="img/wiki.png" /></div>
<div class="UG_TITLE trans" tid="wk1">Wiki Title XXXXXXX XXXXXX XXXXX XXXXX XXXXXX</div>
<div class="UG_DESC trans" tid="wk2">This is a long long long long long longlong long long long long longlong long long long long longlong long long long long longlong long long long long long text</div>
</div>
<div class="GuideBlock" onClick="OpenWikiUrl('https://www.bambulab.com')">
<div class="UG_IMG"><img src="img/wiki3.png" /></div>
<div class="UG_TITLE trans" tid="wk1">Wiki Title XXXXXXX XXXXXX XXXXX XXXXX XXXXXX</div>
<div class="UG_DESC trans" tid="wk2">This is a long long long long long longlong long long long long longlong long long long long longlong long long long long longlong long long long long long text</div>
</div>
<div class="GuideBlock" onClick="OpenWikiUrl('https://www.bambulab.com')">
<div class="UG_IMG"><img src="img/wiki2.png" /></div>
<div class="UG_TITLE trans" tid="wk1">Wiki Title XXXXXXX XXXXXX XXXXX XXXXX XXXXXX</div>
<div class="UG_DESC trans" tid="wk2">This is a long long long long long longlong long long long long longlong long long long long longlong long long long long longlong long long long long long text</div>
</div>
<div class="GuideBlock" onClick="OpenWikiUrl('https://www.bambulab.com')">
<div class="UG_IMG"><img src="img/wiki.png" /></div>
<div class="UG_TITLE trans" tid="wk1">Wiki Title XXXXXXX XXXXXX XXXXX XXXXX XXXXXX</div>
<div class="UG_DESC trans" tid="wk2">This is a long long long long long longlong long long long long longlong long long long long longlong long long long long longlong long long long long long text</div>
</div>
<div class="GuideBlock" onClick="OpenWikiUrl('https://www.bambulab.com')">
<div class="UG_IMG"><img src="img/wiki2.png" /></div>
<div class="UG_TITLE trans" tid="wk1">Wiki Title XXXXXXX XXXXXX XXXXX XXXXX XXXXXX</div>
<div class="UG_DESC trans" tid="wk2">This is a long long long long long longlong long long long long longlong long long long long longlong long long long long longlong long long long long long text</div>
</div>
<div class="GuideBlock" onClick="OpenWikiUrl('https://www.bambulab.com')">
<div class="UG_IMG"><img src="img/wiki.png" /></div>
<div class="UG_TITLE trans" tid="wk1">Wiki Title XXXXXXX XXXXXX XXXXX XXXXX XXXXXX</div>
<div class="UG_DESC trans" tid="wk2">This is a long long long long long longlong long long long long longlong long long long long longlong long long long long longlong long long long long long text</div>
</div>
<div class="GuideBlock" onClick="OpenWikiUrl('https://www.bambulab.com')">
<div class="UG_IMG"><img src="img/wiki2.png" /></div>
<div class="UG_TITLE trans" tid="wk1">Wiki Title XXXXXXX XXXXXX XXXXX XXXXX XXXXXX</div>
<div class="UG_DESC trans" tid="wk2">This is a long long long long long longlong long long long long longlong long long long long longlong long long long long longlong long long long long long text</div>
</div>
<div class="GuideBlock" onClick="OpenWikiUrl('https://www.bambulab.com')">
<div class="UG_IMG"><img src="img/wiki3.png" /></div>
<div class="UG_TITLE trans" tid="wk1">Wiki Title XXXXXXX XXXXXX XXXXX XXXXX XXXXXX</div>
<div class="UG_DESC trans" tid="wk2">This is a long long long long long longlong long long long long longlong long long long long longlong long long long long longlong long long long long long text</div>
</div>
</div>
</div>
</div>

View File

@ -14,6 +14,68 @@ function OnInit()
SendMsg_GetRecentFile();
}
//------最佳打开文件的右键菜单功能----------
var RightBtnFilePath='';
var MousePosX=0;
var MousePosY=0;
function Set_RecentFile_MouseRightBtn_Event()
{
$(".FileItem").mousedown(
function(e)
{
//FilePath
RightBtnFilePath=$(this).attr('fpath');
if(e.which == 3){
//鼠标点击了右键+$(this).attr('ff') );
ShowRecnetFileContextMenu();
}else if(e.which == 2){
//鼠标点击了中键
}else if(e.which == 1){
//鼠标点击了左键
OnOpenRecentFile( encodeURI(RightBtnFilePath) );
}
});
$(document).bind("contextmenu",function(e){
//在这里书写代码,构建个性右键化菜单
return false;
});
$(document).mousemove( function(e){
MousePosX=e.pageX;
MousePosY=e.pageY;
let ContextMenuWidth=$('#recnet_context_menu').width();
let ContextMenuHeight=$('#recnet_context_menu').height();
let DocumentWidth=$(document).width();
let DocumentHeight=$(document).height();
//$("#DebugText").text( ContextMenuWidth+' - '+ContextMenuHeight+'<br/>'+
// DocumentWidth+' - '+DocumentHeight+'<br/>'+
// MousePosX+' - '+MousePosY +'<br/>' );
} );
$(document).click( function(){
var e = e || window.event;
        var elem = e.target || e.srcElement;
        while (elem) {
if (elem.id && elem.id == 'recnet_context_menu') {
                    return;
}
elem = elem.parentNode;
}
$("#recnet_context_menu").hide();
} );
}
function HandleStudio( pVal )
{
@ -123,7 +185,7 @@ function ShowRecentFileList( pList )
//let index=sPath.lastIndexOf('\\')>0?sPath.lastIndexOf('\\'):sPath.lastIndexOf('\/');
//let sShortName=sPath.substring(index+1,sPath.length);
let TmpHtml='<div class="FileItem" onClick="OnOpenRecentFile(\''+ encodeURI(sPath)+'\')" >'+
let TmpHtml='<div class="FileItem" fpath="'+sPath+'" >'+
'<a class="FileTip" title="'+sPath+'"></a>'+
'<div class="FileImg" ><img src="'+sImg+'" onerror="this.onerror=null;this.src=\'img/d.png\';" alt="No Image" /></div>'+
'<a>'+sName+'</a>'+
@ -134,10 +196,33 @@ function ShowRecentFileList( pList )
}
$("#FileList").html(strHtml);
Set_RecentFile_MouseRightBtn_Event();
UpdateRecentClearBtnDisplay();
}
function ShowRecnetFileContextMenu()
{
$('#recnet_context_menu').show();
/*-------MX Message------*/
let ContextMenuWidth=$('#recnet_context_menu').width();
let ContextMenuHeight=$('#recnet_context_menu').height();
let DocumentWidth=$(document).width();
let DocumentHeight=$(document).height();
let RealX=MousePosX;
let RealY=MousePosY;
if( MousePosX + ContextMenuWidth >DocumentWidth )
RealX=MousePosX-ContextMenuWidth;
if( MousePosY+ContextMenuHeight>DocumentHeight )
RealY=MousePosY-ContextMenuHeight;
$("#recnet_context_menu").offset({top: RealY, left:RealX});
}
/*-------RecentFile MX Message------*/
function SendMsg_GetLoginInfo()
{
var tSend={};
@ -197,6 +282,69 @@ function OnOpenRecentFile( strPath )
SendWXMessage( JSON.stringify(tSend) );
}
function OnDeleteRecentFile( )
{
var tSend={};
tSend['sequence_id']=Math.round(new Date() / 1000);
tSend['command']="homepage_delete_recentfile";
tSend['data']={};
tSend['data']['path']=decodeURI(RightBtnFilePath);
SendWXMessage( JSON.stringify(tSend) );
$("#recnet_context_menu").hide();
let AllFile=$(".FileItem");
let nFile=AllFile.length;
for(let p=0;p<nFile;p++)
{
let pp=AllFile[p].getAttribute("fpath");
if(pp==RightBtnFilePath)
$(AllFile[p]).remove();
}
UpdateRecentClearBtnDisplay();
}
function OnDeleteAllRecentFiles()
{
var tSend={};
tSend['sequence_id']=Math.round(new Date() / 1000);
tSend['command']="homepage_delete_all_recentfile";
SendWXMessage( JSON.stringify(tSend) );
$('#FileList').html('');
UpdateRecentClearBtnDisplay();
}
function UpdateRecentClearBtnDisplay()
{
let AllFile=$(".FileItem");
let nFile=AllFile.length;
if( nFile>0 )
$("#RecentClearAllBtn").show();
else
$("#RecentClearAllBtn").hide();
}
function OnExploreRecentFile( )
{
var tSend={};
tSend['sequence_id']=Math.round(new Date() / 1000);
tSend['command']="homepage_explore_recentfile";
tSend['data']={};
tSend['data']['path']=decodeURI(RightBtnFilePath);
SendWXMessage( JSON.stringify(tSend) );
$("#recnet_context_menu").hide();
}
function OnLogOut()
{
var tSend={};
@ -227,4 +375,20 @@ function OutputKey(keyCode, isCtrlDown, isShiftDown, isCmdDown) {
SendWXMessage(JSON.stringify(tSend));
}
//-------------User Manual------------
function OpenWikiUrl( strUrl )
{
var tSend={};
tSend['sequence_id']=Math.round(new Date() / 1000);
tSend['command']="userguide_wiki_open";
tSend['data']={};
tSend['data']['url']=strUrl;
SendWXMessage( JSON.stringify(tSend) );
}
//---------------Global-----------------
window.postMessage = HandleStudio;

View File

@ -3003,6 +3003,31 @@ std::string GUI_App::handle_web_request(std::string cmd)
}
}
}
else if (command_str.compare("homepage_delete_recentfile") == 0) {
if (root.get_child_optional("data") != boost::none) {
pt::ptree data_node = root.get_child("data");
boost::optional<std::string> path = data_node.get_optional<std::string>("path");
if (path.has_value()) {
this->request_remove_project(path.value());
}
}
}
else if (command_str.compare("homepage_delete_all_recentfile") == 0) {
this->request_remove_project("");
}
else if (command_str.compare("homepage_explore_recentfile") == 0) {
if (root.get_child_optional("data") != boost::none) {
pt::ptree data_node = root.get_child("data");
boost::optional<std::string> path = data_node.get_optional<std::string>("path");
if (path.has_value())
{
boost::filesystem::path NowFile(path.value());
std::string FolderPath = NowFile.parent_path().make_preferred().string();
desktop_open_any_folder(FolderPath);
}
}
}
else if (command_str.compare("homepage_open_hotspot") == 0) {
if (root.get_child_optional("data") != boost::none) {
pt::ptree data_node = root.get_child("data");
@ -3037,6 +3062,16 @@ std::string GUI_App::handle_web_request(std::string cmd)
wxPostEvent(mainframe, e);
}
}
else if (command_str.compare("userguide_wiki_open") == 0) {
if (root.get_child_optional("data") != boost::none) {
pt::ptree data_node = root.get_child("data");
boost::optional<std::string> path = data_node.get_optional<std::string>("url");
if (path.has_value()) {
wxLaunchDefaultBrowser(path.value());
}
}
}
}
}
catch (...) {
@ -3111,6 +3146,11 @@ void GUI_App::request_open_project(std::string project_id)
CallAfter([this, project_id] { mainframe->open_recent_project(-1, wxString::FromUTF8(project_id)); });
}
void GUI_App::request_remove_project(std::string project_id)
{
mainframe->remove_recent_project(-1, wxString::FromUTF8(project_id));
}
void GUI_App::handle_http_error(unsigned int status, std::string body)
{
// tips body size must less than 1024

View File

@ -372,6 +372,7 @@ public:
void download_project(std::string project_id);
void request_project_download(std::string project_id);
void request_open_project(std::string project_id);
void request_remove_project(std::string project_id);
void handle_http_error(unsigned int status, std::string body);
void on_http_error(wxCommandEvent &evt);

View File

@ -2611,6 +2611,28 @@ void MainFrame::open_recent_project(size_t file_id, wxString const & filename)
}
}
void MainFrame::remove_recent_project(size_t file_id, wxString const &filename)
{
if (file_id == size_t(-1)) {
if (filename.IsEmpty())
while (m_recent_projects.GetCount() > 0)
m_recent_projects.RemoveFileFromHistory(0);
else
file_id = m_recent_projects.FindFileInHistory(filename);
}
if (file_id != size_t(-1))
m_recent_projects.RemoveFileFromHistory(file_id);
std::vector<std::string> recent_projects;
size_t count = m_recent_projects.GetCount();
for (size_t i = 0; i < count; ++i)
{
recent_projects.push_back(into_u8(m_recent_projects.GetHistoryFile(i)));
}
wxGetApp().app_config->set_recent_projects(recent_projects);
wxGetApp().app_config->save();
m_webview->SendRecentList("");
}
void MainFrame::load_url(wxString url)
{
BOOST_LOG_TRIVIAL(trace) << "load_url:" << url;

View File

@ -296,6 +296,7 @@ public:
void add_to_recent_projects(const wxString& filename);
void get_recent_projects(boost::property_tree::wptree & tree);
void open_recent_project(size_t file_id, wxString const & filename);
void remove_recent_project(size_t file_id, wxString const &filename);
void technology_changed();