Changeset 377


Ignore:
Timestamp:
01/26/08 12:48:33 (12 years ago)
Author:
Eoin
Message:

Column hiding implemented.

Location:
trunk/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/HaliteSortListViewCtrl.hpp

    r372 r377  
    1919#include "../res/resource.h" 
    2020#include "halTorrent.hpp" 
     21#include "halEvent.hpp" 
    2122#include "WinAPIWaitableTimer.hpp" 
    2223 
     
    265266        { 
    266267        public: 
     268                enum { COL_MENU_NAMES = 123, COL_MAX_NAMES = 256}; 
     269 
     270                CHaliteHeaderCtrl(thisClass& listView) : 
     271                        listView_(listView) 
     272                {} 
     273 
    267274                BEGIN_MSG_MAP(CHaliteHeaderCtrl) 
    268275                        REFLECTED_NOTIFY_CODE_HANDLER(NM_RCLICK, OnRClick) 
     276                        COMMAND_RANGE_HANDLER(COL_MENU_NAMES, COL_MENU_NAMES+COL_MAX_NAMES, OnMenuNames) 
     277 
     278                        DEFAULT_REFLECTION_HANDLER() 
    269279                END_MSG_MAP() 
    270280                 
     
    273283                        ATLASSERT(::IsWindow(hWndNew)); 
    274284                        CWindowImpl<CHaliteHeaderCtrl, CHeaderCtrl>::SubclassWindow(hWndNew); 
    275  
    276                         menu_.CreatePopupMenu(); 
    277                          
    278                         MENUITEMINFO minfo = {sizeof(MENUITEMINFO)}; 
    279                         minfo.fMask = MIIM_STRING|MIIM_ID|MIIM_FTYPE|MIIM_STATE; 
    280                         minfo.fType = MFT_STRING; 
    281                         minfo.fState = MFS_CHECKED; 
    282                         minfo.dwTypeData = L"Hello"; 
    283                          
    284                         menu_.InsertMenuItem(0, false, &minfo); 
    285285                } 
    286286                 
     
    293293                        return 0; 
    294294                } 
     295 
     296                LRESULT OnMenuNames(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) 
     297                {                
     298                        ATLASSERT(wID-COL_MENU_NAMES <= GetItemCount()); 
     299 
     300                        bool visible = listView_.OnNameChecked(wID-COL_MENU_NAMES); 
     301 
     302                        MENUITEMINFO minfo = {sizeof(MENUITEMINFO)}; 
     303                 
     304                        minfo.fMask = MIIM_STATE; 
     305                        minfo.fState = visible ? MFS_CHECKED : MFS_UNCHECKED; 
     306                 
     307                        menu_.SetMenuItemInfo(wID, false, &minfo); 
     308 
     309                        return 0; 
     310                } 
     311 
     312                WTL::CMenu& Menu() 
     313                { 
     314                        return menu_; 
     315                } 
    295316                 
    296317        private: 
    297318                WTL::CMenu menu_; 
     319                thisClass& listView_; 
    298320        }; 
    299321         
     
    310332        thisClass(bool resMenu=true, bool resNames=true, bool resWidthsAndOrder=true) : 
    311333                manager_(*this), 
     334                header_(*this), 
    312335                updateLock_(0), 
    313336                autoSort_(false), 
     
    350373                COMMAND_ID_HANDLER(ID_LVM_AUTOSORT, OnAutoSort) 
    351374                 
    352         //      REFLECTED_NOTIFY_CODE_HANDLER(NM_CLICK, OnClick) 
    353375                REFLECTED_NOTIFY_CODE_HANDLER(NM_RCLICK, OnRClick) 
    354376                REFLECTED_NOTIFY_CODE_HANDLER(LVN_ITEMCHANGED, OnItemChanged) 
    355         //      REFLECTED_NOTIFY_CODE_HANDLER(LVN_COLUMNCLICK , OnColClick) 
    356377 
    357378                DEFAULT_REFLECTION_HANDLER() 
     
    466487                header_.Attach(this->GetHeader()); 
    467488                header_.ModifyStyle(0, HDS_DRAGDROP|HDS_FULLDRAG); 
    468                  
    469                 for (int i = header_.GetItemCount(); i<int(listNames_.size()); i = header_.GetItemCount()) 
    470                 { 
    471                         //if (listVisible_[i]) 
    472                         { 
    473                                 AddColumn(listNames_[i].c_str(), i); 
     489 
     490                header_.Menu().CreatePopupMenu(); 
     491 
     492                for (int i=header_.GetItemCount(), e=int(listNames_.size()); i<e; ++i) 
     493                { 
     494                        MENUITEMINFO minfo = {sizeof(MENUITEMINFO)}; 
     495                        minfo.fMask = MIIM_STRING|MIIM_ID|MIIM_FTYPE|MIIM_STATE; 
     496                        minfo.fType = MFT_STRING; 
     497                        minfo.dwTypeData = (LPWSTR)listNames_[i].c_str(); 
     498                        minfo.wID = CHaliteHeaderCtrl::COL_MENU_NAMES+i; 
     499 
     500                        AddColumn(listNames_[i].c_str(), i); 
     501 
     502                        if (listVisible_[i]) 
     503                        { 
     504                                minfo.fState = MFS_CHECKED;                      
    474505                                SetColumnWidth(i, listWidths_[i]); 
    475506                        } 
     507                        else 
     508                        { 
     509                                minfo.fState = MFS_UNCHECKED; 
     510                                SetColumnWidth(i, 0); 
     511                        } 
     512 
     513                        header_.Menu().InsertMenuItem(header_.Menu().GetMenuItemCount(), false, &minfo); 
    476514                } 
    477515                 
     
    489527                for (size_t i=0; i<listNames_.size(); ++i) 
    490528                { 
    491                         listWidths_[i] = GetColumnWidth(i); 
     529                        if (listVisible_[i]) 
     530                                listWidths_[i] = GetColumnWidth(i); 
    492531                } 
    493532                 
     
    510549                 
    511550                return 0; 
     551        } 
     552 
     553        bool OnNameChecked(int i) 
     554        { 
     555                if (!listVisible_[i]) 
     556                {                
     557                        GetColumnOrderArray(listNames_.size(), &listOrder_[0]); 
     558                        SetColumnWidth(i, listWidths_[i]); 
     559 
     560                        listOrder_.erase(std::find(listOrder_.begin(), listOrder_.end(), i)); 
     561                         
     562                        int index = i + std::count(listVisible_.begin()+i, listVisible_.end(), false) - 1; 
     563                        listOrder_.insert(listOrder_.begin()+index, i); 
     564 
     565                        SetColumnOrderArray(listNames_.size(), &listOrder_[0]); 
     566                        listVisible_[i] = true; 
     567                } 
     568                else 
     569                { 
     570                        listWidths_[i] = GetColumnWidth(i);      
     571                        GetColumnOrderArray(listNames_.size(), &listOrder_[0]); 
     572 
     573                        SetColumnWidth(i, 0); 
     574 
     575                        listOrder_.erase(std::find(listOrder_.begin(), listOrder_.end(), i)); 
     576                        listOrder_.insert(listOrder_.begin(), i); 
     577 
     578                        SetColumnOrderArray(listNames_.size(), &listOrder_[0]); 
     579                        listVisible_[i] = false; 
     580                } 
     581         
     582                InvalidateRect(NULL, true); 
     583                return listVisible_[i]; 
    512584        } 
    513585 
  • trunk/src/HaliteWindow.hpp

    r376 r377  
    7070                MSG_WM_DESTROY(OnDestroy) 
    7171                MSG_WM_SIZE(OnSize) 
     72                MSG_WM_SHOWWINDOW(OnShowWindow) 
    7273                MSG_WM_MOVE(OnMove) 
    7374                MSG_WM_SHOWWINDOW(OnShowWindow) 
Note: See TracChangeset for help on using the changeset viewer.