/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_shell.hxx" #ifdef _MSC_VER #pragma warning (disable : 4786 4503) #endif //------------------------------------ // include //------------------------------------ #include "listviewbuilder.hxx" #include "document_statistic.hxx" #include "internal/utilities.hxx" #include "internal/config.hxx" #if defined _MSC_VER #pragma warning(push, 1) #endif #include #if defined _MSC_VER #pragma warning(pop) #endif #include #include #include "internal/resource.h" //------------------------------------ // //------------------------------------ list_view_builder_ptr create_list_view_builder( HWND hwnd_lv, const std::wstring& col1, const std::wstring& col2) { if (is_windows_xp_or_above()) return list_view_builder_ptr(new winxp_list_view_builder(hwnd_lv, col1, col2)); else return list_view_builder_ptr(new list_view_builder(hwnd_lv, col1, col2)); } //------------------------------------ // //------------------------------------ list_view_builder::list_view_builder( HWND hwnd_list_view, const std::wstring& column1_title, const std::wstring& column2_title) : hwnd_list_view_(hwnd_list_view), row_index_(-1), column1_title_(column1_title), column2_title_(column2_title) { } //------------------------------------ // //------------------------------------ list_view_builder::~list_view_builder() { } //------------------------------------ // //------------------------------------ void list_view_builder::build(statistic_group_list_t& gl) { setup_list_view(); statistic_group_list_t::iterator group_iter = gl.begin(); statistic_group_list_t::iterator group_iter_end = gl.end(); for (/**/; group_iter != group_iter_end; ++group_iter) { statistic_item_list_t::iterator item_iter = group_iter->second.begin(); statistic_item_list_t::iterator item_iter_end = group_iter->second.end(); if (item_iter != item_iter_end) insert_group(group_iter->first); for (/**/; item_iter != item_iter_end; ++item_iter) insert_item(item_iter->title_, item_iter->value_, item_iter->editable_); } } //------------------------------------ // //------------------------------------ void list_view_builder::setup_list_view() { HIMAGELIST h_ils = ImageList_Create(16,15,ILC_MASK, 7, 0); HBITMAP h_bmp = LoadBitmap(GetModuleHandle(MODULE_NAME), MAKEINTRESOURCE(IDB_PROPERTY_IMAGES)); ImageList_AddMasked(h_ils, h_bmp, RGB(255, 0, 255)); ListView_SetImageList(hwnd_list_view_, h_ils, LVSIL_SMALL); std::wstring header = GetResString(IDS_PROPERTY); LVCOLUMN lvc; lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; lvc.iSubItem = 0; lvc.pszText = const_cast(header.c_str()); lvc.cx = 120; lvc.fmt = LVCFMT_LEFT; ListView_InsertColumn(hwnd_list_view_, 0, &lvc); lvc.iSubItem = 1; header = GetResString(IDS_PROPERTY_VALUE); lvc.pszText = const_cast(header.c_str()); ListView_InsertColumn(hwnd_list_view_, 1, &lvc); } //------------------------------------ // //------------------------------------ void list_view_builder::insert_group(const std::wstring& /*title*/) { insert_item(L"", L"", false); } //------------------------------------ // //------------------------------------ void list_view_builder::insert_item(const std::wstring& title, const std::wstring& value, bool is_editable) { LVITEM lvi; lvi.iItem = ++row_index_; lvi.iSubItem = 0; lvi.mask = LVIF_TEXT; lvi.state = 0; lvi.cchTextMax = title.size() + 1; lvi.stateMask = 0; lvi.pszText = const_cast(title.c_str()); if (title.length() > 0) { lvi.mask |= LVIF_IMAGE; if (is_editable) lvi.iImage = 4; else lvi.iImage = 3; } ListView_InsertItem(hwnd_list_view_, &lvi); lvi.mask = LVIF_TEXT; lvi.iSubItem = 1; lvi.pszText = const_cast(value.c_str()); ListView_SetItem(hwnd_list_view_, &lvi); } //------------------------------------ // //------------------------------------ HWND list_view_builder::get_list_view() const { return hwnd_list_view_; } //------------------------------------ // //------------------------------------ winxp_list_view_builder::winxp_list_view_builder( HWND hwnd_list_view, const std::wstring& column1_title, const std::wstring& column2_title) : list_view_builder(hwnd_list_view, column1_title, column2_title), group_count_(-1), row_count_(0) { } //------------------------------------ // //------------------------------------ void winxp_list_view_builder::setup_list_view() { list_view_builder::setup_list_view(); ListView_EnableGroupView(get_list_view(), TRUE); } //------------------------------------ // //------------------------------------ void winxp_list_view_builder::insert_group(const std::wstring& name) { LVGROUP lvg; ZeroMemory(&lvg, sizeof(lvg)); lvg.cbSize = sizeof(lvg); lvg.mask = LVGF_HEADER | LVGF_STATE | LVGF_GROUPID; lvg.pszHeader = const_cast(name.c_str()); lvg.cchHeader = name.size() + 1; lvg.iGroupId = ++group_count_; lvg.state = LVGS_NORMAL; lvg.uAlign = LVGA_HEADER_CENTER; ListView_InsertGroup(get_list_view(), row_count_++, &lvg); } //------------------------------------ // //------------------------------------ void winxp_list_view_builder::insert_item( const std::wstring& title, const std::wstring& value, bool is_editable) { LVITEM lvi; lvi.iItem = ++row_index_; lvi.iSubItem = 0; lvi.mask = LVIF_TEXT | LVIF_GROUPID; lvi.state = 0; lvi.stateMask = 0; lvi.pszText = const_cast(title.c_str()); lvi.iGroupId = group_count_; if (title.length() > 0) { lvi.mask |= LVIF_IMAGE; if (is_editable) lvi.iImage = 4; else lvi.iImage = 3; } ListView_InsertItem(get_list_view(), &lvi); lvi.mask = LVIF_TEXT; lvi.iSubItem = 1; lvi.pszText = const_cast(value.c_str()); ListView_SetItem(get_list_view(), &lvi); row_count_++; }