summaryrefslogtreecommitdiffstats
path: root/qx08/source/class/tr/Application.js
blob: 17044adfc24f26ace5af80a0b816aa77afb8f2b3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/* ************************************************************************
   Copyright: 2008, OETIKER+PARTNER AG
   License: GPL
   Authors: Tobias Oetiker
   $Id: $
* ************************************************************************ */

/*
#asset(tr/*)
*/

/**
 * This is the main application class of your custom application "qx08"
 */
qx.Class.define("tr.Application", {
    extend : qx.application.Standalone,

    members : {
        /**
         * This method contains the initial application code and gets called
         * during startup of the application
         *
         * @type member
         * @return {void}
         */
        main : function() {
            // Call super class
            this.base(arguments);

            // Enable logging in debug variant
            if (qx.core.Variant.isSet("qx.debug", "on")) {
                qx.log.appender.Native;
                qx.log.appender.Console;
            }

            // if we run with a file:// url make sure
            // the app finds the Tr service (tr.cgi)
            tr.Server.getInstance().setLocalUrl('http://localhost/~oetiker/tr/');

            this.getRoot().add(new tr.ui.CopyBuffer(), {
                left : 0,
                top  : 0
            });

            this.getRoot().add(new tr.ui.Error(), {
                left : 0,
                top  : 0
            });

            this.getRoot().add(new tr.ui.Config(), {
                left : 0,
                top  : 0
            });

            this.getRoot().add(new tr.ui.Link('SmokeTrace 2.4.2', 'http://oss.oetiker.ch/smokeping/', '#b0b0b0', '17px bold sans-serif'), {
                right : 7,
                top   : 5
            });

            // Document is the application root
            var root = new qx.ui.container.Composite(new qx.ui.layout.VBox());
            root.setPadding(5);

            this.getRoot().add(root, {
                left   : 0,
                top    : 0,
                right  : 0,
                bottom : 0
            });

            var tabs = new qx.ui.tabview.TabView();
            root.add(tabs, { flex : 1 });

            root.add(new tr.ui.Footer(this.tr("SmokeTrace is part of the of the SmokePing suite created by Tobi Oetiker, Copyright 2008."), 'http://oss.oetiker.ch/smokeping/'));

            tabs.add(new tr.ui.TraceTab());
            this.__handles = {};
            qx.event.message.Bus.subscribe('add_handle',this.__add_handle,this);
        },

        __handles: null,
        __handle_count: 0,

        __add_handle: function(m){
            var handle = m.getData();
            this.__handles[handle]=0;
            if (this.__handle_count == 0){
               this.__run_poller();
            }
        },
        __run_poller: function(){        
            var that = this;
            tr.Server.getInstance().callAsync(
                function(ret,exc,id){that.__process_input(ret,exc,id);},'poll',this.__handles
            );
        },
        __process_input: function(ret,exc,id){
            if (exc == null) {
                for (var hand in ret){
                    this.info('got '+hand);
                    if (hand == 'handles'){
                        this.__handles = ret[hand];
                    }
                    if (ret[hand]['data']){
                        qx.event.message.Bus.dispatch(hand+'::data', ret[hand]['data']);
                    }
                    if (ret[hand]['type']){
                        qx.event.message.Bus.dispatch(hand+'::status', {type : ret[hand]['type'],
                                                                        msg  : ret[hand]['msg']  });
                    }
                };
            }
            else {
                qx.event.message.Bus.dispatch('error', [ this.tr("Server Error"), '' + exc ]);
            }
            this.__handle_count = 0;
            for(var i in this.__handles){
                this.__handle_count ++;
            };
            if (this.__hanlde_count > 0){
                qx.event.Timer.once(this.__run_poller,this,this.__interval);
            }
        }
    }
});