INT_PTR CInformationBarSettingsDialog::DlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: { const CTSTaskCentreSettings &Settings=m_Core.GetSettings(); Settings.MainBoard.GetInformationBarFont(&m_CurrentFont); m_InformationBar.SetItemMargin(m_Core.ScaleDPI(m_InformationBar.GetDefaultItemMargin())); m_InformationBar.SetFont(m_CurrentFont); m_InformationBar.Create(hDlg); m_ItemMargin=MapDialogUnitX(2); ::SendDlgItemMessage(hDlg,IDC_SETTINGS_INFORMATION_BAR_ITEM_LIST, LB_SETITEMHEIGHT,0,m_InformationBar.GetHeight()+m_ItemMargin*2); CMainBoardSettings::InformationBarItemList ItemList; Settings.MainBoard.GetInformationBarItemList(&ItemList); for (size_t i=0;i<ItemList.size();i++) { CMainBoardSettings::InformationBarItemInfo *pItemInfo= new CMainBoardSettings::InformationBarItemInfo(ItemList[i]); ::SendDlgItemMessage(hDlg,IDC_SETTINGS_INFORMATION_BAR_ITEM_LIST, LB_ADDSTRING,0,reinterpret_cast<LPARAM>(pItemInfo)); InformationBarItems::CCustomInformationItem *pItem= new InformationBarItems::CCustomInformationItem(0); pItem->SetFormat(pItemInfo->Format.c_str()); m_InformationBar.AddItem(pItem); } static const LPCTSTR TextAlignList[] = { TEXT("����"),TEXT("�E��"),TEXT("����"), }; for (int i=0;i<_countof(TextAlignList);i++) { ::SendDlgItemMessage(hDlg,IDC_SETTINGS_INFORMATION_BAR_TEXT_ALIGN, CB_ADDSTRING,0,reinterpret_cast<LPARAM>(TextAlignList[i])); } ::SendDlgItemMessage(hDlg,IDC_SETTINGS_INFORMATION_BAR_ITEM_WIDTH_SPIN, UDM_SETRANGE32,0,10000); SetItemInfo(); SetFontInfo(hDlg,IDC_SETTINGS_INFORMATION_BAR_FONT_INFO,m_CurrentFont); SetTimeComboBox(hDlg,IDC_SETTINGS_INFORMATION_BAR_UPDATE_INTERVAL, 1,10,Settings.MainBoard.GetInformationBarUpdateInterval()); CheckItem(IDC_SETTINGS_INFORMATION_BAR_SHOW_ERROR, Settings.MainBoard.GetInformationBarShowError()); SetTimeComboBox(hDlg,IDC_SETTINGS_INFORMATION_BAR_ERROR_DURATION, 1,10,Settings.MainBoard.GetInformationBarErrorDuration()); EnableItems(IDC_SETTINGS_INFORMATION_BAR_ERROR_DURATION_LABEL, IDC_SETTINGS_INFORMATION_BAR_ERROR_DURATION, Settings.MainBoard.GetInformationBarShowError()); } return TRUE; case WM_DRAWITEM: { LPDRAWITEMSTRUCT pdis=reinterpret_cast<LPDRAWITEMSTRUCT>(lParam); if (wParam==IDC_SETTINGS_INFORMATION_BAR_ITEM_LIST) { switch (pdis->itemAction) { case ODA_DRAWENTIRE: case ODA_SELECT: { const bool fSelected=(pdis->itemState & ODS_SELECTED)!=0; ::FillRect(pdis->hDC,&pdis->rcItem, reinterpret_cast<HBRUSH>( static_cast<INT_PTR>((fSelected?COLOR_HIGHLIGHT:COLOR_WINDOW)+1))); if ((int)pdis->itemID>=0) { const CMainBoardSettings::InformationBarItemInfo *pItemInfo= reinterpret_cast<const CMainBoardSettings::InformationBarItemInfo*>(pdis->itemData); InformationBarItems::CCustomInformationItem *pItem= static_cast<InformationBarItems::CCustomInformationItem*>(m_InformationBar.GetItem(pdis->itemID)); if (pItem==nullptr) break; pItem->SetTextAlign(CInformationBar::CItem::TextAlign(pItemInfo->TextAlign)); RECT rcItem=pdis->rcItem; ::InflateRect(&rcItem,-m_ItemMargin,-m_ItemMargin); RECT rcMargin=m_InformationBar.GetItemMargin(); rcItem.right=rcItem.left+ (pItemInfo->Width<0?CInformationBar::CItem::DEFAULT_WIDTH:pItemInfo->Width)+ rcMargin.left+rcMargin.right; m_InformationBar.DrawItemPreview(pItem,pdis->hDC,rcItem); } } if ((pdis->itemState & ODS_FOCUS)==0) break; case ODA_FOCUS: if ((pdis->itemState & ODS_NOFOCUSRECT)==0) ::DrawFocusRect(pdis->hDC,&pdis->rcItem); break; } } } return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_SETTINGS_INFORMATION_BAR_ITEM_LIST: if (HIWORD(wParam)==LBN_SELCHANGE) { SetItemInfo(); } return TRUE; case IDC_SETTINGS_INFORMATION_BAR_NEW_ITEM: { CMainBoardSettings::InformationBarItemInfo *pItemInfo= new CMainBoardSettings::InformationBarItemInfo; pItemInfo->TextAlign=0; LRESULT Index=::SendDlgItemMessage(hDlg,IDC_SETTINGS_INFORMATION_BAR_ITEM_LIST, LB_ADDSTRING,0,reinterpret_cast<LPARAM>(pItemInfo)); ::SendDlgItemMessage(hDlg,IDC_SETTINGS_INFORMATION_BAR_ITEM_LIST, LB_SETCURSEL,Index,0); InformationBarItems::CCustomInformationItem *pItem= new InformationBarItems::CCustomInformationItem(0); m_InformationBar.AddItem(pItem); SetItemInfo(); } return TRUE; case IDC_SETTINGS_INFORMATION_BAR_DELETE_ITEM: { LRESULT Sel=::SendDlgItemMessage(hDlg,IDC_SETTINGS_INFORMATION_BAR_ITEM_LIST,LB_GETCURSEL,0,0); if (Sel>=0) { delete reinterpret_cast<CMainBoardSettings::InformationBarItemInfo*>( ::SendDlgItemMessage(hDlg,IDC_SETTINGS_INFORMATION_BAR_ITEM_LIST,LB_GETITEMDATA,Sel,0)); ::SendDlgItemMessage(hDlg,IDC_SETTINGS_INFORMATION_BAR_ITEM_LIST,LB_DELETESTRING,Sel,0); m_InformationBar.DeleteItem(Sel); SetItemInfo(); } } return TRUE; case IDC_SETTINGS_INFORMATION_BAR_MOVE_UP_ITEM: case IDC_SETTINGS_INFORMATION_BAR_MOVE_DOWN_ITEM: { HWND hwndList=GetItemHandle(IDC_SETTINGS_INFORMATION_BAR_ITEM_LIST); bool fUp=LOWORD(wParam)==IDC_SETTINGS_INFORMATION_BAR_MOVE_UP_ITEM; LRESULT Sel=::SendMessage(hwndList,LB_GETCURSEL,0,0); LRESULT To; if (fUp) { if (Sel<1) return TRUE; To=Sel-1; } else { if (Sel<0 || Sel+1>=::SendMessage(hwndList,LB_GETCOUNT,0,0)) return TRUE; To=Sel+1; } ::SendMessage(hwndList,WM_SETREDRAW,FALSE,0); LRESULT ItemData=::SendMessage(hwndList,LB_GETITEMDATA,Sel,0); ::SendMessage(hwndList,LB_DELETESTRING,Sel,0); ::SendMessage(hwndList,LB_INSERTSTRING,To,ItemData); ::SendMessage(hwndList,LB_SETCURSEL,To,0); UpdateItemFormat(int(Sel)); UpdateItemFormat(int(To)); ::SendMessage(hwndList,WM_SETREDRAW,TRUE,0); ::InvalidateRect(hwndList,nullptr,TRUE); SetItemInfo(); } return TRUE; case IDC_SETTINGS_INFORMATION_BAR_FORMAT: if (HIWORD(wParam)==EN_CHANGE) { CMainBoardSettings::InformationBarItemInfo *pItem=GetSelectedItem(); if (pItem!=nullptr) { GetItemString(IDC_SETTINGS_INFORMATION_BAR_FORMAT,&pItem->Format); UpdateItemFormat((int)::SendDlgItemMessage(hDlg,IDC_SETTINGS_INFORMATION_BAR_ITEM_LIST,LB_GETCURSEL,0,0)); UpdateSelectedItem(); } } return TRUE; case IDC_SETTINGS_INFORMATION_BAR_FORMAT_MENU: { HMENU hmenu=::CreatePopupMenu(); InformationBarItems::CCustomInformationItem::ParameterInfo Info; for (int i=0;InformationBarItems::CCustomInformationItem::GetParameterInfo(i,&Info);i++) { WCHAR szText[128]; TSTask::FormatString(szText,_countof(szText),L"%s\t%s", Info.pszParameter,Info.pszText); ::AppendMenu(hmenu,MF_STRING | MF_ENABLED,i+1,szText); } RECT rc; ::GetWindowRect(GetItemHandle(IDC_SETTINGS_INFORMATION_BAR_FORMAT_MENU),&rc); int Result=::TrackPopupMenu(hmenu,TPM_RETURNCMD,rc.left,rc.bottom,0,hDlg,nullptr); ::DestroyMenu(hmenu); if (Result>0 && InformationBarItems::CCustomInformationItem::GetParameterInfo(Result-1,&Info)) { HWND hwndEdit=GetItemHandle(IDC_SETTINGS_INFORMATION_BAR_FORMAT); DWORD Start,End; ::SetFocus(hwndEdit); ::SendMessage(hwndEdit,EM_GETSEL, reinterpret_cast<WPARAM>(&Start),reinterpret_cast<LPARAM>(&End)); ::SendMessage(hwndEdit,EM_REPLACESEL, TRUE,reinterpret_cast<LPARAM>(Info.pszParameter)); if (End<Start) Start=End; ::SendMessage(hwndEdit,EM_SETSEL, Start,Start+::lstrlen(Info.pszParameter)); } } return TRUE; case IDC_SETTINGS_INFORMATION_BAR_TEXT_ALIGN: if (HIWORD(wParam)==CBN_SELCHANGE) { CMainBoardSettings::InformationBarItemInfo *pItem=GetSelectedItem(); if (pItem!=nullptr) { pItem->TextAlign= (int)::SendDlgItemMessage(hDlg,IDC_SETTINGS_INFORMATION_BAR_TEXT_ALIGN,CB_GETCURSEL,0,0); UpdateSelectedItem(); } } return TRUE; case IDC_SETTINGS_INFORMATION_BAR_ITEM_WIDTH: if (HIWORD(wParam)==EN_CHANGE) { CMainBoardSettings::InformationBarItemInfo *pItem=GetSelectedItem(); if (pItem!=nullptr) { pItem->Width=GetItemInt(IDC_SETTINGS_INFORMATION_BAR_ITEM_WIDTH); UpdateSelectedItem(); } } return TRUE; case IDC_SETTINGS_INFORMATION_BAR_CHOOSE_FONT: if (ChooseFontDialog(hDlg,&m_CurrentFont)) { SetFontInfo(hDlg,IDC_SETTINGS_INFORMATION_BAR_FONT_INFO,m_CurrentFont); m_InformationBar.SetFont(m_CurrentFont); ::SendDlgItemMessage(hDlg,IDC_SETTINGS_INFORMATION_BAR_ITEM_LIST, LB_SETITEMHEIGHT,0,m_InformationBar.GetHeight()+m_ItemMargin*2); ::InvalidateRect(GetItemHandle(IDC_SETTINGS_INFORMATION_BAR_ITEM_LIST),nullptr,TRUE); } return TRUE; case IDC_SETTINGS_INFORMATION_BAR_SHOW_ERROR: EnableItems(IDC_SETTINGS_INFORMATION_BAR_ERROR_DURATION_LABEL, IDC_SETTINGS_INFORMATION_BAR_ERROR_DURATION, IsItemChecked(IDC_SETTINGS_INFORMATION_BAR_SHOW_ERROR)); } return TRUE; case WM_DESTROY: { int ItemCount=(int)::SendDlgItemMessage(hDlg,IDC_SETTINGS_INFORMATION_BAR_ITEM_LIST,LB_GETCOUNT,0,0); for (int i=0;i<ItemCount;i++) { delete reinterpret_cast<CMainBoardSettings::InformationBarItemInfo*>( ::SendDlgItemMessage(hDlg,IDC_SETTINGS_INFORMATION_BAR_ITEM_LIST,LB_GETITEMDATA,i,0)); } ::SendDlgItemMessage(hDlg,IDC_SETTINGS_INFORMATION_BAR_ITEM_LIST,LB_RESETCONTENT,0,0); m_InformationBar.DeleteAllItems(); } return TRUE; } return FALSE; }
INT_PTR CPanelOptions::DlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: { DlgCheckBox_Check(hDlg,IDC_PANELOPTIONS_SNAPATMAINWINDOW, m_fSnapAtMainWindow); DlgCheckBox_Check(hDlg,IDC_PANELOPTIONS_ATTACHTOMAINWINDOW, m_fAttachToMainWindow); // Opacity ::SendDlgItemMessage(hDlg,IDC_PANELOPTIONS_OPACITY_TB, TBM_SETRANGE,TRUE,MAKELPARAM(20,100)); ::SendDlgItemMessage(hDlg,IDC_PANELOPTIONS_OPACITY_TB, TBM_SETPOS,TRUE,m_Opacity); ::SendDlgItemMessage(hDlg,IDC_PANELOPTIONS_OPACITY_TB, TBM_SETPAGESIZE,0,10); ::SendDlgItemMessage(hDlg,IDC_PANELOPTIONS_OPACITY_TB, TBM_SETTICFREQ,10,0); ::SetDlgItemInt(hDlg,IDC_PANELOPTIONS_OPACITY_EDIT,m_Opacity,TRUE); ::SendDlgItemMessage(hDlg,IDC_PANELOPTIONS_OPACITY_UD, UDM_SETRANGE,0,MAKELPARAM(100,20)); m_CurSettingFont=m_Font; SetFontInfo(hDlg,IDC_PANELOPTIONS_FONTINFO,&m_Font); DlgCheckBox_Check(hDlg,IDC_PANELOPTIONS_SPECCAPTIONFONT,m_fSpecCaptionFont); EnableDlgItems(hDlg,IDC_PANELOPTIONS_CAPTIONFONT_INFO, IDC_PANELOPTIONS_CAPTIONFONT_CHOOSE, m_fSpecCaptionFont); m_CurSettingCaptionFont=m_CaptionFont; SetFontInfo(hDlg,IDC_PANELOPTIONS_CAPTIONFONT_INFO,&m_CaptionFont); m_ItemListView.Attach(::GetDlgItem(hDlg,IDC_PANELOPTIONS_ITEMLIST)); m_ItemListView.InitCheckList(); PanelItemInfoList ItemList(m_ItemList); for (size_t i=0;i<m_AvailItemList.size();i++) { const TVTest::String &ID=m_AvailItemList[i].ID; if (std::find_if(ItemList.begin(),ItemList.end(), [&](const PanelItemInfo &Item) -> bool { return CompareID(Item.ID,ID); })==ItemList.end()) { PanelItemInfo Item; Item.ID=ID; Item.fVisible=m_AvailItemList[i].fVisible; ItemList.push_back(Item); } } int ItemCount=0; for (int i=0;i<(int)ItemList.size();i++) { const PanelItemInfo &Item=ItemList[i]; int ID=GetItemIDFromIDText(Item.ID); if (ID>=0) { m_ItemListView.InsertItem(ItemCount,m_AvailItemList[ID].Title.c_str(),ID); m_ItemListView.CheckItem(ItemCount,Item.fVisible); ItemCount++; } } UpdateItemListControlsState(); DlgComboBox_AddString(hDlg,IDC_PANELOPTIONS_FIRSTTAB,TEXT("最後に表示したタブ")); int Sel=0; if (!m_InitialTab.empty()) { LPTSTR p; long IDNum=std::_tcstol(m_InitialTab.c_str(),&p,10); if (*p==_T('\0')) { if (IDNum>=0 && (size_t)IDNum<m_AvailItemList.size()) Sel=IDNum+1; } } for (size_t i=0;i<m_AvailItemList.size();i++) { DlgComboBox_AddString(hDlg,IDC_PANELOPTIONS_FIRSTTAB,m_AvailItemList[i].Title.c_str()); if (Sel==0 && CompareID(m_AvailItemList[i].ID,m_InitialTab)) Sel=(int)i+1; } DlgComboBox_SetCurSel(hDlg,IDC_PANELOPTIONS_FIRSTTAB,Sel); static const LPCTSTR TabStyleList[] = { TEXT("文字のみ"), TEXT("アイコンのみ"), TEXT("アイコンと文字"), }; for (int i=0;i<lengthof(TabStyleList);i++) DlgComboBox_AddString(hDlg,IDC_PANELOPTIONS_TABSTYLE,TabStyleList[i]); DlgComboBox_SetCurSel(hDlg,IDC_PANELOPTIONS_TABSTYLE,(int)m_TabStyle); DlgCheckBox_Check(hDlg,IDC_PANELOPTIONS_TABTOOLTIP,m_fTabTooltip); } return TRUE; case WM_HSCROLL: if (reinterpret_cast<HWND>(lParam)== ::GetDlgItem(hDlg,IDC_PANELOPTIONS_OPACITY_TB)) { SyncEditWithTrackBar(hDlg,IDC_PANELOPTIONS_OPACITY_TB, IDC_PANELOPTIONS_OPACITY_EDIT); } return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_PANELOPTIONS_OPACITY_EDIT: if (HIWORD(wParam)==EN_CHANGE) SyncTrackBarWithEdit(hDlg,IDC_PANELOPTIONS_OPACITY_EDIT, IDC_PANELOPTIONS_OPACITY_TB); return TRUE; case IDC_PANELOPTIONS_ITEMLIST_UP: case IDC_PANELOPTIONS_ITEMLIST_DOWN: { int From=m_ItemListView.GetSelectedItem(),To; if (LOWORD(wParam)==IDC_PANELOPTIONS_ITEMLIST_UP) To=From-1; else To=From+1; if (To<0 || To>=m_ItemListView.GetItemCount()) return TRUE; m_ItemListView.MoveItem(From,To); UpdateItemListControlsState(); } return TRUE; case IDC_PANELOPTIONS_CHOOSEFONT: if (ChooseFontDialog(hDlg,&m_CurSettingFont)) SetFontInfo(hDlg,IDC_PANELOPTIONS_FONTINFO,&m_CurSettingFont); return TRUE; case IDC_PANELOPTIONS_SPECCAPTIONFONT: EnableDlgItemsSyncCheckBox(hDlg,IDC_PANELOPTIONS_CAPTIONFONT_INFO, IDC_PANELOPTIONS_CAPTIONFONT_CHOOSE, IDC_PANELOPTIONS_SPECCAPTIONFONT); return TRUE; case IDC_PANELOPTIONS_CAPTIONFONT_CHOOSE: if (ChooseFontDialog(hDlg,&m_CurSettingCaptionFont)) SetFontInfo(hDlg,IDC_PANELOPTIONS_CAPTIONFONT_INFO,&m_CurSettingCaptionFont); return TRUE; } return TRUE; case WM_NOTIFY: switch (((LPNMHDR)lParam)->code) { case PSN_APPLY: { CMainPanel &Panel=GetAppClass().Panel; m_fSnapAtMainWindow= DlgCheckBox_IsChecked(hDlg,IDC_PANELOPTIONS_SNAPATMAINWINDOW); m_fAttachToMainWindow= DlgCheckBox_IsChecked(hDlg,IDC_PANELOPTIONS_ATTACHTOMAINWINDOW); m_Opacity=::GetDlgItemInt(hDlg,IDC_PANELOPTIONS_OPACITY_EDIT,NULL,TRUE); Panel.Frame.SetPanelOpacity(m_Opacity*255/100); bool fFontChanged=!CompareLogFont(&m_Font,&m_CurSettingFont); if (fFontChanged) { m_Font=m_CurSettingFont; Panel.Form.SetTabFont(&m_Font); Panel.Form.SetPageFont(&m_Font); } bool fChangeCaptionFont=false; bool fSpecCaptionFont=DlgCheckBox_IsChecked(hDlg,IDC_PANELOPTIONS_SPECCAPTIONFONT); if (m_fSpecCaptionFont!=fSpecCaptionFont) { m_fSpecCaptionFont=fSpecCaptionFont; fChangeCaptionFont=true; } if (!CompareLogFont(&m_CaptionFont,&m_CurSettingCaptionFont)) { m_CaptionFont=m_CurSettingCaptionFont; if (m_fSpecCaptionFont) fChangeCaptionFont=true; } else if (m_fSpecCaptionFont && fFontChanged) { fChangeCaptionFont=true; } if (fChangeCaptionFont) { CPanelForm::CPage *pCaptionPanel=Panel.Form.GetPageByID(PANEL_ID_CAPTION); if (pCaptionPanel!=NULL) pCaptionPanel->SetFont(m_fSpecCaptionFont? &m_CaptionFont:&m_Font); } const int ItemCount=m_ItemListView.GetItemCount(); m_ItemList.clear(); m_ItemList.resize(ItemCount); for (int i=0;i<ItemCount;i++) { const PanelItemInfo &ItemInfo=m_AvailItemList[m_ItemListView.GetItemParam(i)]; m_ItemList[i].ID=ItemInfo.ID; m_ItemList[i].fVisible=m_ItemListView.IsItemChecked(i); } ApplyItemList(&Panel.Form); int InitialTab=(int)DlgComboBox_GetCurSel(hDlg,IDC_PANELOPTIONS_FIRSTTAB); if (InitialTab==0) { m_InitialTab.clear(); } else if (InitialTab>0) { m_InitialTab=m_AvailItemList[InitialTab-1].ID; } int TabStyleSel=(int)DlgComboBox_GetCurSel(hDlg,IDC_PANELOPTIONS_TABSTYLE); if (TabStyleSel>=0) { m_TabStyle=static_cast<CPanelForm::TabStyle>(TabStyleSel); Panel.Form.SetTabStyle(m_TabStyle); } m_fTabTooltip= DlgCheckBox_IsChecked(hDlg,IDC_PANELOPTIONS_TABTOOLTIP); Panel.Form.EnableTooltip(m_fTabTooltip); m_fChanged=true; } break; case LVN_ITEMCHANGED: UpdateItemListControlsState(); return TRUE; } break; case WM_DESTROY: m_ItemListView.Detach(); return TRUE; } return FALSE; }