1 /* 2 * This program source code file is part of KiCad, a free EDA CAD application. 3 * 4 * Copyright (C) 2019-2020 KiCad Developers, see AUTHORS.txt for contributors. 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License 8 * as published by the Free Software Foundation; either version 2 9 * of the License, or (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, you may find one here: 18 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html 19 * or you may search the http://www.gnu.org website for the version 2 license, 20 * or you may write to the Free Software Foundation, Inc., 21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 22 */ 23 24 #ifndef KIWAY_HOLDER_H_ 25 #define KIWAY_HOLDER_H_ 26 27 class KIWAY; 28 class PROJECT; 29 class wxWindow; 30 31 /** 32 * A mix in class which holds the location of a wxWindow's KIWAY. 33 * 34 * It allows calls to Kiway() and SetKiway(). 35 */ 36 class KIWAY_HOLDER 37 { 38 public: 39 enum HOLDER_TYPE { DIALOG, FRAME, PANEL }; 40 KIWAY_HOLDER(KIWAY * aKiway,HOLDER_TYPE aType)41 KIWAY_HOLDER( KIWAY* aKiway, HOLDER_TYPE aType ) : 42 m_kiway( aKiway ), 43 m_type( aType ) 44 {} 45 GetType()46 HOLDER_TYPE GetType() const { return m_type; } 47 48 /** 49 * Return a reference to the #KIWAY that this object has an opportunity to participate in. 50 * 51 * A KIWAY_HOLDER is not necessarily a KIWAY_PLAYER. 52 */ Kiway()53 KIWAY& Kiway() const 54 { 55 wxASSERT( m_kiway ); // smoke out bugs in Debug build, then Release runs fine. 56 return *m_kiway; 57 } 58 59 /** 60 * Return a reference to the #PROJECT associated with this #KIWAY. 61 */ 62 PROJECT& Prj() const; 63 64 /** 65 * It is only used for debugging, since "this" is not a wxWindow*. "this" is 66 * a KIWAY_HOLDER mix-in. 67 * 68 * @param aDest is the recipient of \a aKiway pointer. 69 * @param aKiway is often from a parent window or from #KIFACE::CreateWindow(). 70 */ 71 void SetKiway( wxWindow* aDest, KIWAY* aKiway ); 72 73 private: 74 // private, all setting is done through SetKiway(). 75 KIWAY* m_kiway; // no ownership. 76 HOLDER_TYPE m_type; 77 }; 78 79 80 #endif // KIWAY_HOLDER_H_ 81