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.

388 lines
10 KiB

15 years ago
  1. /***************/
  2. /* wxwineda.cpp */
  3. /****************/
  4. #include "fctsys.h"
  5. #include "common.h"
  6. #include "wxstruct.h"
  7. #include "dialog_helpers.h"
  8. /*
  9. * Text entry dialog to enter one or more lines of text.
  10. */
  11. WinEDA_EnterText::WinEDA_EnterText( wxWindow* parent,
  12. const wxString& Title,
  13. const wxString& TextToEdit,
  14. wxBoxSizer* BoxSizer,
  15. const wxSize& Size, bool Multiline )
  16. {
  17. m_Modify = FALSE;
  18. if( ! TextToEdit.IsEmpty() )
  19. m_NewText = TextToEdit;
  20. m_Title = new wxStaticText( parent, -1, Title );
  21. BoxSizer->Add( m_Title, 0,
  22. wxGROW | wxLEFT | wxRIGHT | wxTOP | wxADJUST_MINSIZE, 5 );
  23. long style = 0;
  24. if (Multiline)
  25. style = wxTE_MULTILINE;
  26. m_FrameText = new wxTextCtrl( parent, -1, TextToEdit, wxDefaultPosition,
  27. Size,style );
  28. m_FrameText->SetInsertionPoint( 1 );
  29. BoxSizer->Add( m_FrameText,
  30. 0,
  31. wxGROW | wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT | wxBOTTOM,
  32. 5 );
  33. }
  34. wxString WinEDA_EnterText::GetValue()
  35. {
  36. m_Modify = m_FrameText->IsModified();
  37. m_NewText = m_FrameText->GetValue();
  38. return m_NewText;
  39. }
  40. void WinEDA_EnterText::GetValue( char* buffer, int lenmax )
  41. {
  42. m_Modify = m_FrameText->IsModified();
  43. if( buffer )
  44. {
  45. m_NewText = m_FrameText->GetValue();
  46. int ii, ll = m_NewText.Len();
  47. for( ii = 0; ii < ll && ii < (lenmax - 1); ii++ )
  48. ;
  49. buffer[ii] = m_NewText.GetChar( ii );
  50. buffer[lenmax - 1] = 0;
  51. }
  52. }
  53. void WinEDA_EnterText::SetValue( const wxString& new_text )
  54. {
  55. m_FrameText->SetValue( new_text );
  56. }
  57. void WinEDA_EnterText::Enable( bool enbl )
  58. {
  59. m_Title->Enable( enbl );
  60. m_FrameText->Enable( enbl );
  61. }
  62. /*******************************************************/
  63. /* Class to edit a graphic + text size in INCHES or MM */
  64. /*******************************************************/
  65. WinEDA_GraphicTextCtrl::WinEDA_GraphicTextCtrl( wxWindow* parent,
  66. const wxString& Title,
  67. const wxString& TextToEdit,
  68. int textsize,
  69. UserUnitType user_unit,
  70. wxBoxSizer* BoxSizer,
  71. int framelen,
  72. int internal_unit )
  73. {
  74. m_UserUnit = user_unit;
  75. m_Internal_Unit = internal_unit;
  76. m_Title = NULL;
  77. m_Title = new wxStaticText( parent, -1, Title );
  78. BoxSizer->Add( m_Title, 0,
  79. wxGROW | wxLEFT | wxRIGHT | wxTOP | wxADJUST_MINSIZE, 5 );
  80. m_FrameText = new wxTextCtrl( parent, -1, TextToEdit );
  81. BoxSizer->Add( m_FrameText, 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5 );
  82. if( !Title.IsEmpty() )
  83. {
  84. wxString msg = _( "Size" ) + ReturnUnitSymbol( m_UserUnit );
  85. wxStaticText* text = new wxStaticText( parent, -1, msg );
  86. BoxSizer->Add( text, 0,
  87. wxGROW | wxLEFT | wxRIGHT | wxADJUST_MINSIZE, 5 );
  88. }
  89. wxString value = FormatSize( m_Internal_Unit, m_UserUnit, textsize );
  90. m_FrameSize = new wxTextCtrl( parent, -1, value, wxDefaultPosition,
  91. wxSize( 70, -1 ) );
  92. BoxSizer->Add( m_FrameSize, 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5 );
  93. }
  94. WinEDA_GraphicTextCtrl::~WinEDA_GraphicTextCtrl()
  95. {
  96. /* no, these are deleted by the BoxSizer
  97. delete m_FrameText;
  98. delete m_Title;
  99. */
  100. }
  101. wxString WinEDA_GraphicTextCtrl::FormatSize( int internalUnit, UserUnitType aUnit,
  102. int textSize )
  103. {
  104. wxString value;
  105. // Limiting the size of the text of reasonable values.
  106. if( textSize < 10 )
  107. textSize = 10;
  108. if( textSize > 3000 )
  109. textSize = 3000;
  110. value.Printf( ( internalUnit > 1000 ) ? wxT( "%.4f" ) : wxT( "%.3f" ),
  111. To_User_Unit( aUnit, textSize, internalUnit ) );
  112. return value;
  113. }
  114. void WinEDA_GraphicTextCtrl::SetTitle( const wxString& title )
  115. {
  116. m_Title->SetLabel( title );
  117. }
  118. void WinEDA_GraphicTextCtrl::SetValue( const wxString& value )
  119. {
  120. m_FrameText->SetValue( value );
  121. }
  122. void WinEDA_GraphicTextCtrl::SetValue( int textSize )
  123. {
  124. wxString value = FormatSize( m_Internal_Unit, m_UserUnit, textSize );
  125. m_FrameSize->SetValue( value );
  126. }
  127. wxString WinEDA_GraphicTextCtrl::GetText()
  128. {
  129. wxString text = m_FrameText->GetValue();
  130. return text;
  131. }
  132. int WinEDA_GraphicTextCtrl::ParseSize( const wxString& sizeText,
  133. int internalUnit, UserUnitType aUnit )
  134. {
  135. int textsize;
  136. textsize = ReturnValueFromString( aUnit, sizeText, internalUnit );
  137. // Limit to reasonable size
  138. if( textsize < 10 )
  139. textsize = 10;
  140. if( textsize > 3000 )
  141. textsize = 3000;
  142. return textsize;
  143. }
  144. int WinEDA_GraphicTextCtrl::GetTextSize()
  145. {
  146. return ParseSize( m_FrameSize->GetValue(), m_Internal_Unit, m_UserUnit );
  147. }
  148. void WinEDA_GraphicTextCtrl::Enable( bool state )
  149. {
  150. m_FrameText->Enable( state );
  151. }
  152. /********************************************************/
  153. /* Class to display and edit a coordinated INCHES or MM */
  154. /********************************************************/
  155. WinEDA_PositionCtrl::WinEDA_PositionCtrl( wxWindow* parent,
  156. const wxString& title,
  157. const wxPoint& pos_to_edit,
  158. UserUnitType user_unit,
  159. wxBoxSizer* BoxSizer,
  160. int internal_unit )
  161. {
  162. wxString text;
  163. m_UserUnit = user_unit;
  164. m_Internal_Unit = internal_unit;
  165. if( title.IsEmpty() )
  166. text = _( "Pos " );
  167. else
  168. text = title;
  169. text += _( "X" ) + ReturnUnitSymbol( m_UserUnit );
  170. m_TextX = new wxStaticText( parent, -1, text );
  171. BoxSizer->Add( m_TextX, 0,
  172. wxGROW | wxLEFT | wxRIGHT | wxTOP | wxADJUST_MINSIZE, 5 );
  173. m_FramePosX = new wxTextCtrl( parent, -1, wxEmptyString,
  174. wxDefaultPosition );
  175. BoxSizer->Add( m_FramePosX, 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5 );
  176. if( title.IsEmpty() )
  177. text = _( "Pos " );
  178. else
  179. text = title;
  180. text += _( "Y" ) + ReturnUnitSymbol( m_UserUnit );
  181. m_TextY = new wxStaticText( parent, -1, text );
  182. BoxSizer->Add( m_TextY, 0,
  183. wxGROW | wxLEFT | wxRIGHT | wxTOP | wxADJUST_MINSIZE, 5 );
  184. m_FramePosY = new wxTextCtrl( parent, -1, wxEmptyString );
  185. BoxSizer->Add( m_FramePosY, 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5 );
  186. SetValue( pos_to_edit.x, pos_to_edit.y );
  187. }
  188. WinEDA_PositionCtrl::~WinEDA_PositionCtrl()
  189. {
  190. delete m_TextX;
  191. delete m_TextY;
  192. delete m_FramePosX;
  193. delete m_FramePosY;
  194. }
  195. /* Returns (in internal units) to coordinate between (in user units)
  196. */
  197. wxPoint WinEDA_PositionCtrl::GetValue()
  198. {
  199. wxPoint coord;
  200. coord.x = ReturnValueFromString( m_UserUnit, m_FramePosX->GetValue(), m_Internal_Unit );
  201. coord.y = ReturnValueFromString( m_UserUnit, m_FramePosY->GetValue(), m_Internal_Unit );
  202. return coord;
  203. }
  204. void WinEDA_PositionCtrl::Enable( bool x_win_on, bool y_win_on )
  205. {
  206. m_FramePosX->Enable( x_win_on );
  207. m_FramePosY->Enable( y_win_on );
  208. }
  209. void WinEDA_PositionCtrl::SetValue( int x_value, int y_value )
  210. {
  211. wxString msg;
  212. m_Pos_To_Edit.x = x_value;
  213. m_Pos_To_Edit.y = y_value;
  214. msg = ReturnStringFromValue( m_UserUnit, m_Pos_To_Edit.x, m_Internal_Unit );
  215. m_FramePosX->Clear();
  216. m_FramePosX->SetValue( msg );
  217. msg = ReturnStringFromValue( m_UserUnit, m_Pos_To_Edit.y, m_Internal_Unit );
  218. m_FramePosY->Clear();
  219. m_FramePosY->SetValue( msg );
  220. }
  221. /*******************/
  222. /* WinEDA_SizeCtrl */
  223. /*******************/
  224. WinEDA_SizeCtrl::WinEDA_SizeCtrl( wxWindow* parent, const wxString& title,
  225. const wxSize& size_to_edit,
  226. UserUnitType aUnit, wxBoxSizer* BoxSizer,
  227. int internal_unit ) :
  228. WinEDA_PositionCtrl( parent, title,
  229. wxPoint( size_to_edit.x, size_to_edit.y ),
  230. aUnit, BoxSizer, internal_unit )
  231. {
  232. }
  233. wxSize WinEDA_SizeCtrl::GetValue()
  234. {
  235. wxPoint pos = WinEDA_PositionCtrl::GetValue();
  236. wxSize size;
  237. size.x = pos.x;
  238. size.y = pos.y;
  239. return size;
  240. }
  241. /**************************************************************/
  242. /* Class to display and edit a dimension INCHES, MM, or other */
  243. /**************************************************************/
  244. WinEDA_ValueCtrl::WinEDA_ValueCtrl( wxWindow* parent, const wxString& title,
  245. int value, UserUnitType user_unit, wxBoxSizer* BoxSizer,
  246. int internal_unit )
  247. {
  248. wxString label = title;
  249. m_UserUnit = user_unit;
  250. m_Internal_Unit = internal_unit;
  251. m_Value = value;
  252. label += ReturnUnitSymbol( m_UserUnit );
  253. m_Text = new wxStaticText( parent, -1, label );
  254. BoxSizer->Add( m_Text, 0,
  255. wxGROW | wxLEFT | wxRIGHT | wxTOP | wxADJUST_MINSIZE, 5 );
  256. wxString stringvalue = ReturnStringFromValue( m_UserUnit, m_Value,
  257. m_Internal_Unit );
  258. m_ValueCtrl = new wxTextCtrl( parent, -1, stringvalue );
  259. BoxSizer->Add( m_ValueCtrl,
  260. 0,
  261. wxGROW | wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT | wxBOTTOM,
  262. 5 );
  263. }
  264. WinEDA_ValueCtrl::~WinEDA_ValueCtrl()
  265. {
  266. delete m_ValueCtrl;
  267. delete m_Text;
  268. }
  269. int WinEDA_ValueCtrl::GetValue()
  270. {
  271. int coord;
  272. wxString txtvalue = m_ValueCtrl->GetValue();
  273. coord = ReturnValueFromString( m_UserUnit, txtvalue, m_Internal_Unit );
  274. return coord;
  275. }
  276. void WinEDA_ValueCtrl::SetValue( int new_value )
  277. {
  278. wxString buffer;
  279. m_Value = new_value;
  280. buffer = ReturnStringFromValue( m_UserUnit, m_Value, m_Internal_Unit );
  281. m_ValueCtrl->SetValue( buffer );
  282. }
  283. void WinEDA_ValueCtrl::Enable( bool enbl )
  284. {
  285. m_ValueCtrl->Enable( enbl );
  286. m_Text->Enable( enbl );
  287. }