preferences.py 26 KB

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