/* * Generate and refresh output */ void uimenu::show() { if (!started) { setup(); } std::string padspaces = std::string(w_width - 2 - pad_left - pad_right, ' '); const int text_lines = textformatted.size(); for ( int i = 0; i < text_lines; i++ ) { mvwprintz(window, 1 + i, 2, text_color, "%s", textformatted[i].c_str()); } mvwputch(window, text_lines + 1, 0, border_color, LINE_XXXO); for ( int i = 1; i < w_width - 1; ++i) { mvwputch(window, text_lines + 1, i, border_color, LINE_OXOX); } mvwputch(window, text_lines + 1, w_width - 1, border_color, LINE_XOXX); int estart = text_lines + 2; calcStartPos( vshift, fselected, vmax, fentries.size() ); for ( int fei = vshift, si = 0; si < vmax; fei++, si++ ) { if ( fei < (int)fentries.size() ) { int ei = fentries [ fei ]; nc_color co = ( ei == selected ? hilight_color : ( entries[ ei ].enabled ? entries[ ei ].text_color : disabled_color ) ); if ( hilight_full ) { mvwprintz(window, estart + si, pad_left + 1, co , "%s", padspaces.c_str()); } if(entries[ ei ].enabled && entries[ ei ].hotkey >= 33 && entries[ ei ].hotkey < 126 ) { mvwprintz( window, estart + si, pad_left + 2, ( ei == selected ) ? hilight_color : hotkey_color , "%c", entries[ ei ].hotkey ); } mvwprintz(window, estart + si, pad_left + 4, co, "%s", entries[ ei ].txt.c_str() ); if ( !entries[ei].extratxt.txt.empty() ) { mvwprintz( window, estart + si, pad_left + 1 + entries[ ei ].extratxt.left, entries[ ei ].extratxt.color, "%s", entries[ ei ].extratxt.txt.c_str() ); } if ( callback != NULL && ei == selected ) { callback->select(ei, this); } } else { mvwprintz(window, estart + si, pad_left + 1, c_ltgray , "%s", padspaces.c_str()); } } if ( !filter.empty() ) { mvwprintz( window, w_height - 1, 2, border_color, "< %s >", filter.c_str() ); mvwprintz( window, w_height - 1, 4, text_color, "%s", filter.c_str() ); } apply_scrollbar(); this->refresh(true); }
/* * Generate and refresh output */ void uimenu::show() { if (!started) { setup(); } std::string padspaces = std::string(w_width - 2 - pad_left - pad_right, ' '); for ( int i = 0; i < textformatted.size(); i++ ) { mvwprintz(window, 1+i, 2, text_color, "%s", textformatted[i].c_str()); } int estart = textformatted.size() + 1; if( OPTIONS["MENU_SCROLL"] ) { if (fentries.size() > vmax) { vshift = fselected - (vmax - 1) / 2; if (vshift < 0) { vshift = 0; } else if (vshift + vmax > fentries.size()) { vshift = fentries.size() - vmax; } } } else { if( fselected < vshift ) { vshift = fselected; } else if( fselected >= vshift + vmax ) { vshift = 1 + fselected - vmax; } } for ( int fei = vshift, si=0; si < vmax; fei++,si++ ) { if ( fei < fentries.size() ) { int ei=fentries [ fei ]; nc_color co = ( ei == selected ? hilight_color : ( entries[ ei ].enabled ? entries[ ei ].text_color : disabled_color ) ); if ( hilight_full ) { mvwprintz(window, estart + si, pad_left + 1, co , "%s", padspaces.c_str()); } if(entries[ ei ].enabled && entries[ ei ].hotkey > 33 && entries[ ei ].hotkey < 126 ) { mvwprintz(window, estart + si, pad_left + 2, ( ei == selected ? hilight_color : hotkey_color ) , "%c", entries[ ei ].hotkey); } mvwprintz(window, estart + si, pad_left + 4, co, "%s", entries[ ei ].txt.c_str() ); if ( entries[ ei ].extratxt.txt.size() > 0 ) { mvwprintz(window, estart + si, pad_left + 1 + entries[ ei ].extratxt.left, entries[ ei ].extratxt.color, "%s", entries[ ei ].extratxt.txt.c_str() ); } if ( callback != NULL && ei == selected ) { callback->select(ei,this); } } else { mvwprintz(window, estart + si, pad_left + 1, c_ltgray , "%s", padspaces.c_str()); } } if ( filter.size() > 0 ) { mvwprintz(window,w_height-1,2,border_color,"< %s >",filter.c_str() ); mvwprintz(window,w_height-1,4,text_color,"%s",filter.c_str()); } apply_scrollbar(); this->refresh(true); }
/** * Generate and refresh output */ void uimenu::show() { if (!started) { setup(); } werase(window); draw_border(window, border_color); if( !title.empty() ) { mvwprintz(window, 0, 1, border_color, "< "); wprintz( window, title_color, title ); wprintz(window, border_color, " >"); } std::string padspaces = std::string(w_width - 2 - pad_left - pad_right, ' '); const int text_lines = textformatted.size(); int estart = 1; if( !textformatted.empty() ) { for ( int i = 0; i < text_lines; i++ ) { trim_and_print( window, 1 + i, 2, getmaxx( window ) - 4, text_color, textformatted[i] ); } mvwputch(window, text_lines + 1, 0, border_color, LINE_XXXO); for ( int i = 1; i < w_width - 1; ++i) { mvwputch(window, text_lines + 1, i, border_color, LINE_OXOX); } mvwputch(window, text_lines + 1, w_width - 1, border_color, LINE_XOXX); estart += text_lines + 1; // +1 for the horizontal line. } calcStartPos( vshift, fselected, vmax, fentries.size() ); for ( int fei = vshift, si = 0; si < vmax; fei++, si++ ) { if ( fei < (int)fentries.size() ) { int ei = fentries [ fei ]; nc_color co = ( ei == selected ? hilight_color : ( entries[ ei ].enabled || entries[ei].force_color ? entries[ ei ].text_color : disabled_color ) ); if ( hilight_full ) { mvwprintz( window, estart + si, pad_left + 1, co, padspaces ); } if( entries[ ei ].hotkey >= 33 && entries[ ei ].hotkey < 126 ) { const nc_color hotkey_co = ei == selected ? hilight_color : hotkey_color; mvwprintz( window, estart + si, pad_left + 2, entries[ ei ].enabled ? hotkey_co : co, "%c", entries[ ei ].hotkey ); } if( padspaces.size() > 3 ) { // padspaces's length indicates the maximal width of the entry, it is used above to // activate the highlighting, it is used to override previous text there, but in both // cases printing starts at pad_left+1, here it starts at pad_left+4, so 3 cells less // to be used. const auto entry = utf8_wrapper( ei == selected ? remove_color_tags( entries[ ei ].txt ) : entries[ ei ].txt ); trim_and_print( window, estart + si, pad_left + 4, max_entry_len, co, "%s", entry.c_str() ); if( max_column_len && !entries[ ei ].ctxt.empty() ) { const auto centry = utf8_wrapper( ei == selected ? remove_color_tags( entries[ ei ].ctxt ) : entries[ ei ].ctxt ); trim_and_print( window, estart + si, getmaxx( window ) - max_column_len - 2, max_column_len, co, "%s", centry.c_str() ); } } mvwzstr menu_entry_extra_text = entries[ei].extratxt; if ( !menu_entry_extra_text.txt.empty() ) { mvwprintz( window, estart + si, pad_left + 1 + menu_entry_extra_text.left, menu_entry_extra_text.color, menu_entry_extra_text.txt ); } if ( menu_entry_extra_text.sym != 0 ) { mvwputch ( window, estart + si, pad_left + 1 + menu_entry_extra_text.left, menu_entry_extra_text.color, menu_entry_extra_text.sym ); } if ( callback != NULL && ei == selected ) { callback->select(ei, this); } } else { mvwprintz( window, estart + si, pad_left + 1, c_light_gray, padspaces ); } } if ( desc_enabled ) { // draw border mvwputch(window, w_height - desc_lines - 2, 0, border_color, LINE_XXXO); for ( int i = 1; i < w_width - 1; ++i) { mvwputch(window, w_height - desc_lines - 2, i, border_color, LINE_OXOX); } mvwputch(window, w_height - desc_lines - 2, w_width - 1, border_color, LINE_XOXX); // clear previous desc the ugly way for ( int y = desc_lines + 1; y > 1; --y ) { for ( int x = 2; x < w_width - 2; ++x) { mvwputch(window, w_height - y, x, text_color, " "); } } if( static_cast<size_t>( selected ) < entries.size() ){ fold_and_print( window, w_height - desc_lines - 1, 2, w_width - 4, text_color, entries[selected].desc ); } } if ( !filter.empty() ) { mvwprintz( window, w_height - 1, 2, border_color, "< %s >", filter.c_str() ); mvwprintz( window, w_height - 1, 4, text_color, filter ); } apply_scrollbar(); this->refresh(true); }
/* * Generate and refresh output */ void uimenu::show() { if (!started) { setup(); } std::string padspaces = std::string(w_width - 2 - pad_left - pad_right, ' '); const int text_lines = textformatted.size(); for ( int i = 0; i < text_lines; i++ ) { trim_and_print(window, 1 + i, 2, getmaxx(window) - 4, text_color, "%s", textformatted[i].c_str()); } mvwputch(window, text_lines + 1, 0, border_color, LINE_XXXO); for ( int i = 1; i < w_width - 1; ++i) { mvwputch(window, text_lines + 1, i, border_color, LINE_OXOX); } mvwputch(window, text_lines + 1, w_width - 1, border_color, LINE_XOXX); int estart = text_lines + 2; calcStartPos( vshift, fselected, vmax, fentries.size() ); for ( int fei = vshift, si = 0; si < vmax; fei++, si++ ) { if ( fei < (int)fentries.size() ) { int ei = fentries [ fei ]; nc_color co = ( ei == selected ? hilight_color : ( entries[ ei ].enabled ? entries[ ei ].text_color : disabled_color ) ); if ( hilight_full ) { mvwprintz(window, estart + si, pad_left + 1, co , "%s", padspaces.c_str()); } if(entries[ ei ].enabled && entries[ ei ].hotkey >= 33 && entries[ ei ].hotkey < 126 ) { mvwprintz( window, estart + si, pad_left + 2, ( ei == selected ) ? hilight_color : hotkey_color , "%c", entries[ ei ].hotkey ); } if( padspaces.size() > 3 ) { // padspaces's length indicates the maximal width of the entry, it is used above to // activate the highlighting, it is used to override previous text there, but in both // cases printeing starts at pad_left+1, here it starts at pad_left+4, so 3 cells less // to be used. const auto entry = utf8_wrapper( entries[ ei ].txt ); trim_and_print( window, estart + si, pad_left + 4, w_width - 2 - pad_left - pad_right, co, "%s", entry.c_str() ); } if ( !entries[ei].extratxt.txt.empty() ) { mvwprintz( window, estart + si, pad_left + 1 + entries[ ei ].extratxt.left, entries[ ei ].extratxt.color, "%s", entries[ ei ].extratxt.txt.c_str() ); } if ( entries[ei].extratxt.sym != 0 ) { mvwputch ( window, estart + si, pad_left + 1 + entries[ ei ].extratxt.left, entries[ ei ].extratxt.color, entries[ ei ].extratxt.sym ); } if ( callback != NULL && ei == selected ) { callback->select(ei, this); } } else { mvwprintz(window, estart + si, pad_left + 1, c_ltgray , "%s", padspaces.c_str()); } } if ( desc_enabled ) { // draw border mvwputch(window, w_height - desc_lines - 2, 0, border_color, LINE_XXXO); for ( int i = 1; i < w_width - 1; ++i) { mvwputch(window, w_height - desc_lines - 2, i, border_color, LINE_OXOX); } mvwputch(window, w_height - desc_lines - 2, w_width - 1, border_color, LINE_XOXX); // clear previous desc the ugly way for ( int y = desc_lines + 1; y > 1; --y ) { for ( int x = 2; x < w_width - 2; ++x) { mvwputch(window, w_height - y, x, text_color, " "); } } // draw description fold_and_print(window, w_height - desc_lines - 1, 2, w_width - 4, text_color, entries[selected].desc.c_str()); } if ( !filter.empty() ) { mvwprintz( window, w_height - 1, 2, border_color, "< %s >", filter.c_str() ); mvwprintz( window, w_height - 1, 4, text_color, "%s", filter.c_str() ); } apply_scrollbar(); this->refresh(true); }