/*!
    \qmltype Color
    \inqmlmodule org.deepin.dtk
    \brief \c DTK 项目中统一的颜色类型.

    Color 是 \c DTK 中为了适配 QPalette 部分颜色角色枚举，适配 Qt 的基础的颜色以及所有
    的 RGB 的颜色值。除此之外，该类能很好的兼容 \c ColorSelector 的取色系统和 \c Palette
    取色器调色板。

    构造 \c Color 对象有两种方式，一种是通过 QColor 对象，QColor 能够兼容使用字符串、Qt枚举
    等等方式，因此使用 QColor 构造 \c DTK 的 \c Color 同样能兼容上述方式。另外一种是通过 QPalette
    的部分枚举值，目前仅支持使用 \c Highlight 和 \c HighlightText 这两种枚举值。该枚举在 \c Color
    对象的 \c Type 枚举中有定义。

    \section2 Color.Type
    Type 枚举定义了颜色是什么类别，其与 QPalette::ColorRole 枚举描述一致，当需要使用一个抽象的颜色角色时，
    可以通过指定该类别，其颜色最终根据其控件的对应调色板颜色。

    \table
    \row
    \li Color.Invalid
    \li 无效 Type。此类枚举表示该类型是一个无效类型或者为具体颜色类型，非调色板数据类型。

    \row
    \li Color.Highlight
    \li 高亮色，对应于 QPalette::Highlight ，并且其颜色也从其所处控件的 Highlight 调色板中获取

    \row
    \li Color.HighlightedText
    \li 高亮文本色，对应于 QPalette::HighlightedText，其使用场景在高亮的背景下文本或者前景需要展示
    的颜色。

    \endtable
 */

/*!
    \qmlmethod bool Color::isValid()
    \return 判断当前颜色值是否有效，有效则返回 true, 否则返回 false。
 */

/*!
    \qmlmethod bool Color::isTypedColor()
    判断当前颜色是否是一种已标记颜色（或称调色板颜色）。 \return 是调色板颜色则返回 true，否则返回 false。
    通过 \c Color.Type 构造的颜色都是类型颜色，而通过 QColor 构造的颜色不是类型颜色。
    类型颜色不是一个具体的颜色值，它需要一个具体的 QPalette 对象才能获取具体颜色。
 */

/*!
    \qmlmethod color Color::toColor(var palette)
    转换 \c Color 类型的颜色为 \c QColor 类型的颜色，该函数能够将 \c Color 类型转化成
    一个具体的 QColor 颜色类型。通过判断 \c Color.Type 类型的颜色值，从 \a palette
    参数中获取 \c Color 使用的调色板对应的具体颜色值。

    \return 返回对应调色板数据的 QColor 颜色值。
 */

/*!
    \qmlmethod color Color::color()
    将 \c Color 类型转换成 QColor 类型，当 \c Color 指定了 \c lightness 或 \c opacity 属性时，该颜色
    会将这两种属性设置到输出的颜色中。

    \return 将转换后的 QColor 类型。
    \note 该函数不适用 Typed 颜色类型
 */

/*!
    \qmlmethod Color Color::lightness(int floatValue)
    将自身的 \c Color 提高/降低 \a floatValue 大小的亮度，并返回。

    \return 返回调整亮度后的 Color 类型颜色。
 */

/*!
    \qmlmethod Color Color::opacity(int floatValue)
    将自身的 \c Color 提高/降低 \a floatValue 大小的不透明度，并返回。

    \return 返回调整不透明度后的 Color 类型颜色。
 */

/*!
    \qmltype DTK
    \inqmlmodule org.deepin.dtk
    \keyword DQMLGlobalObject
    \brief 提供一个全局的 \c DTK 对象，保证QML中能够获取 \c DTK 的相关枚举和函数.

    DTK 对象可以更方便地在QML中使用，它提供了一些统一的函数、属性以及枚举值，它能够更快捷的
    访问一些系统信息和图形化配置，下述代码简单展示了其使用方式：

    \qml
    import org.deepin.dtk 1.0

    Text {
        color: DTK.selectorColor(palette.window, "black", "white")
        text: "WindowManager: " + DTK.windowManagerNameString()
    }
    \endqml

    \section1 枚举
    \c DTK 将一些通用的枚举类型封装起来，当做控件的枚举统一进行使用。在使用DTK封装的控件中，
    能够很容易看到他们的使用场景。例如，你可以设置控件Z轴坐标，来控制控件的层级关系，使用
    \c DTK.BottomOrder 来设置最底层控件，使用 \c DTK.TopOrder 设置最顶层控件坐标。

    \section2 DTK.ControlState
    \c Control 控件的状态，\c Control 控件或继承于 \c Control 控件都有多种状态，如：hover、
    press、disabled等等，该枚举能够在 DTK 的其他控件中使用进行统一，例如在 \c ColorSelector
    中可以通过该枚举控制控件的状态， \c DciIcon 中可以通过设置值指定图标的状态等等。

    \table
    \row
    \li \c DTK.NormalState
    \li
    Control 控件的 normal 状态，是控件最原始的状态，控件在未处理任何事件且可用时的
    一种状态。

    \row
    \li \c DTK.HoveredState
    \li
    Control 控件当鼠标放置到控件时的状态。

    \row
    \li \c DTK.PressedState
    \li
    Control 控件当鼠标按压时的控件状态。

    \row
    \li \c DTK.DisabledState
    \li
    Control 控件在禁用时的状态，当控件的 enable 属性设置为 false 状态时，就是该种状态。
    这种状态下，无法接受任何鼠标事件。

    \row
    \li \c DTK.InactiveState
    \li
    Control 控件在未激活下的状态，当窗口处于非焦点状态下，该窗口下的所有控件都是未激活状态。

    \endtable

    \section2 DTK.ZOrder
    Control 的 z 属性表示的控件的层级堆叠关系，当某个控件的 z 值比其他所有控件的 z 值都低时，
    表示该控件在最低层显示，可以被其他控件覆盖。 \c DTK 提供了一种便捷方式设置该属性，就是这个
    枚举值。

    \table
    \row
    \li \c DTK.BottomOrder
    \li
    最底层控件，其层级关系是所有控件中最低的。

    \row
    \li \c DTK.BelowOrder
    \li
    下层控件，这个层级关系比 \c DTK.BottomOrder 高，它能够覆盖 \c DTK.BottomOrder 层
    的控件。

    \row
    \li \c DTK.NormalOrder
    \li
    常规控件，当控件不设置 z 属性时默认就是该值，这是大多数控件的层级大小，它比 \c DTK.BelowOrder
    和 \c DTK.BottomOrder 都高。

    \row
    \li \c DTK.AboveOrder
    \li
    普通上层控件，该层级大小大于 \c DTK.NormalOrder 的层级大小。

    \row
    \li \c DTK.TopOrder
    \li
    顶层控件，顶层控件显示在所有控件之上，能够遮盖住其他枚举状态的所有控件。目前如 \c TitleBar 等
    控件正在使用这种层级堆叠枚举。

    \endtable

    \section2 DTK.PopupMode
    Popup 控件窗口弹出模式（Menu 等继承于 Popup 的控件也适用）， 默认情况下所有的 Popup 控件类型
    为 DTK.AutoMode 模式。

    \table
    \row
    \li \c DTK.AutoMode
    \li
    自动模式，能够根据 “D_POPUP_MODE” 环境变量的值指定，如果该变量被设置为 “embed”，则为嵌入式弹出
    窗口类型，否则为独立式窗口类型。

    \row
    \li \c DTK.WindowMode
    \li
    独立式窗口模式，该模式下窗口能够独立于其他窗口显示，作为一个单独的窗口，类似于 dtkwidget 的 Menu 窗口
    类似。

    \row
    \li \c DTK.EmbedMode
    \li
    嵌入式窗口模式，默认的 qtdeclarative 项目风格的 Menu 和 Popup 控件为该类型，此模式将 Popup 窗口嵌入
    其父窗口内部，其显示无法超出父窗口的大小，并且会根据父窗口的位置和大小而发生适应性变化。

    \endtable

    \section2 DTK.ArrowDirection
    箭头方向枚举，如 \c Slider 控件中箭头滑块， 当 \c Slider 控件需要有上下左右的标签时，需要指定 \c Slider
    滑块的方向。

    \table
    \row
    \li \c DTK.UpArrow
    \li
    上箭头

    \row
    \li \c DTK.DownArrow
    \li
    下箭头

    \row
    \li \c DTK.LeftArrow
    \li
    左箭头

    \row
    \li \c DTK.RightArrow
    \li
    右箭头

    \endtable

    \section1 函数
    使用DTK中提供的函数能够更好的兼容DTK控件的使用方式，能快捷的适配DTK控件的特殊使用场景。
    例如，一些标准的窗口信息函数，可以获取到窗管的无标题和混成模式等等信息；DTK 通用颜色可以
    通过函数进行颜色混合、颜色调整以及特殊颜色的创建。以下将从几个方面展开描述 DTK 提供的一些
    基本通用函数：

    \section2 窗管信息
    QML中能够快速通过这些函数快速获取到当前窗管的一些属性，其中包含获取窗管是否支持模糊，是否支持混成，
    是否处于无标题以及是否是软件渲染的状态。

    \list
        \li \l{DTK::hasBlurWindow}{bool DTK.hasBlurWindow()}
        \li \l{DTK::hasComposite}{bool DTK.hasComposite()}
        \li \l{DTK::hasNoTitlebar}{bool DTK.hasNoTitlebar()}
        \li \l{DTK::isSoftwareRender}{bool DTK.isSoftwareRender()}
        \li \l{DTK::windowManagerName}{int DTK.windowManagerName()}
        \li \l{DTK::windowManagerNameString}{string DTK.windowManagerNameString()}
    \endlist

    \section2 主题相关
    DTK程序默认都适配明/暗主题，DTK程序在某些情况下需要获取明暗主题相关的接口，或者获取平台主题和应用主题
    的相关配置时，可以调用这些接口信息。

    \list
        \li \l{DTK::themeType}{int DTK.themeType()}
        \li \l{DTK::platformTheme}{Object DTK.platformTheme()}
        \li \l{DTK::toColorType()}{int DTK.toColorType()}
        \li \l{DTK::selectColor()}{color DTK.selectColor()}
    \endlist

    \section2 消息通知
    DTK能够使用全局对象的方式发送消息，以下函数提供了一种便捷的发送窗口内通知的快捷方式。
    \list
        \li \l{DSendMessageFromContent}{DTK.sendMessage()}
        \li \l{DSendMessageFromComponent}{DTK.sendMessage(Object)}
        \li \l{DCloseMessageFromMessageObject}{DTK.closeMessage(Container)}
        \li \l{DCloseMessageFromMessageId}{DTK.closeMessage(Object)}
    \endlist

    \section2 颜色相关
    DTK提供了相关函数能够更方便的调整颜色，获取调色板信息。
    \list
        \li \l{DTK::palette}{DTK.palette()}
        \li \l{DTK::inactivePalette}{DTK.inactivePalette()}
        \li \l{DTK::blendColor()}{color DTK.blendColor()}
        \li \l{DTK::makeColor(Color::Type type)}{DTK.makeColor(type)}
        \li \l{DTK::makeColor(color)}{DTK.makeColor(color)}
    \endlist

    \section2 图标相关
    DCI图标相关的统一接口，例如兼容QIcon和DciIcon的附加属性、将QPalette属性设置到IconPalette中等等。
    \list
        \li \l{DTK::makeIcon()}{DTK.makeIcon()}
        \li \l{DTK::makeIconPalette()}{DTK.makeIconPalette()}
    \endlist

    \section2 其他函数
    其它未汇总的函数，例如一些系统信息，字体管理，以及弹出菜单的嵌入模式等等
    \list
        \li \l{DTK::fontManager}{DTK.fontManager()}
        \li \l{DTK::makeShadowImageUrl()}{DTK.makeShadowImageUrl()}
        \li \l{DTK::deepinWebsiteName}{DTK.deepinWebsiteName()}
        \li \l{DTK::deepinWebsiteLink}{DTK.deepinWebsiteLink()}
        \li \l{DTK::deepinDistributionOrgLogo}{DTK.deepinDistributionOrgLogo()}
        \li \l{DTK::cursorPosition}{DTK.cursorPosition()}
        \li \l{DTK::setPopupMode()}{DTK.setPopupMode()}
    \endlist
 */

/*!
    \qmlproperty bool DTK::hasBlurWindow
    \readonly

    如果当前窗口管理器支持窗口背景模糊特效则返回 true，否则返回 false
 */

/*!
    \qmlproperty bool DTK::hasComposite
    \readonly

    如果当前窗口管理器支持混成则返回 true，否则返回 false
 */

/*!
    \qmlproperty bool DTK::hasNoTitlebar
    \readonly

    如果窗口管理器当前支持设置隐藏窗口标题栏则返回 true，否则返回 false
 */

/*!
    \qmlproperty bool DTK::isSoftwareRender
    \readonly

    如果当前窗口渲染模式为软件，则返回 true，否则返回 false
 */

/*!
    \qmlproperty string DTK::windowManagerNameString
    \readonly

    当前使用的窗口管理器名称
 */

/*!
    \qmlproperty int DTK::themeType
    \readonly

    程序的主题类型.

    当themeType为UnknownType时, 将自动根据
    GuiApplication::palette的QPalette::background颜色计算主题
    类型, 否则与 paletteType 的值一致. 程序中应当使用此值作为
    暗色/亮色主题类型的判断.
 */

/*!
    \qmlproperty int DTK::windowManagerName
    \readonly

    窗口管理器名称枚举.

    目前包含 DeepinWM, KWinWM 和其他窗口管理器。
 */

/*!
    \qmlproperty Object DTK::platformTheme
    \readonly

    返回应用程序的平台主题实例.

    平台主题能够获取到一些系统级的主题配置，如图标主题，铃声主题，窗口圆角，
    调色板颜色信息等等相关配置。
 */

/*!
    \qmlproperty FontManager DTK::fontManager
    \readonly

    应用程序的字体管理器实例实例.

    字体管理器通过使用 t1 - t10 的字体字号进行
    统一管理，同时也能设置一些自定义的特殊字号。
 */

/*!
    \qmlproperty qpalette DTK::palette
    \readonly

    返回应用程序默认的调色板主题
 */

/*!
    \qmlproperty qpalette DTK::inactivePalette
    \readonly

    应用程序默认的未激活状态的调色板主题
 */

/*!
    \qmlmethod color DTK::blendColor(color substrate, color superstratum)
    将 \a substrate 和 \a superstratum 颜色进行混合，形成一种新的颜色。
    该颜色通过 alpha 通道的权重值进行混合运算，新的颜色值中 RGB 等于 \a substrate 的 RGB
    值 * (1 - \a superstratum 的 alpha 值) 加上 \a superstratum 的 RGB 值 * superstratum
    的 alpha 值， 新颜色的 alpha 值和底色的 alpha值一致。

    \return 返回调整后的颜色值
 */

/*!
    \qmlmethod Color DTK::makeColor(Color::Type type)
    根据 \a type 类型创建出 Color 实例，目前 type 包含
    Highlight 和 HighlightedText 两种。

    \return 返回转换后的 Color 类型的颜色值。
 */

/*!
    \qmlmethod Color DTK::makeColor(color c)
    将 \a c 转换成 Color 并返回。 Color 能够兼容 QColor 和 type
    两种模式。

    \return 返回转换后的 Color 类型的颜色值。
 */

/*!
    \qmlmethod url DTK::makeShadowImageUrl()
    内部DTK接口，用于创建 shadow image 的url链接，其实现方式是将其内部属性
    全部都添加到一个URL中，用于最后渲染Image时获取对应属性。

    \return 返回阴影的 Url 用于解析获取。
 */

/*!
    \qmlmethod int DTK::toColorType(color c)
    用于根据一个指定的颜色 \a c ，返回在该颜色下对应的系统主题。
    最常用的方式是通过传入 \c Control 中调色板属性中的 window
    颜色来判断主题类型。

    \return 亮色主题颜色返回 ApplicationHelper.LightType, 暗色主题
    返回 ApplicationHelper.DarkType
 */

/*!
    \qmlmethod color DTK::selectColor(color windowColor, color light, color dark)
    用于根据一个指定的颜色 \a windowColor ，判断当前程序正在使用的
    系统主题，并根据不同主题返回对应的 \a light 和 \a dark 颜色。

    \return 当 LightType 时返回 \a light , 当 DarkType 时返回 \a dark 。
 */

/*!
    \qmlproperty string DTK::deepinWebsiteName
    \readonly

    Deepin 网站名称。
 */

/*!
    \qmlproperty string DTK::deepinWebsiteLink
    \readonly

    Deepin 网站链接。
 */

/*!
    \qmlproperty string DTK::deepinDistributionOrgLogo
    \readonly

    Deepin 组织 Logo 路径。
 */

/*!
    \qmlproperty point DTK::cursorPosition
    readonly

    鼠标当前位置的属性。
    Qt 中返回鼠标位置只能通过 MouseArea 控件，但当多个该控件一起
    就存在覆盖而无法正确接受事件的可能，因此 DTK 提供一个可以直接
    访问鼠标位置的接口，方便QML程序获取并使用。
 */

/*!
    \qmlmethod DciIcon DTK::makeIcon(QtIcon, DciIconAttached)
    兼容 \a QtIcon 的属性，将 DciIcon 附加属性值和 \a QtIcon 的属性值添加到
    DciIcon 实例中。这种方式大多在控件图标为 \a QtIcon 时使用，在添加 \a QtIcon
    的属性后，可以通过添加 DciIcon 附加属性，将其进行整合，例如 Button 控件。

    \qml
    import org.deepin.dtk 1.0

    Button {
        width: 50
        height: 50

        icon.name: "apple"
        icon.width: 24
        icon.height: 24
        DciIcon.palette.foreground: "red"
        DciIcon.mode: DTK.HoveredState
        DciIcon.theme: ApplicationHelper.DarkType
    }
    \endqml
    上述方式这样实现是由于，Button 的属性 icon 为 QtIcon, 而其内部的图标控件是 DciIcon，
    因此为了保持兼容，在使用方式上不存在差别，才衍生出该函数进行整合。Button 中使用该函数进行
    QtIcon 和 DciIcon 附加属性进行绑定的场景如下：

    \qml
    import org.deepin.dtk 1.0

    Button {
        id: control
        contentItem: IconLabel {
            icon: DTK.makeIcon(control.icon, control.DciIcon)
        }
    }
    \endqml

    \return 返回兼容后的 DciIcon 图标实例。
 */

/*!
    \qmlmethod DciIcon::Palette DTK::makeIconPalette(qpalette)
    根据 \a qpalette 创建图标的调色板属性。 图标调色板和控件调色板是分开的
    图标调色板分为 Foreground Background HighlightForeground 和 Hightlight 四种
    某些图标的图层会使用该类调色板进行着色，当控件使用 \c QPalette 时，可以将 \c QPalette
    和 DDciIconPalette 兼容。
    例如以下使用场景：
    \qml
    import org.deepin.dtk 1.0

    Control {
        property alias icon: _icon
        DciIcon {
            id: _icon
            anchors.centerIn: parent
            sourceSize {
                width: 50
                height: 50
            }

            palette: DTK.makeIconPalette(parent.palette)
        }

    }
    \endqml

    \return 返回转化后的 DciIcon 中的 palette 属性，返回后的实例可直接应用在 DciIcon
    的属性中进行属性绑定。
 */

/*!
    \qmlmethod bool DTK::sendMessage(object target, string content, string iconName, int duration, string msgId)
    \keyword DSendMessageFromContent

    DTK 提供一种能在全局发送应用内通知的方式，目前有两种方式：一种是提供所有的通知信息，DTK 进行托管显示，并设置关闭或手动关闭。
    一种是提供消息的 Component 组件，DTK 负责布局和管理，组件自身提供样式和关闭策略。

    以下函数代表的第一种情况， \a target 可以使用目标对象或者目标对象所处的 \c window 。 \a content 为需要显示的文本信息
    \a iconName 为可选参数，当需要显示图标时，可传入图标名称。 \a duration 为可选参数，代表消息显示的时长，默认时间为 4 秒，
    当 \a duration 参数为 -1 时，表示该显示为常驻消息，关闭需要手动点击关闭按钮才行。 \a msgId 为可选参数，当 \a msgId 未
    指定时，显示的消息将都为不同类消息，当多个消息的 \a msgId 一致时，后面的消息会替换同类型的前面的消息。

    其使用方法如下展示：
    \qml
    import org.deepin.dtk 1.0

    Button {
        text: "FloatingMessage"
        property int count: 0
        onClicked: {
            DTK.sendMessage(control, "message" + count)
            DTK.sendMessage(Window.window, "message" + count, "music", 4000, "type1")
            DTK.sendMessage(Window.window, "message" + count, "video", -1)
            count++
        }
    }
    \endqml
 */

/*!
    \qmlmethod bool DTK::sendMessage(object target, component delegate, var message, int duration, string msgId)
    \keyword DSendMessageFromComponent

    这种方式跟 \l {DSendMessageFromContent}{DTK.sendMessage()} 类似，不同的是，
    它可以使用自定义创建的 \c FloatingMessage 和 \c FloatingMessageContainer 组件进行指定。
    \a target 可以使用目标对象或者目标对象所处的 \c window 。 \a delegate 为消息显示的代理组件，可以使用 \c DTK 封装好的
    \c FloatingMessage 添加自定义文本或者策略进行显示，也可以自己封装 \c FloatingMessageContainer 实现自定义的消息组件，当然
    后面这种方式的成本更高。 \a message 参数指定 \a delegate 组件封装时需要用的额外参数，例如“content”，“iconName”等内容，由于
    \c Component 存在作用域的问题，问了更方便的获取到这些数据对象，防止出现属性绑定失败的情况，DTK 消息推荐将数据对象传入到 \a message
    参数中， \a message 接收一个 JSON 的键值对类型，数据通过键值对进行访问，例如下述示例：

    \qml
    import org.deepin.dtk 1.0

    Button {
        text: "FloatingMessage"
        onClicked: {
            DTK.sendMessage(control, floatingMsgCom, {content: "message....", iconName: "music"}, -1)
        }

        Component {
            id: floatingMsgCom
            FloatingMessage {
            }
        }
    }
    \endqml

    上述代码中 \a message 变量传入了“{content: "message....", iconName: "music"}”参数，值得注意的是， FloatingMessage 中自带了两个
    默认的 “key”，如上面参数展示，其分别是 “content” 和 “iconName”，分别对应的是文本内容和图标名称。对于一些自定义的键值对，可以使用如下方式
    添加：

    \qml
    import org.deepin.dtk 1.0

    Button {
        text: "FloatingMessage"
        onClicked: {
            DTK.sendMessage(control, floatingMsgCom, {text: "message....", iconName: "music"}, -1)
        }

        Component {
            id: floatingMsgCom
            FloatingMessage {
                id: floatMsg
                contentItem: RowLayout {
                    anchors.fill: parent
                    spacing: 0

                    Label {
                        Layout.fillHeight: true
                        Layout.fillWidth: true
                        text: floatMsg.message.text
                        verticalAlignment: Text.AlignVCenter
                        horizontalAlignment: Text.AlignLeft
                        Layout.alignment: Qt.AlignVCenter
                        font: DTK.fontManager.t6
                        wrapMode: Text.Wrap
                        elide: Text.ElideRight
                        maximumLineCount: 1
                    }

                    Button {
                        text: "reload"
                        font: DTK.fontManager.t5
                        Layout.alignment: Qt.AlignVCenter
                    }
                }
            }
        }
    }
    \endqml

    \a duration 为可选参数，代表消息显示的时长，默认时间为 4 秒，当 \c duration 参数为 -1 时，表示该显示为常驻消息，关闭需要手动点击关闭按钮才行。
    \a msgId 为可选参数，当 \a msgId 未指定时，显示的消息将都为不同类消息，当多个消息的 \a msgId 一致时，后面的消息会替换同类型的前面的消息。
 */

/*!
    \qmlmethod void DTK::closeMessage(object message)
    \keyword DCloseMessageFromMessageObject

    关闭浮动消息的统一接口，当使用 \l {DSendMessageFromComponent}{DTK.sendMessage(Object)} 接口时，
    当自己重新定义 \c Component \a message 后，如果重载了其内部属性，就需要手动处理关闭该消息的动作。否则需要等待 duration 结束才能关闭，该种使用场
    景可以通过下述方式描述：

    \qml
    import org.deepin.dtk 1.0

    Button {
        text: "FloatingMessage"
        onClicked: {
            DTK.sendMessage(control, floatingMsgCom, {content: "message...."}, -1)
        }
        Component {
            id: floatingMsgCom
            FloatingMessage {
                id: floatMsg
                button: Button {
                    text: "close"
                    onClicked: {
                        console.log("close clicked")
                        DTK.closeMessage(floatMsg)
                    }
                }
            }
        }
    }
    \endqml
 */

/*!
    \qmlmethod void DTK::closeMessage(object target, string msgId)
    \keyword DCloseMessageFromMessageId

    通过 \a msgId 关闭浮动消息，其中 \a target 表示浮动消息所在的 Item 或 Window 控件。
    当控件中存在 \a msgId 指定的消息时，通过该接口可直接将该消息关闭。\a msgId 与 sendMessage()
    接口中的 \a msgId 相对应。
 */

/*!
    \qmlmethod void DTK::setPopupMode(int mode)

    设置 Popup 类型窗口的弹出方式，目前 \a mode 可以设置为 嵌入式弹出窗口（ EmbedMode ）或者 独立式弹出窗口（ WindowMode ）两种模式
    ，其默认值为 AutoMode, 该模式会根据窗口情况进行自动选择。除此之外，还能通过修改环境变量的方式：

    可以在 main 函数开头添加如下代码：
    \code
    int main(int argc, char **argv)
    {
        qputenv("D_POPUP_MODE", "embed");
        ...
        return a.exec();
    }
    \endcode
    当 “D_POPUP_MODE” 的值为非 “embed” 表示为独立式窗口。
 */
