source: mainline/uspace/app/vlaunch/vlaunch.c@ cd9531d3

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since cd9531d3 was a35b458, checked in by Jiří Zárevúcky <zarevucky.jiri@…>, 7 years ago

style: Remove trailing whitespace on _all_ lines, including empty ones, for particular file types.

Command used: tools/srepl '\s\+$' '' -- *.c *.h *.py *.sh *.s *.S *.ag

Currently, whitespace on empty lines is very inconsistent.
There are two basic choices: Either remove the whitespace, or keep empty lines
indented to the level of surrounding code. The former is AFAICT more common,
and also much easier to do automatically.

Alternatively, we could write script for automatic indentation, and use that
instead. However, if such a script exists, it's possible to use the indented
style locally, by having the editor apply relevant conversions on load/save,
without affecting remote repository. IMO, it makes more sense to adopt
the simpler rule.

  • Property mode set to 100644
File size: 4.9 KB
Line 
1/*
2 * Copyright (c) 2012 Petr Koupy
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
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.
16 *
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.
27 */
28
29/** @addtogroup vlaunch
30 * @{
31 */
32/** @file
33 */
34
35#include <stdbool.h>
36#include <errno.h>
37#include <stdio.h>
38#include <stdlib.h>
39#include <task.h>
40#include <str_error.h>
41
42#include <window.h>
43#include <grid.h>
44#include <button.h>
45#include <label.h>
46#include <canvas.h>
47
48#include <surface.h>
49#include <source.h>
50#include <drawctx.h>
51#include <codec/tga.h>
52
53#include "images.h"
54
55#define NAME "vlaunch"
56
57#define LOGO_WIDTH 196
58#define LOGO_HEIGHT 66
59
60static char *winreg = NULL;
61
62static int app_launch(const char *app)
63{
64 printf("%s: Spawning %s %s \n", NAME, app, winreg);
65
66 task_id_t id;
67 task_wait_t wait;
68 errno_t rc = task_spawnl(&id, &wait, app, app, winreg, NULL);
69 if (rc != EOK) {
70 printf("%s: Error spawning %s %s (%s)\n", NAME, app,
71 winreg, str_error(rc));
72 return -1;
73 }
74
75 task_exit_t texit;
76 int retval;
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,
80 app, str_error(rc));
81 return -1;
82 }
83
84 return retval;
85}
86
87static void on_btn_click(widget_t *widget, void *data)
88{
89 const char *app = (const char *) widget_get_data(widget);
90 app_launch(app);
91}
92
93int main(int argc, char *argv[])
94{
95 if (argc < 2) {
96 printf("Compositor server not specified.\n");
97 return 1;
98 }
99
100 surface_t *logo = decode_tga((void *) helenos_tga, helenos_tga_size, 0);
101 if (!logo) {
102 printf("Unable to decode logo.\n");
103 return 1;
104 }
105
106 winreg = argv[1];
107 window_t *main_window = window_open(argv[1], NULL,
108 WINDOW_MAIN | WINDOW_DECORATED | WINDOW_RESIZEABLE, "vlaunch");
109 if (!main_window) {
110 printf("Cannot open main window.\n");
111 return 1;
112 }
113
114 pixel_t grd_bg = PIXEL(255, 255, 255, 255);
115
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);
119
120 pixel_t lbl_bg = PIXEL(255, 255, 255, 255);
121 pixel_t lbl_text = PIXEL(255, 0, 0, 0);
122
123 canvas_t *logo_canvas = create_canvas(NULL, NULL, LOGO_WIDTH, LOGO_HEIGHT,
124 logo);
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);
136
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");
141 return 1;
142 }
143
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);
148
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);
155
156 window_resize(main_window, 0, 0, 210, 164 + LOGO_HEIGHT,
157 WINDOW_PLACEMENT_RIGHT | WINDOW_PLACEMENT_TOP);
158 window_exec(main_window);
159
160 task_retval(0);
161 async_manager();
162
163 return 0;
164}
165
166/** @}
167 */
Note: See TracBrowser for help on using the repository browser.