|
|
1.1 root 1: //
2: // nono
1.1.1.2 root 3: // Copyright (C) 2020 nono project
4: // Licensed under nono-license.txt
1.1 root 5: //
6:
1.1.1.7 root 7: //
8: // サブウィンドウ
9: //
10:
1.1 root 11: #include "wxsubwindow.h"
1.1.1.7 root 12: #include "fontmanager.h"
1.1.1.2 root 13: #include "wxmainframe.h"
1.1.1.3 root 14: #include "wxtextscreen.h"
1.1 root 15:
16: //
1.1.1.7 root 17: // サブウィンドウ (基本クラス)
1.1 root 18: //
19:
20: // イベントテーブル
21: wxBEGIN_EVENT_TABLE(WXSubWindow, inherited)
22: EVT_CLOSE(WXSubWindow::OnClose)
23: wxEND_EVENT_TABLE()
24:
1.1.1.5 root 25: // コンストラクタ
1.1 root 26: WXSubWindow::WXSubWindow(wxWindow *parent, wxWindowID id, const wxString& name,
27: int style)
1.1.1.5 root 28: : inherited(parent, id, name, wxDefaultPosition, wxDefaultSize, style)
1.1 root 29: {
30: }
31:
32: // デストラクタ
33: WXSubWindow::~WXSubWindow()
34: {
35: }
36:
37: // クローズイベント
38: void
39: WXSubWindow::OnClose(wxCloseEvent& event)
40: {
41: // ウィンドウリストから自身を削除
1.1.1.9 root 42: auto mainframe = dynamic_cast<WXMainFrame*>(GetParent());
43: mainframe->DeleteWindow(this);
1.1 root 44: }
1.1.1.2 root 45:
1.1.1.7 root 46: // フォントサイズ変更
1.1.1.3 root 47: void
1.1.1.7 root 48: WXSubWindow::FontChanged()
1.1.1.3 root 49: {
1.1.1.7 root 50: // WXTextPanel 派生の子コントロールに対し FontChanged() を呼ぶ
51: for (auto child : GetChildren()) {
52: auto textpanel = dynamic_cast<WXTextPanel*>(child);
1.1.1.3 root 53: if (textpanel) {
1.1.1.7 root 54: textpanel->FontChanged();
1.1.1.3 root 55: }
56: }
57:
1.1.1.10! root 58: Fit();
1.1.1.7 root 59: }
60:
1.1.1.10! root 61: // 中身に応じてこのウィンドウの大きさを変更。
! 62: // このウィンドウを sizer が支配しているか、
! 63: // このウィンドウにコントロールが1つしかない時に使える。
! 64: //
! 65: // コントロールが複数ある場合、どう配置するかの情報がないのでここでは処理
! 66: // 出来ない。これを継承したウィンドウが Fit() をオーバーライドし、適切に
! 67: // ウィンドウサイズを計算して SetClientSize() すること。
1.1.1.7 root 68: void
1.1.1.10! root 69: WXSubWindow::Fit()
1.1.1.7 root 70: {
71: wxSize csize;
72:
73: auto *topsizer = GetSizer();
74: if (topsizer) {
75: // Sizer があればそれがサイズを知っている
1.1.1.10! root 76: csize = topsizer->ComputeFittingClientSize(this);
1.1.1.7 root 77: } else {
78: // Sizer を使ってなければ子コントロールは1人のはず
79: auto& children = GetChildren();
80: assert(children.GetCount() == 1);
81: auto child = children[0];
1.1.1.10! root 82: csize = child->GetSize();
1.1.1.7 root 83: }
84: SetClientSize(csize);
1.1.1.3 root 85: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.