2 * Copyright (c) 2012 Petr Koupy
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 /** @addtogroup vlaunch
40 #include <str_error.h>
51 #include <codec/tga.h>
55 #define NAME "vlaunch"
57 #define LOGO_WIDTH 196
58 #define LOGO_HEIGHT 66
60 static char *winreg
= NULL
;
62 static int app_launch(const char *app
)
64 printf("%s: Spawning %s %s \n", NAME
, app
, winreg
);
68 errno_t rc
= task_spawnl(&id
, &wait
, app
, app
, winreg
, NULL
);
70 printf("%s: Error spawning %s %s (%s)\n", NAME
, app
,
71 winreg
, str_error(rc
));
77 rc
= task_wait(&wait
, &texit
, &retval
);
78 if ((rc
!= EOK
) || (texit
!= TASK_EXIT_NORMAL
)) {
79 printf("%s: Error retrieving retval from %s (%s)\n", NAME
,
87 static void on_btn_click(widget_t
*widget
, void *data
)
89 const char *app
= (const char *) widget_get_data(widget
);
93 int main(int argc
, char *argv
[])
96 printf("Compositor server not specified.\n");
100 surface_t
*logo
= decode_tga((void *) helenos_tga
, helenos_tga_size
, 0);
102 printf("Unable to decode logo.\n");
107 window_t
*main_window
= window_open(argv
[1], NULL
,
108 WINDOW_MAIN
| WINDOW_DECORATED
| WINDOW_RESIZEABLE
, "vlaunch");
110 printf("Cannot open main window.\n");
114 pixel_t grd_bg
= PIXEL(255, 255, 255, 255);
116 pixel_t btn_bg
= PIXEL(255, 255, 255, 255);
117 pixel_t btn_fg
= PIXEL(255, 186, 186, 186);
118 pixel_t btn_text
= PIXEL(255, 0, 0, 0);
120 pixel_t lbl_bg
= PIXEL(255, 255, 255, 255);
121 pixel_t lbl_text
= PIXEL(255, 0, 0, 0);
123 canvas_t
*logo_canvas
= create_canvas(NULL
, NULL
, LOGO_WIDTH
, LOGO_HEIGHT
,
125 label_t
*lbl_caption
= create_label(NULL
, NULL
, "Launch application:",
126 16, lbl_bg
, lbl_text
);
127 button_t
*btn_vterm
= create_button(NULL
, "/app/vterm", "vterm",
128 16, btn_bg
, btn_fg
, btn_text
);
129 button_t
*btn_vcalc
= create_button(NULL
, "/app/vcalc", "vcalc",
130 16, btn_bg
, btn_fg
, btn_text
);
131 button_t
*btn_vdemo
= create_button(NULL
, "/app/vdemo", "vdemo",
132 16, btn_bg
, btn_fg
, btn_text
);
133 button_t
*btn_vlaunch
= create_button(NULL
, "/app/vlaunch", "vlaunch",
134 16, btn_bg
, btn_fg
, btn_text
);
135 grid_t
*grid
= create_grid(window_root(main_window
), NULL
, 1, 6, grd_bg
);
137 if ((!logo_canvas
) || (!lbl_caption
) || (!btn_vterm
) ||
138 (!btn_vcalc
) || (!btn_vdemo
) || (!btn_vlaunch
) || (!grid
)) {
139 window_close(main_window
);
140 printf("Cannot create widgets.\n");
144 sig_connect(&btn_vterm
->clicked
, &btn_vterm
->widget
, on_btn_click
);
145 sig_connect(&btn_vcalc
->clicked
, &btn_vcalc
->widget
, on_btn_click
);
146 sig_connect(&btn_vdemo
->clicked
, &btn_vdemo
->widget
, on_btn_click
);
147 sig_connect(&btn_vlaunch
->clicked
, &btn_vlaunch
->widget
, on_btn_click
);
149 grid
->add(grid
, &logo_canvas
->widget
, 0, 0, 1, 1);
150 grid
->add(grid
, &lbl_caption
->widget
, 0, 1, 1, 1);
151 grid
->add(grid
, &btn_vterm
->widget
, 0, 2, 1, 1);
152 grid
->add(grid
, &btn_vcalc
->widget
, 0, 3, 1, 1);
153 grid
->add(grid
, &btn_vdemo
->widget
, 0, 4, 1, 1);
154 grid
->add(grid
, &btn_vlaunch
->widget
, 0, 5, 1, 1);
156 window_resize(main_window
, 0, 0, 210, 164 + LOGO_HEIGHT
,
157 WINDOW_PLACEMENT_RIGHT
| WINDOW_PLACEMENT_TOP
);
158 window_exec(main_window
);