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 + -
显示快捷键?