public
Description: a tiny graphical app kit for ruby
Homepage: http://code.whytheluckystiff.net/shoes
Clone URL: git://github.com/why/shoes.git
Search Repo:
 * shoes/ruby.c: working on an `abort` method for cancelling downloads.
why (author)
Sun Jul 20 17:45:24 -0700 2008
commit  c147140320e487f210ee5520f03c549b1b9ad929
tree    6a402d8964c9ff779394f8eca232a154f22cf78a
parent  f6fd3b1eb5247a623e6ac8894daffd7bde3be05e
...
9
10
11
12
 
 
13
14
15
 
16
17
18
...
9
10
11
 
12
13
14
15
 
16
17
18
19
0
@@ -9,10 +9,11 @@ Shoes.app do
0
           stack do
0
             background "#eee".."#ccd"
0
             stack :margin => 10 do
0
- para @url.text, :margin => 0
0
+ dl = nil
0
+ para @url.text, " [", link("cancel") { dl.abort }, "]", :margin => 0
0
               d = inscription "Beginning transfer.", :margin => 0
0
               p = progress :width => 1.0, :height => 14
0
- download @url.text, :save => File.basename(@url.text),
0
+ dl = download @url.text, :save => File.basename(@url.text),
0
                 :progress => proc { |dl|
0
                   d.text = "Transferred #{dl.transferred} of #{dl.length} bytes (#{dl.percent}%)"
0
                   p.fraction = dl.percent * 0.01 },
...
227
228
229
 
230
231
232
...
546
547
548
549
 
550
551
552
...
227
228
229
230
231
232
233
...
547
548
549
 
550
551
552
553
0
@@ -227,6 +227,7 @@ typedef struct {
0
 typedef struct {
0
   VALUE parent;
0
   VALUE attr;
0
+ unsigned char state;
0
   unsigned LONG_LONG total;
0
   unsigned LONG_LONG transferred;
0
   unsigned long percent;
0
@@ -546,7 +547,7 @@ void shoes_textblock_send_release(VALUE, int, int, int);
0
 VALUE shoes_download_new(VALUE, VALUE, VALUE);
0
 VALUE shoes_download_alloc(VALUE);
0
 VALUE shoes_download_threaded(VALUE, VALUE, VALUE);
0
-void shoes_message_download(VALUE, void *);
0
+int shoes_message_download(VALUE, void *);
0
 VALUE shoes_p(VALUE, VALUE);
0
 
0
 extern const double SHOES_PIM2, SHOES_PI, SHOES_RAD2PI;
...
21
22
23
24
 
25
26
27
...
21
22
23
 
24
25
26
27
0
@@ -21,7 +21,7 @@ void shoes_native_cleanup(shoes_world_t *world);
0
 void shoes_native_quit();
0
 void shoes_get_time(SHOES_TIME *);
0
 unsigned long shoes_diff_time(SHOES_TIME *, SHOES_TIME *);
0
-void shoes_native_message(SHOES_CONTROL_REF w, unsigned int, VALUE, void *);
0
+int shoes_native_message(SHOES_CONTROL_REF w, unsigned int, VALUE, void *);
0
 void shoes_native_slot_mark(SHOES_SLOT_OS *);
0
 void shoes_native_slot_reset(SHOES_SLOT_OS *);
0
 void shoes_native_slot_clear(shoes_canvas *);
...
68
69
70
71
 
 
72
73
74
 
75
76
77
 
78
79
80
 
81
82
 
83
84
85
...
342
343
344
345
346
347
348
 
349
350
351
...
652
653
654
655
656
657
658
 
659
660
661
...
68
69
70
 
71
72
73
74
 
75
76
77
78
79
80
81
 
82
83
 
84
85
86
87
...
344
345
346
 
 
 
 
347
348
349
350
...
651
652
653
 
 
 
 
654
655
656
657
0
@@ -68,18 +68,20 @@ unsigned long shoes_diff_time(SHOES_TIME *start, SHOES_TIME *end)
0
   return *end - *start;
0
 }
0
 
0
-void shoes_windows_catch_message(unsigned int name, VALUE obj, void *data) {
0
+int shoes_windows_catch_message(unsigned int name, VALUE obj, void *data) {
0
+ int ret = 0;
0
   switch (name) {
0
     case SHOES_THREAD_DOWNLOAD:
0
- shoes_message_download(obj, data);
0
+ ret = shoes_message_download(obj, data);
0
       free(data);
0
     break;
0
   }
0
+ return ret;
0
 }
0
 
0
-void shoes_native_message(SHOES_CONTROL_REF w, unsigned int name, VALUE obj, void *data)
0
+int shoes_native_message(SHOES_CONTROL_REF w, unsigned int name, VALUE obj, void *data)
0
 {
0
- SendMessage(w, SHOES_WM_MESSAGE + name, obj, (LPARAM)data);
0
+ return SendMessage(w, SHOES_WM_MESSAGE + name, obj, (LPARAM)data);
0
 }
0
 
0
 void shoes_native_slot_mark(SHOES_SLOT_OS *slot)
0
@@ -342,10 +344,7 @@ shoes_slot_win32proc(
0
     }
0
 
0
     if (msg > SHOES_WM_MESSAGE && msg < SHOES_WM_MESSAGE + SHOES_MAX_MESSAGE)
0
- {
0
- shoes_windows_catch_message(msg - SHOES_WM_MESSAGE, (VALUE)w, (void *)l);
0
- return 1;
0
- }
0
+ return shoes_windows_catch_message(msg - SHOES_WM_MESSAGE, (VALUE)w, (void *)l);
0
   }
0
   return DefWindowProc(win, msg, w, l);
0
 }
0
@@ -652,10 +651,7 @@ shoes_app_win32proc(
0
   }
0
 
0
   if (msg > SHOES_WM_MESSAGE && msg < SHOES_WM_MESSAGE + SHOES_MAX_MESSAGE)
0
- {
0
- shoes_windows_catch_message(msg - SHOES_WM_MESSAGE, (VALUE)w, (void *)l);
0
- return 1;
0
- }
0
+ return shoes_windows_catch_message(msg - SHOES_WM_MESSAGE, (VALUE)w, (void *)l);
0
 
0
   return DefWindowProc(win, msg, w, l);
0
 }
...
3625
3626
3627
3628
3629
3630
3631
3632
...
3634
3635
3636
3637
 
3638
3639
3640
3641
 
 
 
 
 
 
 
 
3642
3643
3644
...
3666
3667
3668
3669
 
3670
3671
3672
...
3687
3688
3689
 
3690
3691
3692
...
3700
3701
3702
3703
3704
 
3705
3706
3707
...
4260
4261
4262
 
4263
4264
4265
...
3625
3626
3627
 
 
3628
3629
3630
...
3632
3633
3634
 
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
...
3672
3673
3674
 
3675
3676
3677
3678
...
3693
3694
3695
3696
3697
3698
3699
...
3707
3708
3709
 
 
3710
3711
3712
3713
...
4266
4267
4268
4269
4270
4271
4272
0
@@ -3625,8 +3625,6 @@ shoes_download_alloc(VALUE klass)
0
   obj = Data_Wrap_Struct(klass, shoes_download_mark, shoes_download_free, dl);
0
   dl->parent = Qnil;
0
   dl->attr = Qnil;
0
- dl->total = dl->transferred = 0;
0
- dl->percent = 0;
0
   return obj;
0
 }
0
 
0
@@ -3634,11 +3632,19 @@ VALUE
0
 shoes_download_remove(VALUE self)
0
 {
0
   GET_STRUCT(download_klass, self_t);
0
- // TODO: shoes_download_stop
0
+ self_t->state = SHOES_DOWNLOAD_HALT;
0
   shoes_canvas_remove_item(self_t->parent, self, 0, 1);
0
   return self;
0
 }
0
 
0
+VALUE
0
+shoes_download_abort(VALUE self)
0
+{
0
+ GET_STRUCT(download_klass, self_t);
0
+ self_t->state = SHOES_DOWNLOAD_HALT;
0
+ return self;
0
+}
0
+
0
 int
0
 shoes_dont_handler(shoes_download_event *de, void *data)
0
 {
0
@@ -3666,7 +3672,7 @@ shoes_download_non_threaded(VALUE self, VALUE url)
0
   return rb_str_new(mem, req.size);
0
 }
0
 
0
-void
0
+int
0
 shoes_message_download(VALUE self, void *data)
0
 {
0
   VALUE proc;
0
@@ -3687,6 +3693,7 @@ shoes_message_download(VALUE self, void *data)
0
 
0
   if (!NIL_P(proc))
0
     shoes_safe_block(dl->parent, proc, rb_ary_new3(1, self));
0
+ return dl->state;
0
 }
0
 
0
 typedef struct {
0
@@ -3700,8 +3707,7 @@ shoes_doth_handler(shoes_download_event *de, void *data)
0
   shoes_doth_data *doth = (shoes_doth_data *)data;
0
   shoes_download_event *de2 = SHOE_ALLOC(shoes_download_event);
0
   SHOE_MEMCPY(de2, de, shoes_download_event, 1);
0
- shoes_native_message(doth->ref, SHOES_THREAD_DOWNLOAD, doth->download, de2);
0
- return SHOES_DOWNLOAD_CONTINUE;
0
+ return shoes_native_message(doth->ref, SHOES_THREAD_DOWNLOAD, doth->download, de2);
0
 }
0
 
0
 VALUE
0
@@ -4260,6 +4266,7 @@ shoes_ruby_init()
0
 
0
   cDownload = rb_define_class_under(cShoes, "Download", rb_cObject);
0
   rb_define_alloc_func(cDownload, shoes_download_alloc);
0
+ rb_define_method(cDownload, "abort", CASTHOOK(shoes_download_abort), 0);
0
   rb_define_method(cDownload, "finish", CASTHOOK(shoes_download_finish), -1);
0
   rb_define_method(cDownload, "remove", CASTHOOK(shoes_download_remove), 0);
0
   rb_define_method(cDownload, "length", CASTHOOK(shoes_download_length), 0);

Comments

    No one has commented yet.