~loic.molinari/+junk/qtdeclarative-shadereffectsource-changes

« back to all changes in this revision

Viewing changes to examples/demos/twitterfriends/TwitterUser.qml

  • Committer: Loïc Molinari
  • Date: 2012-04-21 17:59:51 UTC
  • Revision ID: loic.molinari@canonical.com-20120421175951-bqx68caaf5zrp76l
Initial import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/****************************************************************************
 
2
**
 
3
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
 
4
** Contact: http://www.qt-project.org/
 
5
**
 
6
** This file is part of the examples of the Qt Toolkit.
 
7
**
 
8
** $QT_BEGIN_LICENSE:BSD$
 
9
** You may use this file under the terms of the BSD license as follows:
 
10
**
 
11
** "Redistribution and use in source and binary forms, with or without
 
12
** modification, are permitted provided that the following conditions are
 
13
** met:
 
14
**   * Redistributions of source code must retain the above copyright
 
15
**     notice, this list of conditions and the following disclaimer.
 
16
**   * Redistributions in binary form must reproduce the above copyright
 
17
**     notice, this list of conditions and the following disclaimer in
 
18
**     the documentation and/or other materials provided with the
 
19
**     distribution.
 
20
**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
 
21
**     the names of its contributors may be used to endorse or promote
 
22
**     products derived from this software without specific prior written
 
23
**     permission.
 
24
**
 
25
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 
26
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 
27
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 
28
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 
29
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 
30
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 
31
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 
32
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 
33
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 
34
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 
35
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
 
36
**
 
37
** $QT_END_LICENSE$
 
38
**
 
39
****************************************************************************/
 
40
 
 
41
import QtQuick 2.0
 
42
 
 
43
Item {
 
44
    id:twitterUser
 
45
    property variant friends : [];
 
46
    property string name : "";
 
47
    property string twitterId : "";
 
48
    property string image : "";
 
49
    property string url : "";
 
50
    property string desc : "";
 
51
    width : 0;
 
52
    height : 0;
 
53
    property int posX:0;
 
54
    property int posY:0;
 
55
    property bool hasFocus : false;
 
56
    property variant canvas;
 
57
    property variant manager;
 
58
    property variant linkColor;
 
59
    property bool selected : false;
 
60
 
 
61
    Rectangle {
 
62
        id:twitterStatus
 
63
        x:twitterUser.width
 
64
        y:twitterUser.height
 
65
        width:250
 
66
        height:60
 
67
        opacity: 0
 
68
        border.color:"steelblue"
 
69
        border.width:3
 
70
        Column {
 
71
            spacing:2
 
72
            Text {color:"steelblue"; font.pointSize:15; width:250; height:30; text:twitterUser.name; wrapMode: Text.WrapAnywhere}
 
73
            Text {color:"steelblue"; font.pointSize:8; width:250; height:30;  text:twitterUser.url; wrapMode: Text.WrapAnywhere}
 
74
        }
 
75
    }
 
76
 
 
77
    function moved() {
 
78
        twitterUser.posX = twitterUser.x;
 
79
        twitterUser.posY = twitterUser.y;
 
80
        twitterUser.canvas.requestPaint();
 
81
    }
 
82
 
 
83
    onXChanged: moved();
 
84
    onYChanged: moved();
 
85
 
 
86
    MouseArea {
 
87
        anchors.fill:parent
 
88
        drag.target : twitterUser
 
89
        drag.axis : Drag.XandYAxis
 
90
 
 
91
        onClicked: {
 
92
            if (!twitterUser.selected) {
 
93
                twitterUser.selected = true;
 
94
                twitterStatus.opacity = 1;
 
95
                twitterStatus.visible = true;
 
96
            } else {
 
97
                twitterUser.selected = false;
 
98
                twitterStatus.opacity = 0;
 
99
            }
 
100
        }
 
101
 
 
102
        onDoubleClicked : {
 
103
            twitterStatus.opacity = 0;
 
104
            twitterUser.selected = false;
 
105
            twitterUser.hasFocus = true;
 
106
            twitterUser.canvas.twitterName = twitterUser.name;
 
107
            twitterUser.canvas.twitterId = twitterUser.twitterId;
 
108
            twitterUser.canvas.loading = true;
 
109
            twitterUser.createFriends();
 
110
        }
 
111
    }
 
112
 
 
113
    function show(ctx, layoutChanged) {
 
114
      var w = canvas.width;
 
115
      var h = canvas.height;
 
116
      if (twitterUser.hasFocus) {
 
117
          twitterUser.width = 60
 
118
          twitterUser.height = 60
 
119
          twitterUser.posX = w/2;
 
120
          twitterUser.posY = h/2;
 
121
       } else {
 
122
          twitterUser.width = 40
 
123
          twitterUser.height = 40
 
124
      }
 
125
 
 
126
 
 
127
      if (twitterUser.hasFocus) {
 
128
          if (layoutChanged)
 
129
              twitterUser.layoutFriends();
 
130
          twitterUser.linkFriends(ctx);
 
131
          twitterUser.showFriends(ctx);
 
132
          ctx.shadowOffsetX = 5;
 
133
          ctx.shadowOffsetY = 5;
 
134
          ctx.shadowBlur = 7;
 
135
          ctx.shadowColor = "blue";
 
136
          ctx.globalAlpha = 1;
 
137
      }  else {
 
138
          ctx.shadowOffsetX = 5;
 
139
          ctx.shadowOffsetY = 5;
 
140
          ctx.shadowBlur = 7;
 
141
          ctx.shadowColor = twitterUser.linkColor;
 
142
          ctx.globalAlpha = 0.6;
 
143
      }
 
144
 
 
145
      if (twitterUser.canvas.isImageLoaded(twitterUser.image)) {
 
146
        ctx.drawImage(twitterUser.image, twitterUser.posX, twitterUser.posY, twitterUser.width, twitterUser.height);
 
147
      }
 
148
//      ctx.font = "15px";
 
149
//      var nameSize = ctx.measureText(twitterUser.name).width;
 
150
//      ctx.fillText(twitterUser.name, twitterUser.posX + nameSize/2 - twitterUser.width/2, twitterUser.posY + twitterUser.height/2 + 10);
 
151
    }
 
152
    function dump() {
 
153
        console.log("name:" + twitterUser.name
 
154
                  + " x:" + twitterUser.posX
 
155
                  + " y:" + twitterUser.posY
 
156
                  + " width:" + twitterUser.width
 
157
                  + " height:" + twitterUser.height
 
158
                  + " id:" + twitterUser.twitterId
 
159
                  + " image:" + twitterUser.image
 
160
                  + " url:" + twitterUser.url + "\n" + twitterUser.desc);
 
161
    }
 
162
 
 
163
    function layoutFriends() {
 
164
        var w = canvas.width;
 
165
        var h = canvas.height;
 
166
        for (var i=0; i < twitterUser.friends.length; i++) {
 
167
            var friend = manager.getById(twitterUser.friends[i]);
 
168
            if (friend) {
 
169
                friend.x = Math.random() *w;
 
170
                friend.y = Math.random() *h;
 
171
            }
 
172
        }
 
173
    }
 
174
 
 
175
    function showFriends(ctx) {
 
176
        var w = canvas.width;
 
177
        var h = canvas.height;
 
178
        for (var i=0; i < twitterUser.friends.length && i < 15; i++) {
 
179
            var friend = manager.getById(twitterUser.friends[i]);
 
180
            if (friend && twitterUser.canvas.isImageLoaded(friend.image)) {
 
181
                friend.hasFocus = false;
 
182
                friend.show(ctx, false);
 
183
            }
 
184
        }
 
185
    }
 
186
 
 
187
    function linkFriends(ctx) {
 
188
        var w = canvas.width;
 
189
        var h = canvas.height;
 
190
        for (var i=0; i < twitterUser.friends.length && i < 15; i++) {
 
191
            var friend = manager.getById(twitterUser.friends[i]);
 
192
            if (friend && twitterUser.canvas.isImageLoaded(friend.image)) {
 
193
                if (!friend.linkColor)
 
194
                     friend.linkColor = Qt.rgba( ((Math.random() * 200) +55)/255
 
195
                                               , ((Math.random() * 200) +55)/255
 
196
                                               , ((Math.random() * 200) +55)/255, 0.8);
 
197
                ctx.strokeStyle  = friend.linkColor;
 
198
                ctx.lineWidth = 8;
 
199
                ctx.beginPath();
 
200
                ctx.moveTo(twitterUser.posX + twitterUser.width/2, twitterUser.posY + twitterUser.height/2);
 
201
                ctx.lineTo(friend.x + friend.width/2, friend.y + friend.height/2);
 
202
                ctx.stroke();
 
203
            }
 
204
        }
 
205
    }
 
206
 
 
207
 
 
208
    function create(url) {
 
209
        var x = new XMLHttpRequest;
 
210
        x.open("GET", url);
 
211
 
 
212
        x.onreadystatechange = function() {
 
213
            if (x.readyState == XMLHttpRequest.DONE) {
 
214
                var user = eval('(' + x.responseText +')')[0];
 
215
                twitterUser.name = user.name;
 
216
                twitterUser.twitterId = user.id;
 
217
                twitterUser.image = user.profile_image_url;
 
218
                twitterUser.canvas.loadImage(twitterUser.image);
 
219
                twitterUser.url = user.url;
 
220
                twitterUser.desc = user.description;
 
221
                twitterUser.createFriends();
 
222
           }
 
223
        }
 
224
        x.send();
 
225
    }
 
226
 
 
227
    function createByName(name) {
 
228
      if (twitterUser.name === "" && twitterUser.twitterId === "") {
 
229
         twitterUser.name = name;
 
230
         var userUrl = "http://api.twitter.com/1/users/lookup.json?stringify_ids=true&screen_name=" + name;
 
231
         twitterUser.create(userUrl);
 
232
      }
 
233
    }
 
234
 
 
235
    function createById(id) {
 
236
      if (twitterUser.name === "" && twitterUser.twitterId === "") {
 
237
         twitterUser.twitterId = id;
 
238
         var userUrl = "http://api.twitter.com/1/users/lookup.json?stringify_ids=true&user_id=" + id;
 
239
         twitterUser.create(userUrl);
 
240
      }
 
241
    }
 
242
 
 
243
    function createFriends() {
 
244
      if (twitterUser.friends.length === 0) {
 
245
          var x = new XMLHttpRequest;
 
246
          var friendsUrl = "https://api.twitter.com/1/friends/ids.json?cursor=-1&stringify_ids=true&user_id=" + twitterUser.twitterId;
 
247
          x.open("GET", friendsUrl);
 
248
 
 
249
          x.onreadystatechange = function() {
 
250
              if (x.readyState == XMLHttpRequest.DONE) {
 
251
                 twitterUser.friends = eval('(' + x.responseText +')').ids;
 
252
                 var doRequest = false;
 
253
                  var userUrl = "http://api.twitter.com/1/users/lookup.json?stringify_ids=true&user_id=";
 
254
 
 
255
                 for (var i=0; i<twitterUser.friends.length && i < 100; i++) {
 
256
                    var friend = manager.getById(twitterUser.friends[i]);
 
257
                    if (!friend) {
 
258
                       userUrl += "," + twitterUser.friends[i];
 
259
                       doRequest = true;
 
260
                    }
 
261
                 }
 
262
 
 
263
                 if (!doRequest) return;
 
264
 
 
265
                 var xx = new XMLHttpRequest;
 
266
                 xx.open("GET", userUrl);
 
267
                 xx.onreadystatechange = function() {
 
268
                    if (xx.readyState == XMLHttpRequest.DONE) {
 
269
                       var friendUsers = eval('(' + xx.responseText +')');
 
270
                       for(var i=0; i<friendUsers.length; i++) {
 
271
                           var friend = manager.createTwitterUser(twitterUser.canvas);
 
272
                          friend.name = friendUsers[i].name;
 
273
                          friend.twitterId = friendUsers[i].id;
 
274
                          friend.image = friendUsers[i].profile_image_url ? friendUsers[i].profile_image_url : "";
 
275
                          friend.url = friendUsers[i].url ? friendUsers[i].url : "";
 
276
                          friend.desc = friendUsers[i].description ? friendUsers[i].description : "";
 
277
                          friend.manager = twitterUser.manager;
 
278
                          twitterUser.canvas.loadImage(friend.image);
 
279
                       }
 
280
 
 
281
                       if (twitterUser.hasFocus && twitterUser.canvas) {
 
282
                           twitterUser.canvas.layoutChanged = true;
 
283
                           twitterUser.canvas.loading = false;
 
284
                           twitterUser.canvas.requestPaint();
 
285
                       }
 
286
                    }
 
287
                 }
 
288
                 xx.send();
 
289
              }
 
290
          }
 
291
          x.send();
 
292
      }
 
293
    }
 
294
}
 
 
b'\\ No newline at end of file'