/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . android . tools . idea . dev ic eman ager . virtual tab Ċ Ċ import Ġcom . android . sdk lib . internal . av d . Av d Info Ċ import Ġcom . android . tools . idea . dev ic eman ager . virtual tab . columns . Av d Actions Column Info Ċ import Ġcom . intellij . ui . table . TableView Ċ import Ġcom . intellij . util . ui . List TableModel Ċ import Ġjava . awt . Keyboard Focus Manager Ċ import Ġjava . awt . event . ActionEvent Ċ import Ġjavax . swing . Abstract Action Ċ import Ġjavax . swing . J Component Ċ Ċ // ĠTODO ( q um eric ): Ġide ally Ġwe Ġshould Ġbe Ġable Ġto Ġreach Ġpre configured Ġdevices Ġas Ġwell Ċ class ĠCycle Action ( ĊĠ Ġprivate Ġval Ġtable : ĠTable View < Av d Info >, ĊĠ Ġprivate Ġval Ġmodel : ĠList TableModel < Av d Info >, ĊĠ Ġprivate Ġval Ġactions Column Renderer : ĠAv d Actions Column Info , ĊĠ Ġprivate Ġval Ġparent : ĠJ Component , ĊĠ Ġprivate Ġval Ġbackward : ĠBoolean Ċ ) Ġ: ĠAbstract Action () Ġ{ ĊĠ Ġoverride Ġfun ĠactionPerformed ( evt : ĠAction Event ) Ġ{ ĊĠĠĠ Ġval Ġcycle Function Ġ= Ġif Ġ( backward ) Ġ:: cycle Backward Ġelse Ġ:: cycle Forward ĊĠĠĠ Ġcycle Function ( table . selected Row , Ġtable . selected Column , Ġmodel . find Column ( actions Column Renderer . name )) ĊĊĠĠĠ Ġval Ġselected Row Ġ= Ġtable . selected Row ĊĠĠĠ Ġif Ġ( selected Row Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠ Ġtable . edit Cell At ( selected Row , Ġtable . selected Column ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġparent . rep aint () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcycle Forward ( selected Row : ĠInt , Ġselected Column : ĠInt , Ġactions Column : ĠInt ) Ġ{ ĊĠĠĠ Ġif Ġ( selected Column Ġ== Ġactions Column Ġ&& Ġselected Row Ġ== Ġtable . rowCount Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠ Ġ// ĠWe 're Ġin Ġthe Ġlast Ġcell Ġof Ġthe Ġtable . ĠCheck Ġwhether Ġwe Ġcan Ġcycle Ġaction Ġbuttons ĊĠĠĠĠĠ Ġif Ġ(! actions Column Renderer . cycle Focus ( table . selected Object , Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAt Ġthe Ġend Ġof Ġaction Ġbuttons . ĠRemove Ġselection Ġand Ġleave Ġtable . ĊĠĠĠĠĠĠĠ Ġval Ġav d Info Ġ= Ġtable . selected Object ĊĠĠĠĠĠĠĠ Ġval Ġcell Editor Ġ= Ġactions Column Renderer . get Editor ( av d Info ) ĊĠĠĠĠĠĠĠ Ġcell Editor . stop Cell Editing () ĊĠĠĠĠĠĠĠ Ġtable . remove Row Selection Interval ( selected Row , Ġselected Row ) ĊĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= ĠKeyboard Focus Manager . getCurrent Keyboard Focus Manager () ĊĠĠĠĠĠĠĠ Ġmanager . focus Next Component ( table ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġif Ġ( selected Column Ġ!= Ġactions Column Ġ&& Ġselected Row Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠ Ġ// ĠWe 're Ġin Ġthe Ġtable , Ġbut Ġnot Ġon Ġthe Ġaction Ġcolumn . ĠSelect Ġthe Ġaction Ġcolumn . ĊĠĠĠĠĠ Ġtable . set Column Selection Interval ( actions Column , Ġactions Column ) ĊĠĠĠĠĠ Ġactions Column Renderer . cycle Focus ( table . selected Object , Ġfalse ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġif Ġ( selected Row Ġ== Ġ- 1 Ġ|| Ġ! actions Column Renderer . cycle Focus ( table . selected Object , Ġfalse )) Ġ{ ĊĠĠĠĠĠ Ġ// ĠWe Ġaren 't Ġin Ġthe Ġtable Ġyet , Ġor Ġwe Ġare Ġin Ġthe Ġactions Ġcolumn Ġand Ġat Ġthe Ġend Ġof Ġthe Ġfocus able Ġactions . ĠMove Ġto Ġthe Ġnext Ġrow ĊĠĠĠĠĠ Ġ// Ġand Ġselect Ġthe Ġfirst Ġcolumn ĊĠĠĠĠĠ Ġtable . set Column Selection Interval ( 0 , Ġ 0 ) ĊĠĠĠĠĠ Ġtable . set Row Selection Interval ( selected Row Ġ+ Ġ 1 , Ġselected Row Ġ+ Ġ 1 ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcycle Backward ( selected Row : ĠInt , Ġselected Column : ĠInt , Ġactions Column : ĠInt ) Ġ{ ĊĠĠĠ Ġif Ġ( selected Column Ġ== Ġ 0 Ġ&& Ġselected Row Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠ Ġ// ĠWe 're Ġin Ġthe Ġfirst Ġcell Ġof Ġthe Ġtable . ĠRemove Ġselection Ġand Ġleave Ġtable . ĊĠĠĠĠĠ Ġtable . remove Row Selection Interval ( selected Row , Ġselected Row ) ĊĠĠĠĠĠ ĠKeyboard Focus Manager . getCurrent Keyboard Focus Manager (). focus Previous Component () ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġif Ġ(( selected Column Ġ== Ġactions Column ) Ġ&& Ġ( selected Row Ġ!= Ġ- 1 ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! actions Column Renderer . cycle Focus ( table . selected Object , Ġtrue )) Ġ{ ĊĠĠĠĠĠ Ġ// ĠWe 're Ġon Ġan Ġactions Ġcolumn . ĠIf Ġwe Ġfail Ġto Ġcycle Ġactions , Ġselect Ġthe Ġfirst Ġcell Ġin Ġthe Ġrow . ĊĠĠĠĠĠ Ġtable . set Column Selection Interval ( 0 , Ġ 0 ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġif Ġ( selected Row Ġ== Ġ- 1 Ġ|| Ġselected Column Ġ!= Ġactions Column ) Ġ{ ĊĠĠĠĠĠ Ġ// ĠWe Ġaren 't Ġin Ġthe Ġtable Ġyet , Ġor Ġwe 're Ġnot Ġin Ġthe Ġactions Ġcolumn . ĠMove Ġto Ġthe Ġprevious Ġ( or Ġlast ) Ġrow . ĊĠĠĠĠĠ Ġ// Ġand Ġselect Ġthe Ġactions Ġcolumn ĊĠĠĠĠĠ Ġval Ġnew Selected Row Ġ= Ġif Ġ( selected Row Ġ== Ġ- 1 ) Ġtable . rowCount Ġ- Ġ 1 Ġelse Ġselected Row Ġ- Ġ 1 ĊĠĠĠĠĠ Ġtable . set Row Selection Interval ( new Selected Row , Ġnew Selected Row ) ĊĠĠĠĠĠ Ġtable . set Column Selection Interval ( actions Column , Ġactions Column ) ĊĠĠĠĠĠ Ġactions Column Renderer . cycle Focus ( table . selected Object , Ġtrue ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ