/
makani
/
strongdc
Обзор
Документация
Войти
/
makani
/
strongdc
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
windows/RecentsFrm.cpp
234 строки
8 KB
bigmuscle
updated core
24 июл 2011, 22:28
24 июл 2011, 22:28
172ec44
Код
Авторство
О чём код?
/* * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "stdafx.h" #include "../client/DCPlusPlus.h" #include "Resource.h" #include "RecentsFrm.h" #include "HubFrame.h" #include "LineDlg.h" #include "../client/ClientManager.h" int RecentHubsFrame::columnIndexes[] = { COLUMN_NAME, COLUMN_DESCRIPTION, COLUMN_USERS, COLUMN_SHARED, COLUMN_SERVER }; int RecentHubsFrame::columnSizes[] = { 200, 290, 50, 50, 100 }; static ResourceManager::Strings columnNames[] = { ResourceManager::HUB_NAME, ResourceManager::DESCRIPTION, ResourceManager::USERS, ResourceManager::SHARED, ResourceManager::HUB_ADDRESS }; LRESULT RecentHubsFrame::onCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled) { ctrlHubs.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_HSCROLL | WS_VSCROLL | LVS_REPORT | LVS_SHOWSELALWAYS, WS_EX_CLIENTEDGE, IDC_RECENTS); ctrlHubs.SetExtendedListViewStyle(LVS_EX_LABELTIP | LVS_EX_HEADERDRAGDROP | LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER | LVS_EX_INFOTIP); ctrlHubs.SetBkColor(WinUtil::bgColor); ctrlHubs.SetTextBkColor(WinUtil::bgColor); ctrlHubs.SetTextColor(WinUtil::textColor); // Create listview columns WinUtil::splitTokens(columnIndexes, SETTING(RECENTFRAME_ORDER), COLUMN_LAST); WinUtil::splitTokens(columnSizes, SETTING(RECENTFRAME_WIDTHS), COLUMN_LAST); for(int j=0; j<COLUMN_LAST; j++) { int fmt = LVCFMT_LEFT; ctrlHubs.InsertColumn(j, CTSTRING_I(columnNames[j]), fmt, columnSizes[j], j); } ctrlHubs.SetColumnOrderArray(COLUMN_LAST, columnIndexes); ctrlConnect.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | BS_PUSHBUTTON , 0, IDC_CONNECT); ctrlConnect.SetWindowText(CTSTRING(CONNECT)); ctrlConnect.SetFont(WinUtil::font); ctrlRemove.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | BS_PUSHBUTTON , 0, IDC_REMOVE); ctrlRemove.SetWindowText(CTSTRING(REMOVE)); ctrlRemove.SetFont(WinUtil::font); ctrlRemoveAll.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | BS_PUSHBUTTON , 0, IDC_REMOVE_ALL); ctrlRemoveAll.SetWindowText(CTSTRING(REMOVE_ALL)); ctrlRemoveAll.SetFont(WinUtil::font); FavoriteManager::getInstance()->addListener(this); SettingsManager::getInstance()->addListener(this); updateList(FavoriteManager::getInstance()->getRecentHubs()); hubsMenu.CreatePopupMenu(); hubsMenu.AppendMenu(MF_STRING, IDC_CONNECT, CTSTRING(CONNECT)); hubsMenu.AppendMenu(MF_STRING, IDC_ADD, CTSTRING(ADD_TO_FAVORITES)); hubsMenu.AppendMenu(MF_STRING, IDC_EDIT, CTSTRING(PROPERTIES)); hubsMenu.AppendMenu(MF_STRING, IDC_REMOVE, CTSTRING(REMOVE)); hubsMenu.AppendMenu(MF_STRING, IDC_REMOVE_ALL, CTSTRING(REMOVE_ALL)); hubsMenu.SetMenuDefaultItem(IDC_CONNECT); bHandled = FALSE; return TRUE; } LRESULT RecentHubsFrame::onDoubleClickHublist(int /*idCtrl*/, LPNMHDR pnmh, BOOL& /*bHandled*/) { NMITEMACTIVATE* item = (NMITEMACTIVATE*) pnmh; if(item->iItem != -1) { RecentHubEntry* entry = (RecentHubEntry*)ctrlHubs.GetItemData(item->iItem); HubFrame::openWindow(Text::toT(entry->getServer())); } return 0; } LRESULT RecentHubsFrame::onEnter(int /*idCtrl*/, LPNMHDR /* pnmh */, BOOL& /*bHandled*/) { int item = ctrlHubs.GetNextItem(-1, LVNI_FOCUSED); if(item != -1) { RecentHubEntry* entry = (RecentHubEntry*)ctrlHubs.GetItemData(item); HubFrame::openWindow(Text::toT(entry->getServer())); } return 0; } LRESULT RecentHubsFrame::onClickedConnect(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { int i = -1; while( (i = ctrlHubs.GetNextItem(i, LVNI_SELECTED)) != -1) { RecentHubEntry* entry = (RecentHubEntry*)ctrlHubs.GetItemData(i); HubFrame::openWindow(Text::toT(entry->getServer())); } return 0; } LRESULT RecentHubsFrame::onAdd(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { TCHAR buf[256]; if(ctrlHubs.GetSelectedCount() == 1) { int i = ctrlHubs.GetNextItem(-1, LVNI_SELECTED); FavoriteHubEntry e; ctrlHubs.GetItemText(i, COLUMN_NAME, buf, 256); e.setName(Text::fromT(buf)); ctrlHubs.GetItemText(i, COLUMN_DESCRIPTION, buf, 256); e.setDescription(Text::fromT(buf)); ctrlHubs.GetItemText(i, COLUMN_SERVER, buf, 256); e.setServer(Text::fromT(buf)); FavoriteManager::getInstance()->addFavorite(e); } return 0; } LRESULT RecentHubsFrame::onRemove(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { int i = -1; while( (i = ctrlHubs.GetNextItem(-1, LVNI_SELECTED)) != -1) { FavoriteManager::getInstance()->removeRecent((RecentHubEntry*)ctrlHubs.GetItemData(i)); } return 0; } LRESULT RecentHubsFrame::onRemoveAll(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { ctrlHubs.DeleteAllItems(); FavoriteManager::getInstance()->removeallRecent(); return 0; } LRESULT RecentHubsFrame::onClose(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled) { if(!closed) { FavoriteManager::getInstance()->removeListener(this); SettingsManager::getInstance()->removeListener(this); closed = true; WinUtil::setButtonPressed(IDC_RECENTS, false); PostMessage(WM_CLOSE); return 0; } else { WinUtil::saveHeaderOrder(ctrlHubs, SettingsManager::RECENTFRAME_ORDER, SettingsManager::RECENTFRAME_WIDTHS, COLUMN_LAST, columnIndexes, columnSizes); bHandled = FALSE; return 0; } } void RecentHubsFrame::UpdateLayout(BOOL bResizeBars /* = TRUE */) { RECT rect; GetClientRect(&rect); // position bars and offset their dimensions UpdateBarsPosition(rect, bResizeBars); CRect rc = rect; rc.bottom -=28; ctrlHubs.MoveWindow(rc); const long bwidth = 90; const long bspace = 10; rc = rect; rc.bottom -= 2; rc.top = rc.bottom - 22; rc.left = 2; rc.right = rc.left + bwidth; ctrlConnect.MoveWindow(rc); rc.OffsetRect(bspace + bwidth +2, 0); ctrlRemove.MoveWindow(rc); rc.OffsetRect(bwidth+2, 0); ctrlRemoveAll.MoveWindow(rc); } LRESULT RecentHubsFrame::onEdit(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { int i = -1; if((i = ctrlHubs.GetNextItem(i, LVNI_SELECTED)) != -1) { RecentHubEntry* r = (RecentHubEntry*)ctrlHubs.GetItemData(i); dcassert(r != NULL); LineDlg dlg; dlg.description = TSTRING(DESCRIPTION); dlg.title = Text::toT(r->getName()); dlg.line = Text::toT(r->getDescription()); if(dlg.DoModal(m_hWnd) == IDOK) { r->setDescription(Text::fromT(dlg.line)); ctrlHubs.SetItemText(i, COLUMN_DESCRIPTION, Text::toT(r->getDescription()).c_str()); FavoriteManager::getInstance()->recentsave(); } } return 0; } void RecentHubsFrame::on(SettingsManagerListener::Save, SimpleXML& /*xml*/) noexcept { bool refresh = false; if(ctrlHubs.GetBkColor() != WinUtil::bgColor) { ctrlHubs.SetBkColor(WinUtil::bgColor); ctrlHubs.SetTextBkColor(WinUtil::bgColor); refresh = true; } if(ctrlHubs.GetTextColor() != WinUtil::textColor) { ctrlHubs.SetTextColor(WinUtil::textColor); refresh = true; } if(refresh == true) { RedrawWindow(NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_UPDATENOW | RDW_ALLCHILDREN); } } LRESULT RecentHubsFrame::onItemchangedDirectories(int /*idCtrl*/, LPNMHDR pnmh, BOOL& /*bHandled*/) { NM_LISTVIEW* lv = (NM_LISTVIEW*) pnmh; ::EnableWindow(GetDlgItem(IDC_CONNECT), (lv->uNewState & LVIS_FOCUSED)); ::EnableWindow(GetDlgItem(IDC_REMOVE), (lv->uNewState & LVIS_FOCUSED)); return 0; }