MCPcopy Create free account
hub / github.com/ChrisFeldmeier/OpenCodeRust / render

Method render

crates/opencode-tui/src/components/question.rs:188–279  ·  view source on GitHub ↗
(&self, frame: &mut Frame, area: Rect, theme: &Theme)

Source from the content-addressed store, hash-verified

186 }
187
188 pub fn render(&self, frame: &mut Frame, area: Rect, theme: &Theme) {
189 if !self.is_open {
190 return;
191 }
192
193 let question = match &self.current_question {
194 Some(q) => q,
195 None => return,
196 };
197
198 let mut content = vec![
199 Line::from(Span::styled(
200 "Question:",
201 Style::default().fg(theme.primary).bold(),
202 )),
203 Line::from(""),
204 Line::from(Span::styled(
205 &question.question,
206 Style::default().fg(theme.text),
207 )),
208 Line::from(""),
209 ];
210
211 if !question.options.is_empty() {
212 for (i, opt) in question.options.iter().enumerate() {
213 let is_selected = self.selected_options.get(i).copied().unwrap_or(false);
214 let is_highlighted = i == self.selected_index;
215 let marker = if is_selected { "[x]" } else { "[ ]" };
216 let key = (b'a' + i as u8) as char;
217 let label_style = if is_highlighted {
218 Style::default().fg(theme.primary).bold()
219 } else {
220 Style::default().fg(theme.text)
221 };
222 content.push(Line::from(vec![
223 Span::styled(
224 format!("{} ({}) ", marker, key),
225 Style::default().fg(theme.primary),
226 ),
227 Span::styled(&opt.label, label_style),
228 ]));
229 }
230 content.push(Line::from(""));
231 content.push(Line::from(Span::styled(
232 "Up/Down to navigate, Space to toggle, Enter to confirm",
233 Style::default().fg(theme.text_muted),
234 )));
235 } else {
236 // Text input mode
237 let input_display = if self.text_input.is_empty() {
238 "Type your answer...".to_string()
239 } else {
240 format!("> {}", self.text_input)
241 };
242 let input_style = if self.text_input.is_empty() {
243 Style::default().fg(theme.text_muted)
244 } else {
245 Style::default().fg(theme.text)

Callers

nothing calls this directly

Calls 5

newFunction · 0.85
is_emptyMethod · 0.80
getMethod · 0.45
setMethod · 0.45
titleMethod · 0.45

Tested by

no test coverage detected