labels.c 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. /*
  2. * labels: little program to test libjay
  3. */
  4. #include <u.h>
  5. #include <libc.h>
  6. #include <draw.h>
  7. #include <thread.h>
  8. #include <mouse.h>
  9. #include <jay.h>
  10. void onHover_L1(Widget *w);
  11. void onClick_L1(Widget *w, Mouse *m);
  12. void onHover_L2(Widget *w);
  13. void onClick_L2(Widget *w, Mouse *m);
  14. void onDClick_L2(Widget *w, Mouse *m);
  15. void onClick_L3(Widget *w, Mouse *m);
  16. void onClick_L4(Widget *w, Mouse *m);
  17. void onChange_L4(Widget *w);
  18. void onClick_L5(Widget *w, Mouse *m);
  19. void onClick_L6(Widget *w, Mouse *m);
  20. void
  21. threadmain(int argc, char *argv[]) {
  22. Widget * w = initjayapp("labels");
  23. if (w==nil){
  24. sysfatal("Error initial panel");
  25. }
  26. Widget *l = createLabel("label1", -1, -1);
  27. Widget *l2 = createLabel("label2", 20, 120);
  28. Widget *l3 = createLabel("label3", 20, 200);
  29. Widget *l4 = createLabel("label4", 20, 270);
  30. Widget *l5 = createLabel("label5", 20, 200);
  31. Widget *l6 = createLabel("label6", -1, -1);
  32. Label *aux = l->w;
  33. aux->setText(aux, "This is a label with autosize");
  34. aux->border=createBorder(1, 0, 0);
  35. l->hover=onHover_L1;
  36. l->unhover=onHover_L1;
  37. l->click=onClick_L1;
  38. w->addWidget(w, l, Pt(30,30));
  39. aux = l2->w;
  40. aux->setText(aux, "Click me");
  41. aux->border=createBorder(1, 1, 0);
  42. l2->click=onClick_L2;
  43. l2->dclick=onDClick_L2;
  44. l2->hover = onHover_L2;
  45. l2->unhover = onHover_L2;
  46. w->addWidget(w, l2, Pt(30,60));
  47. aux = l3->w;
  48. aux->setText(aux, "Click on me to dissapear");
  49. l3->click=onClick_L3;
  50. w->addWidget(w, l3, Pt(30, 90));
  51. aux = l4->w;
  52. aux->setText(aux, "Click to change text and color");
  53. l4->change=onChange_L4;
  54. l4->click=onClick_L4;
  55. w->addWidget(w, l4, Pt(30, 120));
  56. aux = l5->w;
  57. aux->setText(aux, "Delete Label");
  58. l5->click=onClick_L5;
  59. w->addWidget(w, l5, Pt(30, 150));
  60. aux = l6->w;
  61. aux->setText(aux, "List widgets");
  62. l6->click=onClick_L6;
  63. w->addWidget(w, l6, Pt(30, 180));
  64. startjayapp(w);
  65. threadexits(nil);
  66. }
  67. void onHover_L1(Widget *w){
  68. Label *l = w->w;
  69. if(w->hovered){
  70. l->border.size=3;
  71. } else {
  72. l->border.size=1;
  73. }
  74. }
  75. void onHover_L2(Widget *w){
  76. Label *l = w->w;
  77. if(w->hovered){
  78. l->border.up=1;
  79. } else {
  80. l->border.up=0;
  81. }
  82. }
  83. void onClick_L1(Widget *w, Mouse *m){
  84. static int i = 1;
  85. Label *l = w->w;
  86. if (i){
  87. l->setText(l, "A large text in the label");
  88. i=0;
  89. } else {
  90. l->setText(l, "Short text");
  91. i=1;
  92. }
  93. }
  94. void onClick_L2(Widget *w, Mouse *m){
  95. static int i = 1;
  96. Label *l = w->w;
  97. if (i){
  98. l->setText(l, "One click");
  99. i=0;
  100. } else {
  101. l->setText(l, "Just one click");
  102. i=1;
  103. }
  104. }
  105. void onClick_L4(Widget *w, Mouse *m){
  106. static int i = 1;
  107. Label *l = w->w;
  108. if (i){
  109. l->setText(l, "Click me to change text and color");
  110. i=0;
  111. } else {
  112. l->setText(l, "Click to change text and color!");
  113. i=1;
  114. }
  115. }
  116. void onChange_L4(Widget *w){
  117. static int i=1;
  118. Label *l = w->w;
  119. if (i) {
  120. l->textColor=DRed;
  121. i=0;
  122. } else {
  123. l->textColor=DBlack;
  124. i=1;
  125. }
  126. }
  127. void onClick_L3(Widget *w, Mouse *m){
  128. w->setVisible(w, 0);
  129. }
  130. void onDClick_L2(Widget *w, Mouse *m){
  131. Label *l = w->w;
  132. l->setText(l, "Double click");
  133. }
  134. void onPress(Widget *w, Mouse *m){
  135. Label *l = w->w;
  136. l->border.size=0;
  137. }
  138. void onRelease(Widget *w, Mouse *m){
  139. Label *l = w->w;
  140. l->border.size=1;
  141. }
  142. void onClick_L5(Widget *w, Mouse *m){
  143. w->father->deleteWidget(w->father, w->id);
  144. }
  145. void onClick_L6(Widget *w, Mouse *m){
  146. char buf[512]="";
  147. char **l=nil;
  148. int n = w->father->listWidgets(w->father, &l);
  149. for (int i = 0; i<n; i++){
  150. sprint(buf, "%s%s ",buf, *(l+i));
  151. }
  152. Label *lbl = w->w;
  153. lbl->setText(lbl, buf);
  154. }