preferences.py 27 KB

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