Blame platform-demos/ko/statusbar.js.page

Packit 1470ea
Packit 1470ea
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" xmlns:xi="http://www.w3.org/2001/XInclude" type="guide" style="task" id="statusbar.js" xml:lang="ko">
Packit 1470ea
  <info>
Packit 1470ea
  <title type="text">Statusbar (JavaScript)</title>
Packit 1470ea
    <link type="guide" xref="beginner.js#display-widgets"/>
Packit 1470ea
    <revision version="0.1" date="2012-06-10" status="draft"/>
Packit 1470ea
Packit 1470ea
    <credit type="author copyright">
Packit 1470ea
      <name>Taryn Fox</name>
Packit 1470ea
      <email its:translate="no">jewelfox@fursona.net</email>
Packit 1470ea
      <years>2012</years>
Packit 1470ea
    </credit>
Packit 1470ea
Packit 1470ea
    <desc>지정 상태 표시줄에 알림 표시</desc>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>조성호</mal:name>
Packit 1470ea
      <mal:email>shcho@gnome.org</mal:email>
Packit 1470ea
      <mal:years>2017</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  </info>
Packit 1470ea
Packit 1470ea
  <title>Statusbar</title>
Packit 1470ea
  <media type="image" mime="image/png" src="media/statusbar2.png"/>
Packit 1470ea
  

이 상태 표시줄은 단추를 얼마나 눌렀는지 횟수 정보를 지니고 있습니다. <link href="http://projects.gnome.org/gedit/">지에디트</link>의 경우는 상태 표시줄을 활용하여 잠깐 살펴볼 정보를 나타내고 사용자의 일을 방해하지 않으면서 알림을 보여줍니다.

Packit 1470ea
  

상태 표시줄에 밀어넣은 메시지는 스택의 상단에 있으며, 가장 최근에 밀어넣은 순으로 보여주면서 빼낼 수 있습니다. 지정 형식의 모든 메시지를 한번에 빼낼 수 있습니다. 이 예제 프로그램에서는 이런 기능을 보여드립니다.

Packit 1470ea
    <links type="section"/>
Packit 1470ea
Packit 1470ea
  <section id="imports">
Packit 1470ea
    <title>가져올 라이브러리</title>
Packit 1470ea
    
Packit 1470ea
#!/usr/bin/gjs
Packit 1470ea
Packit 1470ea
const Gio = imports.gi.Gio;
Packit 1470ea
const Gtk = imports.gi.Gtk;
Packit 1470ea
const Lang = imports.lang;
Packit 1470ea
Packit 1470ea
    

이 프로그램을 실행할 때 가져올 라이브러리입니다. 시작 부분에 항상 gjs가 필요함을 알리는 줄을 작성해야 함을 기억하십시오.

Packit 1470ea
    </section>
Packit 1470ea
Packit 1470ea
  <section id="applicationwindow">
Packit 1470ea
    <title>프로그램 창 만들기</title>
Packit 1470ea
    
Packit 1470ea
const StatusbarExample = new Lang.Class({
Packit 1470ea
    Name: 'Statusbar Example',
Packit 1470ea
Packit 1470ea
    // Create the application itself
Packit 1470ea
    _init: function() {
Packit 1470ea
        this.application = new Gtk.Application({
Packit 1470ea
            application_id: 'org.example.jsstatusbar',
Packit 1470ea
            flags: Gio.ApplicationFlags.FLAGS_NONE
Packit 1470ea
        });
Packit 1470ea
Packit 1470ea
    // Connect 'activate' and 'startup' signals to the callback functions
Packit 1470ea
    this.application.connect('activate', Lang.bind(this, this._onActivate));
Packit 1470ea
    this.application.connect('startup', Lang.bind(this, this._onStartup));
Packit 1470ea
    },
Packit 1470ea
Packit 1470ea
    // Callback function for 'activate' signal presents window when active
Packit 1470ea
    _onActivate: function() {
Packit 1470ea
        this._window.present();
Packit 1470ea
    },
Packit 1470ea
Packit 1470ea
    // Callback function for 'startup' signal builds the UI
Packit 1470ea
    _onStartup: function() {
Packit 1470ea
        this._buildUI ();
Packit 1470ea
    },
Packit 1470ea
Packit 1470ea
    

이 예제의 모든 코드는 StatusbarExample 클래스에 들어갑니다. 위 코드는 위젯과 창을 넣는 <link href="http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Application.html">Gtk.Application</link>을 만듭니다.

Packit 1470ea
    
Packit 1470ea
    // Build the application's UI
Packit 1470ea
    _buildUI: function() {
Packit 1470ea
Packit 1470ea
        // Create the application window
Packit 1470ea
        this._window = new Gtk.ApplicationWindow({
Packit 1470ea
            application: this.application,
Packit 1470ea
            window_position: Gtk.WindowPosition.CENTER,
Packit 1470ea
            default_height: 120,
Packit 1470ea
            default_width: 300,
Packit 1470ea
            title: "Button Clicker"});
Packit 1470ea
Packit 1470ea
        // Create a paned interface
Packit 1470ea
        this._panes = new Gtk.Paned ({
Packit 1470ea
            orientation: Gtk.Orientation.VERTICAL });
Packit 1470ea
Packit 1470ea
    

_buildUI 함수는 프로그램 사용자 인터페이스를 만들 모든 코드를 넣는 곳입니다. 첫번째 단계에서는 모든 위젯을 넣을 새 <link href="GtkApplicationWindow.js.page">Gtk.ApplicationWindow</link>를 만듭니다. 그 다음 단계에서는 수직 방향 Gtk.Paned 인터페이스를 만들어 창을 두 부분으로 나눕니다. 이 방식으로 상태 표시줄을 다른 프로그램에서 나타나는 것처럼 표시하고, 사용자가 창 크기를 조절하더라도 창 하단에 머물러 있습니다.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="buttons">
Packit 1470ea
    <title>단추 만들기</title>
Packit 1470ea
    
Packit 1470ea
        // Create the main button
Packit 1470ea
        this._clickMe = new Gtk.Button ({
Packit 1470ea
            label: "Click Me!" });
Packit 1470ea
        this._clickMe.connect ("clicked", Lang.bind (this, this._clicked));
Packit 1470ea
Packit 1470ea
        // Create the back button
Packit 1470ea
        this._backButton = new Gtk.Button ({
Packit 1470ea
            label: "gtk-go-back",
Packit 1470ea
            use_stock: true });
Packit 1470ea
        this._backButton.connect ("clicked", Lang.bind (this, this._back));
Packit 1470ea
Packit 1470ea
        // Create the clear button
Packit 1470ea
        this._clearButton = new Gtk.Button ({
Packit 1470ea
            label: "gtk-clear",
Packit 1470ea
            use_stock: true });
Packit 1470ea
        this._clearButton.connect ("clicked", Lang.bind (this, this._clear));
Packit 1470ea
Packit 1470ea
    

이 코드는 상태 표시줄에서 새 메시지를 밀어넣고, 마지막 매시지를 빼내며, 기존 모든 메시지를 지울 때 쓸 <link href="button.js.page">Gtk.Buttons</link> 세 개를 만듭니다. "뒤로"와 "지우기" 단추는 그놈에서 지원하는 언어로 이미 자동으로 번역해주는 <link href="https://developer.gnome.org/gtk3/3.4/gtk3-Stock-Items.html">스톡 단추</link> 입니다.

Packit 1470ea
Packit 1470ea
    
Packit 1470ea
        // Put the buttons in a grid
Packit 1470ea
        this._grid = new Gtk.Grid ({
Packit 1470ea
            halign: Gtk.Align.CENTER,
Packit 1470ea
            valign: Gtk.Align.CENTER });
Packit 1470ea
        this._grid.attach (this._backButton, 0, 0, 1, 1);
Packit 1470ea
        this._grid.attach_next_to (this._clickMe, this._backButton, Gtk.PositionType.RIGHT, 1, 1);
Packit 1470ea
        this._grid.attach_next_to (this._clearButton, this._clickMe, Gtk.PositionType.RIGHT, 1, 1);
Packit 1470ea
Packit 1470ea
        // Put the grid in a large frame that fills most of the window
Packit 1470ea
        this._topFrame = new Gtk.Frame ({
Packit 1470ea
            border_width: 20,
Packit 1470ea
            height_request: 90,
Packit 1470ea
            width_request: 300});
Packit 1470ea
        this._topFrame.add (this._grid);
Packit 1470ea
Packit 1470ea
    

단추를 모아 정돈하고 순서대로 단추를 붙여넣는데 쓸 <link href="grid.js.page">Gtk.Grid</link>를 만듭니다. 그 다음 대부분 창을 차지하고, 단추 주변에 상당히 많은 여백을 차지하는 <link href="paned.js.page">Gtk.Frame</link>를 만들고 그리드를 프레임에 추가합니다. 참고로 프레임을 Pane 인터페이스에 넣고 ApplicationWindow에 추가해야합니다.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="statusbar">
Packit 1470ea
    <title>상태 표시줄 만들기</title>
Packit 1470ea
    
Packit 1470ea
        // Create the statusbar
Packit 1470ea
        this._statusbar = new Gtk.Statusbar();
Packit 1470ea
Packit 1470ea
        // Keep track of the number of times the button has been clicked
Packit 1470ea
        this.Clicks = 0;
Packit 1470ea
        this.ContextID = this._statusbar.get_context_id ("Number of Clicks");
Packit 1470ea
Packit 1470ea
        // Give the statusbar an initial message
Packit 1470ea
        this._statusbar.push (this.ContextID, "Number of clicks: " + this.Clicks);
Packit 1470ea
Packit 1470ea
        // Put the statusbar in its own frame at the bottom
Packit 1470ea
        this._barFrame = new Gtk.Frame ({
Packit 1470ea
            height_request: 30 });
Packit 1470ea
        this._barFrame.add (this._statusbar);
Packit 1470ea
Packit 1470ea
    

Gtk.Statusbar를 만들고 시작할 때 메시지를 밀어넣습니다. 그 다음 창 하단에 좁은 틀을 확보합니다.

Packit 1470ea
    

모든 메시지에는 컨텍스트 ID가 필요한데 get_context_id() 함수로 상태 표시줄에서 가져올 수 있는 정수값입니다. 각각의 컨텍스트 ID를 설명할 때 여러분이 활용할 유일한 매개 변수는 문자열 값 뿐입니다. 보통 메시지의 다양한 유형에 대해 새 컨텍스트 ID를 받기에 remove() 함수는 스택에 있는 최근 메시지가 아닌 지정 메시지를 제거할 목적으로 활용할 수 있습니다. 이 부분은 어떤 종류의 메시지에 대한 예제이므로 모든 경우에 대해 한가지만 활용하겠습니다.

Packit 1470ea
    

스택에 새 메시지를 밀어넣을때는 push() 함수를 사용합니다. 처음 매개변수는 컨텍스트 ID며 두번째는 메시지입니다.

Packit 1470ea
    
Packit 1470ea
        // Assemble the frames into the paned interface
Packit 1470ea
        this._panes.pack1 (this._topFrame, true, false);
Packit 1470ea
        this._panes.pack2 (this._barFrame, false, false);
Packit 1470ea
Packit 1470ea
        // Put the panes into the window
Packit 1470ea
        this._window.add (this._panes);
Packit 1470ea
Packit 1470ea
        // Show the window and all child widgets
Packit 1470ea
        this._window.show_all();
Packit 1470ea
    },
Packit 1470ea
Packit 1470ea
    

이 코드는 하위 창에 프레임을 패킹해넣고 창에 추가한 다음, 창에게 하위 위젯을 나타내도록 지시하여 창 만들기를 끝냅니다.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="functions">
Packit 1470ea
    <title>상태 표시줄을 다루는 함수</title>
Packit 1470ea
    
Packit 1470ea
    _clicked: function() {
Packit 1470ea
Packit 1470ea
        // Increment the number of clicks by 1
Packit 1470ea
        this.Clicks++;
Packit 1470ea
Packit 1470ea
        // Update the statusbar with the new number of clicks
Packit 1470ea
        this._statusbar.push (this.ContextID, "Number of clicks: " + this.Clicks);
Packit 1470ea
Packit 1470ea
    },
Packit 1470ea
Packit 1470ea
Packit 1470ea
Packit 1470ea
    _back: function () {
Packit 1470ea
Packit 1470ea
        // If there have been any clicks, decrement by 1 and remove last statusbar update
Packit 1470ea
        if (this.Clicks > 0 ) {
Packit 1470ea
            this.Clicks--;
Packit 1470ea
            this._statusbar.pop (this.ContextID);
Packit 1470ea
        };
Packit 1470ea
Packit 1470ea
    },
Packit 1470ea
Packit 1470ea
Packit 1470ea
Packit 1470ea
    _clear: function () {
Packit 1470ea
Packit 1470ea
        // Reset the number of clicks
Packit 1470ea
        this.Clicks = 0;
Packit 1470ea
Packit 1470ea
        // Wipe out all the messages pushed to the statusbar
Packit 1470ea
        this._statusbar.remove_all (this.ContextID);
Packit 1470ea
Packit 1470ea
        // Reset the statusbar's message
Packit 1470ea
        this._statusbar.push (this.ContextID, "Number of clicks: " + this.Clicks);
Packit 1470ea
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
});
Packit 1470ea
Packit 1470ea
    

여기서 메시지를 스택에 밀어넣고, 상단의 메시지를 빼내며, context ID를 가진 일부 메시지를 모두 지우는 함수가 있습니다. pop() 함수는 여러분이 빼고자 하는 최근 추가 메시지 형식에 대한 context ID 매개 변수만을 가지며, 설정 형식의 모든 메시지를 스택에서 제거했을 경우는 제외됩니다.

Packit 1470ea
    
Packit 1470ea
// Run the application
Packit 1470ea
let app = new StatusbarExample ();
Packit 1470ea
app.application.run (ARGV);
Packit 1470ea
Packit 1470ea
    

마지막으로, StatusbarExample 클래스에서 새 인스턴스를 만들고 프로그램 실행을 설정하겠습니다.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="complete">
Packit 1470ea
    <title>완전한 코드 예제</title>
Packit 1470ea
#!/usr/bin/gjs
Packit 1470ea
Packit 1470ea
imports.gi.versions.Gtk = '3.0';
Packit 1470ea
Packit 1470ea
const Gio = imports.gi.Gio;
Packit 1470ea
const Gtk = imports.gi.Gtk;
Packit 1470ea
Packit 1470ea
class StatusbarExample {
Packit 1470ea
Packit 1470ea
    // Create the application itself
Packit 1470ea
    constructor() {
Packit 1470ea
        this.application = new Gtk.Application({
Packit 1470ea
            application_id: 'org.example.jsstatusbar',
Packit 1470ea
            flags: Gio.ApplicationFlags.FLAGS_NONE
Packit 1470ea
        });
Packit 1470ea
Packit 1470ea
        // Connect 'activate' and 'startup' signals to the callback functions
Packit 1470ea
        this.application.connect('activate', this._onActivate.bind(this));
Packit 1470ea
        this.application.connect('startup', this._onStartup.bind(this));
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
    // Callback function for 'activate' signal presents window when active
Packit 1470ea
    _onActivate() {
Packit 1470ea
        this._window.present();
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
    // Callback function for 'startup' signal builds the UI
Packit 1470ea
    _onStartup() {
Packit 1470ea
        this._buildUI();
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
    // Build the application's UI
Packit 1470ea
    _buildUI() {
Packit 1470ea
Packit 1470ea
        // Create the application window
Packit 1470ea
        this._window = new Gtk.ApplicationWindow({
Packit 1470ea
            application: this.application,
Packit 1470ea
            window_position: Gtk.WindowPosition.CENTER,
Packit 1470ea
            default_height: 120,
Packit 1470ea
            default_width: 300,
Packit 1470ea
            title: "Button Clicker"});
Packit 1470ea
Packit 1470ea
        // Create a paned interface
Packit 1470ea
        this._panes = new Gtk.Paned ({
Packit 1470ea
            orientation: Gtk.Orientation.VERTICAL });
Packit 1470ea
Packit 1470ea
        // Create the main button
Packit 1470ea
        this._clickMe = new Gtk.Button ({
Packit 1470ea
            label: "Click Me!" });
Packit 1470ea
        this._clickMe.connect ("clicked", this._clicked.bind(this));
Packit 1470ea
Packit 1470ea
        // Create the back button
Packit 1470ea
        this._backButton = new Gtk.Button ({
Packit 1470ea
            label: "gtk-go-back",
Packit 1470ea
            use_stock: true });
Packit 1470ea
        this._backButton.connect ("clicked", this._back.bind(this));
Packit 1470ea
Packit 1470ea
        // Create the clear button
Packit 1470ea
        this._clearButton = new Gtk.Button ({
Packit 1470ea
            label: "gtk-clear",
Packit 1470ea
            use_stock: true });
Packit 1470ea
        this._clearButton.connect ("clicked", this._clear.bind(this));
Packit 1470ea
Packit 1470ea
        // Put the buttons in a grid
Packit 1470ea
        this._grid = new Gtk.Grid ({
Packit 1470ea
            halign: Gtk.Align.CENTER,
Packit 1470ea
            valign: Gtk.Align.CENTER });
Packit 1470ea
        this._grid.attach (this._backButton, 0, 0, 1, 1);
Packit 1470ea
        this._grid.attach_next_to (this._clickMe, this._backButton, Gtk.PositionType.RIGHT, 1, 1);
Packit 1470ea
        this._grid.attach_next_to (this._clearButton, this._clickMe, Gtk.PositionType.RIGHT, 1, 1);
Packit 1470ea
Packit 1470ea
        // Put the grid in a large frame that fills most of the window
Packit 1470ea
        this._topFrame = new Gtk.Frame ({
Packit 1470ea
            border_width: 20,
Packit 1470ea
            height_request: 90,
Packit 1470ea
            width_request: 300});
Packit 1470ea
        this._topFrame.add (this._grid);
Packit 1470ea
Packit 1470ea
        // Create the statusbar
Packit 1470ea
        this._statusbar = new Gtk.Statusbar();
Packit 1470ea
Packit 1470ea
        // Keep track of the number of times the button has been clicked
Packit 1470ea
        this.Clicks = 0;
Packit 1470ea
        this.ContextID = this._statusbar.get_context_id ("Number of Clicks");
Packit 1470ea
Packit 1470ea
        // Give the statusbar an initial message
Packit 1470ea
        this._statusbar.push (this.ContextID, "Number of clicks: " + this.Clicks);
Packit 1470ea
Packit 1470ea
        // Put the statusbar in its own frame at the bottom
Packit 1470ea
        this._barFrame = new Gtk.Frame ({
Packit 1470ea
            height_request: 30 });
Packit 1470ea
        this._barFrame.add (this._statusbar);
Packit 1470ea
Packit 1470ea
        // Assemble the frames into the paned interface
Packit 1470ea
        this._panes.pack1 (this._topFrame, true, false);
Packit 1470ea
        this._panes.pack2 (this._barFrame, false, false);
Packit 1470ea
Packit 1470ea
        // Put the panes into the window
Packit 1470ea
        this._window.add (this._panes);
Packit 1470ea
Packit 1470ea
        // Show the window and all child widgets
Packit 1470ea
        this._window.show_all();
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
    _clicked() {
Packit 1470ea
Packit 1470ea
        // Increment the number of clicks by 1
Packit 1470ea
        this.Clicks++;
Packit 1470ea
Packit 1470ea
        // Update the statusbar with the new number of clicks
Packit 1470ea
        this._statusbar.push (this.ContextID, "Number of clicks: " + this.Clicks);
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
    _back() {
Packit 1470ea
Packit 1470ea
        // If there have been any clicks, decrement by 1 and remove last statusbar update
Packit 1470ea
        if (this.Clicks > 0 ) {
Packit 1470ea
            this.Clicks--;
Packit 1470ea
            this._statusbar.pop (this.ContextID);
Packit 1470ea
        };
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
    _clear() {
Packit 1470ea
Packit 1470ea
        // Reset the number of clicks
Packit 1470ea
        this.Clicks = 0;
Packit 1470ea
Packit 1470ea
        // Wipe out all the messages pushed to the statusbar
Packit 1470ea
        this._statusbar.remove_all (this.ContextID);
Packit 1470ea
Packit 1470ea
        // Reset the statusbar's message
Packit 1470ea
        this._statusbar.push (this.ContextID, "Number of clicks: " + this.Clicks);
Packit 1470ea
    }
Packit 1470ea
};
Packit 1470ea
Packit 1470ea
// Run the application
Packit 1470ea
let app = new StatusbarExample ();
Packit 1470ea
app.application.run (ARGV);
Packit 1470ea
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="in-depth">
Packit 1470ea
    <title>자세한 문서</title>
Packit 1470ea
<list>
Packit 1470ea
  <item>

<link href="http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Application.html">Gtk.Application</link>

</item>
Packit 1470ea
  <item>

<link href="http://developer.gnome.org/gtk3/stable/GtkApplicationWindow.html">Gtk.ApplicationWindow</link>

</item>
Packit 1470ea
  <item>

<link href="http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Button.html">Gtk.Button</link>

</item>
Packit 1470ea
  <item>

<link href="http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Frame.html">Gtk.Frame</link>

</item>
Packit 1470ea
  <item>

<link href="http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Paned.html">Gtk.Paned</link>

</item>
Packit 1470ea
  <item>

<link href="http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Statusbar.html">Gtk.Statusbar</link>

</item>
Packit 1470ea
</list>
Packit 1470ea
  </section>
Packit 1470ea
</page>