1b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler/*
2b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler * Copyright (C) 2015 The Android Open Source Project
3b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler *
4b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler * Licensed under the Apache License, Version 2.0 (the "License");
5b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler * you may not use this file except in compliance with the License.
6b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler * You may obtain a copy of the License at
7b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler *
8b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler *      http://www.apache.org/licenses/LICENSE-2.0
9b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler *
10b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler * Unless required by applicable law or agreed to in writing, software
11b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler * distributed under the License is distributed on an "AS IS" BASIS,
12b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler * See the License for the specific language governing permissions and
14b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler * limitations under the License.
15b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler */
16b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler
17b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhlerpackage com.android.ahat;
18b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler
19b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhlerimport java.util.List;
20b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler
21b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler/**
22b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler * An interface for rendering a page of content to the user.
23b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler */
24b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhlerinterface Doc extends AutoCloseable {
25b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler  /**
26b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   * Output the title of the page.
27b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   */
281af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler  void title(String format, Object... args);
29b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler
30b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler  /**
31b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   * Print a line of text for a page menu.
32b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   */
331af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler  void menu(DocString string);
34b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler
35b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler  /**
36b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   * Start a new section with the given title.
37b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   */
381af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler  void section(String title);
39b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler
40b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler  /**
41b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   * Print a line of text in a normal font.
42b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   */
431af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler  void println(DocString string);
44b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler
45b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler  /**
46b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   * Print a line of text in a large font that is easy to see and click on.
47b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   */
481af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler  void big(DocString string);
49b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler
50b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler  /**
51b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   * Start a table with the given columns.
52b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   *
53b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   * An IllegalArgumentException is thrown if no columns are provided.
54b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   *
55b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   * This should be followed by calls to the 'row' method to fill in the table
56b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   * contents and the 'end' method to end the table.
57b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   */
581af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler  void table(Column... columns);
59b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler
60b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler  /**
61b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   * Start a table with the following heading structure:
62b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   *   |  description  |  c2  | c3 | ... |
63b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   *   | h1 | h2 | ... |      |    |     |
64b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   *
65b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   * Where subcols describes h1, h2, ...
66b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   * and cols describes c2, c3, ...
67b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   *
68b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   * This should be followed by calls to the 'row' method to fill in the table
69b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   * contents and the 'end' method to end the table.
70b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   */
711af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler  void table(DocString description, List<Column> subcols, List<Column> cols);
72b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler
73b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler  /**
74b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   * Add a row to the currently active table.
75b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   * The number of values must match the number of columns provided for the
76b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   * currently active table.
77b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   */
781af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler  void row(DocString... values);
79b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler
80b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler  /**
81b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   * Start a new description list.
82b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   *
83b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   * This should be followed by calls to description() and finally a call to
84b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   * end().
85b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   */
861af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler  void descriptions();
87b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler
88b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler  /**
89b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   * Add a description to the currently active description list.
90b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   */
911af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler  void description(DocString key, DocString value);
92b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler
93b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler  /**
94b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   * End the currently active table or description list.
95b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler   */
961af86f17dc9a47faf1c6cd7ccd23d248fdc615abRichard Uhler  void end();
97b730b78dac047c6d8ead93ad77605bcb7414f5ceRichard Uhler}
98