support print

This commit is contained in:
Le Tan 2021-11-17 20:50:26 +08:00
parent 6884e1ff6a
commit ecf1f8dbbe
48 changed files with 808 additions and 729 deletions

View File

@ -5,7 +5,7 @@
一个舒适的笔记平台!
更多信息,请访问 [VNote 主页](https://tamlok.gitee.io/vnote) 或者[由 Gitee 托管的主页](https://tamlok.gitee.io/vnote)
更多信息,请访问[VNote主页](https://vnotex.github.io/vnote)或者[由Gitee托管的主页](https://tamlok.gitee.io/vnote)。
![VNote](pics/vnote.png)
@ -31,19 +31,19 @@ VNote 不是一个简单的 Markdown 编辑器。通过提供强大的笔记管
* 邮件:`tamlokveer at gmail.com`
* [Slack](https://join.slack.com/t/vnote/shared_invite/enQtNDg2MzY0NDg3NzI4LTVhMzBlOTY0YzVhMmQyMTFmZDdhY2M3MDQxYTBjOTA2Y2IxOGRiZjg2NzdhMjkzYmUyY2VkMWJlZTNhMTQyODU)
* [Telegram](https://t.me/vnotex)
* 微信公众号: vnotex
* 微信公众号:`vnotex`
## 捐赠
有很多方式可以帮助VNote的开发
* 持续关注 VNote 并反馈问题以帮助改进;
* 推荐 VNote 给朋友,口碑传播;
* 参与 VNote 的开发,发起 [拉取请求](https://github.com/vnotex/vnote/pulls) 一起改进 VNote
* 如果 VNote 真的好用,可以考虑捐赠;
* 持续关注VNote并反馈问题以帮助改进。
* 推荐VNote给朋友口碑传播。
* 参与VNote的开发发起[拉取请求](https://github.com/vnotex/vnote/pulls)一起改进VNote。
* 如果VNote真的好用可以考虑捐赠。
**PayPal**: [PayPal.Me/vnotemd](https://www.paypal.me/vnotemd)
**PayPal**[PayPal.Me/vnotemd](https://www.paypal.me/vnotemd)
**支付宝**: `tamlokveer@gmail.com`
**支付宝**`tamlokveer@gmail.com`
<img src="pics/alipay.png" width="256px" height="256px" />

View File

@ -45,7 +45,7 @@ void CoreConfig::init(const QJsonObject &p_app,
m_toolBarIconSize = READINT(QStringLiteral("toolbar_icon_size"));
if (m_toolBarIconSize <= 0) {
m_toolBarIconSize = 16;
m_toolBarIconSize = 18;
}
m_docksTabBarIconSize = READINT(QStringLiteral("docks_tabbar_icon_size"));

View File

@ -127,7 +127,7 @@ namespace vnotex
QString m_shortcuts[Shortcut::MaxShortcut];
// Icon size of MainWindow tool bar.
int m_toolBarIconSize = 16;
int m_toolBarIconSize = 18;
// Icon size of MainWindow QDockWidgets tab bar.
int m_docksTabBarIconSize = 20;

View File

@ -60,6 +60,7 @@ namespace vnotex
ApplySnippet,
Tag,
Debug,
Print,
MaxShortcut
};
Q_ENUM(Shortcut)

View File

@ -194,6 +194,20 @@ bool NotebookDatabaseAccess::addNode(Node *p_node, bool p_ignoreId)
return true;
}
bool NotebookDatabaseAccess::addNodeRecursively(Node *p_node, bool p_ignoreId)
{
if (!p_node) {
return false;
}
auto paNode = p_node->getParent();
if (paNode && !addNodeRecursively(paNode, p_ignoreId)) {
return false;
}
return addNode(p_node, p_ignoreId);
}
QSharedPointer<NotebookDatabaseAccess::NodeRecord> NotebookDatabaseAccess::queryNode(ID p_id)
{
auto db = getDatabase();

View File

@ -49,6 +49,8 @@ namespace vnotex
public:
bool addNode(Node *p_node, bool p_ignoreId);
bool addNodeRecursively(Node *p_node, bool p_ignoreId);
// Whether there is a record with the same ID in DB and has the same path.
bool existsNode(const Node *p_node);

View File

@ -187,8 +187,8 @@ bool NotebookTagMgr::updateNodeTags(Node *p_node)
auto db = m_notebook->getDatabaseAccess();
// Make sure the node exists in DB.
if (!db->addNode(p_node, false)) {
qWarning() << "failed to add node to DB" << p_node->fetchPath() << p_node->getId();
if (!db->addNodeRecursively(p_node, false)) {
qWarning() << "failed to add node to DB" << p_node->fetchPath() << p_node->getId() << (p_node->getParent() ? p_node->getParent()->getId() : -1);
return false;
}

View File

@ -26,7 +26,6 @@
<file>icons/inplace_preview_editor.svg</file>
<file>icons/image_host_editor.svg</file>
<file>icons/settings_menu.svg</file>
<file>icons/whatsthis.svg</file>
<file>icons/help_menu.svg</file>
<file>icons/import_menu.svg</file>
<file>icons/export_menu.svg</file>
@ -79,6 +78,7 @@
<file>icons/close.svg</file>
<file>icons/delete.svg</file>
<file>icons/debug_editor.svg</file>
<file>icons/print_editor.svg</file>
<file>icons/stay_on_top.svg</file>
<file>icons/outline_editor.svg</file>
<file>icons/find_replace_editor.svg</file>

View File

@ -1 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1636007276787" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3786" width="512" height="512" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M1022.06544 583.40119c0 11.0558-4.034896 20.61962-12.111852 28.696576-8.077979 8.077979-17.639752 12.117992-28.690436 12.117992L838.446445 624.215758c0 72.690556-14.235213 134.320195-42.718941 184.89915l132.615367 133.26312c8.076956 8.065699 12.117992 17.634636 12.117992 28.690436 0 11.050684-4.034896 20.614503-12.117992 28.691459-7.653307 8.065699-17.209964 12.106736-28.690436 12.106736-11.475356 0-21.040199-4.041036-28.690436-12.106736L744.717737 874.15318c-2.124384 2.118244-5.308913 4.88424-9.558703 8.283664-4.259 3.3984-13.180184 9.463536-26.78504 18.171871-13.598716 8.715499-27.415396 16.473183-41.439808 23.276123-14.029528 6.797823-31.462572 12.966313-52.289923 18.49319-20.827351 5.517667-41.446971 8.28571-61.842487 8.28571L552.801776 379.38668l-81.611739 0 0 571.277058c-21.668509 0-43.250036-2.874467-64.707744-8.615215-21.473057-5.734608-39.960107-12.749372-55.476499-21.039175-15.518438-8.289804-29.541827-16.572444-42.077328-24.867364-12.541641-8.290827-21.781072-15.193027-27.739784-20.714787l-9.558703-8.93244L154.95056 998.479767c-8.500605 8.921183-18.699897 13.386892-30.606065 13.386892-10.201339 0-19.335371-3.40454-27.409257-10.202363-8.079002-7.652284-12.437264-17.10968-13.080923-28.372188-0.633427-11.263531 2.659573-21.143553 9.893324-29.647227l128.787178-144.727219c-24.650423-48.464805-36.980239-106.699114-36.980239-174.710091L42.738895 624.207571c-11.057847 0-20.61655-4.041036-28.690436-12.111852-8.079002-8.082072-12.120039-17.640776-12.120039-28.696576 0-11.050684 4.041036-20.61962 12.120039-28.689413 8.073886-8.072863 17.632589-12.107759 28.690436-12.107759l142.81466 0L185.553555 355.156836l-110.302175-110.302175c-8.074909-8.077979-12.113899-17.640776-12.113899-28.691459 0-11.04966 4.044106-20.61962 12.113899-28.690436 8.071839-8.076956 17.638729-12.123109 28.691459-12.123109 11.056823 0 20.612457 4.052293 28.692482 12.123109l110.302175 110.302175 538.128077 0 110.303198-110.302175c8.070816-8.076956 17.632589-12.123109 28.690436-12.123109 11.050684 0 20.617573 4.052293 28.689413 12.123109 8.077979 8.070816 12.119015 17.640776 12.119015 28.690436 0 11.050684-4.041036 20.614503-12.119015 28.691459l-110.302175 110.302175 0 187.448206 142.815683 0c11.0558 0 20.618597 4.034896 28.690436 12.113899 8.076956 8.069793 12.117992 17.638729 12.117992 28.683273l0 0L1022.06544 583.40119 1022.06544 583.40119zM716.021162 216.158085 307.968605 216.158085c0-56.526411 19.871583-104.667851 59.616796-144.414087 39.733956-39.746236 87.88256-59.611679 144.411017-59.611679 56.529481 0 104.678084 19.865443 144.413064 59.611679C696.156742 111.48921 716.021162 159.631674 716.021162 216.158085L716.021162 216.158085 716.021162 216.158085 716.021162 216.158085z" p-id="3787" fill="#000000"></path></svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1637134014354" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9411" width="512" height="512" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M512 64c51.3 0 99.5 20 135.8 56.2 20.6 20.6 36 45.1 45.4 71.8H330.9c9.4-26.7 24.8-51.2 45.4-71.8C412.5 84 460.7 64 512 64z m0-64C370.6 0 256 114.6 256 256h512C768 114.6 653.4 0 512 0z" p-id="9412" fill="#000000"></path><path d="M832 704v-98h160c17.7 0 32-14.3 32-32s-14.3-32-32-32H832V368c86 0 158.8-56.6 183.2-134.5 6.5-20.6-9-41.5-30.6-41.5-7 0-13.5 2.2-18.9 6.1-5.4 3.9-9.5 9.5-11.6 16.1-6 19.3-16.6 36.9-31.1 51.7-24.3 24.6-57.8 38.1-92.4 38.1H193.3c-34.6 0-68.1-13.4-92.4-38.1-14.6-14.8-25.1-32.4-31.1-51.7C65.7 201 53.2 192 39.3 192c-18.2 0-32 14.9-32 31.9 0 3.2 0.5 6.4 1.5 9.6C33.2 311.4 106 368 192 368v174H32c-17.7 0-32 14.3-32 32 0 8.8 3.6 16.8 9.4 22.6 5.8 5.8 13.8 9.4 22.6 9.4h160v98c-86 0-158.8 56.6-183.2 134.5-6.5 20.6 9 41.5 30.6 41.5 7 0 13.5-2.2 18.9-6.2 5.4-3.9 9.5-9.5 11.6-16.1 6-19.3 16.6-36.9 31.1-51.7 24.3-24.6 57.8-38.1 92.4-38.1h5.1C228 914.1 357.2 1024 512 1024c88.4 0 168.4-35.8 226.3-93.7 43.5-43.5 74.6-99.6 87.3-162.3h5.1c34.6 0 68.1 13.4 92.4 38.1 14.6 14.8 25.1 32.4 31.1 51.7 4.1 13.3 16.5 22.3 30.5 22.3 18.2 0 32-14.9 32-31.9 0-3.1-0.5-6.4-1.5-9.6C990.8 760.6 918 704 832 704z m-64 0c0 21.8-2.7 43.3-8 64-3.1 12.1-7.1 24-12.1 35.6-12.9 30.5-31.4 57.9-54.9 81.4-23.5 23.5-50.9 42-81.4 54.9-0.2 0.1-0.4 0.2-0.7 0.3-31.8 13.4-67-10.3-67-44.8V480c0-8.8-3.6-16.8-9.4-22.6-6-6-14.2-9.6-23.4-9.4-17.5 0.4-31.3 15.1-31.3 32.6v414.7c0 34.5-35.1 58.2-67 44.8-0.2-0.1-0.4-0.2-0.7-0.3-30.2-12.8-57.6-31.3-81.1-54.8-23.5-23.5-42-50.9-54.9-81.4-4.9-11.6-8.9-23.5-12.1-35.6-5.3-20.8-8-42.2-8-64V368h512v336z" p-id="9413" fill="#000000"></path></svg>

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -1,10 +1 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<path style="fill:#000000" d="M445,386.7l-84.8-85.9c13.8-24.1,21-50.9,21-77.9c0-87.6-71.2-158.9-158.6-158.9C135.2,64,64,135.3,64,222.9
c0,87.6,71.2,158.9,158.6,158.9c27.9,0,55.5-7.7,80.1-22.4l84.4,85.6c1.9,1.9,4.6,3.1,7.3,3.1c2.7,0,5.4-1.1,7.3-3.1l43.3-43.8
C449,397.1,449,390.7,445,386.7z M222.6,125.9c53.4,0,96.8,43.5,96.8,97c0,53.5-43.4,97-96.8,97c-53.4,0-96.8-43.5-96.8-97
C125.8,169.4,169.2,125.9,222.6,125.9z"/>
</svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1637134995193" class="icon" viewBox="0 0 1026 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4928" width="513" height="512" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M1009.371429 943.542857l-248.685714-256c0 0-7.314286-7.314286-14.628571-7.314286 51.2-65.828571 87.771429-160.914286 87.771429-256C826.514286 190.171429 643.657143 0 409.6 0 190.171429 0 0 190.171429 0 424.228571s190.171429 424.228571 416.914286 424.228571c102.4 0 204.8-43.885714 270.628571-102.4l7.314286 7.314286 248.685714 256c14.628571 14.628571 43.885714 14.628571 58.514286 0C1031.314286 987.428571 1031.314286 965.485714 1009.371429 943.542857L1009.371429 943.542857zM416.914286 782.628571c-197.485714 0-351.085714-160.914286-351.085714-358.4S219.428571 65.828571 416.914286 65.828571c197.485714 0 351.085714 160.914286 351.085714 358.4S614.4 782.628571 416.914286 782.628571L416.914286 782.628571z" p-id="4929" fill="#000000"></path></svg>

Before

Width:  |  Height:  |  Size: 905 B

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1637130589924" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12363" width="512" height="512" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M24.380952 265.886178 902.094615 265.886178C942.428977 265.886178 975.238095 298.903371 975.238095 339.485775L975.238095 779.447155 999.619049 754.99187 853.333333 754.99187 877.714285 779.447155 877.714285 681.626016 877.714285 657.170731 853.333333 657.170731 170.666667 657.170731 146.285714 657.170731 146.285714 681.626016 146.285714 779.447155 170.666667 754.99187 121.955642 754.99187C81.590725 754.99187 48.761905 721.971868 48.761905 681.392275L48.761905 241.430895 24.380952 265.886178 24.380952 265.886178ZM24.380952 216.97561 0 216.97561 0 241.430895 0 681.392275C0 748.954229 54.630068 803.902438 121.955642 803.902438L170.666667 803.902438 195.047619 803.902438 195.047619 779.447155 195.047619 681.626016 170.666667 706.081301 853.333333 706.081301 828.952382 681.626016 828.952382 779.447155 828.952382 803.902438 853.333333 803.902438 999.619049 803.902438 1024 803.902438 1024 779.447155 1024 339.485775C1024 271.92663 969.395277 216.97561 902.094615 216.97561L24.380952 216.97561 24.380952 216.97561ZM755.809523 999.544715 780.190477 975.089431 243.809523 975.089431 268.190477 999.544715 268.190477 776.325203C268.190477 762.818923 257.274752 751.869918 243.809523 751.869918 230.344297 751.869918 219.428572 762.818923 219.428572 776.325203L219.428572 999.544715C219.428572 1013.050995 230.344297 1024 243.809523 1024L780.190477 1024C793.655703 1024 804.571428 1013.050995 804.571428 999.544715L804.571428 776.325203C804.571428 762.818923 793.655703 751.869918 780.190477 751.869918 766.725248 751.869918 755.809523 762.818923 755.809523 776.325203L755.809523 999.544715ZM207.238095 437.073171 524.190477 437.073171 524.190477 388.162603 207.238095 388.162603 207.238095 437.073171 207.238095 437.073171ZM219.428572 241.430895 219.428572 45.788618 195.047619 70.243903 828.952382 70.243903 804.571428 45.788618 804.571428 241.430933 853.333333 241.430933 853.333333 45.788618 853.333333 21.333333 828.952382 21.333333 195.047619 21.333333 170.666667 21.333333 170.666667 45.788618 170.666667 241.430895 219.428572 241.430895 219.428572 241.430895Z" p-id="12364" fill="#000000"></path></svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -1,7 +1 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<polygon fill="#000000" points="96,288 243,288 191.9,480 416,224 269,224 320,32 "/>
</svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1637135307796" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2546" width="512" height="512" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M353.877333 597.333333l-75.392 301.568c-7.978667 31.829333 31.402667 53.589333 54.144 29.909334L844.373333 395.52A32 32 0 0 0 821.333333 341.333333h-190.293333l71.338667-213.888A32 32 0 0 0 672 85.333333h-298.666667a32 32 0 0 0-30.762666 23.210667l-128 448A32 32 0 0 0 245.333333 597.333333h108.544z m202.453334-234.112a32 32 0 0 0 30.336 42.112h159.573333l-376.490667 392.362667 56.149334-224.597333a32 32 0 0 0-31.018667-39.765334h-107.093333l109.653333-384h230.144l-71.253333 213.888z" p-id="2547" fill="#000000"></path></svg>

Before

Width:  |  Height:  |  Size: 568 B

After

Width:  |  Height:  |  Size: 906 B

View File

@ -1,10 +1 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<path style="fill:#000000" d="M445,386.7l-84.8-85.9c13.8-24.1,21-50.9,21-77.9c0-87.6-71.2-158.9-158.6-158.9C135.2,64,64,135.3,64,222.9
c0,87.6,71.2,158.9,158.6,158.9c27.9,0,55.5-7.7,80.1-22.4l84.4,85.6c1.9,1.9,4.6,3.1,7.3,3.1c2.7,0,5.4-1.1,7.3-3.1l43.3-43.8
C449,397.1,449,390.7,445,386.7z M222.6,125.9c53.4,0,96.8,43.5,96.8,97c0,53.5-43.4,97-96.8,97c-53.4,0-96.8-43.5-96.8-97
C125.8,169.4,169.2,125.9,222.6,125.9z"/>
</svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1637134995193" class="icon" viewBox="0 0 1026 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4928" width="513" height="512" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M1009.371429 943.542857l-248.685714-256c0 0-7.314286-7.314286-14.628571-7.314286 51.2-65.828571 87.771429-160.914286 87.771429-256C826.514286 190.171429 643.657143 0 409.6 0 190.171429 0 0 190.171429 0 424.228571s190.171429 424.228571 416.914286 424.228571c102.4 0 204.8-43.885714 270.628571-102.4l7.314286 7.314286 248.685714 256c14.628571 14.628571 43.885714 14.628571 58.514286 0C1031.314286 987.428571 1031.314286 965.485714 1009.371429 943.542857L1009.371429 943.542857zM416.914286 782.628571c-197.485714 0-351.085714-160.914286-351.085714-358.4S219.428571 65.828571 416.914286 65.828571c197.485714 0 351.085714 160.914286 351.085714 358.4S614.4 782.628571 416.914286 782.628571L416.914286 782.628571z" p-id="4929" fill="#000000"></path></svg>

Before

Width:  |  Height:  |  Size: 905 B

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -1,10 +1 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<path style="fill:#000000" d="M445,386.7l-84.8-85.9c13.8-24.1,21-50.9,21-77.9c0-87.6-71.2-158.9-158.6-158.9C135.2,64,64,135.3,64,222.9
c0,87.6,71.2,158.9,158.6,158.9c27.9,0,55.5-7.7,80.1-22.4l84.4,85.6c1.9,1.9,4.6,3.1,7.3,3.1c2.7,0,5.4-1.1,7.3-3.1l43.3-43.8
C449,397.1,449,390.7,445,386.7z M222.6,125.9c53.4,0,96.8,43.5,96.8,97c0,53.5-43.4,97-96.8,97c-53.4,0-96.8-43.5-96.8-97
C125.8,169.4,169.2,125.9,222.6,125.9z"/>
</svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1637134995193" class="icon" viewBox="0 0 1026 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4928" width="513" height="512" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M1009.371429 943.542857l-248.685714-256c0 0-7.314286-7.314286-14.628571-7.314286 51.2-65.828571 87.771429-160.914286 87.771429-256C826.514286 190.171429 643.657143 0 409.6 0 190.171429 0 0 190.171429 0 424.228571s190.171429 424.228571 416.914286 424.228571c102.4 0 204.8-43.885714 270.628571-102.4l7.314286 7.314286 248.685714 256c14.628571 14.628571 43.885714 14.628571 58.514286 0C1031.314286 987.428571 1031.314286 965.485714 1009.371429 943.542857L1009.371429 943.542857zM416.914286 782.628571c-197.485714 0-351.085714-160.914286-351.085714-358.4S219.428571 65.828571 416.914286 65.828571c197.485714 0 351.085714 160.914286 351.085714 358.4S614.4 782.628571 416.914286 782.628571L416.914286 782.628571z" p-id="4929" fill="#000000"></path></svg>

Before

Width:  |  Height:  |  Size: 905 B

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -1,18 +1 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<path style="fill:#000000" d="M450,138.3l-47.7,48.5l-2.7,2.8l-1.6,1.7c-1.1,0.8-2.4,1.2-3.9,1.2c-1.6,0-3.1-0.6-4.3-1.6l-0.9-0.9l-2.7-2.7l-41.3-42.1
l-2.2-2.2l-1.7-1.7c-1-1.5-1.6-3.4-1.6-5.3c0-1.7,0.6-3.2,1.6-4.4l0.7-0.8l2.6-2.6l47.9-48.7c-5.1-10.1-24.7-14.9-35.1-14.1
c-17.1,1.3-34.7,7-52.8,25.5c-0.7,0.8-1.5,1.6-2.2,2.3C277.5,120,272.6,156,282.6,189c0.7,1.4,1.3,3.1,1.6,4.6
c1.1,5.5-0.4,10.2-4,13.5l-37.9,36.4c-11.8-12-13.5-13.6-13.5-13.6c-2-2-6-3.3-9.5-1.2l-5.9,3.6c-22.7-23.1-32.3-32.4-35.4-43.6
c-3.2-11.7-0.3-27.3,2.7-33.1c2.5-4.6,10.3-8.9,16.9-9.4l8.6,8.8c2,2,5.1,2,7.1,0l30.9-31.4c2-2,2-5.3,0-7.3l-49.9-50.7
c-2-2-5.2-2-7.1,0l-30.9,31.4c-2,2-2,5.3,0,7.3l3.3,3.4c0,4.9-0.7,12.5-4.7,16.6c-6.2,6.3-18.5-1-26.5,4.7
c-7.9,5.6-17.9,14.6-24.3,21c-6.3,6.4-30.5,31.8-47.8,74.6c-17.3,42.8-4,82.5,5.4,92.9c5,5.5,14.1,11.1,12.5,0.7
c-1.6-10.5-4.2-46.9,7.7-61.8c11.9-14.9,27.6-27.1,48-28.1c19.6-1,30.9,5.7,56.3,31.5l-2.8,5.2c-1.8,3.4-0.8,7.7,1.2,9.7
c0,0,1.5,1.6,12.1,12.4l-97.2,93.2c-16.2,14.3-15.3,40.5-0.3,56c15.2,15.2,41.1,16.3,55.2-0.2l91.4-98.6
c49.1,52.3,93.3,107.4,93.3,107.4c2,2,5.2,2,7.1,0l49.9-50.7c2-2,2-5.2,0-7.3c0,0-55.2-45.7-107-96.2l35.5-38.3
c3.3-3.7,7.9-5.2,13.3-4.1c1.5,0.3,3.1,1,4.5,1.7c32.4,10.2,67.8,5.2,94-19.8c0.8-0.7,1.5-1.5,2.3-2.3c18.1-18.4,23.7-36.4,25-53.8
C464.7,163.5,460.2,143.8,450,138.3z"/>
</svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1637134516381" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="19374" width="512" height="512" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M993.31142 624.247465l-94.120714-73.598993c1.237983-11.349845 2.21797-24.617663 2.21797-38.655472s-1.023986-27.305627-2.21797-38.655471l94.206712-73.640994c17.493761-13.823811 22.313695-38.357476 11.135848-58.793196l-97.876662-169.341685c-10.709854-19.497733-34.729525-28.415612-56.617226-20.351721l-111.060481 44.58539c-21.24771-15.35979-43.561404-28.329613-66.645089-38.697471l-16.895769-117.800389C652.666077 16.895769 633.210343 0 610.212657 0h-196.263316c-22.997686 0-42.45342 16.895769-45.183383 38.869469l-16.937768 118.228383c-22.357694 10.111862-44.329394 22.869687-66.55909 38.741471l-111.358478-44.713389c-21.289709-8.319886-45.525378 0.469994-56.191231 20.009726l-98.004661 169.597682c-11.561842 19.541733-6.825907 44.885386 11.093849 59.049192l94.120713 73.556995c-1.49398 14.421803-2.21797 26.921632-2.21797 38.655471s0.72599 24.233669 2.133971 38.655472l-94.206712 73.684992C13.18682 638.157275 8.406885 662.68894 19.542733 683.12666l97.876662 169.341685c10.623855 19.455734 34.601527 28.329613 56.617226 20.351722l111.060481-44.585391c21.24771 15.317791 43.605404 28.287613 66.687088 38.697471l16.895769 117.75839c2.773962 22.399694 22.229696 39.295463 45.225382 39.295463h196.263317c22.997686 0 42.45342-16.895769 45.183382-38.869468l16.937769-118.184385c22.357694-10.111862 44.329394-22.869687 66.55909-38.74147l111.358477 44.713389c21.20571 8.233887 45.525378-0.469994 56.191232-20.009727l98.388655-170.195673c10.881851-19.965727 6.101917-44.499392-11.475843-58.451201z m-25.813648 37.545487l-101.63061 171.431656-122.15233-49.065329c-6.911906-2.773962-14.761798-1.705977-20.735716 2.729963-26.453638 19.797729-52.009289 34.687526-78.206931 45.397379a21.319709 21.319709 0 0 0-13.055822 16.725771l-21.545705 132.308192-199.123278-2.26197-18.645745-130.004222a21.409707 21.409707 0 0 0-13.055821-16.725771c-27.263627-11.177847-53.503269-26.409639-78.036933-45.269382a21.24571 21.24571 0 0 0-13.013823-4.437939c-2.687963 0-5.375927 0.469994-7.97789 1.535979L154.664885 831.558631l-97.876661-169.341685c-0.895988-1.663977-0.72599-3.583951 0.297996-4.39394l103.550584-80.936893a21.377708 21.377708 0 0 0 8.02189-19.455734c-2.261969-17.877756-3.285955-32.341558-3.285955-45.439379s1.065985-27.519624 3.285955-45.439379a21.337708 21.337708 0 0 0-8.02189-19.455734l-104.058578-84.860839 101.630611-171.431657 122.15233 49.06533c6.953905 2.815962 14.761798 1.749976 20.777716-2.729963 26.409639-19.839729 52.009289-34.687526 78.206931-45.397379a21.405707 21.405707 0 0 0 13.013822-16.725772l21.589705-132.35019 199.165277 2.303968 18.601745 130.046222a21.409707 21.409707 0 0 0 13.055822 16.725772c27.221628 11.135848 53.461269 26.36764 78.036933 45.269381 6.015918 4.607937 13.90981 5.717922 20.949713 2.857961l125.652283-47.401352 97.876661 169.341684c0.895988 1.663977 0.72599 3.541952-0.297996 4.351941l-103.550584 80.936893a21.337708 21.337708 0 0 0-8.02189 19.455734c1.621978 12.969823 3.285955 28.54361 3.285955 45.439379 0 16.937768-1.663977 32.469556-3.285955 45.439379a21.377708 21.377708 0 0 0 8.02189 19.455734l103.422586 80.894894c1.105985 0.895988 1.319982 2.815962 0.635991 4.009945z" p-id="19375" fill="#000000"></path><path d="M512.037999 298.661917c-117.630392 0-213.331083 95.700692-213.331083 213.331083s95.700692 213.331083 213.331083 213.331083S725.369083 629.623392 725.369083 511.993s-95.700692-213.331083-213.331084-213.331083z m0 383.99475c-94.120713 0-170.663667-76.542954-170.663666-170.663667s76.542954-170.663667 170.663666-170.663667 170.663667 76.542954 170.663667 170.663667-76.542954 170.663667-170.663667 170.663667z" p-id="19376" fill="#000000"></path></svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -1,18 +1 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<path style="fill:#000000" d="M450,138.3l-47.7,48.5l-2.7,2.8l-1.6,1.7c-1.1,0.8-2.4,1.2-3.9,1.2c-1.6,0-3.1-0.6-4.3-1.6l-0.9-0.9l-2.7-2.7l-41.3-42.1
l-2.2-2.2l-1.7-1.7c-1-1.5-1.6-3.4-1.6-5.3c0-1.7,0.6-3.2,1.6-4.4l0.7-0.8l2.6-2.6l47.9-48.7c-5.1-10.1-24.7-14.9-35.1-14.1
c-17.1,1.3-34.7,7-52.8,25.5c-0.7,0.8-1.5,1.6-2.2,2.3C277.5,120,272.6,156,282.6,189c0.7,1.4,1.3,3.1,1.6,4.6
c1.1,5.5-0.4,10.2-4,13.5l-37.9,36.4c-11.8-12-13.5-13.6-13.5-13.6c-2-2-6-3.3-9.5-1.2l-5.9,3.6c-22.7-23.1-32.3-32.4-35.4-43.6
c-3.2-11.7-0.3-27.3,2.7-33.1c2.5-4.6,10.3-8.9,16.9-9.4l8.6,8.8c2,2,5.1,2,7.1,0l30.9-31.4c2-2,2-5.3,0-7.3l-49.9-50.7
c-2-2-5.2-2-7.1,0l-30.9,31.4c-2,2-2,5.3,0,7.3l3.3,3.4c0,4.9-0.7,12.5-4.7,16.6c-6.2,6.3-18.5-1-26.5,4.7
c-7.9,5.6-17.9,14.6-24.3,21c-6.3,6.4-30.5,31.8-47.8,74.6c-17.3,42.8-4,82.5,5.4,92.9c5,5.5,14.1,11.1,12.5,0.7
c-1.6-10.5-4.2-46.9,7.7-61.8c11.9-14.9,27.6-27.1,48-28.1c19.6-1,30.9,5.7,56.3,31.5l-2.8,5.2c-1.8,3.4-0.8,7.7,1.2,9.7
c0,0,1.5,1.6,12.1,12.4l-97.2,93.2c-16.2,14.3-15.3,40.5-0.3,56c15.2,15.2,41.1,16.3,55.2-0.2l91.4-98.6
c49.1,52.3,93.3,107.4,93.3,107.4c2,2,5.2,2,7.1,0l49.9-50.7c2-2,2-5.2,0-7.3c0,0-55.2-45.7-107-96.2l35.5-38.3
c3.3-3.7,7.9-5.2,13.3-4.1c1.5,0.3,3.1,1,4.5,1.7c32.4,10.2,67.8,5.2,94-19.8c0.8-0.7,1.5-1.5,2.3-2.3c18.1-18.4,23.7-36.4,25-53.8
C464.7,163.5,460.2,143.8,450,138.3z"/>
</svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1637134516381" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="19374" width="512" height="512" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M993.31142 624.247465l-94.120714-73.598993c1.237983-11.349845 2.21797-24.617663 2.21797-38.655472s-1.023986-27.305627-2.21797-38.655471l94.206712-73.640994c17.493761-13.823811 22.313695-38.357476 11.135848-58.793196l-97.876662-169.341685c-10.709854-19.497733-34.729525-28.415612-56.617226-20.351721l-111.060481 44.58539c-21.24771-15.35979-43.561404-28.329613-66.645089-38.697471l-16.895769-117.800389C652.666077 16.895769 633.210343 0 610.212657 0h-196.263316c-22.997686 0-42.45342 16.895769-45.183383 38.869469l-16.937768 118.228383c-22.357694 10.111862-44.329394 22.869687-66.55909 38.741471l-111.358478-44.713389c-21.289709-8.319886-45.525378 0.469994-56.191231 20.009726l-98.004661 169.597682c-11.561842 19.541733-6.825907 44.885386 11.093849 59.049192l94.120713 73.556995c-1.49398 14.421803-2.21797 26.921632-2.21797 38.655471s0.72599 24.233669 2.133971 38.655472l-94.206712 73.684992C13.18682 638.157275 8.406885 662.68894 19.542733 683.12666l97.876662 169.341685c10.623855 19.455734 34.601527 28.329613 56.617226 20.351722l111.060481-44.585391c21.24771 15.317791 43.605404 28.287613 66.687088 38.697471l16.895769 117.75839c2.773962 22.399694 22.229696 39.295463 45.225382 39.295463h196.263317c22.997686 0 42.45342-16.895769 45.183382-38.869468l16.937769-118.184385c22.357694-10.111862 44.329394-22.869687 66.55909-38.74147l111.358477 44.713389c21.20571 8.233887 45.525378-0.469994 56.191232-20.009727l98.388655-170.195673c10.881851-19.965727 6.101917-44.499392-11.475843-58.451201z m-25.813648 37.545487l-101.63061 171.431656-122.15233-49.065329c-6.911906-2.773962-14.761798-1.705977-20.735716 2.729963-26.453638 19.797729-52.009289 34.687526-78.206931 45.397379a21.319709 21.319709 0 0 0-13.055822 16.725771l-21.545705 132.308192-199.123278-2.26197-18.645745-130.004222a21.409707 21.409707 0 0 0-13.055821-16.725771c-27.263627-11.177847-53.503269-26.409639-78.036933-45.269382a21.24571 21.24571 0 0 0-13.013823-4.437939c-2.687963 0-5.375927 0.469994-7.97789 1.535979L154.664885 831.558631l-97.876661-169.341685c-0.895988-1.663977-0.72599-3.583951 0.297996-4.39394l103.550584-80.936893a21.377708 21.377708 0 0 0 8.02189-19.455734c-2.261969-17.877756-3.285955-32.341558-3.285955-45.439379s1.065985-27.519624 3.285955-45.439379a21.337708 21.337708 0 0 0-8.02189-19.455734l-104.058578-84.860839 101.630611-171.431657 122.15233 49.06533c6.953905 2.815962 14.761798 1.749976 20.777716-2.729963 26.409639-19.839729 52.009289-34.687526 78.206931-45.397379a21.405707 21.405707 0 0 0 13.013822-16.725772l21.589705-132.35019 199.165277 2.303968 18.601745 130.046222a21.409707 21.409707 0 0 0 13.055822 16.725772c27.221628 11.135848 53.461269 26.36764 78.036933 45.269381 6.015918 4.607937 13.90981 5.717922 20.949713 2.857961l125.652283-47.401352 97.876661 169.341684c0.895988 1.663977 0.72599 3.541952-0.297996 4.351941l-103.550584 80.936893a21.337708 21.337708 0 0 0-8.02189 19.455734c1.621978 12.969823 3.285955 28.54361 3.285955 45.439379 0 16.937768-1.663977 32.469556-3.285955 45.439379a21.377708 21.377708 0 0 0 8.02189 19.455734l103.422586 80.894894c1.105985 0.895988 1.319982 2.815962 0.635991 4.009945z" p-id="19375" fill="#000000"></path><path d="M512.037999 298.661917c-117.630392 0-213.331083 95.700692-213.331083 213.331083s95.700692 213.331083 213.331083 213.331083S725.369083 629.623392 725.369083 511.993s-95.700692-213.331083-213.331084-213.331083z m0 383.99475c-94.120713 0-170.663667-76.542954-170.663666-170.663667s76.542954-170.663667 170.663666-170.663667 170.663667 76.542954 170.663667 170.663667-76.542954 170.663667-170.663667 170.663667z" p-id="19376" fill="#000000"></path></svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -1 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1629419488608" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5513" width="512" height="512" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M285.538462 118.153846h-216.615385C53.169231 118.153846 39.384615 131.938462 39.384615 147.692308v256c0 15.753846 13.784615 29.538462 29.538462 29.538461h216.615385c15.753846 0 29.538462-13.784615 29.538461-29.538461v-256c0-15.753846-13.784615-29.538462-29.538461-29.538462z m669.538461 0h-531.692308c-15.753846 0-29.538462 13.784615-29.538461 29.538462v59.076923c0 15.753846 13.784615 29.538462 29.538461 29.538461h531.692308c15.753846 0 29.538462-13.784615 29.538462-29.538461v-59.076923c0-15.753846-13.784615-29.538462-29.538462-29.538462z m-531.692308 315.076923h334.769231c15.753846 0 29.538462-13.784615 29.538462-29.538461v-59.076923c0-15.753846-13.784615-29.538462-29.538462-29.538462h-334.769231c-15.753846 0-29.538462 13.784615-29.538461 29.538462v59.076923c0 15.753846 13.784615 29.538462 29.538461 29.538461z m-137.846153 157.538462h-216.615385c-15.753846 0-29.538462 13.784615-29.538462 29.538461v256c0 15.753846 13.784615 29.538462 29.538462 29.538462h216.615385c15.753846 0 29.538462-13.784615 29.538461-29.538462v-256c0-15.753846-13.784615-29.538462-29.538461-29.538461z m669.538461 0h-531.692308c-15.753846 0-29.538462 13.784615-29.538461 29.538461v59.076923c0 15.753846 13.784615 29.538462 29.538461 29.538462h531.692308c15.753846 0 29.538462-13.784615 29.538462-29.538462v-59.076923c0-15.753846-13.784615-29.538462-29.538462-29.538461z m-196.923077 196.923077h-334.769231c-15.753846 0-29.538462 13.784615-29.538461 29.538461v59.076923c0 15.753846 13.784615 29.538462 29.538461 29.538462h334.769231c15.753846 0 29.538462-13.784615 29.538462-29.538462v-59.076923c0-15.753846-13.784615-29.538462-29.538462-29.538461z" p-id="5514" fill="#000000"></path></svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1637134861186" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2726" width="512" height="512" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M512 64h64v192h-64V64z m0 576h64v192h-64v-192zM160 480v-64h192v64H160z m576 0v-64h192v64h-192zM250.016 199.008l44.992-44.992 136 136-44.992 44.992z m406.976 407.008l44.992-44.992 136 136-44.992 44.992zM114.016 923.008l-44.992-44.992 316.992-316.992 44.992 44.992z m588-588l-44.992-44.992 136-136 44.992 44.992z" p-id="2727" fill="#000000"></path></svg>

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 729 B

View File

@ -1,4 +1 @@
<svg t="1600732290374" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11728" width="512" height="512">
<path d="M725.333333 725.333333V128a85.333333 85.333333 0 0 0-85.333333-85.333333H394.24a128 128 0 0 0-90.453333 37.546666L122.88 261.12A128 128 0 0 0 85.333333 351.573333V725.333333a85.333333 85.333333 0 0 0 85.333334 85.333334h469.333333a85.333333 85.333333 0 0 0 85.333333-85.333334zM170.666667 384h213.333333a42.666667 42.666667 0 0 0 42.666667-42.666667V128h213.333333v597.333333H170.666667z m640-170.666667v597.333334a85.333333 85.333333 0 0 1-85.333334 85.333333H256a85.333333 85.333333 0 0 0 85.333333 85.333333h384a170.666667 170.666667 0 0 0 170.666667-170.666666V298.666667a85.333333 85.333333 0 0 0-85.333333-85.333334z" p-id="11729" fill="#000000">
</path>
</svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1637142310647" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11342" width="512" height="512" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M256 256V149.333333c0-58.88 47.829333-106.666667 106.666667-106.666666h512c58.88 0 106.666667 47.829333 106.666666 106.666666v512c0 58.88-47.829333 106.666667-106.666666 106.666667h-106.666667v106.666667c0 58.88-47.829333 106.666667-106.666667 106.666666H149.333333c-58.88 0-106.666667-47.829333-106.666666-106.666666V362.666667c0-58.88 47.829333-106.666667 106.666666-106.666667h106.666667z m0 85.333333H149.333333c-11.733333 0-21.333333 9.6-21.333333 21.333334v512c0 11.733333 9.6 21.333333 21.333333 21.333333h512c11.733333 0 21.333333-9.6 21.333334-21.333333v-106.666667H362.666667c-58.88 0-106.666667-47.829333-106.666667-106.666667V341.333333z m85.333333-192v512c0 11.733333 9.6 21.333333 21.333334 21.333334h512c11.733333 0 21.333333-9.6 21.333333-21.333334V149.333333c0-11.733333-9.6-21.333333-21.333333-21.333333H362.666667c-11.733333 0-21.333333 9.6-21.333334 21.333333z" p-id="11343" fill="#000000"></path></svg>

Before

Width:  |  Height:  |  Size: 825 B

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<g>
<path fill="#000000" d="M345.1,77.1C317.6,56.2,286.6,49,247.3,49c-29.8,0-55.3,6.1-75.5,19.7C142,89,128,123.1,128,177h76.8
c0-14.4-1.4-29.9,7-43.2c8.4-13.3,20.1-23.5,40.2-23.5c20.4,0,30.9,5.9,40.8,18.1c8.4,10.4,11.6,22.8,11.6,36
c0,11.4-5.8,21.9-12.7,31.4c-3.8,5.6-8.8,10.6-15.1,15.4c0,0-41.5,24.7-56.1,48.1c-10.9,17.4-14.8,39.2-15.7,65.3
c-0.1,1.9,0.6,5.8,7.2,5.8c6.5,0,56,0,61.8,0c5.8,0,7-4.4,7.1-6.2c0.4-9.5,1.6-24.1,3.3-29.6c3.3-10.4,9.7-19.5,19.7-27.3
l20.7-14.3c18.7-14.6,33.6-26.5,40.2-35.9c11.3-15.4,19.2-34.4,19.2-56.9C384,123.5,370.5,96.4,345.1,77.1z M242,370.2
c-25.9-0.8-47.3,17.2-48.2,45.3c-0.8,28.2,19.5,46.7,45.5,47.5c27,0.8,47.9-16.6,48.7-44.7C288.8,390.2,269,371,242,370.2z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -109,7 +109,7 @@
</message>
<message>
<location filename="../../../widgets/dialogs/settings/appearancepage.cpp" line="70"/>
<source>Keep dock widgets when expanding content area:</source>
<source>Dock widgets kept when expanding content area:</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -690,9 +690,8 @@
<translation>(%1)</translation>
</message>
<message>
<location filename="../../../export/exporter.cpp" line="120"/>
<source>Failed to create output folder %1.</source>
<translation>%1</translation>
<translation type="vanished">%1</translation>
</message>
<message>
<location filename="../../../export/exporter.cpp" line="64"/>
@ -701,6 +700,7 @@
</message>
<message>
<location filename="../../../export/exporter.cpp" line="38"/>
<location filename="../../../export/exporter.cpp" line="120"/>
<source>Failed to create output folder (%1).</source>
<translation type="unfinished"></translation>
</message>
@ -1503,8 +1503,12 @@
</message>
<message>
<location filename="../../../widgets/dialogs/importnotebookdialog.cpp" line="103"/>
<source>Not a valid (%1) root folder (%2).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Not a valid %1 root folder (%2).</source>
<translation>%1(%2)</translation>
<translation type="vanished">%1(%2)</translation>
</message>
<message>
<location filename="../../../widgets/dialogs/importnotebookdialog.cpp" line="127"/>
@ -1700,7 +1704,7 @@ Remove them from the configuration?</source>
</message>
<message>
<location filename="../../../widgets/systemtrayhelper.cpp" line="44"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="414"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="565"/>
<source>Quit</source>
<translation></translation>
</message>
@ -1803,49 +1807,59 @@ Remove them from the configuration?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="503"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="577"/>
<source>Menu</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="624"/>
<source>Home Page</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="645"/>
<source>Contributors</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="529"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="305"/>
<source>Configuration</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="531"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="307"/>
<source>Edit User Configuration File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="556"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="332"/>
<source>Edit Markdown User Styles</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="569"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="345"/>
<source>Edit the user styles of Markdown editor read mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="643"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="419"/>
<source>Quick Access Not Set</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="289"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="375"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="385"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="526"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="536"/>
<source>Settings</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="305"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="456"/>
<source>Expand Content Area</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="327"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="478"/>
<source>Press %1 To Exit Full Screen</source>
<translation>%1 </translation>
</message>
@ -1860,88 +1874,81 @@ Remove them from the configuration?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="335"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="486"/>
<source>Stay on Top</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="347"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="498"/>
<source>Windows</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="540"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="316"/>
<source>Open User Configuration Folder</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="547"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="323"/>
<source>Open Default Configuration Folder</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="400"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="551"/>
<source>Reset Main Window Layout</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="408"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="559"/>
<source>Restart</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="426"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="622"/>
<source>Help</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="436"/>
<source>What&apos;s This?</source>
<translation>?</translation>
<translation type="vanished">?</translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="441"/>
<source>Enter WhatsThis mode and click somewhere to show help information</source>
<translation>[]</translation>
<translation type="vanished">[]</translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="445"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="600"/>
<source>Shortcuts Help</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="456"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="611"/>
<source>Markdown Guide</source>
<translation>Markdown </translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="469"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="586"/>
<source>View Logs</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="482"/>
<source>%1 Home Page</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="488"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="630"/>
<source>Feedback and Discussions</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="496"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="638"/>
<source>Check for Updates</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="509"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="515"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="651"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="657"/>
<source>About</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="512"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="654"/>
<source>&lt;h3&gt;%1&lt;/h3&gt;
&lt;span&gt;%2&lt;/span&gt;
</source>
@ -1950,7 +1957,7 @@ Remove them from the configuration?</source>
</translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="518"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="660"/>
<source>About Qt</source>
<translation>Qtについて</translation>
</message>
@ -2520,66 +2527,66 @@ Remove them from the configuration?</source>
<context>
<name>vnotex::MarkdownViewWindow</name>
<message>
<location filename="../../../widgets/markdownviewwindow.cpp" line="445"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="447"/>
<source>Markdown Viewer</source>
<translation>Markdownビューア</translation>
</message>
<message>
<location filename="../../../widgets/markdownviewwindow.cpp" line="793"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="825"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="795"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="827"/>
<source>Clear Obsolete Images</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/markdownviewwindow.cpp" line="794"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="796"/>
<source>These images seems to be not in use anymore. Please confirm the deletion of them.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../widgets/markdownviewwindow.cpp" line="795"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="797"/>
<source>Deleted local images could be found in the recycle bin of notebook if it is from a bundle notebook.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../widgets/markdownviewwindow.cpp" line="819"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="821"/>
<source>Clearing obsolete images...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../widgets/markdownviewwindow.cpp" line="820"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="822"/>
<source>Abort</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../widgets/markdownviewwindow.cpp" line="834"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="836"/>
<source>Clear image (%1)</source>
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
<location filename="../../../widgets/markdownviewwindow.cpp" line="846"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="848"/>
<source>Cleared %n obsolete images</source>
<translation type="unfinished">
<numerusform></numerusform>
</translation>
</message>
<message>
<location filename="../../../widgets/markdownviewwindow.cpp" line="1259"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="1261"/>
<source>View Mode Not Supported In Read Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../widgets/markdownviewwindow.cpp" line="1277"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="1279"/>
<source>Edit Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../widgets/markdownviewwindow.cpp" line="1288"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="1290"/>
<source>Edit with Preview</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../widgets/markdownviewwindow.cpp" line="1001"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="1010"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="1003"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="1012"/>
<source>Replace is not supported in read mode</source>
<translation></translation>
</message>
@ -4732,9 +4739,13 @@ Description: %3</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/viewsplit.cpp" line="151"/>
<source>Workspaces and Splits</source>
<translation></translation>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../../../widgets/viewsplit.cpp" line="151"/>
<source>Menu</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../widgets/viewsplit.cpp" line="413"/>

View File

@ -109,8 +109,12 @@
</message>
<message>
<location filename="../../../widgets/dialogs/settings/appearancepage.cpp" line="70"/>
<source>Dock widgets kept when expanding content area:</source>
<translation>:</translation>
</message>
<message>
<source>Keep dock widgets when expanding content area:</source>
<translation>:</translation>
<translation type="vanished">:</translation>
</message>
<message>
<location filename="../../../widgets/dialogs/settings/appearancepage.cpp" line="125"/>
@ -695,20 +699,16 @@
<translation>(%1)</translation>
</message>
<message>
<location filename="../../../export/exporter.cpp" line="38"/>
<location filename="../../../export/exporter.cpp" line="120"/>
<source>Failed to create output folder %1.</source>
<translation> %1</translation>
<source>Failed to create output folder (%1).</source>
<translation>(%1)</translation>
</message>
<message>
<location filename="../../../export/exporter.cpp" line="64"/>
<source>Format %1 is not supported to export as Markdown.</source>
<translation>%1Markdown</translation>
</message>
<message>
<location filename="../../../export/exporter.cpp" line="38"/>
<source>Failed to create output folder (%1).</source>
<translation> (%1)</translation>
</message>
<message>
<location filename="../../../export/exporter.cpp" line="73"/>
<location filename="../../../export/exporter.cpp" line="139"/>
@ -889,7 +889,7 @@
<message>
<location filename="../../../widgets/findandreplacewidget.cpp" line="109"/>
<source>\1, \2 for back reference in regular expression</source>
<translation>使 \1, \2 </translation>
<translation>使\1\2</translation>
</message>
<message>
<location filename="../../../widgets/findandreplacewidget.cpp" line="112"/>
@ -1510,8 +1510,8 @@
</message>
<message>
<location filename="../../../widgets/dialogs/importnotebookdialog.cpp" line="103"/>
<source>Not a valid %1 root folder (%2).</source>
<translation>%1 (%2)</translation>
<source>Not a valid (%1) root folder (%2).</source>
<translation>(%1)(%2)</translation>
</message>
<message>
<location filename="../../../widgets/dialogs/importnotebookdialog.cpp" line="127"/>
@ -1673,7 +1673,7 @@ Remove them from the configuration?</source>
</message>
<message>
<location filename="../../../widgets/systemtrayhelper.cpp" line="44"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="414"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="565"/>
<source>Quit</source>
<translation>退</translation>
</message>
@ -1776,49 +1776,54 @@ Remove them from the configuration?</source>
<translation>访</translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="503"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="577"/>
<source>Menu</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="645"/>
<source>Contributors</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="529"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="305"/>
<source>Configuration</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="531"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="307"/>
<source>Edit User Configuration File</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="556"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="332"/>
<source>Edit Markdown User Styles</source>
<translation>Markdown用户样式</translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="569"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="345"/>
<source>Edit the user styles of Markdown editor read mode</source>
<translation>Markdown编辑器阅读模式的用户样式</translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="643"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="419"/>
<source>Quick Access Not Set</source>
<translation>访</translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="289"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="375"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="385"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="526"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="536"/>
<source>Settings</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="305"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="456"/>
<source>Expand Content Area</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="327"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="478"/>
<source>Press %1 To Exit Full Screen</source>
<translation>%1退</translation>
</message>
@ -1833,88 +1838,86 @@ Remove them from the configuration?</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="335"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="486"/>
<source>Stay on Top</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="347"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="498"/>
<source>Windows</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="540"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="316"/>
<source>Open User Configuration Folder</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="547"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="323"/>
<source>Open Default Configuration Folder</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="400"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="551"/>
<source>Reset Main Window Layout</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="408"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="559"/>
<source>Restart</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="426"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="622"/>
<source>Help</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="436"/>
<source>What&apos;s This?</source>
<translation></translation>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="441"/>
<source>Enter WhatsThis mode and click somewhere to show help information</source>
<translation> WhatsThis </translation>
<translation type="vanished">WhatsThis模式</translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="445"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="600"/>
<source>Shortcuts Help</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="456"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="611"/>
<source>Markdown Guide</source>
<translation>Markdown指南</translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="469"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="586"/>
<source>View Logs</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="482"/>
<source>%1 Home Page</source>
<translation>%1 </translation>
<location filename="../../../widgets/toolbarhelper.cpp" line="624"/>
<source>Home Page</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="488"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="630"/>
<source>Feedback and Discussions</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="496"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="638"/>
<source>Check for Updates</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="509"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="515"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="651"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="657"/>
<source>About</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="512"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="654"/>
<source>&lt;h3&gt;%1&lt;/h3&gt;
&lt;span&gt;%2&lt;/span&gt;
</source>
@ -1923,7 +1926,7 @@ Remove them from the configuration?</source>
</translation>
</message>
<message>
<location filename="../../../widgets/toolbarhelper.cpp" line="518"/>
<location filename="../../../widgets/toolbarhelper.cpp" line="660"/>
<source>About Qt</source>
<translation>Qt</translation>
</message>
@ -2528,66 +2531,66 @@ Remove them from the configuration?</source>
<context>
<name>vnotex::MarkdownViewWindow</name>
<message>
<location filename="../../../widgets/markdownviewwindow.cpp" line="445"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="447"/>
<source>Markdown Viewer</source>
<translation>Markdown查看器</translation>
</message>
<message>
<location filename="../../../widgets/markdownviewwindow.cpp" line="793"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="825"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="795"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="827"/>
<source>Clear Obsolete Images</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/markdownviewwindow.cpp" line="794"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="796"/>
<source>These images seems to be not in use anymore. Please confirm the deletion of them.</source>
<translation>使</translation>
</message>
<message>
<location filename="../../../widgets/markdownviewwindow.cpp" line="795"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="797"/>
<source>Deleted local images could be found in the recycle bin of notebook if it is from a bundle notebook.</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/markdownviewwindow.cpp" line="819"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="821"/>
<source>Clearing obsolete images...</source>
<translation>...</translation>
</message>
<message>
<location filename="../../../widgets/markdownviewwindow.cpp" line="820"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="822"/>
<source>Abort</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/markdownviewwindow.cpp" line="834"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="836"/>
<source>Clear image (%1)</source>
<translation>(%1)</translation>
</message>
<message numerus="yes">
<location filename="../../../widgets/markdownviewwindow.cpp" line="846"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="848"/>
<source>Cleared %n obsolete images</source>
<translation>
<numerusform> %n </numerusform>
</translation>
</message>
<message>
<location filename="../../../widgets/markdownviewwindow.cpp" line="1259"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="1261"/>
<source>View Mode Not Supported In Read Mode</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/markdownviewwindow.cpp" line="1277"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="1279"/>
<source>Edit Only</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/markdownviewwindow.cpp" line="1288"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="1290"/>
<source>Edit with Preview</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/markdownviewwindow.cpp" line="1001"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="1010"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="1003"/>
<location filename="../../../widgets/markdownviewwindow.cpp" line="1012"/>
<source>Replace is not supported in read mode</source>
<translation></translation>
</message>
@ -4742,9 +4745,13 @@ Description: %3</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/viewsplit.cpp" line="151"/>
<source>Workspaces and Splits</source>
<translation></translation>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../../../widgets/viewsplit.cpp" line="151"/>
<source>Menu</source>
<translation></translation>
</message>
<message>
<location filename="../../../widgets/viewsplit.cpp" line="413"/>

View File

@ -61,7 +61,7 @@
"MoveOneSplitRight" : "Ctrl+G, Shift+L",
"OpenLastClosedFile" : "Ctrl+Shift+T"
},
"toolbar_icon_size" : 16,
"toolbar_icon_size" : 18,
"docks_tabbar_icon_size" : 24,
"note_management" : {
"external_node" : {
@ -120,7 +120,8 @@
"FindPrevious" : "Shift+F3",
"ApplySnippet" : "Ctrl+G, I",
"Tag" : "Ctrl+G, B",
"Debug" : "F12"
"Debug" : "F12",
"Print" : ""
},
"spell_check_auto_detect_language" : false,
"spell_check_default_dictionary" : "en_US",

View File

@ -2,10 +2,10 @@
1. All the keys without special notice are **case insensitive**;
2. On macOS, `Ctrl` corresponds to `Command` except in Vi mode;
3. The key sequence `Ctrl+G, I` means that first press both `Ctrl` and `G` simultaneously, release them, then press `I` and release;
4. For a **complete latest shortcuts list**, please view the `vnotex.json` configuration file.
4. For a **complete latest shortcuts list** or modifying default shortcuts, please view the `vnotex.json` configuration file.
## General
- `Ctrl+G E`
- `Ctrl+G, E`
Toggle expanding the content area.
- `Ctrl+Alt+N`
Create a note in current folder.
@ -23,11 +23,11 @@ Recover last closed file.
Open Flash Page.
- `Ctrl+Alt+I`
Open Quick Access.
- `Ctrl+G X`
- `Ctrl+G, X`
Close current tab.
- `Ctrl+G D`
- `Ctrl+G, D`
Locate to the folder of current note.
- `Ctrl+G O`
- `Ctrl+G, O`
Open the Outline popup.
## Text Editor
@ -89,7 +89,7 @@ Shares the same shortcuts with Text Editor.
- `Ctrl+T`
Edit current note or save changes and exit edit mode.
- `Ctrl+G Q`
- `Ctrl+G, Q`
Discard current changes and exit edit mode.
#### Text Editing
@ -117,4 +117,4 @@ Increase or decrease the indentation. If any text is selected, the indentation w
Insert two spaces followed by a new line, namely a soft linebreak in Markdown.
## Navigation Mode
`Ctrl+G W` will turn VNote into **Navigation Mode**. In this mode, VNote will display at most two characters on some major widgets, and then pressing corresponding characters will jump to that widget.
`Ctrl+G, W` will turn VNote into **Navigation Mode**. In this mode, VNote will display at most two characters on some major widgets, and then pressing corresponding characters will jump to that widget.

View File

@ -22,9 +22,9 @@ VNote 支持通过在节点浏览器上下文菜单中的 `打开方式` 来调
一个外部程序可以包含3个属性
1. `name`: 该程序在 VNote 中的名字;
2. `command`: 当使用该外部程序打开笔记时执行的命令;
1. `name`该程序在VNote中的名字;
2. `command`当使用该外部程序打开笔记时执行的命令;
1. 使用`%1`占位符,会被替换为真实的文件路径(自动加上双引号包裹)
3. `shortcut`: 分配给该外部程序的快捷键;
3. `shortcut`分配给该外部程序的快捷键;
修改配置前请**关闭VNote**。

View File

@ -1,7 +1,7 @@
<p>VNote中一些不容错过的特性</p>
<h3 id="markdown-">Markdown编辑器</h3>
<ul>
<li>上下文菜单中的 <strong>解析为 Markdown 并粘贴</strong>: 解析富文本为 Markdown 文本,并按需获取图片到本地。</li>
<li>上下文菜单中的<strong>解析为Markdown并粘贴</strong>解析富文本为Markdown文本,并按需获取图片到本地。</li>
<li>上下文菜单中的<strong>多功能粘贴</strong>:粘贴为图片、附件或者连接。</li>
<li>上下文菜单中的<strong>交叉复制</strong>:将所选文本复制为富文本。</li>
</ul>

View File

@ -247,4 +247,4 @@ alert-dark
一般来说,您应该在一个块元素(例如代码块、列表和块引用)后面插入一个空行来显式结束该元素。
[^1]: 该指南参考了 [Mastering Markdown](https://guides.github.com/features/mastering-markdown/).
[^1]: 该指南参考了[Mastering Markdown](https://guides.github.com/features/mastering-markdown/)

View File

@ -2,10 +2,10 @@
1. 以下按键除特别说明外,都不区分大小写;
2. 在macOS下`Ctrl`对应于`Command`在Vi模式下除外
3. 按键序列`Ctrl+G, I`表示先同时按下`Ctrl``G`,释放,然后按下`I`并释放;
4. 可以通过查看配置文件 `vnotex.json` 来获取一个**完整的最新的快捷键列表**。
4. 可以通过查看配置文件`vnotex.json`来获取一个**完整的最新的快捷键列表**或者修改默认快捷键
## 通用
- `Ctrl+G E`
- `Ctrl+G, E`
是否扩展内容区。
- `Ctrl+Alt+N`
在当前文件夹下新建笔记。
@ -15,7 +15,7 @@
高级查找。
- `Ctrl+J`/`Ctrl+K`
VNote的很多部件均支持`Ctrl+J``Ctrl+K`导航。
- `Ctrl+Left Mouse`
- `Ctrl+Left, Mouse`
任意滚动。
- `Ctrl+Shift+T`
恢复上一个关闭的文件。
@ -23,11 +23,11 @@ VNote 的很多部件均支持`Ctrl+J`和`Ctrl+K`导航。
打开灵犀页。
- `Ctrl+Alt+I`
打开快速访问。
- `Ctrl+G X`
- `Ctrl+G, X`
关闭当前标签页。
- `Ctrl+G D`
- `Ctrl+G, D`
定位到当前笔记所在文件夹。
- `Ctrl+G O`
- `Ctrl+G, O`
打开大纲弹出窗口。
## 文本编辑器
@ -45,7 +45,7 @@ VNote 的很多部件均支持`Ctrl+J`和`Ctrl+K`导航。
取消补全。
- `Enter`
插入补全。
- `Ctrl+[` or `Escape`
- `Ctrl+[`或者`Escape`
结束补全。
### 文本编辑
@ -78,7 +78,7 @@ VNote 的很多部件均支持`Ctrl+J`和`Ctrl+K`导航。
恢复页面大小为100%。
- 标题跳转
- `<N>[[`:跳转到上`N`个标题;
- `<N>]]`: 跳转到下`N`个标题;
- `<N>]]`跳转到下`N`个标题;
- `<N>[]`:跳转到上`N`个同层级的标题;
- `<N>][`:跳转到下`N`个同层级的标题;
- `<N>[{`:跳转到上`N`个高一层级的标题;
@ -89,7 +89,7 @@ VNote 的很多部件均支持`Ctrl+J`和`Ctrl+K`导航。
- `Ctrl+T`
编辑当前笔记或者保存更改并退出编辑模式。
- `Ctrl+G Q`
- `Ctrl+G, Q`
放弃当前更改并退出编辑模式。
#### 文本编辑
@ -117,4 +117,4 @@ VNote 的很多部件均支持`Ctrl+J`和`Ctrl+K`导航。
插入两个空格然后换行在Markdown中类似于软换行的概念。
## 展览模式
`Ctrl+G W` 会使 VNote 进入**展览模式** 。该模式中VNote会在一些主要部件中显示最多两个字母按下这些字母可以跳转到对应的部件。
`Ctrl+G, W`会使VNote进入**展览模式**。该模式中VNote会在一些主要部件中显示最多两个字母按下这些字母可以跳转到对应的部件。

View File

@ -117,7 +117,7 @@ QString Exporter::doExport(const ExportOption &p_option, Node *p_note)
// Make sure output folder exists.
if (!QDir().mkpath(p_option.m_outputDir)) {
emit logRequested(tr("Failed to create output folder %1.").arg(p_option.m_outputDir));
emit logRequested(tr("Failed to create output folder (%1).").arg(p_option.m_outputDir));
return outputFile;
}

22
src/utils/printutils.cpp Normal file
View File

@ -0,0 +1,22 @@
#include "printutils.h"
#include <QPrinter>
#include <QPrintDialog>
using namespace vnotex;
QSharedPointer<QPrinter> PrintUtils::promptForPrint(bool p_printSelectionEnabled, QWidget *p_parent)
{
auto printer = QSharedPointer<QPrinter>::create();
QPrintDialog dialog(printer.data(), p_parent);
if (p_printSelectionEnabled) {
dialog.addEnabledOption(QAbstractPrintDialog::PrintSelection);
}
if (dialog.exec() == QDialog::Accepted) {
return printer;
}
return nullptr;
}

21
src/utils/printutils.h Normal file
View File

@ -0,0 +1,21 @@
#ifndef PRINTUTILS_H
#define PRINTUTILS_H
#include <QSharedPointer>
class QPrinter;
class QWidget;
namespace vnotex
{
class PrintUtils
{
public:
PrintUtils() = delete;
// Return null if user cancel the print.
static QSharedPointer<QPrinter> promptForPrint(bool p_printSelectionEnabled, QWidget *p_parent);
};
}
#endif // PRINTUTILS_H

View File

@ -6,6 +6,7 @@ SOURCES += \
$$PWD/htmlutils.cpp \
$$PWD/imageutils.cpp \
$$PWD/pathutils.cpp \
$$PWD/printutils.cpp \
$$PWD/processutils.cpp \
$$PWD/urldragdroputils.cpp \
$$PWD/utils.cpp \
@ -21,6 +22,7 @@ HEADERS += \
$$PWD/htmlutils.h \
$$PWD/imageutils.h \
$$PWD/pathutils.h \
$$PWD/printutils.h \
$$PWD/processutils.h \
$$PWD/urldragdroputils.h \
$$PWD/utils.h \

View File

@ -100,7 +100,7 @@ bool ImportNotebookDialog::validateRootFolderInput(QString &p_msg)
auto backend = notebookMgr.createNotebookBackend(backendName, rootFolderPath);
if (!factory->checkRootFolder(backend)) {
Utils::appendMsg(p_msg,
tr("Not a valid %1 root folder (%2).").arg(factory->getDisplayName(), rootFolderPath));
tr("Not a valid (%1) root folder (%2).").arg(factory->getDisplayName(), rootFolderPath));
return false;
}

View File

@ -4,6 +4,7 @@
#include <QVBoxLayout>
#include <QStackedLayout>
#include <QScrollArea>
#include <QScrollBar>
#include <widgets/treewidget.h>
#include <widgets/lineedit.h>
@ -78,6 +79,10 @@ void SettingsDialog::setupPageExplorer(QBoxLayout *p_layout, QWidget *p_parent)
Q_UNUSED(p_previous);
auto page = itemPage(p_item);
m_pageLayout->setCurrentWidget(page);
auto vsb = m_scrollArea->verticalScrollBar();
if (vsb) {
vsb->setValue(0);
}
});
p_layout->addLayout(layout, 2);

View File

@ -12,6 +12,7 @@
#include <QMenu>
#include <QActionGroup>
#include <QTimer>
#include <QPrinter>
#include <core/fileopenparameters.h>
#include <core/editorconfig.h>
@ -21,6 +22,7 @@
#include <vtextedit/markdowneditorconfig.h>
#include <utils/pathutils.h>
#include <utils/widgetutils.h>
#include <utils/printutils.h>
#include <buffer/markdownbuffer.h>
#include <core/vnotex.h>
#include <core/thememgr.h>
@ -318,8 +320,10 @@ void MarkdownViewWindow::setupToolBar()
addAction(toolBar, ViewWindowToolBarHelper::TypeTable);
ToolBarHelper::addSpacer(toolBar);
addAction(toolBar, ViewWindowToolBarHelper::FindAndReplace);
addAction(toolBar, ViewWindowToolBarHelper::Outline);
addAction(toolBar, ViewWindowToolBarHelper::FindAndReplace);
addAction(toolBar, ViewWindowToolBarHelper::Print);
{
auto act = addAction(toolBar, ViewWindowToolBarHelper::Debug);
@ -1374,3 +1378,18 @@ void MarkdownViewWindow::syncEditorPositionToPreview()
adapter()->scrollToPosition(MarkdownViewerAdapter::Position(m_editor->getTopLine(), QString()));
}
void MarkdownViewWindow::print()
{
if (!m_viewer || !m_viewerReady) {
return;
}
auto printer = PrintUtils::promptForPrint(m_viewer->hasSelection(), this);
if (printer) {
m_viewer->page()->print(printer.data(), [printer](bool p_succeeded) mutable {
Q_UNUSED(p_succeeded);
printer.reset();
});
}
}

View File

@ -82,6 +82,8 @@ namespace vnotex
void toggleDebug() Q_DECL_OVERRIDE;
void print() Q_DECL_OVERRIDE;
protected:
void syncEditorFromBuffer() Q_DECL_OVERRIDE;

View File

@ -4,6 +4,7 @@
#include <QDebug>
#include <QScrollBar>
#include <QToolBar>
#include <QPrinter>
#include <vtextedit/vtextedit.h>
#include <core/editorconfig.h>
@ -15,6 +16,7 @@
#include <core/thememgr.h>
#include "editors/statuswidget.h"
#include <core/fileopenparameters.h>
#include <utils/printutils.h>
using namespace vnotex;
@ -67,11 +69,12 @@ void TextViewWindow::setupToolBar()
toolBar->addSeparator();
addAction(toolBar, ViewWindowToolBarHelper::Attachment);
addAction(toolBar, ViewWindowToolBarHelper::Tag);
ToolBarHelper::addSpacer(toolBar);
addAction(toolBar, ViewWindowToolBarHelper::FindAndReplace);
addAction(toolBar, ViewWindowToolBarHelper::Print);
}
void TextViewWindow::handleBufferChangedInternal(const QSharedPointer<FileOpenParameters> &p_paras)
@ -298,3 +301,11 @@ QString TextViewWindow::selectedText() const
Q_ASSERT(m_editor);
return m_editor->getTextEdit()->selectedText();
}
void TextViewWindow::print()
{
auto printer = PrintUtils::promptForPrint(m_editor->getTextEdit()->hasSelection(), this);
if (printer) {
m_editor->getTextEdit()->print(printer.data());
}
}

View File

@ -53,6 +53,8 @@ namespace vnotex
void handleFindAndReplaceWidgetClosed() Q_DECL_OVERRIDE;
void print() Q_DECL_OVERRIDE;
protected:
void syncEditorFromBuffer() Q_DECL_OVERRIDE;

View File

@ -289,237 +289,13 @@ QToolBar *ToolBarHelper::setupSettingsToolBar(MainWindow *p_win, QToolBar *p_too
tb = createToolBar(p_win, MainWindow::tr("Settings"), "SettingsToolBar");
}
// Spacer.
addSpacer(tb);
// Expand.
{
const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();
setupExpandButton(p_win, tb);
auto btn = WidgetsFactory::createToolButton(tb);
setupSettingsButton(p_win, tb);
auto menu = WidgetsFactory::createMenu(tb);
btn->setMenu(menu);
auto expandAct = menu->addAction(generateIcon("expand.svg"),
MainWindow::tr("Expand Content Area"));
WidgetUtils::addActionShortcut(expandAct,
coreConfig.getShortcut(CoreConfig::Shortcut::ExpandContentArea));
expandAct->setCheckable(true);
MainWindow::connect(expandAct, &QAction::triggered,
p_win, &MainWindow::setContentAreaExpanded);
MainWindow::connect(p_win, &MainWindow::layoutChanged,
[expandAct, p_win]() {
expandAct->setChecked(p_win->isContentAreaExpanded());
});
btn->setDefaultAction(expandAct);
{
auto fullScreenAct = new FullScreenToggleAction(p_win,
generateIcon("fullscreen.svg"),
menu);
const auto shortcut = coreConfig.getShortcut(CoreConfig::Shortcut::FullScreen);
WidgetUtils::addActionShortcut(fullScreenAct, shortcut);
MainWindow::connect(fullScreenAct, &FullScreenToggleAction::fullScreenToggled,
p_win, [shortcut](bool p_fullScreen) {
if (p_fullScreen) {
VNoteX::getInst().showTips(
MainWindow::tr("Press %1 To Exit Full Screen").arg(shortcut));
} else {
VNoteX::getInst().showTips("");
}
});
menu->addAction(fullScreenAct);
}
auto stayOnTopAct = menu->addAction(generateIcon("stay_on_top.svg"), MainWindow::tr("Stay on Top"),
p_win, &MainWindow::setStayOnTop);
stayOnTopAct->setCheckable(true);
WidgetUtils::addActionShortcut(stayOnTopAct,
coreConfig.getShortcut(CoreConfig::Shortcut::StayOnTop));
menu->addSeparator();
{
// Windows.
// MainWindow will clear the title of the dock widget for the tab bar, so we need to use
// another action to wrap the no-text action.
auto subMenu = menu->addMenu(MainWindow::tr("Windows"));
for (auto dock : p_win->getDocks()) {
// @act is owned by the QDockWidget.
auto act = dock->toggleViewAction();
auto actWrapper = subMenu->addAction(act->text());
actWrapper->setCheckable(act->isCheckable());
actWrapper->setChecked(act->isChecked());
MainWindow::connect(act, &QAction::toggled,
actWrapper, [actWrapper](bool checked) {
if (actWrapper->isChecked() != checked) {
actWrapper->setChecked(checked);
}
});
MainWindow::connect(actWrapper, &QAction::triggered,
act, [p_win, act]() {
act->trigger();
p_win->updateDockWidgetTabBar();
});
}
}
tb->addWidget(btn);
}
// Settings.
{
const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();
auto act = tb->addAction(generateIcon("settings_menu.svg"), MainWindow::tr("Settings"));
auto btn = dynamic_cast<QToolButton *>(tb->widgetForAction(act));
Q_ASSERT(btn);
btn->setPopupMode(QToolButton::InstantPopup);
btn->setProperty(PropertyDefs::c_toolButtonWithoutMenuIndicator, true);
auto menu = WidgetsFactory::createMenu(tb);
btn->setMenu(menu);
auto settingsAct = menu->addAction(generateIcon("settings.svg"),
MainWindow::tr("Settings"),
menu,
[p_win]() {
SettingsDialog dialog(p_win);
dialog.exec();
});
WidgetUtils::addActionShortcut(settingsAct,
coreConfig.getShortcut(CoreConfig::Shortcut::Settings));
menu->addSeparator();
setupConfigurationMenu(menu);
menu->addSeparator();
menu->addAction(MainWindow::tr("Reset Main Window Layout"),
menu,
[p_win]() {
p_win->resetStateAndGeometry();
});
menu->addSeparator();
menu->addAction(MainWindow::tr("Restart"),
menu,
[p_win]() {
p_win->restart();
});
auto quitAct = menu->addAction(MainWindow::tr("Quit"),
menu,
[p_win]() {
p_win->quitApp();
});
quitAct->setMenuRole(QAction::QuitRole);
WidgetUtils::addActionShortcut(quitAct,
coreConfig.getShortcut(CoreConfig::Shortcut::Quit));
}
// Help.
{
auto act = tb->addAction(generateIcon("help_menu.svg"), MainWindow::tr("Help"));
auto btn = dynamic_cast<QToolButton *>(tb->widgetForAction(act));
Q_ASSERT(btn);
btn->setPopupMode(QToolButton::InstantPopup);
btn->setProperty(PropertyDefs::c_toolButtonWithoutMenuIndicator, true);
auto menu = WidgetsFactory::createMenu(tb);
btn->setMenu(menu);
auto whatsThisAct = menu->addAction(generateIcon("whatsthis.svg"),
MainWindow::tr("What's This?"),
menu,
[]() {
QWhatsThis::enterWhatsThisMode();
});
whatsThisAct->setToolTip(MainWindow::tr("Enter WhatsThis mode and click somewhere to show help information"));
menu->addSeparator();
menu->addAction(MainWindow::tr("Shortcuts Help"),
menu,
[]() {
const auto file = DocsUtils::getDocFile(QStringLiteral("shortcuts.md"));
if (!file.isEmpty()) {
auto paras = QSharedPointer<FileOpenParameters>::create();
paras->m_readOnly = true;
emit VNoteX::getInst().openFileRequested(file, paras);
}
});
menu->addAction(MainWindow::tr("Markdown Guide"),
menu,
[]() {
const auto file = DocsUtils::getDocFile(QStringLiteral("markdown_guide.md"));
if (!file.isEmpty()) {
auto paras = QSharedPointer<FileOpenParameters>::create();
paras->m_readOnly = true;
emit VNoteX::getInst().openFileRequested(file, paras);
}
});
menu->addSeparator();
menu->addAction(MainWindow::tr("View Logs"),
menu,
[]() {
const auto file = ConfigMgr::getInst().getLogFile();
if (QFileInfo::exists(file)) {
auto paras = QSharedPointer<FileOpenParameters>::create();
paras->m_readOnly = true;
emit VNoteX::getInst().openFileRequested(file, paras);
}
});
menu->addSeparator();
menu->addAction(MainWindow::tr("%1 Home Page").arg(qApp->applicationDisplayName()),
menu,
[]() {
WidgetUtils::openUrlByDesktop(QUrl("https://vnotex.github.io/vnote"));
});
menu->addAction(MainWindow::tr("Feedback and Discussions"),
menu,
[]() {
WidgetUtils::openUrlByDesktop(QUrl("https://github.com/vnotex/vnote/discussions"));
});
menu->addSeparator();
menu->addAction(MainWindow::tr("Check for Updates"),
menu,
[p_win]() {
Updater updater(p_win);
updater.exec();
});
menu->addAction(MainWindow::tr("Contributors"),
menu,
[]() {
WidgetUtils::openUrlByDesktop(QUrl("https://github.com/vnotex/vnote/graphs/contributors"));
});
menu->addAction(MainWindow::tr("About"),
menu,
[p_win]() {
auto info = MainWindow::tr("<h3>%1</h3>\n<span>%2</span>\n").arg(qApp->applicationDisplayName(),
qApp->applicationVersion());
const auto text = DocsUtils::getDocText(QStringLiteral("about_vnotex.txt"));
QMessageBox::about(p_win, MainWindow::tr("About"), info + text);
});
auto aboutQtAct = menu->addAction(MainWindow::tr("About Qt"));
aboutQtAct->setMenuRole(QAction::AboutQtRole);
MainWindow::connect(aboutQtAct, &QAction::triggered,
qApp, &QApplication::aboutQt);
}
setupMenuButton(p_win, tb);
return tb;
}
@ -666,3 +442,226 @@ void ToolBarHelper::updateQuickAccessMenu(QMenu *p_menu)
p_menu->addAction(act);
}
}
void ToolBarHelper::setupExpandButton(MainWindow *p_win, QToolBar *p_toolBar)
{
const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();
auto btn = WidgetsFactory::createToolButton(p_toolBar);
auto menu = WidgetsFactory::createMenu(p_toolBar);
btn->setMenu(menu);
auto expandAct = menu->addAction(generateIcon("expand.svg"),
MainWindow::tr("Expand Content Area"));
WidgetUtils::addActionShortcut(expandAct,
coreConfig.getShortcut(CoreConfig::Shortcut::ExpandContentArea));
expandAct->setCheckable(true);
MainWindow::connect(expandAct, &QAction::triggered,
p_win, &MainWindow::setContentAreaExpanded);
MainWindow::connect(p_win, &MainWindow::layoutChanged,
[expandAct, p_win]() {
expandAct->setChecked(p_win->isContentAreaExpanded());
});
btn->setDefaultAction(expandAct);
{
auto fullScreenAct = new FullScreenToggleAction(p_win,
generateIcon("fullscreen.svg"),
menu);
const auto shortcut = coreConfig.getShortcut(CoreConfig::Shortcut::FullScreen);
WidgetUtils::addActionShortcut(fullScreenAct, shortcut);
MainWindow::connect(fullScreenAct, &FullScreenToggleAction::fullScreenToggled,
p_win, [shortcut](bool p_fullScreen) {
if (p_fullScreen) {
VNoteX::getInst().showTips(
MainWindow::tr("Press %1 To Exit Full Screen").arg(shortcut));
} else {
VNoteX::getInst().showTips("");
}
});
menu->addAction(fullScreenAct);
}
auto stayOnTopAct = menu->addAction(generateIcon("stay_on_top.svg"), MainWindow::tr("Stay on Top"),
p_win, &MainWindow::setStayOnTop);
stayOnTopAct->setCheckable(true);
WidgetUtils::addActionShortcut(stayOnTopAct,
coreConfig.getShortcut(CoreConfig::Shortcut::StayOnTop));
menu->addSeparator();
{
// Windows.
// MainWindow will clear the title of the dock widget for the tab bar, so we need to use
// another action to wrap the no-text action.
auto subMenu = menu->addMenu(MainWindow::tr("Windows"));
for (auto dock : p_win->getDocks()) {
// @act is owned by the QDockWidget.
auto act = dock->toggleViewAction();
auto actWrapper = subMenu->addAction(act->text());
actWrapper->setCheckable(act->isCheckable());
actWrapper->setChecked(act->isChecked());
MainWindow::connect(act, &QAction::toggled,
actWrapper, [actWrapper](bool checked) {
if (actWrapper->isChecked() != checked) {
actWrapper->setChecked(checked);
}
});
MainWindow::connect(actWrapper, &QAction::triggered,
act, [p_win, act]() {
act->trigger();
p_win->updateDockWidgetTabBar();
});
}
}
p_toolBar->addWidget(btn);
}
void ToolBarHelper::setupSettingsButton(MainWindow *p_win, QToolBar *p_toolBar)
{
const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();
auto act = p_toolBar->addAction(generateIcon("settings_menu.svg"), MainWindow::tr("Settings"));
auto btn = dynamic_cast<QToolButton *>(p_toolBar->widgetForAction(act));
Q_ASSERT(btn);
btn->setPopupMode(QToolButton::InstantPopup);
btn->setProperty(PropertyDefs::c_toolButtonWithoutMenuIndicator, true);
auto menu = WidgetsFactory::createMenu(p_toolBar);
btn->setMenu(menu);
auto settingsAct = menu->addAction(MainWindow::tr("Settings"),
menu,
[p_win]() {
SettingsDialog dialog(p_win);
dialog.exec();
});
WidgetUtils::addActionShortcut(settingsAct,
coreConfig.getShortcut(CoreConfig::Shortcut::Settings));
menu->addSeparator();
setupConfigurationMenu(menu);
menu->addSeparator();
menu->addAction(MainWindow::tr("Reset Main Window Layout"),
menu,
[p_win]() {
p_win->resetStateAndGeometry();
});
menu->addSeparator();
menu->addAction(MainWindow::tr("Restart"),
menu,
[p_win]() {
p_win->restart();
});
auto quitAct = menu->addAction(MainWindow::tr("Quit"),
menu,
[p_win]() {
p_win->quitApp();
});
quitAct->setMenuRole(QAction::QuitRole);
WidgetUtils::addActionShortcut(quitAct,
coreConfig.getShortcut(CoreConfig::Shortcut::Quit));
}
void ToolBarHelper::setupMenuButton(MainWindow *p_win, QToolBar *p_toolBar)
{
auto act = p_toolBar->addAction(generateIcon("menu.svg"), MainWindow::tr("Menu"));
auto btn = dynamic_cast<QToolButton *>(p_toolBar->widgetForAction(act));
Q_ASSERT(btn);
btn->setPopupMode(QToolButton::InstantPopup);
btn->setProperty(PropertyDefs::c_toolButtonWithoutMenuIndicator, true);
auto menu = WidgetsFactory::createMenu(p_toolBar);
btn->setMenu(menu);
menu->addAction(MainWindow::tr("View Logs"),
menu,
[]() {
const auto file = ConfigMgr::getInst().getLogFile();
if (QFileInfo::exists(file)) {
auto paras = QSharedPointer<FileOpenParameters>::create();
paras->m_readOnly = true;
paras->m_sessionEnabled = false;
emit VNoteX::getInst().openFileRequested(file, paras);
}
});
{
menu->addSeparator();
menu->addAction(MainWindow::tr("Shortcuts Help"),
menu,
[]() {
const auto file = DocsUtils::getDocFile(QStringLiteral("shortcuts.md"));
if (!file.isEmpty()) {
auto paras = QSharedPointer<FileOpenParameters>::create();
paras->m_readOnly = true;
paras->m_sessionEnabled = false;
emit VNoteX::getInst().openFileRequested(file, paras);
}
});
menu->addAction(MainWindow::tr("Markdown Guide"),
menu,
[]() {
const auto file = DocsUtils::getDocFile(QStringLiteral("markdown_guide.md"));
if (!file.isEmpty()) {
auto paras = QSharedPointer<FileOpenParameters>::create();
paras->m_readOnly = true;
paras->m_sessionEnabled = false;
emit VNoteX::getInst().openFileRequested(file, paras);
}
});
auto helpMenu = menu->addMenu(MainWindow::tr("Help"));
helpMenu->addAction(MainWindow::tr("Home Page"),
helpMenu,
[]() {
WidgetUtils::openUrlByDesktop(QUrl("https://vnotex.github.io/vnote"));
});
helpMenu->addAction(MainWindow::tr("Feedback and Discussions"),
helpMenu,
[]() {
WidgetUtils::openUrlByDesktop(QUrl("https://github.com/vnotex/vnote/discussions"));
});
helpMenu->addSeparator();
helpMenu->addAction(MainWindow::tr("Check for Updates"),
helpMenu,
[p_win]() {
Updater updater(p_win);
updater.exec();
});
helpMenu->addAction(MainWindow::tr("Contributors"),
helpMenu,
[]() {
WidgetUtils::openUrlByDesktop(QUrl("https://github.com/vnotex/vnote/graphs/contributors"));
});
helpMenu->addAction(MainWindow::tr("About"),
helpMenu,
[p_win]() {
auto info = MainWindow::tr("<h3>%1</h3>\n<span>%2</span>\n").arg(qApp->applicationDisplayName(),
qApp->applicationVersion());
const auto text = DocsUtils::getDocText(QStringLiteral("about_vnotex.txt"));
QMessageBox::about(p_win, MainWindow::tr("About"), info + text);
});
auto aboutQtAct = helpMenu->addAction(MainWindow::tr("About Qt"));
aboutQtAct->setMenuRole(QAction::AboutQtRole);
MainWindow::connect(aboutQtAct, &QAction::triggered,
qApp, &QApplication::aboutQt);
}
}

View File

@ -38,6 +38,12 @@ namespace vnotex
static void updateQuickAccessMenu(QMenu *p_menu);
static void setupConfigurationMenu(QMenu *p_menu);
static void setupExpandButton(MainWindow *p_win, QToolBar *p_toolBar);
static void setupSettingsButton(MainWindow *p_win, QToolBar *p_toolBar);
static void setupMenuButton(MainWindow *p_win, QToolBar *p_toolBar);
};
} // ns vnotex

View File

@ -148,7 +148,7 @@ void ViewSplit::setupCornerWidget()
m_menuButton->setPopupMode(QToolButton::InstantPopup);
m_menuButton->setProperty(PropertyDefs::c_actionToolButton, true);
auto act = new QAction(s_menuIcon, tr("Workspaces and Splits"), m_menuButton);
auto act = new QAction(s_menuIcon, tr("Menu"), m_menuButton);
m_menuButton->setDefaultAction(act);
auto menu = WidgetsFactory::createMenu(m_menuButton);

View File

@ -536,6 +536,14 @@ QAction *ViewWindow::addAction(QToolBar *p_toolBar, ViewWindowToolBarHelper::Act
break;
}
case ViewWindowToolBarHelper::Print:
{
act = ViewWindowToolBarHelper::addAction(p_toolBar, p_action);
connect(act, &QAction::triggered,
this, &ViewWindow::print);
break;
}
default:
Q_ASSERT(false);
break;
@ -1318,7 +1326,7 @@ bool ViewWindow::isSessionEnabled() const
void ViewWindow::toggleDebug()
{
qDebug() << "debug is not supported";
qWarning() << "debug is not supported";
}
void ViewWindow::updateViewModeMenu(QMenu *p_menu)
@ -1328,3 +1336,8 @@ void ViewWindow::updateViewModeMenu(QMenu *p_menu)
auto act = p_menu->addAction(tr("View Mode Not Supported"));
act->setEnabled(false);
}
void ViewWindow::print()
{
qWarning() << "print is not supported";
}

View File

@ -178,6 +178,8 @@ namespace vnotex
virtual void toggleDebug();
virtual void print();
protected:
bool eventFilter(QObject *p_obj, QEvent *p_event) Q_DECL_OVERRIDE;

View File

@ -412,6 +412,13 @@ QAction *ViewWindowToolBarHelper::addAction(QToolBar *p_tb, Action p_action)
break;
}
case Action::Print:
{
act = p_tb->addAction(ToolBarHelper::generateIcon("print_editor.svg"), ViewWindow::tr("Print"));
addActionShortcut(act, editorConfig.getShortcut(Shortcut::Print), viewWindow);
break;
}
default:
Q_ASSERT(false);
break;

View File

@ -48,7 +48,8 @@ namespace vnotex
SectionNumber,
InplacePreview,
ImageHost,
Debug
Debug,
Print
};
static QAction *addAction(QToolBar *p_tb, Action p_action);

View File

@ -83,6 +83,20 @@ void TestNotebookDatabase::testNode()
QScopedPointer<DummyNode> node6(new DummyNode(Node::Flag::Content, 5, "cab", m_notebook.data(), node4.data()));
addAndQueryNode(node6.data(), false);
// Node 7/8, with non-exist parent.
QScopedPointer<DummyNode> node7(new DummyNode(Node::Flag::Content, 55, "caba", m_notebook.data(), node6.data()));
QScopedPointer<DummyNode> node8(new DummyNode(Node::Flag::Content, 555, "cabaa", m_notebook.data(), node7.data()));
{
bool ret = m_dbAccess->addNode(node8.data(), false);
QVERIFY(!ret);
ret = m_dbAccess->addNodeRecursively(node8.data(), false);
queryAndVerifyNode(node7.data());
QVERIFY(m_dbAccess->existsNode(node7.data()));
queryAndVerifyNode(node8.data());
QVERIFY(m_dbAccess->existsNode(node8.data()));
}
// queryNodeParentPath().
{
testQueryNodeParentPath(rootNode.data());