1ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved.
2ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
3ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// found in the LICENSE file.
4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
5ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifndef FWL_TARGET_H_
8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FWL_TARGET_H_
9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/include/fxcrt/fx_basic.h"
11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// FWL contains three parallel inheritance hierarchies, which reference each
13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// other via pointers as follows:
14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann//
15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann//                                           m_pImpl
16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann//      (nonesuch)              IFWL_Target ----------> CFWL_TargetImp
17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann//                                   |                       |
18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann//                                   A                       A
19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann//                   m_pIface        |                       |
20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann//      CFWL_Widget ----------> IFWL_Widget             CFWL_WidgetImp
21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann//           |                       |                       |
22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann//           A                       A                       A
23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann//           |                       |                       |
24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann//      CFWL_...                IFWL_...                CFWL_...Imp
25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann//
26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CFWL_TargetImp;
28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass IFWL_Target {
30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  IFWL_Target() : m_pImpl(nullptr) {}
32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual ~IFWL_Target();
33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  // These call into equivalent polymorphic methods of m_pImpl. There
35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  // should be no need to override these in subclasses.
36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FWL_ERR GetClassName(CFX_WideString& wsClass) const;
37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD GetClassID() const;
38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL IsInstance(const CFX_WideStringC& wsClass) const;
39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FWL_ERR Initialize();
40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FWL_ERR Finalize();
41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFWL_TargetImp* GetImpl() const { return m_pImpl; }
43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected:
45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void SetImpl(CFWL_TargetImp* pImpl) { m_pImpl = pImpl; }
46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann private:
48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFWL_TargetImp* m_pImpl;
49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann};
50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // FWL_TARGET_H_
52