1""" 2@package nviz.preferences 3 4@brief Nviz (3D view) preferences window 5 6Classes: 7 - preferences::NvizPreferencesDialog 8 9(C) 2008-2011 by the GRASS Development Team 10 11This program is free software under the GNU General Public License 12(>=v2). Read the file COPYING that comes with GRASS for details. 13 14@author Martin Landa <landa.martin gmail.com> (Google SoC 2008/2010) 15@author Enhancements by Michael Barton <michael.barton asu.edu> 16@author Anna Kratochvilova <KratochAnna seznam.cz> (Google SoC 2011) 17""" 18 19import os 20import copy 21 22import wx 23import wx.lib.colourselect as csel 24 25from core import globalvar 26from core.settings import UserSettings 27from gui_core.preferences import PreferencesBaseDialog 28from gui_core.wrap import SpinCtrl, Button, CheckBox, StaticText, \ 29 StaticBox 30 31 32class NvizPreferencesDialog(PreferencesBaseDialog): 33 """Nviz preferences dialog""" 34 35 def __init__(self, parent, giface, title=_("3D view default settings"), 36 settings=UserSettings): 37 PreferencesBaseDialog.__init__( 38 self, 39 parent=parent, 40 title=title, 41 giface=giface, 42 settings=settings) 43 self.SetIcon( 44 wx.Icon( 45 os.path.join( 46 globalvar.ICONDIR, 47 'grass_nviz.ico'), 48 wx.BITMAP_TYPE_ICO)) 49 50 self.toolWin = self.parent.nviz 51 52 # create notebook pages 53 self._createViewPage(self.notebook) 54 self._createFlyPage(self.notebook) 55 self._createLightPage(self.notebook) 56 self._createSurfacePage(self.notebook) 57 self._createVectorPage(self.notebook) 58 59 self.SetMinSize(self.GetBestSize()) 60 self.SetSize(self.size) 61 self.btnDefault.SetToolTip( 62 _("Revert settings to default, changes are not applied")) 63 64 def _createViewPage(self, notebook): 65 """Create notebook page for view settings""" 66 panel = wx.Panel(parent=notebook, id=wx.ID_ANY) 67 68 notebook.AddPage(page=panel, 69 text=" %s " % _("View")) 70 71 pageSizer = wx.BoxSizer(wx.VERTICAL) 72 73 box = StaticBox(parent=panel, id=wx.ID_ANY, 74 label=" %s " % (_("View"))) 75 boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL) 76 gridSizer = wx.GridBagSizer(vgap=3, hgap=3) 77 row = 0 78 # perspective 79 pvals = UserSettings.Get(group='nviz', key='view', subkey='persp') 80 ipvals = UserSettings.Get( 81 group='nviz', 82 key='view', 83 subkey='persp', 84 settings_type='internal') 85 gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY, 86 label=_("Perspective:")), 87 pos=(row, 0), flag=wx.ALIGN_CENTER_VERTICAL) 88 gridSizer.Add( 89 StaticText( 90 parent=panel, id=wx.ID_ANY, label=_("value:")), pos=( 91 row, 1), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT) 92 93 pval = SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1), 94 initial=pvals['value'], 95 min=ipvals['min'], 96 max=ipvals['max']) 97 self.winId['nviz:view:persp:value'] = pval.GetId() 98 gridSizer.Add(pval, pos=(row, 2), 99 flag=wx.ALIGN_CENTER_VERTICAL) 100 101 gridSizer.Add( 102 StaticText( 103 parent=panel, id=wx.ID_ANY, label=_("step:")), pos=( 104 row, 3), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT) 105 106 pstep = SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1), 107 initial=pvals['step'], 108 min=ipvals['min'], 109 max=ipvals['max'] - 1) 110 self.winId['nviz:view:persp:step'] = pstep.GetId() 111 gridSizer.Add(pstep, pos=(row, 4), 112 flag=wx.ALIGN_CENTER_VERTICAL) 113 row += 1 114 115 # position 116 posvals = UserSettings.Get(group='nviz', key='view', subkey='position') 117 gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY, 118 label=_("Position:")), 119 pos=(row, 0), flag=wx.ALIGN_CENTER_VERTICAL) 120 gridSizer.Add( 121 StaticText( 122 parent=panel, id=wx.ID_ANY, label=_("x:")), pos=( 123 row, 1), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT) 124 125 px = SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1), 126 initial=posvals['x'] * 100, 127 min=0, 128 max=100) 129 self.winId['nviz:view:position:x'] = px.GetId() 130 gridSizer.Add(px, pos=(row, 2), 131 flag=wx.ALIGN_CENTER_VERTICAL) 132 133 gridSizer.Add( 134 StaticText( 135 parent=panel, id=wx.ID_ANY, label="y:"), pos=( 136 row, 3), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT) 137 138 py = SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1), 139 initial=posvals['y'] * 100, 140 min=0, 141 max=100) 142 self.winId['nviz:view:position:y'] = py.GetId() 143 gridSizer.Add(py, pos=(row, 4), 144 flag=wx.ALIGN_CENTER_VERTICAL) 145 row += 1 146 147 # height is computed dynamically 148 149 # twist 150 tvals = UserSettings.Get(group='nviz', key='view', subkey='twist') 151 itvals = UserSettings.Get( 152 group='nviz', 153 key='view', 154 subkey='twist', 155 settings_type='internal') 156 gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY, 157 label=_("Twist:")), 158 pos=(row, 0), flag=wx.ALIGN_CENTER_VERTICAL) 159 gridSizer.Add( 160 StaticText( 161 parent=panel, id=wx.ID_ANY, label=_("value:")), pos=( 162 row, 1), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT) 163 164 tval = SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1), 165 initial=tvals['value'], 166 min=itvals['min'], 167 max=itvals['max']) 168 self.winId['nviz:view:twist:value'] = tval.GetId() 169 gridSizer.Add(tval, pos=(row, 2), 170 flag=wx.ALIGN_CENTER_VERTICAL) 171 row += 1 172 173 # z-exag 174 zvals = UserSettings.Get(group='nviz', key='view', subkey='z-exag') 175 gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY, 176 label=_("Z-exag:")), 177 pos=(row, 0), flag=wx.ALIGN_CENTER_VERTICAL) 178 gridSizer.Add( 179 StaticText( 180 parent=panel, id=wx.ID_ANY, label=_("value:")), pos=( 181 row, 1), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT) 182 183 zval = SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1), 184 initial=zvals['value'], 185 min=-1e6, 186 max=1e6) 187 self.winId['nviz:view:z-exag:value'] = zval.GetId() 188 gridSizer.Add(zval, pos=(row, 2), 189 flag=wx.ALIGN_CENTER_VERTICAL) 190 191 boxSizer.Add(gridSizer, proportion=1, 192 flag=wx.ALL | wx.EXPAND, border=3) 193 pageSizer.Add(boxSizer, proportion=0, 194 flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, 195 border=3) 196 197 box = StaticBox(parent=panel, id=wx.ID_ANY, 198 label=" %s " % (_("Image Appearance"))) 199 boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL) 200 gridSizer = wx.GridBagSizer(vgap=3, hgap=3) 201 202 # background color 203 gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY, 204 label=_("Background color:")), 205 pos=(0, 0), flag=wx.ALIGN_CENTER_VERTICAL) 206 207 color = csel.ColourSelect( 208 panel, 209 id=wx.ID_ANY, 210 colour=UserSettings.Get( 211 group='nviz', 212 key='view', 213 subkey=[ 214 'background', 215 'color']), 216 size=globalvar.DIALOG_COLOR_SIZE) 217 color.SetName('GetColour') 218 self.winId['nviz:view:background:color'] = color.GetId() 219 gridSizer.Add(color, pos=(0, 1)) 220 221 gridSizer.AddGrowableCol(0) 222 boxSizer.Add(gridSizer, proportion=1, 223 flag=wx.ALL | wx.EXPAND, border=5) 224 pageSizer.Add(boxSizer, proportion=0, 225 flag=wx.EXPAND | wx.ALL, 226 border=5) 227 228 panel.SetSizer(pageSizer) 229 230 return panel 231 232 def _createFlyPage(self, notebook): 233 """Create notebook page for view settings""" 234 panel = wx.Panel(parent=notebook, id=wx.ID_ANY) 235 236 notebook.AddPage(page=panel, 237 text=" %s " % _("Fly-through")) 238 pageSizer = wx.BoxSizer(wx.VERTICAL) 239 # fly throuhg mode 240 box = StaticBox(parent=panel, id=wx.ID_ANY, 241 label=" %s " % (_("Fly-through mode"))) 242 boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL) 243 gridSizer = wx.GridBagSizer(vgap=3, hgap=3) 244 245 # move exag 246 gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY, 247 label=_("Move exag:")), 248 pos=(0, 0), flag=wx.ALIGN_CENTER_VERTICAL) 249 250 moveExag = SpinCtrl( 251 panel, id=wx.ID_ANY, min=1, max=20, initial=UserSettings.Get( 252 group='nviz', key='fly', subkey=[ 253 'exag', 'move']), size=( 254 65, -1)) 255 self.winId['nviz:fly:exag:move'] = moveExag.GetId() 256 gridSizer.Add(moveExag, pos=(0, 1)) 257 258 # turn exag 259 gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY, 260 label=_("Turn exag:")), 261 pos=(1, 0), flag=wx.ALIGN_CENTER_VERTICAL) 262 263 turnExag = SpinCtrl( 264 panel, id=wx.ID_ANY, min=1, max=20, initial=UserSettings.Get( 265 group='nviz', key='fly', subkey=[ 266 'exag', 'turn']), size=( 267 65, -1)) 268 self.winId['nviz:fly:exag:turn'] = turnExag.GetId() 269 gridSizer.Add(turnExag, pos=(1, 1)) 270 271 gridSizer.AddGrowableCol(0) 272 boxSizer.Add(gridSizer, proportion=1, 273 flag=wx.ALL | wx.EXPAND, border=5) 274 pageSizer.Add(boxSizer, proportion=0, 275 flag=wx.EXPAND | wx.ALL, 276 border=5) 277 278 panel.SetSizer(pageSizer) 279 280 return panel 281 282 def _createLightPage(self, notebook): 283 """Create notebook page for light settings""" 284 panel = wx.Panel(parent=notebook, id=wx.ID_ANY) 285 286 notebook.AddPage(page=panel, 287 text=" %s " % _("Lighting")) 288 289 pageSizer = wx.BoxSizer(wx.VERTICAL) 290 291 box = StaticBox(parent=panel, id=wx.ID_ANY, 292 label=" %s " % (_("Light"))) 293 boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL) 294 gridSizer = wx.GridBagSizer(vgap=3, hgap=3) 295 296 # position 297 posvals = UserSettings.Get( 298 group='nviz', key='light', subkey='position') 299 gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY, 300 label=_("Position:")), 301 pos=(0, 0), flag=wx.ALIGN_CENTER_VERTICAL) 302 gridSizer.Add( 303 StaticText( 304 parent=panel, id=wx.ID_ANY, label=_("x:")), pos=( 305 0, 1), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT) 306 307 px = SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1), 308 initial=posvals['x'] * 100, 309 min=-100, 310 max=100) 311 self.winId['nviz:light:position:x'] = px.GetId() 312 gridSizer.Add(px, pos=(0, 2), 313 flag=wx.ALIGN_CENTER_VERTICAL) 314 315 gridSizer.Add( 316 StaticText( 317 parent=panel, id=wx.ID_ANY, label="y:"), pos=( 318 0, 3), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT) 319 320 py = SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1), 321 initial=posvals['y'] * 100, 322 min=-100, 323 max=100) 324 self.winId['nviz:light:position:y'] = py.GetId() 325 gridSizer.Add(py, pos=(0, 4), 326 flag=wx.ALIGN_CENTER_VERTICAL) 327 328 gridSizer.Add( 329 StaticText( 330 parent=panel, id=wx.ID_ANY, label=_("z:")), pos=( 331 0, 5), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT) 332 333 pz = SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1), 334 initial=posvals['z'], 335 min=0, 336 max=100) 337 self.winId['nviz:light:position:z'] = pz.GetId() 338 gridSizer.Add(pz, pos=(0, 6), 339 flag=wx.ALIGN_CENTER_VERTICAL) 340 341 # brightness 342 brightval = UserSettings.Get( 343 group='nviz', key='light', subkey='bright') 344 gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY, 345 label=_("Brightness:")), 346 pos=(1, 0), flag=wx.ALIGN_CENTER_VERTICAL) 347 348 bright = SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1), 349 initial=brightval, 350 min=0, 351 max=100) 352 self.winId['nviz:light:bright'] = bright.GetId() 353 gridSizer.Add(bright, pos=(1, 2), 354 flag=wx.ALIGN_CENTER_VERTICAL) 355 356 # ambient 357 ambval = UserSettings.Get(group='nviz', key='light', subkey='ambient') 358 gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY, 359 label=_("Ambient:")), 360 pos=(2, 0), flag=wx.ALIGN_CENTER_VERTICAL) 361 362 amb = SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1), 363 initial=ambval, 364 min=0, 365 max=100) 366 self.winId['nviz:light:ambient'] = amb.GetId() 367 gridSizer.Add(amb, pos=(2, 2), 368 flag=wx.ALIGN_CENTER_VERTICAL) 369 370 # light color 371 gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY, 372 label=_("Color:")), 373 pos=(3, 0), flag=wx.ALIGN_CENTER_VERTICAL) 374 375 color = csel.ColourSelect( 376 panel, id=wx.ID_ANY, colour=UserSettings.Get( 377 group='nviz', key='light', subkey='color'), 378 size=globalvar.DIALOG_COLOR_SIZE) 379 color.SetName('GetColour') 380 self.winId['nviz:light:color'] = color.GetId() 381 gridSizer.Add(color, pos=(3, 2)) 382 383 boxSizer.Add(gridSizer, proportion=1, 384 flag=wx.ALL | wx.EXPAND, border=5) 385 pageSizer.Add(boxSizer, proportion=0, 386 flag=wx.EXPAND | wx.ALL, 387 border=5) 388 389 panel.SetSizer(pageSizer) 390 391 return panel 392 393 def _createSurfacePage(self, notebook): 394 """Create notebook page for surface settings""" 395 panel = wx.Panel(parent=notebook, id=wx.ID_ANY) 396 397 notebook.AddPage(page=panel, 398 text=" %s " % _("Surface")) 399 400 pageSizer = wx.BoxSizer(wx.VERTICAL) 401 402 # draw 403 404 box = StaticBox(parent=panel, id=wx.ID_ANY, 405 label=" %s " % (_("Draw"))) 406 boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL) 407 gridSizer = wx.GridBagSizer(vgap=3, hgap=3) 408 409 # mode 410 gridSizer.Add( 411 StaticText( 412 parent=panel, 413 id=wx.ID_ANY, 414 label=_("Mode:")), 415 flag=wx.ALIGN_CENTER_VERTICAL, 416 pos=( 417 0, 418 0)) 419 mode = wx.Choice(parent=panel, id=wx.ID_ANY, size=(-1, -1), 420 choices=[_("coarse"), 421 _("fine"), 422 _("both")]) 423 self.winId['nviz:surface:draw:mode'] = mode.GetId() 424 mode.SetName('GetSelection') 425 mode.SetSelection(UserSettings.Get(group='nviz', key='surface', 426 subkey=['draw', 'mode'])) 427 gridSizer.Add(mode, flag=wx.ALIGN_CENTER_VERTICAL, 428 pos=(0, 1)) 429 430 # fine 431 gridSizer.Add( 432 StaticText( 433 parent=panel, 434 id=wx.ID_ANY, 435 label=_("Fine mode:")), 436 flag=wx.ALIGN_CENTER_VERTICAL, 437 pos=( 438 1, 439 0)) 440 res = UserSettings.Get( 441 group='nviz', key='surface', subkey=[ 442 'draw', 'res-fine']) 443 gridSizer.Add( 444 StaticText( 445 parent=panel, 446 id=wx.ID_ANY, 447 label=_("resolution:")), 448 flag=wx.ALIGN_CENTER_VERTICAL, 449 pos=( 450 1, 451 1)) 452 fine = SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1), 453 initial=res, 454 min=1, 455 max=100) 456 self.winId['nviz:surface:draw:res-fine'] = fine.GetId() 457 458 gridSizer.Add(fine, flag=wx.ALIGN_CENTER_VERTICAL, 459 pos=(1, 2)) 460 461 # coarse 462 gridSizer.Add( 463 StaticText( 464 parent=panel, 465 id=wx.ID_ANY, 466 label=_("Coarse mode:")), 467 flag=wx.ALIGN_CENTER_VERTICAL, 468 pos=( 469 2, 470 0)) 471 res = UserSettings.Get( 472 group='nviz', key='surface', subkey=[ 473 'draw', 'res-coarse']) 474 gridSizer.Add( 475 StaticText( 476 parent=panel, 477 id=wx.ID_ANY, 478 label=_("resolution:")), 479 flag=wx.ALIGN_CENTER_VERTICAL, 480 pos=( 481 2, 482 1)) 483 coarse = SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1), 484 initial=res, 485 min=1, 486 max=100) 487 self.winId['nviz:surface:draw:res-coarse'] = coarse.GetId() 488 489 gridSizer.Add(coarse, flag=wx.ALIGN_CENTER_VERTICAL, 490 pos=(2, 2)) 491 # style 492 gridSizer.Add( 493 StaticText( 494 parent=panel, 495 id=wx.ID_ANY, 496 label=_("style:")), 497 flag=wx.ALIGN_CENTER_VERTICAL, 498 pos=( 499 3, 500 1)) 501 style = wx.Choice(parent=panel, id=wx.ID_ANY, size=(-1, -1), 502 choices=[_("wire"), 503 _("surface")]) 504 self.winId['nviz:surface:draw:style'] = style.GetId() 505 style.SetName('GetSelection') 506 style.SetSelection(UserSettings.Get(group='nviz', key='surface', 507 subkey=['draw', 'style'])) 508 self.winId['nviz:surface:draw:style'] = style.GetId() 509 510 gridSizer.Add(style, flag=wx.ALIGN_CENTER_VERTICAL, 511 pos=(3, 2)) 512 # wire color 513 gridSizer.Add( 514 StaticText( 515 parent=panel, 516 id=wx.ID_ANY, 517 label=_("wire color:")), 518 flag=wx.ALIGN_CENTER_VERTICAL, 519 pos=( 520 4, 521 1)) 522 color = csel.ColourSelect( 523 panel, id=wx.ID_ANY, colour=UserSettings.Get( 524 group='nviz', key='surface', subkey=[ 525 'draw', 'wire-color']), size=globalvar.DIALOG_COLOR_SIZE) 526 color.SetName('GetColour') 527 self.winId['nviz:surface:draw:wire-color'] = color.GetId() 528 gridSizer.Add(color, flag=wx.ALIGN_CENTER_VERTICAL, 529 pos=(4, 2)) 530 531 boxSizer.Add(gridSizer, proportion=1, 532 flag=wx.ALL | wx.EXPAND, border=5) 533 pageSizer.Add(boxSizer, proportion=0, 534 flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, 535 border=5) 536 537 panel.SetSizer(pageSizer) 538 539 return panel 540 541 def _createVectorPage(self, notebook): 542 """Create notebook page for vector settings""" 543 panel = wx.Panel(parent=notebook, id=wx.ID_ANY) 544 545 notebook.AddPage(page=panel, 546 text=" %s " % _("Vector")) 547 548 pageSizer = wx.BoxSizer(wx.VERTICAL) 549 550 # vector lines 551 box = StaticBox(parent=panel, id=wx.ID_ANY, 552 label=" %s " % (_("Vector lines"))) 553 boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL) 554 gridSizer = wx.GridBagSizer(vgap=3, hgap=3) 555 556 row = 0 557 # icon size 558 gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY, 559 label=_("Width:")), 560 pos=(row, 0), flag=wx.ALIGN_CENTER_VERTICAL) 561 562 iwidth = SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1), 563 initial=12, 564 min=1, 565 max=100) 566 self.winId['nviz:vector:lines:width'] = iwidth.GetId() 567 iwidth.SetValue(UserSettings.Get(group='nviz', key='vector', 568 subkey=['lines', 'width'])) 569 gridSizer.Add(iwidth, pos=(row, 1), 570 flag=wx.ALIGN_CENTER_VERTICAL) 571 572 # icon color 573 gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY, 574 label=_("Color:")), 575 pos=(row, 4), flag=wx.ALIGN_CENTER_VERTICAL) 576 icolor = csel.ColourSelect(panel, id=wx.ID_ANY, 577 size=globalvar.DIALOG_COLOR_SIZE) 578 icolor.SetName('GetColour') 579 self.winId['nviz:vector:lines:color'] = icolor.GetId() 580 icolor.SetColour(UserSettings.Get(group='nviz', key='vector', 581 subkey=['lines', 'color'])) 582 gridSizer.Add(icolor, flag=wx.ALIGN_CENTER_VERTICAL, 583 pos=(row, 5)) 584 boxSizer.Add(gridSizer, proportion=1, 585 flag=wx.ALL | wx.EXPAND, border=5) 586 pageSizer.Add(boxSizer, proportion=0, 587 flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, 588 border=5) 589 590 # vector points 591 box = StaticBox(parent=panel, id=wx.ID_ANY, 592 label=" %s " % (_("Vector points"))) 593 boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL) 594 gridSizer = wx.GridBagSizer(vgap=3, hgap=5) 595 596 row = 0 597 # icon size 598 autosize = CheckBox(parent=panel, label=_("Automatic size")) 599 autosize.SetToolTip(_("Icon size is set automatically based on landscape dimensions.")) 600 gridSizer.Add(autosize, pos=(row, 0), flag=wx.ALIGN_CENTER_VERTICAL) 601 self.winId['nviz:vector:points:autosize'] = autosize.GetId() 602 autosize.SetValue(UserSettings.Get(group='nviz', key='vector', 603 subkey=['points', 'autosize'])) 604 605 row += 1 606 gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY, 607 label=_("Size:")), 608 pos=(row, 0), flag=wx.ALIGN_CENTER_VERTICAL) 609 610 isize = SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1), 611 initial=100, 612 min=1, 613 max=1e6) 614 self.winId['nviz:vector:points:size'] = isize.GetId() 615 isize.SetValue(UserSettings.Get(group='nviz', key='vector', 616 subkey=['points', 'size'])) 617 gridSizer.Add(isize, pos=(row, 1), 618 flag=wx.ALIGN_CENTER_VERTICAL) 619 620 # icon symbol 621 row += 1 622 gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY, 623 label=_("Marker:")), 624 pos=(row, 0), flag=wx.ALIGN_CENTER_VERTICAL) 625 isym = wx.Choice( 626 parent=panel, id=wx.ID_ANY, size=(100, -1), 627 choices=UserSettings.Get( 628 group='nviz', key='vector', subkey=['points', 'marker'], 629 settings_type='internal')) 630 isym.SetName("GetSelection") 631 self.winId['nviz:vector:points:marker'] = isym.GetId() 632 isym.SetSelection(UserSettings.Get(group='nviz', key='vector', 633 subkey=['points', 'marker'])) 634 gridSizer.Add(isym, flag=wx.ALIGN_CENTER_VERTICAL, 635 pos=(row, 1)) 636 637 # icon color 638 row += 1 639 gridSizer.Add(StaticText(parent=panel, id=wx.ID_ANY, 640 label=_("Color:")), 641 pos=(row, 0), flag=wx.ALIGN_CENTER_VERTICAL) 642 icolor = csel.ColourSelect(panel, id=wx.ID_ANY, 643 size=globalvar.DIALOG_COLOR_SIZE) 644 icolor.SetName('GetColour') 645 self.winId['nviz:vector:points:color'] = icolor.GetId() 646 icolor.SetColour(UserSettings.Get(group='nviz', key='vector', 647 subkey=['points', 'color'])) 648 gridSizer.Add(icolor, flag=wx.ALIGN_CENTER_VERTICAL, 649 pos=(row, 1)) 650 651 boxSizer.Add(gridSizer, proportion=1, 652 flag=wx.ALL | wx.EXPAND, border=5) 653 pageSizer.Add(boxSizer, proportion=0, 654 flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, 655 border=5) 656 657 panel.SetSizer(pageSizer) 658 659 return panel 660 661 def OnDefault(self, event): 662 """Button 'Set to default' pressed""" 663 self.settings.userSettings = copy.deepcopy( 664 self.settings.defaultSettings) 665 666 # update widgets 667 for gks in self.winId.keys(): 668 subkey1 = None 669 try: 670 group, key, subkey = gks.split(':') 671 value = self.settings.Get(group, key, subkey) 672 except ValueError: 673 group, key, subkey, subkey1 = gks.split(':') 674 value = self.settings.Get(group, key, [subkey, subkey1]) 675 if subkey == 'position': 676 if subkey1 in ('x', 'y'): 677 value = float(value) * 100 678 win = self.FindWindowById(self.winId[gks]) 679 if win.GetName() == 'GetSelection': 680 value = win.SetSelection(value) 681 else: 682 value = win.SetValue(value) 683 684 def OnApply(self, event): 685 """Apply Nviz settings for current session""" 686 for item in self.winId.keys(): 687 try: 688 group, key, subkey = item.split(':') 689 subkey1 = None 690 except ValueError: 691 group, key, subkey, subkey1 = item.split(':') 692 693 id = self.winId[item] 694 win = self.FindWindowById(id) 695 if win.GetName() == 'GetSelection': 696 value = win.GetSelection() 697 elif win.GetName() == 'GetColour': 698 value = tuple(win.GetValue()) 699 else: 700 value = win.GetValue() 701 702 if subkey == 'position': 703 if subkey1 in ('x', 'y'): 704 value = float(value) / 100 705 if subkey1: 706 self.settings.Set(group, value, key, [subkey, subkey1]) 707 else: 708 self.settings.Set(group, value, key, subkey) 709 710 self.toolWin.LoadSettings() 711 712 def OnSave(self, event): 713 """Save button pressed 714 715 Apply changes and save settings to configuration file 716 """ 717 self.OnApply(None) 718 fileSettings = {} 719 UserSettings.ReadSettingsFile(settings=fileSettings) 720 fileSettings['nviz'] = UserSettings.Get(group='nviz') 721 722 UserSettings.SaveToFile(fileSettings) 723 self.parent._gconsole.WriteLog( 724 _('3D view settings saved to file <%s>.') % UserSettings.filePath) 725 726 self.Destroy() 727