14.위젯(Widget)

위젯(Widget)은 간단한 기능을 수행하기 위한 작은 크기의 애플리케이션입니다.

넥사크로플랫폼에서는 위젯 컴포넌트를 제공하지 않지만, Application 객체의 open 메소드를 사용하여 위젯을 구현하는 방법을 제공합니다. 개발자는 위젯으로 사용할 폼을 구현한 후 open 메소드를 사용하여 폼을 위젯으로 동작시킬 수 있습니다.

이번 장에서는 개발자가 넥사크로플랫폼에서 위젯을 생성, 종료하는 방법과 동작시키는 방법에 관해 설명합니다.

14.1위젯의 생성

위젯을 생성하기 위해서는 넥사크로플랫폼 애플리케이션 수행 중 strOpenStyle 인수의 widget 속성을 true로 설정하여 open 메소드를 호출합니다.

nexacro.Application.open("NewWidget", "Base::WidgetMain1.xfdl", null, "", "showontaskbar=false showtitlebar=false showstatusbar=false widget=true", 0, 0, 678, 530, this);

Application 객체의 open 메소드 사용법은 다음과 같습니다. 더 자세한 설명은 넥사크로플랫폼 레퍼런스가이드를 참조하시기 바랍니다.

application.open(strName, strFormURL, objParentFrame, {objArgumentList}, strOpenStyle, nLeft, nTop[,nWidth, nHeight[, objOpener]])

14.1.1Layered 위젯

위젯의 경우에는 창의 모양이 사각형이 아닌 여러 가지 형태를 보이는 경우가 많습니다. 이럴 때에는 layered 기능을 사용합니다. layered 기능이란 위젯 모양에 해당하는 영역만을 사용하게 하는 기능으로 넥사크로플랫폼에서는 속성의 설정을 통해 간단히 적용할 수 있습니다.

한가지 주의할 점은 위젯 모양에 해당하는 영역만을 사용하기 위해 반드시 배경을 투명(transparent)으로 설정해줘야 합니다.

  1. 메인 폼(위젯을 생성할 폼)에서 open 메소드를 호출할 때 strOpenStyle 인수의 layered 속성을 true로 설정합니다.

nexacro.Application.open("NewWidget", "Base:WidgetMain.xfdl", null, "", "showontaskbar=false showtitlebar=false showstatusbar=false layered=true widget=true", 0, 0, 678, 530, this);
  1. 위젯 폼(예제에서는 WidgetMain을 지칭)의 oninit 이벤트 핸들러에서 위젯 폼의 parent frame의 배경을 투명으로 설정합니다.

this.WidgetMain_oninit = function(obj:Form, e:nexacro.InitEventInfo)
{
    var parentFrame = this.parent;
    
    if (parentFrame.layered == true)
    {
        parentFrame.style.set_background("transparent");
    }
    
}

14.1.2단독 실행 형태의 위젯

넥사크로플랫폼에서는 open 메소드를 사용하여 위젯을 생성하기 때문에 일반적인 위젯 애플리케이션을 실행하는 경우처럼 위젯 폼을 애플리케이션의 시작 폼으로 지정할 수 없습니다. 따라서 단독 실행 형태의 위젯을 생성하기 위해서는 다음과 같이 처리합니다.

  1. 애플리케이션 메인 폼(예제에서는 AppMain을 지칭)을 생성한 후 시작 폼으로 지정합니다.

  2. 메인 폼의 oninit 이벤트 핸들러에서 메인 폼의 visible 속성을 false로 설정합니다.

  3. open 메소드를 사용하여 위젯을 생성합니다.

this.AppMain_oninit = function(obj:Form, e:nexacro.InitEventInfo)
{
    application.mainframe.set_visible(false);
    
    nexacro.Application.open("NewWidget", "Base::WidgetMain.xfdl",null, "", " widget=true", 0, 0, 678, 530, this);
    
}

단독 실행 형태의 위젯을 사용할 경우에 주의할 점은 위젯을 종료시키더라도 위젯을 생성했던 메인 폼은 종료되지 않고 남아 있다는 것입니다. 이런 경우에는 메인 폼을 종료해주는 별도의 절차가 필요한데 그에 대한 설명은 위젯의 종료를 참조하시기 바랍니다.

14.2위젯의 제어

위젯은 open 메소드를 사용하여 생성되기에 child frame과 같은 메소드와 속성을 갖습니다.

14.2.1위젯의 child frame 구하기

위젯의 child frame에 접근하는 방법은 접근하려는 위치에 따라 메인 폼(위젯을 생성한 폼)에서 접근하는 경우와 위젯 폼에서 접근하는 경우로 나뉠 수 있습니다.

var widgetFrame = nexacro.Application.popupframes.get_item("NewWidget");
var widgetFrame = this.parent;

14.2.2위젯의 이동 및 크기 변경

위젯의 위치나 크기를 변경하기 위해서는 위젯의 child frame 객체를 구한 후 child frame의 move 메소드를 사용합니다.

var widgetFrame = nexacro.Application.popupframes.get_item("NewWidget");

widgetFrame.move(100, 100);
widgetFrame.move(100, 100, 200, 500);

14.2.3위젯 속성의 사용

위젯의 속성은 child frame 속성과 같습니다. 따라서 위젯의 속성에 접근하기 위해서는 먼저 위젯의 child frame 객체를 구한 후 그 속성을 사용합니다.

var widgetFrame = nexacro.Application.popupframes.get_item(widgetId);

if (widgetFrame && widgetFrame.openstatus == “normal”)
{
    widgetFrame.set_openstatus("maximize");
}

14.2.4위젯 메소드의 사용

위젯의 메소드는 child frame 메소드와 같습니다. 따라서 위젯의 메소드를 사용하기 위해서는 먼저 위젯의 child frame 객체를 구한 후 그 메소드를 사용합니다.

var widgetFrame = nexacro.Application.popupframes.get_item(widgetId);

if (widgetFrame)
{
    widgetFrame.setFocus();
}
var widgetFrame = nexacro.Application.popupframes.get_item(widgetId);
var widgetForm = widgetFrame.form;

if (widgetForm)
{
    var newButton = new Button("NewButton", "absolute", 10, 10, 110, 100, null, null);

    if (newButton)
    {
        newButton.set_text("NewButton");
        widgetForm.addChild("NewButton", newButton);
        newButton.show();
    }
}

14.2.5위젯을 위한 deviceAPI

위젯의 showontaskbar 속성이 true일 경우에 작업 표시줄에 보여줄 아이콘을 설정하는 메소드입니다.

Parameter

Type

Description

strWidgetId

String

아이콘이 설정될 위젯의 id

strWidgetIconPath

String

작업표시줄에 보여줄 아이콘의 URL

사용 예:

nexacro.Application.setIconWidget("NewWidget", “URL(‘Img::Widget_Icon.png’)”);
nexacro.Application.setIconWidget("NewWidget", “URL(‘http://localhost:8080/XP13/WidgetTest/Img/Widget_Icon.png’)”);

위젯을 화면 최상위에 보여줄지를 설정하는 메소드입니다.

Parameter

Type

Description

strWidgetId

String

화면 최상위에 보여줄지를 설정할 위젯의 id

bWidgetTopmost

Boolean

위젯을 화면 최상위에 보여줄지 여부

사용 예:

nexacro.Application.setTopmostWidget("NewWidget", true);

14.3위젯의 종료

일반적으로 위젯을 종료시키려면 위젯의 child frame 객체에 접근하여 위젯 폼의 close 메소드를 호출합니다.

var widgetFrame = nexacro.Application.popupframes.get_item(widgetId);

if (widgetFrame && widgetFrame.form)
{
    widgetFrame.form.close();
}

단독 실행 형태의 위젯을 종료시키려면 위젯을 종료할 때 위젯을 생성한 애플리케이션도 종료시켜줘야 합니다. 따라서 위젯 폼(예제에서의 WidgetMain을 지칭)의 onclose 이벤트 핸들러에서 exit 메소드를 호출하여 애플리케이션을 종료합니다.

this.WidgetMain_onclose = function(obj:Form, e:nexacro.CloseEventInfo)
{
    if(!application.mainframe.visible)
    {
        application.exit();
    }
}