| // Dialog.cpp |
| |
| #include "StdAfx.h" |
| |
| // For compilers that support precompilation, includes "wx/wx.h". |
| #include "wx/wxprec.h" |
| |
| #ifdef __BORLANDC__ |
| #pragma hdrstop |
| #endif |
| |
| // for all others, include the necessary headers (this file is usually all you |
| // need because it includes almost all "standard" wxWidgets headers) |
| #ifndef WX_PRECOMP |
| #include "wx/wx.h" |
| #include "wx/imaglist.h" |
| #include "wx/listctrl.h" |
| #endif |
| |
| #undef _WIN32 |
| |
| #include "Windows/Control/Dialog.h" |
| |
| void verify_main_thread(void); |
| |
| class LockGUI |
| { |
| bool _IsMain; |
| public: |
| LockGUI() { |
| verify_main_thread(); |
| _IsMain = wxThread::IsMain(); |
| if (!_IsMain) { |
| // DEBUG |
| printf("GuiEnter-Controls(0x%lx)\n",wxThread::GetCurrentId()); |
| abort(); // FIXME wxMutexGuiEnter(); |
| } |
| } |
| ~LockGUI() { |
| if (!_IsMain) { |
| wxMutexGuiLeave(); |
| // DEBUG printf("GuiLeave(0x%lx)\n",wxThread::GetCurrentId()); |
| } |
| } |
| }; |
| ///////////////////////// |
| |
| static const wxString CLASS_NAME_wxStaticText = wxT("wxStaticText"); |
| static const wxString CLASS_NAME_wxTextCtrl = wxT("wxTextCtrl"); |
| |
| namespace NWindows { |
| namespace NControl { |
| |
| void CDialogChildControl::SetText(LPCWSTR s) |
| { |
| LockGUI lock; |
| const wxChar * class_name = _window->GetClassInfo()->GetClassName (); |
| |
| if ( CLASS_NAME_wxStaticText == class_name) { |
| ((wxStaticText *)_window)->SetLabel(s); |
| } else if ( CLASS_NAME_wxTextCtrl == class_name) { |
| ((wxTextCtrl *)_window)->SetLabel(s); |
| } else { |
| // ((wxControl *)_window)->SetValue(s); // FIXME |
| printf("INTERNAL ERROR - CDialogChildControl::SetText(class=%ls) not implemented\n",class_name); |
| exit(-1); |
| } |
| } |
| |
| bool CDialogChildControl::GetText(CSysString &s) |
| { |
| wxString str; |
| { |
| LockGUI lock; |
| const wxChar * class_name = _window->GetClassInfo()->GetClassName (); |
| if ( CLASS_NAME_wxStaticText == class_name) { |
| str = ((wxStaticText *)_window)->GetLabel(); |
| } else if ( CLASS_NAME_wxTextCtrl == class_name) { |
| str = ((wxTextCtrl *)_window)->GetLabel(); |
| } else { |
| // FIXME str = ((wxTextCtrl *)_window)->GetValue(); |
| printf("INTERNAL ERROR - CDialogChildControl::GetText(class=%ls) not implemented\n",class_name); |
| exit(-1); |
| } |
| } |
| s = str; |
| return true; |
| } |
| } |
| } |
| |
| ///////////////////////// Windows/Control/ComboBox.cpp |
| #include "Windows/Control/ComboBox.h" |
| |
| namespace NWindows { |
| namespace NControl { |
| |
| void CComboBox::Attach(wxWindow * newWindow) { _choice = (wxComboBox*)newWindow; } |
| |
| wxWindow * CComboBox::Detach() |
| { |
| wxWindow * window = _choice; |
| _choice = NULL; |
| return window; |
| } |
| |
| CComboBox::operator HWND() const { return (HWND)_choice; } |
| |
| |
| int CComboBox::AddString(const TCHAR * txt) { |
| LockGUI lock; |
| wxString item(txt); |
| return _choice->Append(item); |
| } |
| |
| void CComboBox::SetText(LPCTSTR s) { |
| LockGUI lock; |
| wxString str(s); |
| _choice->SetValue(str); |
| } |
| |
| void CComboBox::GetText(CSysString &s) { |
| LockGUI lock; |
| wxString str = _choice->GetValue(); |
| s = str; |
| } |
| |
| int CComboBox::GetCount() const { |
| LockGUI lock; |
| return _choice->GetCount(); |
| } |
| |
| void CComboBox::GetLBText(int index, CSysString &s) { |
| LockGUI lock; |
| wxString str = _choice->GetString(index); |
| s = str; |
| } |
| |
| void CComboBox::SetCurSel(int index) { |
| LockGUI lock; |
| _choice->SetSelection(index); |
| } |
| |
| int CComboBox::GetCurSel() { |
| LockGUI lock; |
| return _choice->GetSelection(); |
| } |
| |
| void CComboBox::SetItemData(int index, int val) { |
| LockGUI lock; |
| _choice->SetClientData( index, (void *)(((char *)0) + val)); |
| } |
| |
| int CComboBox::GetItemData(int index) |
| { |
| LockGUI lock; |
| void * data = _choice->GetClientData(index); |
| int ret = (int)(((char *)data) - ((char *)0)); |
| return ret; |
| } |
| |
| void CComboBox::Enable(bool state) { |
| LockGUI lock; |
| _choice->Enable(state); |
| } |
| |
| void CComboBox::ResetContent() { |
| LockGUI lock; |
| _choice->Clear(); |
| } |
| } |
| } |
| |
| ///////////////////////// Windows/Control/Edit.cpp |
| #include "Windows/Control/Edit.h" |
| |
| namespace NWindows { |
| namespace NControl { |
| |
| void CEdit::SetPasswordChar(WPARAM c) // Warning : does not work for wxMSW |
| { |
| LockGUI lock; |
| long style = _window->GetWindowStyle(); |
| if ( c == 0 ) style &= ~(wxTE_PASSWORD); |
| else style |= wxTE_PASSWORD; |
| _window->SetWindowStyle(style); |
| _window->Refresh(); |
| } |
| |
| |
| void CEdit::Show(int cmdShow) |
| { |
| LockGUI lock; |
| // FIXME _window->Show(cmdShow != SW_HIDE); |
| _window->Enable(cmdShow != SW_HIDE); |
| } |
| |
| void CEdit::SetText(LPCWSTR s) |
| { |
| LockGUI lock; |
| ((wxTextCtrl *)_window)->SetValue(s); |
| } |
| |
| bool CEdit::GetText(CSysString &s) |
| { |
| wxString str; |
| { |
| LockGUI lock; |
| str = ((wxTextCtrl *)_window)->GetValue(); |
| } |
| s = str; |
| return true; |
| } |
| |
| } |
| } |
| |
| ///////////////////////// Windows/Control/ProgressBar.cpp |
| #include "Windows/Control/ProgressBar.h" |
| |
| namespace NWindows { |
| namespace NControl { |
| |
| CProgressBar::CProgressBar(wxWindow* newWindow): |
| _window((wxGauge *)newWindow) , _minValue(0), _range(0) { } |
| |
| void CProgressBar::Attach(wxWindow* newWindow) { |
| _window = (wxGauge *)newWindow; |
| _minValue = 0; |
| _range = 0; |
| } |
| |
| void CProgressBar::SetRange32(int minValue, int maxValue) { |
| int range = maxValue - minValue; |
| if (range >= 1) |
| { |
| LockGUI lock; |
| _minValue = minValue; |
| _range = range; |
| _window->SetRange(_range); |
| } |
| } |
| |
| void CProgressBar::SetPos(int pos) { |
| if (_range >= 1) |
| { |
| LockGUI lock; |
| int value = pos - _minValue; |
| if ((value >= 0) && (value <= _range)) _window->SetValue(value); |
| } |
| } |
| |
| } |
| } |
| |
| ///////////////////////// Windows/Control/StatusBar.cpp |
| #include "Windows/Control/StatusBar.h" |
| |
| namespace NWindows { |
| namespace NControl { |
| |
| void CStatusBar::Attach(wxWindow * newWindow) { _statusBar = (wxStatusBar*)newWindow; } |
| |
| wxWindow * CStatusBar::Detach() |
| { |
| wxWindow * window = _statusBar; |
| _statusBar = NULL; |
| return window; |
| } |
| |
| void CStatusBar::SetText(int index, LPCTSTR text) |
| { |
| _statusBar->SetStatusText(text,index); |
| } |
| |
| } |
| |
| } |
| |
| ///////////////////////// Windows/Control/ListView.cpp |
| #include "Windows/Control/ListView.h" |
| |
| namespace NWindows { |
| namespace NControl { |
| |
| void CListView::Attach(wxWindow * newWindow) { |
| _list = (wxListCtrl *)newWindow; |
| } |
| |
| CListView::operator HWND() const { return (HWND)_list; } |
| |
| int CListView::GetItemCount() const {return _list->GetItemCount(); } |
| |
| int CListView::InsertItem(int index, LPCTSTR text) { |
| return _list->InsertItem(index, text); |
| } |
| int CListView::InsertItem(const LVITEM* item) { |
| /* |
| int col = item->iSubItem; |
| wxString text; |
| if (item->mask & LVIF_TEXT) text = item->pszText; |
| |
| // printf("%p->InsertItem(id=%d,%ls)\n",_list,item->iItem, (const wchar_t *)text); |
| return _list->InsertItem(item->iItem, text); |
| */ |
| wxListItem info; |
| long mask = 0; |
| info.SetId(item->iItem); |
| if (item->mask & LVIF_TEXT) |
| { |
| info.SetText(item->pszText); |
| mask |= wxLIST_MASK_TEXT; |
| } |
| if (item->mask & LVIF_PARAM) |
| { |
| info.SetData(item->lParam); |
| mask |= wxLIST_MASK_DATA; |
| } |
| if (item->mask & LVIF_STATE) |
| { |
| info.SetState(item->state); |
| mask |= wxLIST_MASK_STATE; |
| } |
| // FIXME if (item->mask & LVIF_IMAGE) |
| |
| info.SetMask(mask); |
| |
| return _list->InsertItem(info); |
| } |
| |
| void CListView::SetItem(const LVITEM* item) { |
| int col = item->iSubItem; |
| wxString text; |
| if (item->mask & LVIF_TEXT) text = item->pszText; |
| // printf("%p->SetItem(id=%d,col=%d,%ls)\n",_list,item->iItem, col,(const wchar_t *)text); |
| _list->SetItem(item->iItem, col, text); |
| } |
| |
| int CListView::SetSubItem(int index, int subIndex, LPCTSTR text) |
| { |
| return _list->SetItem(index, subIndex, text); |
| } |
| |
| void SetUnicodeFormat(bool fUnicode) { return ; } |
| |
| void CListView::InsertColumn(int columnIndex, LPCTSTR text, int width) |
| { |
| _list->InsertColumn(columnIndex, text, wxLIST_FORMAT_LEFT, width); |
| } |
| |
| void CListView::InsertColumn(int columnIndex, const LVCOLUMNW *columnInfo) |
| { |
| wxString text; |
| int format = wxLIST_FORMAT_LEFT; |
| int width = -1; |
| if (columnInfo->mask & LVCF_FMT) |
| { |
| if (columnInfo->fmt == LVCFMT_LEFT) format = wxLIST_FORMAT_LEFT; |
| if (columnInfo->fmt == LVCFMT_RIGHT) format = wxLIST_FORMAT_RIGHT; |
| } |
| if (columnInfo->mask & LVCF_TEXT) text = columnInfo->pszText; |
| if (columnInfo->mask & LVCF_WIDTH) width = columnInfo->cx; |
| // FIXME LVCF_SUBITEM |
| // printf("%p->InsertColumn(%d,%ls)\n",_list,columnIndex,(const wchar_t *)heading); |
| _list->InsertColumn(columnIndex, text, format, width); |
| } |
| |
| void CListView::DeleteAllItems() { |
| _list->DeleteAllItems(); |
| printf("%p->DeleteAllItems()\n",_list); |
| } |
| |
| void CListView::SetRedraw(bool b) { |
| if (b) _list->Thaw(); |
| else _list->Freeze(); |
| printf(" %p->SetRedraw()\n",_list); |
| } |
| |
| void CListView::SetItemCount(int count) { |
| // ONLY IF VIRTUAL REPORT -- _list->SetItemCount(count); |
| printf(" %p->SetItemCount(%d)\n",_list,count); |
| } |
| |
| void CListView::InvalidateRect(void *, bool) { |
| printf("FIXME %p->InvalidateRect()\n",_list);/* FIXME */ |
| } |
| |
| int CListView::GetSelectedCount() const { |
| int nb = _list->GetSelectedItemCount(); |
| printf(" %p->GetSelectedCount()=>%d\n",_list,nb); |
| return nb; |
| } |
| |
| void /* bool */ CListView::EnsureVisible(int index, bool partialOK) { |
| |
| printf(" %p->EnsureVisible(%d)\n",_list,index); |
| |
| if (index == -1) index = 0; |
| _list->EnsureVisible(index); |
| |
| // return true; |
| } |
| |
| void CListView::SetItemState(int index, UINT state, UINT mask) { |
| // don't work _list->SetItemState(index, state, mask); !? |
| // try SetItem ... |
| /* |
| wxListItem info; |
| |
| info.m_mask = wxLIST_MASK_STATE; |
| info.m_itemId = index; |
| info.m_col = 0; |
| info.m_state = state; |
| info.m_mask = mask; |
| |
| _list->SetItem(info); |
| */ |
| |
| printf(" %p->EnsureVisible(%d)\n",_list,index); |
| |
| if (index == -1) return; |
| |
| if (mask & LVIS_FOCUSED) { |
| _list->SetItemState(index, state & LVIS_FOCUSED, mask & LVIS_FOCUSED); |
| } |
| |
| if (mask & LVIS_SELECTED) { |
| _list->SetItemState(index, state & LVIS_SELECTED, mask & LVIS_SELECTED); |
| } |
| |
| } |
| |
| UINT CListView::GetItemState(int index, UINT mask) const |
| { |
| UINT state = _list->GetItemState(index, mask); |
| printf("FIXME %p->GetItemState(index=%d,mask=0x%x)=0x%x\n",_list,index,(unsigned)mask,(unsigned)state); /* FIXME */ |
| |
| return state; |
| } |
| |
| void /* bool */ CListView::Update() { |
| printf("FIXME %p->Update()\n",_list); /* FIXME */ |
| } |
| |
| bool CListView::DeleteColumn(int columnIndex) { |
| // printf("%p->DeleteColumn()\n",_list); |
| if (_list->GetColumnCount() < 1) return false; |
| return _list->DeleteColumn(columnIndex); // always return true !? |
| } |
| |
| bool CListView::GetItemParam(int itemIndex, LPARAM ¶m) const |
| { |
| param = _list->GetItemData(itemIndex); |
| |
| // printf(" %p->GetItemParam(%d) => %ld\n",_list,itemIndex,(long)param); |
| |
| return true; |
| } |
| |
| int CListView::GetNextItem(int startIndex, UINT flags) const |
| { |
| int item = _list->GetNextItem(startIndex, wxLIST_NEXT_ALL, flags); |
| printf(" %p->GetNextItem(%d) => %d\n",_list,startIndex,item); |
| return item; |
| |
| } |
| |
| int CListView::GetFocusedItem() const |
| { |
| int item = _list->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_FOCUSED); |
| printf(" %p->GetFocusedItem() => %d\n",_list,item); |
| return item; |
| } |
| |
| void CListView::RedrawAllItems() |
| { |
| printf("FIXME %p->RedrawAllItems()\n",_list); |
| } |
| |
| // FIXME added |
| int CListView::GetColumnCount() |
| { |
| return _list->GetColumnCount(); |
| } |
| |
| void CListView::SetFocus() { /* FIXME */ } |
| |
| void CListView::RedrawItem(int item) { /* FIXME */ } |
| |
| bool CListView::SortItems(PFNLVCOMPARE compareFunction, LPARAM dataParam) { |
| printf(" %p->SortItems()\n",_list); |
| return _list->SortItems(compareFunction, dataParam); |
| } |
| |
| bool CListView::GetColumn(int columnIndex, LVCOLUMN* columnInfo) |
| { |
| columnInfo->cx = _list->GetColumnWidth(columnIndex);// FIXME |
| |
| bool ret = false; |
| |
| if (columnInfo->cx >= 1) ret = true; |
| |
| // printf("CListView::GetColumn(%d) cx=%d\n",columnIndex,(int)columnInfo->cx); |
| |
| return ret; |
| } |
| |
| // HWND EditLabel(int itemIndex) |
| void CListView::EditLabel(int itemIndex) |
| { |
| /* FIXME */ |
| } |
| |
| }} |
| |