You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

428 lines
22 KiB

  1. /*
  2. * This program source code file is part of KiCad, a free EDA CAD application.
  3. *
  4. * Copyright (C) 2024 KiCad Developers, see AUTHORS.txt for contributors.
  5. *
  6. * This program is free software: you can redistribute it and/or modify it
  7. * under the terms of the GNU General Public License as published by the
  8. * Free Software Foundation, either version 3 of the License, or (at your
  9. * option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful, but
  12. * WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License along
  17. * with this program. If not, see <http://www.gnu.org/licenses/>.
  18. */
  19. #include <api/api_enums.h>
  20. #include <import_export.h>
  21. #include <api/common/types/enums.pb.h>
  22. #include <api/board/board_types.pb.h>
  23. #include <api/schematic/schematic_types.pb.h>
  24. #include <core/typeinfo.h>
  25. #include <font/text_attributes.h>
  26. #include <layer_ids.h>
  27. #include <stroke_params.h>
  28. using namespace kiapi;
  29. using namespace kiapi::common;
  30. template<>
  31. KICAD_T FromProtoEnum( types::KiCadObjectType aValue )
  32. {
  33. switch( aValue )
  34. {
  35. case types::KiCadObjectType::KOT_PCB_FOOTPRINT: return PCB_FOOTPRINT_T;
  36. case types::KiCadObjectType::KOT_PCB_PAD: return PCB_PAD_T;
  37. case types::KiCadObjectType::KOT_PCB_SHAPE: return PCB_SHAPE_T;
  38. case types::KiCadObjectType::KOT_PCB_REFERENCE_IMAGE: return PCB_REFERENCE_IMAGE_T;
  39. case types::KiCadObjectType::KOT_PCB_FIELD: return PCB_FIELD_T;
  40. case types::KiCadObjectType::KOT_PCB_GENERATOR: return PCB_GENERATOR_T;
  41. case types::KiCadObjectType::KOT_PCB_TEXT: return PCB_TEXT_T;
  42. case types::KiCadObjectType::KOT_PCB_TEXTBOX: return PCB_TEXTBOX_T;
  43. case types::KiCadObjectType::KOT_PCB_TABLE: return PCB_TABLE_T;
  44. case types::KiCadObjectType::KOT_PCB_TABLECELL: return PCB_TABLECELL_T;
  45. case types::KiCadObjectType::KOT_PCB_TRACE: return PCB_TRACE_T;
  46. case types::KiCadObjectType::KOT_PCB_VIA: return PCB_VIA_T;
  47. case types::KiCadObjectType::KOT_PCB_ARC: return PCB_ARC_T;
  48. case types::KiCadObjectType::KOT_PCB_MARKER: return PCB_MARKER_T;
  49. case types::KiCadObjectType::KOT_PCB_DIMENSION: return PCB_DIMENSION_T;
  50. case types::KiCadObjectType::KOT_PCB_ZONE: return PCB_ZONE_T;
  51. case types::KiCadObjectType::KOT_PCB_GROUP: return PCB_GROUP_T;
  52. case types::KiCadObjectType::KOT_SCH_MARKER: return SCH_MARKER_T;
  53. case types::KiCadObjectType::KOT_SCH_JUNCTION: return SCH_JUNCTION_T;
  54. case types::KiCadObjectType::KOT_SCH_NO_CONNECT: return SCH_NO_CONNECT_T;
  55. case types::KiCadObjectType::KOT_SCH_BUS_WIRE_ENTRY: return SCH_BUS_WIRE_ENTRY_T;
  56. case types::KiCadObjectType::KOT_SCH_BUS_BUS_ENTRY: return SCH_BUS_BUS_ENTRY_T;
  57. case types::KiCadObjectType::KOT_SCH_LINE: return SCH_LINE_T;
  58. case types::KiCadObjectType::KOT_SCH_SHAPE: return SCH_SHAPE_T;
  59. case types::KiCadObjectType::KOT_SCH_BITMAP: return SCH_BITMAP_T;
  60. case types::KiCadObjectType::KOT_SCH_TEXTBOX: return SCH_TEXTBOX_T;
  61. case types::KiCadObjectType::KOT_SCH_TEXT: return SCH_TEXT_T;
  62. case types::KiCadObjectType::KOT_SCH_TABLE: return SCH_TABLE_T;
  63. case types::KiCadObjectType::KOT_SCH_TABLECELL: return SCH_TABLECELL_T;
  64. case types::KiCadObjectType::KOT_SCH_LABEL: return SCH_LABEL_T;
  65. case types::KiCadObjectType::KOT_SCH_GLOBAL_LABEL: return SCH_GLOBAL_LABEL_T;
  66. case types::KiCadObjectType::KOT_SCH_HIER_LABEL: return SCH_HIER_LABEL_T;
  67. case types::KiCadObjectType::KOT_SCH_DIRECTIVE_LABEL: return SCH_DIRECTIVE_LABEL_T;
  68. case types::KiCadObjectType::KOT_SCH_FIELD: return SCH_FIELD_T;
  69. case types::KiCadObjectType::KOT_SCH_SYMBOL: return SCH_SYMBOL_T;
  70. case types::KiCadObjectType::KOT_SCH_SHEET_PIN: return SCH_SHEET_PIN_T;
  71. case types::KiCadObjectType::KOT_SCH_SHEET: return SCH_SHEET_T;
  72. case types::KiCadObjectType::KOT_SCH_PIN: return SCH_PIN_T;
  73. case types::KiCadObjectType::KOT_LIB_SYMBOL: return LIB_SYMBOL_T;
  74. case types::KiCadObjectType::KOT_WSG_LINE: return WSG_LINE_T;
  75. case types::KiCadObjectType::KOT_WSG_RECT: return WSG_RECT_T;
  76. case types::KiCadObjectType::KOT_WSG_POLY: return WSG_POLY_T;
  77. case types::KiCadObjectType::KOT_WSG_TEXT: return WSG_TEXT_T;
  78. case types::KiCadObjectType::KOT_WSG_BITMAP: return WSG_BITMAP_T;
  79. case types::KiCadObjectType::KOT_WSG_PAGE: return WSG_PAGE_T;
  80. case types::KiCadObjectType::KOT_UNKNOWN: return TYPE_NOT_INIT;
  81. default:
  82. wxCHECK_MSG( false, TYPE_NOT_INIT,
  83. "Unhandled case in FromProtoEnum<types::KiCadObjectType>" );
  84. }
  85. }
  86. template<>
  87. types::KiCadObjectType ToProtoEnum( KICAD_T aValue )
  88. {
  89. switch( aValue )
  90. {
  91. case PCB_FOOTPRINT_T: return types::KiCadObjectType::KOT_PCB_FOOTPRINT;
  92. case PCB_PAD_T: return types::KiCadObjectType::KOT_PCB_PAD;
  93. case PCB_SHAPE_T: return types::KiCadObjectType::KOT_PCB_SHAPE;
  94. case PCB_REFERENCE_IMAGE_T: return types::KiCadObjectType::KOT_PCB_REFERENCE_IMAGE;
  95. case PCB_FIELD_T: return types::KiCadObjectType::KOT_PCB_FIELD;
  96. case PCB_GENERATOR_T: return types::KiCadObjectType::KOT_PCB_GENERATOR;
  97. case PCB_TEXT_T: return types::KiCadObjectType::KOT_PCB_TEXT;
  98. case PCB_TEXTBOX_T: return types::KiCadObjectType::KOT_PCB_TEXTBOX;
  99. case PCB_TABLE_T: return types::KiCadObjectType::KOT_PCB_TABLE;
  100. case PCB_TABLECELL_T: return types::KiCadObjectType::KOT_PCB_TABLECELL;
  101. case PCB_TRACE_T: return types::KiCadObjectType::KOT_PCB_TRACE;
  102. case PCB_VIA_T: return types::KiCadObjectType::KOT_PCB_VIA;
  103. case PCB_ARC_T: return types::KiCadObjectType::KOT_PCB_ARC;
  104. case PCB_MARKER_T: return types::KiCadObjectType::KOT_PCB_MARKER;
  105. case PCB_DIMENSION_T: return types::KiCadObjectType::KOT_PCB_DIMENSION;
  106. case PCB_ZONE_T: return types::KiCadObjectType::KOT_PCB_ZONE;
  107. case PCB_GROUP_T: return types::KiCadObjectType::KOT_PCB_GROUP;
  108. case SCH_MARKER_T: return types::KiCadObjectType::KOT_SCH_MARKER;
  109. case SCH_JUNCTION_T: return types::KiCadObjectType::KOT_SCH_JUNCTION;
  110. case SCH_NO_CONNECT_T: return types::KiCadObjectType::KOT_SCH_NO_CONNECT;
  111. case SCH_BUS_WIRE_ENTRY_T: return types::KiCadObjectType::KOT_SCH_BUS_WIRE_ENTRY;
  112. case SCH_BUS_BUS_ENTRY_T: return types::KiCadObjectType::KOT_SCH_BUS_BUS_ENTRY;
  113. case SCH_LINE_T: return types::KiCadObjectType::KOT_SCH_LINE;
  114. case SCH_SHAPE_T: return types::KiCadObjectType::KOT_SCH_SHAPE;
  115. case SCH_BITMAP_T: return types::KiCadObjectType::KOT_SCH_BITMAP;
  116. case SCH_TEXTBOX_T: return types::KiCadObjectType::KOT_SCH_TEXTBOX;
  117. case SCH_TEXT_T: return types::KiCadObjectType::KOT_SCH_TEXT;
  118. case SCH_TABLE_T: return types::KiCadObjectType::KOT_SCH_TABLE;
  119. case SCH_TABLECELL_T: return types::KiCadObjectType::KOT_SCH_TABLECELL;
  120. case SCH_LABEL_T: return types::KiCadObjectType::KOT_SCH_LABEL;
  121. case SCH_GLOBAL_LABEL_T: return types::KiCadObjectType::KOT_SCH_GLOBAL_LABEL;
  122. case SCH_HIER_LABEL_T: return types::KiCadObjectType::KOT_SCH_HIER_LABEL;
  123. case SCH_DIRECTIVE_LABEL_T: return types::KiCadObjectType::KOT_SCH_DIRECTIVE_LABEL;
  124. case SCH_FIELD_T: return types::KiCadObjectType::KOT_SCH_FIELD;
  125. case SCH_SYMBOL_T: return types::KiCadObjectType::KOT_SCH_SYMBOL;
  126. case SCH_SHEET_PIN_T: return types::KiCadObjectType::KOT_SCH_SHEET_PIN;
  127. case SCH_SHEET_T: return types::KiCadObjectType::KOT_SCH_SHEET;
  128. case SCH_PIN_T: return types::KiCadObjectType::KOT_SCH_PIN;
  129. case LIB_SYMBOL_T: return types::KiCadObjectType::KOT_LIB_SYMBOL;
  130. case WSG_LINE_T: return types::KiCadObjectType::KOT_WSG_LINE;
  131. case WSG_RECT_T: return types::KiCadObjectType::KOT_WSG_RECT;
  132. case WSG_POLY_T: return types::KiCadObjectType::KOT_WSG_POLY;
  133. case WSG_TEXT_T: return types::KiCadObjectType::KOT_WSG_TEXT;
  134. case WSG_BITMAP_T: return types::KiCadObjectType::KOT_WSG_BITMAP;
  135. case WSG_PAGE_T: return types::KiCadObjectType::KOT_WSG_PAGE;
  136. default:
  137. wxCHECK_MSG( false, types::KiCadObjectType::KOT_UNKNOWN,
  138. "Unhandled case in ToProtoEnum<KICAD_T>");
  139. }
  140. }
  141. template<>
  142. PCB_LAYER_ID FromProtoEnum( board::types::BoardLayer aValue )
  143. {
  144. switch( aValue )
  145. {
  146. case board::types::BoardLayer::BL_UNDEFINED: return UNDEFINED_LAYER;
  147. case board::types::BoardLayer::BL_UNSELECTED: return UNSELECTED_LAYER;
  148. case board::types::BoardLayer::BL_F_Cu: return F_Cu;
  149. case board::types::BoardLayer::BL_In1_Cu: return In1_Cu;
  150. case board::types::BoardLayer::BL_In2_Cu: return In2_Cu;
  151. case board::types::BoardLayer::BL_In3_Cu: return In3_Cu;
  152. case board::types::BoardLayer::BL_In4_Cu: return In4_Cu;
  153. case board::types::BoardLayer::BL_In5_Cu: return In5_Cu;
  154. case board::types::BoardLayer::BL_In6_Cu: return In6_Cu;
  155. case board::types::BoardLayer::BL_In7_Cu: return In7_Cu;
  156. case board::types::BoardLayer::BL_In8_Cu: return In8_Cu;
  157. case board::types::BoardLayer::BL_In9_Cu: return In9_Cu;
  158. case board::types::BoardLayer::BL_In10_Cu: return In10_Cu;
  159. case board::types::BoardLayer::BL_In11_Cu: return In11_Cu;
  160. case board::types::BoardLayer::BL_In12_Cu: return In12_Cu;
  161. case board::types::BoardLayer::BL_In13_Cu: return In13_Cu;
  162. case board::types::BoardLayer::BL_In14_Cu: return In14_Cu;
  163. case board::types::BoardLayer::BL_In15_Cu: return In15_Cu;
  164. case board::types::BoardLayer::BL_In16_Cu: return In16_Cu;
  165. case board::types::BoardLayer::BL_In17_Cu: return In17_Cu;
  166. case board::types::BoardLayer::BL_In18_Cu: return In18_Cu;
  167. case board::types::BoardLayer::BL_In19_Cu: return In19_Cu;
  168. case board::types::BoardLayer::BL_In20_Cu: return In20_Cu;
  169. case board::types::BoardLayer::BL_In21_Cu: return In21_Cu;
  170. case board::types::BoardLayer::BL_In22_Cu: return In22_Cu;
  171. case board::types::BoardLayer::BL_In23_Cu: return In23_Cu;
  172. case board::types::BoardLayer::BL_In24_Cu: return In24_Cu;
  173. case board::types::BoardLayer::BL_In25_Cu: return In25_Cu;
  174. case board::types::BoardLayer::BL_In26_Cu: return In26_Cu;
  175. case board::types::BoardLayer::BL_In27_Cu: return In27_Cu;
  176. case board::types::BoardLayer::BL_In28_Cu: return In28_Cu;
  177. case board::types::BoardLayer::BL_In29_Cu: return In29_Cu;
  178. case board::types::BoardLayer::BL_In30_Cu: return In30_Cu;
  179. case board::types::BoardLayer::BL_B_Cu: return B_Cu;
  180. case board::types::BoardLayer::BL_B_Adhes: return B_Adhes;
  181. case board::types::BoardLayer::BL_F_Adhes: return F_Adhes;
  182. case board::types::BoardLayer::BL_B_Paste: return B_Paste;
  183. case board::types::BoardLayer::BL_F_Paste: return F_Paste;
  184. case board::types::BoardLayer::BL_B_SilkS: return B_SilkS;
  185. case board::types::BoardLayer::BL_F_SilkS: return F_SilkS;
  186. case board::types::BoardLayer::BL_B_Mask: return B_Mask;
  187. case board::types::BoardLayer::BL_F_Mask: return F_Mask;
  188. case board::types::BoardLayer::BL_Dwgs_User: return Dwgs_User;
  189. case board::types::BoardLayer::BL_Cmts_User: return Cmts_User;
  190. case board::types::BoardLayer::BL_Eco1_User: return Eco1_User;
  191. case board::types::BoardLayer::BL_Eco2_User: return Eco2_User;
  192. case board::types::BoardLayer::BL_Edge_Cuts: return Edge_Cuts;
  193. case board::types::BoardLayer::BL_Margin: return Margin;
  194. case board::types::BoardLayer::BL_B_CrtYd: return B_CrtYd;
  195. case board::types::BoardLayer::BL_F_CrtYd: return F_CrtYd;
  196. case board::types::BoardLayer::BL_B_Fab: return B_Fab;
  197. case board::types::BoardLayer::BL_F_Fab: return F_Fab;
  198. case board::types::BoardLayer::BL_User_1: return User_1;
  199. case board::types::BoardLayer::BL_User_2: return User_2;
  200. case board::types::BoardLayer::BL_User_3: return User_3;
  201. case board::types::BoardLayer::BL_User_4: return User_4;
  202. case board::types::BoardLayer::BL_User_5: return User_5;
  203. case board::types::BoardLayer::BL_User_6: return User_6;
  204. case board::types::BoardLayer::BL_User_7: return User_7;
  205. case board::types::BoardLayer::BL_User_8: return User_8;
  206. case board::types::BoardLayer::BL_User_9: return User_9;
  207. case board::types::BoardLayer::BL_Rescue: return Rescue;
  208. case board::types::BoardLayer::BL_UNKNOWN: return UNDEFINED_LAYER;
  209. default:
  210. wxCHECK_MSG( false, UNDEFINED_LAYER,
  211. "Unhandled case in FromProtoEnum<board::types::BoardLayer>" );
  212. }
  213. }
  214. template<>
  215. board::types::BoardLayer ToProtoEnum( PCB_LAYER_ID aValue )
  216. {
  217. switch( aValue )
  218. {
  219. case UNDEFINED_LAYER: return board::types::BoardLayer::BL_UNDEFINED;
  220. case UNSELECTED_LAYER: return board::types::BoardLayer::BL_UNSELECTED;
  221. case F_Cu: return board::types::BoardLayer::BL_F_Cu;
  222. case In1_Cu: return board::types::BoardLayer::BL_In1_Cu;
  223. case In2_Cu: return board::types::BoardLayer::BL_In2_Cu;
  224. case In3_Cu: return board::types::BoardLayer::BL_In3_Cu;
  225. case In4_Cu: return board::types::BoardLayer::BL_In4_Cu;
  226. case In5_Cu: return board::types::BoardLayer::BL_In5_Cu;
  227. case In6_Cu: return board::types::BoardLayer::BL_In6_Cu;
  228. case In7_Cu: return board::types::BoardLayer::BL_In7_Cu;
  229. case In8_Cu: return board::types::BoardLayer::BL_In8_Cu;
  230. case In9_Cu: return board::types::BoardLayer::BL_In9_Cu;
  231. case In10_Cu: return board::types::BoardLayer::BL_In10_Cu;
  232. case In11_Cu: return board::types::BoardLayer::BL_In11_Cu;
  233. case In12_Cu: return board::types::BoardLayer::BL_In12_Cu;
  234. case In13_Cu: return board::types::BoardLayer::BL_In13_Cu;
  235. case In14_Cu: return board::types::BoardLayer::BL_In14_Cu;
  236. case In15_Cu: return board::types::BoardLayer::BL_In15_Cu;
  237. case In16_Cu: return board::types::BoardLayer::BL_In16_Cu;
  238. case In17_Cu: return board::types::BoardLayer::BL_In17_Cu;
  239. case In18_Cu: return board::types::BoardLayer::BL_In18_Cu;
  240. case In19_Cu: return board::types::BoardLayer::BL_In19_Cu;
  241. case In20_Cu: return board::types::BoardLayer::BL_In20_Cu;
  242. case In21_Cu: return board::types::BoardLayer::BL_In21_Cu;
  243. case In22_Cu: return board::types::BoardLayer::BL_In22_Cu;
  244. case In23_Cu: return board::types::BoardLayer::BL_In23_Cu;
  245. case In24_Cu: return board::types::BoardLayer::BL_In24_Cu;
  246. case In25_Cu: return board::types::BoardLayer::BL_In25_Cu;
  247. case In26_Cu: return board::types::BoardLayer::BL_In26_Cu;
  248. case In27_Cu: return board::types::BoardLayer::BL_In27_Cu;
  249. case In28_Cu: return board::types::BoardLayer::BL_In28_Cu;
  250. case In29_Cu: return board::types::BoardLayer::BL_In29_Cu;
  251. case In30_Cu: return board::types::BoardLayer::BL_In30_Cu;
  252. case B_Cu: return board::types::BoardLayer::BL_B_Cu;
  253. case B_Adhes: return board::types::BoardLayer::BL_B_Adhes;
  254. case F_Adhes: return board::types::BoardLayer::BL_F_Adhes;
  255. case B_Paste: return board::types::BoardLayer::BL_B_Paste;
  256. case F_Paste: return board::types::BoardLayer::BL_F_Paste;
  257. case B_SilkS: return board::types::BoardLayer::BL_B_SilkS;
  258. case F_SilkS: return board::types::BoardLayer::BL_F_SilkS;
  259. case B_Mask: return board::types::BoardLayer::BL_B_Mask;
  260. case F_Mask: return board::types::BoardLayer::BL_F_Mask;
  261. case Dwgs_User: return board::types::BoardLayer::BL_Dwgs_User;
  262. case Cmts_User: return board::types::BoardLayer::BL_Cmts_User;
  263. case Eco1_User: return board::types::BoardLayer::BL_Eco1_User;
  264. case Eco2_User: return board::types::BoardLayer::BL_Eco2_User;
  265. case Edge_Cuts: return board::types::BoardLayer::BL_Edge_Cuts;
  266. case Margin: return board::types::BoardLayer::BL_Margin;
  267. case B_CrtYd: return board::types::BoardLayer::BL_B_CrtYd;
  268. case F_CrtYd: return board::types::BoardLayer::BL_F_CrtYd;
  269. case B_Fab: return board::types::BoardLayer::BL_B_Fab;
  270. case F_Fab: return board::types::BoardLayer::BL_F_Fab;
  271. case User_1: return board::types::BoardLayer::BL_User_1;
  272. case User_2: return board::types::BoardLayer::BL_User_2;
  273. case User_3: return board::types::BoardLayer::BL_User_3;
  274. case User_4: return board::types::BoardLayer::BL_User_4;
  275. case User_5: return board::types::BoardLayer::BL_User_5;
  276. case User_6: return board::types::BoardLayer::BL_User_6;
  277. case User_7: return board::types::BoardLayer::BL_User_7;
  278. case User_8: return board::types::BoardLayer::BL_User_8;
  279. case User_9: return board::types::BoardLayer::BL_User_9;
  280. case Rescue: return board::types::BoardLayer::BL_Rescue;
  281. default:
  282. wxCHECK_MSG( false, board::types::BoardLayer::BL_UNKNOWN,
  283. "Unhandled case in ToProtoEnum<PCB_LAYER_ID>");
  284. }
  285. }
  286. template<>
  287. SCH_LAYER_ID FromProtoEnum( schematic::types::SchematicLayer aValue )
  288. {
  289. switch( aValue )
  290. {
  291. default:
  292. wxCHECK_MSG( false, SCH_LAYER_ID_START,
  293. "Unhandled case in FromProtoEnum<schematic::types::SchematicLayer>" );
  294. }
  295. }
  296. template<>
  297. schematic::types::SchematicLayer ToProtoEnum( SCH_LAYER_ID aValue )
  298. {
  299. switch( aValue )
  300. {
  301. default:
  302. wxCHECK_MSG( false, schematic::types::SchematicLayer::SL_UNKNOWN,
  303. "Unhandled case in ToProtoEnum<SCH_LAYER_ID>");
  304. }
  305. }
  306. template<>
  307. GR_TEXT_H_ALIGN_T FromProtoEnum( types::HorizontalAlignment aValue )
  308. {
  309. switch( aValue )
  310. {
  311. case types::HorizontalAlignment::HA_LEFT: return GR_TEXT_H_ALIGN_LEFT;
  312. case types::HorizontalAlignment::HA_CENTER: return GR_TEXT_H_ALIGN_CENTER;
  313. case types::HorizontalAlignment::HA_RIGHT: return GR_TEXT_H_ALIGN_RIGHT;
  314. case types::HorizontalAlignment::HA_INDETERMINATE: return GR_TEXT_H_ALIGN_INDETERMINATE;
  315. case types::HorizontalAlignment::HA_UNKNOWN: return GR_TEXT_H_ALIGN_CENTER;
  316. default:
  317. wxCHECK_MSG( false, GR_TEXT_H_ALIGN_CENTER,
  318. "Unhandled case in FromProtoEnum<types::HorizontalAlignment>" );
  319. }
  320. }
  321. template<>
  322. types::HorizontalAlignment ToProtoEnum( GR_TEXT_H_ALIGN_T aValue )
  323. {
  324. switch( aValue )
  325. {
  326. case GR_TEXT_H_ALIGN_LEFT: return types::HorizontalAlignment::HA_LEFT;
  327. case GR_TEXT_H_ALIGN_CENTER: return types::HorizontalAlignment::HA_CENTER;
  328. case GR_TEXT_H_ALIGN_RIGHT: return types::HorizontalAlignment::HA_RIGHT;
  329. case GR_TEXT_H_ALIGN_INDETERMINATE: return types::HorizontalAlignment::HA_INDETERMINATE;
  330. default:
  331. wxCHECK_MSG( false, types::HorizontalAlignment::HA_UNKNOWN,
  332. "Unhandled case in ToProtoEnum<GR_TEXT_H_ALIGN_T>");
  333. }
  334. }
  335. template<>
  336. GR_TEXT_V_ALIGN_T FromProtoEnum( types::VerticalAlignment aValue )
  337. {
  338. switch( aValue )
  339. {
  340. case types::VerticalAlignment::VA_TOP: return GR_TEXT_V_ALIGN_TOP;
  341. case types::VerticalAlignment::VA_CENTER: return GR_TEXT_V_ALIGN_CENTER;
  342. case types::VerticalAlignment::VA_BOTTOM: return GR_TEXT_V_ALIGN_BOTTOM;
  343. case types::VerticalAlignment::VA_INDETERMINATE: return GR_TEXT_V_ALIGN_INDETERMINATE;
  344. case types::VerticalAlignment::VA_UNKNOWN: return GR_TEXT_V_ALIGN_CENTER;
  345. default:
  346. wxCHECK_MSG( false, GR_TEXT_V_ALIGN_CENTER,
  347. "Unhandled case in FromProtoEnum<types::VerticalAlignment>" );
  348. }
  349. }
  350. template<>
  351. types::VerticalAlignment ToProtoEnum( GR_TEXT_V_ALIGN_T aValue )
  352. {
  353. switch( aValue )
  354. {
  355. case GR_TEXT_V_ALIGN_TOP: return types::VerticalAlignment::VA_TOP;
  356. case GR_TEXT_V_ALIGN_CENTER: return types::VerticalAlignment::VA_CENTER;
  357. case GR_TEXT_V_ALIGN_BOTTOM: return types::VerticalAlignment::VA_BOTTOM;
  358. case GR_TEXT_V_ALIGN_INDETERMINATE: return types::VerticalAlignment::VA_INDETERMINATE;
  359. default:
  360. wxCHECK_MSG( false, types::VerticalAlignment::VA_UNKNOWN,
  361. "Unhandled case in ToProtoEnum<GR_TEXT_V_ALIGN_T>");
  362. }
  363. }
  364. template<>
  365. LINE_STYLE FromProtoEnum( types::StrokeLineStyle aValue )
  366. {
  367. switch( aValue )
  368. {
  369. case types::StrokeLineStyle::SLS_DEFAULT: return LINE_STYLE::DEFAULT;
  370. case types::StrokeLineStyle::SLS_SOLID: return LINE_STYLE::SOLID;
  371. case types::StrokeLineStyle::SLS_DASH: return LINE_STYLE::DASH;
  372. case types::StrokeLineStyle::SLS_DOT: return LINE_STYLE::DOT;
  373. case types::StrokeLineStyle::SLS_DASHDOT: return LINE_STYLE::DASHDOT;
  374. case types::StrokeLineStyle::SLS_DASHDOTDOT: return LINE_STYLE::DASHDOTDOT;
  375. case types::StrokeLineStyle::SLS_UNKNOWN:
  376. default:
  377. wxCHECK_MSG( false, LINE_STYLE::DEFAULT,
  378. "Unhandled case in FromProtoEnum<types::StrokeLineStyle>" );
  379. }
  380. }
  381. template<>
  382. types::StrokeLineStyle ToProtoEnum( LINE_STYLE aValue )
  383. {
  384. switch( aValue )
  385. {
  386. case LINE_STYLE::DEFAULT: return types::StrokeLineStyle::SLS_DEFAULT;
  387. case LINE_STYLE::SOLID: return types::StrokeLineStyle::SLS_SOLID;
  388. case LINE_STYLE::DASH: return types::StrokeLineStyle::SLS_DASH;
  389. case LINE_STYLE::DOT: return types::StrokeLineStyle::SLS_DOT;
  390. case LINE_STYLE::DASHDOT: return types::StrokeLineStyle::SLS_DASHDOT;
  391. case LINE_STYLE::DASHDOTDOT: return types::StrokeLineStyle::SLS_DASHDOTDOT;
  392. default:
  393. wxCHECK_MSG( false, types::StrokeLineStyle::SLS_UNKNOWN,
  394. "Unhandled case in ToProtoEnum<LINE_STYLE>");
  395. }
  396. }