def _do_layout(self): sizer_1 = wx.BoxSizer(wx.VERTICAL) sizer_1.Add((cw.wins(0), self._textheight + cw.wins(24)), 0, 0, 0) csize = self.GetClientSize() if self.mode == 1: sizer_2 = wx.BoxSizer(wx.HORIZONTAL) margin = (csize[0] - self.yesbtn.GetSize()[0] * 2) // 3 sizer_2.Add(self.yesbtn, 0, wx.LEFT, margin) sizer_2.Add(self.nobtn, 0, wx.LEFT | wx.RIGHT, margin) elif self.mode == 2: sizer_2 = wx.BoxSizer(wx.HORIZONTAL) margin = (csize[0] - self.closebtn.GetSize()[0]) // 2 sizer_2.Add(self.closebtn, 0, wx.LEFT, margin) elif self.mode == 3: sizer_2 = wx.BoxSizer(wx.HORIZONTAL) sizer_2.AddStretchSpacer(1) for i, button in enumerate(self.buttons): sizer_2.Add(button, 0, 0, 0) sizer_2.AddStretchSpacer(1) sizer_1.Add(sizer_2, 1, wx.EXPAND, 0) self.SetSizer(sizer_1) self.Layout()
def __init__(self, parent, name, text): choices = ( (u"はい", wx.ID_YES, cw.wins(105)), (u"いいえ", wx.ID_NO, cw.wins(105)), (u"キャンセル", wx.ID_CANCEL, cw.wins(105)), ) Message.__init__(self, parent, name, text, 3, choices=choices)
def OnPaint(self, event): dc = wx.PaintDC(self) # background bmp = cw.cwpy.rsrc.dialogs["CAUTION"] csize = self.GetClientSize() cw.util.fill_bitmap(dc, bmp, csize) # text dc.SetTextForeground(wx.BLACK) font = cw.cwpy.rsrc.get_wxfont("dlgmsg", pixelsize=cw.wins(16)) dc.SetFont(font) s = self.message w, h, _lh = dc.GetMultiLineTextExtent(s) dc.DrawLabel(s, ((csize[0]-w)/2, cw.wins(10), w, h)) font = cw.cwpy.rsrc.get_wxfont("dlgmsg", pixelsize=cw.wins(16)) dc.SetFont(font) s = u"対象エンジン:" tw, th = dc.GetTextExtent(s) x, y, w, h = self.target.GetRect() x -= tw + cw.wins(5) y += (h-th) / 2 dc.DrawText(s, x, y) s = u"生成先:" tw, th = dc.GetTextExtent(s) _x2, y, _w2, h = self.reffolder.GetRect() h = max(h, self.folder.GetRect()[3]) y += (h-th) / 2 dc.DrawText(s, x, y)
def OnPaint(self, event): dc = wx.PaintDC(self) # background bmp = cw.cwpy.rsrc.dialogs["CAUTION"] csize = self.GetClientSize() cw.util.fill_bitmap(dc, bmp, csize) font = cw.cwpy.rsrc.get_wxfont("dlgmsg", pixelsize=cw.wins(16)) dc.SetFont(font) # 転送元 s = cw.cwpy.msgs["transfer_from_base"] _tw, th = dc.GetTextExtent(s) _x, y, _w, h = self.fromyado.GetRect() x = cw.wins(5) y += (h - th) / 2 dc.DrawText(s, x, y) # 転送先 s = cw.cwpy.msgs["transfer_to_base"] _tw, th = dc.GetTextExtent(s) x, y, _w, h = self.toyado.GetRect() x = cw.wins(5) y += (h - th) / 2 dc.DrawText(s, x, y)
def OnPaint(self, evt): dc = wx.PaintDC(self) # background bmp = cw.cwpy.rsrc.dialogs["CAUTION"] csize = self.GetClientSize() cw.util.fill_bitmap(dc, bmp, csize) # massage dc.SetTextForeground(wx.BLACK) dc.SetFont(cw.cwpy.rsrc.get_wxfont("dlgmsg", pixelsize=cw.wins(15))) dc.DrawLabel(self.text, (0, cw.wins(12), csize[0], self._textheight), wx.ALIGN_CENTER)
def create_buttons(self): # OK・キャンセルボタン self.yesbtn = cw.cwpy.rsrc.create_wxbutton(self, wx.ID_OK, cw.wins((120, 30)), cw.cwpy.msgs["ok"]) self.nobtn = cw.cwpy.rsrc.create_wxbutton(self, wx.ID_CANCEL, cw.wins((120, 30)), cw.cwpy.msgs["cancel"]) self.buttons = (self.yesbtn, self.nobtn) self.yesbtn.Bind(wx.EVT_BUTTON, self.OnOk) self.nobtn.Bind(wx.EVT_BUTTON, self.OnCancel)
def _resize(self): """ テキストの折り返し位置を計算する。 """ dc = wx.ClientDC(self) dc.SetFont(cw.cwpy.rsrc.get_wxfont("dlgmsg", pixelsize=cw.wins(15))) csize = self.GetClientSize() self._wrapped_text = cw.util.wordwrap(self.text, csize[0] - cw.wins(20), lambda s: dc.GetTextExtent(s)[0]) _w, self._textheight, _lineheight = dc.GetMultiLineTextExtent( self._wrapped_text)
def __init__(self, parent): # ダイアログボックス作成 select.Select.__init__(self, parent, cw.cwpy.msgs["select_party_record"]) # パーティ情報 self.list = cw.cwpy.ydata.partyrecord[:] self.list.append(None) self.restorable = [None] * len(self.list) self.index = 0 self.names = [] # toppanel self.toppanel = wx.Panel(self, -1, size=cw.wins((460, 280))) # restore self.restorebtn = cw.cwpy.rsrc.create_wxbutton( self.panel, -1, cw.wins((75, 23)), cw.cwpy.msgs["party_restore"]) self.buttonlist.append(self.restorebtn) # save self.savebtn = cw.cwpy.rsrc.create_wxbutton(self.panel, -1, cw.wins((75, 23)), cw.cwpy.msgs["party_save"]) self.buttonlist.append(self.savebtn) # delete self.deletebtn = cw.cwpy.rsrc.create_wxbutton(self.panel, -1, cw.wins((75, 23)), cw.cwpy.msgs["delete"]) self.buttonlist.append(self.deletebtn) # close self.closebtn = cw.cwpy.rsrc.create_wxbutton(self.panel, wx.ID_CANCEL, cw.wins((75, 23)), cw.cwpy.msgs["close"]) self.buttonlist.append(self.closebtn) # enable btn self.enable_btn() # layout self._do_layout() # bind self._bind() self.Bind(wx.EVT_BUTTON, self.OnClickSaveBtn, self.savebtn) self.Bind(wx.EVT_BUTTON, self.OnClickRestoreBtn, self.restorebtn) self.Bind(wx.EVT_BUTTON, self.OnClickDeleteBtn, self.deletebtn) seq = self.accels deleteid = wx.NewId() self.Bind(wx.EVT_MENU, self.OnClickDeleteBtn, id=deleteid) seq.append((wx.ACCEL_NORMAL, wx.WXK_DELETE, deleteid)) cw.util.set_acceleratortable(self, seq) self.draw(True)
def create_buttons(self): headers_seq = reduce(lambda a, b: a + b, self.headers.itervalues()) assert 0 < len(headers_seq) # インストール・キャンセルボタン self.yesbtn = cw.cwpy.rsrc.create_wxbutton(self, wx.ID_OK, cw.wins((120, 30)), u"インストール") self.yesbtn.SetToolTipString(create_installdesc(headers_seq)) self.nobtn = cw.cwpy.rsrc.create_wxbutton(self, wx.ID_CANCEL, cw.wins((120, 30)), cw.cwpy.msgs["cancel"]) self.buttons = (self.yesbtn, self.nobtn) self.yesbtn.Bind(wx.EVT_BUTTON, self.OnInstallBtn) self.nobtn.Bind(wx.EVT_BUTTON, self.OnCancel)
def _do_layout(self): sizer_buttons = wx.BoxSizer(wx.VERTICAL) for btn in self.buttons: sizer_buttons.Add(btn, 0, wx.EXPAND|wx.BOTTOM, cw.wins(2)) sizer_buttons.AddStretchSpacer(1) sizer_buttons.Add(self.btn_cncl, 0, wx.EXPAND) sizer_panel = wx.BoxSizer(wx.HORIZONTAL) sizer_panel.Add(self.desc, 1, wx.EXPAND|wx.ALL, cw.wins(10)) self.panel.SetSizer(sizer_panel) sizer = wx.BoxSizer(wx.HORIZONTAL) sizer.Add(sizer_buttons, 0, wx.EXPAND|wx.ALL, cw.wins(10)) sizer.Add(self.panel, 1, wx.EXPAND|wx.TOP|wx.RIGHT|wx.BOTTOM, cw.wins(10)) self.SetSizer(sizer) sizer.Fit(self) self.Layout()
def OnPaint(self, event): csize = self.GetClientSize() wxbmp = wx.EmptyBitmap(csize[0], csize[1]) dc = wx.MemoryDC(wxbmp) # background bmp = cw.cwpy.rsrc.dialogs["CAUTION"] cw.util.fill_bitmap(dc, bmp, csize) # massage dc.SetTextForeground(wx.BLACK) dc.SetFont(cw.cwpy.rsrc.get_wxfont("dlgmsg", pixelsize=cw.wins(14))) dc.DrawLabel( self.text, (cw.wins(10), cw.wins(36), csize[0] - cw.wins(20), cw.wins(50)), wx.ALIGN_RIGHT) dc.SelectObject(wx.NullBitmap) dc2 = wx.PaintDC(self) dc2.DrawBitmap(wxbmp, 0, 0)
def _do_layout(self): sizer_1 = wx.BoxSizer(wx.VERTICAL) sizer_1.Add((cw.wins(0), self._textheight + cw.wins(24)), 0, 0, 0) csize = self.GetClientSize() sizer_1.Add(self.datalist, 1, wx.LEFT | wx.RIGHT | wx.EXPAND, cw.wins(8)) sizer_2 = wx.BoxSizer(wx.HORIZONTAL) sizer_2.AddStretchSpacer(1) for i, button in enumerate((self.okbtn, self.cnclbtn)): sizer_2.Add(button, 0, 0, 0) sizer_2.AddStretchSpacer(1) sizer_1.Add(sizer_2, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, cw.wins(12)) self.SetSizer(sizer_1) self.Layout()
def __init__(self, parent): wx.Dialog.__init__(self, parent, -1, cw.cwpy.msgs["select_battle_action"]) self.cwpy_debug = False self.list = [] # 行動開始 path = "Resource/Image/Card/BATTLE" path = cw.util.find_resource(cw.util.join_paths(cw.cwpy.skindir, path), cw.cwpy.rsrc.ext_img) path = [cw.image.ImageInfo(path)] header = cw.image.CardImage(path, "NORMAL", cw.cwpy.msgs["start_action"], can_loaded_scaledimage=True) w = cw.scr2win_s(header.rect.width) h = cw.scr2win_s(header.rect.height) header.rect = pygame.Rect(cw.wins(5), cw.wins(5), w, h) header.clickedflag = False header.lclick_event = self.start header.negaflag = False self.list.append(header) # 逃げる if cw.cwpy.battle.possible_runaway: path = "Resource/Image/Card/ACTION9" path = cw.util.find_resource(cw.util.join_paths(cw.cwpy.skindir, path), cw.cwpy.rsrc.ext_img) path = [cw.image.ImageInfo(path)] header = cw.image.CardImage(path, "NORMAL", cw.cwpy.msgs["runaway"], can_loaded_scaledimage=True) header.rect = pygame.Rect((w+cw.wins(5))*len(self.list)+cw.wins(5), cw.wins(5), w, h) header.clickedflag = False header.negaflag = False header.lclick_event = self.runaway self.list.append(header) # キャンセル path = "Resource/Image/Card/COMMAND1" path = cw.util.find_resource(cw.util.join_paths(cw.cwpy.skindir, path), cw.cwpy.rsrc.ext_img) path = [cw.image.ImageInfo(path)] header = cw.image.CardImage(path, "NORMAL", cw.cwpy.msgs["cancel"], can_loaded_scaledimage=True) header.rect = pygame.Rect((w+cw.wins(5))*len(self.list)+cw.wins(5), cw.wins(5), w, h) header.clickedflag = False header.negaflag = False header.lclick_event = self.cancel self.list.append(header) self.toppanel = wx.Panel(self, -1, size=((w+cw.wins(5))*len(self.list)+cw.wins(5), h+cw.wins(5)*(len(self.list)-1))) self._do_layout() self._bind()
def draw_card(self, dc, header, fromkeyevent=False): if not fromkeyevent and self.IsActive(): mousepos = self.toppanel.ScreenToClient(wx.GetMousePosition()) if header.rect.collidepoint(mousepos): if not header.negaflag: header.negaflag = True elif header.negaflag: header.negaflag = False pos = header.rect.topleft if header.negaflag: bmp = header.get_wxnegabmp() else: bmp = header.get_wxbmp() if header.clickedflag: bmp = header.get_wxclickedbmp(header, bmp) pos = (pos[0]+cw.wins(4), pos[1]+cw.wins(5)) dc.DrawBitmap(bmp, pos[0], pos[1], False)
def _do_layout(self): sizer_right = wx.BoxSizer(wx.VERTICAL) sizer_right.Add(self.rmvbtn, 0, wx.EXPAND) sizer_right.Add(self.upbtn, 0, wx.EXPAND|wx.TOP, border=cw.wins(5)) sizer_right.Add(self.downbtn, 0, wx.EXPAND|wx.TOP, border=cw.wins(5)) #sizer_right2 = wx.BoxSizer(wx.HORIZONTAL) #sizer_right2.Add(self.up2btn, 1) #sizer_right2.Add(self.down2btn, 1) #sizer_right.Add(sizer_right2, 0, wx.TOP, border=cw.ppis(5)) sizer_right.AddStretchSpacer(1) sizer_right.Add(self.okbtn, 0, wx.EXPAND) sizer_right.Add(self.cnclbtn, 0, wx.EXPAND|wx.TOP, border=cw.wins(5)) sizer = wx.BoxSizer(wx.HORIZONTAL) sizer.Add(self.values, 1, wx.EXPAND|wx.ALL, border=cw.wins(5)) sizer.Add(sizer_right, 0, flag=wx.EXPAND|wx.RIGHT|wx.TOP|wx.BOTTOM, border=cw.wins(5)) self.SetSizer(sizer) sizer.Fit(self) self.Layout()
def func(): choices = ( (u"置換", wx.ID_YES, cw.wins(80)), (u"名前変更", wx.ID_DUPLICATE, cw.wins(80)), (u"スキップ", wx.ID_NO, cw.wins(80)), (u"中止", wx.ID_CANCEL, cw.wins(80)), ) dlg2 = message.Message( dlg, cw.cwpy.msgs["message"], s, mode=3, choices=choices) cw.cwpy.frame.move_dlg(dlg2) ret = dlg2.ShowModal() dlg2.Destroy() if wx.GetKeyState(wx.WXK_SHIFT): allret[0] = ret return ret
def __init__(self, parent, title, items): wx.Dialog.__init__(self, parent, -1, title) self.cwpy_debug = False self.items = items self.buttons = [] for t in self.items: if len(t) == 3: name, _desc, _func = t enable = True else: name, _desc, _func, enable = t btn = cw.cwpy.rsrc.create_wxbutton(self, -1, (-1, cw.wins(24)), name=name) btn.Enable(enable) self.buttons.append(btn) self.panel = wx.Panel(self, -1, style=wx.BORDER) self.desc = wx.StaticText(self.panel, -1, size=cw.wins((210, 150)), style=wx.ST_NO_AUTORESIZE) self.desc.SetFont(cw.cwpy.rsrc.get_wxfont("datadesc", pixelsize=cw.wins(14))) self.btn_cncl = cw.cwpy.rsrc.create_wxbutton(self, wx.ID_CANCEL, (-1, cw.wins(23)), cw.cwpy.msgs["cancel"]) self._bind() self._do_layout()
def _do_layout(self): sizer_1 = wx.BoxSizer(wx.VERTICAL) sizer_panel = wx.BoxSizer(wx.HORIZONTAL) sizer_panel.Add(self.leftbtn, 0, 0, 0) sizer_panel.Add((0, 0), 1, 0, 0) sizer_panel.Add(self.closebtn, 0, wx.TOP | wx.BOTTOM, cw.wins(3)) sizer_panel.Add((0, 0), 1, 0, 0) sizer_panel.Add(self.rightbtn, 0, 0, 0) self.panel.SetSizer(sizer_panel) sizer_1.Add(self.toppanel, 1, 0, 0) sizer_1.Add(self.panel, 0, wx.EXPAND, 0) self.SetSizer(sizer_1) sizer_1.Fit(self) self.Layout()
def _do_layout(self): sizer_1 = wx.BoxSizer(wx.VERTICAL) sizer_1.Add(cw.wins((0, 10)), 0, 0, 0) sizer_1.Add(self.gauge, 0, wx.EXPAND | wx.LEFT | wx.RIGHT, cw.wins(10)) if self.btn_cncl: sizer_1.Add(cw.wins((0, 24)), 0, 0, cw.wins(0)) sizer_1.Add(self.btn_cncl, 0, wx.ALIGN_RIGHT | wx.LEFT | wx.RIGHT, cw.wins(10)) else: sizer_1.Add(cw.wins((0, 30)), 0, 0, cw.wins(0)) self.SetSizer(sizer_1) self.Layout()
def __init__(self, parent, yadoname): wx.Dialog.__init__(self, parent, -1, u"拠点の逆変換", style=wx.CAPTION|wx.SYSTEM_MENU|wx.CLOSE_BOX) self.cwpy_debug = False self.message = u"%s を逆変換し、\n新規作成したフォルダへ格納します。" % (yadoname) dc = wx.ClientDC(self) font = cw.cwpy.rsrc.get_wxfont("dlgmsg", pixelsize=cw.wins(16)) dc.SetFont(font) w, _h, _lh = dc.GetMultiLineTextExtent(self.message) self.SetClientSize((w + cw.wins(50), cw.wins(156))) self.targetengine = 1.50 self.dstpath = cw.cwpy.setting.unconvert_targetfolder self.folder = wx.TextCtrl(self, size=(-1, -1)) font = cw.cwpy.rsrc.get_wxfont("dlgmsg", pixelsize=cw.wins(16)) self.folder.SetFont(font) self.folder.SetValue(self.dstpath) s = ((u"%s のデータをCardWirth用に逆変換します。" + u"\n変換先のフォルダを選択してください。") % (yadoname)) self.reffolder = cw.util.create_fileselection(self, self.folder, s, seldir=True, getbasedir=os.getcwdu, winsize=True) font = cw.cwpy.rsrc.get_wxfont("button", pixelsize=cw.wins(14)) self.reffolder.SetFont(font) choices = [u"CardWirth 1.50", u"CardWirth 1.30", u"CardWirth 1.29", u"CardWirth 1.28"] self.target = wx.Choice(self, size=(-1, -1), choices=choices) font = cw.cwpy.rsrc.get_wxfont("combo", pixelsize=cw.wins(16)) self.target.SetFont(font) self.target.Select(0) self.okbtn = cw.cwpy.rsrc.create_wxbutton(self, -1, cw.wins((100, 30)), cw.cwpy.msgs["decide"]) self.cnclbtn = cw.cwpy.rsrc.create_wxbutton(self, wx.ID_CANCEL, cw.wins((100, 30)), cw.cwpy.msgs["entry_cancel"]) self._do_layout() self._bind()
def to_negative_for_wxcard(wxbmp, framewidth=0): """色反転したwx.Bitmapを返す。 カード画像用なので外枠1ピクセルは色反転しない。 wxbmp: wx.Bitmap framewidth: 外枠の幅。現在は1.50に合わせて外枠無し(0) """ w, h = wxbmp.GetWidth(), wxbmp.GetHeight() dc = wx.MemoryDC() image = wx.EmptyBitmap(w, h) dc.SelectObject(image) dc.DrawBitmap(wxbmp, cw.wins(0), cw.wins(0)) if cw.wins(1 + framewidth * 2) <= w and cw.wins(1 + framewidth * 2) <= h: x, y, w, h = wx.Rect(cw.wins(framewidth), cw.wins(framewidth), w - cw.wins(framewidth * 2), h - cw.wins(framewidth * 2)) sourcedc = wx.MemoryDC() sourcedc.SelectObject(wxbmp) dc.Blit(x, y, w, h, sourcedc, x, y, wx.INVERT) sourcedc.SelectObject(wx.NullBitmap) dc.SelectObject(wx.NullBitmap) return image
def __init__(self, parent, title, message, maximum=100, minimum=0, cancelable=False, width_noscale=300): wx.Dialog.__init__(self, parent, -1, title, style=wx.DEFAULT_DIALOG_STYLE) self.cwpy_debug = False self.SetClientSize(cw.wins((width_noscale, 60))) self.EnableCloseButton(cancelable) self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM) self.text = message self.minimum = minimum self.maximum = maximum self.cancel = False self.gauge = wx.Gauge(self, -1, range=self.maximum - self.minimum, size=(-1, cw.wins(20)), style=wx.GA_HORIZONTAL | wx.GA_SMOOTH) if cancelable: self.btn_cncl = cw.cwpy.rsrc.create_wxbutton( self, -1, cw.wins((80, 30)), u"中止") self.SetClientSize( (cw.wins(width_noscale + 20), cw.wins(60) + self.btn_cncl.GetBestSize()[1] + cw.wins(4))) else: self.btn_cncl = None # layout self._do_layout() # bind self.Bind(wx.EVT_PAINT, self.OnPaint) if self.btn_cncl: self.Bind(wx.EVT_BUTTON, self.OnClickCancelBtn, self.btn_cncl)
def _do_layout(self): sizer_1 = wx.BoxSizer(wx.VERTICAL) sizer_2 = wx.BoxSizer(wx.HORIZONTAL) sizer_2.AddStretchSpacer(1) sizer_2.Add((cw.wins(0), self._textheight + cw.wins(24)), 0, 0, 0) sizer_2.Add(self.createdirbtn, 0, wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER, cw.wins(10)) sizer_1.Add(sizer_2, 0, wx.EXPAND, wx.LEFT | wx.RIGHT, cw.wins(10)) sizer_1.Add(self.tree, 1, wx.EXPAND | wx.LEFT | wx.RIGHT, cw.wins(8)) sizer_3 = wx.BoxSizer(wx.HORIZONTAL) sizer_3.AddStretchSpacer(1) for i, button in enumerate(self.buttons): sizer_3.Add(button, 0, 0, 0) sizer_3.AddStretchSpacer(1) sizer_1.Add(sizer_3, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, cw.wins(12)) self.SetSizer(sizer_1) self.Layout()
def __do_layout(self): sizer_1 = wx.BoxSizer(wx.VERTICAL) sizer_panel = wx.BoxSizer(wx.HORIZONTAL) sizer_toppanel = wx.BoxSizer(wx.VERTICAL) sizer_topbar = wx.BoxSizer(wx.HORIZONTAL) # トップバー sizer_topbar.Add((0, 0), 1, 0, cw.wins(0)) sizer_topbar.Add(self.combo, 0, 0, cw.wins(0)) sizer_toppanel.Add(sizer_topbar, 0, wx.EXPAND, cw.wins(0)) sizer_toppanel.Add(cw.wins((0, 3)), 0, wx.EXPAND, cw.wins(0)) sizer_toppanel.Add(self.richtextctrl, 1, wx.EXPAND, cw.wins(0)) self.toppanel.SetSizer(sizer_toppanel) sizer_panel.Add(self.leftbtn, 0, 0, cw.wins(0)) sizer_panel.Add((0, 0), 1, 0, cw.wins(0)) sizer_panel.Add(self.closebtn, 0, wx.TOP|wx.BOTTOM, cw.wins(3)) sizer_panel.Add((0, 0), 1, 0, cw.wins(0)) sizer_panel.Add(self.rightbtn, 0, 0, cw.wins(0)) self.panel.SetSizer(sizer_panel) sizer_1.Add(self.toppanel, 1, wx.EXPAND, cw.wins(0)) sizer_1.Add(self.panel, 0, wx.EXPAND, cw.wins(0)) self.SetSizer(sizer_1) sizer_1.Fit(self) self.Layout()
def OnPaint(self, event): dc = wx.PaintDC(self.toppanel) csize = self.toppanel.GetSize() dc.SetBrush(wx.Brush(wx.Colour(0, 0, 128))) dc.DrawRectangle(0, 0, csize[0], csize[1]) dc.SetTextForeground(wx.LIGHT_GREY) dc.SetFont(cw.cwpy.rsrc.get_wxfont("paneltitle", pixelsize=cw.wins(16))) s = cw.cwpy.msgs["instructions"] dc.DrawText(s, cw.wins(5), cw.wins(2)) s = cw.cwpy.msgs["referencing_file"] w = dc.GetTextExtent(s)[0] w = w + cw.wins(5) + self.combo.GetSize()[0] dc.DrawText(s, self.GetClientSize()[0] - w, cw.wins(2)) dc.SetBrush(wx.Brush(wx.LIGHT_GREY)) dc.SetPen(wx.Pen(wx.LIGHT_GREY)) dc.DrawRectangle(0, self.combo.GetSize()[1], csize[0], cw.wins(2)) if not self.list2: dc.SetTextForeground(wx.LIGHT_GREY) dc.SetFont(cw.cwpy.rsrc.get_wxfont("paneltitle", pixelsize=cw.wins(20))) # 文字 s = "No Text File" size = dc.GetTextExtent(s) size2 = self.toppanel.GetSize() pos = (size2[0]-size[0])/2, (size2[1]-size[1])/2 dc.DrawText(s, pos[0], pos[1]) # ボックス size = size[0] + cw.wins(60), size[1] + cw.wins(20) pos = pos[0] - cw.wins(30), pos[1] - cw.wins(10) cw.util.draw_box(dc, pos, size)
def __init__(self, parent, name): # ダイアログボックス wx.Dialog.__init__(self, parent, -1, name, size=cw.wins((501, 290)), style=wx.CAPTION|wx.SYSTEM_MENU|wx.CLOSE_BOX) self.cwpy_debug = False # panel self.toppanel = wx.Panel(self, -1, size=cw.wins((501, 254))) self.toppanel.SetBackgroundColour(wx.Colour(0, 0, 128)) self.panel = wx.Panel(self, -1, size=(-1, cw.wins(29)))#style=wx.RAISED_BORDER) # rich text ctrl if self.list2: value = self.list2[self.index2] else: value = "" self.richtextctrl = cw.util.CWPyRichTextCtrl(self.toppanel, -1, "", size=cw.wins((550, 220)), style=wx.TE_MULTILINE|wx.NO_BORDER, searchmenu=True) self.foreground = self.richtextctrl.GetForegroundColour() self._set_text(value) self.richtextctrl.SetBackgroundColour(wx.Colour(0, 0, 128)) self.richtextctrl.SetFont(cw.cwpy.rsrc.get_wxfont("datadesc", pixelsize=cw.wins(14))) self.richtextctrl.SetEditable(False) self.richtextctrl.ShowPosition(0) # close self.closebtn = cw.cwpy.rsrc.create_wxbutton(self.panel, wx.ID_CANCEL, cw.wins((90, 23)), cw.cwpy.msgs["close"]) # left bmp = cw.cwpy.rsrc.buttons["LMOVE"] self.leftbtn = cw.cwpy.rsrc.create_wxbutton(self.panel, wx.ID_UP, cw.wins((30, 30)), bmp=bmp, chain=True) # right bmp = cw.cwpy.rsrc.buttons["RMOVE"] self.rightbtn = cw.cwpy.rsrc.create_wxbutton(self.panel, wx.ID_DOWN, cw.wins((30, 30)), bmp=bmp, chain=True) # choice self.combo = wx.ComboBox(self.toppanel, size=cw.wins((140, 20)), choices=self.list, style=wx.CB_READONLY) self.combo.SetFont(cw.cwpy.rsrc.get_wxfont("combo", pixelsize=cw.wins(14))) cw.util.adjust_dropdownwidth(self.combo) if self.list: self.combo.SetSelection(self.index) # button enable self._enable_btn() # layout self.__do_layout() # bind self.Bind(wx.EVT_BUTTON, self.OnClickLeftBtn, self.leftbtn) self.Bind(wx.EVT_BUTTON, self.OnClickRightBtn, self.rightbtn) self.Bind(wx.EVT_COMBOBOX, self.OnCombobox) self.toppanel.Bind(wx.EVT_PAINT, self.OnPaint) # FIXME: ウィンドウのリサイズで正しく再描画されない。 # 挙動が意味不明なので根本的な対処は行えていないが、 # 以下のようにリサイズイベント中にレイアウトと # 再描画を行う事で回避できている。 def resize(event): self.Layout() self.Refresh() self.Bind(wx.EVT_SIZE, resize) self.richtextctrl.Enable(bool(self.list2)) if self.list2: self.richtextctrl.Show() self.combo.Enable() self.Layout() else: self.richtextctrl.Hide() self.combo.Disable() self.leftpagekeyid = wx.NewId() self.rightpagekeyid = wx.NewId() self.upkeyid = wx.NewId() self.downkeyid = wx.NewId() backid =wx.NewId() self.Bind(wx.EVT_MENU, self.OnCancel, id=backid) self.Bind(wx.EVT_MENU, self.OnClickLeftBtn, id=self.leftpagekeyid) self.Bind(wx.EVT_MENU, self.OnClickRightBtn, id=self.rightpagekeyid) self.Bind(wx.EVT_MENU, self.OnUp, id=self.upkeyid) self.Bind(wx.EVT_MENU, self.OnDown, id=self.downkeyid) seq = [ (wx.ACCEL_CTRL, wx.WXK_LEFT, self.leftpagekeyid), (wx.ACCEL_CTRL, wx.WXK_RIGHT, self.rightpagekeyid), (wx.ACCEL_CTRL, wx.WXK_UP, self.upkeyid), (wx.ACCEL_CTRL, wx.WXK_DOWN, self.downkeyid), (wx.ACCEL_NORMAL, wx.WXK_BACK, backid), (wx.ACCEL_NORMAL, ord('_'), backid), (wx.ACCEL_CTRL, ord('C'), wx.ID_COPY), (wx.ACCEL_CTRL, ord('A'), wx.ID_SELECTALL), ] cw.util.set_acceleratortable(self, seq)
def __init__(self, parent, name, text, mode=2, choices=None): wx.Dialog.__init__(self, parent, -1, name, size=cw.wins((355, 120)), style=wx.CAPTION | wx.SYSTEM_MENU | wx.CLOSE_BOX) self.cwpy_debug = False self.basetext = text self.text = cw.util.wordwrap(text, 50) self.mode = mode dc = wx.ClientDC(self) dc.SetFont(cw.cwpy.rsrc.get_wxfont("dlgmsg", pixelsize=cw.wins(15))) w, h, _lineheight = dc.GetMultiLineTextExtent(self.text) self._textheight = h dw = cw.wins(349) dh = cw.wins(68) dw = max(dw, w + cw.wins(10) * 2) dh = max(dh, h + cw.wins(68)) self.SetClientSize((dw, dh)) if self.mode == 1: # yes and no self.yesbtn = cw.cwpy.rsrc.create_wxbutton(self, wx.ID_OK, cw.wins((120, 30)), cw.cwpy.msgs["yes"]) self.nobtn = cw.cwpy.rsrc.create_wxbutton(self, wx.ID_CANCEL, cw.wins((120, 30)), cw.cwpy.msgs["no"]) self.buttons = (self.yesbtn, self.nobtn) elif self.mode == 2: # close self.closebtn = cw.cwpy.rsrc.create_wxbutton( self, wx.ID_CANCEL, cw.wins((120, 30)), cw.cwpy.msgs["close"]) self.buttons = (self.closebtn, ) elif self.mode == 3: # 任意 self.buttons = [] for d in choices: if len(d) == 4: s, id, width, desc = d elif len(d) == 3: s, id, width = d desc = u"" else: s, id = d desc = u"" width = -1 button = cw.cwpy.rsrc.create_wxbutton(self, id, (width, cw.wins(30)), s) if desc: button.SetToolTipString(desc) self.buttons.append(button) button.Bind(wx.EVT_BUTTON, self.OnButton) else: assert False # layout self._do_layout() # bind self.Bind(wx.EVT_RIGHT_UP, self.OnCancel) for child in self.GetChildren(): child.Bind(wx.EVT_RIGHT_UP, self.OnCancel) self.Bind(wx.EVT_PAINT, self.OnPaint) copyid = wx.NewId() backid = wx.NewId() self.Bind(wx.EVT_MENU, self.OnCancel, id=backid) self.Bind(wx.EVT_MENU, self.OnCopyDetail, id=copyid) seq = [ (wx.ACCEL_NORMAL, wx.WXK_BACK, backid), (wx.ACCEL_NORMAL, ord('_'), backid), (wx.ACCEL_CTRL, ord('C'), copyid), ] cw.util.set_acceleratortable(self, seq)
def _do_layout(self): sizer_1 = wx.BoxSizer(wx.VERTICAL) sizer_1.Add(self.toppanel, 1, wx.EXPAND, cw.wins(0)) self.SetSizer(sizer_1) sizer_1.Fit(self) self.Layout()
def draw(self, update=False): assert len(self.list) dc = select.Select.draw(self, update) # 背景 path = "Table/Book" path = cw.util.find_resource(cw.util.join_paths(cw.cwpy.skindir, path), cw.cwpy.rsrc.ext_img) bmp = cw.wins(cw.util.load_wxbmp(path, can_loaded_scaledimage=True)) bmpw = bmp.GetSize()[0] dc.DrawBitmap(bmp, 0, 0, False) header = self.list[self.index] self._update_restorable() restorable = self.restorable[self.index] if restorable: _can, members, cards = restorable else: _can = False members = {} cards = None # 見出し dc.SetTextForeground(wx.BLACK) dc.SetFont(cw.cwpy.rsrc.get_wxfont("dlgtitle", pixelsize=cw.wins(14))) s = cw.cwpy.msgs["adventurers_team_record"] w = dc.GetTextExtent(s)[0] dc.DrawText(s, (bmpw - w) / 2, cw.wins(25)) # 所持金 if header: s = cw.cwpy.msgs["adventurers_money"] % (header.money) else: s = cw.cwpy.msgs["adventurers_money"] % (u"---") w = dc.GetTextExtent(s)[0] dc.DrawText(s, (bmpw - w) / 2, cw.wins(60)) # メンバ名 if update: if header: self.names = header.get_membernames() else: self.names = [] if len(self.names) > 3: n = (3, len(self.names) - 3) else: n = (len(self.names), 0) w = cw.wins(95) for index, s in enumerate(self.names): if members.get(header.members[index], False): dc.SetTextForeground((0, 0, 0)) else: dc.SetTextForeground((128, 128, 128)) s = cw.util.abbr_longstr(dc, s, cw.wins(95)) if index < 3: dc.DrawLabel( s, wx.Rect((bmpw - w * n[0]) / 2 + w * index, cw.wins(85), w, cw.wins(15)), wx.ALIGN_CENTER) else: dc.DrawLabel( s, wx.Rect((bmpw - w * n[1]) / 2 + w * (index - 3), cw.wins(105), w, cw.wins(15)), wx.ALIGN_CENTER) # パーティ名 dc.SetTextForeground((0, 0, 0)) dc.SetFont(cw.cwpy.rsrc.get_wxfont("dlgtitle", pixelsize=cw.wins(20))) if header: s = header.name else: s = cw.cwpy.msgs["new_party_record"] w = dc.GetTextExtent(s)[0] dc.DrawText(s, (bmpw - w) / 2, cw.wins(40)) # 所持カード dc.SetFont(cw.cwpy.rsrc.get_wxfont("dlgtitle", pixelsize=cw.wins(16))) s = cw.cwpy.msgs["backpack_record"] w = dc.GetTextExtent(s)[0] dc.DrawText(s, (bmpw - w) / 2, cw.wins(130)) if header: llen = min(4, len(header.backpack)) else: llen = 4 hlen = 6 dc.SetFont(cw.cwpy.rsrc.get_wxfont("dlglist", pixelsize=cw.wins(14))) if header: backpacklist = header.backpack if llen * hlen < len(backpacklist): backpacklist = backpacklist[:llen * hlen - 1] backpacklist.append(cw.cwpy.msgs["history_etc"]) w = cw.wins(84) y = cw.wins(150) for index, s in enumerate(backpacklist): if cards and cards[index]: dc.SetTextForeground((0, 0, 0)) else: dc.SetTextForeground((128, 128, 128)) s = cw.util.abbr_longstr(dc, s, cw.wins(84)) ypos = y + cw.wins(16) * int(index / llen) xpos = index % llen dc.DrawLabel( s, wx.Rect((bmpw - w * llen) / 2 + w * xpos + cw.wins(10), ypos, w, cw.wins(15)), wx.ALIGN_LEFT) # ページ番号 dc.SetTextForeground((0, 0, 0)) dc.SetFont(cw.cwpy.rsrc.get_wxfont("dlgtitle", pixelsize=cw.wins(14))) s = str(self.index + 1) if self.index > 0 else str(-self.index + 1) s = s + " / " + str(len(self.list)) w = dc.GetTextExtent(s)[0] dc.DrawText(s, (bmpw - w) / 2, cw.wins(250)) if update: self.enable_btn()
def _do_layout(self): csize = self.GetClientSize() sizer_1 = wx.BoxSizer(wx.VERTICAL) sizer_2 = wx.BoxSizer(wx.HORIZONTAL) sizer_3 = wx.BoxSizer(wx.HORIZONTAL) sizer_4 = wx.BoxSizer(wx.HORIZONTAL) sizer_1.Add(cw.wins((0, 50)), 0, 0, 0) dc = wx.ClientDC(self) font = cw.cwpy.rsrc.get_wxfont("dlgmsg", pixelsize=cw.wins(16)) dc.SetFont(font) w, _h = dc.GetTextExtent(u"対象エンジン:") sizer_3.Add((w, 0), 0, wx.RIGHT|wx.CENTER, cw.wins(5)) sizer_3.Add(self.target, 1, wx.CENTER, cw.wins(0)) sizer_4.Add((w, 0), 0, wx.RIGHT|wx.CENTER, cw.wins(5)) sizer_4.Add(self.folder, 1, wx.CENTER, cw.wins(0)) sizer_4.Add(self.reffolder, 0, wx.CENTER|wx.EXPAND, cw.wins(0)) sizer_1.Add(sizer_4, 0, wx.LEFT|wx.RIGHT|wx.EXPAND, cw.wins(10)) sizer_1.Add(cw.wins((0, 5)), 0, 0, cw.wins(0)) sizer_1.Add(sizer_3, 0, wx.LEFT|wx.RIGHT|wx.EXPAND, cw.wins(10)) sizer_1.Add(cw.wins((0, 10)), 0, 0, cw.wins(0)) margin = (csize[0] - self.okbtn.GetSize()[0] * 2) / 3 sizer_2.Add(self.okbtn, 0, wx.LEFT, margin) sizer_2.Add(self.cnclbtn, 0, wx.LEFT|wx.RIGHT, margin) sizer_1.Add(sizer_2, 1, wx.EXPAND, cw.wins(0)) sizer_1.Add(cw.wins((0, 10)), 0, 0, cw.wins(0)) self.SetSizer(sizer_1) sizer_1.Fit(self) self.Layout()