preferences.py 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776
  1. """
  2. @package gmodeler.preferences
  3. @brief wxGUI Graphical Modeler - preferences
  4. Classes:
  5. - preferences::PreferencesDialog
  6. - preferences::PropertiesDialog
  7. (C) 2010-2013 by the GRASS Development Team
  8. This program is free software under the GNU General Public License
  9. (>=v2). Read the file COPYING that comes with GRASS for details.
  10. @author Martin Landa <landa.martin gmail.com>
  11. """
  12. import wx
  13. import wx.lib.colourselect as csel
  14. from core import globalvar
  15. from gui_core.preferences import PreferencesBaseDialog
  16. from core.settings import UserSettings
  17. from gui_core.wrap import SpinCtrl, Button, StaticText, \
  18. StaticBox, TextCtrl
  19. class PreferencesDialog(PreferencesBaseDialog):
  20. """User preferences dialog"""
  21. def __init__(self, parent, giface, settings=UserSettings,
  22. title=_("Modeler settings")):
  23. PreferencesBaseDialog.__init__(
  24. self,
  25. parent=parent,
  26. giface=giface,
  27. title=title,
  28. settings=settings)
  29. # create notebook pages
  30. self._createGeneralPage(self.notebook)
  31. self._createActionPage(self.notebook)
  32. self._createDataPage(self.notebook)
  33. self._createLoopPage(self.notebook)
  34. self._createCommentPage(self.notebook)
  35. self.SetMinSize(self.GetBestSize())
  36. self.SetSize(self.size)
  37. def _createGeneralPage(self, notebook):
  38. """Create notebook page for action settings"""
  39. panel = wx.Panel(parent=notebook, id=wx.ID_ANY)
  40. notebook.AddPage(page=panel, text=_("General"))
  41. # colors
  42. border = wx.BoxSizer(wx.VERTICAL)
  43. box = StaticBox(parent=panel, id=wx.ID_ANY,
  44. label=" %s " % _("Item properties"))
  45. sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
  46. gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
  47. row = 0
  48. gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY,
  49. label=_("Disabled:")),
  50. flag=wx.ALIGN_LEFT |
  51. wx.ALIGN_CENTER_VERTICAL,
  52. pos=(row, 0))
  53. rColor = csel.ColourSelect(
  54. parent=panel,
  55. id=wx.ID_ANY,
  56. colour=self.settings.Get(
  57. group='modeler',
  58. key='disabled',
  59. subkey='color'),
  60. size=globalvar.DIALOG_COLOR_SIZE)
  61. rColor.SetName('GetColour')
  62. self.winId['modeler:disabled:color'] = rColor.GetId()
  63. gridSizer.Add(rColor,
  64. flag=wx.ALIGN_RIGHT |
  65. wx.ALIGN_CENTER_VERTICAL,
  66. pos=(row, 1))
  67. gridSizer.AddGrowableCol(0)
  68. sizer.Add(
  69. gridSizer,
  70. proportion=1,
  71. flag=wx.ALL | wx.EXPAND,
  72. border=5)
  73. border.Add(sizer, proportion=0, flag=wx.LEFT |
  74. wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
  75. panel.SetSizer(border)
  76. return panel
  77. def _createActionPage(self, notebook):
  78. """Create notebook page for action settings"""
  79. panel = wx.Panel(parent=notebook, id=wx.ID_ANY)
  80. notebook.AddPage(page=panel, text=_("Command"))
  81. # colors
  82. border = wx.BoxSizer(wx.VERTICAL)
  83. box = StaticBox(parent=panel, id=wx.ID_ANY,
  84. label=" %s " % _("Color"))
  85. sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
  86. gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
  87. row = 0
  88. gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY,
  89. label=_("Valid:")),
  90. flag=wx.ALIGN_LEFT |
  91. wx.ALIGN_CENTER_VERTICAL,
  92. pos=(row, 0))
  93. vColor = csel.ColourSelect(
  94. parent=panel, id=wx.ID_ANY, colour=self.settings.Get(
  95. group='modeler', key='action', subkey=(
  96. 'color', 'valid')), size=globalvar.DIALOG_COLOR_SIZE)
  97. vColor.SetName('GetColour')
  98. self.winId['modeler:action:color:valid'] = vColor.GetId()
  99. gridSizer.Add(vColor,
  100. flag=wx.ALIGN_RIGHT |
  101. wx.ALIGN_CENTER_VERTICAL,
  102. pos=(row, 1))
  103. row += 1
  104. gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY,
  105. label=_("Invalid:")),
  106. flag=wx.ALIGN_LEFT |
  107. wx.ALIGN_CENTER_VERTICAL,
  108. pos=(row, 0))
  109. iColor = csel.ColourSelect(
  110. parent=panel, id=wx.ID_ANY, colour=self.settings.Get(
  111. group='modeler', key='action', subkey=(
  112. 'color', 'invalid')), size=globalvar.DIALOG_COLOR_SIZE)
  113. iColor.SetName('GetColour')
  114. self.winId['modeler:action:color:invalid'] = iColor.GetId()
  115. gridSizer.Add(iColor,
  116. flag=wx.ALIGN_RIGHT |
  117. wx.ALIGN_CENTER_VERTICAL,
  118. pos=(row, 1))
  119. row += 1
  120. gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY,
  121. label=_("Running:")),
  122. flag=wx.ALIGN_LEFT |
  123. wx.ALIGN_CENTER_VERTICAL,
  124. pos=(row, 0))
  125. rColor = csel.ColourSelect(
  126. parent=panel, id=wx.ID_ANY, colour=self.settings.Get(
  127. group='modeler', key='action', subkey=(
  128. 'color', 'running')), size=globalvar.DIALOG_COLOR_SIZE)
  129. rColor.SetName('GetColour')
  130. self.winId['modeler:action:color:running'] = rColor.GetId()
  131. gridSizer.Add(rColor,
  132. flag=wx.ALIGN_RIGHT |
  133. wx.ALIGN_CENTER_VERTICAL,
  134. pos=(row, 1))
  135. gridSizer.AddGrowableCol(0)
  136. sizer.Add(
  137. gridSizer,
  138. proportion=1,
  139. flag=wx.ALL | wx.EXPAND,
  140. border=5)
  141. border.Add(sizer, proportion=0, flag=wx.LEFT |
  142. wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
  143. # size
  144. box = StaticBox(parent=panel, id=wx.ID_ANY,
  145. label=" %s " % _("Shape size"))
  146. sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
  147. gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
  148. row = 0
  149. gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY,
  150. label=_("Width:")),
  151. flag=wx.ALIGN_LEFT |
  152. wx.ALIGN_CENTER_VERTICAL,
  153. pos=(row, 0))
  154. width = SpinCtrl(
  155. parent=panel,
  156. id=wx.ID_ANY,
  157. min=0,
  158. max=500,
  159. initial=self.settings.Get(
  160. group='modeler',
  161. key='action',
  162. subkey=(
  163. 'size',
  164. 'width')))
  165. width.SetName('GetValue')
  166. self.winId['modeler:action:size:width'] = width.GetId()
  167. gridSizer.Add(width,
  168. flag=wx.ALIGN_RIGHT |
  169. wx.ALIGN_CENTER_VERTICAL,
  170. pos=(row, 1))
  171. row += 1
  172. gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY,
  173. label=_("Height:")),
  174. flag=wx.ALIGN_LEFT |
  175. wx.ALIGN_CENTER_VERTICAL,
  176. pos=(row, 0))
  177. height = SpinCtrl(
  178. parent=panel,
  179. id=wx.ID_ANY,
  180. min=0,
  181. max=500,
  182. initial=self.settings.Get(
  183. group='modeler',
  184. key='action',
  185. subkey=(
  186. 'size',
  187. 'height')))
  188. height.SetName('GetValue')
  189. self.winId['modeler:action:size:height'] = height.GetId()
  190. gridSizer.Add(height,
  191. flag=wx.ALIGN_RIGHT |
  192. wx.ALIGN_CENTER_VERTICAL,
  193. pos=(row, 1))
  194. gridSizer.AddGrowableCol(0)
  195. sizer.Add(
  196. gridSizer,
  197. proportion=1,
  198. flag=wx.ALL | wx.EXPAND,
  199. border=5)
  200. border.Add(sizer, proportion=0, flag=wx.LEFT |
  201. wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
  202. panel.SetSizer(border)
  203. return panel
  204. def _createDataPage(self, notebook):
  205. """Create notebook page for data settings"""
  206. panel = wx.Panel(parent=notebook, id=wx.ID_ANY)
  207. notebook.AddPage(page=panel, text=_("Data"))
  208. # colors
  209. border = wx.BoxSizer(wx.VERTICAL)
  210. box = StaticBox(parent=panel, id=wx.ID_ANY,
  211. label=" %s " % _("Type"))
  212. sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
  213. gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
  214. row = 0
  215. gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY,
  216. label=_("Raster:")),
  217. flag=wx.ALIGN_LEFT |
  218. wx.ALIGN_CENTER_VERTICAL,
  219. pos=(row, 0))
  220. rColor = csel.ColourSelect(
  221. parent=panel, id=wx.ID_ANY, colour=self.settings.Get(
  222. group='modeler', key='data', subkey=(
  223. 'color', 'raster')), size=globalvar.DIALOG_COLOR_SIZE)
  224. rColor.SetName('GetColour')
  225. self.winId['modeler:data:color:raster'] = rColor.GetId()
  226. gridSizer.Add(rColor,
  227. flag=wx.ALIGN_RIGHT |
  228. wx.ALIGN_CENTER_VERTICAL,
  229. pos=(row, 1))
  230. row += 1
  231. gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY,
  232. label=_("3D raster:")),
  233. flag=wx.ALIGN_LEFT |
  234. wx.ALIGN_CENTER_VERTICAL,
  235. pos=(row, 0))
  236. r3Color = csel.ColourSelect(
  237. parent=panel, id=wx.ID_ANY, colour=self.settings.Get(
  238. group='modeler', key='data', subkey=(
  239. 'color', 'raster3d')), size=globalvar.DIALOG_COLOR_SIZE)
  240. r3Color.SetName('GetColour')
  241. self.winId['modeler:data:color:raster3d'] = r3Color.GetId()
  242. gridSizer.Add(r3Color,
  243. flag=wx.ALIGN_RIGHT |
  244. wx.ALIGN_CENTER_VERTICAL,
  245. pos=(row, 1))
  246. row += 1
  247. gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY,
  248. label=_("Vector:")),
  249. flag=wx.ALIGN_LEFT |
  250. wx.ALIGN_CENTER_VERTICAL,
  251. pos=(row, 0))
  252. vColor = csel.ColourSelect(
  253. parent=panel, id=wx.ID_ANY, colour=self.settings.Get(
  254. group='modeler', key='data', subkey=(
  255. 'color', 'vector')), size=globalvar.DIALOG_COLOR_SIZE)
  256. vColor.SetName('GetColour')
  257. self.winId['modeler:data:color:vector'] = vColor.GetId()
  258. gridSizer.Add(vColor,
  259. flag=wx.ALIGN_RIGHT |
  260. wx.ALIGN_CENTER_VERTICAL,
  261. pos=(row, 1))
  262. row += 1
  263. gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY,
  264. label=_("Table:")),
  265. flag=wx.ALIGN_LEFT |
  266. wx.ALIGN_CENTER_VERTICAL,
  267. pos=(row, 0))
  268. tColor = csel.ColourSelect(
  269. parent=panel, id=wx.ID_ANY, colour=self.settings.Get(
  270. group='modeler', key='data', subkey=(
  271. 'color', 'dbtable')), size=globalvar.DIALOG_COLOR_SIZE)
  272. tColor.SetName('GetColour')
  273. self.winId['modeler:data:color:dbtable'] = tColor.GetId()
  274. gridSizer.Add(tColor,
  275. flag=wx.ALIGN_RIGHT |
  276. wx.ALIGN_CENTER_VERTICAL,
  277. pos=(row, 1))
  278. gridSizer.AddGrowableCol(0)
  279. sizer.Add(
  280. gridSizer,
  281. proportion=1,
  282. flag=wx.ALL | wx.EXPAND,
  283. border=5)
  284. border.Add(sizer, proportion=0, flag=wx.LEFT |
  285. wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
  286. # size
  287. box = StaticBox(parent=panel, id=wx.ID_ANY,
  288. label=" %s " % _("Shape size"))
  289. sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
  290. gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
  291. row = 0
  292. gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY,
  293. label=_("Width:")),
  294. flag=wx.ALIGN_LEFT |
  295. wx.ALIGN_CENTER_VERTICAL,
  296. pos=(row, 0))
  297. width = SpinCtrl(
  298. parent=panel,
  299. id=wx.ID_ANY,
  300. min=0,
  301. max=500,
  302. initial=self.settings.Get(
  303. group='modeler',
  304. key='data',
  305. subkey=(
  306. 'size',
  307. 'width')))
  308. width.SetName('GetValue')
  309. self.winId['modeler:data:size:width'] = width.GetId()
  310. gridSizer.Add(width,
  311. flag=wx.ALIGN_RIGHT |
  312. wx.ALIGN_CENTER_VERTICAL,
  313. pos=(row, 1))
  314. row += 1
  315. gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY,
  316. label=_("Height:")),
  317. flag=wx.ALIGN_LEFT |
  318. wx.ALIGN_CENTER_VERTICAL,
  319. pos=(row, 0))
  320. height = SpinCtrl(
  321. parent=panel,
  322. id=wx.ID_ANY,
  323. min=0,
  324. max=500,
  325. initial=self.settings.Get(
  326. group='modeler',
  327. key='data',
  328. subkey=(
  329. 'size',
  330. 'height')))
  331. height.SetName('GetValue')
  332. self.winId['modeler:data:size:height'] = height.GetId()
  333. gridSizer.Add(height,
  334. flag=wx.ALIGN_RIGHT |
  335. wx.ALIGN_CENTER_VERTICAL,
  336. pos=(row, 1))
  337. gridSizer.AddGrowableCol(0)
  338. sizer.Add(
  339. gridSizer,
  340. proportion=1,
  341. flag=wx.ALL | wx.EXPAND,
  342. border=5)
  343. border.Add(sizer, proportion=0, flag=wx.LEFT |
  344. wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
  345. panel.SetSizer(border)
  346. return panel
  347. def _createLoopPage(self, notebook):
  348. """Create notebook page for loop settings"""
  349. panel = wx.Panel(parent=notebook, id=wx.ID_ANY)
  350. notebook.AddPage(page=panel, text=_("Loop"))
  351. # colors
  352. border = wx.BoxSizer(wx.VERTICAL)
  353. box = StaticBox(parent=panel, id=wx.ID_ANY,
  354. label=" %s " % _("Color"))
  355. sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
  356. gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
  357. row = 0
  358. gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY,
  359. label=_("Valid:")),
  360. flag=wx.ALIGN_LEFT |
  361. wx.ALIGN_CENTER_VERTICAL,
  362. pos=(row, 0))
  363. vColor = csel.ColourSelect(
  364. parent=panel, id=wx.ID_ANY, colour=self.settings.Get(
  365. group='modeler', key='loop', subkey=(
  366. 'color', 'valid')), size=globalvar.DIALOG_COLOR_SIZE)
  367. vColor.SetName('GetColour')
  368. self.winId['modeler:loop:color:valid'] = vColor.GetId()
  369. gridSizer.Add(vColor,
  370. flag=wx.ALIGN_RIGHT |
  371. wx.ALIGN_CENTER_VERTICAL,
  372. pos=(row, 1))
  373. gridSizer.AddGrowableCol(0)
  374. sizer.Add(
  375. gridSizer,
  376. proportion=1,
  377. flag=wx.ALL | wx.EXPAND,
  378. border=5)
  379. border.Add(sizer, proportion=0, flag=wx.LEFT |
  380. wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
  381. # size
  382. box = StaticBox(parent=panel, id=wx.ID_ANY,
  383. label=" %s " % _("Shape size"))
  384. sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
  385. gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
  386. row = 0
  387. gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY,
  388. label=_("Width:")),
  389. flag=wx.ALIGN_LEFT |
  390. wx.ALIGN_CENTER_VERTICAL,
  391. pos=(row, 0))
  392. width = SpinCtrl(
  393. parent=panel,
  394. id=wx.ID_ANY,
  395. min=0,
  396. max=500,
  397. initial=self.settings.Get(
  398. group='modeler',
  399. key='loop',
  400. subkey=(
  401. 'size',
  402. 'width')))
  403. width.SetName('GetValue')
  404. self.winId['modeler:loop:size:width'] = width.GetId()
  405. gridSizer.Add(width,
  406. flag=wx.ALIGN_RIGHT |
  407. wx.ALIGN_CENTER_VERTICAL,
  408. pos=(row, 1))
  409. row += 1
  410. gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY,
  411. label=_("Height:")),
  412. flag=wx.ALIGN_LEFT |
  413. wx.ALIGN_CENTER_VERTICAL,
  414. pos=(row, 0))
  415. height = SpinCtrl(
  416. parent=panel,
  417. id=wx.ID_ANY,
  418. min=0,
  419. max=500,
  420. initial=self.settings.Get(
  421. group='modeler',
  422. key='loop',
  423. subkey=(
  424. 'size',
  425. 'height')))
  426. height.SetName('GetValue')
  427. self.winId['modeler:loop:size:height'] = height.GetId()
  428. gridSizer.Add(height,
  429. flag=wx.ALIGN_RIGHT |
  430. wx.ALIGN_CENTER_VERTICAL,
  431. pos=(row, 1))
  432. gridSizer.AddGrowableCol(0)
  433. sizer.Add(
  434. gridSizer,
  435. proportion=1,
  436. flag=wx.ALL | wx.EXPAND,
  437. border=5)
  438. border.Add(sizer, proportion=0, flag=wx.LEFT |
  439. wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
  440. panel.SetSizer(border)
  441. return panel
  442. def _createCommentPage(self, notebook):
  443. """Create notebook page for comment settings"""
  444. panel = wx.Panel(parent=notebook, id=wx.ID_ANY)
  445. notebook.AddPage(page=panel, text=_("Comment"))
  446. # colors
  447. border = wx.BoxSizer(wx.VERTICAL)
  448. box = StaticBox(parent=panel, id=wx.ID_ANY,
  449. label=" %s " % _("Color"))
  450. sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
  451. gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
  452. row = 0
  453. gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY,
  454. label=_("Valid:")),
  455. flag=wx.ALIGN_LEFT |
  456. wx.ALIGN_CENTER_VERTICAL,
  457. pos=(row, 0))
  458. vColor = csel.ColourSelect(
  459. parent=panel,
  460. id=wx.ID_ANY,
  461. colour=self.settings.Get(
  462. group='modeler',
  463. key='comment',
  464. subkey='color'),
  465. size=globalvar.DIALOG_COLOR_SIZE)
  466. vColor.SetName('GetColour')
  467. self.winId['modeler:comment:color'] = vColor.GetId()
  468. gridSizer.Add(vColor,
  469. flag=wx.ALIGN_RIGHT |
  470. wx.ALIGN_CENTER_VERTICAL,
  471. pos=(row, 1))
  472. gridSizer.AddGrowableCol(0)
  473. sizer.Add(
  474. gridSizer,
  475. proportion=1,
  476. flag=wx.ALL | wx.EXPAND,
  477. border=5)
  478. border.Add(sizer, proportion=0, flag=wx.LEFT |
  479. wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
  480. # size
  481. box = StaticBox(parent=panel, id=wx.ID_ANY,
  482. label=" %s " % _("Shape size"))
  483. sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
  484. gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
  485. row = 0
  486. gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY,
  487. label=_("Width:")),
  488. flag=wx.ALIGN_LEFT |
  489. wx.ALIGN_CENTER_VERTICAL,
  490. pos=(row, 0))
  491. width = SpinCtrl(
  492. parent=panel,
  493. id=wx.ID_ANY,
  494. min=0,
  495. max=500,
  496. initial=self.settings.Get(
  497. group='modeler',
  498. key='comment',
  499. subkey=(
  500. 'size',
  501. 'width')))
  502. width.SetName('GetValue')
  503. self.winId['modeler:comment:size:width'] = width.GetId()
  504. gridSizer.Add(width,
  505. flag=wx.ALIGN_RIGHT |
  506. wx.ALIGN_CENTER_VERTICAL,
  507. pos=(row, 1))
  508. row += 1
  509. gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY,
  510. label=_("Height:")),
  511. flag=wx.ALIGN_LEFT |
  512. wx.ALIGN_CENTER_VERTICAL,
  513. pos=(row, 0))
  514. height = SpinCtrl(
  515. parent=panel,
  516. id=wx.ID_ANY,
  517. min=0,
  518. max=500,
  519. initial=self.settings.Get(
  520. group='modeler',
  521. key='comment',
  522. subkey=(
  523. 'size',
  524. 'height')))
  525. height.SetName('GetValue')
  526. self.winId['modeler:comment:size:height'] = height.GetId()
  527. gridSizer.Add(height,
  528. flag=wx.ALIGN_RIGHT |
  529. wx.ALIGN_CENTER_VERTICAL,
  530. pos=(row, 1))
  531. gridSizer.AddGrowableCol(0)
  532. sizer.Add(
  533. gridSizer,
  534. proportion=1,
  535. flag=wx.ALL | wx.EXPAND,
  536. border=5)
  537. border.Add(sizer, proportion=0, flag=wx.LEFT |
  538. wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
  539. panel.SetSizer(border)
  540. return panel
  541. def OnApply(self, event):
  542. """Button 'Apply' pressed"""
  543. PreferencesBaseDialog.OnApply(self, event)
  544. self.parent.GetModel().Update()
  545. self.parent.GetCanvas().Refresh()
  546. def OnSave(self, event):
  547. """Button 'Save' pressed"""
  548. PreferencesBaseDialog.OnSave(self, event)
  549. self.parent.GetModel().Update()
  550. self.parent.GetCanvas().Refresh()
  551. class PropertiesDialog(wx.Dialog):
  552. """Model properties dialog
  553. """
  554. def __init__(self, parent, id=wx.ID_ANY,
  555. title=_('Model properties'),
  556. size=(350, 400),
  557. style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER):
  558. wx.Dialog.__init__(self, parent, id, title, size=size,
  559. style=style)
  560. self.metaBox = StaticBox(parent=self, id=wx.ID_ANY,
  561. label=" %s " % _("Metadata"))
  562. self.cmdBox = StaticBox(parent=self, id=wx.ID_ANY,
  563. label=" %s " % _("Commands"))
  564. self.name = TextCtrl(parent=self, id=wx.ID_ANY,
  565. size=(300, 25))
  566. self.desc = TextCtrl(parent=self, id=wx.ID_ANY,
  567. style=wx.TE_MULTILINE,
  568. size=(300, 50))
  569. self.author = TextCtrl(parent=self, id=wx.ID_ANY,
  570. size=(300, 25))
  571. # commands
  572. self.overwrite = wx.CheckBox(parent=self, id=wx.ID_ANY, label=_(
  573. "Allow output files to overwrite existing files"))
  574. self.overwrite.SetValue(
  575. UserSettings.Get(
  576. group='cmd',
  577. key='overwrite',
  578. subkey='enabled'))
  579. # buttons
  580. self.btnOk = Button(self, wx.ID_OK)
  581. self.btnCancel = Button(self, wx.ID_CANCEL)
  582. self.btnOk.SetDefault()
  583. self.btnOk.SetToolTip(_("Apply properties"))
  584. self.btnOk.SetDefault()
  585. self.btnCancel.SetToolTip(_("Close dialog and ignore changes"))
  586. self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
  587. self._layout()
  588. def _layout(self):
  589. metaSizer = wx.StaticBoxSizer(self.metaBox, wx.VERTICAL)
  590. gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
  591. gridSizer.Add(StaticText(parent=self, id=wx.ID_ANY,
  592. label=_("Name:")),
  593. flag=wx.ALIGN_LEFT |
  594. wx.ALIGN_CENTER_VERTICAL,
  595. pos=(0, 0))
  596. gridSizer.Add(self.name,
  597. flag=wx.ALIGN_LEFT |
  598. wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
  599. pos=(0, 1))
  600. gridSizer.Add(StaticText(parent=self, id=wx.ID_ANY,
  601. label=_("Description:")),
  602. flag=wx.ALIGN_LEFT |
  603. wx.ALIGN_CENTER_VERTICAL,
  604. pos=(1, 0))
  605. gridSizer.Add(self.desc,
  606. flag=wx.ALIGN_LEFT |
  607. wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
  608. pos=(1, 1))
  609. gridSizer.Add(StaticText(parent=self, id=wx.ID_ANY,
  610. label=_("Author(s):")),
  611. flag=wx.ALIGN_LEFT |
  612. wx.ALIGN_CENTER_VERTICAL,
  613. pos=(2, 0))
  614. gridSizer.Add(self.author,
  615. flag=wx.ALIGN_LEFT |
  616. wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
  617. pos=(2, 1))
  618. gridSizer.AddGrowableCol(1)
  619. gridSizer.AddGrowableRow(1)
  620. metaSizer.Add(gridSizer, proportion=1, flag=wx.EXPAND)
  621. cmdSizer = wx.StaticBoxSizer(self.cmdBox, wx.VERTICAL)
  622. cmdSizer.Add(self.overwrite,
  623. flag=wx.EXPAND | wx.ALL, border=3)
  624. btnStdSizer = wx.StdDialogButtonSizer()
  625. btnStdSizer.AddButton(self.btnCancel)
  626. btnStdSizer.AddButton(self.btnOk)
  627. btnStdSizer.Realize()
  628. mainSizer = wx.BoxSizer(wx.VERTICAL)
  629. mainSizer.Add(metaSizer, proportion=1,
  630. flag=wx.EXPAND | wx.ALL, border=5)
  631. mainSizer.Add(
  632. cmdSizer,
  633. proportion=0,
  634. flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
  635. border=5)
  636. mainSizer.Add(btnStdSizer, proportion=0,
  637. flag=wx.EXPAND | wx.ALL, border=5)
  638. self.SetSizer(mainSizer)
  639. mainSizer.Fit(self)
  640. def OnCloseWindow(self, event):
  641. self.Hide()
  642. def GetValues(self):
  643. """Get values"""
  644. return {'name': self.name.GetValue(),
  645. 'description': self.desc.GetValue(),
  646. 'author': self.author.GetValue(),
  647. 'overwrite': self.overwrite.IsChecked()}
  648. def Init(self, prop):
  649. """Initialize dialog"""
  650. self.name.SetValue(prop['name'])
  651. self.desc.SetValue(prop['description'])
  652. self.author.SetValue(prop['author'])
  653. if 'overwrite' in prop:
  654. self.overwrite.SetValue(prop['overwrite'])