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

📄 preferenceswindow.cpp

📁 video linux conference
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    }    vlc_list_t * p_list = NULL;    module_t * p_module = NULL;    if( fType == TYPE_MODULE )    {        p_module = (module_t *) vlc_object_get( p_intf, fObjectId );    }    else    {        if( !( p_list = vlc_list_find( p_intf, VLC_OBJECT_MODULE,                                       FIND_ANYWHERE ) ) )        {            return;        }        for( int i = 0; i < p_list->i_count; i++ )        {            p_module = (module_t*) p_list->p_values[i].p_object;            if( !strcmp( p_module->psz_object_name, "main" ) )                break;            else                p_module = NULL;        }    }    if( !p_module || p_module->i_object_type != VLC_OBJECT_MODULE )    {        /* Shouldn't happen */        return;    }    module_config_t * p_item;    p_item = fSubModule ? ((module_t *)p_module->p_parent)->p_config :               p_module->p_config;    if( fType == TYPE_SUBCATEGORY )    {        for( ; p_item->i_type != CONFIG_HINT_END; p_item++ )        {            if( p_item->i_type == CONFIG_SUBCATEGORY &&                p_item->i_value == fObjectId )            {                break;            }        }    }    r = fBox->Bounds();    r = BRect( 10,20,fBox->Bounds().right-B_V_SCROLL_BAR_WIDTH-10,               fBox->Bounds().bottom-10 );    fView = new BView( r, NULL, B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP,                       B_WILL_DRAW | B_FULL_UPDATE_ON_RESIZE );    fView->SetViewColor( ui_color( B_PANEL_BACKGROUND_COLOR ) );    r = fView->Bounds();    r.InsetBy( 10,10 );    ConfigWidget * widget;    for( ; p_item->i_type != CONFIG_HINT_END; p_item++ )    {        if( ( p_item->i_type == CONFIG_CATEGORY ||              p_item->i_type == CONFIG_SUBCATEGORY ) &&            fType == TYPE_SUBCATEGORY &&            p_item->i_value != fObjectId )        {            break;        }        widget = new ConfigWidget( p_intf, r, p_item );        if( !widget->InitCheck() )        {            delete widget;            continue;        }        fView->AddChild( widget );        r.top += widget->Bounds().Height();    }    if( fType == TYPE_MODULE )    {        vlc_object_release( p_module );    }    else    {        vlc_list_release( p_list );    }    /* Create a scroll view around our fView */    fScroll = new BScrollView( NULL, fView, B_FOLLOW_ALL, 0, false,                               true, B_FANCY_BORDER );    fScroll->SetViewColor( ui_color( B_PANEL_BACKGROUND_COLOR ) );    fBox->AddChild( fScroll );    /* Adjust fView's height to the size it actually needs (we do this       only now so the BScrollView fits the BBox) */    fView->ResizeTo( fView->Bounds().Width(), r.top + 10 );}/*********************************************************************** * ConfigItem::~ConfigItem *********************************************************************** * **********************************************************************/ConfigItem::~ConfigItem(){    if( fHelp )    {        free( fHelp );    }}/***************************************************************************** * ConfigItem::UpdateScrollBar *****************************************************************************/void ConfigItem::UpdateScrollBar(){    /* We have to fix the scrollbar manually because it doesn't handle       correctly simple BViews */    if( !fScroll )    {        return;    }    /* Get the available BRect for display */    BRect display = fScroll->Bounds();    display.right -= B_V_SCROLL_BAR_WIDTH;    /* Fix the scrollbar */    BScrollBar * scrollBar;    BRect visible = display & fView->Bounds();    BRect total   = display | fView->Bounds();    scrollBar = fScroll->ScrollBar( B_VERTICAL );    long max = (long)( fView->Bounds().Height() - visible.Height() );    if( max < 0 ) max = 0;    scrollBar->SetRange( 0, max );    scrollBar->SetProportion( visible.Height() / total.Height() );    scrollBar->SetSteps( 10, 100 );    /* We have to force redraw to avoid visual bugs when resizing       (BeOS bug?) */    fScroll->Invalidate();    fView->Invalidate();}/***************************************************************************** * ConfigItem::ResetScroll *****************************************************************************/void ConfigItem::ResetScroll(){    if( !fScroll )    {        return;    }    fView->ScrollTo( 0, 0 );}/*********************************************************************** * ConfigItem::Apply *********************************************************************** * **********************************************************************/void ConfigItem::Apply( bool doIt ){    if( !fScroll )    {        return;    }    /* Call ConfigWidget::Apply for every child of your fView */    ConfigWidget * widget;    for( int i = 0; i < fView->CountChildren(); i++ )    {        widget = (ConfigWidget*) fView->ChildAt( i );        widget->Apply( doIt );    }}/*********************************************************************** * ConfigWidget::ConfigWidget *********************************************************************** * Builds a view with the right controls for the given config variable. *  rect: the BRect where we place ourselves. All we care is its width *    and its top coordinate, since we adapt our height to take only *    the place we need **********************************************************************/ConfigWidget::ConfigWidget( intf_thread_t * _p_intf, BRect rect,                            module_config_t * p_item )    : BView( rect, NULL, B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP,             B_WILL_DRAW ){    p_intf = _p_intf;    SetViewColor( ui_color( B_PANEL_BACKGROUND_COLOR ) );    BRect r;    BMenuItem * menuItem;    /* Skip deprecated options */    if( p_item->psz_current )    {        fInitOK = false;        return;    }    fInitOK = true;    fType = p_item->i_type;    fName = strdup( p_item->psz_name );    switch( fType )    {        case CONFIG_ITEM_MODULE:        case CONFIG_ITEM_MODULE_CAT:        case CONFIG_ITEM_MODULE_LIST_CAT:        case CONFIG_ITEM_STRING:        case CONFIG_ITEM_FILE:        case CONFIG_ITEM_DIRECTORY:        case CONFIG_ITEM_INTEGER:        case CONFIG_ITEM_FLOAT:            ResizeTo( Bounds().Width(), 25 );            fTextControl = new VTextControl( Bounds(), NULL,                p_item->psz_text, NULL, new BMessage(),                B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP );            AddChild( fTextControl );            break;        case CONFIG_ITEM_KEY:            ResizeTo( Bounds().Width(), 25 );            r = Bounds();            r.left = r.right - 100;            fPopUpMenu = new BPopUpMenu( "" );            fMenuField = new BMenuField( r, NULL, NULL, fPopUpMenu,                B_FOLLOW_RIGHT | B_FOLLOW_TOP );            for( unsigned i = 0;                 i < sizeof( vlc_keys ) / sizeof( key_descriptor_t );                 i++ )            {                menuItem = new BMenuItem( vlc_keys[i].psz_key_string, NULL );                fPopUpMenu->AddItem( menuItem );            }            r.right = r.left - 10; r.left = r.left - 60;            fShiftCheck = new BCheckBox( r, NULL, "Shift",                new BMessage(), B_FOLLOW_RIGHT | B_FOLLOW_TOP );            r.right = r.left - 10; r.left = r.left - 60;            fCtrlCheck = new BCheckBox( r, NULL, "Ctrl",                new BMessage(), B_FOLLOW_RIGHT | B_FOLLOW_TOP );            r.right = r.left - 10; r.left = r.left - 60;            fAltCheck = new BCheckBox( r, NULL, "Alt",                new BMessage(), B_FOLLOW_RIGHT | B_FOLLOW_TOP );            r.right = r.left - 10; r.left = 0; r.bottom -= 10;            fStringView = new BStringView( r, NULL, p_item->psz_text,                B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP );            AddChild( fStringView );            AddChild( fAltCheck );            AddChild( fCtrlCheck );            AddChild( fShiftCheck );            AddChild( fMenuField );            break;        case CONFIG_ITEM_BOOL:            ResizeTo( Bounds().Width(), 25 );            fCheckBox = new BCheckBox( Bounds(), NULL, p_item->psz_text,                new BMessage(), B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP );            AddChild( fCheckBox );            break;        case CONFIG_SECTION:            fInitOK = false;            break;        default:            fInitOK = false;    }}ConfigWidget::~ConfigWidget(){    free( fName );}/*********************************************************************** * ConfigWidget::Apply *********************************************************************** * **********************************************************************/void ConfigWidget::Apply( bool doIt ){    BMenuItem * menuItem;    char string[256];    vlc_value_t val;    switch( fType )    {        case CONFIG_ITEM_STRING:        case CONFIG_ITEM_FILE:        case CONFIG_ITEM_MODULE:        case CONFIG_ITEM_MODULE_CAT:        case CONFIG_ITEM_MODULE_LIST_CAT:        case CONFIG_ITEM_DIRECTORY:            if( doIt )            {                config_PutPsz( p_intf, fName, fTextControl->Text() );            }            else            {                fTextControl->SetText( config_GetPsz( p_intf, fName ) );            }            break;        case CONFIG_ITEM_INTEGER:            if( doIt )            {                config_PutInt( p_intf, fName, atoi( fTextControl->Text() ) );            }            else            {                snprintf( string, 256, "%d", config_GetInt( p_intf, fName ) );                fTextControl->SetText( string );            }            break;        case CONFIG_ITEM_FLOAT:            if( doIt )            {                config_PutFloat( p_intf, fName, atof( fTextControl->Text() ) );            }            else            {                snprintf( string, 256, "%f", config_GetFloat( p_intf, fName ) );                fTextControl->SetText( string );            }            break;        case CONFIG_ITEM_KEY:            if( doIt )            {                menuItem = fPopUpMenu->FindMarked();                if( menuItem )                {                    val.i_int = vlc_keys[fPopUpMenu->IndexOf( menuItem )].i_key_code;                    if( fAltCheck->Value() )                    {                        val.i_int |= KEY_MODIFIER_ALT;                    }                    if( fCtrlCheck->Value() )                    {                        val.i_int |= KEY_MODIFIER_CTRL;                    }                    if( fShiftCheck->Value() )                    {                        val.i_int |= KEY_MODIFIER_SHIFT;                    }                    var_Set( p_intf->p_vlc, fName, val );                }            }            else            {                val.i_int = config_GetInt( p_intf, fName );                fAltCheck->SetValue( val.i_int & KEY_MODIFIER_ALT );                fCtrlCheck->SetValue( val.i_int & KEY_MODIFIER_CTRL );                fShiftCheck->SetValue( val.i_int & KEY_MODIFIER_SHIFT );                        for( unsigned i = 0;                     i < sizeof( vlc_keys ) / sizeof( key_descriptor_t ); i++ )                {                    if( (unsigned) vlc_keys[i].i_key_code ==                            ( val.i_int & ~KEY_MODIFIER ) )                    {                        menuItem = fPopUpMenu->ItemAt( i );                        menuItem->SetMarked( true );                        break;                    }                }            }            break;        case CONFIG_ITEM_BOOL:            if( doIt )            {                config_PutInt( p_intf, fName, fCheckBox->Value() );            }            else            {                fCheckBox->SetValue( config_GetInt( p_intf, fName ) );            }            break;        default:            break;    }}VTextView::VTextView( BRect frame, const char *name,                      uint32 resizingMode, uint32 flags )    : BTextView( frame, name, BRect( 10,10,10,10 ), resizingMode, flags ){    FrameResized( Bounds().Width(), Bounds().Height() );}void VTextView::FrameResized( float width, float height ){    BTextView::FrameResized( width, height );    SetTextRect( BRect( 10,10, width-11, height-11 ) );}VTextControl::VTextControl( BRect frame, const char *name,                            const char *label, const char *text,                            BMessage * message, uint32 resizingMode )    : BTextControl( frame, name, label, text, message, resizingMode ){    FrameResized( Bounds().Width(), Bounds().Height() );}void VTextControl::FrameResized( float width, float height ){    BTextControl::FrameResized( width, height );    SetDivider( width / 2 );}

⌨️ 快捷键说明

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