mainframe.cpp

来自「一款LINUX下的下载软件」· C++ 代码 · 共 2,143 行 · 第 1/5 页

CPP
2,143
字号
        case 24:
        tool->Check( mgID_VIEW_TOOLBAR_SIZE24, true );
        break;

        case 32:
        tool->Check( mgID_VIEW_TOOLBAR_SIZE32, true );
        break;
    }

    viewMenu->AppendCheckItem( mgID_VIEW_STATUSBAR, _MGSTR( _S_MENU_VIEW_STATUSBAR ), wxT( "statusbar" ) );
    viewMenu->Check( mgID_VIEW_STATUSBAR, m_bShowStatusBar );

    wxMenuItem *newtask =
        new wxMenuItem( taskMenu, mgID_NEW_TASK, _MGSTR( _S_MENU_TASK_NEW ), wxT( "create a new task." ) );
    newtask->SetBitmap( wxBitmap( new_xpm ) );
    wxMenuItem *starttask =
        new wxMenuItem( taskMenu, mgID_START_TASK, _MGSTR( _S_MENU_TASK_START ), wxT( "start current task." ) );
    starttask->SetBitmap( wxBitmap( run_xpm ) );
    wxMenuItem *pausetask =
        new wxMenuItem( taskMenu, mgID_STOP_TASK, _MGSTR( _S_MENU_TASK_PAUSE ), wxT( "pause current task." ) );
    pausetask->SetBitmap( wxBitmap( stop_xpm ) );
    wxMenuItem *deletetask =
        new wxMenuItem( taskMenu, mgID_CANCEL_TASK, _MGSTR( _S_MENU_TASK_DELETE ), wxT( "delete current task." ) );
    deletetask->SetBitmap( wxBitmap( delete_xpm ) );

    wxMenuItem *moveup =
        new wxMenuItem( taskMenu, mgID_MOVEUP_TASK, _MGSTR( _S_MENU_TASK_MOVEUP ), wxT( "moveup current task." ) );
    moveup->SetBitmap( wxBitmap( up_xpm ) );
    wxMenuItem *movedown =
        new wxMenuItem( taskMenu, mgID_MOVEDOWN_TASK, _MGSTR( _S_MENU_TASK_MOVEDOWN ), wxT( "movedown current task." ) );
    movedown->SetBitmap( wxBitmap( down_xpm ) );

    wxMenuItem *addant =
        new wxMenuItem( taskMenu, mgID_ADDTHREAD, _MGSTR( _S_MENU_TASK_ADDTHREAD ), wxT( "increase a working thread." ) );
    addant->SetBitmap( wxBitmap( plus_xpm ) );
    wxMenuItem *subant =
        new wxMenuItem( taskMenu, mgID_SUBTHREAD, _MGSTR( _S_MENU_TASK_SUBTHREAD ), wxT( "decrease a working thread." ) );
    subant->SetBitmap( wxBitmap( sub_xpm ) );

    wxMenuItem *reload =
        new wxMenuItem( taskMenu, mgID_RELOAD, _MGSTR( _S_MENU_TASK_RELOAD ), wxT( "redownload the task" ) );
    reload->SetBitmap( wxBitmap( reload_xpm ) );

    taskMenu->Append( newtask );
    taskMenu->Append( starttask );
    taskMenu->Append( pausetask );
    taskMenu->Append( deletetask );
    taskMenu->AppendSeparator( );
    taskMenu->Append( moveup );
    taskMenu->Append( movedown );
    taskMenu->AppendSeparator( );
    taskMenu->Append( addant );
    taskMenu->Append( subant );
    taskMenu->AppendSeparator( );
    taskMenu->Append( reload );
    //root menu
    wxMenuBar* menubar = new wxMenuBar( wxMB_DOCKABLE );
    assert( menubar != NULL );
    menubar->Append( fileMenu, _MGSTR( _S_MENU_FILE ) );
    menubar->Append( taskMenu, _MGSTR( _S_MENU_TASK ) );
    menubar->Append( viewMenu, _MGSTR( _S_MENU_VIEW ) );
    menubar->Append( setMenu, _MGSTR( _S_MENU_OPTION ) );
    menubar->Append( helpMenu, _MGSTR( _S_MENU_HELP ) );

	//Under Windows, a size event is generated, so be sure to initialize data members properly before calling SetMenuBar.
    SetMenuBar( menubar );
}

void MainFrame::InitToolBar()
{

    // delete and recreate the toolbar
    long style;

    if ( GetToolBar() != NULL )
    {
        style = GetToolBar() ->GetWindowStyle();
        delete GetToolBar();
        SetToolBar( NULL );

    }
    else
    {
        style = TOOLBAR_STYLE;
    }

    wxToolBar* toolbar = CreateToolBar( style, -1 );


    //tool icon is 32*32
    wxBitmap bmpNew( tool_new_xpm );
    wxBitmap bmpStart( tool_run_xpm );
    wxBitmap bmpStop( tool_pause_xpm );
    wxBitmap bmpCancel( tool_delete_xpm );
    wxBitmap bmpMoveup( tool_up_xpm );
    wxBitmap bmpMovedown( tool_down_xpm );
    wxBitmap bmpAddAnts( tool_plus_xpm );
    wxBitmap bmpSubAnts( tool_sub_xpm );
    wxBitmap bmpReload( tool_reload_xpm );
    wxBitmap bmpOption( tool_option_xpm );
    wxBitmap bmpProxy( tool_proxy_xpm );
    wxBitmap bmpProperty( tool_property_xpm );


    if ( TOOLBAR_SIZE != 32 )
    {
        bmpNew = wxBitmap( bmpNew.ConvertToImage().Scale( TOOLBAR_SIZE, TOOLBAR_SIZE ) );
        bmpStart = wxBitmap( bmpStart.ConvertToImage().Scale( TOOLBAR_SIZE, TOOLBAR_SIZE ) );
        bmpStop = wxBitmap( bmpStop.ConvertToImage().Scale( TOOLBAR_SIZE, TOOLBAR_SIZE ) );
        bmpCancel = wxBitmap( bmpCancel.ConvertToImage().Scale( TOOLBAR_SIZE, TOOLBAR_SIZE ) );
        bmpMoveup = wxBitmap( bmpMoveup.ConvertToImage().Scale( TOOLBAR_SIZE, TOOLBAR_SIZE ) );
        bmpMovedown = wxBitmap( bmpMovedown.ConvertToImage().Scale( TOOLBAR_SIZE, TOOLBAR_SIZE ) );
        bmpAddAnts = wxBitmap( bmpAddAnts.ConvertToImage().Scale( TOOLBAR_SIZE, TOOLBAR_SIZE ) );
        bmpSubAnts = wxBitmap( bmpSubAnts.ConvertToImage().Scale( TOOLBAR_SIZE, TOOLBAR_SIZE ) );
        bmpReload = wxBitmap( bmpReload.ConvertToImage().Scale( TOOLBAR_SIZE, TOOLBAR_SIZE ) );
        bmpOption = wxBitmap( bmpOption.ConvertToImage().Scale( TOOLBAR_SIZE, TOOLBAR_SIZE ) );
        bmpProxy = wxBitmap( bmpProxy.ConvertToImage().Scale( TOOLBAR_SIZE, TOOLBAR_SIZE ) );
        bmpProperty = wxBitmap( bmpProperty.ConvertToImage().Scale( TOOLBAR_SIZE, TOOLBAR_SIZE ) );

    }

    /*
    	_S_TIP_NEWTASK,
    	_S_TIP_RUNTASK,
    	_S_TIP_STOPTASK,
    	_S_TIP_DELETETASK,
    	_S_TIP_MOVEUPTASK,
    	_S_TIP_MOVEDOWNTASK,
    	_S_TIP_ADDTASKTHREAD,
    	_S_TIP_SUBTASKTHREAD,
    	_S_TIP_RELOADTASK,
    	_S_TIP_SYSCONFIG,
    	_S_TIP_PROXYADMIN,
    */
    toolbar->SetMargins( 0, 0 );
	toolbar->SetToolBitmapSize(wxSize(TOOLBAR_SIZE, TOOLBAR_SIZE));

    toolbar->AddTool( mgID_NEW_TASK,
                      _MGSTR( _S_MENU_TASK_NEW ),
                      bmpNew,
                      _MGSTR( _S_TIP_NEWTASK ) );

    toolbar->AddTool( mgID_START_TASK,
                      _MGSTR( _S_MENU_TASK_START ),
                      bmpStart,
                      _MGSTR( _S_TIP_RUNTASK ) );

    toolbar->AddTool( mgID_STOP_TASK,
                      _MGSTR( _S_MENU_TASK_PAUSE ),
                      bmpStop,
                      _MGSTR( _S_TIP_STOPTASK ) );

    toolbar->AddTool( mgID_CANCEL_TASK,
                      _MGSTR( _S_MENU_TASK_DELETE ),
                      bmpCancel,
                      _MGSTR( _S_TIP_DELETETASK ) );

    toolbar->AddSeparator();

    toolbar->AddTool( mgID_MOVEUP_TASK,
                      _MGSTR( _S_MENU_TASK_MOVEUP ),
                      bmpMoveup,
                      _MGSTR( _S_TIP_MOVEUPTASK ) );

    toolbar->AddTool( mgID_MOVEDOWN_TASK,
                      _MGSTR( _S_MENU_TASK_MOVEDOWN ),
                      bmpMovedown,
                      _MGSTR( _S_TIP_MOVEDOWNTASK ) );

    toolbar->AddSeparator();

    toolbar->AddTool( mgID_ADDTHREAD,
                      _MGSTR( _S_MENU_TASK_ADDTHREAD ),
                      bmpAddAnts,
                      _MGSTR( _S_TIP_ADDTASKTHREAD ) );

    toolbar->AddTool( mgID_SUBTHREAD,
                      _MGSTR( _S_MENU_TASK_SUBTHREAD ),
                      bmpSubAnts,
                      _MGSTR( _S_TIP_SUBTASKTHREAD ) );

    toolbar->AddSeparator();

    toolbar->AddTool( mgID_RELOAD,
                      _MGSTR( _S_MENU_TASK_RELOAD ),
                      bmpReload,
                      _MGSTR( _S_TIP_RELOADTASK ) );

    toolbar->AddSeparator();

    toolbar->AddTool( mgID_OPTION_CONFIG,
                      _MGSTR( _S_MENU_OPTION_CONFIG ),
                      bmpOption,
                      _MGSTR( _S_TIP_SYSCONFIG ) );

    toolbar->AddTool( mgID_OPTION_PROXY,
                      _MGSTR( _S_MENU_OPTION_PROXYCONFIG ),
                      bmpProxy,
                      _MGSTR( _S_TIP_PROXYADMIN ) );

    toolbar->AddSeparator();

    toolbar->AddTool( mgID_OPTION_PROPERTY,
                      _MGSTR( _S_MENU_OPTION_PROPERTY ),
                      bmpProperty,
                      _MGSTR( _S_TIP_PROPERTY ) );

    toolbar->Realize();

    SetToolBar( toolbar );
}

void MainFrame::InitSpliter()
{

    m_vspliter = new wxSplitterWindow(
                     this,
                     wxID_ANY,
                     wxDefaultPosition,
                     wxDefaultSize,
#ifdef WIN32
					wxNO_BORDER,
#else
					wxSP_LIVE_UPDATE | wxSP_BORDER,
#endif
                    wxT( "ms" )
                 );
    assert( m_vspliter != NULL );
    m_vspliter->SetMinimumPaneSize( 150 );

    m_hspliter = new wxSplitterWindow(
                     m_vspliter,
                     wxID_ANY,
                     wxDefaultPosition,
                     wxDefaultSize,
#ifdef WIN32
					wxNO_BORDER,
#else
                     wxSP_LIVE_UPDATE | wxSP_BORDER /*|wxSP_PERMIT_UNSPLIT*/,
#endif
                     wxT( "rs" )
                 );


    assert( m_hspliter != NULL );
    m_hspliter->SetMinimumPaneSize( 100 );
    m_vsubspliter = new CRightDownSplitter( m_hspliter );


    assert( m_vsubspliter != NULL );
    m_lefttree = new CLeftTree( m_vspliter );


    assert( m_lefttree != NULL );
    m_tasklist = new CTaskList( m_hspliter );


    assert( m_tasklist != NULL );

    m_hspliter->SetSashGravity( 0.5 );
    m_vspliter->SetSashGravity( 0.1 );

	
    m_vspliter->SplitVertically( m_lefttree, m_hspliter, 150 );
    m_hspliter->SplitHorizontally( m_tasklist, m_vsubspliter, 200 );
}

void MainFrame::OnNewTask( wxCommandEvent& event )
{
    DoNewTask( wxT( "" ) );
}

void MainFrame::OnStartTask( wxCommandEvent& event )
{

    vector<_TaskAttr>::iterator it;

    for ( it = m_AllTaskList.begin();it != m_AllTaskList.end();it++ )
    {

        if ( it->nID == m_nCurrentSelectTaskID )
        {
            it->nStatus = _STATUS_WAITING;
            ScheduleTask();
            UpdateToolBar();
            UpdateTaskList();
            break ;
        }
    }

}

void MainFrame::OnDecreaseThread( wxCommandEvent& event )
{
    if ( m_nCurrentSelectTaskID < 0 )
        return ;

    _TaskAttr* pcur = GetCurrentTask();

    if ( pcur == NULL )
        return ;

    if ( pcur->nStatus == _STATUS_RUNNING )
    {
        if ( m_TaskManager->GetTaskStatus( m_nCurrentSelectTaskID ) != _TASK_NONE )
        {
            if ( m_TaskManager->ThreadDown( m_nCurrentSelectTaskID ) )
            {
                if ( pcur->nThread > 1 )
                {
                    pcur->nThread--;
                    UpdateTaskList();
                    UpdateRightDown();
                }
            }
        }
    }
    else if (
        pcur->nStatus == _STATUS_WAITING ||
        pcur->nStatus == _STATUS_WRONG ||
        pcur->nStatus == _STATUS_PAUSE )
    {
        if ( pcur->nThread > 1 )
        {
            pcur->nThread--;
            UpdateTaskList();
            UpdateRightDown();
        }
    }
    else if ( pcur->nStatus == _STATUS_DELETE )
    {
        if ( pcur->nThread > 1 )
        {
            pcur->nThread--;
            UpdateTaskList();
            UpdateRightDown();
        }
    }
    else //finish or delete
        return ;
}

void MainFrame::OnIncreaseThread( wxCommandEvent& event )
{

    _TaskAttr* pcur = GetCurrentTask();

    if ( pcur == NULL )
        return ;

    if ( pcur->nStatus == _STATUS_RUNNING )
    {
        if ( m_TaskManager->GetTaskStatus( m_nCurrentSelectTaskID ) != _TASK_NONE )
        {
            if ( m_TaskManager->ThreadUp( m_nCurrentSelectTaskID ) )
            {
                if ( pcur->nThread < 10 )
                {					pthread_mutex_lock( &m_TaskMutex );
                    pcur->nThread++;
                    UpdateTaskList();					pthread_mutex_unlock( &m_TaskMutex );
                    UpdateRightDown();
                }
            }
        }
    }
    else if (
        pcur->nStatus == _STATUS_WAITING ||
        pcur->nStatus == _STATUS_WRONG ||
        pcur->nStatus == _STATUS_PAUSE )
    {
        if ( pcur->nThread < 10 )
        {			pthread_mutex_lock( &m_TaskMutex );
            pcur->nThread++;
            UpdateTaskList();			pthread_mutex_unlock( &m_TaskMutex );
            UpdateRightDown();
        }
    }

    else if ( pcur->nStatus == _STATUS_DELETE )
    {
        if ( pcur->nThread < 10 )
        {			pthread_mutex_lock( &m_TaskMutex );
            pcur->nThread++;
            UpdateTaskList();			pthread_mutex_unlock( &m_TaskMutex );
            UpdateRightDown();
        }
    }
    else //finish
    {
        return ;
    }
}

void MainFrame::OnCancelTask( wxCommandEvent& event )
{


    if ( m_nCurrentSelectTaskID < 0 )
    {
        return ;
    }

    _TaskAttr* pcur = GetCurrentTask();

    if ( pcur == NULL )
    {
        return ;
    }


    if ( pcur->nStatus == _STATUS_DELETE )
    { //delete all file


        /* comfirm
              wxString msg;
              wxString url( pcur->sURL.c_str(), wxConvLocal );

⌨️ 快捷键说明

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