/src/systemtrayicon.cpp

https://github.com/jiangzc/CuteTranslation · C++ · 152 lines · 129 code · 23 blank · 0 comment · 21 complexity · 990d3892d90a08d15e316690088d89cd MD5 · raw file

  1. #include <QApplication>
  2. #include <QDesktopServices>
  3. #include <QUrl>
  4. #include <QDir>
  5. #include <QProcess>
  6. #include <QDebug>
  7. #include "systemtrayicon.h"
  8. #include "shortcut.h"
  9. #include "xdotool.h"
  10. #include "configtool.h"
  11. #include "messagebox.h"
  12. #include "errno.h"
  13. SystemTrayIcon::SystemTrayIcon(QObject *parent):QSystemTrayIcon(parent),
  14. modeSubMenu("取词模式", &menu), helpSubMenu("帮助", &menu), icon(":/pic/icon.png"), icon_grey(":/pic/icon-grey.png")
  15. {
  16. quit_action.setText("退出");
  17. config_action.setText("配置");
  18. help_action.setText("用户手册");
  19. homepage_action.setText("项目主页");
  20. donate_action.setText("捐赠");
  21. autostart_action.setText("开机启动");
  22. change_mode_all_action.setText("全局");
  23. change_mode_custom_action.setText("自定义");
  24. change_mode_none_action.setText("禁用");
  25. search_action.setText("文字翻译 " + configTool->SearchBarShortCutString);
  26. ocr_translate_action.setText("截图翻译 " + configTool->OCRTranslateShortCutString);
  27. ocr_text_action.setText("文字识别 " + configTool->OCRTextShortCutString);
  28. setIcon(icon);
  29. if (configTool->GetMode() == Mode_ALL)
  30. change_mode_all_action.setText("✓ 全局");
  31. else if (configTool->GetMode() == Mode_CUSTOM)
  32. change_mode_custom_action.setText("✓ 自定义");
  33. else if (configTool->GetMode() == Mode_NONE)
  34. {
  35. change_mode_none_action.setText("✓ 禁用");
  36. setIcon(icon_grey);
  37. }
  38. modeSubMenu.addAction(&change_mode_all_action);
  39. modeSubMenu.addAction(&change_mode_custom_action);
  40. modeSubMenu.addAction(&change_mode_none_action);
  41. menu.addMenu(&modeSubMenu);
  42. menu.addAction(&search_action);
  43. menu.addAction(&ocr_translate_action);
  44. menu.addAction(&ocr_text_action);
  45. menu.addAction(&config_action);
  46. menu.addAction(&autostart_action);
  47. helpSubMenu.addAction(&help_action);
  48. helpSubMenu.addAction(&homepage_action);
  49. helpSubMenu.addAction(&donate_action);
  50. menu.addMenu(&helpSubMenu);
  51. menu.addAction(&quit_action);
  52. setContextMenu(&menu);
  53. if (QFile::exists(QDir::homePath() + "/.config/autostart/CuteTranslation.desktop"))
  54. {
  55. autostart_action.setText("✓ 开机启动");
  56. }
  57. connect(&donate_action, &QAction::triggered, this, []{
  58. QDesktopServices::openUrl(QUrl("https://github.com/jiangzc/CuteTranslation#%E6%8D%90%E8%B5%A0"));
  59. MessageBox::information("提示", "已在浏览器中打开网页");
  60. });
  61. connect(&homepage_action, &QAction::triggered, this, []{
  62. QDesktopServices::openUrl(QUrl("https://github.com/jiangzc/CuteTranslation"));
  63. MessageBox::information("提示", "已在浏览器中打开网页");
  64. });
  65. connect(&help_action, &QAction::triggered, this, []{
  66. QProcess::startDetached("xdg-open", QStringList(appDir.filePath("guide.txt")));
  67. });
  68. connect(&autostart_action, &QAction::triggered, this, [this]{
  69. if (QFile::exists(QDir::homePath() + "/.config/autostart/CuteTranslation.desktop") == false)
  70. {
  71. int res = QFile::copy(appDir.filePath("CuteTranslation.desktop"),
  72. QDir::homePath() + "/.config/autostart/CuteTranslation.desktop");
  73. if (res)
  74. {
  75. MessageBox::information("提示", "添加成功");
  76. this->autostart_action.setText("✓ 开机启动");
  77. }
  78. else
  79. {
  80. MessageBox::information("提示", "无法添加 " + QString::number(res));
  81. }
  82. }
  83. else
  84. {
  85. int res = QFile::remove(QDir::homePath() + "/.config/autostart/CuteTranslation.desktop");
  86. if (res)
  87. {
  88. MessageBox::information("提示", "取消成功");
  89. this->autostart_action.setText("开机启动");
  90. }
  91. else
  92. {
  93. MessageBox::information("提示", "无法取消 " + QString::number(res));
  94. }
  95. }
  96. });
  97. connect(&change_mode_all_action, &QAction::triggered, this, []{
  98. configTool->SetMode(Mode_ALL);
  99. });
  100. connect(&change_mode_custom_action, &QAction::triggered, this, []{
  101. configTool->SetMode(Mode_CUSTOM);
  102. });
  103. connect(&change_mode_none_action, &QAction::triggered, this, []{
  104. configTool->SetMode(Mode_NONE);
  105. });
  106. connect(&quit_action, &QAction::triggered, this, []{
  107. xdotool->eventMonitor.terminate();
  108. xdotool->eventMonitor.wait();
  109. qInfo() << "---------- Exit --------------";
  110. qApp->quit();
  111. });
  112. this->show();
  113. }
  114. void SystemTrayIcon::OnModeChanged(ModeSet mode)
  115. {
  116. change_mode_all_action.setText("全局");
  117. change_mode_custom_action.setText("自定义");
  118. change_mode_none_action.setText("禁用");
  119. setIcon(icon);
  120. if (mode == Mode_ALL)
  121. change_mode_all_action.setText("✓ 全局");
  122. else if (mode == Mode_CUSTOM)
  123. change_mode_custom_action.setText("✓ 自定义");
  124. else if (mode == Mode_NONE)
  125. {
  126. change_mode_none_action.setText("✓ 禁用");
  127. setIcon(icon_grey);
  128. }
  129. }