c60ff1396dfd88f4c1ff548c35baf1c3310ff31d
[profile/ivi/efl-theme-tizen.git] / themes / widgets / panes.edc
1 /*
2  * efl-theme-tizen
3  * Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4  *
5  * Licensed under the Apache License, Version 2.0 (the License);
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an AS IS BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18
19
20    group {
21       name: "elm/panes/vertical/default";
22       images {
23          image: "00_splite_handler_bg_v.png" COMP;
24          image: "00_splite_handler_bg_press.png" COMP;
25          image: "00_splite_handler_v.png" COMP;
26       }
27       parts
28       {
29          part
30          {
31             name: "whole";
32             type: RECT;
33             description
34             {
35                state: "default" 0.0;
36                visible: 0;
37                rel1.to_x: "pad_left";
38                rel2.to_x: "pad_right";
39             }
40          }
41          part {
42             name: "pad_left";
43             type: RECT;
44             scale: 1;
45             description {
46                state: "default" 0.0;
47                rel2.relative:0.0 1.0;
48                min: PANES_STYLE_DEFAULT_PADDING_LEFT_SIZE_INC 0;
49                fixed: 1 0;
50                align: 1.0 0.5;
51                visible: 0;
52             }
53             description {
54                state: "hidden" 0.0;
55                inherit: "default" 0.0;
56                min: 0 0;
57             }
58          }
59          part {
60             name: "pad_right";
61             type: RECT;
62             scale: 1;
63             description {
64                state: "default" 0.0;
65                rel1.relative: 1.0 0.0;
66                min: PANES_STYLE_DEFAULT_PADDING_RIGHT_SIZE_INC 0;
67                fixed: 1 0;
68                align: 0.0 0.5;
69                visible: 0;
70             }
71             description {
72                state: "hidden" 0.0;
73                inherit: "default" 0.0;
74                min: 0 0;
75             }
76          }
77          //2 contents
78          part
79          {
80             name: "whole_left";
81             type: RECT;
82             mouse_events: 0;
83             description
84             {
85                state: "default" 0.0;
86                rel1 {
87                   to_x: "pad_left";
88                   relative: 1.0 0.0;
89                }
90                rel2 {
91                   to_x: "bar_bg";
92                   relative: 0.0 1.0;
93                }
94             }
95             description
96             {
97                state: "hide" 0.0;
98                inherit: "default" 0.0;
99                color: 255 255 255 0;
100             }
101          }
102          part
103          {
104             name: "elm.swallow.left";
105             type: SWALLOW;
106             clip_to: "whole_left";
107             description
108             {
109                state: "default" 0.0;
110                rel1.to: "whole_left";
111                rel2.to: "whole_left";
112             }
113             description
114             {
115                state: "hide" 0.0;
116                inherit: "default" 0.0;
117                rel1.relative: -1.0 0.0;
118                rel2.relative: 0.0 1.0;
119             }
120          }
121          part
122          {
123             name: "whole_right";
124             type: RECT;
125             mouse_events: 0;
126             description
127             {
128                state: "default" 0.0;
129                rel1 {
130                   to_x: "bar_bg";
131                   relative: 1.0 0.0;
132                }
133                rel2 {
134                   to_x: "pad_right";
135                   relative: 0.0 1.0;
136                }
137             }
138          }
139          part
140          {
141             name: "elm.swallow.right";
142             type: SWALLOW;
143             clip_to: "whole_right";
144             description
145             {
146                state: "default" 0.0;
147                rel1.to: "whole_right";
148                rel2.to: "whole_right";
149             }
150          }
151          //BAR
152          part { name: "elm.bar";
153             type: RECT;
154             dragable {
155                confine: "whole";
156                x: 1 1 1;
157                y: 0 0 0;
158             }
159             scale: 1;
160             description { state: "default" 0.0;
161                min: PANES_STYLE_DEFAULT_MOVABLE_SIZE_INC 999999;
162                fixed: 0 1;
163                align: 1.0 0.5;
164                rel1.relative: 0.0 0.5;
165                rel2.relative: 1.0 0.5;
166                color: 0 0 0 0;
167             }
168             description { state: "default" 0.1;
169                inherit: "default" 0.0;
170                min: 0 999999;
171             }
172             description { state: "disabled" 0.0;
173                inherit:  "default" 0.0;
174                min: PANES_STYLE_DEFAULT_FIXED_SIZE_INC 999999;
175             }
176             description { state: "disabled" 0.1;
177                inherit:  "default" 0.1;
178             }
179          }
180          part { name: "pad_bar_left";
181             type: RECT;
182             scale: 1;
183             mouse_events: 0;
184             description { state: "default" 0.0;
185                min: PANES_STYLE_DEFAULT_PADDING_LEFT_SIZE_INC 0;
186                align: 0.0 0.5;
187                rel1.to_x: "elm.bar";
188                rel2 {
189                   relative: 0.0 1.0;
190                   to_x: "elm.bar";
191                }
192                fixed: 1 0;
193                visible: 0;
194             }
195             description {
196                state: "hidden" 0.0;
197                inherit: "default" 0.0;
198                min: 0 0;
199             }
200          }
201          part { name: "pad_bar_right";
202             type: RECT;
203             scale: 1;
204             mouse_events: 0;
205             description { state: "default" 0.0;
206                min: PANES_STYLE_DEFAULT_PADDING_RIGHT_SIZE_INC 0;
207                align: 1.0 0.5;
208                rel1 {
209                   relative: 1.0 0.0;
210                   to_x: "elm.bar";
211                }
212                rel2.to_x: "elm.bar";
213                fixed: 1 0;
214                visible: 0;
215             }
216             description {
217                state: "hidden" 0.0;
218                inherit: "default" 0.0;
219                min: 0 0;
220             }
221          }
222          part { name: "bar_bg";
223             type: IMAGE;
224             mouse_events: 0;
225             description { state: "default" 0.0;
226                rel1 {
227                   relative: 1.0 0.0;
228                   to_x: "pad_bar_left";
229                }
230                rel2 {
231                   relative: 0.0 1.0;
232                   to_x: "pad_bar_right";
233                }
234                fixed: 1 0;
235                image.normal: "00_splite_handler_bg_v.png";
236             }
237             description { state: "clicked" 0.0;
238                inherit: "default" 0.0;
239                image.normal: "00_splite_handler_bg_press.png";
240             }
241          }
242          part { name:"bar_handler";
243             mouse_events: 0;
244             description { state:"default" 0.0;
245                rel1 {
246                   to_x: "bar_bg";
247                   relative: 0.0 0.5;
248                }
249                rel2 {
250                   to_x: "bar_bg";
251                   relative: 1.0 0.5;
252                }
253                fixed: 0 1;
254                min: 0 PANES_STYLE_DEFAULT_MIDDLE_SIZE_INC;
255                image.normal: "00_splite_handler_v.png";
256             }
257             description { state:"clicked" 0.0;
258                inherit: "default" 0.0;
259             }
260             description { state: "disabled" 0.0;
261                inherit: "default" 0.0;
262             }
263          }
264          part { name: "over2";
265             mouse_events: 1;
266             repeat_events: 1;
267             ignore_flags: ON_HOLD;
268             description { state: "default" 0.0;
269                rel1.to: "elm.bar";
270                rel2.to: "elm.bar";
271             }
272             description { state: "disabled" 0.0;
273                inherit:  "default" 0.0;
274                visible: 0;
275             }
276          }
277          part { name: "over3";
278             mouse_events: 1;
279             repeat_events: 1;
280             description { state: "default" 0.0;
281                rel1.to: "elm.bar";
282                rel2.to: "elm.bar";
283             }
284             description { state: "clicked" 0.0;
285                inherit:  "default" 0.0;
286             }
287          }
288          part { name:"bar_disabled";
289             type: RECT;
290             description { state:"default" 0.0;
291                rel1.to_x: "elm.bar";
292                rel2.to_x: "elm.bar";
293                color: 0 0 0 0;
294                visible: 0;
295             }
296             description { state: "disabled" 0.0;
297                inherit: "default" 0.0;
298                visible: 1;
299             }
300          }
301       }
302       script {
303          public state_pair = 1; //0:both contents are not set, 1:both contents are set
304          public frame_num, whole_drag;
305
306          public drag_effect(val) {
307             new Float:time, Float:cur_drag, Float:drag;
308             new num;
309
310             num = get_int(frame_num);
311             drag = get_float(whole_drag);
312
313             num += 1;
314             time = 0.06 * num; // decide speed
315             cur_drag = drag - drag * sin(time * 90, DEGREES);
316
317             set_int(frame_num, num);
318
319             if (time < 1.0 && cur_drag > 0.0) {
320                set_drag(PART:"elm.bar", cur_drag, 0.0);
321                timer(0.02, "drag_effect", val);
322             }
323             else {
324                set_drag(PART:"elm.bar", 0.0, 0.0);
325                run_program(PROGRAM:"left_content_reset");
326             }
327          }
328       }
329       programs {
330          program {
331             name: "drag_effect_start";
332             signal: "elm,panes,left,hide";
333             source: "";
334             script {
335                new Float:x, Float:y;
336
337                get_drag(PART:"elm.bar", x, y);
338                set_float(whole_drag, x);
339                set_int(frame_num, 0);
340
341                timer(0.02, "drag_effect", 0);
342             }
343             after: "left_content_hide";
344          }
345          program {
346             name: "left_content_hide";
347             action: STATE_SET "hide" 0.0;
348             transition: DECELERATE 0.4;
349             target: "elm.swallow.left";
350             target: "whole_left";
351          }
352          program {
353             name: "left_content_reset";
354             action: STATE_SET "default" 0.0;
355             target: "elm.swallow.left";
356             target: "whole_left";
357          }
358          program {
359             name:   "panes_pair";
360             signal: "elm,panes,pair";
361             source: "";
362             script {
363                new st[31];
364                new Float:vl;
365                set_int(state_pair, 1);
366                get_state(PART:"elm.bar", st, 30, vl);
367                set_state(PART:"elm.bar", st, 0.0);
368                set_state(PART:"pad_left", "default", 0.0);
369                set_state(PART:"pad_right", "default", 0.0);
370                set_state(PART:"pad_bar_left", "default", 0.0);
371                set_state(PART:"pad_bar_right", "default", 0.0);
372             }
373          }
374          program {
375             name:   "panes_unpair";
376             signal: "elm,panes,unpair";
377             source: "";
378             script {
379                new st[31];
380                new Float:vl;
381                set_int(state_pair, 0);
382                get_state(PART:"elm.bar", st, 30, vl);
383                set_state(PART:"elm.bar", st, 0.1);
384                set_state(PART:"pad_left", "hidden", 0.0);
385                set_state(PART:"pad_right", "hidden", 0.0);
386                set_state(PART:"pad_bar_left", "hidden", 0.0);
387                set_state(PART:"pad_bar_right", "hidden", 0.0);
388             }
389          }
390          program {
391             name:   "button_click";
392             signal: "mouse,down,1";
393             source: "over2";
394             action: SIGNAL_EMIT "elm,action,press" "";
395             after: "button_click_anim";
396          }
397          program {
398             name:   "button_click_anim";
399             script {
400                set_state(PART:"bar_bg", "clicked", 0.0);
401             }
402          }
403          program {
404             name:   "button_unclick";
405             signal: "mouse,up,1";
406             source: "over2";
407             action: SIGNAL_EMIT "elm,action,unpress" "";
408             after: "button_unclick_anim";
409          }
410          program {
411             name:   "button_unclick_anim";
412             script {
413                set_state(PART:"bar_bg", "default", 0.0);
414             }
415          }
416          program {
417             name:   "button_click2";
418             signal: "mouse,down,1";
419             source: "over3";
420             action: STATE_SET "clicked" 0.0;
421             target: "over3";
422          }
423          program {
424             name:   "button_unclick2";
425             signal: "mouse,up,1";
426             source: "over3";
427             action: STATE_SET "default" 0.0;
428             transition: DECELERATE 0.5;
429             target: "over3";
430          }
431          program {
432             name:   "button_unclick3";
433             signal: "mouse,up,1";
434             source: "over2";
435             action: SIGNAL_EMIT "elm,action,click" "";
436          }
437          program {
438             name:   "button_down_double";
439             signal: "mouse,down,1,double";
440             source: "over3";
441             action: SIGNAL_EMIT "elm,action,click,double" "";
442          }
443          //fix the pane
444          program {
445             name:   "panes_fixed";
446             signal: "elm.panes.fixed";
447             source: "elm";
448             action: STATE_SET "disabled" 0.0;
449             target: "bar_disabled";
450             after: "after_fixed";
451          }
452          program {
453             name:   "after_fixed";
454             script {
455                if (get_int(state_pair))
456                  set_state(PART:"elm.bar", "disabled", 0.0);
457                else
458                  set_state(PART:"elm.bar", "disabled", 0.1);
459             }
460          }
461          //allow the movement by interaction
462          program {
463             name:   "panes_unfixed";
464             signal: "elm.panes.unfixed";
465             source: "elm";
466             action: STATE_SET "default" 0.0;
467             target: "bar_disabled";
468             after: "after_unfixed";
469          }
470          program {
471             name:   "after_unfixed";
472             script {
473                if (get_int(state_pair))
474                  set_state(PART:"elm.bar", "default", 0.0);
475                else
476                  set_state(PART:"elm.bar", "default", 0.1);
477             }
478          }
479       }
480    }
481
482    group {
483       name: "elm/panes/horizontal/default";
484       images {
485          image: "00_splite_handler_bg_h.png" COMP;
486          image: "00_splite_handler_bg_press.png" COMP;
487          image: "00_splite_handler_h.png" COMP;
488       }
489       script {
490          public state_pair = 1; //0:both contents are not set, 1:both contents are set
491       }
492       parts
493       {
494          part
495          {
496             name: "whole";
497             type: RECT;
498             description
499             {
500                state: "default" 0.0;
501                visible: 0;
502                rel1.to_y: "pad_left";
503                rel2.to_y: "pad_right";
504             }
505          }
506          part {
507             name: "pad_left";
508             type: RECT;
509             scale: 1;
510             description {
511                state: "default" 0.0;
512                rel2.relative:1.0 0.0;
513                min: 0 PANES_STYLE_DEFAULT_PADDING_LEFT_SIZE_INC;
514                fixed: 0 1;
515                align: 0.5 1.0;
516                visible: 0;
517             }
518             description {
519                state: "hidden" 0.0;
520                inherit: "default" 0.0;
521                min: 0 0;
522             }
523          }
524          part {
525             name: "pad_right";
526             type: RECT;
527             scale: 1;
528             description {
529                state: "default" 0.0;
530                rel1.relative: 0.0 1.0;
531                min: 0 PANES_STYLE_DEFAULT_PADDING_RIGHT_SIZE_INC;
532                fixed: 0 1;
533                align: 0.5 0.0;
534                visible: 0;
535             }
536             description {
537                state: "hidden" 0.0;
538                inherit: "default" 0.0;
539                min: 0 0;
540             }
541          }
542          //2 contents
543          part
544          {
545             name: "whole_left";
546             type: RECT;
547             mouse_events: 0;
548             description
549             {
550                state: "default" 0.0;
551                rel1 {
552                   to_y: "pad_left";
553                   relative: 0.0 1.0;
554                }
555                rel2 {
556                   to_y: "bar_bg";
557                   relative: 1.0 0.0;
558                }
559             }
560          }
561          part
562          {
563             name: "elm.swallow.left";
564             type: SWALLOW;
565             clip_to: "whole_left";
566             description
567             {
568                state: "default" 0.0;
569                rel1.to: "whole_left";
570                rel2.to: "whole_left";
571             }
572          }
573          part
574          {
575             name: "whole_right";
576             type: RECT;
577             mouse_events: 0;
578             description
579             {
580                state: "default" 0.0;
581                rel1 {
582                   to_y: "bar_bg";
583                   relative: 0.0 1.0;
584                }
585                rel2 {
586                   to_y: "pad_right";
587                   relative: 1.0 0.0;
588                }
589             }
590          }
591          part
592          {
593             name: "elm.swallow.right";
594             type: SWALLOW;
595             clip_to: "whole_right";
596             description
597             {
598                state: "default" 0.0;
599                rel1.to: "whole_right";
600                rel2.to: "whole_right";
601             }
602          }
603          //BAR
604          part { name: "elm.bar";
605             type: RECT;
606             dragable {
607                confine: "whole";
608                x: 0 0 0;
609                y: 1 1 1;
610             }
611             scale: 1;
612             description { state: "default" 0.0;
613                min: 999999 PANES_STYLE_DEFAULT_MOVABLE_SIZE_INC;
614                fixed: 1 0;
615                align: 0.5 0.0;
616                rel1.relative: 0.5 0.0;
617                rel2.relative: 0.5 1.0;
618                color: 0 0 0 0;
619             }
620             description { state: "default" 0.1;
621                inherit: "default" 0.0;
622                min: 999999 0;
623             }
624             description { state: "disabled" 0.0;
625                inherit:  "default" 0.0;
626                min: 999999 PANES_STYLE_DEFAULT_FIXED_SIZE_INC;
627                visible: 0;
628             }
629             description { state: "disabled" 0.1;
630                inherit:  "default" 0.1;
631             }
632          }
633          part { name: "pad_bar_left";
634             type: RECT;
635             scale: 1;
636             mouse_events: 0;
637             description { state: "default" 0.0;
638                min: 0 PANES_STYLE_DEFAULT_PADDING_LEFT_SIZE_INC;
639                align: 0.5 0.0;
640                rel1.to_y: "elm.bar";
641                rel2 {
642                   relative: 1.0 0.0;
643                   to_y: "elm.bar";
644                }
645                fixed: 0 1;
646                visible: 0;
647             }
648             description {
649                state: "hidden" 0.0;
650                inherit: "default" 0.0;
651                min: 0 0;
652             }
653          }
654          part { name: "pad_bar_right";
655             type: RECT;
656             scale: 1;
657             mouse_events: 0;
658             description { state: "default" 0.0;
659                min: 0 PANES_STYLE_DEFAULT_PADDING_RIGHT_SIZE_INC;
660                align: 0.5 1.0;
661                rel1 {
662                   relative: 0.0 1.0;
663                   to_y: "elm.bar";
664                }
665                rel2.to_y: "elm.bar";
666                fixed: 0 1;
667                visible: 0;
668             }
669             description {
670                state: "visible" 0.0;
671                inherit: "default" 0.0;
672                min: 0 0;
673             }
674          }
675          part { name: "bar_bg";
676             type: IMAGE;
677             mouse_events: 0;
678             description { state: "default" 0.0;
679                rel1 {
680                   relative: 0.0 1.0;
681                   to_y: "pad_bar_left";
682                }
683                rel2 {
684                   relative: 1.0 0.0;
685                   to_y: "pad_bar_right";
686                }
687                fixed: 0 1;
688                image.normal: "00_splite_handler_bg_h.png";
689             }
690             description { state: "clicked" 0.0;
691                inherit: "default" 0.0;
692                image.normal: "00_splite_handler_bg_press.png";
693             }
694          }
695          part { name:"bar_handler";
696             mouse_events: 0;
697             description { state:"default" 0.0;
698                rel1 {
699                   to_y: "bar_bg";
700                   relative: 0.5 0.0;
701                }
702                rel2 {
703                   to_y: "bar_bg";
704                   relative: 0.5 1.0;
705                }
706                fixed: 1 0;
707                min: PANES_STYLE_DEFAULT_MIDDLE_SIZE_INC 0;
708                image.normal: "00_splite_handler_h.png";
709             }
710             description { state:"clicked" 0.0;
711                inherit: "default" 0.0;
712             }
713             description { state: "disabled" 0.0;
714                inherit: "default" 0.0;
715             }
716          }
717          part { name: "over2";
718             mouse_events: 1;
719             repeat_events: 1;
720             ignore_flags: ON_HOLD;
721             description { state: "default" 0.0;
722                rel1.to: "elm.bar";
723                rel2.to: "elm.bar";
724             }
725             description { state: "disabled" 0.0;
726                inherit:  "default" 0.0;
727                visible: 0;
728             }
729          }
730          part { name: "over3";
731             mouse_events: 1;
732             repeat_events: 1;
733             description { state: "default" 0.0;
734                rel1.to: "elm.bar";
735                rel2.to: "elm.bar";
736             }
737             description { state: "clicked" 0.0;
738                inherit:  "default" 0.0;
739             }
740          }
741          part { name:"bar_disabled";
742             type: RECT;
743             description { state:"default" 0.0;
744                rel1.to_y: "elm.bar";
745                rel2.to_y: "elm.bar";
746                color: 0 0 0 0;
747                visible: 0;
748             }
749             description { state: "disabled" 0.0;
750                inherit: "default" 0.0;
751                visible: 1;
752             }
753          }
754       }
755       programs {
756          program {
757             name:   "panes_pair";
758             signal: "elm,panes,pair";
759             source: "";
760             script {
761                new st[31];
762                new Float:vl;
763                set_int(state_pair, 1);
764                get_state(PART:"elm.bar", st, 30, vl);
765                set_state(PART:"elm.bar", st, 0.0);
766                set_state(PART:"pad_left", "default", 0.0);
767                set_state(PART:"pad_right", "default", 0.0);
768                set_state(PART:"pad_bar_left", "default", 0.0);
769                set_state(PART:"pad_bar_right", "default", 0.0);
770             }
771          }
772          program {
773             name:   "panes_unpair";
774             signal: "elm,panes,unpair";
775             source: "";
776             script {
777                new st[31];
778                new Float:vl;
779                set_int(state_pair, 0);
780                get_state(PART:"elm.bar", st, 30, vl);
781                set_state(PART:"elm.bar", st, 0.1);
782                set_state(PART:"pad_left", "hidden", 0.0);
783                set_state(PART:"pad_right", "hidden", 0.0);
784                set_state(PART:"pad_bar_left", "hidden", 0.0);
785                set_state(PART:"pad_bar_right", "hidden", 0.0);
786             }
787          }
788          program {
789             name:   "button_click";
790             signal: "mouse,down,1";
791             source: "over2";
792             action: SIGNAL_EMIT "elm,action,press" "";
793             after: "button_click_anim";
794          }
795          program {
796             name:   "button_click_anim";
797             script {
798                set_state(PART:"bar_bg", "clicked", 0.0);
799             }
800          }
801          program {
802             name:   "button_unclick";
803             signal: "mouse,up,1";
804             source: "over2";
805             action: SIGNAL_EMIT "elm,action,unpress" "";
806             after: "button_unclick_anim";
807          }
808          program {
809             name:   "button_unclick_anim";
810             script {
811                set_state(PART:"bar_bg", "default", 0.0);
812             }
813          }
814          program {
815             name:   "button_click2";
816             signal: "mouse,down,1";
817             source: "over3";
818             action: STATE_SET "clicked" 0.0;
819             target: "over3";
820          }
821          program {
822             name:   "button_unclick2";
823             signal: "mouse,up,1";
824             source: "over3";
825             action: STATE_SET "default" 0.0;
826             transition: DECELERATE 0.5;
827             target: "over3";
828          }
829          program {
830             name:   "button_unclick3";
831             signal: "mouse,up,1";
832             source: "over2";
833             action: SIGNAL_EMIT "elm,action,click" "";
834          }
835          program {
836             name:   "button_down_double";
837             signal: "mouse,down,1,double";
838             source: "over3";
839             action: SIGNAL_EMIT "elm,action,click,double" "";
840          }
841          //fix the pane
842          program {
843             name:   "panes_fixed";
844             signal: "elm.panes.fixed";
845             source: "elm";
846             action: STATE_SET "disabled" 0.0;
847             target: "bar_disabled";
848             after: "after_fixed";
849          }
850          program {
851             name:   "after_fixed";
852             script {
853                if (get_int(state_pair))
854                  set_state(PART:"elm.bar", "disabled", 0.0);
855                else
856                  set_state(PART:"elm.bar", "disabled", 0.1);
857             }
858          }
859          //allow the movement by interaction
860          program {
861             name:   "panes_unfixed";
862             signal: "elm.panes.unfixed";
863             source: "elm";
864             action: STATE_SET "default" 0.0;
865             target: "bar_disabled";
866             after: "after_unfixed";
867          }
868          program {
869             name:   "after_unfixed";
870             script {
871                if (get_int(state_pair))
872                  set_state(PART:"elm.bar", "default", 0.0);
873                else
874                  set_state(PART:"elm.bar", "default", 0.1);
875             }
876          }
877       }
878    }