Annotation of nono/wx/wxsubwindow.cpp, revision 1.1.1.10

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.