FunctionArea.tsx 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. import React from 'react';
  2. import { Button, Flex, Divider } from 'antd';
  3. import '@/themes/truncateText.css';
  4. import { useDispatch } from 'react-redux';
  5. import { setAction } from '@/states/view/functionAreaSlice';
  6. import { switchToMeasurementPanel, switchToMorePanel, switchToAdvancedProcessingPanel, switchToRectCropPanel, switchToMarkPanel } from '@/states/panelSwitchSliceForView';
  7. import Icon from '@/components/Icon';
  8. import { showNotImplemented } from '@/utils/notificationHelper';
  9. import { useAppSelector } from '@/states/store';
  10. import { useButtonAvailability } from '@/utils/useButtonAvailability';
  11. const FunctionButton = ({
  12. title,
  13. action,
  14. iconName,
  15. }: {
  16. title: string;
  17. action: string;
  18. iconName: string;
  19. }) => {
  20. const dispatch = useDispatch();
  21. const themeType = useAppSelector((state) => state.theme.themeType);
  22. const { disabled } = useButtonAvailability(action);
  23. const handleButtonClick = () => {
  24. if (disabled) {
  25. return;
  26. }
  27. if (action === 'Delete Digital Mask' ||
  28. action === 'Crop Selected Area' ||
  29. ['Delete Mask',
  30. 'Image Comparison', 'Zoom Image', 'Reset Cursor', 'Pan', 'Snapshot',
  31. ].includes(action)
  32. ) {
  33. showNotImplemented('');
  34. return;
  35. }
  36. if (action === 'Image Measurement') {
  37. // 切换到测量面板
  38. dispatch(switchToMeasurementPanel());
  39. } else if (action === 'Rectangle Crop') {
  40. // 切换到矩形裁剪面板
  41. dispatch(switchToRectCropPanel());
  42. } else if (action === 'More') {
  43. // 切换到更多功能面板
  44. dispatch(switchToMorePanel());
  45. } else if (action === 'Advanced Processing') {
  46. // 切换到高级图像处理面板
  47. dispatch(switchToAdvancedProcessingPanel());
  48. } else if (action === 'AddMark') {
  49. // 切换到标记面板
  50. dispatch(switchToMarkPanel());
  51. } else {
  52. // 其他功能按钮保持原有逻辑
  53. dispatch(setAction(action));
  54. }
  55. };
  56. return (
  57. <Button
  58. onClick={handleButtonClick}
  59. disabled={disabled}
  60. icon={
  61. <Icon
  62. module="module-process"
  63. name={iconName}
  64. userId="base"
  65. theme={themeType}
  66. size="2x"
  67. state="normal"
  68. />
  69. }
  70. style={{
  71. width: '1.5rem',
  72. height: '1.5rem',
  73. padding: 0, // 关键
  74. //minWidth: 44, // 保险
  75. //overflow: 'hidden', // 超出的文字裁掉
  76. }}
  77. title={disabled ? `${title} (多分格模式下不可用)` : title}
  78. className="truncate-text"
  79. >
  80. {/* {title} */}
  81. </Button>
  82. );
  83. };
  84. const FunctionArea = () => {
  85. return (
  86. <Flex wrap gap="small" align="center" justify="start" className="p-1">
  87. <FunctionButton title="Add L Mark" action="Add L Mark" iconName="LMark" />
  88. <FunctionButton title="Add R Mark" action="Add R Mark" iconName="RMark" />
  89. <FunctionButton title="Add Mark" action="AddMark" iconName="AddMark" />
  90. <FunctionButton
  91. title="Delete Selected Mark"
  92. action="Delete Selected Mark"
  93. iconName="EraseMark"
  94. />
  95. <FunctionButton
  96. title="Horizontal Flip"
  97. action="Horizontal Flip"
  98. iconName="HReverse"
  99. />
  100. <FunctionButton
  101. title="Vertical Flip"
  102. action="Vertical Flip"
  103. iconName="VReverse"
  104. />
  105. <FunctionButton
  106. title="Rotate Counterclockwise 90°"
  107. action="Rotate Counterclockwise 90"
  108. iconName="RotateL90"
  109. />
  110. <FunctionButton
  111. title="Rotate Clockwise 90°"
  112. action="Rotate Clockwise 90"
  113. iconName="RotateR90"
  114. />
  115. <FunctionButton
  116. title="Rotate Any Angle"
  117. action="Rotate Any Angle"
  118. iconName="RotateAnyDegree"
  119. />
  120. <FunctionButton
  121. title="Crop Selected Area"
  122. action="Crop Selected Area"
  123. iconName="Crop"
  124. />
  125. <FunctionButton
  126. title="删除数字遮线框"
  127. action="Delete Digital Mask"
  128. iconName="btn_RemoveCrop"
  129. />
  130. <FunctionButton
  131. title="Adjust Brightness and Contrast"
  132. action="Adjust Brightness and Contrast"
  133. iconName="btn_BrightnessContrast"
  134. />
  135. <FunctionButton
  136. title="Add Mask"
  137. action="Add Mask"
  138. iconName="AddMask"
  139. />
  140. <FunctionButton
  141. title="Delete Mask"
  142. action="Delete Mask"
  143. iconName="DeleteMask"
  144. />
  145. <FunctionButton
  146. title="Image Comparison"
  147. action="Image Comparison"
  148. iconName="btn_Compare"
  149. />
  150. <FunctionButton
  151. title="反色对比"
  152. action="Invert Contrast"
  153. iconName="btn_ReverseColour"
  154. />
  155. <FunctionButton
  156. title="1x1 Layout"
  157. action="1x1 Layout"
  158. iconName="1x1_normal"
  159. />
  160. <FunctionButton
  161. title="1x2 Layout"
  162. action="1x2 Layout"
  163. iconName="1x2_normal"
  164. />
  165. <FunctionButton
  166. title="2x2 Layout"
  167. action="2x2 Layout"
  168. iconName="2x1_normal"
  169. />
  170. <FunctionButton
  171. title="4x4 Layout"
  172. action="4x4 Layout"
  173. iconName="2x2_normal"
  174. />
  175. <FunctionButton
  176. title="Magnifier"
  177. action="Magnifier"
  178. iconName="Magnifier"
  179. />
  180. <FunctionButton
  181. title="Fit Size"
  182. action="Fit Size"
  183. iconName="FitInWindow"
  184. />
  185. <FunctionButton
  186. title="Original Size"
  187. action="Original Size"
  188. iconName="1by1_normal"
  189. />
  190. <FunctionButton title="Zoom Image" action="Zoom Image" iconName="Zoom" />
  191. <FunctionButton
  192. title="Reset Cursor"
  193. action="Reset Cursor"
  194. iconName="btn_pointer"
  195. />
  196. <FunctionButton title="Pan" action="Pan" iconName="Pan" />
  197. <FunctionButton
  198. title="Invert Image"
  199. action="Invert Image"
  200. iconName="Invert"
  201. />
  202. <FunctionButton
  203. title="Reset Image"
  204. action="Reset Image"
  205. iconName="Reset"
  206. />
  207. <FunctionButton
  208. title="Snapshot"
  209. action="Snapshot"
  210. iconName="imgsnapshot"
  211. />
  212. <Divider type="horizontal" style={{ height: 'auto', margin: '8px' }} />
  213. <FunctionButton
  214. title="Advanced Processing"
  215. action="Advanced Processing"
  216. iconName="btn_Imageprocess"
  217. />
  218. <FunctionButton
  219. title="Image Measurement"
  220. action="Image Measurement"
  221. iconName="btn_Measurements"
  222. />
  223. <FunctionButton
  224. title="矩形裁剪"
  225. action="Rectangle Crop"
  226. iconName="rectangle-crop"
  227. />
  228. <FunctionButton title="More" action="More" iconName="btn_OtherSetting" />
  229. </Flex>
  230. );
  231. };
  232. export default FunctionArea;