⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ncurses.c

📁 video linux conference
💻 C
📖 第 1 页 / 共 4 页
字号:
                            p_sys->pp_plist[p_sys->i_box_plidx]->p_item );                    }                    else                    {                        playlist_Control( p_sys->p_playlist, PLAYLIST_VIEWPLAY,                            p_sys->i_current_view,                            p_sys->pp_plist[p_sys->i_box_plidx]->p_item,                            NULL );                    }                }                p_sys->b_box_plidx_follow = VLC_TRUE;                break;            default:                b_ret = VLC_FALSE;                break;        }        if( b_ret )        {            int i_max = p_sys->i_plist_entries;            if( p_sys->i_current_view == VIEW_ALL )                i_max = p_sys->p_playlist->i_size;            if( p_sys->i_box_plidx >= i_max ) p_sys->i_box_plidx = i_max - 1;            if( p_sys->i_box_plidx < 0 ) p_sys->i_box_plidx = 0;            if( p_sys->i_current_view == VIEW_ALL )            {                if( p_sys->i_box_plidx == p_sys->p_playlist->i_index )                    p_sys->b_box_plidx_follow = VLC_TRUE;                else                    p_sys->b_box_plidx_follow = VLC_FALSE;            }            else            {                if( p_sys->pp_plist[p_sys->i_box_plidx]->p_item ==                        p_sys->p_playlist->status.p_item )                    p_sys->b_box_plidx_follow = VLC_TRUE;                else                    p_sys->b_box_plidx_follow = VLC_FALSE;            }            return 1;        }    }    if( p_sys->i_box_type == BOX_BROWSE )    {        vlc_bool_t b_ret = VLC_TRUE;        /* Browser navigation */        switch( i_key )        {            case KEY_HOME:                p_sys->i_box_bidx = 0;                break;            case KEY_END:                p_sys->i_box_bidx = p_sys->i_dir_entries - 1;                break;            case KEY_UP:                p_sys->i_box_bidx--;                break;            case KEY_DOWN:                p_sys->i_box_bidx++;                break;            case KEY_PPAGE:                p_sys->i_box_bidx -= p_sys->i_box_lines;                break;            case KEY_NPAGE:                p_sys->i_box_bidx += p_sys->i_box_lines;                break;            case KEY_ENTER:            case 0x0d:                if( p_sys->pp_dir_entries[p_sys->i_box_bidx]->b_file )                {                    int i_size_entry = strlen( p_sys->psz_current_dir ) +                                       strlen( p_sys->pp_dir_entries[p_sys->i_box_bidx]->psz_path ) + 2;                    char *psz_uri = (char *)malloc( sizeof(char)*i_size_entry);                    sprintf( psz_uri, "%s/%s", p_sys->psz_current_dir, p_sys->pp_dir_entries[p_sys->i_box_bidx]->psz_path );                    playlist_Add( p_sys->p_playlist, psz_uri,                                  psz_uri,                                  PLAYLIST_APPEND, PLAYLIST_END );                    p_sys->i_box_type = BOX_PLAYLIST;                    free( psz_uri );                }                else                {                    int i_size_entry = strlen( p_sys->psz_current_dir ) +                                       strlen( p_sys->pp_dir_entries[p_sys->i_box_bidx]->psz_path ) + 2;                    char *psz_uri = (char *)malloc( sizeof(char)*i_size_entry);                    sprintf( psz_uri, "%s/%s", p_sys->psz_current_dir, p_sys->pp_dir_entries[p_sys->i_box_bidx]->psz_path );                    p_sys->psz_current_dir = strdup( psz_uri );                    ReadDir( p_intf );                    free( psz_uri );                }                break;            default:                b_ret = VLC_FALSE;                break;        }        if( b_ret )        {            if( p_sys->i_box_bidx >= p_sys->i_dir_entries ) p_sys->i_box_bidx = p_sys->i_dir_entries - 1;            if( p_sys->i_box_bidx < 0 ) p_sys->i_box_bidx = 0;            return 1;        }    }    else if( p_sys->i_box_type == BOX_HELP || p_sys->i_box_type == BOX_INFO )    {        switch( i_key )        {            case KEY_HOME:                p_sys->i_box_start = 0;                return 1;            case KEY_END:                p_sys->i_box_start = p_sys->i_box_lines_total - 1;                return 1;            case KEY_UP:                if( p_sys->i_box_start > 0 ) p_sys->i_box_start--;                return 1;            case KEY_DOWN:                if( p_sys->i_box_start < p_sys->i_box_lines_total - 1 )                {                    p_sys->i_box_start++;                }                return 1;            case KEY_PPAGE:                p_sys->i_box_start -= p_sys->i_box_lines;                if( p_sys->i_box_start < 0 ) p_sys->i_box_start = 0;                return 1;            case KEY_NPAGE:                p_sys->i_box_start += p_sys->i_box_lines;                if( p_sys->i_box_start >= p_sys->i_box_lines_total )                {                    p_sys->i_box_start = p_sys->i_box_lines_total - 1;                }                return 1;            default:                break;        }    }    else if( p_sys->i_box_type == BOX_NONE )    {        switch( i_key )        {            case KEY_HOME:                p_sys->f_slider = 0;                ManageSlider( p_intf );                return 1;            case KEY_END:                p_sys->f_slider = 99.9;                ManageSlider( p_intf );                return 1;            case KEY_UP:                p_sys->f_slider += 5.0;                if( p_sys->f_slider >= 99.0 ) p_sys->f_slider = 99.0;                ManageSlider( p_intf );                return 1;            case KEY_DOWN:                p_sys->f_slider -= 5.0;                if( p_sys->f_slider < 0.0 ) p_sys->f_slider = 0.0;                ManageSlider( p_intf );                return 1;            default:                break;        }    }    else if( p_sys->i_box_type == BOX_SEARCH && p_sys->psz_search_chain )    {        int i_chain_len;        i_chain_len = strlen( p_sys->psz_search_chain );        switch( i_key )        {            case 0x0c:      /* ^l */                clear();                return 1;            case KEY_ENTER:            case 0x0d:                if( i_chain_len > 0 )                {                    p_sys->psz_old_search = strdup( p_sys->psz_search_chain );                }                else if( p_sys->psz_old_search )                {                    SearchPlaylist( p_intf, p_sys->psz_old_search );                }                p_sys->i_box_type = BOX_PLAYLIST;                return 1;            case 0x1b:      /* Esc. */                p_sys->i_box_plidx = p_sys->i_before_search;                p_sys->i_box_type = BOX_PLAYLIST;                return 1;            case KEY_BACKSPACE:                if( i_chain_len > 0 )                {                    p_sys->psz_search_chain[ i_chain_len - 1 ] = '\0';                }                break;            default:                if( i_chain_len < SEARCH_CHAIN_SIZE )                {                    p_sys->psz_search_chain[ i_chain_len++ ] = i_key;                    p_sys->psz_search_chain[ i_chain_len ] = 0;                }                break;        }        if( p_sys->psz_old_search )        {            free( p_sys->psz_old_search );            p_sys->psz_old_search = NULL;        }        SearchPlaylist( p_intf, p_sys->psz_search_chain );        return 1;    }    else if( p_sys->i_box_type == BOX_OPEN && p_sys->psz_open_chain )    {        int i_chain_len = strlen( p_sys->psz_open_chain );        playlist_t *p_playlist = p_sys->p_playlist;        switch( i_key )        {            case 0x0c:      /* ^l */                clear();                return 1;            case KEY_ENTER:            case 0x0d:                if( p_playlist && i_chain_len > 0 )                {                    playlist_Add( p_playlist, p_sys->psz_open_chain,                                  p_sys->psz_open_chain,                                  PLAYLIST_GO|PLAYLIST_APPEND, PLAYLIST_END );                    p_sys->b_box_plidx_follow = VLC_TRUE;                }                p_sys->i_box_type = BOX_PLAYLIST;                return 1;            case 0x1b:      /* Esc. */                p_sys->i_box_type = BOX_PLAYLIST;                return 1;            case KEY_BACKSPACE:                if( i_chain_len > 0 )                {                    p_sys->psz_open_chain[ i_chain_len - 1 ] = '\0';                }                break;            default:                if( i_chain_len < OPEN_CHAIN_SIZE )                {                    p_sys->psz_open_chain[ i_chain_len++ ] = i_key;                    p_sys->psz_open_chain[ i_chain_len ] = 0;                }                break;        }        return 1;    }    /* Common keys */    switch( i_key )    {        case 'q':        case 'Q':        case 0x1b:  /* Esc */            p_intf->p_vlc->b_die = VLC_TRUE;            return 0;        /* Box switching */        case 'i':            if( p_sys->i_box_type == BOX_INFO )                p_sys->i_box_type = BOX_NONE;            else                p_sys->i_box_type = BOX_INFO;            p_sys->i_box_lines_total = 0;            return 1;        case 'L':            if( p_sys->i_box_type == BOX_LOG )                p_sys->i_box_type = BOX_NONE;            else                p_sys->i_box_type = BOX_LOG;            return 1;        case 'P':            if( p_sys->i_box_type == BOX_PLAYLIST )                p_sys->i_box_type = BOX_NONE;            else                p_sys->i_box_type = BOX_PLAYLIST;            return 1;        case 'B':            if( p_sys->i_box_type == BOX_BROWSE )                p_sys->i_box_type = BOX_NONE;            else                p_sys->i_box_type = BOX_BROWSE;            return 1;        case 'h':        case 'H':            if( p_sys->i_box_type == BOX_HELP )                p_sys->i_box_type = BOX_NONE;            else                p_sys->i_box_type = BOX_HELP;            p_sys->i_box_lines_total = 0;            return 1;        case '/':            if( p_sys->i_box_type != BOX_SEARCH )            {                if( p_sys->psz_search_chain == NULL )                {                    return 1;                }                p_sys->psz_search_chain[0] = '\0';                p_sys->b_box_plidx_follow = VLC_FALSE;                p_sys->i_before_search = p_sys->i_box_plidx;                p_sys->i_box_type = BOX_SEARCH;            }            return 1;        case 'A': /* Open */            if( p_sys->i_box_type != BOX_OPEN )            {                if( p_sys->psz_open_chain == NULL )                {                    return 1;                }                p_sys->psz_open_chain[0] = '\0';                p_sys->i_box_type = BOX_OPEN;            }            return 1;        /* Navigation */        case KEY_RIGHT:            p_sys->f_slider += 1.0;            if( p_sys->f_slider > 99.9 ) p_sys->f_slider = 99.9;            ManageSlider( p_intf );            return 1;        case KEY_LEFT:            p_sys->f_slider -= 1.0;            if( p_sys->f_slider < 0.0 ) p_sys->f_slider = 0.0;            ManageSlider( p_intf );            return 1;        /* Common control */        case 'f':        {            if( p_intf->p_sys->p_input )            {                vout_thread_t *p_vout;                p_vout = vlc_object_find( p_intf->p_sys->p_input,                                          VLC_OBJECT_VOUT, FIND_CHILD );                if( p_vout )                {                    var_Get( p_vout, "fullscreen", &val );                    val.b_bool = !val.b_bool;                    var_Set( p_vout, "fullscreen", val );                    vlc_object_release( p_vout );                }                else                {                    playlist_t *p_playlist;                    p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,                                                  FIND_ANYWHERE );                    if( p_playlist )                    {                        var_Get( p_playlist, "fullscreen", &val );                        val.b_bool = !val.b_bool;                        var_Set( p_playlist, "fullscreen", val );                        vlc_object_release( p_playlist );                    }                }            }            return 0;        }        case ' ':            PlayPause( p_intf );            return 1;        case 's':            if( p_intf->p_sys->p_playlist )            {                playlist_Stop( p_intf->p_sys->p_playlist );            }            return 1;        case 'e':            Eject( p_intf );            return 1;        case '[':            if( p_sys->p_input )            {                val.b_bool = VLC_TRUE;                var_Set( p_sys->p_input, "prev-title", val );            }            return 1;        case ']':            if( p_sys->p_input )            {                val.b_bool = VLC_TRUE;                var_Set( p_sys->p_input, "next-title", val );            }            return 1;        case '<':            if( p_sys->p_input )            {                val.b_bool = VLC_TRUE;                var_Set( p_sys->p_input, "prev-chapter", val );            }            return 1;        case '>':            if( p_sys->p_input )            {                val.b_bool = VLC_TRUE;                var_Set( p_sys->p_input, "next-chapter", val );            }            return 1;        case 'p':            if( p_intf->p_sys->p_playlist )            {                playlist_Prev( p_intf->p_sys->p_playlist );            }            clear();            return 1;        case 'n':            if( p_intf->p_sys->p_playlist )            {                playlist_Next( p_intf->p_sys->p_playlist );            }            clear();            return 1;        case 'a':            aout_VolumeUp( p_intf, 1, NULL );            clear();            return 1;        case 'z':            aout_VolumeDown( p_intf, 1, NULL );            clear();            return 1;        /*         * ^l should clear and redraw the screen         */        case 0x0c:            clear();            return 1;        default:            return 0;    }}static void ManageSlider( intf_thread_t *p_intf ){    intf_sys_t     *p_sys = p_intf->p_sys;    input_thread_t *p_input = p_sys->p_input;    vlc_value_t     val;    if( p_input == NULL )    {        return;    }    var_Get( p_input, "state", &val );    if( val.i_int != PLAYING_S )    {        return;    }    var_Get( p_input, "position", &val );    if( p_sys->f_slider == p_sys->f_slider_old )    {        p_sys->f_slider =        p_sys->f_slider_old = 100 * val.f_float;    }    else    {        p_sys->f_slider_old = p_sys->f_slider;        val.f_float = p_sys->f_slider / 100.0;        var_Set( p_input, "position", val );    }}static void SearchPlaylist( intf_thread_t *p_intf, char *psz_searchstring ){    int i_max;    int i_first = 0 ;    int i_item = -1;    intf_sys_t *p_sys = p_intf->p_sys;    playlist_t *p_playlist = p_sys->p_playlist;    if( p_sys->i_before_search >= 0 )    {        i_first = p_sys->i_before_search;    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -