Mercurial > traipse_dev
diff orpg/mapper/min_dialogs.py @ 0:4385a7d0efd1 grumpy-goblin
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
author | sirebral |
---|---|
date | Tue, 14 Jul 2009 16:41:58 -0500 |
parents | |
children | 78407d627cba |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orpg/mapper/min_dialogs.py Tue Jul 14 16:41:58 2009 -0500 @@ -0,0 +1,539 @@ +# Copyright (C) 2000-2001 The OpenRPG Project +# +# openrpg-dev@lists.sourceforge.net +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# -- +# +# File: mapper/min_dialogs.py +# Author: Chris Davis +# Maintainer: +# Version: +# $Id: min_dialogs.py,v 1.27 2006/11/13 02:23:16 digitalxero Exp $ +# +# Description: This file contains some of the basic definitions for the chat +# utilities in the orpg project. + +##----------------------------- +## Miniature List Panel +##----------------------------- + +from miniatures import * + +class min_list_panel(wx.Dialog): + + def __init__(self, parent,layers, log, pos =(-1,-1)): + wx.Dialog.__init__(self, parent,-1, log,pos = (-1,-1), size = (785,175), style=wx.RESIZE_BORDER) + listID = wx.NewId() + self.parent = parent + self.min = layers['miniatures'].miniatures + self.grid = layers['grid'] + self.layers = layers + self.listID = listID + list_sizer = wx.BoxSizer(wx.VERTICAL) + self.list_sizer = list_sizer + listctrl = wx.ListCtrl(self, listID, style=wx.LC_REPORT | wx.SUNKEN_BORDER) + self.listctrl = listctrl + self.Centre(wx.BOTH) + self.log = log + self.list_sizer.Add(self.listctrl,1,wx.EXPAND) + self.listctrl.InsertColumn(0,"POS ") + self.listctrl.InsertColumn(0,"LOCKED") + self.listctrl.InsertColumn(0,"HEADING") + self.listctrl.InsertColumn(0,"FACING") + self.listctrl.InsertColumn(0,"LABEL") + self.listctrl.InsertColumn(0,"PATH") + self.listctrl.SetColumnWidth(1, wx.LIST_AUTOSIZE_USEHEADER) + self.listctrl.SetColumnWidth(2, wx.LIST_AUTOSIZE_USEHEADER) + self.listctrl.SetColumnWidth(3, wx.LIST_AUTOSIZE_USEHEADER) + self.listctrl.SetColumnWidth(4, wx.LIST_AUTOSIZE_USEHEADER) + self.listctrl.SetColumnWidth(5, wx.LIST_AUTOSIZE_USEHEADER) + self.list_sizer.Add(wx.Button(self, wx.ID_OK, "DONE"),0,wx.ALIGN_CENTER) + self.refresh() + self.Bind(wx.EVT_BUTTON, self.on_ok, id=wx.ID_OK) + self.listctrl.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnRightClick, id=listID) + self.listctrl.Bind(wx.EVT_RIGHT_UP, self.OnRightClick) + self.listctrl.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown) + self.SetSizer(self.list_sizer) + self.SetAutoLayout(True) + self.Fit() + + def OnRightClick(self,event): + if self.listctrl.GetSelectedItemCount() > 0: + menu = wx.Menu() + lPopupID1 = wx.NewId() + lPopupID2 = wx.NewId() + lPopupID3 = wx.NewId() + menu.Append(lPopupID1, "&Edit") + menu.Append(lPopupID2, "&Delete") + menu.Append(lPopupID3, "To &Gametree") + self.Bind(wx.EVT_MENU, self.onEdit, id=lPopupID1) + self.Bind(wx.EVT_MENU, self.onDelete, id=lPopupID2) + self.Bind(wx.EVT_MENU, self.onToGametree, id=lPopupID3) + self.PopupMenu(menu, cmpPoint(self.x, self.y)) + menu.Destroy() + event.Skip() + + def refresh(self): + self.SetMinSize((600,175)); + for m in self.min: + self.listctrl.InsertStringItem(self.min.index(m),self.min[self.min.index(m)].path) + self.listctrl.SetStringItem(self.min.index(m),1,self.min[self.min.index(m)].label) + self.listctrl.SetStringItem(self.min.index(m),2,`self.min[self.min.index(m)].heading`) + self.listctrl.SetStringItem(self.min.index(m),3,`self.min[self.min.index(m)].face`) + self.listctrl.SetStringItem(self.min.index(m),4,`self.min[self.min.index(m)].locked`) + self.listctrl.SetStringItem(self.min.index(m),5,`self.min[self.min.index(m)].pos`) + oldcolumnwidth = self.listctrl.GetColumnWidth(0) + self.listctrl.SetColumnWidth(0, wx.LIST_AUTOSIZE) + if oldcolumnwidth < self.listctrl.GetColumnWidth(0): + self.listctrl.SetColumnWidth(0, wx.LIST_AUTOSIZE) + else: + self.listctrl.SetColumnWidth(0, oldcolumnwidth) + self.list_sizer=self.list_sizer + + def onEdit(self,event): + min_list = [] + min_index = [] + loop_count = 0 + item =-1 + while True: + loop_count += 1 + item = self.listctrl.GetNextItem(item,wx.LIST_NEXT_ALL, wx.LIST_STATE_SELECTED) + if item == -1: + break + min_list.append(self.min[item]) + min_index.append(item-loop_count+1) + if len(min_list) > 0: + dlg = min_list_edit_dialog(self.parent,min_index, min_list,self.layers) + if dlg.ShowModal() == wx.ID_OK: + pass + self.listctrl.DeleteAllItems() + self.refresh() + event.Skip() + + def onDelete(self,event): + loop_count = 0 + item = -1 + while True: + loop_count += 1 + item = self.listctrl.GetNextItem(item,wx.LIST_NEXT_ALL, wx.LIST_STATE_SELECTED) + if item == -1: + break + #self.min.remove(self.min[item-loop_count+1]) + self.layers["miniatures"].del_miniature(self.min[item-loop_count+1]) + self.listctrl.DeleteAllItems() + self.refresh() + event.Skip() + + def onToGametree(self,event): + min_list = [] + min_index = [] + loop_count = 0 + item =-1 + while True: + loop_count += 1 + item = self.listctrl.GetNextItem(item,wx.LIST_NEXT_ALL, wx.LIST_STATE_SELECTED) + if item == -1: + break + min_list.append(self.min[item]) + min_index.append(item-loop_count+1) + if len(min_list) > 0: + for sel_rmin in min_list: +############# + min_xml = sel_rmin.toxml(action="new") + node_begin = "<nodehandler module='map_miniature_nodehandler' class='map_miniature_handler' name='" + + if sel_rmin.label: + node_begin += sel_rmin.label + "'" + else: + node_begin += "Unnamed Miniature'" + + node_begin += ">" + gametree = open_rpg.get_component('tree') + node_xml = node_begin + min_xml + '</nodehandler>' + print "Sending this XML to insert_xml:" + node_xml + gametree.insert_xml(node_xml) +########## + self.listctrl.DeleteAllItems() + self.refresh() + event.Skip() + + def OnRightDown(self,event): + self.x = event.GetX() + self.y = event.GetY() + event.Skip() + + def on_ok(self,evt): + self.EndModal(wx.ID_OK) + +class min_list_edit_dialog(wx.Dialog): + def __init__(self,parent,min_index, min_list, layers): + wx.Dialog.__init__(self,parent,-1,"Miniature List",wx.DefaultPosition,wx.Size(600,530)) + self.layers = layers + grid = layers['grid'] + min = layers['miniatures'] + self.min_list = min_list + self.min_index = min_index + self.min = min + sizer1 = wx.BoxSizer(wx.VERTICAL) + sizer = wx.BoxSizer(wx.HORIZONTAL) + self.grid = grid + editor = min_list_edit_panel(self, min_index, min_list,layers) + sizer1.Add(editor, 1, wx.EXPAND) + sizer.Add(wx.Button(self, wx.ID_OK, "OK"), 1, wx.EXPAND) + sizer.Add(wx.Size(10,10)) + sizer.Add(wx.Size(10,10)) + sizer.Add(wx.Button(self, wx.ID_CANCEL, "Cancel"), 1, wx.EXPAND) + sizer1.Add(sizer, 0, wx.EXPAND) + self.editor = editor + self.Bind(wx.EVT_BUTTON, self.on_ok, id=wx.ID_OK) + self.SetSizer(sizer1) + self.SetAutoLayout(True) + self.Fit() + + def on_revert(self,evt): + pass + + def on_ok(self,evt): + self.editor.on_ok(self.layers) + self.EndModal(wx.ID_OK) + +class min_list_edit_panel(wx.Panel): + def __init__(self, parent, min_index, min_list,layers): + LABEL_COMBO = wx.NewId() + PATH_COMBO = wx.NewId() + POS_COMB = wx.NewId() + MIN_POS = wx.NewId() + POS_SPIN = wx.NewId() + self.grid = layers['grid'] + self.min = layers['miniatures'].miniatures + self.min_list = min_list + self.min_index = min_index + self.layers = layers + wx.Panel.__init__(self, parent, -1) + self.min=min + listsizer = wx.StaticBoxSizer(wx.StaticBox(self,-1,"Miniature list properties"), wx.VERTICAL) + labelsizer = wx.BoxSizer(wx.HORIZONTAL) + self.labelcheck = wx.CheckBox(self,-1,"Serialize") + labelsizer.Add(wx.StaticText(self, -1, "Label: "), 0, wx.EXPAND) + labelsizer.Add(self.labelcheck,wx.ALIGN_RIGHT,wx.EXPAND) + listsizer.Add(labelsizer,0, wx.EXPAND) + self.labelcombo = wx.ComboBox(self, LABEL_COMBO,"no change",style=wx.CB_DROPDOWN) + listsizer.Add(self.labelcombo,0, wx.EXPAND) + self.pathcombo = wx.ComboBox(self, PATH_COMBO, "no change",style=wx.CB_DROPDOWN) + self.positioncombo = wx.ComboBox(self, POS_COMB, "no change", choices=["no change"], style=wx.CB_READONLY) + #self.positioncombo.SetValue(`min_list[0].pos`) + self.labelcombo.Append("no change") + self.pathcombo.Append("no change") + for m in min_list: + self.labelcombo.Append(min_list[min_list.index(m)].label) + self.pathcombo.Append(min_list[min_list.index(m)].path) + self.positioncombo.Append(`min_list[min_list.index(m)].pos`) + listsizer.Add(wx.StaticText(self, -1, "Path:"), 0, wx.EXPAND) + listsizer.Add(self.pathcombo, 0, wx.EXPAND) + listsizer.Add(wx.Size(10,10)) + self.heading = wx.RadioBox(self, MIN_HEADING, "Heading", choices=["None","N","NE","E","SE","S","SW","W","NW","no change"], majorDimension=5, style=wx.RA_SPECIFY_COLS) + self.heading.SetSelection( 9 ) + listsizer.Add( self.heading, 0, wx.EXPAND ) + listsizer.Add(wx.Size(10,10)) + self.face = wx.RadioBox(self, MIN_FACE, "Facing", choices=["None","N","NE","E","SE","S","SW","W","NW","no change"], majorDimension=5, style=wx.RA_SPECIFY_COLS) + self.face.SetSelection(9) + listsizer.Add(self.face, 0, wx.EXPAND) +### +### Group together locked, Hide, and snap radioboxes in group2 box +### + group2 = wx.BoxSizer(wx.HORIZONTAL) + self.locked = wx.RadioBox(self, MIN_LOCK, "Lock", choices=["Don't lock","Lock","no change"],majorDimension=1,style=wx.RA_SPECIFY_COLS) + self.locked.SetSelection(2) + self.hide = wx.RadioBox(self, MIN_HIDE, "Hide", choices=["Don't hide", "Hide", "no change"],majorDimension=1,style=wx.RA_SPECIFY_COLS) + self.hide.SetSelection(2) + self.snap = wx.RadioBox(self,MIN_ALIGN,"Snap",choices=["Center","Top left","no change"],majorDimension=1,style=wx.RA_SPECIFY_COLS) + self.snap.SetSelection(2) + group2.Add(self.locked, 0, wx.EXPAND) + group2.Add(wx.Size(10,0)) + group2.Add(self.hide, 0, wx.EXPAND) + group2.Add(wx.Size(10,0)) + group2.Add(self.snap, 0, wx.EXPAND) + group2.Add(wx.Size(10,0)) + listsizer.Add(group2,0,0) +### +### group together the postion radiobox and the and its selection elements +### + xpos = int(min_list[0].pos[0]) + #xpos = int(`min_list[0].pos`[1:`min_list[0].pos`.index(',')]) + ypos = int(min_list[0].pos[1]) + #ypos = int(`min_list[0].pos`[`min_list[0].pos`.rfind(',')+1:len(`min_list[0].pos`)-1]) + self.scx = wx.SpinCtrl(self, POS_SPIN, "", (-1,-1), wx.Size(75,25)) + self.scx.SetRange(0,self.grid.return_grid()[0]) + self.scx.SetValue(xpos) + self.scy = wx.SpinCtrl(self, POS_SPIN, "", (-1,-1), wx.Size(75,25)) + self.scy.SetRange(0,self.grid.return_grid()[1]) + self.scy.SetValue(1) + self.scy.SetValue(ypos) + positionbox = wx.BoxSizer(wx.HORIZONTAL) + self.poschoice = wx.RadioBox(self,MIN_POS,"Position",choices=["Manual", "Existing", "no change"],majorDimension=1,style=wx.RA_SPECIFY_COLS) + self.poschoice.SetSelection(2) + positionbox.Add(self.poschoice,0,0) + ### + ### group together choices under position choice boxsizer + ### + poschoicebox = wx.BoxSizer(wx.VERTICAL) + ### + ### spinbox contains the x and y spinctrls + ### + spinbox = wx.BoxSizer(wx.HORIZONTAL) + group2.Add(positionbox,0, wx.EXPAND) + xpos = wx.StaticText(self, -1,"XPOS: ") + spinbox.Add(xpos,0, 0) + spinbox.Add(self.scx, 0, 0) + ypos = wx.StaticText(self, -1,"YPOS: ") + spinbox.Add(ypos,0, 0) + spinbox.Add(self.scy, 0, 0) + poschoicebox.Add(wx.Size(0,15)) + poschoicebox.Add(spinbox,0,0) + ### + ### kludge is just a way to horizontaly position text. .Add doesn't seem to work. + ### + kluge = wx.BoxSizer(wx.HORIZONTAL) + klugetext = wx.StaticText(self, -1, " ") + kluge.Add(klugetext,0,0) + kluge.Add(self.positioncombo,0,0) + poschoicebox.Add(wx.Size(0,1)) + poschoicebox.Add(kluge,0,0) + positionbox.Add(poschoicebox,0,0) + listsizer.Add(positionbox,0, 0) + self.listsizer = listsizer + #self.outline = wx.StaticBox(self,-1,"Miniature list properties") + #listsizer.Add(self.outline,0, wx.EXPAND) + self.SetSizer(listsizer) + self.SetAutoLayout(True) + self.Fit() + self.Bind(wx.EVT_SPINCTRL, self.on_spin, id=POS_SPIN) + self.Bind(wx.EVT_TEXT, self.on_combo_box, id=POS_COMB) + #self.Bind(wx.EVT_SIZE, self.on_size) + self.Bind(wx.EVT_TEXT, self.on_text, id=MIN_LABEL) + self.Bind(wx.EVT_RADIOBOX, self.on_radio_box, id=MIN_HEADING) + self.Bind(wx.EVT_RADIOBOX, self.on_radio_box, id=MIN_FACE) + + def on_ok(self,min): + self.min = min + for m in self.min_list: + if self.hide.GetSelection() !=2: + m.hide = self.hide.GetSelection() + if self.heading.GetSelection() !=9: + m.heading = self.heading.GetSelection() + if self.face.GetSelection() !=9: + m.face = self.face.GetSelection() + if self.locked.GetSelection() !=2: + m.locked = self.locked.GetSelection() + if self.snap.GetSelection() !=2: + m.snap_to_align = self.snap.GetSelection() + if self.labelcombo.GetValue() != "no change": + m.label = self.labelcombo.GetValue() + if self.labelcheck.GetValue(): + m.label += " " + `self.layers['miniatures'].next_serial()` + # self.layers['miniatures'].serial_number +=1 + # m.label += " " + `self.layers['miniatures'].serial_number` + if self.pathcombo.GetValue() != "no change": + path = self.pathcombo.GetValue() + image = self.evaluate(path) + if str(image[1]) != '-1': + m.path = image[0] + m.bmp = image[1] + else: + image[-1] = -1 + while image[1] == -1: + image = 0 + self.dlg = wx.TextEntryDialog(self, 'You entered an invalid URL for the image path. Please Enter a valid URL or cancel to leave the old url unchanged') + if self.dlg.ShowModal() == wx.ID_OK: + path = self.dlg.GetValue() + image = self.evaluate(path) + if image[1] != -1: + m.path = image[0] + m.bmp = image[1] + self.dlg.Destroy() + else: + break + if self.poschoice.GetSelection() !=2: + if self.poschoice.GetSelection() == 0: + m.pos = cmpPoint(self.scx.GetValue(),self.scy.GetValue()) + else: + pos = self.positioncombo.GetValue() + m.pos = cmpPoint(int(`pos`[2:`pos`.index(",")]),int(`pos`[`pos`.rfind(',')+1:len(`pos`)-2])) + self.layers["miniatures"].canvas.send_map_data() + + def evaluate(self, ckpath): + path = [] + if ckpath[:7] != "http://": + ckpath = "http://" + ckpath + path = self.check_path(ckpath) + return [ckpath, path] + + def check_path(self, path): + if ImageHandler.Cache.has_key(path): + return ImageHandler.Cache[path] + img = ImageHandler.directLoad(path) + if img is None: + return -1 + return img + + def on_text(self,evt): + id=evt.GetId() + + def on_spin(self,evt): + self.poschoice.SetSelection(0) + + def on_combo_box(self,evt): + self.poschoice.SetSelection(1) + + def on_radio_box(self,evt): + id=evt.GetId() + index = evt.GetInt() + + def on_size(self,evt): + s = self.GetClientSizeTuple() + self.listsizer.SetDimension(20,20,s[0]-40,s[1]-40) + self.outline.SetDimensions(5,5,s[0]-10,s[1]-10) + +##----------------------------- +## Miniature Prop Panel +##----------------------------- + +MIN_LABEL = wx.NewId() +MIN_HEADING = wx.NewId() +MIN_FACE = wx.NewId() +MIN_HIDE = wx.NewId() +MIN_LOCK = wx.NewId() +MIN_ALIGN = wx.NewId() +wxID_MIN_WIDTH = wx.NewId() +wxID_MIN_HEIGHT = wx.NewId() +wxID_MIN_SCALING = wx.NewId() + +class min_edit_panel(wx.Panel): + def __init__(self, parent, min): + wx.Panel.__init__(self, parent, -1) + self.min = min + sizer = wx.StaticBoxSizer(wx.StaticBox(self,-1,"Miniature"), wx.VERTICAL) + sizerSize = wx.BoxSizer(wx.HORIZONTAL) + hSizer = wx.BoxSizer(wx.HORIZONTAL) + self.label = wx.TextCtrl(self, MIN_LABEL, min.label) + sizer.Add(wx.StaticText(self, -1, "Label:"), 0, wx.EXPAND) + sizer.Add(self.label, 0, wx.EXPAND) + sizer.Add(wx.Size(10,10)) + self.heading = wx.RadioBox(self, MIN_HEADING, "Heading", choices=["None","N","NE","E","SE","S","SW","W","NW"],majorDimension=5,style=wx.RA_SPECIFY_COLS) + self.heading.SetSelection(min.heading) + self.face = wx.RadioBox(self, MIN_FACE, "Facing", choices=["None","N","NE","E","SE","S","SW","W","NW"],majorDimension=5,style=wx.RA_SPECIFY_COLS) + self.face.SetSelection(min.face) + self.locked = wx.CheckBox(self, MIN_LOCK, " Lock") + self.locked.SetValue(min.locked) + self.hide = wx.CheckBox(self, MIN_HIDE, " Hide") + self.hide.SetValue(min.hide) + sizer.Add(self.heading, 0, wx.EXPAND) + sizer.Add(wx.Size(10,10)) + sizer.Add(self.face, 0, wx.EXPAND) + sizer.Add(wx.Size(10,10)) + # + #image resizing + # + self.min_width_old_value = str(self.min.bmp.GetWidth()) + self.min_width = wx.TextCtrl(self, wxID_MIN_WIDTH, self.min_width_old_value) + sizerSize.Add(wx.StaticText(self, -1, "Width: "), 0, wx.ALIGN_CENTER) + sizerSize.Add(self.min_width, 1, wx.EXPAND) + sizerSize.Add(wx.Size(20, 25)) + + #TODO:keep in mind that self.min is a local copy??? + self.min_height_old_value = str(self.min.bmp.GetHeight()) + self.min_height = wx.TextCtrl(self, wxID_MIN_HEIGHT, self.min_height_old_value) + sizerSize.Add(wx.StaticText(self, -1, "Height: "),0,wx.ALIGN_CENTER) + sizerSize.Add(self.min_height, 1, wx.EXPAND) + self.min_scaling = wx.CheckBox(self, wxID_MIN_SCALING, "Lock scaling") + self.min_scaling.SetValue(True) + sizerSize.Add(self.min_scaling, 1, wx.EXPAND) + sizer.Add(sizerSize, 0, wx.EXPAND) + sizer.Add(wx.Size(10, 10)) + + # Now, add the last items on in their own sizer + hSizer.Add(self.locked, 0, wx.EXPAND) + hSizer.Add(wx.Size(10,10)) + hSizer.Add(self.hide, 0, wx.EXPAND) + + # Add the hSizer to the main sizer + sizer.Add( hSizer ) + self.sizer = sizer + self.SetSizer(self.sizer) + self.SetAutoLayout(True) + self.Fit() + + #self.Bind(wx.EVT_SIZE, self.on_size) + self.Bind(wx.EVT_TEXT, self.on_text, id=MIN_LABEL) + self.Bind(wx.EVT_TEXT, self.on_scaling, id=wxID_MIN_WIDTH) + self.Bind(wx.EVT_TEXT, self.on_scaling, id=wxID_MIN_HEIGHT) + self.Bind(wx.EVT_RADIOBOX, self.on_radio_box, id=MIN_HEADING) + self.Bind(wx.EVT_RADIOBOX, self.on_radio_box, id=MIN_FACE) + + def on_scaling(self, evt): + if self.min_scaling.GetValue() == False: + return + elif self.min_width.GetValue() and wxID_MIN_WIDTH == evt.GetId() and self.min_width.GetInsertionPoint(): + self.min_height.SetValue ( str(int((float(self.min_width.GetValue()) / float(self.min_width_old_value)) * float(self.min_height_old_value))) ) + elif self.min_height.GetValue() and wxID_MIN_HEIGHT == evt.GetId() and self.min_height.GetInsertionPoint(): + self.min_width.SetValue ( str(int((float(self.min_height.GetValue()) / float(self.min_height_old_value)) * float(self.min_width_old_value))) ) + + def update_min(self): + self.min.set_min_props(self.heading.GetSelection(), + self.face.GetSelection(), + self.label.GetValue(), + self.locked.GetValue(), + self.hide.GetValue(), + self.min_width.GetValue(), + self.min_height.GetValue()) + + def on_radio_box(self,evt): + id = evt.GetId() + index = evt.GetInt() + + def on_text(self,evt): + id = evt.GetId() + + def on_size(self,evt): + s = self.GetClientSizeTuple() + self.sizer.SetDimension(20,20,s[0]-40,s[1]-40) + self.outline.SetDimensions(5,5,s[0]-10,s[1]-10) + +class min_edit_dialog(wx.Dialog): + def __init__(self,parent,min): +#520,265 + wx.Dialog.__init__(self,parent,-1,"Miniature",wx.DefaultPosition,wx.Size(520,350)) + (w,h) = self.GetClientSizeTuple() + mastersizer = wx.BoxSizer(wx.VERTICAL) + editor = min_edit_panel(self,min) + #editor.SetDimensions(0,0,w,h-25) + self.editor = editor + mastersizer.Add(editor, 1, wx.EXPAND) + mastersizer.Add(wx.Size(10,10)) + sizer = wx.BoxSizer(wx.HORIZONTAL) + sizer.Add(wx.Button(self, wx.ID_OK, "OK"), 1, wx.EXPAND) + sizer.Add(wx.Size(10,10)) + sizer.Add(wx.Button(self, wx.ID_CANCEL, "Cancel"), 1, wx.EXPAND) + #sizer.SetDimension(0,h-25,w,25) + mastersizer.Add(sizer, 0, wx.EXPAND) + self.SetSizer(mastersizer) + self.SetAutoLayout(True) + self.Fit() + self.Bind(wx.EVT_BUTTON, self.on_ok, id=wx.ID_OK) + + def on_ok(self,evt): + self.editor.update_min() + self.EndModal(wx.ID_OK)