bool BasicGrid::handle_event_impl( UI::Event const& event ) noexcept { switch (event.type) { case UI::EventType::key_input: if (!has_input_control() && event.key_input.mod == KeyMod::none) { bool handled = true; switch (event.key_input.code) { case KeyCode::up : row_step(-1); break; case KeyCode::down : row_step(+1); break; case KeyCode::left : col_step(-1); break; case KeyCode::right: col_step(+1); break; case KeyCode::home: row_abs(0); break; case KeyCode::end : row_abs(max_ce(0, row_count() - 1)); break; case KeyCode::pgup: row_step(min_ce(0, -view().fit_count - 1)); break; case KeyCode::pgdn: row_step(max_ce(0, +view().fit_count - 1)); break; default: switch (event.key_input.cp) { case 'k': row_step(-1); break; case 'j': row_step(+1); break; case 'h': col_step(-1); break; case 'l': col_step(+1); break; case 'a': select_all(); break; case 'A': select_none(); break; case 's': select_toggle(m_cursor.row, 1); break; default: handled = false; break; } } return handled; } break; case UI::EventType::focus_changed: queue_cell_render( m_cursor.row, m_cursor.row + 1, m_cursor.col, m_cursor.col + 1 ); if (is_focused()) { App::instance.m_ui.csline->set_location( std::to_string(m_cursor.row) + ", " + std::to_string(m_cursor.col) ); } else { App::instance.m_ui.csline->clear_location(); } return false; default: break; } return false; }
// ========================================================================= CRef<CSeq_table> CWiggleReader::xMakeTable(void) // ========================================================================= { CRef<CSeq_table> table(new CSeq_table); table->SetFeat_type(0); CRef<CSeq_id> chrom_id = xMakeChromId(); CRef<CSeq_loc> table_loc(new CSeq_loc); { // Seq-table location CRef<CSeqTable_column> col_id(new CSeqTable_column); table->SetColumns().push_back(col_id); col_id->SetHeader().SetField_name("Seq-table location"); col_id->SetDefault().SetLoc(*table_loc); } { // Seq-id CRef<CSeqTable_column> col_id(new CSeqTable_column); table->SetColumns().push_back(col_id); col_id->SetHeader().SetField_id(CSeqTable_column_info::eField_id_location_id); col_id->SetDefault().SetId(*chrom_id); } // position CRef<CSeqTable_column> col_pos(new CSeqTable_column); table->SetColumns().push_back(col_pos); col_pos->SetHeader().SetField_id(CSeqTable_column_info::eField_id_location_from); CSeqTable_multi_data::TInt& pos = col_pos->SetData().SetInt(); SWiggleStat stat; xPreprocessValues(stat); xSetTotalLoc(*table_loc, *chrom_id); size_t size = m_Values.size(); table->SetNum_rows(size); pos.reserve(size); CSeqTable_multi_data::TInt* span_ptr = 0; { // span CRef<CSeqTable_column> col_span(new CSeqTable_column); table->SetColumns().push_back(col_span); col_span->SetHeader().SetField_name("span"); if ( stat.m_FixedSpan ) { col_span->SetDefault().SetInt(stat.m_Span); } else { span_ptr = &col_span->SetData().SetInt(); span_ptr->reserve(size); } } if ( stat.m_HaveGaps ) { CRef<CSeqTable_column> col_step(new CSeqTable_column); table->SetColumns().push_back(col_step); col_step->SetHeader().SetField_name("value_gap"); col_step->SetDefault().SetReal(m_GapValue); } if (m_iFlags & fAsByte) { // values CRef<CSeqTable_column> col_min(new CSeqTable_column); table->SetColumns().push_back(col_min); col_min->SetHeader().SetField_name("value_min"); col_min->SetDefault().SetReal(stat.m_Min); CRef<CSeqTable_column> col_step(new CSeqTable_column); table->SetColumns().push_back(col_step); col_step->SetHeader().SetField_name("value_step"); col_step->SetDefault().SetReal(stat.m_Step); CRef<CSeqTable_column> col_val(new CSeqTable_column); table->SetColumns().push_back(col_val); col_val->SetHeader().SetField_name("values"); if ( 1 ) { AutoPtr< vector<char> > values(new vector<char>()); values->reserve(size); ITERATE ( TValues, it, m_Values ) { pos.push_back(it->m_Pos); if ( span_ptr ) { span_ptr->push_back(it->m_Span); } values->push_back(stat.AsByte(it->m_Value)); }