namespace Caribou {
    /**
     * Interface implemented by containers of selectable items in scanning mode.
     */
    public interface IScannableGroup : Object {
        public abstract IScannableItem? child_select ();
        public abstract void scan_reset ();
        public abstract IScannableItem[] get_scan_children ();
        public abstract IScannableItem? child_step (int cycles);
        public abstract IScannableItem[] get_step_path ();
        public abstract IScannableItem[] get_selected_path ();

        public abstract ScanGrouping scan_grouping { get; set; }

        public signal void selected_item_changed (IScannableItem? selected_item);
        public signal void step_item_changed (IScannableItem? step_item);
        public signal void scan_cleared ();
    }

    public enum ScanGrouping {
        NONE,
        SUBGROUPS,
        ROWS,
        LINEAR
    }
}