Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 21 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ project(SampleAddIn)

set(CMAKE_CXX_STANDARD 17)
set(TARGET SampleAddIn)
set(ATTACH_TYPE "ANY" CACHE STRING "Attach type: ISOLATED | NOT_ISOLATED | ANY (default)")

option(CASE_INSENSITIVE "Case insensitive method names" OFF)
option(STATIC_CRT "Static CRT linkage" OFF)
Expand All @@ -27,6 +28,24 @@ endif ()
add_library(${TARGET} SHARED
${SOURCES})

set(ATTACH_TYPE_ANY 0)
set(ATTACH_TYPE_ISOLATED 1)
set(ATTACH_TYPE_NOT_ISOLATED 2)

target_compile_definitions(${TARGET} PRIVATE ATTACH_TYPE_ANY=${ATTACH_TYPE_ANY})
target_compile_definitions(${TARGET} PRIVATE ATTACH_TYPE_ISOLATED=${ATTACH_TYPE_ISOLATED})
target_compile_definitions(${TARGET} PRIVATE ATTACH_TYPE_NOT_ISOLATED=${ATTACH_TYPE_NOT_ISOLATED})

if (${ATTACH_TYPE} STREQUAL "ANY")
set(ATTACH_TYPE ${ATTACH_TYPE_ANY})
elseif (${ATTACH_TYPE} STREQUAL "ISOLATED")
set(ATTACH_TYPE ${ATTACH_TYPE_ISOLATED})
elseif (${ATTACH_TYPE} STREQUAL "NOT_ISOLATED")
set(ATTACH_TYPE ${ATTACH_TYPE_NOT_ISOLATED})
else()
message(FATAL_ERROR "Unrecognized ATTACH_TYPE ${ATTACH_TYPE}")
endif ()

target_compile_definitions(${TARGET} PRIVATE
UNICODE
_UNICODE)
Expand All @@ -51,9 +70,10 @@ if (WIN32)
string(REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
string(REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
endif ()
# https://stackoverflow.com/questions/11040133/what-does-defining-win32-lean-and-mean-exclude-exactly
target_compile_definitions(${TARGET} PRIVATE
_WINDOWS
_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING)
_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING WIN32_LEAN_AND_MEAN)
target_compile_options(${TARGET} PRIVATE /utf-8)
endif ()

Expand Down
20 changes: 13 additions & 7 deletions include/AddInDefBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,10 @@ enum Interfaces
{
eIMsgBox = 0,
eIPlatformInfo,

#if defined(__ANDROID__)

eIAndroidComponentHelper,

#endif

#endif
eIAttachedInfo,
};

////////////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -155,5 +152,14 @@ struct IPlatformInfo :

virtual const AppInfo* ADDIN_API GetPlatformInfo() = 0;
};

#endif //__ADAPTER_DEF_H__
struct IAttachedInfo :
public IInterface
{
enum AttachedType
{
eAttachedIsolated = 0,
eAttachedNotIsolated,
};
virtual const AttachedType ADDIN_API GetAttachedInfo() = 0;
};
#endif //__ADAPTER_DEF_H__
36 changes: 32 additions & 4 deletions include/ComponentBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -204,16 +204,33 @@ class LocaleBase
virtual void ADDIN_API SetLocale(const WCHAR_T* loc) = 0;
};

///////////////////////////////////////////////////////////////////////
/// class UserLanguageBase- интерфейс изменения языка компоненты
/**
* Этот интерфейс предназначен для изменения локализации компоненты
*/
class UserLanguageBase
{
public:
virtual ~UserLanguageBase() {}
/// Изменение локали компоненты
/**
* @param const char16_t* lang - устанавливаемый язык (ru, etc...)
*/
virtual void ADDIN_API SetUserInterfaceLanguageCode(const WCHAR_T* lang) = 0;
};

///////////////////////////////////////////////////////////////////////////
/**
* The given interface is generalized, for its obligatory inheritance
* in implementing components.
*/
/// Base interface describing object as a set of properties and methods.
class IComponentBase :
public IInitDoneBase,
public ILanguageExtenderBase,
public LocaleBase
public IInitDoneBase,
public ILanguageExtenderBase,
public LocaleBase,
public UserLanguageBase
{
public:
virtual ~IComponentBase(){}
Expand All @@ -223,7 +240,16 @@ enum AppCapabilities
{
eAppCapabilitiesInvalid = -1,
eAppCapabilities1 = 1,
eAppCapabilitiesLast = eAppCapabilities1,
eAppCapabilities2 = 2,
eAppCapabilities3 = 3,
eAppCapabilitiesLast = eAppCapabilities3,
};

enum AttachType
{
eCanAttachNotIsolated = 1,
eCanAttachIsolated,
eCanAttachAny,
};

/// Announcements of exported functions
Expand All @@ -234,10 +260,12 @@ extern "C" long GetClassObject(const WCHAR_T*, IComponentBase** pIntf);
extern "C" long DestroyObject(IComponentBase** pIntf);
extern "C" const WCHAR_T* GetClassNames();
extern "C" AppCapabilities SetPlatformCapabilities(const AppCapabilities capabilities);
extern "C" AttachType GetAttachType();

typedef long (*GetClassObjectPtr)(const WCHAR_T* wsName, IComponentBase** pIntf);
typedef long (*DestroyObjectPtr)(IComponentBase** pIntf);
typedef const WCHAR_T* (*GetClassNamesPtr)();
typedef AppCapabilities (*SetPlatformCapabilitiesPtr)(const AppCapabilities capabilities);
typedef AttachType (*GetAttachTypePtr)();

#endif //__COMPONENT_BASE_H__
10 changes: 10 additions & 0 deletions src/Component.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -464,3 +464,13 @@ std::u16string Component::toUTF16String(std::string_view src) {
return cvt_utf8_utf16.from_bytes(src.data(), src.data() + src.size());
#endif
}

void Component::SetUserInterfaceLanguageCode(const wchar_t *lang) {
#ifdef CASE_INSENSITIVE
try {
std::locale::global(std::locale{toUTF8String(locale)});
} catch (std::runtime_error &) {
std::locale::global(std::locale{""});
}
#endif
}
1 change: 1 addition & 0 deletions src/Component.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ class Component : public IComponentBase {

bool ADDIN_API CallAsFunc(const long method_num, tVariant *ret_value, tVariant *params,
const long array_size) final;
void ADDIN_API SetUserInterfaceLanguageCode(const wchar_t *lang) final;

protected:
virtual std::string extensionName() = 0;
Expand Down
12 changes: 12 additions & 0 deletions src/exports.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,15 @@ long DestroyObject(IComponentBase **pInterface) {
AppCapabilities SetPlatformCapabilities(const AppCapabilities capabilities) {
return eAppCapabilitiesLast;
}

AttachType GetAttachType() {
#if ATTACH_TYPE == ATTACH_TYPE_ANY
return eCanAttachAny;
#elif ATTACH_TYPE == ATTACH_TYPE_ISOLATED
return eCanAttachIsolated;
#elif ATTACH_TYPE == ATTACH_TYPE_NOT_ISOLATED
return eCanAttachNotIsolated;
#else
#error "Unrecognized ATTACH_TYPE"
#endif
}