/* *函数介绍:保存修改或添加 *入口参数:(无) *出口参数:(无) *返回值:(无) */ void CFileExamDlg::OnBnClickedBtnsave() { CStudentData studentData; CFile stuFile; UpdateData(TRUE); switch (m_operID ) { case 0 : /*添加操作*/ { /*将添加的东西写入文件*/ ZeroMemory(&studentData,sizeof(studentData)); wcscpy(studentData.xsbh,m_xsbh); wcscpy(studentData.xsxm,m_xsxm); wcscpy(studentData.xb,m_xsxb); wcscpy(studentData.csrq,m_csrq); wcscpy(studentData.bjmc,m_bjmc); stuFile.Open(STUDENTFILEPATH,CFile::modeRead | CFile::modeWrite); stuFile.SeekToEnd(); stuFile.Write(&studentData,sizeof(studentData)); stuFile.Close(); //更新内存队列 m_lstStudent.AddTail(studentData); SetControlEnable(FALSE); //设置指针移动按钮有效性 m_iCurPos = m_lstStudent.GetCount()-1; SetNavigatorButton(m_iCurPos); break; } case 1: /*编辑操作*/ { /*将添加的东西写入文件*/ ZeroMemory(&studentData,sizeof(studentData)); wcscpy(studentData.xsbh,m_xsbh); wcscpy(studentData.xsxm,m_xsxm); wcscpy(studentData.xb,m_xsxb); wcscpy(studentData.csrq,m_csrq); wcscpy(studentData.bjmc,m_bjmc); stuFile.Open(STUDENTFILEPATH,CFile::modeRead | CFile::modeWrite); stuFile.Seek(sizeof(studentData)*(m_iCurPos) ,CFile::begin); stuFile.Write(&studentData,sizeof(studentData)); stuFile.Close(); //更新内存队列 m_lstStudent.SetAt(m_lstStudent.FindIndex(m_iCurPos),studentData); SetControlEnable(FALSE); //设置指针移动按钮有效性 SetNavigatorButton(m_iCurPos); break; } } }
ListSelectDialog::ListSelectDialog(wxWindow *parent, const wxString& title) : wxDialog(parent, wxID_ANY, title, wxDefaultPosition, wxSize(400, 420)) { wxBoxSizer *dlgSizer = new wxBoxSizer(wxVERTICAL); SetSizer(dlgSizer); wxPanel *mainPanel = new wxPanel(this); dlgSizer->Add(mainPanel, wxSizerFlags(1).Expand().Border(wxALL, 8)); wxGridBagSizer *mainSz = new wxGridBagSizer(); mainSz->AddGrowableCol(0, 0); mainSz->AddGrowableRow(0, 0); mainPanel->SetSizer(mainSz); list = new wxListBox(mainPanel, -1, wxDefaultPosition, wxDefaultSize, wxArrayString(), wxLB_SINGLE); mainSz->Add(list, wxGBPosition(0, 0), wxGBSpan(1, 2), wxEXPAND | wxALL, 4); wxButton *refreshButton = new wxButton(mainPanel, ID_RefreshList, _("&Refresh")); mainSz->Add(refreshButton, wxGBPosition(1, 1), wxGBSpan(1, 1), wxALL, 3); wxSizer *btnSz = CreateButtonSizer(wxOK | wxCANCEL); dlgSizer->Add(btnSz, wxSizerFlags(0).Border(wxBOTTOM | wxRIGHT, 8). Align(wxALIGN_RIGHT | wxALIGN_BOTTOM)); SetControlEnable(this, wxID_OK, false); }
ListSelectDialog::ListSelectDialog(wxWindow *parent, const wxString& title) : wxDialog(parent, wxID_ANY, title, wxDefaultPosition, wxSize(400, 420), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) { SetMinSize(wxSize(400, 420)); dlgSizer = new wxBoxSizer(wxVERTICAL); SetSizer(dlgSizer); listCtrl = new ListSelectCtrl(this, this); listCtrl->AppendColumn(wxEmptyString, wxLIST_FORMAT_LEFT); dlgSizer->Add(listCtrl,1, wxEXPAND | wxALL, 4); wxSizerFlags btnSzFlags = wxSizerFlags(0).Border(wxBOTTOM, 4); btnSz = new wxBoxSizer(wxHORIZONTAL); refreshButton = new wxButton(this, ID_RefreshList, _("&Refresh")); btnSz->Add(refreshButton, btnSzFlags.Align(wxALIGN_LEFT)); btnSz->AddStretchSpacer(); btnSz->Add(new wxButton(this, wxID_CANCEL)); btnSz->Add(new wxButton(this, wxID_OK)); dlgSizer->Add(btnSz, wxSizerFlags(0).Border(wxBOTTOM | wxRIGHT | wxLEFT, 4). Align(wxALIGN_BOTTOM).Expand()); SetControlEnable(this, wxID_OK, false); }
BOOL CFileExamDlg::OnInitDialog() { CDialog::OnInitDialog(); // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 //装载学生表到m_lstStudent队列 CFile stuFile; CStudentData studentData; DWORD dwRead; //如果数据文件存在,就读取 ZeroMemory(&studentData,sizeof(studentData)); if (stuFile.Open(STUDENTFILEPATH,CFile::modeRead)) { do { dwRead = stuFile.Read(&studentData,sizeof(studentData)); if (dwRead != 0 ) { m_lstStudent.AddTail(studentData); } }while(dwRead > 0); //关闭数据文件 stuFile.Close(); } else //创建文件 { if (!stuFile.Open(STUDENTFILEPATH,CFile::modeCreate|CFile::modeWrite)) { AfxMessageBox(_T("创建数据库失败")); return FALSE; } stuFile.Close(); } //初始化界面显示 if (m_lstStudent.GetCount() > 0) { studentData = m_lstStudent.GetHead(); m_iCurPos = 0; //初始划第一条显示 m_xsbh = studentData.xsbh; m_xsxm = studentData.xsxm; m_xsxb = studentData.xb; m_csrq = studentData.csrq; m_bjmc = studentData.bjmc; UpdateData(false); } SetControlEnable(FALSE); //设置指针移动按钮有效性 SetNavigatorButton(m_iCurPos); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE }
/* *函数介绍:删除当前记录 *入口参数:(无) *出口参数:(无) *返回值:(无) */ void CFileExamDlg::OnBnClickedBtndelete() { if (m_lstStudent.IsEmpty()) { AfxMessageBox(_T("没有可删除的记录")); return; } //先从队列中移除 POSITION pos = m_lstStudent.FindIndex(m_iCurPos); m_lstStudent.RemoveAt(pos); if (m_iCurPos != 0) { m_iCurPos--; } //更新界面显示 if (!m_lstStudent.IsEmpty()) { pos = m_lstStudent.FindIndex(m_iCurPos); CStudentData studentData = m_lstStudent.GetAt(pos); //更新显示 m_xsbh = studentData.xsbh; m_xsxm = studentData.xsxm; m_xsxb = studentData.xb; m_csrq = studentData.csrq; m_bjmc = studentData.bjmc; UpdateData(false); } else { //更新显示 m_xsbh = _T(""); m_xsxm = _T(""); m_xsxb = _T(""); m_csrq = _T(""); m_bjmc = _T(""); UpdateData(false); } SetControlEnable(FALSE); //设置指针移动按钮有效性 SetNavigatorButton(m_iCurPos); //将文件重写 CStudentData studentData; CFile stuFile; stuFile.Open(STUDENTFILEPATH,CFile::modeCreate | CFile::modeWrite); pos = m_lstStudent.GetHeadPosition(); for (int i=0;i<m_lstStudent.GetCount();i++) { ZeroMemory(&studentData,sizeof(studentData)); studentData = m_lstStudent.GetNext(pos); stuFile.Write(&studentData,sizeof(studentData)); } stuFile.Close(); }
/* *函数介绍:编辑旧记录 *入口参数:(无) *出口参数:(无) *返回值:(无) */ void CFileExamDlg::OnBnClickedBtnedit() { if (m_lstStudent.IsEmpty()) { AfxMessageBox(_T("没有可编辑的记录")); return; } m_operID = 1 ; //表示编辑操作 SetControlEnable(TRUE); }
/* *函数介绍:添加新记录 *入口参数:(无) *出口参数:(无) *返回值:(无) */ void CFileExamDlg::OnBnClickedBtnadd() { m_operID = 0 ; //表示添加操作 m_xsbh = _T(""); m_xsxm = _T(""); m_xsxb = _T(""); m_csrq = _T(""); m_bjmc = _T(""); UpdateData(FALSE); SetControlEnable(TRUE); }
virtual void MessageReceived(BMessage* msg) { switch( msg->what ) { case OK_MSG: if( mTarget.IsValid() ) { BMessage msg(OWQ_ADD); if( !mOldPrefs.IsEmpty() ) msg.AddMessage( "old item", &mOldPrefs ); if( GetPrefs( msg ) == B_OK ) mTarget.SendMessage( &msg ); } Quit(); break; case CANCEL_MSG: Quit(); break; case OWQ_CHOOSE_FILE_MSG: { if( !mFilePanel ) mFilePanel = new BFilePanel(B_OPEN_PANEL, 0, 0, 0, false); if( mFilePanel->IsShowing() ) break; if( mFilePanel->Window() ) { mFilePanel->Window()->SetTitle("Select File" B_UTF8_ELLIPSIS); } mFilePanel->SetTarget(BMessenger(this)); mFilePanel->SetMessage( new BMessage('entr') ); mFilePanel->Show(); } break; case 'entr': { entry_ref ref; if( msg->FindRef( "refs", &ref ) == B_OK ) { delete mRef; mRef = new entry_ref( ref ); } } break; case OWQ_ON_MSG: { bool enable = false; if( mOnBox && mOnBox->Value() == B_CONTROL_ON ) enable = true; SetControlEnable(enable); } break; case SET_PREFS_MSG: SetPrefs( msg ); break; default: BWindow::MessageReceived(msg); break; } }
/* *函数介绍:取消修改或添加 *入口参数:(无) *出口参数:(无) *返回值:(无) */ void CFileExamDlg::OnBnClickedBtncancel() { POSITION pos = m_lstStudent.FindIndex(m_iCurPos); CStudentData studentData = m_lstStudent.GetAt(pos); //更新显示 m_xsbh = studentData.xsbh; m_xsxm = studentData.xsxm; m_xsxb = studentData.xb; m_csrq = studentData.csrq; m_bjmc = studentData.bjmc; UpdateData(false); SetControlEnable(FALSE); //设置指针移动按钮有效性 SetNavigatorButton(m_iCurPos); }
void CRebaseDlg::OnBnClickedContinue() { if( m_RebaseStage == REBASE_DONE) { OnOK(); return; } if( this->m_IsFastForward ) { CString cmd,out; CString oldbranch = g_Git.GetCurrentBranch(); if( oldbranch != m_BranchCtrl.GetString() ) { cmd.Format(_T("git.exe checkout %s"),m_BranchCtrl.GetString()); AddLogString(cmd); if( g_Git.Run(cmd,&out,CP_ACP) ) { this->m_ctrlTabCtrl.SetActiveTab(REBASE_TAB_LOG); AddLogString(out); return; } } AddLogString(out); out.Empty(); m_OrigBranchHash = g_Git.GetHash(m_BranchCtrl.GetString()); m_OrigUpstreamHash = g_Git.GetHash(this->m_UpstreamCtrl.GetString()); if(!g_Git.IsFastForward(this->m_BranchCtrl.GetString(),this->m_UpstreamCtrl.GetString())) { this->m_ctrlTabCtrl.SetActiveTab(REBASE_TAB_LOG); AddLogString(_T("No fast forward\r\nMaybe repository changed")); return; } cmd.Format(_T("git.exe reset --hard %s"),g_Git.FixBranchName(this->m_UpstreamCtrl.GetString())); this->AddLogString(CString(_T("Fast forward to "))+m_UpstreamCtrl.GetString()); AddLogString(cmd); this->m_ctrlTabCtrl.SetActiveTab(REBASE_TAB_LOG); if(g_Git.Run(cmd,&out,CP_ACP)) { AddLogString(_T("Fail")); AddLogString(out); return; } AddLogString(out); AddLogString(_T("Done")); m_RebaseStage = REBASE_DONE; UpdateCurrentStatus(); return; } if( m_RebaseStage == CHOOSE_BRANCH|| m_RebaseStage == CHOOSE_COMMIT_PICK_MODE ) { if(CheckRebaseCondition()) return ; m_RebaseStage = REBASE_START; m_FileListCtrl.Clear(); m_FileListCtrl.m_CurrentVersion = L""; m_ctrlTabCtrl.SetTabLabel(REBASE_TAB_CONFLICT, _T("Conflict Files")); m_ctrlTabCtrl.AddTab(&m_wndOutputRebase,_T("Log"),2); } if( m_RebaseStage == REBASE_FINISH ) { if(FinishRebase()) return ; OnOK(); } if( m_RebaseStage == REBASE_SQUASH_CONFLICT) { if(VerifyNoConflict()) return; GitRev *curRev=(GitRev*)m_CommitList.m_arShownList[m_CurrentRebaseIndex]; if(this->CheckNextCommitIsSquash()) {//next commit is not squash; m_RebaseStage = REBASE_SQUASH_EDIT; this->OnRebaseUpdateUI(0,0); this->UpdateCurrentStatus(); return ; } m_RebaseStage=REBASE_CONTINUE; curRev->GetAction(&m_CommitList)|=CTGitPath::LOGACTIONS_REBASE_DONE; this->UpdateCurrentStatus(); } if( m_RebaseStage == REBASE_CONFLICT ) { if(VerifyNoConflict()) return; GitRev *curRev=(GitRev*)m_CommitList.m_arShownList[m_CurrentRebaseIndex]; CString out =_T(""); CString cmd; cmd.Format(_T("git.exe commit -a -C %s"), curRev->m_CommitHash.ToString()); AddLogString(cmd); if(g_Git.Run(cmd,&out,CP_UTF8)) { AddLogString(out); if(!g_Git.CheckCleanWorkTree()) { CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK|MB_ICONERROR); return; } } AddLogString(out); this->m_ctrlTabCtrl.SetActiveTab(REBASE_TAB_LOG); if( curRev->GetAction(&m_CommitList) & CTGitPath::LOGACTIONS_REBASE_EDIT) { m_RebaseStage=REBASE_EDIT; this->m_ctrlTabCtrl.SetActiveTab(REBASE_TAB_MESSAGE); this->UpdateCurrentStatus(); return; } else { m_RebaseStage=REBASE_CONTINUE; curRev->GetAction(&m_CommitList)|=CTGitPath::LOGACTIONS_REBASE_DONE; this->UpdateCurrentStatus(); } } if( m_RebaseStage == REBASE_EDIT || m_RebaseStage == REBASE_SQUASH_EDIT ) { CString str; GitRev *curRev=(GitRev*)m_CommitList.m_arShownList[m_CurrentRebaseIndex]; str=this->m_LogMessageCtrl.GetText(); if(str.Trim().IsEmpty()) { CMessageBox::Show(NULL,_T("Commit Message Is Empty"),_T("TortoiseGit"),MB_OK|MB_ICONERROR); return; } CString tempfile=::GetTempFile(); CFile file(tempfile,CFile::modeReadWrite|CFile::modeCreate ); CStringA log=CUnicodeUtils::GetUTF8( str); file.Write(log,log.GetLength()); //file.WriteString(m_sLogMessage); file.Close(); CString out,cmd; if( m_RebaseStage == REBASE_SQUASH_EDIT ) cmd.Format(_T("git.exe commit -F \"%s\""), tempfile); else cmd.Format(_T("git.exe commit --amend -F \"%s\""), tempfile); if(g_Git.Run(cmd,&out,CP_UTF8)) { if(!g_Git.CheckCleanWorkTree()) { CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK|MB_ICONERROR); return; } } CFile::Remove(tempfile); AddLogString(out); this->m_ctrlTabCtrl.SetActiveTab(REBASE_TAB_LOG); m_RebaseStage=REBASE_CONTINUE; curRev->GetAction(&m_CommitList)|=CTGitPath::LOGACTIONS_REBASE_DONE; this->UpdateCurrentStatus(); } InterlockedExchange(&m_bThreadRunning, TRUE); SetControlEnable(); if (AfxBeginThread(RebaseThreadEntry, this)==NULL) { InterlockedExchange(&m_bThreadRunning, FALSE); CMessageBox::Show(NULL, _T("Create Rebase Thread Fail"), _T("TortoiseGit"), MB_OK | MB_ICONERROR); SetControlEnable(); } }
void CRebaseDlg::UpdateCurrentStatus() { SetContinueButtonText(); SetControlEnable(); UpdateProgress(); }
_OwqWindow(BMessenger target, const BMessage* prefs = 0) : BWindow( BRect(100, 100, 300, 300), "Open From Query", B_TITLED_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL, B_NOT_ZOOMABLE | B_ASYNCHRONOUS_CONTROLS | B_NOT_RESIZABLE), mTarget(target), mFilePanel(0), mOnBox(0), mNameCtrl(0), mFileButton(0), mSkipBox(0), mRef(0) { BRect b = Bounds(); BView* v = new BView( b, "bg", B_FOLLOW_ALL, 0 ); float bottom = b.bottom; if (v) { v->SetViewColor( Prefs().Color(AM_AUX_WINDOW_BG_C) ); float cbH = check_box_height( v ); BRect f(5, 5, b.right - 5, 5 + cbH); mOnBox = new BCheckBox( f, "on_box", "On", new BMessage( OWQ_ON_MSG ) ); if( mOnBox ) { mOnBox->SetValue( B_CONTROL_ON ); v->AddChild( mOnBox ); } f.OffsetBy( 0, f.Height() + 10 ); f.bottom = f.top + text_control_height( v ); mNameCtrl = new BTextControl( f, "name_ctrl", "Name: ", "", new BMessage( OWQ_NAME_MSG ) ); if( mNameCtrl ) { mNameCtrl->SetDivider( v->StringWidth( "Name:" ) + 10 ); v->AddChild( mNameCtrl ); } f.OffsetBy( 0, f.Height() + 10 ); f.bottom = f.top + button_height( v ); mFileButton = new BButton( f, "file_ctrl", "Choose Query", new BMessage( OWQ_CHOOSE_FILE_MSG ) ); if( mFileButton ) v->AddChild( mFileButton ); /* I've turned off skip for now -- I think just having it on * is easier than explaining it. */ #if 0 f.OffsetBy( 0, f.Height() + 5 ); f.bottom = f.top + cbH; mSkipBox = new BCheckBox( f, "skip_box", "Skip top level", new BMessage( OWQ_SKIP_MSG ) ); if( mSkipBox ) v->AddChild( mSkipBox ); #endif f.top = f.bottom + 10; f.bottom = f.top + button_height( v ); float buttonW = 60; f.left = f.right - buttonW; BButton* button = new BButton( f, "ok_button", "OK", new BMessage( OK_MSG ) ); if( button ) { v->AddChild( button ); button->MakeDefault( true ); } f.OffsetBy( 0-(buttonW + 10), 0 ); button = new BButton( f, "cancel_button", "Cancel", new BMessage( CANCEL_MSG ) ); if( button ) v->AddChild( button ); bottom = f.bottom + 5; AddChild( v ); } ResizeTo( b.Width(), bottom ); if( prefs ) SetPrefs( prefs ); bool enable = false; if( mOnBox && mOnBox->Value() == B_CONTROL_ON ) enable = true; SetControlEnable(enable); }
void ListSelectDialog::UpdateOKBtn() { SetControlEnable(this, wxID_OK, list->GetSelection() != wxNOT_FOUND); }
void ListSelectDialog::UpdateOKBtn() { SetControlEnable(this, wxID_OK, GetSelectedIndex() != -1); }