Showing preview only (2,789K chars total). Download the full file or copy to clipboard to get everything.
Repository: alamaison/swish
Branch: develop
Commit: 2a2140d9b521
Files: 460
Total size: 2.6 MB
Directory structure:
gitextract_02n81_nz/
├── .clang-format
├── .gitattributes
├── .tx/
│ └── config
├── CMakeLists.txt
├── COPYING.rtf
├── LICENSE.txt
├── NEWS
├── README.md
├── appcast.xml.in
├── build/
│ ├── making_a_release.txt
│ └── news_html.py
├── cmake/
│ ├── GetGitRevisionDescription.cmake
│ ├── GetGitRevisionDescription.cmake.in
│ ├── Hunter/
│ │ └── config.cmake
│ └── HunterGate.cmake
├── cpack_wix_patch.xml
├── ezel/
│ ├── CMakeLists.txt
│ ├── control.hpp
│ ├── control_parent_impl.hpp
│ ├── controls/
│ │ ├── button.hpp
│ │ ├── checkbox.hpp
│ │ ├── edit.hpp
│ │ ├── icon.hpp
│ │ ├── label.hpp
│ │ ├── line.hpp
│ │ └── spinner.hpp
│ ├── detail/
│ │ ├── command_dispatch.hpp
│ │ ├── dialog_template.hpp
│ │ ├── hooks.hpp
│ │ ├── hwnd_linking.hpp
│ │ ├── message_dispatch.hpp
│ │ ├── window_impl.hpp
│ │ ├── window_link.hpp
│ │ ├── window_proc.hpp
│ │ └── window_proxy.hpp
│ ├── form.hpp
│ └── window.hpp
├── guids.txt
├── po/
│ ├── CMakeLists.txt
│ ├── bg/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── ca/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── compile_mo.sh
│ ├── cs/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── cy/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── da_DK/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── de/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── el_GR/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── es/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── et/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── fi/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── fr/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── he/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── hi/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── hu/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── it/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── ja/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── ko/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── lv/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── nl/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── pl/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── pt/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── pt_BR/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── ro/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── ru/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── sk/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── sv/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── template/
│ │ └── swish.pot
│ ├── tr/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── zh_CN/
│ │ ├── swish.mo
│ │ └── swish.po
│ └── zh_TW/
│ ├── swish.mo
│ └── swish.po
├── setup_conf.xml.in
├── ssh/
│ ├── .clang-format
│ ├── CMakeLists.txt
│ ├── agent.hpp
│ ├── detail/
│ │ ├── agent_state.hpp
│ │ ├── file_handle_state.hpp
│ │ ├── libssh2/
│ │ │ ├── agent.hpp
│ │ │ ├── knownhost.hpp
│ │ │ ├── libssh2.hpp
│ │ │ ├── session.hpp
│ │ │ ├── sftp.hpp
│ │ │ └── userauth.hpp
│ │ ├── session_state.hpp
│ │ └── sftp_channel_state.hpp
│ ├── filesystem/
│ │ └── path.hpp
│ ├── filesystem.hpp
│ ├── host_key.hpp
│ ├── knownhost.hpp
│ ├── session.hpp
│ ├── sftp_error.hpp
│ ├── ssh_error.hpp
│ └── stream.hpp
├── swish/
│ ├── CMakeLists.txt
│ ├── CoFactory.hpp
│ ├── atl.hpp
│ ├── connection/
│ │ ├── CMakeLists.txt
│ │ ├── authenticated_session.cpp
│ │ ├── authenticated_session.hpp
│ │ ├── connection.vcproj
│ │ ├── connection_spec.cpp
│ │ ├── connection_spec.hpp
│ │ ├── interruptable_session.hpp
│ │ ├── running_session.cpp
│ │ ├── running_session.hpp
│ │ ├── session_manager.cpp
│ │ ├── session_manager.hpp
│ │ ├── session_pool.cpp
│ │ └── session_pool.hpp
│ ├── debug.hpp
│ ├── drop_target/
│ │ ├── CMakeLists.txt
│ │ ├── CopyFileOperation.cpp
│ │ ├── CopyFileOperation.hpp
│ │ ├── CreateDirectoryOperation.cpp
│ │ ├── CreateDirectoryOperation.hpp
│ │ ├── DropActionCallback.hpp
│ │ ├── DropTarget.cpp
│ │ ├── DropTarget.hpp
│ │ ├── DropUI.cpp
│ │ ├── DropUI.hpp
│ │ ├── Operation.hpp
│ │ ├── PidlCopyPlan.cpp
│ │ ├── PidlCopyPlan.hpp
│ │ ├── Plan.hpp
│ │ ├── Progress.hpp
│ │ ├── RootedSource.hpp
│ │ ├── SequentialPlan.cpp
│ │ ├── SequentialPlan.hpp
│ │ └── SftpDestination.hpp
│ ├── forms/
│ │ ├── CMakeLists.txt
│ │ ├── add_host.cpp
│ │ ├── add_host.hpp
│ │ ├── password.cpp
│ │ └── password.hpp
│ ├── frontend/
│ │ ├── CMakeLists.txt
│ │ ├── UserInteraction.cpp
│ │ ├── UserInteraction.hpp
│ │ ├── announce_error.cpp
│ │ ├── announce_error.hpp
│ │ ├── bind_best_taskdialog.cpp
│ │ ├── bind_best_taskdialog.hpp
│ │ ├── commands/
│ │ │ ├── About.cpp
│ │ │ └── About.hpp
│ │ ├── winsparkle_shower.cpp
│ │ └── winsparkle_shower.hpp
│ ├── host_folder/
│ │ ├── CMakeLists.txt
│ │ ├── ViewCallback.cpp
│ │ ├── ViewCallback.hpp
│ │ ├── columns.cpp
│ │ ├── columns.hpp
│ │ ├── commands/
│ │ │ ├── Add.cpp
│ │ │ ├── Add.hpp
│ │ │ ├── CloseSession.cpp
│ │ │ ├── CloseSession.hpp
│ │ │ ├── LaunchAgent.cpp
│ │ │ ├── LaunchAgent.hpp
│ │ │ ├── Remove.cpp
│ │ │ ├── Remove.hpp
│ │ │ ├── Rename.cpp
│ │ │ ├── Rename.hpp
│ │ │ ├── commands.cpp
│ │ │ └── commands.hpp
│ │ ├── context_menu_callback.cpp
│ │ ├── context_menu_callback.hpp
│ │ ├── extract_icon.hpp
│ │ ├── host_itemid_connection.cpp
│ │ ├── host_itemid_connection.hpp
│ │ ├── host_management.cpp
│ │ ├── host_management.hpp
│ │ ├── host_pidl.hpp
│ │ ├── menu_command_manager.cpp
│ │ ├── menu_command_manager.hpp
│ │ ├── overlay_icon.hpp
│ │ ├── properties.cpp
│ │ └── properties.hpp
│ ├── nse/
│ │ ├── CMakeLists.txt
│ │ ├── Command.cpp
│ │ ├── Command.hpp
│ │ ├── StaticColumn.hpp
│ │ ├── UICommand.cpp
│ │ ├── UICommand.hpp
│ │ ├── command_site.cpp
│ │ ├── command_site.hpp
│ │ ├── data_object_util.cpp
│ │ ├── data_object_util.hpp
│ │ ├── default_context_menu_callback.cpp
│ │ ├── default_context_menu_callback.hpp
│ │ ├── detail/
│ │ │ └── command_state_conversion.hpp
│ │ ├── explorer_command.cpp
│ │ ├── explorer_command.hpp
│ │ ├── task_pane.hpp
│ │ ├── view_callback.cpp
│ │ └── view_callback.hpp
│ ├── port_conversion.hpp
│ ├── provider/
│ │ ├── CMakeLists.txt
│ │ ├── Provider.cpp
│ │ ├── Provider.hpp
│ │ ├── libssh2_sftp_filesystem_item.cpp
│ │ ├── libssh2_sftp_filesystem_item.hpp
│ │ ├── sftp_filesystem_item.hpp
│ │ ├── sftp_provider.hpp
│ │ └── ticketed_stream.hpp
│ ├── remote_folder/
│ │ ├── CMakeLists.txt
│ │ ├── Mode.cpp
│ │ ├── Mode.h
│ │ ├── ViewCallback.cpp
│ │ ├── ViewCallback.hpp
│ │ ├── columns.cpp
│ │ ├── columns.hpp
│ │ ├── commands/
│ │ │ ├── NewFolder.cpp
│ │ │ ├── NewFolder.hpp
│ │ │ ├── commands.cpp
│ │ │ ├── commands.hpp
│ │ │ ├── delete.cpp
│ │ │ └── delete.hpp
│ │ ├── context_menu_callback.cpp
│ │ ├── context_menu_callback.hpp
│ │ ├── filemode.c
│ │ ├── filemode.h
│ │ ├── pidl_connection.cpp
│ │ ├── pidl_connection.hpp
│ │ ├── properties.cpp
│ │ ├── properties.hpp
│ │ ├── remote_pidl.hpp
│ │ └── swish_pidl.hpp
│ ├── remotelimits.h
│ ├── shell/
│ │ ├── CMakeLists.txt
│ │ ├── parent_and_item.hpp
│ │ ├── shell.cpp
│ │ ├── shell.hpp
│ │ ├── shell_item.hpp
│ │ └── shell_item_array.hpp
│ ├── shell_folder/
│ │ ├── CMakeLists.txt
│ │ ├── DataObject.cpp
│ │ ├── DataObject.h
│ │ ├── Folder.h
│ │ ├── HostFolder.cpp
│ │ ├── HostFolder.h
│ │ ├── IconExtractor.cpp
│ │ ├── IconExtractor.h
│ │ ├── KbdInteractiveDialog.cpp
│ │ ├── KbdInteractiveDialog.h
│ │ ├── Pidl.h
│ │ ├── Registry.cpp
│ │ ├── Registry.h
│ │ ├── RemoteFolder.cpp
│ │ ├── RemoteFolder.h
│ │ ├── SftpDataObject.cpp
│ │ ├── SftpDataObject.h
│ │ ├── SftpDirectory.cpp
│ │ ├── SftpDirectory.h
│ │ ├── SnitchingDataObject.hpp
│ │ ├── Swish.idl
│ │ ├── SwishFolder.hpp
│ │ ├── com_dll/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── HostFolder.rgs
│ │ │ ├── RemoteFolder.rgs
│ │ │ ├── Swish.rgs
│ │ │ ├── SwishCoClasses.cpp
│ │ │ ├── SwishModule.cpp
│ │ │ ├── com_dll.def
│ │ │ ├── com_dll.rc
│ │ │ └── resource.h
│ │ ├── data_object/
│ │ │ ├── FileGroupDescriptor.hpp
│ │ │ ├── GlobalLocker.hpp
│ │ │ ├── ShellDataObject.cpp
│ │ │ ├── ShellDataObject.hpp
│ │ │ └── StorageMedium.hpp
│ │ ├── locale_setup.hpp
│ │ ├── resource.h
│ │ ├── shell_folder.rc
│ │ └── wtl.hpp
│ ├── trace.hpp
│ ├── utils.hpp
│ ├── versions/
│ │ ├── CMakeLists.txt
│ │ ├── git_version.h.in
│ │ ├── metadata.h.in
│ │ ├── version.cpp
│ │ └── version.hpp
│ └── windows_api.hpp
├── test/
│ ├── CMakeLists.txt
│ ├── common_boost/
│ │ ├── CMakeLists.txt
│ │ ├── ConsumerStub.hpp
│ │ ├── MockConsumer.hpp
│ │ ├── MockProvider.hpp
│ │ ├── SwishPidlFixture.hpp
│ │ ├── data_object_utils.cpp
│ │ ├── data_object_utils.hpp
│ │ ├── fixtures.hpp
│ │ ├── helpers.hpp
│ │ ├── stream_utils.cpp
│ │ ├── stream_utils.hpp
│ │ ├── tree.hh
│ │ └── tree.hpp
│ ├── connection/
│ │ ├── CMakeLists.txt
│ │ ├── authenticated_session_test.cpp
│ │ ├── connection_spec_create_session_test.cpp
│ │ ├── connection_spec_test.cpp
│ │ ├── running_session_test.cpp
│ │ ├── session_manager_test.cpp
│ │ └── session_pool_test.cpp
│ ├── drop_target/
│ │ ├── CMakeLists.txt
│ │ ├── drop_target_test.cpp
│ │ └── rooted_source_test.cpp
│ ├── ezel/
│ │ ├── CMakeLists.txt
│ │ └── form_test.cpp
│ ├── fix_key_permissions.sh
│ ├── fixtures/
│ │ ├── CMakeLists.txt
│ │ ├── com_stream_fixture.cpp
│ │ ├── com_stream_fixture.hpp
│ │ ├── fixture_dsakey
│ │ ├── fixture_dsakey.pub
│ │ ├── fixture_hostkey
│ │ ├── fixture_hostkey.pub
│ │ ├── fixture_rsakey
│ │ ├── fixture_rsakey.pub
│ │ ├── fixture_wrong_dsakey
│ │ ├── fixture_wrong_dsakey.pub
│ │ ├── local_sandbox_fixture.cpp
│ │ ├── local_sandbox_fixture.hpp
│ │ ├── openssh_fixture.cpp
│ │ ├── openssh_fixture.hpp
│ │ ├── provider_fixture.cpp
│ │ ├── provider_fixture.hpp
│ │ ├── session_fixture.cpp
│ │ ├── session_fixture.hpp
│ │ ├── sftp_fixture.cpp
│ │ ├── sftp_fixture.hpp
│ │ ├── ssh_server/
│ │ │ ├── Dockerfile
│ │ │ ├── authorized_keys
│ │ │ └── ssh_host_rsa_key
│ │ ├── test_known_hosts
│ │ ├── test_known_hosts_hashed
│ │ └── test_known_hosts_out
│ ├── forms/
│ │ ├── CMakeLists.txt
│ │ ├── add_host_test.cpp
│ │ └── password_test.cpp
│ ├── host_folder/
│ │ ├── CMakeLists.txt
│ │ ├── columns_test.cpp
│ │ ├── host_management_test.cpp
│ │ ├── host_pidl_test.cpp
│ │ ├── properties_test.cpp
│ │ └── view_callback_test.cpp
│ ├── module.cpp.in
│ ├── nse/
│ │ ├── CMakeLists.txt
│ │ ├── default_context_menu_callback_tests.cpp
│ │ └── explorer_command_tests.cpp
│ ├── provider-integration/
│ │ ├── CMakeLists.txt
│ │ ├── auth_test.cpp
│ │ ├── provider_test.cpp
│ │ ├── stream_create_test.cpp
│ │ ├── stream_read_test.cpp
│ │ ├── stream_test.cpp
│ │ └── stream_write_test.cpp
│ ├── remote_folder/
│ │ ├── CMakeLists.txt
│ │ ├── columns_test.cpp
│ │ ├── properties_test.cpp
│ │ ├── remote_commands_test.cpp
│ │ ├── remote_pidl_test.cpp
│ │ └── swish_pidl_test.cpp
│ ├── shell/
│ │ ├── CMakeLists.txt
│ │ └── shell_test.cpp
│ ├── shell_folder/
│ │ ├── CMakeLists.txt
│ │ ├── atl.cpp
│ │ ├── data_object_test.cpp
│ │ ├── exercise_data_object.h
│ │ ├── file_group_descriptor_test.cpp
│ │ ├── global_lock_test.cpp
│ │ ├── remote_folder_test.cpp
│ │ ├── sftp_data_object_nasty_old_test.cpp
│ │ ├── sftp_data_object_test.cpp
│ │ ├── sftp_directory_test.cpp
│ │ ├── shell_data_object_test.cpp
│ │ └── utils_test.cpp
│ ├── shell_folder-com_dll/
│ │ ├── CMakeLists.txt
│ │ ├── CppUnitExtensions.h
│ │ ├── HostFolder_test.cpp
│ │ ├── Module.cpp
│ │ ├── RemoteFolder_test.cpp
│ │ ├── main.cpp
│ │ ├── pidl.cpp
│ │ └── pidl.hpp
│ ├── shell_folder-dialogue/
│ │ ├── CMakeLists.txt
│ │ └── KbdInteractiveDialog_test.cpp
│ ├── ssh/
│ │ ├── CMakeLists.txt
│ │ ├── auth_test.cpp
│ │ ├── filesystem_construction_test.cpp
│ │ ├── filesystem_test.cpp
│ │ ├── fixture_dsakey
│ │ ├── fixture_dsakey.pub
│ │ ├── fixture_hostkey
│ │ ├── fixture_hostkey.pub
│ │ ├── fixture_rsakey
│ │ ├── fixture_rsakey.pub
│ │ ├── fixture_wrong_dsakey
│ │ ├── fixture_wrong_dsakey.pub
│ │ ├── host_key_test.cpp
│ │ ├── input_stream_test.cpp
│ │ ├── io_stream_test.cpp
│ │ ├── knownhost_test.cpp
│ │ ├── module.cpp
│ │ ├── openssh_fixture.cpp
│ │ ├── openssh_fixture.hpp
│ │ ├── output_stream_test.cpp
│ │ ├── path_test.cpp
│ │ ├── session_fixture.cpp
│ │ ├── session_fixture.hpp
│ │ ├── session_test.cpp
│ │ ├── sftp_fixture.cpp
│ │ ├── sftp_fixture.hpp
│ │ ├── ssh_server/
│ │ │ ├── Dockerfile
│ │ │ ├── authorized_keys
│ │ │ └── ssh_host_rsa_key
│ │ ├── stream_threading_test.cpp
│ │ ├── test_known_hosts
│ │ ├── test_known_hosts_hashed
│ │ └── test_known_hosts_out
│ └── versions/
│ ├── CMakeLists.txt
│ └── version_test.cpp
└── thirdparty/
└── taskdialog98/
├── TaskDialog.h
├── TaskDialogTest.cpp
├── TaskDialogTest.dsp
├── TaskDialogTest.dsw
├── TaskDialogTest.h
├── TaskDialogTest.rc
├── icons.h
├── maindlg.h
├── res/
│ ├── TaskDialogTest.exe.manifest
│ └── make_icons_include.bat
├── resource.h
├── stdafx.cpp
└── stdafx.h
================================================
FILE CONTENTS
================================================
================================================
FILE: .clang-format
================================================
---
AccessModifierOffset: '-4'
AllowShortFunctionsOnASingleLine: Empty
AlwaysBreakTemplateDeclarations: 'true'
BreakBeforeBraces: Allman
ColumnLimit: '80'
ConstructorInitializerAllOnOneLineOrOnePerLine: 'true'
ForEachMacros: [ foreach, BOOST_FOREACH ]
IndentWidth: '4'
MacroBlockBegin: "^[A-Z_]+_BEGIN$"
MacroBlockEnd: "^[A-Z_]+_END(?)?$"
MaxEmptyLinesToKeep: '1'
NamespaceIndentation: None
PointerAlignment: Left
SpaceAfterControlStatementKeyword: true
SpaceBeforeAssignmentOperators: true
SpacesInAngles: false
SpacesInParentheses: false
UseTab: Never
...
================================================
FILE: .gitattributes
================================================
*.sh crlf=input
================================================
FILE: .tx/config
================================================
[main]
host = https://www.transifex.com
[swish.swish]
file_filter = po\<lang>\swish.po
source_file = po\template\swish.pot
source_lang = en_GB
type = PO
================================================
FILE: CMakeLists.txt
================================================
# Copyright (C) 2015 Alexander Lamaison <swish@lammy.co.uk>
#
# 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., 51 Franklin
# Street, Fifth Floor, Boston, MA 02110-1301 USA.
cmake_minimum_required(VERSION 3.1)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
# Package management ###########################################################
include(HunterGate)
HunterGate(
URL "https://github.com/alamaison/hunter/archive/ee83a15960b5d74098d8704bc9cf82ad8ec1734f.tar.gz"
SHA1 "d02301fee68f00198e7941129da446f80189017e"
LOCAL
)
################################################################################
project(swish VERSION 0.8.3)
set(SWISH_FRIENDLY_NAME "Swish")
set(SWISH_VENDOR "swish-sftp.org")
set(SWISH_DESCRIPTION "Easy SFTP for Windows Explorer")
set(SWISH_COPYRIGHT "Copyright (C) 2006-2015 Alexander Lamaison and contributors")
#include(max_warnings)
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/taskdialog98)
# Prevent Winsock errors and gives quicker builds
add_definitions(-DWIN32_LEAN_AND_MEAN)
# Silence bogus MSVC warnings
add_definitions(-D_SCL_SECURE_NO_WARNINGS)
# Currently required because not all Win32 calls use A or W form explicitly
add_definitions(-DUNICODE -D_UNICODE)
hunter_add_package(Boost
COMPONENTS filesystem system test date_time regex signals locale)
set(Boost_USE_STATIC_LIBS ON)
find_package(Boost 1.49 REQUIRED
COMPONENTS filesystem date_time system regex signals thread locale)
if(MSVC)
add_definitions(-DBOOST_ALL_NO_LIB=1)
endif()
include_directories(${Boost_INCLUDE_DIRS})
add_subdirectory(ezel)
add_subdirectory(ssh)
add_subdirectory(swish)
add_subdirectory(po)
option(BUILD_TESTING "Build test suite" ON)
if(BUILD_TESTING)
enable_testing()
add_subdirectory(test)
endif()
set(INSTALLER_URL
"https://sourceforge.net/projects/swish/files/swish/swish-${swish_VERSION}/swish-${swish_VERSION}.exe")
string(TIMESTAMP PUBLICATION_DATE UTC)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/appcast.xml.in
${CMAKE_CURRENT_BINARY_DIR}/appcast.xml
@ONLY)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/setup_conf.xml.in
${CMAKE_CURRENT_BINARY_DIR}/setup_conf.xml
@ONLY)
file(DOWNLOAD "http://the.earth.li/~sgtatham/putty/0.64/x86/pageant.exe"
"${CMAKE_CURRENT_BINARY_DIR}/pageant.exe"
SHOW_PROGRESS
EXPECTED_HASH SHA1=4f7ec7e53b7dd557603c2447fd177d85f14006ad)
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/pageant.exe" NEWS LICENSE.txt README.md
DESTINATION .)
include(InstallRequiredSystemLibraries)
set(CPACK_GENERATOR WIX)
set(CPACK_PACKAGE_NAME "${SWISH_FRIENDLY_NAME}")
set(CPACK_PACKAGE_VENDOR "${SWISH_VENDOR}")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${SWISH_DESCRIPTION}")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt")
set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
set(CPACK_WIX_UPGRADE_GUID "97CF376F-FFDE-472A-946B-E3F5D45229DA")
set(CPACK_WIX_PATCH_FILE "${CMAKE_CURRENT_SOURCE_DIR}/cpack_wix_patch.xml")
set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "${SWISH_FRIENDLY_NAME}")
set(CMAKE_WIX_PROPERTY_ARPCONTACT swish@lammy.co.uk)
set(CMAKE_WIX_PROPERTY_ARPHELPLINK http://www.swish-sftp.org)
set(CMAKE_WIX_PROPERTY_ARPURLINFOABOUT http://www.swish-sftp.org)
set(CMAKE_WIX_PROPERTY_ARPURLUPDATEINFO http://sourceforge.net/projects/swish/)
#set(CPACK_WIX_UI_REF WixUI_Minimal)
include(CPack)
================================================
FILE: COPYING.rtf
================================================
{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fmodern\fprq1\fcharset0 Courier New;}}
{\colortbl ;\red0\green0\blue0;}
{\*\generator Msftedit 5.41.15.1507;}\viewkind4\uc1\pard\cf1\lang2057\f0\fs18\tab\tab GNU GENERAL PUBLIC LICENSE\par
\tab\tab Version 2, June 1991\par
\par
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,\par
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\par
Everyone is permitted to copy and distribute verbatim copies\par
of this license document, but changing it is not allowed.\par
\par
\tab\tab\tab Preamble\par
\par
The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too.\par
\par
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.\par
\par
To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.\par
\par
For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.\par
\par
We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.\par
\par
Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.\par
\par
Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.\par
\par
The precise terms and conditions for copying, distribution and modification follow. \par
\par
\tab\tab GNU GENERAL PUBLIC LICENSE\par
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\par
\par
0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".\par
\par
Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.\par
\par
1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.\par
\par
You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.\par
\par
2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:\par
\par
a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. \par
b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. \par
c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) \par
\par
These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.\par
\par
Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.\par
\par
In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.\par
\par
3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:\par
\par
a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, \par
b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, \par
c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) \par
\par
The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.\par
\par
If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.\par
\par
4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.\par
\par
5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.\par
\par
6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.\par
\par
7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.\par
\par
If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.\par
\par
It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.\par
\par
This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.\par
\par
8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.\par
\par
9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.\par
\par
Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.\par
\par
10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. \par
\par
\tab\tab\tab NO WARRANTY\par
\par
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\par
\par
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. \par
\par
\tab\tab END OF TERMS AND CONDITIONS\par
\par
\tab How to Apply These Terms to Your New Programs\par
\par
If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.\par
\par
To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. \par
\par
<one line to give the program's name and a brief idea of what it does.>\par
Copyright (C) <year> <name of author>\par
\par
This program is free software; you can redistribute it and/or modify\par
it under the terms of the GNU General Public License as published by\par
the Free Software Foundation; either version 2 of the License, or\par
(at your option) any later version.\par
\par
This program is distributed in the hope that it will be useful,\par
but WITHOUT ANY WARRANTY; without even the implied warranty of\par
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\par
GNU General Public License for more details.\par
\par
You should have received a copy of the GNU General Public License along\par
with this program; if not, write to the Free Software Foundation, Inc.,\par
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\par
\par
Also add information on how to contact you by electronic and paper mail.\par
\par
If the program is interactive, make it output a short notice like this when it starts in an interactive mode: \par
\par
Gnomovision version 69, Copyright (C) year name of author\par
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\par
This is free software, and you are welcome to redistribute it\par
under certain conditions; type `show c' for details.\par
\par
The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.\par
\par
You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: \par
\par
Yoyodyne, Inc., hereby disclaims all copyright interest in the program\par
`Gnomovision' (which makes passes at compilers) written by James Hacker.\par
\par
<signature of Ty Coon>, 1 April 1989\par
Ty Coon, President of Vice\par
\par
This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License.\par
\par
}
================================================
FILE: LICENSE.txt
================================================
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
================================================
FILE: NEWS
================================================
swish-0.8.2
-Fixed error when known_hosts contained unrecognised key types.
swish-0.8.1
-Fix crash in 32-bit version when showing dialogues.
-Updated OpenSSL to 1.0.0l.
-Updated Hebrew translation.
swish-0.8.0
-Added option to log out of server manually.
-Fix file extension behaviour to match Windows folder options.
-Fixed bug where timestamps were adjusted to local time twice.
-New Latvian and Catalan translations.
-Updated Hungarian, Japanese and Portuguese translations.
swish-0.7.4
-Restored copy progress bar which had disappeared in 0.7.2.
-Updated Welsh translation.
swish-0.7.3
-Fixed drag-and-drop crash on Windows 8.
-Fixed timestamps so they are in user's timezone.
-New Romanian translation.
-Updated Korean translation.
swish-0.7.2
-Added direct downloading and installation of updates.
-More detailed error messages.
-Fixed bug with non-ASCII characters in usernames and passwords.
-New Welsh, Danish, Greek, Estonian, Finnish and Korean translations.
-Updated Bulgarian, Czech, German, Spanish, French, Hebrew, Italian, Japanese,
Dutch, Polish, Russian, Swedish and Chinese (Simplified) translations.
swish-0.7.0
-Added support for public key authentication through Pageant key agent.
-Updated Czech, Spanish, Japanese, Dutch and Portuguese (Brazil) translations.
swish-0.6.3
-Fixed errors with Windows 8.
-Disabled compression to support a greater range of SSH servers.
-Updated German, Italian, Japanese, Portuguese (Brazil), Chinese (Simplified),
Chinese (Traditional) and French translations.
swish-0.6.2
-Fixed performance problems with small files.
-Fixed bug causing ZIP files to be unpacked as the were copied.
-New Brazilian Portuguese translation.
-Updated Dutch, German, Chinese (Simplified), Italian and Portuguese
translations.
swish-0.6.1
-Significant speed improvement.
-Installer supports Windows 8.
-Better error reporting when copying to a remote server.
-Fixed bug where renaming a folder did not change the name displayed.
-Fixed bug where files did not appear after copying to remote server.
-Hindi, Bulgarian, Portuguese, Swedish and Chinese (Simplified) translations.
swish-0.6.0
-Added double-click file opening.
-Downgraded to libssh2 1.2.7 to fix incomplete file transfers.
swish-0.5.4
-Added support for symlinks.
-Display error message if drag-and-drop fails.
-Japanese, Polish, Slovak, Hungarian and Chinese translations.
swish-0.4.6
-Fixed major installer problem which broke all new installations as it failed
to register an interface.
-Fixed problem that left assertion checks in release builds.
swish-0.4.5
-Added ability to create new folders.
-Added auto-updater.
-More useful error messages.
-Better error dialogues.
-Fixed pasting files to the server. This may have been broken for a long time!
-Fixed problem with port numbers above 999 in some locales.
-Fixed bug where pressing Cancel showed an error message.
-Fixed bug causing Explorer Window to flash when navigating between folders.
-Italian translation.
swish-0.4.4
-64-bit support.
-Windows XP 'webtask' pane.
-Hebrew, Czech, Spanish, French and Turkish translations.
swish-0.4.2
-Explicitly prevent 64-bit installation.
-Fix bug where sessions couldn't be restored until Explorer restarted.
-Fix bug with non-ASCII Windows usernames.
swish-0.4.1
-Write speeds 4x faster.
-Huge reduction in GUI memory usage.
-Confirmation before overwriting existing files.
-Improved write progress indicator.
-Better error reporting.
-Fix bug where 'Remove' option missing from host menu.
-German translation.
swish-0.4.0
-Full support for files and directories with non-Latin Unicode names.
swish-0.3.5
-Display Unicode filenames.
swish-0.3.4
-Fixed hostname resolution for Windows versions earlier than Vista
swish-0.3.3
-IPv6 support.
-Window 7 fixes.
-Fix overwriting larger file with smaller one.
-Error messages when negotiating a connection fails.
-Support for most characters (e.g. @) in user names.
swish-0.3.2.0
-Internationalisation (English, Dutch, Russian)
swish-0.3.1.0
-Added host-key verification.
-New WIX-based installer
swish-0.3.0.1
-Added command buttons to add and remove hosts (Windows Vista and above).
-Allow the user to cancel a file transfer mid-file rather than only between
files.
-Fix bug where password dialogues appear behind the Explorer window.
-Fix missing menu options bug in Windows 98.
swish-0.3.0.0
-Full drag-and-drop support in Windows XP and above. Drag-and-drop files and
folders to and from the remote server.
swish-0.2.1.13
-Enable removal of hosts from Swish folder.
swish-0.2.1.12
-Added 'Type' property to Explorer view.
-Fixed incorrect column witdths (ticket #2).
-Display user name and group name rather than the UID and GID.
-Added 'Owner ID' and 'Group ID' columns to Explorer view to display the
numerical UID and GID.
-Added 'Date Accessed' column to Explorer view.
swish-0.2.1.11
-Read-only file transfer support added. Files and folders can be copied from a
remote server to the local computer using cut&paste or drag&drop.
swish-0.2.1.10
-Now supports Windows Vista.
swish-0.2.1.9
-Added support for the keyboard-interactive authentication scheme:
(http://www.ietf.org/rfc/rfc4256.txt).
-Improved robustness of the low-level backend session handling in the face
of errors.
swish-0.2.1.8
-Fixed bug when overwriting existing directories.
swish-0.2.1.7
-Files and folders can be renamed. If an item with the chosen name already
exists, we offer to overwrite it. Due to the limitations of SFTP versions 4
and below, we do this non-atomically which is not ideal. Time will tell
whether this is more trouble than it's worth.
swish-0.2.1.6
-Files and folders can be deleted from the Explorer window. If a directory
contains other items, we deleted these recursively using separate calls to the
server. This is a bit clunky but we are limited by what SFTP supports.
swish-0.2.1.5
-SFTP sessions (connections) are now pooled in the COM ROT so that subsequent
requests can reuse them without prompting the user for a password or having to
renegotiate with the server.
swish-0.2.1.4
-Replace the PuTTY-based dataprovider component with one based in libssh2. This
is vastly more stable. The new backend has all the abilities of the of the
old one with a few exceptions, namely, host-verification (aka known_hosts),
key-interactive authentication and public-key authentication. Replacing these
is a priority.
-The frontend has been integrate much more closely with Explorer.
-Connections are added with a dialog invoked from the Tools menu and are stored
in the registry.
-Explorer displays the default icon for files based on their extension (this
doesn't work in Windows 98 yet).
-Subfolder can be navigated.
-The default explorer context menu is displayed when right-clicking a file.
swish-0.2.1
-Created a data provider component to wrap PuTTY's SFTP client (psftp.exe)
permitting listing of files in a directory
-Linked data provider to front end using simple dialog box for requesting
host information from the user
swish-0.2
-All previous prototype code discarded
-Created Explorer namespace extension with window explorer window showing
three dummy host connection items
-Used SHCreateShellFolderView to create default shell view window giving
best possible Explorer integration
-Created PIDL Manager to handle host (connection) folder item
-Added conection item details to Details and Tiles view
-Created Remote Folder displaying dummy file listing which is displayed by
double-clicking (or otherwise opening) host connection in initial folder
swish-0.1.1
-Experimentation with Visual Studio and linking with gcc-compiled libssh
swish-0.1-gcc
-Experimentation using gcc, wxWidgets and libssh-0.11
================================================
FILE: README.md
================================================
Swish
=====
What is Swish?
--------------
Swish is a plugin for Microsoft Windows Explorer that adds support for SFTP.
If you've used Explorer's built-in FTP support, Swish is that but for SFTP
over SSH.
Supported Operating Systems
---------------------------
* Windows 8 (most tested)
* Windows 7 (occasionally tested)
* Windows Vista (rarely tested)
Swish may also work on Windows XP, but we haven't tested that in a while.
Binaries
--------
Binary installers are [on our website](http://www.swish-sftp.org).
Getting involved
----------------
We welcome patches to help improve Swish.
Swish fetches almost all its dependencies when you configure it with [CMake].
That magic happens thanks to the [Hunter package manager]. However, you will
need Perl installed. [Strawberry Perl] is good, and available on [Chocolatey].
You'll also need a compiler (obviously), a recent version of the Windows SDK
and CMake.
[CMake]: https://cmake.org/
[Hunter package manager]: https://github.com/ruslo/hunter/
[Strawberry Perl]: http://strawberryperl.com/
[Chocolatey]: https://chocolatey.org/packages/StrawberryPerl
Licensing
---------
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 3 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, see <http://www.gnu.org/licenses/>.
If you modify this Program, or any covered work, by linking or
combining it with the OpenSSL project's OpenSSL library (or a modified
version of that library), containing parts covered by the terms of the
OpenSSL or SSLeay licenses, the licensors of this Program grant you
additional permission to convey the resulting work.
### Why have an exception for OpenSSL?
The [OpenSSL] library is incompatible with the GPL license because it
contains an advertising clause. However lots of useful, open source
software (including our own projects) need to use it and currently the
alternatives aren't quite up to scratch. As we want these projects to
be able to reuse Washer, we have added this exception to the GPL - a
common technique used by other projects such as [wget].
If [GnuTLS] improves to the point where OpenSSL is no longer
necessary, we may remove this exception.
[OpenSSL]: http://www.openssl.org/
[wget]: http://www.gnu.org/software/wget/
[GnuTLS]: http://www.gnu.org/software/gnutls/
================================================
FILE: appcast.xml.in
================================================
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle">
<channel>
<title>Swish updates</title>
<link>http://www.swish-sftp.org/autoupdate/appcast.xml</link>
<description>Appcast for Swish updates.</description>
<language>en</language>
<item>
<title>Version @swish_VERSION@</title>
<sparkle:releaseNotesLink>
http://www.swish-sftp.org/autoupdate/NEWS-@swish_VERSION@.html
</sparkle:releaseNotesLink>
<pubDate>@PUBLICATION_DATE@</pubDate>
<enclosure url="@INSTALLER_URL@"
sparkle:version="@swish_VERSION@"
type="application/octet-stream"/>
</item>
</channel>
</rss>
================================================
FILE: build/making_a_release.txt
================================================
Update version number in:
- top-level CMakeLists.txt
- wix/swish.wxs
- wix/wix.wixproj
Add notable changes to NEWS.
Make sure .po files are compiled to .mo files (po/compile_mo.sh).
To build the final multi-architecture EXE, run this command in the top level:
"C:\Program Files (x86)\dotNetInstaller\bin\InstallerLinker.exe" /Output:swish.exe /Template:"C:\Program Files (x86)\dotNetInstaller\bin\dotNetInstaller.exe" /Configuration:setup_conf.xml
Add version to Trac.
================================================
FILE: build/news_html.py
================================================
"""Convert Swish NEWS file to HTML.
"""
_NEWS = '../NEWS'
_VERSIONED_NEWS = '../NEWS-%s.html'
def main():
with open(_NEWS, 'r') as news_in:
html = ('''<html style="font-size:x-small; font-family : sans-serif">
<body>
%s
</body>
</html>''') % read_news(news_in, 1)
with open(_NEWS, 'r') as news_in:
version = extract_version(news_in)
with open(_VERSIONED_NEWS % version, 'w') as html_open:
html_open.write(html)
def extract_version(news):
return news.readline().strip('\n\r').replace('swish-', '')
def read_news(news, indent):
entry_html = '''<h1 style="font-size:small; margin-bottom:0ex; color:brown">%s</h1>
<p style="margin-top:0ex">
<ul style="margin-left:3ex; margin-top:1ex">
%s
</ul>
</p>'''
html = []
while True:
entry = read_entry(news)
if not entry:
break
lines = []
for item in entry['items']:
lines.append(create_list_item(item, indent + 1))
html.append(entry_html % (entry['heading'], '\n'.join(lines)))
return '\n'.join(html)
def create_list_item(item, indent):
return '%s<li>%s</li>' % (('\t' * indent), item)
def read_entry(news):
entry = { 'heading' : news.readline().strip(), 'items' : [] }
while True:
line = news.readline().strip('\n\r')
print line
if not line:
break
if line[0] == ' ':
entry['items'][-1] += line
continue
if line[0] != '-':
raise Exception('Incorrect format: %s' % line)
entry['items'].append(line[1:])
if not entry['heading']:
return None
return entry
if __name__ == '__main__':
main()
================================================
FILE: cmake/GetGitRevisionDescription.cmake
================================================
# - Returns a version string from Git
#
# These functions force a re-configure on each git commit so that you can
# trust the values of the variables in your build system.
#
# get_git_head_revision(<refspecvar> <hashvar> [<additional arguments to git describe> ...])
#
# Returns the refspec and sha hash of the current head revision
#
# git_describe(<var> [<additional arguments to git describe> ...])
#
# Returns the results of git describe on the source tree, and adjusting
# the output so that it tests false if an error occurs.
#
# git_get_exact_tag(<var> [<additional arguments to git describe> ...])
#
# Returns the results of git describe --exact-match on the source tree,
# and adjusting the output so that it tests false if there was no exact
# matching tag.
#
# Requires CMake 2.6 or newer (uses the 'function' command)
#
# Original Author:
# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
# http://academic.cleardefinition.com
# Iowa State University HCI Graduate Program/VRAC
#
# Copyright Iowa State University 2009-2010.
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
if(__get_git_revision_description)
return()
endif()
set(__get_git_revision_description YES)
# We must run the following at "include" time, not at function call time,
# to find the path to this module rather than the path to a calling list file
get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
function(get_git_head_revision _refspecvar _hashvar)
set(GIT_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(GIT_DIR "${GIT_PARENT_DIR}/.git")
while(NOT EXISTS "${GIT_DIR}") # .git dir not found, search parent directories
set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}")
get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH)
if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT)
# We have reached the root directory, we are not in git
set(${_refspecvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
set(${_hashvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
return()
endif()
set(GIT_DIR "${GIT_PARENT_DIR}/.git")
endwhile()
# check if this is a submodule
if(NOT IS_DIRECTORY ${GIT_DIR})
file(READ ${GIT_DIR} submodule)
string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" GIT_DIR_RELATIVE ${submodule})
get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE)
endif()
set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
if(NOT EXISTS "${GIT_DATA}")
file(MAKE_DIRECTORY "${GIT_DATA}")
endif()
if(NOT EXISTS "${GIT_DIR}/HEAD")
return()
endif()
set(HEAD_FILE "${GIT_DATA}/HEAD")
configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY)
configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in"
"${GIT_DATA}/grabRef.cmake"
@ONLY)
include("${GIT_DATA}/grabRef.cmake")
set(${_refspecvar} "${HEAD_REF}" PARENT_SCOPE)
set(${_hashvar} "${HEAD_HASH}" PARENT_SCOPE)
endfunction()
function(git_describe _var)
if(NOT GIT_FOUND)
find_package(Git QUIET)
endif()
get_git_head_revision(refspec hash)
if(NOT GIT_FOUND)
set(${_var} "GIT-NOTFOUND" PARENT_SCOPE)
return()
endif()
if(NOT hash)
set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE)
return()
endif()
# TODO sanitize
#if((${ARGN}" MATCHES "&&") OR
# (ARGN MATCHES "||") OR
# (ARGN MATCHES "\\;"))
# message("Please report the following error to the project!")
# message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}")
#endif()
#message(STATUS "Arguments to execute_process: ${ARGN}")
execute_process(COMMAND
"${GIT_EXECUTABLE}"
describe
${hash}
${ARGN}
WORKING_DIRECTORY
"${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE
res
OUTPUT_VARIABLE
out
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT res EQUAL 0)
set(out "${out}-${res}-NOTFOUND")
endif()
set(${_var} "${out}" PARENT_SCOPE)
endfunction()
function(git_get_exact_tag _var)
git_describe(out --exact-match ${ARGN})
set(${_var} "${out}" PARENT_SCOPE)
endfunction()
================================================
FILE: cmake/GetGitRevisionDescription.cmake.in
================================================
#
# Internal file for GetGitRevisionDescription.cmake
#
# Requires CMake 2.6 or newer (uses the 'function' command)
#
# Original Author:
# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
# http://academic.cleardefinition.com
# Iowa State University HCI Graduate Program/VRAC
#
# Copyright Iowa State University 2009-2010.
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
set(HEAD_HASH)
file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024)
string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS)
if(HEAD_CONTENTS MATCHES "ref")
# named branch
string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}")
if(EXISTS "@GIT_DIR@/${HEAD_REF}")
configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
else()
configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY)
file(READ "@GIT_DATA@/packed-refs" PACKED_REFS)
if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}")
set(HEAD_HASH "${CMAKE_MATCH_1}")
endif()
endif()
else()
# detached HEAD
configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY)
endif()
if(NOT HEAD_HASH)
file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024)
string(STRIP "${HEAD_HASH}" HEAD_HASH)
endif()
================================================
FILE: cmake/Hunter/config.cmake
================================================
hunter_config(Boost VERSION 1.49.0)
================================================
FILE: cmake/HunterGate.cmake
================================================
# Copyright (c) 2013-2015, Ruslan Baratov
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# This is a gate file to Hunter package manager.
# Include this file using `include` command and add package you need, example:
#
# cmake_minimum_required(VERSION 3.0)
#
# include("cmake/HunterGate.cmake")
# HunterGate(
# URL "https://github.com/path/to/hunter/archive.tar.gz"
# SHA1 "798501e983f14b28b10cda16afa4de69eee1da1d"
# )
#
# project(MyProject)
#
# hunter_add_package(Foo)
# hunter_add_package(Boo COMPONENTS Bar Baz)
#
# Projects:
# * https://github.com/hunter-packages/gate/
# * https://github.com/ruslo/hunter
cmake_minimum_required(VERSION 3.0) # Minimum for Hunter
include(CMakeParseArguments) # cmake_parse_arguments
option(HUNTER_ENABLED "Enable Hunter package manager support" ON)
option(HUNTER_STATUS_PRINT "Print working status" ON)
option(HUNTER_STATUS_DEBUG "Print a lot info" OFF)
set(HUNTER_WIKI "https://github.com/ruslo/hunter/wiki")
function(hunter_gate_status_print)
foreach(print_message ${ARGV})
if(HUNTER_STATUS_PRINT OR HUNTER_STATUS_DEBUG)
message(STATUS "[hunter] ${print_message}")
endif()
endforeach()
endfunction()
function(hunter_gate_status_debug)
foreach(print_message ${ARGV})
if(HUNTER_STATUS_DEBUG)
string(TIMESTAMP timestamp)
message(STATUS "[hunter *** DEBUG *** ${timestamp}] ${print_message}")
endif()
endforeach()
endfunction()
function(hunter_gate_wiki wiki_page)
message("------------------------------ WIKI -------------------------------")
message(" ${HUNTER_WIKI}/${wiki_page}")
message("-------------------------------------------------------------------")
message("")
message(FATAL_ERROR "")
endfunction()
function(hunter_gate_internal_error)
message("")
foreach(print_message ${ARGV})
message("[hunter ** INTERNAL **] ${print_message}")
endforeach()
message("[hunter ** INTERNAL **] [Directory:${CMAKE_CURRENT_LIST_DIR}]")
message("")
hunter_gate_wiki("error.internal")
endfunction()
function(hunter_gate_fatal_error)
cmake_parse_arguments(hunter "" "WIKI" "" "${ARGV}")
string(COMPARE EQUAL "${hunter_WIKI}" "" have_no_wiki)
if(have_no_wiki)
hunter_gate_internal_error("Expected wiki")
endif()
message("")
foreach(x ${hunter_UNPARSED_ARGUMENTS})
message("[hunter ** FATAL ERROR **] ${x}")
endforeach()
message("[hunter ** FATAL ERROR **] [Directory:${CMAKE_CURRENT_LIST_DIR}]")
message("")
hunter_gate_wiki("${hunter_WIKI}")
endfunction()
function(hunter_gate_user_error)
hunter_gate_fatal_error(${ARGV} WIKI "error.incorrect.input.data")
endfunction()
function(hunter_gate_self root version sha1 result)
string(COMPARE EQUAL "${root}" "" is_bad)
if(is_bad)
hunter_gate_internal_error("root is empty")
endif()
string(COMPARE EQUAL "${version}" "" is_bad)
if(is_bad)
hunter_gate_internal_error("version is empty")
endif()
string(COMPARE EQUAL "${sha1}" "" is_bad)
if(is_bad)
hunter_gate_internal_error("sha1 is empty")
endif()
string(SUBSTRING "${sha1}" 0 7 archive_id)
if(EXISTS "${root}/cmake/Hunter")
set(hunter_self "${root}")
else()
set(
hunter_self
"${root}/_Base/Download/Hunter/${version}/${archive_id}/Unpacked"
)
endif()
set("${result}" "${hunter_self}" PARENT_SCOPE)
endfunction()
# Set HUNTER_GATE_ROOT cmake variable to suitable value.
function(hunter_gate_detect_root)
# Check CMake variable
string(COMPARE NOTEQUAL "${HUNTER_ROOT}" "" not_empty)
if(not_empty)
set(HUNTER_GATE_ROOT "${HUNTER_ROOT}" PARENT_SCOPE)
hunter_gate_status_debug("HUNTER_ROOT detected by cmake variable")
return()
endif()
# Check environment variable
string(COMPARE NOTEQUAL "$ENV{HUNTER_ROOT}" "" not_empty)
if(not_empty)
set(HUNTER_GATE_ROOT "$ENV{HUNTER_ROOT}" PARENT_SCOPE)
hunter_gate_status_debug("HUNTER_ROOT detected by environment variable")
return()
endif()
# Check HOME environment variable
string(COMPARE NOTEQUAL "$ENV{HOME}" "" result)
if(result)
set(HUNTER_GATE_ROOT "$ENV{HOME}/.hunter" PARENT_SCOPE)
hunter_gate_status_debug("HUNTER_ROOT set using HOME environment variable")
return()
endif()
# Check SYSTEMDRIVE and USERPROFILE environment variable (windows only)
if(WIN32)
string(COMPARE NOTEQUAL "$ENV{SYSTEMDRIVE}" "" result)
if(result)
set(HUNTER_GATE_ROOT "$ENV{SYSTEMDRIVE}/.hunter" PARENT_SCOPE)
hunter_gate_status_debug(
"HUNTER_ROOT set using SYSTEMDRIVE environment variable"
)
return()
endif()
string(COMPARE NOTEQUAL "$ENV{USERPROFILE}" "" result)
if(result)
set(HUNTER_GATE_ROOT "$ENV{USERPROFILE}/.hunter" PARENT_SCOPE)
hunter_gate_status_debug(
"HUNTER_ROOT set using USERPROFILE environment variable"
)
return()
endif()
endif()
hunter_gate_fatal_error(
"Can't detect HUNTER_ROOT"
WIKI "error.detect.hunter.root"
)
endfunction()
macro(hunter_gate_lock dir)
if(NOT HUNTER_SKIP_LOCK)
if("${CMAKE_VERSION}" VERSION_LESS "3.2")
hunter_gate_fatal_error(
"Can't lock, upgrade to CMake 3.2 or use HUNTER_SKIP_LOCK"
WIKI "error.can.not.lock"
)
endif()
hunter_gate_status_debug("Locking directory: ${dir}")
file(LOCK "${dir}" DIRECTORY GUARD FUNCTION)
hunter_gate_status_debug("Lock done")
endif()
endmacro()
function(hunter_gate_download dir)
string(
COMPARE
NOTEQUAL
"$ENV{HUNTER_DISABLE_AUTOINSTALL}"
""
disable_autoinstall
)
if(disable_autoinstall AND NOT HUNTER_RUN_INSTALL)
hunter_gate_fatal_error(
"Hunter not found in '${dir}'"
"Set HUNTER_RUN_INSTALL=ON to auto-install it from '${HUNTER_GATE_URL}'"
"Settings:"
" HUNTER_ROOT: ${HUNTER_GATE_ROOT}"
" HUNTER_SHA1: ${HUNTER_GATE_SHA1}"
WIKI "error.run.install"
)
endif()
string(COMPARE EQUAL "${dir}" "" is_bad)
if(is_bad)
hunter_gate_internal_error("Empty 'dir' argument")
endif()
string(COMPARE EQUAL "${HUNTER_GATE_SHA1}" "" is_bad)
if(is_bad)
hunter_gate_internal_error("HUNTER_GATE_SHA1 empty")
endif()
string(COMPARE EQUAL "${HUNTER_GATE_URL}" "" is_bad)
if(is_bad)
hunter_gate_internal_error("HUNTER_GATE_URL empty")
endif()
set(done_location "${dir}/DONE")
set(sha1_location "${dir}/SHA1")
set(build_dir "${dir}/Build")
set(cmakelists "${dir}/CMakeLists.txt")
hunter_gate_lock("${dir}")
if(EXISTS "${done_location}")
# while waiting for lock other instance can do all the job
hunter_gate_status_debug("File '${done_location}' found, skip install")
return()
endif()
file(REMOVE_RECURSE "${build_dir}")
file(REMOVE_RECURSE "${cmakelists}")
file(MAKE_DIRECTORY "${build_dir}") # check directory permissions
# Disabling languages speeds up a little bit, reduces noise in the output
# and avoids path too long windows error
file(
WRITE
"${cmakelists}"
"cmake_minimum_required(VERSION 3.0)\n"
"project(HunterDownload LANGUAGES NONE)\n"
"include(ExternalProject)\n"
"ExternalProject_Add(\n"
" Hunter\n"
" URL\n"
" \"${HUNTER_GATE_URL}\"\n"
" URL_HASH\n"
" SHA1=${HUNTER_GATE_SHA1}\n"
" DOWNLOAD_DIR\n"
" \"${dir}\"\n"
" SOURCE_DIR\n"
" \"${dir}/Unpacked\"\n"
" CONFIGURE_COMMAND\n"
" \"\"\n"
" BUILD_COMMAND\n"
" \"\"\n"
" INSTALL_COMMAND\n"
" \"\"\n"
")\n"
)
if(HUNTER_STATUS_DEBUG)
set(logging_params "")
else()
set(logging_params OUTPUT_QUIET)
endif()
hunter_gate_status_debug("Run generate")
execute_process(
COMMAND "${CMAKE_COMMAND}" "-H${dir}" "-B${build_dir}"
WORKING_DIRECTORY "${dir}"
RESULT_VARIABLE download_result
${logging_params}
)
if(NOT download_result EQUAL 0)
hunter_gate_internal_error("Configure project failed")
endif()
hunter_gate_status_print(
"Initializing Hunter workspace (${HUNTER_GATE_SHA1})"
" ${HUNTER_GATE_URL}"
" -> ${dir}"
)
execute_process(
COMMAND "${CMAKE_COMMAND}" --build "${build_dir}"
WORKING_DIRECTORY "${dir}"
RESULT_VARIABLE download_result
${logging_params}
)
if(NOT download_result EQUAL 0)
hunter_gate_internal_error("Build project failed")
endif()
file(REMOVE_RECURSE "${build_dir}")
file(REMOVE_RECURSE "${cmakelists}")
file(WRITE "${sha1_location}" "${HUNTER_GATE_SHA1}")
file(WRITE "${done_location}" "DONE")
hunter_gate_status_debug("Finished")
endfunction()
# Must be a macro so master file 'cmake/Hunter' can
# apply all variables easily just by 'include' command
# (otherwise PARENT_SCOPE magic needed)
macro(HunterGate)
if(HUNTER_GATE_DONE)
# variable HUNTER_GATE_DONE set explicitly for external project
# (see `hunter_download`)
set_property(GLOBAL PROPERTY HUNTER_GATE_DONE YES)
endif()
# First HunterGate command will init Hunter, others will be ignored
get_property(_hunter_gate_done GLOBAL PROPERTY HUNTER_GATE_DONE SET)
if(NOT HUNTER_ENABLED)
# Empty function to avoid error "unknown function"
function(hunter_add_package)
endfunction()
elseif(_hunter_gate_done)
hunter_gate_status_debug("Secondary HunterGate (use old settings)")
hunter_gate_self(
"${HUNTER_CACHED_ROOT}"
"${HUNTER_VERSION}"
"${HUNTER_SHA1}"
_hunter_self
)
include("${_hunter_self}/cmake/Hunter")
else()
set(HUNTER_GATE_LOCATION "${CMAKE_CURRENT_LIST_DIR}")
string(COMPARE NOTEQUAL "${PROJECT_NAME}" "" _have_project_name)
if(_have_project_name)
hunter_gate_fatal_error(
"Please set HunterGate *before* 'project' command. "
"Detected project: ${PROJECT_NAME}"
WIKI "error.huntergate.before.project"
)
endif()
cmake_parse_arguments(
HUNTER_GATE "LOCAL" "URL;SHA1;GLOBAL;FILEPATH" "" ${ARGV}
)
string(COMPARE EQUAL "${HUNTER_GATE_SHA1}" "" _empty_sha1)
string(COMPARE EQUAL "${HUNTER_GATE_URL}" "" _empty_url)
string(
COMPARE
NOTEQUAL
"${HUNTER_GATE_UNPARSED_ARGUMENTS}"
""
_have_unparsed
)
string(COMPARE NOTEQUAL "${HUNTER_GATE_GLOBAL}" "" _have_global)
string(COMPARE NOTEQUAL "${HUNTER_GATE_FILEPATH}" "" _have_filepath)
if(_empty_sha1)
hunter_gate_user_error("SHA1 suboption of HunterGate is mandatory")
endif()
if(_empty_url)
hunter_gate_user_error("URL suboption of HunterGate is mandatory")
endif()
if(_have_unparsed)
hunter_gate_user_error(
"HunterGate unparsed arguments: ${HUNTER_GATE_UNPARSED_ARGUMENTS}"
)
endif()
if(_have_global)
if(HUNTER_GATE_LOCAL)
hunter_gate_user_error("Unexpected LOCAL (already has GLOBAL)")
endif()
if(_have_filepath)
hunter_gate_user_error("Unexpected FILEPATH (already has GLOBAL)")
endif()
endif()
if(HUNTER_GATE_LOCAL)
if(_have_global)
hunter_gate_user_error("Unexpected GLOBAL (already has LOCAL)")
endif()
if(_have_filepath)
hunter_gate_user_error("Unexpected FILEPATH (already has LOCAL)")
endif()
endif()
if(_have_filepath)
if(_have_global)
hunter_gate_user_error("Unexpected GLOBAL (already has FILEPATH)")
endif()
if(HUNTER_GATE_LOCAL)
hunter_gate_user_error("Unexpected LOCAL (already has FILEPATH)")
endif()
endif()
hunter_gate_detect_root() # set HUNTER_GATE_ROOT
# Beautify path, fix probable problems with windows path slashes
get_filename_component(
HUNTER_GATE_ROOT "${HUNTER_GATE_ROOT}" ABSOLUTE
)
hunter_gate_status_debug("HUNTER_ROOT: ${HUNTER_GATE_ROOT}")
if(NOT HUNTER_ALLOW_SPACES_IN_PATH)
string(FIND "${HUNTER_GATE_ROOT}" " " _contain_spaces)
if(NOT _contain_spaces EQUAL -1)
hunter_gate_fatal_error(
"HUNTER_ROOT (${HUNTER_GATE_ROOT}) contains spaces."
"Set HUNTER_ALLOW_SPACES_IN_PATH=ON to skip this error"
"(Use at your own risk!)"
WIKI "error.spaces.in.hunter.root"
)
endif()
endif()
string(
REGEX
MATCH
"[0-9]+\\.[0-9]+\\.[0-9]+[-_a-z0-9]*"
HUNTER_GATE_VERSION
"${HUNTER_GATE_URL}"
)
string(COMPARE EQUAL "${HUNTER_GATE_VERSION}" "" _is_empty)
if(_is_empty)
set(HUNTER_GATE_VERSION "unknown")
endif()
hunter_gate_self(
"${HUNTER_GATE_ROOT}"
"${HUNTER_GATE_VERSION}"
"${HUNTER_GATE_SHA1}"
hunter_self_
)
set(_master_location "${hunter_self_}/cmake/Hunter")
if(EXISTS "${HUNTER_GATE_ROOT}/cmake/Hunter")
# Hunter downloaded manually (e.g. by 'git clone')
set(_unused "xxxxxxxxxx")
set(HUNTER_GATE_SHA1 "${_unused}")
set(HUNTER_GATE_VERSION "${_unused}")
else()
get_filename_component(_archive_id_location "${hunter_self_}/.." ABSOLUTE)
set(_done_location "${_archive_id_location}/DONE")
set(_sha1_location "${_archive_id_location}/SHA1")
# Check Hunter already downloaded by HunterGate
if(NOT EXISTS "${_done_location}")
hunter_gate_download("${_archive_id_location}")
endif()
if(NOT EXISTS "${_done_location}")
hunter_gate_internal_error("hunter_gate_download failed")
endif()
if(NOT EXISTS "${_sha1_location}")
hunter_gate_internal_error("${_sha1_location} not found")
endif()
file(READ "${_sha1_location}" _sha1_value)
string(COMPARE EQUAL "${_sha1_value}" "${HUNTER_GATE_SHA1}" _is_equal)
if(NOT _is_equal)
hunter_gate_internal_error(
"Short SHA1 collision:"
" ${_sha1_value} (from ${_sha1_location})"
" ${HUNTER_GATE_SHA1} (HunterGate)"
)
endif()
if(NOT EXISTS "${_master_location}")
hunter_gate_user_error(
"Master file not found:"
" ${_master_location}"
"try to update Hunter/HunterGate"
)
endif()
endif()
include("${_master_location}")
set_property(GLOBAL PROPERTY HUNTER_GATE_DONE YES)
endif()
endmacro()
================================================
FILE: cpack_wix_patch.xml
================================================
<CPackWiXPatch>
<!-- When #PRODUCT is supported (CMake 3.3?) we can yse this to remove the
license page -->
<!-- <CPackWiXFragment Id="#PRODUCT"> -->
<!-- <UI> -->
<!-- <UIRef Id="WixUI_InstallDir" /> -->
<!-- <Publish Dialog="WelcomeDlg" -->
<!-- Control="Next" -->
<!-- Event="NewDialog" -->
<!-- Value="InstallDirDlg" -->
<!-- Order="2">1</Publish> -->
<!-- <Publish Dialog="InstallDirDlg" -->
<!-- Control="Back" -->
<!-- Event="NewDialog" -->
<!-- Value="WelcomeDlg" -->
<!-- Order="2">1</Publish> -->
<!-- </UI> -->
<!-- </CPackWiXFragment> -->
<CPackWiXFragment Id="CM_FP_shell_folder_com_dlld.dll">
<TypeLib Id="B816A838-5022-11DC-9153-0090F5284F85"
Description="Swish Type Library" Language="0" MajorVersion="0"
MinorVersion="3">
<AppId Description="Swish"
Id="B816A838-5022-11DC-9153-0090F5284F85">
<Class Id="B816A83A-5022-11DC-9153-0090F5284F85"
Context="InprocServer32" Description="Swish"
ThreadingModel="apartment">
<ProgId Id="Swish.HostFolder.1" Description="CHostFolder Class">
<ProgId Id="Swish.HostFolder" Description="CHostFolder Class" />
</ProgId>
</Class>
<Class Id="B816A83C-5022-11DC-9153-0090F5284F85"
Context="InprocServer32" Description="CRemoteFolder Class"
ThreadingModel="apartment">
<ProgId Id="Swish.RemoteFolder.1" Description="CRemoteFolder Class">
<ProgId Id="Swish.RemoteFolder" Description="CRemoteFolder Class" />
</ProgId>
</Class>
</AppId>
</TypeLib>
</CPackWiXFragment>
<CPackWiXFragment Id="CM_CP_shell_folder_com_dlld.dll">
<RegistryValue Root="HKCR" Key="AppID\Swish.DLL" Name="AppID" Value="{b816a838-5022-11dc-9153-0090f5284f85}" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{b816a83a-5022-11dc-9153-0090f5284f85}\DefaultIcon" Value="shell32.dll,9" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{b816a83a-5022-11dc-9153-0090f5284f85}\ShellFolder" Name="Attributes" Value="-1610612736" Type="integer" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{b816a83a-5022-11dc-9153-0090f5284f85}" Name="InfoTip" Value="Remote file-system access via SFTP" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{b816a83a-5022-11dc-9153-0090f5284f85}" Name="TileInfo" Value="prop:{28636AA6-953D-11D2-B5D6-00C04FD918D0} 5;{b816a850-5022-11dc-9153-0090f5284f85} 2;{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 7" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{b816a83c-5022-11dc-9153-0090f5284f85}\DefaultIcon" Value="shell32.dll,9" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{b816a83c-5022-11dc-9153-0090f5284f85}\ShellFolder" Name="Attributes" Value="-1610612736" Type="integer" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{b816a83c-5022-11dc-9153-0090f5284f85}" Name="InfoTip" Value="Remote file-system access via SFTP" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{b816a83c-5022-11dc-9153-0090f5284f85}" Name="TileInfo" Value="prop:{B725F130-47EF-101A-A5F1-02608C9EEBAC}, 12;{B725F130-47EF-101A-A5F1-02608C9EEBAC, 14}" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="Interface" Value="" Type="string" Action="write" />
<RegistryValue Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{b816a83a-5022-11dc-9153-0090f5284f85}" Value="Swish" Type="string" Action="write" />
<RegistryValue Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{b816a83a-5022-11dc-9153-0090f5284f85}" Name="Removal Message" Value="Please don't remove Swish this way - uninstall it." Type="string" Action="write" />
<RegistryValue Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved" Name="{b816a83a-5022-11dc-9153-0090f5284f85}" Value="Swish HostFolder" Type="string" Action="write" />
<RegistryValue Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved" Name="{b816a83c-5022-11dc-9153-0090f5284f85}" Value="Swish SFTP Folder" Type="string" Action="write" />
</CPackWiXFragment>
</CPackWiXPatch>
================================================
FILE: ezel/CMakeLists.txt
================================================
# Copyright (C) 2015 Alexander Lamaison <swish@lammy.co.uk>
#
# 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 3 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, see <http://www.gnu.org/licenses/>.
set(SOURCES
detail/command_dispatch.hpp
detail/dialog_template.hpp
detail/hooks.hpp
detail/hwnd_linking.hpp
detail/message_dispatch.hpp
detail/window_impl.hpp
detail/window_link.hpp
detail/window_proc.hpp
detail/window_proxy.hpp
controls/button.hpp
controls/checkbox.hpp
controls/edit.hpp
controls/icon.hpp
controls/label.hpp
controls/line.hpp
controls/spinner.hpp
control.hpp
control_parent_impl.hpp
form.hpp
window.hpp)
add_custom_target(ezel-src SOURCES ${SOURCES})
add_library(ezel INTERFACE)
target_include_directories(ezel INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(ezel INTERFACE ${Boost_LIBRARIES})
================================================
FILE: ezel/control.hpp
================================================
/**
@file
GUI control base.
@if license
Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.ac.uk>
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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
@endif
*/
#ifndef EZEL_CONTROL_HPP
#define EZEL_CONTROL_HPP
#pragma once
#include <ezel/window.hpp> // window
#include <boost/shared_ptr.hpp> // shared_ptr
#include <string>
namespace ezel {
class form;
/**
* Base-class for form control facades.
*
* All controls that can be added to forms are added as an instance of a
* subclass of this this template.
* This allows form to access the impl pointer but nothing else.
*
* @param T Type of implementation class (pimpl)
*/
template<typename T>
class control : public window<T>
{
public:
control(boost::shared_ptr<T> impl) : window<T>(impl) {}
virtual ~control() {}
protected:
friend class form; // form need a p-impl from controls
};
} // namespace ezel
#endif
================================================
FILE: ezel/control_parent_impl.hpp
================================================
/**
@file
Compound window parent.
@if license
Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.ac.uk>
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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
@endif
*/
#ifndef EZEL_CONTROL_PARENT_IMPL_HPP
#define EZEL_CONTROL_PARENT_IMPL_HPP
#pragma once
#include <ezel/detail/window_impl.hpp> // window_impl
#include <washer/gui/messages.hpp> // message
#include <cassert> // assert
namespace ezel {
namespace detail {
/**
* Parent of any window that receive WM_COMMAND message from one or more
* children.
*/
class control_parent_impl : public window_impl
{
public:
typedef window_impl super;
typedef message_map<WM_COMMAND> messages;
virtual LRESULT handle_message(
UINT message, WPARAM wparam, LPARAM lparam)
{
return dispatch_message(this, message, wparam, lparam);
}
/**
* What to do if this window is sent a command message by a child window.
*
* We reflect the command back to the control that sent it in case
* wants to react to it.
*/
LRESULT on(message<WM_COMMAND> m)
{
window_impl* w = window_from_hwnd(m.control_hwnd());
assert(w != this);
w->handle_command(m.command_code(), m.wparam(), m.lparam());
return default_message_handler(m);
}
protected:
control_parent_impl(
const std::wstring& title, short left, short top, short width,
short height)
:
window_impl(title, left, top, width, height) {}
};
}} // namespace ezel::detail
#endif
================================================
FILE: ezel/controls/button.hpp
================================================
/**
@file
GUI button control.
@if license
Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.ac.uk>
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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
@endif
*/
#ifndef EZEL_CONTROLS_BUTTON_HPP
#define EZEL_CONTROLS_BUTTON_HPP
#pragma once
#include <ezel/control.hpp> // control base class
#include <ezel/detail/command_dispatch.hpp> // command_map
#include <ezel/detail/window_impl.hpp> // window_impl
#include <washer/gui/commands.hpp> // command
#include <boost/shared_ptr.hpp> // shared_ptr
#include <boost/signal.hpp> // signal
#include <string>
namespace ezel {
namespace controls {
class button_impl : public ezel::detail::window_impl
{
public:
typedef ezel::detail::window_impl super;
typedef ezel::detail::command_map<BN_CLICKED> commands;
virtual void handle_command(
WORD command_id, WPARAM wparam, LPARAM lparam)
{
dispatch_command(this, command_id, wparam, lparam);
}
button_impl(
const std::wstring& title, short left, short top, short width,
short height, bool default)
:
ezel::detail::window_impl(title, left, top, width, height),
m_default(default) {}
std::wstring window_class() const { return L"button"; }
DWORD style() const
{
DWORD style = WS_CHILD | WS_VISIBLE | WS_TABSTOP;
style |= (m_default) ? BS_DEFPUSHBUTTON : BS_PUSHBUTTON;
return style;
}
boost::signal<void ()>& on_click() { return m_on_click; }
void on(command<BN_CLICKED>) { m_on_click(); }
private:
boost::signal<void ()> m_on_click;
bool m_default;
};
class button : public ezel::control<button_impl>
{
public:
button(
const std::wstring& title, short left, short top, short width,
short height, bool default=false)
:
control<button_impl>(
boost::shared_ptr<button_impl>(
new button_impl(title, left, top, width, height, default))) {}
boost::signal<void ()>& on_click() { return impl()->on_click(); }
short left() const { return impl()->left(); }
short top() const { return impl()->top(); }
short width() const { return impl()->width(); }
short height() const { return impl()->height(); }
};
}} // namespace ezel::controls
#endif
================================================
FILE: ezel/controls/checkbox.hpp
================================================
/**
@file
GUI check-box control.
@if license
Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.ac.uk>
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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
@endif
*/
#ifndef EZEL_CONTROLS_CHECKBOX_HPP
#define EZEL_CONTROLS_CHECKBOX_HPP
#pragma once
#include <ezel/control.hpp> // control base class
#include <ezel/detail/window_impl.hpp> // window_impl
#include <boost/function.hpp> // function
#include <boost/shared_ptr.hpp> // shared_ptr
#include <string>
namespace ezel {
namespace controls {
typedef boost::function<void (void)> on_click_callback;
class checkbox_impl : public ezel::detail::window_impl
{
public:
typedef ezel::detail::window_impl super;
typedef ezel::detail::command_map<BN_CLICKED> commands;
virtual void handle_command(
WORD command_id, WPARAM wparam, LPARAM lparam)
{
dispatch_command(this, command_id, wparam, lparam);
}
checkbox_impl(
const std::wstring& text, short left, short top, short width,
short height)
:
ezel::detail::window_impl(text, left, top, width, height)
{}
std::wstring window_class() const { return L"button"; }
DWORD style() const
{
return WS_CHILD | WS_VISIBLE | BS_CHECKBOX | WS_TABSTOP;
}
boost::signal<void ()>& on_click() { return m_on_click; }
void on(command<BN_CLICKED>) { m_on_click(); }
private:
boost::signal<void ()> m_on_click;
bool m_default;
};
class checkbox : public ezel::control<checkbox_impl>
{
public:
checkbox(
const std::wstring& text, short left, short top, short width,
short height)
:
control<checkbox_impl>(
boost::shared_ptr<checkbox_impl>(
new checkbox_impl(text, left, top, width, height))) {}
std::wstring text() const { return impl()->text(); }
short left() const { return impl()->left(); }
short top() const { return impl()->top(); }
short width() const { return impl()->width(); }
short height() const { return impl()->height(); }
};
}} // namespace ezel::controls
#endif
================================================
FILE: ezel/controls/edit.hpp
================================================
/**
@file
GUI edit (text) control.
@if license
Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.ac.uk>
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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
@endif
*/
#ifndef EZEL_CONTROLS_EDIT_HPP
#define EZEL_CONTROLS_EDIT_HPP
#pragma once
#include <ezel/control.hpp> // control base class
#include <ezel/detail/window_impl.hpp> // window_impl
#include <boost/shared_ptr.hpp> // shared_ptr
#include <boost/signal.hpp> // signal
#include <string>
namespace ezel {
namespace controls {
class edit_impl : public ezel::detail::window_impl
{
public:
typedef ezel::detail::window_impl super;
typedef ezel::detail::command_map<EN_CHANGE, EN_UPDATE> commands;
virtual void handle_command(
WORD command_id, WPARAM wparam, LPARAM lparam)
{
dispatch_command(this, command_id, wparam, lparam);
}
edit_impl(
const std::wstring& text, short left, short top, short width,
short height, DWORD custom_style)
:
ezel::detail::window_impl(text, left, top, width, height),
m_custom_style(custom_style) {}
std::wstring window_class() const { return L"Edit"; }
DWORD style() const
{
DWORD style = ezel::detail::window_impl::style() |
WS_CHILD | ES_LEFT | WS_BORDER | ES_AUTOHSCROLL;
style |= m_custom_style;
return style;
}
boost::signal<void ()>& on_change() { return m_on_change; }
boost::signal<void ()>& on_update() { return m_on_update; }
void on(command<EN_CHANGE>) { m_on_change(); }
void on(command<EN_UPDATE>) { m_on_update(); }
private:
boost::signal<void ()> m_on_change;
boost::signal<void ()> m_on_update;
DWORD m_custom_style;
};
class edit : public ezel::control<edit_impl>
{
public:
struct style
{
enum value
{
default = 0,
password = ES_PASSWORD,
force_lowercase = ES_LOWERCASE,
only_allow_numbers = ES_NUMBER
};
};
edit(
const std::wstring& text, short left, short top, short width,
short height, style::value custom_style=style::default)
:
control<edit_impl>(
boost::shared_ptr<edit_impl>(
new edit_impl(
text, left, top, width, height, custom_style))) {}
boost::signal<void ()>& on_change() { return impl()->on_change(); }
boost::signal<void ()>& on_update() { return impl()->on_update(); }
boost::signal<void (const wchar_t*)>& on_text_change()
{ return impl()->on_text_change(); }
boost::signal<void ()>& on_text_changed()
{ return impl()->on_text_changed(); }
short left() const { return impl()->left(); }
short top() const { return impl()->top(); }
short width() const { return impl()->width(); }
short height() const { return impl()->height(); }
};
}} // namespace ezel::controls
#endif
================================================
FILE: ezel/controls/icon.hpp
================================================
/**
@file
GUI icon control.
@if license
Copyright (C) 2010, 2013 Alexander Lamaison <awl03@doc.ic.ac.uk>
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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
@endif
*/
#ifndef EZEL_CONTROLS_ICON_HPP
#define EZEL_CONTROLS_ICON_HPP
#pragma once
#include <ezel/control.hpp> // control base class
#include <ezel/detail/window_impl.hpp> // window_impl
#include <washer/window/icon.hpp> // icon_window
#include <boost/shared_ptr.hpp> // shared_ptr
#include <string>
namespace ezel {
namespace controls {
class icon_impl : public ezel::detail::window_impl
{
protected:
typedef ezel::detail::window_impl super;
public:
icon_impl(short left, short top, short width, short height)
:
ezel::detail::window_impl(L"", left, top, width, height),
m_icon(NULL) {}
std::wstring window_class() const { return L"static"; }
DWORD style() const
{
DWORD style = ezel::detail::window_impl::style() |
WS_CHILD | SS_ICON | WS_GROUP | SS_NOTIFY | SS_CENTERIMAGE;
return style;
}
HICON change_icon(HICON new_icon)
{
if (!is_active())
{
HICON previous = m_icon;
m_icon = new_icon;
return previous;
}
else
{
washer::window::icon_window<wchar_t> icon(
washer::window::window_handle::foster_handle(hwnd()));
return icon.change_icon(new_icon);
}
}
protected:
/**
* Set the source of the icon to whatever the user set via change_icon.
*/
virtual void push()
{
super::push();
washer::send_message<wchar_t>(
hwnd(), STM_SETIMAGE, IMAGE_ICON, m_icon);
}
private:
HICON m_icon;
};
class icon : public ezel::control<icon_impl>
{
public:
struct style
{
enum value
{
default = 0,
ampersand_not_special = SS_NOPREFIX
};
};
icon(short left, short top, short width, short height)
:
control<icon_impl>(
boost::shared_ptr<icon_impl>(
new icon_impl(left, top, width, height))) {}
HICON change_icon(HICON new_icon) { return impl()->change_icon(new_icon); }
short left() const { return impl()->left(); }
short top() const { return impl()->top(); }
short width() const { return impl()->width(); }
short height() const { return impl()->height(); }
};
}} // namespace ezel::controls
#endif
================================================
FILE: ezel/controls/label.hpp
================================================
/**
@file
GUI label (static text) control.
@if license
Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.ac.uk>
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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
@endif
*/
#ifndef EZEL_CONTROLS_LABEL_HPP
#define EZEL_CONTROLS_LABEL_HPP
#pragma once
#include <ezel/control.hpp> // control base class
#include <ezel/detail/window_impl.hpp> // window_impl
#include <boost/shared_ptr.hpp> // shared_ptr
#include <string>
namespace ezel {
namespace controls {
class label_impl : public ezel::detail::window_impl
{
public:
label_impl(
const std::wstring& text, short left, short top, short width,
short height, DWORD custom_style)
:
ezel::detail::window_impl(text, left, top, width, height),
m_custom_style(custom_style) {}
std::wstring window_class() const { return L"static"; }
DWORD style() const
{
DWORD style = ezel::detail::window_impl::style() |
WS_CHILD | SS_LEFT | WS_GROUP | SS_NOTIFY;
style &= ~WS_TABSTOP;
style |= m_custom_style;
return style;
}
private:
DWORD m_custom_style;
};
class label : public ezel::control<label_impl>
{
public:
struct style
{
enum value
{
default = 0,
ampersand_not_special = SS_NOPREFIX
};
};
label(
const std::wstring& text, short left, short top, short width,
short height, style::value custom_style=style::default)
:
control<label_impl>(
boost::shared_ptr<label_impl>(
new label_impl(
text, left, top, width, height, custom_style))) {}
short left() const { return impl()->left(); }
short top() const { return impl()->top(); }
short width() const { return impl()->width(); }
short height() const { return impl()->height(); }
};
}} // namespace ezel::controls
#endif
================================================
FILE: ezel/controls/line.hpp
================================================
/**
@file
GUI horizontal line control.
@if license
Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.ac.uk>
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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
@endif
*/
#ifndef EZEL_CONTROLS_LINE_HPP
#define EZEL_CONTROLS_LINE_HPP
#pragma once
#include <ezel/control.hpp> // control base class
#include <ezel/detail/window_impl.hpp> // window_impl
#include <boost/shared_ptr.hpp> // shared_ptr
#include <string>
namespace ezel {
namespace controls {
class line_impl : public ezel::detail::window_impl
{
public:
line_impl(short left, short top, short width)
:
ezel::detail::window_impl(L"", left, top, width, 1) {}
std::wstring window_class() const { return L"static"; }
DWORD style() const
{
return WS_CHILD | WS_VISIBLE | SS_ETCHEDHORZ | WS_GROUP | SS_NOTIFY;
}
};
class line : public ezel::control<line_impl>
{
public:
line(
short left, short top, short width)
:
control<line_impl>(
boost::shared_ptr<line_impl>(new line_impl(left, top, width)))
{}
short left() const { return impl()->left(); }
short top() const { return impl()->top(); }
short width() const { return impl()->width(); }
short height() const { return impl()->height(); }
};
}} // namespace ezel::controls
#endif
================================================
FILE: ezel/controls/spinner.hpp
================================================
/**
@file
GUI spinner control.
@if license
Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.ac.uk>
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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
@endif
*/
#ifndef EZEL_CONTROLS_SPINNER_HPP
#define EZEL_CONTROLS_SPINNER_HPP
#pragma once
#include <ezel/control.hpp> // control base class
#include <ezel/detail/window_impl.hpp> // window_impl
#include <washer/message.hpp> // send_message
#include <boost/shared_ptr.hpp> // shared_ptr
#include <boost/cstdint.hpp> // int32_t
#include <string>
#include <Commctrl.h> // UDS_*, UDM_*
namespace ezel {
namespace controls {
class spinner_impl : public ezel::detail::window_impl
{
protected:
typedef ezel::detail::window_impl super;
public:
spinner_impl(
short left, short top, short width, short height,
boost::int32_t minimum, boost::int32_t maximum,
boost::int32_t initial_value, DWORD custom_style)
:
ezel::detail::window_impl(L"", left, top, width, height),
m_min(minimum), m_max(maximum), m_value(initial_value),
m_custom_style(custom_style) {}
std::wstring window_class() const { return L"msctls_updown32"; }
DWORD style() const
{
DWORD style = ezel::detail::window_impl::style() |
WS_CHILD | UDS_ARROWKEYS | UDS_SETBUDDYINT | UDS_AUTOBUDDY;
style |= m_custom_style;
return style;
}
void range(boost::int32_t minimum, boost::int32_t maximum)
{
if (!is_active())
{
m_min = minimum;
m_max = maximum;
}
else
{
washer::send_message<wchar_t>(
hwnd(), UDM_SETRANGE32, minimum, maximum);
}
}
boost::int32_t value(boost::int32_t v)
{
if (!is_active())
m_value = v;
else
return washer::send_message_return<wchar_t, boost::int32_t>(
hwnd(), UDM_SETPOS32, 0, v);
}
protected:
/**
* Set the initial range of the spinner.
*/
virtual void push()
{
super::push();
washer::send_message<wchar_t>(hwnd(), UDM_SETRANGE32, m_min, m_max);
washer::send_message<wchar_t>(hwnd(), UDM_SETPOS32, 0, m_value);
}
private:
boost::int32_t m_min;
boost::int32_t m_max;
boost::int32_t m_value;
DWORD m_custom_style;
};
class spinner : public ezel::control<spinner_impl>
{
public:
struct style
{
enum value
{
default = 0,
no_thousand_separator = UDS_NOTHOUSANDS,
wrap_sequence = UDS_WRAP
};
};
spinner(
short left, short top, short width, short height,
boost::int32_t minimum, boost::int32_t maximum,
boost::int32_t initial_value,
style::value custom_style=style::default)
:
control<spinner_impl>(
boost::shared_ptr<spinner_impl>(
new spinner_impl(
left, top, width, height, minimum, maximum, initial_value,
custom_style)))
{}
void range(boost::int32_t minimum, boost::int32_t maximum)
{ impl()->range(minimum, maximum); }
boost::int32_t value(boost::int32_t new_value)
{ return impl()->value(new_value); }
short left() const { return impl()->left(); }
short top() const { return impl()->top(); }
short width() const { return impl()->width(); }
short height() const { return impl()->height(); }
};
}} // namespace ezel::controls
#endif
================================================
FILE: ezel/detail/command_dispatch.hpp
================================================
/**
@file
Command message dispatch.
@if license
Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.ac.uk>
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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
@endif
*/
#ifndef EZEL_COMMAND_DISPATCH_HPP
#define EZEL_COMMAND_DISPATCH_HPP
#pragma once
#include <washer/gui/commands.hpp> // command
#ifndef BOOST_MPL_LIMIT_VECTOR_SIZE
#define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
#endif
#ifndef BOOST_MPL_LIMIT_VECTOR_SIZE
#define BOOST_MPL_LIMIT_VECTOR_SIZE 50
#endif
#include <boost/mpl/begin_end.hpp> // begin, end
#include <boost/mpl/copy_if.hpp> // copy_if
#include <boost/mpl/not_equal_to.hpp> // not_equal_to
#include <boost/mpl/vector_c.hpp> // vector_c
#include <boost/type_traits/is_same.hpp> // is_same
#define EZEL_COMMAND_MAP_TEMPLATE \
int EZC0=-1, int EZC1=-1, int EZC2=-1, int EZC3=-1, int EZC4=-1, \
int EZC5=-1, int EZC6=-1, int EZC7=-1, int EZC8=-1, int EZC9=-1, \
int EZC10=-1, int EZC11=-1, int EZC12=-1, int EZC13=-1, int EZC14=-1, \
int EZC15=-1, int EZC16=-1, int EZC17=-1, int EZC18=-1, int EZC19=-1, \
int EZC20=-1, int EZC21=-1, int EZC22=-1, int EZC23=-1, int EZC24=-1, \
int EZC25=-1, int EZC26=-1, int EZC27=-1, int EZC28=-1, int EZC29=-1, \
int EZC30=-1, int EZC31=-1, int EZC32=-1, int EZC33=-1, int EZC34=-1, \
int EZC35=-1, int EZC36=-1, int EZC37=-1, int EZC38=-1, int EZC39=-1, \
int EZC40=-1, int EZC41=-1, int EZC42=-1, int EZC43=-1, int EZC44=-1, \
int EZC45=-1, int EZC46=-1, int EZC47=-1, int EZC48=-1, int EZC49=-1
#define EZEL_COMMAND_ARG \
EZC0, EZC1, EZC2, EZC3, EZC4, \
EZC5, EZC6, EZC7, EZC8, EZC9, \
EZC10, EZC11, EZC12, EZC13, EZC14, \
EZC15, EZC16, EZC17, EZC18, EZC19, \
EZC20, EZC21, EZC22, EZC23, EZC24, \
EZC25, EZC26, EZC27, EZC28, EZC29, \
EZC30, EZC31, EZC32, EZC33, EZC34, \
EZC35, EZC36, EZC37, EZC38, EZC39, \
EZC40, EZC41, EZC42, EZC43, EZC44, \
EZC45, EZC46, EZC47, EZC48, EZC49
namespace ezel {
namespace detail {
template<typename T>
inline void dispatch_command(T* obj, WORD id, WPARAM wparam, LPARAM lparam);
template<typename It, typename End, typename T>
inline void dispatch_command_next(
T* obj, WORD /*id*/, WPARAM wparam, LPARAM lparam, boost::mpl::true_)
{
obj->on(washer::gui::command_base(wparam, lparam));
}
template<typename It, typename End, typename T>
inline void dispatch_command_next(
T* obj, WORD id, WPARAM wparam, LPARAM lparam, boost::mpl::false_)
{
dispatch_command<T::super>(obj, id, wparam, lparam);
}
/**
* Dispatch conditionally based on whether we're at end of superclass chain.
*
* If we are, this command goes to the default command handler. Otherwise,
* we create a dispatch for the superclasses command map and delegate
* dispatch there.
*/
template<typename It, typename End, typename T>
inline void dispatch_command(
T* obj, WORD command_id, WPARAM wparam, LPARAM lparam, boost::mpl::true_)
{
return dispatch_command_next<It, End>(
obj, command_id, wparam, lparam, boost::is_same<T, T::super>::type());
}
template<typename It, typename End, typename T>
inline void dispatch_command(
T* obj, WORD command_id, WPARAM wparam, LPARAM lparam, boost::mpl::false_)
{
typedef boost::mpl::deref<It>::type Front;
typedef boost::mpl::next<It>::type Next;
if(command_id == Front::value)
{
return obj->on(command<Front::value>(wparam, lparam));
}
else
{
return dispatch_command<Next, End>(
obj, command_id, wparam, lparam,
typename boost::is_same<Next, End>::type());
}
}
/**
* Command dispatcher.
*
* Messages are dispatched to the superclasses of T one at a time until one is
* found whose command map contains the current command. Then its handler
* for that meassage is invoked.
* If we reach the end of the chain without finding a matching map entry,
* the command is delivered to the default command handler.
*/
template<typename T>
inline void dispatch_command(
T* obj, WORD command_id, WPARAM wparam, LPARAM lparam)
{
typedef boost::mpl::begin<T::commands::commands>::type Begin;
typedef boost::mpl::end<T::commands::commands>::type End;
dispatch_command<Begin, End>(
obj, command_id, wparam, lparam,
typename boost::is_same<Begin, End>::type());
}
template<EZEL_COMMAND_MAP_TEMPLATE>
class command_map
{
public:
// -1 is used to indicate an unused template parameter. To
// prevent us having to treat -1 as a special case, we filter it out of
// the command map immediately here
typedef typename boost::mpl::copy_if<
boost::mpl::vector_c<int, EZEL_COMMAND_ARG>,
boost::mpl::not_equal_to< boost::mpl::_1, boost::mpl::int_<-1> >,
boost::mpl::back_inserter< boost::mpl::vector_c<WORD> >
>::type commands;
};
}} // namespace washer::gui
#endif
================================================
FILE: ezel/detail/dialog_template.hpp
================================================
/**
@file
Windows dialog in-memory template helpers
@if license
Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.ac.uk>
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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
@endif
*/
#ifndef EZEL_DETAIL_DIALOG_TEMPLATE_HPP
#define EZEL_DETAIL_DIALOG_TEMPLATE_HPP
#pragma once
#include <ezel/detail/window_impl.hpp> // window_impl
#include <boost/foreach.hpp> // BOOST_FOREACH
#include <boost/numeric/conversion/cast.hpp> // numeric_cast
#include <boost/shared_ptr.hpp> // shared_ptr
#include <boost/static_assert.hpp> // BOOST_STATIC_ASSERT
#include <algorithm> // copy
#include <string>
#include <vector>
namespace ezel {
namespace detail {
#pragma warning(push)
#pragma warning(disable: 4996) // std::copy: Function call that may be unsafe
// the calculations rely on pointer-arithmetic on wchar_t pointers
// skipping 16-bit (WORD-sized) fields
BOOST_STATIC_ASSERT(sizeof(wchar_t) == 2); // 16-bits
BOOST_STATIC_ASSERT(sizeof(wchar_t) == sizeof(WORD));
/**
* If the pointer is already DWORD-aligned return it unchanged otherwise
* advance to the next DWORD boundary.
*/
template<typename T>
inline T* next_double_word(T* p)
{
return reinterpret_cast<T*>((reinterpret_cast<size_t>(p) + 3) & ~3);
}
/**
* If the pointer is already WORD-aligned return it unchanged otherwise
* advance to the next WORD boundary.
*/
template<typename T>
inline T* next_word(T* p)
{
return reinterpret_cast<T*>((reinterpret_cast<size_t>(p) + 1) & ~1);
}
/**
* Calculate the necessary buffer size for a dialog template.
*
* Apparently all the fields are naturally WORD-aligned so we don't need to
* force it explicitly
* (@see http://msdn.microsoft.com/en-us/library/ms644996%28VS.85%29.aspx in
* the user contrib comments) but we do so anyway just to be on the safe side.
*/
inline size_t calculate_template_size(
const std::wstring& title, const std::wstring& font)
{
DLGTEMPLATE* dlg = 0;
// template
wchar_t* pos = reinterpret_cast<wchar_t*>(dlg + 1);
pos = next_word(pos) + 1; // menu (1)
pos = next_word(pos) + 1; // window class (1)
// title (?) + terminator (1)
wchar_t* title_array = next_word(pos);
title_array = title_array + title.size() + 1;
// fontsize (1)
pos = next_word(title_array);
pos = pos + 1;
// font (?) + terminator (1)
wchar_t* font_array = next_word(pos);
font_array = next_word(font_array) + font.size() + 1;
// padding
return reinterpret_cast<size_t>(next_double_word(font_array));
}
/**
* Write the DLGTEMPLATE part of a Dialog template.
*
* Assumes the buffer is big enough to fit the data. Use
* calculate_template_size to calculate the nescessary size.
*/
inline DLGITEMTEMPLATE* write_template_to_buffer(
const std::wstring& title, short font_size, const std::wstring& font,
short left, short top, short width, short height, size_t control_count,
DLGTEMPLATE* dlg)
{
// dlg buffer must already be DWORD aligned
assert((((int)dlg) % sizeof(DWORD)) == 0);
dlg->style = DS_SETFONT | WS_VISIBLE | WS_POPUPWINDOW | DS_MODALFRAME;
if (!title.empty())
dlg->style |= WS_CAPTION;
dlg->cx = width;
dlg->cy = height;
dlg->x = left;
dlg->y = top;
dlg->cdit = boost::numeric_cast<WORD>(control_count);
wchar_t* pos = reinterpret_cast<wchar_t*>(dlg + 1);
pos = next_word(pos);
*pos++ = 0; // no menu
pos = next_word(pos);
*pos++ = 0; // default dialog window class
// caption
wchar_t* title_array = next_word(pos);
title_array = std::copy(title.begin(), title.end(), title_array);
*title_array++ = 0; // null-terminate
// font size
pos = next_word(title_array);
*pos++ = font_size;
// font name
wchar_t* font_array = next_word(pos);
font_array = std::copy(font.begin(), font.end(), font_array);
*font_array++ = 0; // null-terminate
return reinterpret_cast<DLGITEMTEMPLATE*>(next_double_word(font_array));
}
/**
* Calculate the necessary buffer size for an item template.
*
* Apparently all the fields are naturally WORD-aligned so we don't need to
* force it explicitly
* (@see http://msdn.microsoft.com/en-us/library/ms644996%28VS.85%29.aspx in
* the user contrib comments) but we do so anyway just to be on the safe side.
*
* After the custom data field we have to add en extra WORD of buffer *not*
* including any extra needed for DWORD-alignment. This does not match the
* MSDN documentation but is required.
*/
template<typename Customdata>
inline size_t calculate_control_template_size(
const std::wstring& window_class, const std::wstring& title,
size_t current_buffer_size)
{
// item template
DLGITEMTEMPLATE* item =
reinterpret_cast<DLGITEMTEMPLATE*>(current_buffer_size);
item = next_double_word(item) + 1;
// class (?) + terminator (1)
wchar_t* class_array = reinterpret_cast<wchar_t*>(item);
class_array = next_word(class_array) + window_class.size() + 1;
// title (?) + terminator (1)
wchar_t* title_array = class_array + 1;
title_array = next_word(title_array) + title.size() + 1;
// custom data size (1) + custom data (?) + extra WORD (1)
wchar_t* custom_data_size = title_array + 1;
custom_data_size = next_word(custom_data_size);
Customdata* data = reinterpret_cast<Customdata*>(custom_data_size + 1);
data++;
wchar_t* mystery_extra = reinterpret_cast<wchar_t*>(data);
mystery_extra++;
return reinterpret_cast<size_t>(next_double_word(mystery_extra));
}
/**
* Write a DLGITEMTEMPLATE entry for a dialog control.
*
* Assumes the buffer is big enough to fit the data. Use
* calculate_item_template_size to calculate the nescessary size.
*/
template<typename CustomData>
inline DLGITEMTEMPLATE* write_control_to_buffer(
const std::wstring& window_class, const std::wstring& title,
unsigned short id, DWORD style,
short width, short height, short left, short top,
const CustomData& custom_data, DLGITEMTEMPLATE* buffer)
{
DLGITEMTEMPLATE* item = next_double_word(buffer);
item->style = style;
item->id = id;
item->cx = width;
item->cy = height;
item->x = left;
item->y = top;
item = item + 1; // skip over template
// control window class name
wchar_t* class_array = reinterpret_cast<wchar_t*>(next_word(item));
class_array = std::copy(
window_class.begin(), window_class.end(), class_array);
*class_array++ = 0; // null-terminate
// title
wchar_t* title_array = next_word(class_array);
title_array = std::copy(title.begin(), title.end(), title_array);
*title_array++ = 0; // null-terminate
// custom data size must include its own memory in the size value
wchar_t* custom_data_size = next_word(title_array);
*custom_data_size++ = sizeof(wchar_t) + sizeof(CustomData);
CustomData* data = reinterpret_cast<CustomData*>(custom_data_size);
*data++ = custom_data;
wchar_t* mystery_extra = reinterpret_cast<wchar_t*>(data);
mystery_extra++;
return reinterpret_cast<DLGITEMTEMPLATE*>(next_double_word(mystery_extra));
}
/**
* The required buffer size to store the window as a control in a
* dialog template.
*/
inline size_t increment_required_buffer_size(
const window_impl* w, size_t current_buffer_size)
{
return calculate_control_template_size<window_impl*>(
w->window_class(), w->text(), current_buffer_size);
}
/**
* Write the window to a byte buffer as a control in a dialog template.
*/
inline DLGITEMTEMPLATE* to_buffer(
window_impl* w, unsigned short id, DLGITEMTEMPLATE* buffer)
{
return write_control_to_buffer(
w->window_class(), w->text(), id, w->style(),
w->width(), w->height(), w->left(), w->top(),
w, buffer);
}
const unsigned short BUTTON_ID_OFFSET = 100;
/**
* Build a dialog resource template in memory.
*/
inline std::vector<unsigned char> build_dialog_template_in_memory(
const std::wstring& font, short font_size, const std::wstring& title,
short width, short height, short left, short top,
const std::vector<boost::shared_ptr<window_impl> >& controls)
{
size_t buffer_len = calculate_template_size(title, font);
BOOST_FOREACH(boost::shared_ptr<window_impl> w, controls)
{
buffer_len = increment_required_buffer_size(w.get(), buffer_len);
}
std::vector<unsigned char> buffer(buffer_len, 0);
DLGITEMTEMPLATE* pos = write_template_to_buffer(
title, font_size, font, width, height, left, top,
controls.size(), reinterpret_cast<DLGTEMPLATE*>(&buffer[0]));
for (size_t i = 0; i < controls.size(); ++i)
{
window_impl* w = controls[i].get();
// offset ID to avoid collision with dialog manager's
// 'special' button IDs
unsigned short id = boost::numeric_cast<unsigned short>(
i + BUTTON_ID_OFFSET);
pos = to_buffer(
w, id, reinterpret_cast<DLGITEMTEMPLATE*>(pos));
}
return buffer;
}
#pragma warning(pop)
}} // namespace ezel::detail
#endif
================================================
FILE: ezel/detail/hooks.hpp
================================================
/**
@file
Window creation hooks
@if license
Copyright (C) 2010, 2011 Alexander Lamaison <awl03@doc.ic.ac.uk>
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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
@endif
*/
#ifndef EZEL_HOOKS_HPP
#define EZEL_HOOKS_HPP
#pragma once
#include <ezel/detail/window_impl.hpp> // window_impl
#include <washer/hook.hpp> // windows_hook
#include <iostream> // cerr
#include <Winuser.h> // CallNextHookEx
namespace ezel {
namespace detail {
namespace native {
/// @name CREATESTRUCT
// @{
template<typename T> struct create_struct;
template<> struct create_struct<char>
{ typedef CREATESTRUCTA type; };
template<> struct create_struct<wchar_t>
{ typedef CREATESTRUCTW type; };
// @}
/// @name CBT_CREATEWND
// @{
template<typename T> struct cbt_createwnd;
template<> struct cbt_createwnd<char>
{ typedef CBT_CREATEWNDA type; };
template<> struct cbt_createwnd<wchar_t>
{ typedef CBT_CREATEWNDW type; };
// @}
}
template<typename T>
inline void handle_create(
HWND hwnd, HWND /*insert_after*/,
typename native::create_struct<T>::type& create_info)
{
UNALIGNED wchar_t* data =
static_cast<UNALIGNED wchar_t*>(create_info.lpCreateParams);
if (data)
{
assert(*data == sizeof(wchar_t) + sizeof(window_impl*));
data++; // skip size
window_impl* w = *reinterpret_cast<window_impl**>(data);
w->attach(hwnd);
}
}
template<typename T>
inline void handle_destroy(HWND hwnd)
{
window_impl* this_window =
fetch_user_window_data<T, window_impl*>(hwnd);
this_window->detach();
}
/**
* Hooking procedure called by Windows any time a GUI event happens.
*
* This function captures window creation and establishes a two-way link
* between the Win32 window object and the C++ wrapper object.
*
* @todo Pass *this* hook as first param for Windows 9x.
*/
template<typename T>
inline LRESULT CALLBACK cbt_hook_function(
int code, WPARAM wparam, LPARAM lparam)
{
try
{
if (code == HCBT_CREATEWND)
{
HWND hwnd = reinterpret_cast<HWND>(wparam);
typedef typename native::cbt_createwnd<T>::type* cbt_param;
cbt_param cbt_info = reinterpret_cast<cbt_param>(lparam);
handle_create<T>(
hwnd, cbt_info->hwndInsertAfter, *(cbt_info->lpcs));
}
else if (code == HCBT_DESTROYWND)
{
//handle_destroy<T>(reinterpret_cast<HWND>(wparam));
}
}
catch (std::exception& e)
{
std::cerr << e.what();
}
// TODO: pass *this* hook as first param for Windows 9x
LRESULT rc = ::CallNextHookEx(NULL, code, wparam, lparam);
return rc;
}
/**
* Sets up and tears down window event hooks.
*
* Declare one static instance of this class in order to register window
* creation.
*/
template<typename T>
class creation_hooks
{
public:
creation_hooks()
:
m_cbt_hook(washer::windows_hook(WH_CBT, &cbt_hook_function<T>)) {}
private:
washer::hhook m_cbt_hook;
};
}} // namespace ezel::detail
#endif
================================================
FILE: ezel/detail/hwnd_linking.hpp
================================================
/**
@file
Low-level HWND manipulation.
@if license
Copyright (C) 2010, 2011 Alexander Lamaison <awl03@doc.ic.ac.uk>
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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
@endif
*/
#ifndef EZEL_DETAIL_WINDOW_HPP
#define EZEL_DETAIL_WINDOW_HPP
#pragma once
#include <washer/error.hpp> // last_error
#include <washer/gui/hwnd.hpp> // set_window_field, window_field
namespace ezel {
namespace detail {
/**
* Store a value in the GWLP_USERDATA segment of the window descriptor.
*
* The value type must be no bigger than a LONG_PTR.
*/
template<typename T, typename U>
inline void store_user_window_data(HWND hwnd, const U& data)
{
washer::gui::set_window_field<T>(hwnd, GWLP_USERDATA, data);
}
/**
* Store a value in the DWLP_USER segment of the window descriptor.
*
* The value type must be no bigger than a LONG_PTR.
*/
template<typename T, typename U>
inline void store_dialog_window_data(HWND hwnd, const U& data)
{
washer::gui::set_window_field<T>(hwnd, DWLP_USER, data);
}
/**
* Get a value previously stored in the GWLP_USERDATA segment of the
* window descriptor.
*
* The value type must be no bigger than a LONG_PTR.
*
* @throws system_error if there is an error or if no value has yet been
* stored.
* @note Storing 0 will count as not having a previous value so will
* throw an exception.
*/
template<typename T, typename U>
inline U fetch_user_window_data(HWND hwnd)
{
return washer::gui::window_field<T, U>(hwnd, GWLP_USERDATA);
}
/**
* Get a value previously stored in the DWLP_USER segment of the
* window descriptor.
*
* The value type must be no bigger than a LONG_PTR.
*
* @throws system_error if there is an error or if no value has yet been
* stored.
* @note Storing 0 will count as not having a previous value so will
* throw an exception.
*/
template<typename T, typename U>
inline U fetch_dialog_window_data(HWND hwnd)
{
return washer::gui::window_field<T, U>(hwnd, DWLP_USER);
}
}} // namespace ezel::detail
#endif
================================================
FILE: ezel/detail/message_dispatch.hpp
================================================
/**
@file
Message dispatch.
@if license
Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.ac.uk>
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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
@endif
*/
#ifndef EZEL_MESSAGE_DISPATCH_HPP
#define EZEL_MESSAGE_DISPATCH_HPP
#pragma once
#include <washer/gui/messages.hpp> // message
#ifndef BOOST_MPL_LIMIT_VECTOR_SIZE
#define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
#endif
#ifndef BOOST_MPL_LIMIT_VECTOR_SIZE
#define BOOST_MPL_LIMIT_VECTOR_SIZE 50
#endif
#include <boost/mpl/begin_end.hpp> // begin, end
#include <boost/mpl/copy_if.hpp> // copy_if
#include <boost/mpl/not_equal_to.hpp> // not_equal_to
#include <boost/mpl/vector_c.hpp> // vector_c
#include <boost/type_traits/is_same.hpp> // is_same
#define EZEL_MESSAGE_MAP_TEMPLATE \
UINT EZM0=0, UINT EZM1=0, UINT EZM2=0, UINT EZM3=0, UINT EZM4=0, \
UINT EZM5=0, UINT EZM6=0, UINT EZM7=0, UINT EZM8=0, UINT EZM9=0, \
UINT EZM10=0, UINT EZM11=0, UINT EZM12=0, UINT EZM13=0, UINT EZM14=0, \
UINT EZM15=0, UINT EZM16=0, UINT EZM17=0, UINT EZM18=0, UINT EZM19=0, \
UINT EZM20=0, UINT EZM21=0, UINT EZM22=0, UINT EZM23=0, UINT EZM24=0, \
UINT EZM25=0, UINT EZM26=0, UINT EZM27=0, UINT EZM28=0, UINT EZM29=0, \
UINT EZM30=0, UINT EZM31=0, UINT EZM32=0, UINT EZM33=0, UINT EZM34=0, \
UINT EZM35=0, UINT EZM36=0, UINT EZM37=0, UINT EZM38=0, UINT EZM39=0, \
UINT EZM40=0, UINT EZM41=0, UINT EZM42=0, UINT EZM43=0, UINT EZM44=0, \
UINT EZM45=0, UINT EZM46=0, UINT EZM47=0, UINT EZM48=0, UINT EZM49=0
#define EZEL_MESSAGE_ARG \
EZM0, EZM1, EZM2, EZM3, EZM4, \
EZM5, EZM6, EZM7, EZM8, EZM9, \
EZM10, EZM11, EZM12, EZM13, EZM14, \
EZM15, EZM16, EZM17, EZM18, EZM19, \
EZM20, EZM21, EZM22, EZM23, EZM24, \
EZM25, EZM26, EZM27, EZM28, EZM29, \
EZM30, EZM31, EZM32, EZM33, EZM34, \
EZM35, EZM36, EZM37, EZM38, EZM39, \
EZM40, EZM41, EZM42, EZM43, EZM44, \
EZM45, EZM46, EZM47, EZM48, EZM49
namespace ezel {
namespace detail {
template<typename T>
inline LRESULT dispatch_message_next(
T* obj, UINT message_id, WPARAM wparam, LPARAM lparam);
template<typename It, typename End, typename T>
inline LRESULT dispatch_message_next(
T* obj, UINT message_id, WPARAM wparam, LPARAM lparam, boost::mpl::true_)
{
return obj->default_message_handler(message_id, wparam, lparam);
}
template<typename It, typename End, typename T>
inline LRESULT dispatch_message_next(
T* obj, UINT message_id, WPARAM wparam, LPARAM lparam, boost::mpl::false_)
{
return dispatch_message<T::super>(obj, message_id, wparam, lparam);
}
/**
* Dispatch conditionally based on whether we're at end of superclass chain.
*
* If we are, this message goes to the default message handler. Otherwise,
* we create a dispatch for the superclasses message map and delegate
* dispatch there.
*/
template<typename It, typename End, typename T>
inline LRESULT dispatch_message(
T* obj, UINT message_id, WPARAM wparam, LPARAM lparam, boost::mpl::true_)
{
return dispatch_message_next<It, End>(
obj, message_id, wparam, lparam, boost::is_same<T, T::super>::type());
}
template<typename It, typename End, typename T>
inline LRESULT dispatch_message(
T* obj, UINT message_id, WPARAM wparam, LPARAM lparam, boost::mpl::false_)
{
typedef boost::mpl::deref<It>::type Front;
typedef boost::mpl::next<It>::type Next;
if(message_id == Front::value)
{
return obj->on(message<Front::value>(wparam, lparam));
}
else
{
return dispatch_message<Next, End>(
obj, message_id, wparam, lparam,
typename boost::is_same<Next, End>::type());
}
}
/**
* Main message handler.
*
* Messages are dispatched to the superclasses of T one at a time until one is
* found whose message map contains the current message. Then its handler for
* that meassage is invoked. If we reach the end of the chain without finding
* a matching map entry, the message is delivered to the default message
* handler.
*/
template<typename T>
inline LRESULT dispatch_message(
T* obj, UINT message_id, WPARAM wparam, LPARAM lparam)
{
typedef boost::mpl::begin<T::messages::messages>::type Begin;
typedef boost::mpl::end<T::messages::messages>::type End;
return dispatch_message<Begin, End>(
obj, message_id, wparam, lparam,
typename boost::is_same<Begin, End>::type());
}
template<EZEL_MESSAGE_MAP_TEMPLATE>
class message_map
{
public:
// Zero (0) is used to indicate an unused template parameter. To
// prevent us having to treat 0 as a special case, we filter it out of
// the message map immediately here
typedef typename boost::mpl::copy_if<
boost::mpl::vector_c<UINT, EZEL_MESSAGE_ARG>,
boost::mpl::not_equal_to< boost::mpl::_1, boost::mpl::int_<0> >,
boost::mpl::back_inserter< boost::mpl::vector_c<UINT> >
>::type messages;
};
}} // namespace washer::gui
#endif
================================================
FILE: ezel/detail/window_impl.hpp
================================================
/**
@file
HWND wrapper implementation.
@if license
Copyright (C) 2010, 2013 Alexander Lamaison <awl03@doc.ic.ac.uk>
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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
@endif
*/
#ifndef EZEL_DETAIL_WINDOW_IMPL_HPP
#define EZEL_DETAIL_WINDOW_IMPL_HPP
#pragma once
#include <ezel/detail/command_dispatch.hpp> // command_map
#include <ezel/detail/message_dispatch.hpp> // message_map
#include <ezel/detail/window_link.hpp> // window_link
#include <ezel/detail/window_proc.hpp> // window_proc_base, window_proc
#include <ezel/detail/window_proxy.hpp> // window_proxy
#include <washer/gui/messages.hpp> // message
#include <washer/gui/commands.hpp> // command
#include <washer/trace.hpp> // trace
#include <washer/window/window.hpp>
#include <boost/exception/diagnostic_information.hpp> // diagnostic_information
#include <boost/make_shared.hpp> // make_shared
#include <boost/noncopyable.hpp> // noncopyable
#include <boost/signal.hpp> // signal
#include <cassert> // assert
#include <string>
namespace ezel {
/**
* We are EXPLICITLY bringing the washer::gui::message/command classes into
* the ezel namespace.
*/
using washer::gui::message;
using washer::gui::command;
namespace detail {
void catch_form_creation(HWND hwnd, unsigned int msg, LPARAM lparam);
void catch_form_destruction(HWND hwnd, unsigned int msg);
LRESULT CALLBACK window_impl_proc(
HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam);
class window_impl;
/**
* Fetch C++ wrapper pointer embedded in WND data.
*/
inline window_impl* window_from_hwnd(HWND hwnd)
{
return fetch_user_window_data<wchar_t, window_impl*>(hwnd);
}
/**
* Interface for window wrappers used internally by window_impl.
*
* There are two implementations of this interface. One wraps a real Win32
* window which window_impl uses once it's been attached to an HWND. The
* other only simulates a window to holds the properties that a window_impl
* in initialised with as well as to reflect any property changes made before
* the real window is created.
*/
template<typename T>
class internal_window
{
public:
virtual std::basic_string<T> text() const = 0;
virtual void text(const std::basic_string<T>& new_text) = 0;
virtual bool is_visible() = 0;
virtual bool is_enabled() = 0;
virtual void visible(bool state) = 0;
virtual void enable(bool state) = 0;
virtual short left() const = 0;
virtual short top() const = 0;
virtual short width() const = 0;
virtual short height() const = 0;
};
/**
* Fake window holding properties before real window is attached.
*
* The purpose of this class is to maintain any properties which are set on
* a wrapper before it has been attached to a real Win32 window. It
* simulates the fields in the real window.
*/
template<typename T>
class fake_window : public internal_window<T>
{
public:
fake_window(
bool is_enabled, bool is_visible, const std::basic_string<T>& text,
short left, short top, short width, short height)
:
m_enabled(is_enabled), m_visible(is_visible), m_text(text),
m_left(left), m_top(top), m_width(width), m_height(height) {}
std::basic_string<T> text() const { return m_text; }
void text(const std::basic_string<T>& new_text) { m_text = new_text; }
bool is_visible() { return m_visible; }
bool is_enabled() { return m_enabled; }
void visible(bool state) { m_visible = state; }
void enable(bool state) { m_enabled = state; }
short left() const { return m_left; }
short top() const { return m_top; }
short width() const { return m_width; }
short height() const { return m_height; }
private:
std::basic_string<T> m_text;
bool m_enabled;
bool m_visible;
short m_left;
short m_top;
short m_width;
short m_height;
};
/**
* Wrapper around a real Win32 window.
*/
template<typename T>
class real_window : public internal_window<T>
{
public:
real_window(HWND hwnd) :
m_window(washer::window::window_handle::foster_handle(hwnd))
{
if (hwnd == NULL)
BOOST_THROW_EXCEPTION(std::logic_error("Invalid window handle"));
}
/**
* Window text.
*
* @note We could allow the caller to specify that they require narrow or
* wide string irrespective of whether this window is narrow or
* wide. However, the fake_window doesn't support this and
* this class must match its interface.
*/
std::basic_string<T> text() const { return window().text<T>(); }
/**
* Window text.
*
* @note We could allow the caller to pass this method a narrow or wide
* string irrespective of whether this window is narrow or wide.
* However, the fake_window doesn't support this and this
* class must match its interface.
*/
void text(const std::basic_string<T>& new_text)
{ window().text(new_text); }
bool is_visible() { return window().is_visible(); }
bool is_enabled() { return window().is_enabled(); }
void visible(bool state) { window().visible(state); }
void enable(bool state) { window().enable(state); }
short left() const { return window().position().left(); }
short top() const { return window().position().top(); }
short width() const { return window().position().width(); }
short height() const { return window().position().height(); }
private:
washer::window::window<T>& window() { return m_window; }
const washer::window::window<T>& window() const { return m_window; }
washer::window::window<T> m_window;
};
template<typename T>
void copy_fields(internal_window<T>& source, internal_window<T>& target)
{
target.text(source.text());
target.enable(source.is_enabled());
target.visible(source.is_visible());
}
/**
* Window handle (HWND) wrapper class.
*
* Only one instance must exist per HWND so this class in non-copyable.
* Clients use it via facade classes that reference the single instances
* via a shared pointer.
*
* The lifetime of the class has three phases:
*
* - before it is connected to an HWND.
* The data in the fields of this class are the data that the Win32 window
* will be initialised with (via a dialog template) when the Window dialog
* manager calls CreateWindow.
*
* - while connected to an HWND.
* Method of this class fetch their data directly from the Win32 object.
* Member fields are ignored.
*
* - after detaching from an HWND (when the Win32 window is destroyed)
* The Win32 data is pulled in just before destruction and stored in the
* member fields. Subsequent method calls use this data.
*/
class window_impl : private boost::noncopyable
{
public:
typedef window_impl super; // end of dispatch chain
typedef message_map<
WM_CREATE, WM_DESTROY, WM_NCDESTROY, WM_SETTEXT, WM_SHOWWINDOW>
messages;
typedef command_map<-1> commands;
virtual LRESULT handle_message(
UINT message_id, WPARAM wparam, LPARAM lparam)
{
return dispatch_message(this, message_id, wparam, lparam);
}
virtual void handle_command(
WORD command_id, WPARAM wparam, LPARAM lparam)
{
dispatch_command(this, command_id, wparam, lparam);
}
window_impl(
const std::wstring& text, short left, short top, short width,
short height)
:
m_window(
boost::make_shared< fake_window<wchar_t> >(
true, true, text, left, top, width, height)) {}
virtual ~window_impl()
{
assert(!m_link.attached()); // why have we not detached?
}
bool is_active() const { return m_link.attached(); }
virtual std::wstring window_class() const = 0;
virtual DWORD style() const
{
return WS_VISIBLE | WS_TABSTOP;
}
short left() const { return window().left(); }
short top() const { return window().top(); }
short width() const { return window().width(); }
short height() const { return window().height(); }
std::wstring text() const { return window().text(); }
void text(const std::wstring& new_text) { window().text(new_text); }
void visible(bool state) { window().visible(state); }
void enable(bool state) { window().enable(state); }
/// @name Event handlers
// @{
/**
* @name Lifetime events
*
* The main purpose of these handlers is to synchronise C++ wrapper
* and the real Win32 window. The wrapper's fields can be set before the
* real window is created and callers need access to the fields after the
* real window is destroyed. Therefore we push the data out to the
* window when it's created and pull it back just before it's destroyed.
*
* We do this with the @c WM_CREATE and @c WM_DESTROY messages (rather
* than @c WM_NCCREATE and @c WM_NCDESTROY) as we can't be sure of the
* fields' integrity outside of this 'safe zone'. For example, when
* common controls 6 is enabled setting an icon before @c WM_CREATE
* fails to show the icon.
*/
LRESULT on(message<WM_CREATE> m)
{
LRESULT res = default_message_handler(m);
push();
return res;
}
LRESULT on(message<WM_DESTROY> m)
{
pull();
return default_message_handler(m);
}
/**
* To prevent capturing creation of windows not directly part of our
* dialog template, such as the system menu, we engage our CBT hook for
* as short a period as possible. Therefore we have to detach ourselves
* in this function rather than from the CBT hook.
*
* @see ezel::detail::cbt_hook_function.
*/
LRESULT on(message<WM_NCDESTROY> m)
{
LRESULT res = default_message_handler(m);
detach();
return res;
}
// @}
LRESULT on(message<WM_SETTEXT> m)
{
m_on_text_change(m.text<wchar_t>());
LRESULT res = default_message_handler(m);
m_on_text_changed();
return res;
}
LRESULT on(message<WM_SHOWWINDOW> m)
{
m_on_showing(m.state());
LRESULT res = default_message_handler(m);
m_on_show(m.state());
return res;
}
// @}
/**
* Perform default processing for a message.
*
* This method must call the window procedure of the wrapped window.
* Here it's done through a call to CallWindowProc but dialog windows
* must do this differently so should override this method.
*/
virtual LRESULT default_message_handler(
UINT message_id, WPARAM wparam, LPARAM lparam)
{
return m_window_proc->do_default_handling(message_id, wparam, lparam);
}
template<UINT N>
LRESULT default_message_handler(const message<N>& m)
{
return default_message_handler(N, m.wparam(), m.lparam());
}
/**
* Default command handler.
*
* Command message that aren't handled elsewhere are dispatched to this
* function. By default, it does nothing. Override if you want to
* to handle unhandled command messages.
*/
virtual void on(washer::gui::command_base unknown)
{
(void)unknown;
#ifdef _DEBUG
window_impl* w = window_from_hwnd(unknown.control_hwnd());
washer::trace(
"Unhandled command (code 0x%x) from window with title '%s'")
% unknown.command_code() % w->text();
#endif
}
/**
* Establish a two-way link between this C++ wrapper object and the
* Win32 window object.
*
* Also replace the Win32 window's message handling procedure (WNDPROC)
* with our own so that we can intercept any messages it is sent. This
* is otherwise known as subclassing.
*
* We don't push the wrapper fields out to the Win32 window yet as it's
* much too early. This is called by the CBT hook and at this point the
* window hasn't even recieved an WM_NCCREATE message yet.
*
* @todo What if we get a failure partway through?
*/
void attach(HWND hwnd)
{
assert(!m_link.attached()); // an instance should only be attached once
m_link = window_link<window_impl>(hwnd, this);
m_window.attach(hwnd);
install_window_procedure();
}
/// @name Event delegates
// @{
boost::signal<void (const wchar_t*)>& on_text_change()
{ return m_on_text_change; }
boost::signal<void ()>& on_text_changed()
{ return m_on_text_changed; }
boost::signal<void (bool)>& on_showing() { return m_on_showing; }
boost::signal<void (bool)>& on_show() { return m_on_show; }
// @}
protected:
HWND hwnd() const { return m_link.hwnd(); }
/**
* Suck data from real Win32 window object into the wrapper class.
*
* This method exists so that properties of the window are still available
* after the real window has been destroyed.
*
* Override this method when subclasses have other fields that need to
* be sucked out of the window. In most cases the overriding method must
* call this method of the base class to synchronise all the fields.
*/
virtual void pull()
{
m_window.pull();
}
/**
* Update Win32 window object from fields in this wrapper class.
*
* Fields can be set in the wrapper before the Win32 window is created.
* This window pushes those values out to the real window once it is
* created.
*
* Override this method when subclasses have other fields that need to
* be pushed out to the window. In most cases the overriding method must
* call this method of the base class to synchronise all the fields.
*
* @todo Some of this pushing is redundant as the values are set in
* the dialogue template. Not necessarily harmful but worth
* further thought.
*/
virtual void push()
{
m_window.push();
}
boost::shared_ptr<window_proc_base>& window_procedure()
{ return m_window_proc; }
private:
/**
* Break the two-way link between this C++ wrapper object and the
* Win32 window object.
*
* The fields of the Win32 must have been pulled in by our window
* proc when it recieved WM_DESTROY. That message is the last point at
* which we can be sure of the fields' integrity.
*
* @bug If someone has subclassed us but not removed their hook by the
* time they pass us the the WM_NCDESTROY message (bad!) then we
* never remove our hooks as we're not at the bottom of the
* subclass chain. The UpDown control seems to do this when
* it subclasses its buddy control.
*
* @todo Investigate SetWindowSubclass/RemoveWindowSubclass and
* whether it might fix the unsubclassing bug. Unfortunately,
* it may not work on earlier Windows versions.
*/
void detach()
{
assert(m_link.attached()); // why are we detaching a detached wrapper?
remove_window_procedure();
m_window.detach();
m_link = window_link<window_impl>();
}
/**
* Replace the window's own Window proc with ours.
*/
virtual void install_window_procedure()
{
window_procedure() =
boost::make_shared<window_proc>(hwnd(), window_impl_proc);
}
/**
* Remove our window proc and put back the one it came with.
*/
virtual void remove_window_procedure()
{
window_procedure().reset();
}
internal_window<wchar_t>& window() { return *m_window; }
const internal_window<wchar_t>& window() const { return *m_window; }
window_link<window_impl> m_link;
window_proxy<
internal_window<wchar_t>, fake_window<wchar_t>, real_window<wchar_t> >
m_window;
boost::shared_ptr<window_proc_base> m_window_proc;
/// @name Events
// @{
boost::signal<void (const wchar_t*)> m_on_text_change;
boost::signal<void ()> m_on_text_changed;
boost::signal<void (bool)> m_on_showing;
boost::signal<void (bool)> m_on_show;
// @}
};
/**
* Custom window procedure for wrapping HWNDs and intercepting their
* messages.
*/
inline LRESULT CALLBACK window_impl_proc(
HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{
try
{
window_impl* w = window_from_hwnd(hwnd);
return w->handle_message(message, wparam, lparam);
}
catch (const std::exception& e)
{
// We should always be able to get our window. If we were able to
// replace the window proc with this one then we must have hooked
// it correctly so why can't we find it now?
washer::trace("window_impl_proc exception: %s")
% boost::diagnostic_information(e);
assert(!"Something went very wrong here - we couldn't get our window");
return ::DefWindowProcW(hwnd, message, wparam, lparam);
}
}
}} // namespace ezel::detail
#endif
================================================
FILE: ezel/detail/window_link.hpp
================================================
/**
@file
HWND/wrapper linking.
@if license
Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.ac.uk>
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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
@endif
*/
#ifndef EZEL_DETAIL_WINDOW_LINK_HPP
#define EZEL_DETAIL_WINDOW_LINK_HPP
#pragma once
#include <ezel/detail/hwnd_linking.hpp> // store_user_window_data
#include <washer/trace.hpp> // trace
#include <boost/exception/diagnostic_information.hpp> // diagnostic_information
#include <boost/noncopyable.hpp> // noncopyable
#include <boost/shared_ptr.hpp> // shared_ptr, make_shared
namespace ezel {
namespace detail {
/**
* Link between a real Win32 window handle and a pointer to a window wrapper.
*
* The purpose of this class is to establish, maintain and then destroy a
* two-way link between an HWND and a C++ wrapper instance. The link
* is broken when the instance is destroyed. To explicitly break the link,
* assign a broken link to the existing link:
* @code link = window_link() @endcode
*
* Clients can query the status of the linked by calling attached().
*
* Stores the instance pointer in the HWND's user data field.
* @todo Store the pointer somewhere else to prevent issues including other
* uses accidentally overwriting our pointer.
*/
template<typename T>
class window_link_helper : private boost::noncopyable
{
public:
typedef T* pointer_type;
/// Link HWND to wrapper.
window_link_helper(HWND hwnd, pointer_type wrapper) : m_hwnd(hwnd)
{
store_user_window_data<wchar_t>(hwnd, wrapper);
}
/// Create a broken link.
window_link_helper() : m_hwnd(NULL) {}
/// Break link.
~window_link_helper()
{
try
{
if (attached())
store_user_window_data<wchar_t>(m_hwnd, pointer_type());
}
catch (const std::exception& e)
{
washer::trace("Unlinking window threw exception: %s")
% boost::diagnostic_information(e);
}
}
HWND hwnd() const { return m_hwnd; }
bool attached() const { return m_hwnd != NULL; }
private:
HWND m_hwnd;
};
/**
* Copyable link between a real Win32 window handle and a pointer to a window
* wrapper.
*
* The purpose of this class make the link implementation in window_link_helper
* break the link only when the last copy goes out-of-scope.
*
* The methods are the same as window_link_helper.
*/
template<typename T>
class window_link
{
public:
typedef T* pointer_type;
/// Link HWND to wrapper.
window_link(HWND hwnd, pointer_type wrapper)
: m_link(boost::make_shared<window_link_helper<T> >(hwnd, wrapper)) {}
/// Create a broken link.
window_link() : m_link(boost::make_shared<window_link_helper<T> >()) {}
HWND hwnd() const { return m_link->hwnd(); }
bool attached() const { return m_link->attached(); }
private:
boost::shared_ptr<window_link_helper<T> > m_link;
};
}} // namespace ezel::detail
#endif
================================================
FILE: ezel/detail/window_proc.hpp
================================================
/**
@file
Window procedures.
@if license
Copyright (C) 2010, 2013 Alexander Lamaison <awl03@doc.ic.ac.uk>
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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
@endif
*/
#ifndef EZEL_WINDOW_PROC_HPP
#define EZEL_WINDOW_PROC_HPP
#pragma once
#include <washer/trace.hpp> // trace
#include <washer/window/dialog.hpp> // dialog
#include <washer/window/window.hpp> // window
#include <cassert> // assert
#include <exception>
namespace ezel {
namespace detail {
class window_proc_base
{
public:
virtual ~window_proc_base() {}
virtual LRESULT do_default_handling(
UINT message_id, WPARAM wparam, LPARAM lparam) = 0;
};
/**
* Subclass a window with a standard window procdure (WNDPROC).
*/
class window_proc : public window_proc_base
{
public:
/**
* Subclass window.
*/
window_proc(HWND hwnd, WNDPROC new_proc) :
m_window(washer::window::window_handle::foster_handle(hwnd)),
m_proc(new_proc),
m_sub_proc(m_window.change_window_procedure(m_proc)) {}
/**
* Unsubclass window.
*/
~window_proc()
{
try
{
WNDPROC current_wndproc = m_window.window_procedure();
if (current_wndproc == m_proc)
{
WNDPROC proc = m_window.change_window_procedure(m_sub_proc);
(void)proc;
assert(proc == m_proc); // mustn't remove someone else's
// window procedure
}
}
catch (const std::exception& e)
{
washer::trace("window_proc destructor threw exception: %s")
% boost::diagnostic_information(e);
}
}
virtual LRESULT do_default_handling(
UINT message_id, WPARAM wparam, LPARAM lparam)
{
return ::CallWindowProcW(
m_sub_proc, m_window.hwnd(), message_id, wparam, lparam);
}
protected:
washer::window::window<wchar_t>& window() { return m_window; }
private:
washer::window::window<wchar_t> m_window;
WNDPROC m_proc;
WNDPROC m_sub_proc; ///< Subclassed window's default message handler
};
/**
* Window proc for dialog window.
*
* Delegates default processing to DefDlgProc as in the alternative
* dialog handling method explained by Raymond Chen.
*
* Your dialog loop will still be called but only if default processing
* is invoked. Generally you should just return FALSE to allow the
* dialog manager to handle the message.
*
* @see http://blogs.msdn.com/b/oldnewthing/archive/2003/11/13/55662.aspx
*/
class dialog_proc : public window_proc
{
public:
dialog_proc(HWND hwnd, WNDPROC new_proc) : window_proc(hwnd, new_proc) {}
virtual LRESULT do_default_handling(
UINT message_id, WPARAM wparam, LPARAM lparam)
{
return ::DefDlgProc(window().hwnd(), message_id, wparam, lparam);
}
};
}} // namespace ezel::detail
#endif
================================================
FILE: ezel/detail/window_proxy.hpp
================================================
/**
@file
Window implementation switcher.
@if license
Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.ac.uk>
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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
@endif
*/
#ifndef EZEL_DETAIL_WINDOW_PROXY_HPP
#define EZEL_DETAIL_WINDOW_PROXY_HPP
#pragma once
#include <boost/make_shared.hpp> // make_shared
#include <boost/noncopyable.hpp> // noncopyable
#include <boost/shared_ptr.hpp> // shared_ptr
#include <cassert> // assert
namespace ezel {
namespace detail {
/**
* Switch between two window implementations.
*
* One implementation is a real wrapper round an HWND, the other just pretends.
* This class serves up a window wrapper that works correctly whether or not
* it is attached to an real Win32 window object.
*
* The purpose of this class is to manage the change from an artificial
* window to an attached window and vice versa. The idea is that an instance
* of this class will responds correctly to property setting/getting
* regardless of whether the window is real or fake.
*
* As the fake window type may have an arbitrary contructor signature, the
* client must pass an instance to our constructor. The real window type
* we instantiate ourselves and must have the constructor:
* @code RealType(HWND hwnd) @endcode
*
* Field data is synchronised between the real and fake windows by calling
* @c copy_fields. For any type you use as the @c Interface template
* parameter you must implement @c copy_fields in the same namespace with this
* signature:
* @code copy_fields(Interface& source, Interface& target) @endcode
* It will be found by ADL.
*/
template<typename Interface, typename FakeType, typename RealType>
class window_proxy
{
public:
window_proxy(boost::shared_ptr<FakeType> fake)
: m_fake_window(fake), m_active_window(m_fake_window) {}
Interface* operator->() { return m_active_window; }
Interface& operator*() { return *m_active_window; }
const Interface* operator->() const { return m_active_window; }
const Interface& operator*() const { return *m_active_window; }
/**
* Switch from fake to real window.
*/
void attach(HWND hwnd)
{
assert(!m_real_window); // why are we attaching twice?
assert(m_active_window == m_fake_window); // fake window not active one
m_real_window = boost::make_shared<RealType>(hwnd);
m_active_window = m_real_window;
}
/**
* Switch back to the fake window.
*/
void detach()
{
assert(m_real_window); // why are not attached?
assert(m_active_window == m_real_window); // real window not active one
m_real_window.reset();
m_active_window = m_fake_window;
}
/**
* Suck data from real Win32 window object into the fake window.
*
* This method exists so that properties of the window are still available
* after the real window has been destroyed.
*
* Call this method after receiving the WM_CREATE message so that
* @c copy_fields() can rely on the integrity of the window fields.
*/
void pull()
{
assert(m_real_window); // must not call this method unless attached
copy_fields(real(), fake());
}
/**
* Update Win32 window object from fields in the fake window.
*
* Fields can be set in the wrapper before the Win32 window is created.
* This window pushes those values out to the real window once it is
* created.
*
* Call this method before receiving the WM_DESTROY message so that
* @c copy_fields() can rely on the integrity of the window fields.
*/
void push()
{
assert(m_real_window); // must not call this method unless attached
copy_fields(fake(), real());
}
private:
Interface& real() { return *m_real_window; }
Interface& fake() { return *m_fake_window; }
boost::shared_ptr<FakeType> m_fake_window;
boost::shared_ptr<RealType> m_real_window;
boost::shared_ptr<Interface> m_active_window;
};
}} // namespace ezel::detail
#endif
================================================
FILE: ezel/form.hpp
================================================
/**
@file
GUI forms (aka dialogs)
@if license
Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.ac.uk>
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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
@endif
*/
#ifndef EZEL_FORM_HPP
#define EZEL_FORM_HPP
#pragma once
#include <ezel/control.hpp> // control
#include <ezel/control_parent_impl.hpp> // control_parent_impl
#include <ezel/detail/dialog_template.hpp>
// build_in_memory_dialog_template
#include <ezel/detail/hooks.hpp> // creation_hooks
#include <ezel/detail/hwnd_linking.hpp> // fetch_user_window_data
#include <ezel/detail/window_impl.hpp> // window_impl
#include <ezel/detail/window_proc.hpp> // dialog_proc
#include <ezel/window.hpp> // window
#include <washer/dynamic_link.hpp> // module_handle
#include <washer/gui/commands.hpp> // command
#include <washer/gui/messages.hpp> // message
#include <boost/bind.hpp> // bind
#include <boost/exception/errinfo_api_function.hpp> // errinfo_api_function
#include <boost/exception/info.hpp> // errinfo
#include <boost/function.hpp> // function
#include <boost/make_shared.hpp> // make_shared
#include <boost/shared_ptr.hpp> // shared_ptr
#include <boost/signal.hpp> // signal
#include <boost/throw_exception.hpp> // BOOST_THROW_EXCEPTION
#include <boost/weak_ptr.hpp> // weak_ptr
#include <cassert> // assert
#include <string>
#include <vector>
#include <Windows.h> // DialogBoxIndirectParam
namespace ezel {
namespace detail {
INT_PTR CALLBACK dialog_creation_handler(
HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
/**
* Real form class implementation.
*/
class form_impl : public control_parent_impl
{
public:
typedef control_parent_impl super;
virtual LRESULT handle_message(
UINT message, WPARAM wparam, LPARAM lparam)
{
return dispatch_message(this, message, wparam, lparam);
}
typedef message_map<WM_INITDIALOG, WM_ACTIVATE, WM_CLOSE> messages;
form_impl(
const std::wstring& title, short left, short top, short width,
short height)
:
control_parent_impl(title, left, top, width, height) {}
std::wstring window_class() const { return L"#32770"; }
DWORD style() const
{ return DS_SETFONT | WS_VISIBLE | WS_POPUPWINDOW | DS_MODALFRAME; }
void add_control(boost::shared_ptr<window_impl> control)
{
m_controls.push_back(control);
}
void show(HWND hwnd_owner)
{
std::vector<unsigned char> buffer = build_dialog_template_in_memory(
L"MS Shell Dlg", 8, text(), left(), top(), width(), height(),
m_controls);
hook_window_creation();
try
{
INT_PTR rc = ::DialogBoxIndirectParamW(
washer::module_handle(),
(buffer.empty()) ?
NULL : reinterpret_cast<DLGTEMPLATE*>(&buffer[0]),
hwnd_owner, dialog_creation_handler,
reinterpret_cast<LPARAM>(this));
if (rc < 1)
BOOST_THROW_EXCEPTION(
boost::enable_error_info(washer::last_error()) <<
boost::errinfo_api_function(
"DialogBoxIndirectParamW"));
}
catch (...)
{
unhook_window_creation();
throw;
}
}
void end()
{
// set the 2nd parameter to > 0 so we can detect error case from
// return value of DialogBoxIndirectParam
if(!::EndDialog(hwnd(), 1))
BOOST_THROW_EXCEPTION(
boost::enable_error_info(washer::last_error()) <<
boost::errinfo_api_function("EndDialog"));
}
/// @name Event delegates
// @{
boost::signal<bool ()>& on_create() { return m_on_create; }
boost::signal<void (bool)>& on_activating() { return m_on_activating; }
boost::signal<void (bool)>& on_activate() { return m_on_activate; }
boost::signal<void ()>& on_deactivating() { return m_on_deactivating; }
boost::signal<void ()>& on_deactivate() { return m_on_deactivate; }
// @}
/// @name Message handlers
// @{
LRESULT on(message<WM_CLOSE> m)
{
end();
return default_message_handler(m);
}
LRESULT on(message<WM_ACTIVATE> m)
{
if (m.active())
m_on_activating(m.by_mouse());
else if (m.deactive())
m_on_deactivating();
else
assert(!"Inconsistent message state");
LRESULT res = default_message_handler(m);
if (m.active())
m_on_activate(m.by_mouse());
else if (m.deactive())
m_on_deactivate();
else
assert(!"Inconsistent message state");
return res;
}
LRESULT on(message<WM_INITDIALOG> /*message*/)
{
// All our controls should have been created by now so stop
// monitoring window creation. This prevents problems with
// the system menu which is created later.
unhook_window_creation();
if (!m_on_create.empty())
return m_on_create() == TRUE;
else
return TRUE; // give default control focus
}
// @}
private:
/**
* Replace the window's own window proc with ours.
*/
virtual void install_window_procedure()
{
window_procedure() =
boost::make_shared<dialog_proc>(hwnd(), window_impl_proc);
}
friend INT_PTR CALLBACK dialog_creation_handler(
HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
void hook_window_creation()
{
m_hooks = boost::make_shared<creation_hooks<wchar_t> >();
}
void unhook_window_creation()
{
m_hooks.reset();
}
/**
* The collection of controls on this form.
* They are held as smart pointers to ensure they stay alive as long
* as the form, regardless of how they are passed to add_control.
*/
std::vector<boost::shared_ptr<window_impl> > m_controls;
boost::shared_ptr<creation_hooks<wchar_t> > m_hooks;
/// @name Events
// @{
boost::signal<bool ()> m_on_create;
boost::signal<void (bool)> m_on_activating;
boost::signal<void (bool)> m_on_activate;
boost::signal<void ()> m_on_deactivating;
boost::signal<void ()> m_on_deactivate;
// @}
};
/**
* Dialog proc to capture WM_INITDIALOG.
*
* The dialog proc boostraps all the rest of the window and message
* capture. It is the way we associate the dialog's HWND with a form_impl
* instance. We can't do it with the window creation hooks used to
* capture the rest of the windows as that relies on a pointer stuffed
* in the WM_CREATE CREATESTRUCT. DialogBoxIndirectParam doesn't give
* us a way to do that but it does allow us to stuff the pointer into
* the WM_INITDIALOG lparam which is why we cature that here.
*
* The moment we attach the instance to the HWND, our regular Ezel window
* procedure takes over and any subsequent message are dispatched as
* normal. Therefore we ignore any other types of message. However,
* we have to dispatch the WM_INITDIALOG message here as it won't be
* sent again.
*/
inline INT_PTR CALLBACK dialog_creation_handler(
HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
assert(msg != WM_CREATE); // apparently a dialog should never get this
if (msg != WM_INITDIALOG)
return FALSE;
try
{
// we stashed a pointer to our C++ form object in the creation
// data in the dialog template
// now we extract it here and use it to set up a two-way link
// between the C++ form object and the Win32 dialog object
form_impl* this_form = reinterpret_cast<form_impl*>(lparam);
this_form->attach(hwnd);
return this_form->handle_message(msg, wparam, lparam);
}
catch (const std::exception& e)
{
(void)e; /* ignore */
washer::trace("threw when trying to link to dialog window: %s")
% e.what();
return FALSE;
}
}
}
class form : public window<detail::form_impl>
{
public:
form(
const std::wstring& title, short left, short top, short width,
short height)
: window(
boost::make_shared<detail::form_impl>(
title, left, top, width, height)) {}
template<typename T>
void add_control(const control<T>& control)
{
impl()->add_control(control.impl());
}
void show(HWND hwnd_owner=NULL)
{
impl()->show(hwnd_owner);
}
void end()
{
impl()->end();
}
/**
* A functor that can be called to destroy the form instance.
*
* This allows users to write :
* @code btn.on_click().connect(frm.killer()) @endcode
* instead of
* @code btn.on_click().connect(bind(&form::end, ref(frm))) @endcode
*
* The functor holds a *weak* reference to the form to prevent circular
* references. If it held a strong reference, when the functor is passed
* to a control owned by the form, the form would indirectly hold a
* reference and would never be destroyed.
*/
boost::function<void ()> killer()
{
typedef boost::weak_ptr<detail::form_impl> weak_form_reference;
weak_form_reference weak_ref = impl();
return boost::bind(
&detail::form_impl::end, boost::bind(
&weak_form_reference::lock, weak_ref));
}
/// @name Event delegates.
// @{
boost::signal<bool ()>& on_create() { return impl()->on_create(); }
boost::signal<void (bool)>& on_activating() { return impl()->on_activating(); }
boost::signal<void (bool)>& on_activate() { return impl()->on_activate(); }
boost::signal<void ()>& on_deactivating() { return impl()->on_deactivating(); }
boost::signal<void ()>& on_deactivate() { return impl()->on_deactivate(); }
// @}
};
} // namespace ezel
#endif
================================================
FILE: ezel/window.hpp
================================================
/**
@file
Ezel window.
@if license
Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.ac.uk>
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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
@endif
*/
#ifndef EZEL_WINDOW_HPP
#define EZEL_WINDOW_HPP
#pragma once
#include <boost/shared_ptr.hpp> // shared_ptr
#include <boost/signal.hpp> // signal
#include <string>
namespace ezel {
/**
* Base-class for window facades.
*
* All Ezel windows are an instance of a subclass of this this template.
* This provides access to the methods and properties common to all windows.
*
* @param T Type of implementation class (pimpl)
*/
template<typename T>
class window
{
public:
window(boost::shared_ptr<T> impl) : m_impl(impl) {}
virtual ~window() {}
std::wstring text() const { return impl()->text(); }
void text(const std::wstring& new_text) const
{
return impl()->text(new_text);
}
void visible(bool visibility) { impl()->visible(visibility); }
void enable(bool enablement) { impl()->enable(enablement); }
/// @name Events
// @{
boost::signal<void (bool)>& on_showing() { return impl()->on_showing(); }
boost::signal<void (bool)>& on_show() { return impl()->on_show(); }
boost::signal<void (const wchar_t*)>& on_text_change()
{ return impl()->on_text_change(); }
boost::signal<void ()>& on_text_changed()
{ return impl()->on_text_changed(); }
// @}
protected:
boost::shared_ptr<T> impl() const { return m_impl; }
private:
boost::shared_ptr<T> m_impl; // pimpl
};
}
#endif
================================================
FILE: guids.txt
================================================
b816a838-5022-11dc-9153-0090f5284f85 Swish Type Library (DLL module UUID)
b816a839-5022-11dc-9153-0090f5284f85 *REMOVED* IHostFolder Interface
b816a83a-5022-11dc-9153-0090f5284f85 CHostFolder Class
b816a83b-5022-11dc-9153-0090f5284f85 *REMOVED* IRemoteFolder Interface
b816a83c-5022-11dc-9153-0090f5284f85 CRemoteFolder Class
b816a83d-5022-11dc-9153-0090f5284f85 *REMOVED* IRemoteEnumIDList Interface
b816a83e-5022-11dc-9153-0090f5284f85 *REMOVED* CRemoteEnumIDList Class
b816a83f-5022-11dc-9153-0090f5284f85 *REMOVED* IHostContextMenu Interface
b816a840-5022-11dc-9153-0090f5284f85 *REMOVED* CHostContextMenu Class
b816a841-5022-11dc-9153-0090f5284f85 *REMOVED* ISftpProvider Interface
b816a842-5022-11dc-9153-0090f5284f85 *REMOVED* CPuttyProvider Class
b816a843-5022-11dc-9153-0090f5284f85 *CHANGED* IEnumListing Interface
b816a844-5022-11dc-9153-0090f5284f85 *REMOVED* ISftpConsumer Interface
b816a845-5022-11dc-9153-0090f5284f85 *REMOVED* PuttyProvider Type Library
b816a846-5022-11dc-9153-0090f5284f85 *CHANGED* Libssh2Provider Type Library (DLL module UUID)
b816a847-5022-11dc-9153-0090f5284f85 *CHANGED* CLibssh2Provider Class
b816a848-5022-11dc-9153-0090f5284f85 *REMOVED* CExplorerCallback Class
b816a849-5022-11dc-9153-0090f5284f85 *REMOVED* CIconExtractor Class
b816a84a-5022-11dc-9153-0090f5284f85 *REMOVED* CUserInteraction Class
b816a84b-5022-11dc-9153-0090f5284f85 *REMOVED* CSftpDirectory Class
b816a84c-5022-11dc-9153-0090f5284f85
b816a84d-5022-11dc-9153-0090f5284f85
b816a84e-5022-11dc-9153-0090f5284f85
b816a84f-5022-11dc-9153-0090f5284f85
b816a850-5022-11dc-9153-0090f5284f85 FMTID Swish host
b816a851-5022-11dc-9153-0090f5284f85 FMTID Swish remote folder
b816a852-5022-11dc-9153-0090f5284f85
b816a853-5022-11dc-9153-0090f5284f85
b816a854-5022-11dc-9153-0090f5284f85
b816a855-5022-11dc-9153-0090f5284f85
b816a856-5022-11dc-9153-0090f5284f85
b816a857-5022-11dc-9153-0090f5284f85
b816a858-5022-11dc-9153-0090f5284f85
b816a859-5022-11dc-9153-0090f5284f85
b816a85a-5022-11dc-9153-0090f5284f85
b816a85b-5022-11dc-9153-0090f5284f85
b816a85c-5022-11dc-9153-0090f5284f85
b816a85d-5022-11dc-9153-0090f5284f85
b816a85e-5022-11dc-9153-0090f5284f85
b816a85f-5022-11dc-9153-0090f5284f85
b816a860-5022-11dc-9153-0090f5284f85 *REMOVED* Provider backend APPID
b816a861-5022-11dc-9153-0090f5284f85 *REMOVED* Provider backend Type Library
b816a862-5022-11dc-9153-0090f5284f85 *REMOVED* Provider Component
b816a863-5022-11dc-9153-0090f5284f85 *REMOVED* RealDispenser Component
b816a864-5022-11dc-9153-0090f5284f85 *REMOVED* Dispenser Component
b816a865-5022-11dc-9153-0090f5284f85
b816a866-5022-11dc-9153-0090f5284f85
b816a867-5022-11dc-9153-0090f5284f85
b816a868-5022-11dc-9153-0090f5284f85
b816a869-5022-11dc-9153-0090f5284f85
b816a86a-5022-11dc-9153-0090f5284f85
b816a86b-5022-11dc-9153-0090f5284f85
b816a86c-5022-11dc-9153-0090f5284f85
b816a86d-5022-11dc-9153-0090f5284f85
b816a86e-5022-11dc-9153-0090f5284f85
b816a86f-5022-11dc-9153-0090f5284f85
b816a870-5022-11dc-9153-0090f5284f85
b816a871-5022-11dc-9153-0090f5284f85
b816a872-5022-11dc-9153-0090f5284f85
b816a873-5022-11dc-9153-0090f5284f85
b816a874-5022-11dc-9153-0090f5284f85
b816a875-5022-11dc-9153-0090f5284f85
b816a876-5022-11dc-9153-0090f5284f85
b816a877-5022-11dc-9153-0090f5284f85
b816a878-5022-11dc-9153-0090f5284f85
b816a879-5022-11dc-9153-0090f5284f85
b816a87a-5022-11dc-9153-0090f5284f85
b816a87b-5022-11dc-9153-0090f5284f85
b816a87c-5022-11dc-9153-0090f5284f85
b816a87d-5022-11dc-9153-0090f5284f85
b816a87e-5022-11dc-9153-0090f5284f85
b816a87f-5022-11dc-9153-0090f5284f85
b816a880-5022-11dc-9153-0090f5284f85 Add SFTP command ID
b816a881-5022-11dc-9153-0090f5284f85 Remove SFTP command ID
b816a882-5022-11dc-9153-0090f5284f85 New folder commmand ID
b816a883-5022-11dc-9153-0090f5284f85 Rename SFTP host command ID
b816a884-5022-11dc-9153-0090f5284f85 Launch key agent command ID
b816a885-5022-11dc-9153-0090f5284f85 About box command ID
b816a886-5022-11dc-9153-0090f5284f85 Close session command ID
b816a887-5022-11dc-9153-0090f5284f85
b816a888-5022-11dc-9153-0090f5284f85
b816a889-5022-11dc-9153-0090f5284f85
b816a88a-5022-11dc-9153-0090f5284f85
b816a88b-5022-11dc-9153-0090f5284f85
b816a88c-5022-11dc-9153-0090f5284f85
b816a88d-5022-11dc-9153-0090f5284f85
b816a88e-5022-11dc-9153-0090f5284f85
b816a88f-5022-11dc-9153-0090f5284f85
b816a890-5022-11dc-9153-0090f5284f85
b816a891-5022-11dc-9153-0090f5284f85
b816a892-5022-11dc-9153-0090f5284f85
b816a893-5022-11dc-9153-0090f5284f85
b816a894-5022-11dc-9153-0090f5284f85
b816a895-5022-11dc-9153-0090f5284f85
b816a896-5022-11dc-9153-0090f5284f85
b816a897-5022-11dc-9153-0090f5284f85
b816a898-5022-11dc-9153-0090f5284f85
b816a899-5022-11dc-9153-0090f5284f85
b816a89a-5022-11dc-9153-0090f5284f85
b816a89b-5022-11dc-9153-0090f5284f85
b816a89c-5022-11dc-9153-0090f5284f85
b816a89d-5022-11dc-9153-0090f5284f85
b816a89e-5022-11dc-9153-0090f5284f85
b816a89f-5022-11dc-9153-0090f5284f85
b816a8a0-5022-11dc-9153-0090f5284f85
b816a8a1-5022-11dc-9153-0090f5284f85
b816a8a2-5022-11dc-9153-0090f5284f85
b816a8a3-5022-11dc-9153-0090f5284f85
b816a8a4-5022-11dc-9153-0090f5284f85
b816a8a5-5022-11dc-9153-0090f5284f85
b816a8a6-5022-11dc-9153-0090f5284f85
b816a8a7-5022-11dc-9153-0090f5284f85
b816a8a8-5022-11dc-9153-0090f5284f85
b816a8a9-5022-11dc-9153-0090f5284f85
b816a8aa-5022-11dc-9153-0090f5284f85
b816a8ab-5022-11dc-9153-0090f5284f85
b816a8ac-5022-11dc-9153-0090f5284f85
b816a8ad-5022-11dc-9153-0090f5284f85
b816a8ae-5022-11dc-9153-0090f5284f85
b816a8af-5022-11dc-9153-0090f5284f85
b816a8b0-5022-11dc-9153-0090f5284f85
b816a8b1-5022-11dc-9153-0090f5284f85
b816a8b2-5022-11dc-9153-0090f5284f85
b816a8b3-5022-11dc-9153-0090f5284f85
b816a8b4-5022-11dc-9153-0090f5284f85
b816a8b5-5022-11dc-9153-0090f5284f85
b816a8b6-5022-11dc-9153-0090f5284f85
b816a8b7-5022-11dc-9153-0090f5284f85
b816a8b8-5022-11dc-9153-0090f5284f85
b816a8b9-5022-11dc-9153-0090f5284f85
b816a8ba-5022-11dc-9153-0090f5284f85
b816a8bb-5022-11dc-9153-0090f5284f85
b816a8bc-5022-11dc-9153-0090f5284f85
b816a8bd-5022-11dc-9153-0090f5284f85
b816a8be-5022-11dc-9153-0090f5284f85
b816a8bf-5022-11dc-9153-0090f5284f85
b816a8c0-5022-11dc-9153-0090f5284f85
b816a8c1-5022-11dc-9153-0090f5284f85
b816a8c2-5022-11dc-9153-0090f5284f85
b816a8c3-5022-11dc-9153-0090f5284f85
b816a8c4-5022-11dc-9153-0090f5284f85
b816a8c5-5022-11dc-9153-0090f5284f85
b816a8c6-5022-11dc-9153-0090f5284f85
b816a8c7-5022-11dc-9153-0090f5284f85
b816a8c8-5022-11dc-9153-0090f5284f85
b816a8c9-5022-11dc-9153-0090f5284f85
b816a8ca-5022-11dc-9153-0090f5284f85
b816a8cb-5022-11dc-9153-0090f5284f85
b816a8cc-5022-11dc-9153-0090f5284f85
b816a8cd-5022-11dc-9153-0090f5284f85
b816a8ce-5022-11dc-9153-0090f5284f85
b816a8cf-5022-11dc-9153-0090f5284f85
b816a8d0-5022-11dc-9153-0090f5284f85
b816a8d1-5022-11dc-9153-0090f5284f85
b816a8d2-5022-11dc-9153-0090f5284f85
b816a8d3-5022-11dc-9153-0090f5284f85
b816a8d4-5022-11dc-9153-0090f5284f85
b816a8d5-5022-11dc-9153-0090f5284f85
b816a8d6-5022-11dc-9153-0090f5284f85
b816a8d7-5022-11dc-9153-0090f5284f85
b816a8d8-5022-11dc-9153-0090f5284f85
b816a8d9-5022-11dc-9153-0090f5284f85
b816a8da-5022-11dc-9153-0090f5284f85
b816a8db-5022-11dc-9153-0090f5284f85
b816a8dc-5022-11dc-9153-0090f5284f85
b816a8dd-5022-11dc-9153-0090f5284f85
b816a8de-5022-11dc-9153-0090f5284f85
b816a8df-5022-11dc-9153-0090f5284f85
b816a8e0-5022-11dc-9153-0090f5284f85
b816a8e1-5022-11dc-9153-0090f5284f85
b816a8e2-5022-11dc-9153-0090f5284f85
b816a8e3-5022-11dc-9153-0090f5284f85
b816a8e4-5022-11dc-9153-0090f5284f85
b816a8e5-5022-11dc-9153-0090f5284f85
b816a8e6-5022-11dc-9153-0090f5284f85
b816a8e7-5022-11dc-9153-0090f5284f85
b816a8e8-5022-11dc-9153-0090f5284f85
b816a8e9-5022-11dc-9153-0090f5284f85
b816a8ea-5022-11dc-9153-0090f5284f85
b816a8eb-5022-11dc-9153-0090f5284f85
b816a8ec-5022-11dc-9153-0090f5284f85
b816a8ed-5022-11dc-9153-0090f5284f85
b816a8ee-5022-11dc-9153-0090f5284f85
b816a8ef-5022-11dc-9153-0090f5284f85
b816a8f0-5022-11dc-9153-0090f5284f85
b816a8f1-5022-11dc-9153-0090f5284f85
b816a8f2-5022-11dc-9153-0090f5284f85
b816a8f3-5022-11dc-9153-0090f5284f85
b816a8f4-5022-11dc-9153-0090f5284f85
b816a8f5-5022-11dc-9153-0090f5284f85
b816a8f6-5022-11dc-9153-0090f5284f85
b816a8f7-5022-11dc-9153-0090f5284f85
b816a8f8-5022-11dc-9153-0090f5284f85
b816a8f9-5022-11dc-9153-0090f5284f85
b816a8fa-5022-11dc-9153-0090f5284f85
b816a8fb-5022-11dc-9153-0090f5284f85
b816a8fc-5022-11dc-9153-0090f5284f85
b816a8fd-5022-11dc-9153-0090f5284f85
b816a8fe-5022-11dc-9153-0090f5284f85
b816a8ff-5022-11dc-9153-0090f5284f85
b816a900-5022-11dc-9153-0090f5284f85
b816a901-5022-11dc-9153-0090f5284f85
b816a902-5022-11dc-9153-0090f5284f85
b816a903-5022-11dc-9153-0090f5284f85
b816a904-5022-11dc-9153-0090f5284f85
b816a905-5022-11dc-9153-0090f5284f85
b816a906-5022-11dc-9153-0090f5284f85
b816a907-5022-11dc-9153-0090f5284f85
b816a908-5022-11dc-9153-0090f5284f85
b816a909-5022-11dc-9153-0090f5284f85
b816a90a-5022-11dc-9153-0090f5284f85
b816a90b-5022-11dc-9153-0090f5284f85
b816a90c-5022-11dc-9153-0090f5284f85
b816a90d-5022-11dc-9153-0090f5284f85
b816a90e-5022-11dc-9153-0090f5284f85
b816a90f-5022-11dc-9153-0090f5284f85
b816a910-5022-11dc-9153-0090f5284f85
b816a911-5022-11dc-9153-0090f5284f85
b816a912-5022-11dc-9153-0090f5284f85
b816a913-5022-11dc-9153-0090f5284f85
b816a914-5022-11dc-9153-0090f5284f85
b816a915-5022-11dc-9153-0090f5284f85
b816a916-5022-11dc-9153-0090f5284f85
b816a917-5022-11dc-9153-0090f5284f85
b816a918-5022-11dc-9153-0090f5284f85
b816a919-5022-11dc-9153-0090f5284f85
b816a91a-5022-11dc-9153-0090f5284f85
b816a91b-5022-11dc-9153-0090f5284f85
b816a91c-5022-11dc-9153-0090f5284f85
b816a91d-5022-11dc-9153-0090f5284f85
b816a91e-5022-11dc-9153-0090f5284f85
b816a91f-5022-11dc-9153-0090f5284f85
b816a920-5022-11dc-9153-0090f5284f85
b816a921-5022-11dc-9153-0090f5284f85
b816a922-5022-11dc-9153-0090f5284f85
b816a923-5022-11dc-9153-0090f5284f85
b816a924-5022-11dc-9153-0090f5284f85
b816a925-5022-11dc-9153-0090f5284f85
b816a926-5022-11dc-9153-0090f5284f85
b816a927-5022-11dc-9153-0090f5284f85
b816a928-5022-11dc-9153-0090f5284f85
b816a929-5022-11dc-9153-0090f5284f85
b816a92a-5022-11dc-9153-0090f5284f85
b816a92b-5022-11dc-9153-0090f5284f85
b816a92c-5022-11dc-9153-0090f5284f85
b816a92d-5022-11dc-9153-0090f5284f85
b816a92e-5022-11dc-9153-0090f5284f85
b816a92f-5022-11dc-9153-0090f5284f85
b816a930-5022-11dc-9153-0090f5284f85
b816a931-5022-11dc-9153-0090f5284f85
b816a932-5022-11dc-9153-0090f5284f85
b816a933-5022-11dc-9153-0090f5284f85
b816a934-5022-11dc-9153-0090f5284f85
b816a935-5022-11dc-9153-0090f5284f85
b816a936-5022-11dc-9153-0090f5284f85
b816a937-5022-11dc-9153-0090f5284f85
b816a938-5022-11dc-9153-0090f5284f85
b816a939-5022-11dc-9153-0090f5284f85
b816a93a-5022-11dc-9153-0090f5284f85
b816a93b-5022-11dc-9153-0090f5284f85
b816a93c-5022-11dc-9153-0090f5284f85
b816a93d-5022-11dc-9153-0090f5284f85
b816a93e-5022-11dc-9153-0090f5284f85
b816a93f-5022-11dc-9153-0090f5284f85
b816a940-5022-11dc-9153-0090f5284f85
b816a941-5022-11dc-9153-0090f5284f85
b816a942-5022-11dc-9153-0090f5284f85
b816a943-5022-11dc-9153-0090f5284f85
b816a944-5022-11dc-9153-0090f5284f85
b816a945-5022-11dc-9153-0090f5284f85
b816a946-5022-11dc-9153-0090f5284f85
b816a947-5022-11dc-9153-0090f5284f85
b816a948-5022-11dc-9153-0090f5284f85
b816a949-5022-11dc-9153-0090f5284f85
b816a94a-5022-11dc-9153-0090f5284f85
b816a94b-5022-11dc-9153-0090f5284f85
b816a94c-5022-11dc-9153-0090f5284f85
b816a94d-5022-11dc-9153-0090f5284f85
b816a94e-5022-11dc-9153-0090f5284f85
b816a94f-5022-11dc-9153-0090f5284f85
b816a950-5022-11dc-9153-0090f5284f85
b816a951-5022-11dc-9153-0090f5284f85
b816a952-5022-11dc-9153-0090f5284f85
b816a953-5022-11dc-9153-0090f5284f85
b816a954-5022-11dc-9153-0090f5284f85
b816a955-5022-11dc-9153-0090f5284f85
b816a956-5022-11dc-9153-0090f5284f85
b816a957-5022-11dc-9153-0090f5284f85
b816a958-5022-11dc-9153-0090f5284f85
b816a959-5022-11dc-9153-0090f5284f85
b816a95a-5022-11dc-9153-0090f5284f85
b816a95b-5022-11dc-9153-0090f5284f85
b816a95c-5022-11dc-9153-0090f5284f85
b816a95d-5022-11dc-9153-0090f5284f85
b816a95e-5022-11dc-9153-0090f5284f85
b816a95f-5022-11dc-9153-0090f5284f85
b816a960-5022-11dc-9153-0090f5284f85
b816a961-5022-11dc-9153-0090f5284f85
b816a962-5022-11dc-9153-0090f5284f85
b816a963-5022-11dc-9153-0090f5284f85
b816a964-5022-11dc-9153-0090f5284f85
b816a965-5022-11dc-9153-0090f5284f85
b816a966-5022-11dc-9153-0090f5284f85
b816a967-5022-11dc-9153-0090f5284f85
b816a968-5022-11dc-9153-0090f5284f85
b816a969-5022-11dc-9153-0090f5284f85
b816a96a-5022-11dc-9153-0090f5284f85
b816a96b-5022-11dc-9153-0090f5284f85
b816a96c-5022-11dc-9153-0090f5284f85
b816a96d-5022-11dc-9153-0090f5284f85
b816a96e-5022-11dc-9153-0090f5284f85
b816a96f-5022-11dc-9153-0090f5284f85
b816a970-5022-11dc-9153-0090f5284f85
b816a971-5022-11dc-9153-0090f5284f85
b816a972-5022-11dc-9153-0090f5284f85
b816a973-5022-11dc-9153-0090f5284f85
b816a974-5022-11dc-9153-0090f5284f85
b816a975-5022-11dc-9153-0090f5284f85
b816a976-5022-11dc-9153-0090f5284f85
b816a977-5022-11dc-9153-0090f5284f85
b816a978-5022-11dc-9153-0090f5284f85
b816a979-5022-11dc-9153-0090f5284f85
b816a97a-5022-11dc-9153-0090f5284f85
b816a97b-5022-11dc-9153-0090f5284f85
b816a97c-5022-11dc-9153-0090f5284f85
b816a97d-5022-11dc-9153-0090f5284f85
b816a97e-5022-11dc-9153-0090f5284f85
b816a97f-5022-11dc-9153-0090f5284f85
b816a980-5022-11dc-9153-0090f5284f85
b816a981-5022-11dc-9153-0090f5284f85
b816a982-5022-11dc-9153-0090f5284f85
b816a983-5022-11dc-9153-0090f5284f85
b816a984-5022-11dc-9153-0090f5284f85
b816a985-5022-11dc-9153-0090f5284f85
b816a986-5022-11dc-9153-0090f5284f85
b816a987-5022-11dc-9153-0090f5284f85
b816a988-5022-11dc-9153-0090f5284f85
b816a989-5022-11dc-9153-0090f5284f85
b816a98a-5022-11dc-9153-0090f5284f85
b816a98b-5022-11dc-9153-0090f5284f85
b816a98c-5022-11dc-9153-0090f5284f85
b816a98d-5022-11dc-9153-0090f5284f85
b816a98e-5022-11dc-9153-0090f5284f85
b816a98f-5022-11dc-9153-0090f5284f85
b816a990-5022-11dc-9153-0090f5284f85
b816a991-5022-11dc-9153-0090f5284f85
b816a992-5022-11dc-9153-0090f5284f85
b816a993-5022-11dc-9153-0090f5284f85
b816a994-5022-11dc-9153-0090f5284f85
b816a995-5022-11dc-9153-0090f5284f85
b816a996-5022-11dc-9153-0090f5284f85
b816a997-5022-11dc-9153-0090f5284f85
b816a998-5022-11dc-9153-0090f5284f85
b816a999-5022-11dc-9153-0090f5284f85
b816a99a-5022-11dc-9153-0090f5284f85
b816a99b-5022-11dc-9153-0090f5284f85
b816a99c-5022-11dc-9153-0090f5284f85
b816a99d-5022-11dc-9153-0090f5284f85
b816a99e-5022-11dc-9153-0090f5284f85
b816a99f-5022-11dc-9153-0090f5284f85
b816a9a0-5022-11dc-9153-0090f5284f85
b816a9a1-5022-11dc-9153-0090f5284f85
b816a9a2-5022-11dc-9153-0090f5284f85
b816a9a3-5022-11dc-9153-0090f5284f85
b816a9a4-5022-11dc-9153-0090f5284f85
b816a9a5-5022-11dc-9153-0090f5284f85
b816a9a6-5022-11dc-9153-0090f5284f85
b816a9a7-5022-11dc-9153-0090f5284f85
b816a9a8-5022-11dc-9153-0090f5284f85
b816a9a9-5022-11dc-9153-0090f5284f85
b816a9aa-5022-11dc-9153-0090f5284f85
b816a9ab-5022-11dc-9153-0090f5284f85
b816a9ac-5022-11dc-9153-0090f5284f85
b816a9ad-5022-11dc-9153-0090f5284f85
b816a9ae-5022-11dc-9153-0090f5284f85
b816a9af-5022-11dc-9153-0090f5284f85
b816a9b0-5022-11dc-9153-0090f5284f85
b816a9b1-5022-11dc-9153-0090f5284f85
b816a9b2-5022-11dc-9153-0090f5284f85
b816a9b3-5022-11dc-9153-0090f5284f85
b816a9b4-5022-11dc-9153-0090f5284f85
b816a9b5-5022-11dc-9153-0090f5284f85
b816a9b6-5022-11dc-9153-0090f5284f85
b816a9b7-5022-11dc-9153-0090f5284f85
b816a9b8-5022-11dc-9153-0090f5284f85
b816a9b9-5022-11dc-9153-0090f5284f85
b816a9ba-5022-11dc-9153-0090f5284f85
b816a9bb-5022-11dc-9153-0090f5284f85
b816a9bc-5022-11dc-9153-0090f5284f85
b816a9bd-5022-11dc-9153-0090f5284f85
b816a9be-5022-11dc-9153-0090f5284f85
b816a9bf-5022-11dc-9153-0090f5284f85
b816a9c0-5022-11dc-9153-0090f5284f85
b816a9c1-5022-11dc-9153-0090f5284f85
b816a9c2-5022-11dc-9153-0090f5284f85
b816a9c3-5022-11dc-9153-0090f5284f85
b816a9c4-5022-11dc-9153-0090f5284f85
b816a9c5-5022-11dc-9153-0090f5284f85
b816a9c6-5022-11dc-9153-0090f5284f85
b816a9c7-5022-11dc-9153-0090f5284f85
b816a9c8-5022-11dc-9153-0090f5284f85
b816a9c9-5022-11dc-9153-0090f5284f85
b816a9ca-5022-11dc-9153-0090f5284f85
b816a9cb-5022-11dc-9153-0090f5284f85
b816a9cc-5022-11dc-9153-0090f5284f85
b816a9cd-5022-11dc-9153-0090f5284f85
b816a9ce-5022-11dc-9153-0090f5284f85
b816a9cf-5022-11dc-9153-0090f5284f85
b816a9d0-5022-11dc-9153-0090f5284f85
b816a9d1-5022-11dc-9153-0090f5284f85
b816a9d2-5022-11dc-9153-0090f5284f85
b816a9d3-5022-11dc-9153-0090f5284f85
b816a9d4-5022-11dc-9153-0090f5284f85
b816a9d5-5022-11dc-9153-0090f5284f85
b816a9d6-5022-11dc-9153-0090f5284f85
b816a9d7-5022-11dc-9153-0090f5284f85
b816a9d8-5022-11dc-9153-0090f5284f85
b816a9d9-5022-11dc-9153-0090f5284f85
b816a9da-5022-11dc-9153-0090f5284f85
b816a9db-5022-11dc-9153-0090f5284f85
b816a9dc-5022-11dc-9153-0090f5284f85
b816a9dd-5022-11dc-9153-0090f5284f85
b816a9de-5022-11dc-9153-0090f5284f85
b816a9df-5022-11dc-9153-0090f5284f85
b816a9e0-5022-11dc-9153-0090f5284f85
b816a9e1-5022-11dc-9153-0090f5284f85
b816a9e2-5022-11dc-9153-0090f5284f85
gitextract_02n81_nz/
├── .clang-format
├── .gitattributes
├── .tx/
│ └── config
├── CMakeLists.txt
├── COPYING.rtf
├── LICENSE.txt
├── NEWS
├── README.md
├── appcast.xml.in
├── build/
│ ├── making_a_release.txt
│ └── news_html.py
├── cmake/
│ ├── GetGitRevisionDescription.cmake
│ ├── GetGitRevisionDescription.cmake.in
│ ├── Hunter/
│ │ └── config.cmake
│ └── HunterGate.cmake
├── cpack_wix_patch.xml
├── ezel/
│ ├── CMakeLists.txt
│ ├── control.hpp
│ ├── control_parent_impl.hpp
│ ├── controls/
│ │ ├── button.hpp
│ │ ├── checkbox.hpp
│ │ ├── edit.hpp
│ │ ├── icon.hpp
│ │ ├── label.hpp
│ │ ├── line.hpp
│ │ └── spinner.hpp
│ ├── detail/
│ │ ├── command_dispatch.hpp
│ │ ├── dialog_template.hpp
│ │ ├── hooks.hpp
│ │ ├── hwnd_linking.hpp
│ │ ├── message_dispatch.hpp
│ │ ├── window_impl.hpp
│ │ ├── window_link.hpp
│ │ ├── window_proc.hpp
│ │ └── window_proxy.hpp
│ ├── form.hpp
│ └── window.hpp
├── guids.txt
├── po/
│ ├── CMakeLists.txt
│ ├── bg/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── ca/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── compile_mo.sh
│ ├── cs/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── cy/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── da_DK/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── de/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── el_GR/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── es/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── et/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── fi/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── fr/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── he/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── hi/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── hu/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── it/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── ja/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── ko/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── lv/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── nl/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── pl/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── pt/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── pt_BR/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── ro/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── ru/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── sk/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── sv/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── template/
│ │ └── swish.pot
│ ├── tr/
│ │ ├── swish.mo
│ │ └── swish.po
│ ├── zh_CN/
│ │ ├── swish.mo
│ │ └── swish.po
│ └── zh_TW/
│ ├── swish.mo
│ └── swish.po
├── setup_conf.xml.in
├── ssh/
│ ├── .clang-format
│ ├── CMakeLists.txt
│ ├── agent.hpp
│ ├── detail/
│ │ ├── agent_state.hpp
│ │ ├── file_handle_state.hpp
│ │ ├── libssh2/
│ │ │ ├── agent.hpp
│ │ │ ├── knownhost.hpp
│ │ │ ├── libssh2.hpp
│ │ │ ├── session.hpp
│ │ │ ├── sftp.hpp
│ │ │ └── userauth.hpp
│ │ ├── session_state.hpp
│ │ └── sftp_channel_state.hpp
│ ├── filesystem/
│ │ └── path.hpp
│ ├── filesystem.hpp
│ ├── host_key.hpp
│ ├── knownhost.hpp
│ ├── session.hpp
│ ├── sftp_error.hpp
│ ├── ssh_error.hpp
│ └── stream.hpp
├── swish/
│ ├── CMakeLists.txt
│ ├── CoFactory.hpp
│ ├── atl.hpp
│ ├── connection/
│ │ ├── CMakeLists.txt
│ │ ├── authenticated_session.cpp
│ │ ├── authenticated_session.hpp
│ │ ├── connection.vcproj
│ │ ├── connection_spec.cpp
│ │ ├── connection_spec.hpp
│ │ ├── interruptable_session.hpp
│ │ ├── running_session.cpp
│ │ ├── running_session.hpp
│ │ ├── session_manager.cpp
│ │ ├── session_manager.hpp
│ │ ├── session_pool.cpp
│ │ └── session_pool.hpp
│ ├── debug.hpp
│ ├── drop_target/
│ │ ├── CMakeLists.txt
│ │ ├── CopyFileOperation.cpp
│ │ ├── CopyFileOperation.hpp
│ │ ├── CreateDirectoryOperation.cpp
│ │ ├── CreateDirectoryOperation.hpp
│ │ ├── DropActionCallback.hpp
│ │ ├── DropTarget.cpp
│ │ ├── DropTarget.hpp
│ │ ├── DropUI.cpp
│ │ ├── DropUI.hpp
│ │ ├── Operation.hpp
│ │ ├── PidlCopyPlan.cpp
│ │ ├── PidlCopyPlan.hpp
│ │ ├── Plan.hpp
│ │ ├── Progress.hpp
│ │ ├── RootedSource.hpp
│ │ ├── SequentialPlan.cpp
│ │ ├── SequentialPlan.hpp
│ │ └── SftpDestination.hpp
│ ├── forms/
│ │ ├── CMakeLists.txt
│ │ ├── add_host.cpp
│ │ ├── add_host.hpp
│ │ ├── password.cpp
│ │ └── password.hpp
│ ├── frontend/
│ │ ├── CMakeLists.txt
│ │ ├── UserInteraction.cpp
│ │ ├── UserInteraction.hpp
│ │ ├── announce_error.cpp
│ │ ├── announce_error.hpp
│ │ ├── bind_best_taskdialog.cpp
│ │ ├── bind_best_taskdialog.hpp
│ │ ├── commands/
│ │ │ ├── About.cpp
│ │ │ └── About.hpp
│ │ ├── winsparkle_shower.cpp
│ │ └── winsparkle_shower.hpp
│ ├── host_folder/
│ │ ├── CMakeLists.txt
│ │ ├── ViewCallback.cpp
│ │ ├── ViewCallback.hpp
│ │ ├── columns.cpp
│ │ ├── columns.hpp
│ │ ├── commands/
│ │ │ ├── Add.cpp
│ │ │ ├── Add.hpp
│ │ │ ├── CloseSession.cpp
│ │ │ ├── CloseSession.hpp
│ │ │ ├── LaunchAgent.cpp
│ │ │ ├── LaunchAgent.hpp
│ │ │ ├── Remove.cpp
│ │ │ ├── Remove.hpp
│ │ │ ├── Rename.cpp
│ │ │ ├── Rename.hpp
│ │ │ ├── commands.cpp
│ │ │ └── commands.hpp
│ │ ├── context_menu_callback.cpp
│ │ ├── context_menu_callback.hpp
│ │ ├── extract_icon.hpp
│ │ ├── host_itemid_connection.cpp
│ │ ├── host_itemid_connection.hpp
│ │ ├── host_management.cpp
│ │ ├── host_management.hpp
│ │ ├── host_pidl.hpp
│ │ ├── menu_command_manager.cpp
│ │ ├── menu_command_manager.hpp
│ │ ├── overlay_icon.hpp
│ │ ├── properties.cpp
│ │ └── properties.hpp
│ ├── nse/
│ │ ├── CMakeLists.txt
│ │ ├── Command.cpp
│ │ ├── Command.hpp
│ │ ├── StaticColumn.hpp
│ │ ├── UICommand.cpp
│ │ ├── UICommand.hpp
│ │ ├── command_site.cpp
│ │ ├── command_site.hpp
│ │ ├── data_object_util.cpp
│ │ ├── data_object_util.hpp
│ │ ├── default_context_menu_callback.cpp
│ │ ├── default_context_menu_callback.hpp
│ │ ├── detail/
│ │ │ └── command_state_conversion.hpp
│ │ ├── explorer_command.cpp
│ │ ├── explorer_command.hpp
│ │ ├── task_pane.hpp
│ │ ├── view_callback.cpp
│ │ └── view_callback.hpp
│ ├── port_conversion.hpp
│ ├── provider/
│ │ ├── CMakeLists.txt
│ │ ├── Provider.cpp
│ │ ├── Provider.hpp
│ │ ├── libssh2_sftp_filesystem_item.cpp
│ │ ├── libssh2_sftp_filesystem_item.hpp
│ │ ├── sftp_filesystem_item.hpp
│ │ ├── sftp_provider.hpp
│ │ └── ticketed_stream.hpp
│ ├── remote_folder/
│ │ ├── CMakeLists.txt
│ │ ├── Mode.cpp
│ │ ├── Mode.h
│ │ ├── ViewCallback.cpp
│ │ ├── ViewCallback.hpp
│ │ ├── columns.cpp
│ │ ├── columns.hpp
│ │ ├── commands/
│ │ │ ├── NewFolder.cpp
│ │ │ ├── NewFolder.hpp
│ │ │ ├── commands.cpp
│ │ │ ├── commands.hpp
│ │ │ ├── delete.cpp
│ │ │ └── delete.hpp
│ │ ├── context_menu_callback.cpp
│ │ ├── context_menu_callback.hpp
│ │ ├── filemode.c
│ │ ├── filemode.h
│ │ ├── pidl_connection.cpp
│ │ ├── pidl_connection.hpp
│ │ ├── properties.cpp
│ │ ├── properties.hpp
│ │ ├── remote_pidl.hpp
│ │ └── swish_pidl.hpp
│ ├── remotelimits.h
│ ├── shell/
│ │ ├── CMakeLists.txt
│ │ ├── parent_and_item.hpp
│ │ ├── shell.cpp
│ │ ├── shell.hpp
│ │ ├── shell_item.hpp
│ │ └── shell_item_array.hpp
│ ├── shell_folder/
│ │ ├── CMakeLists.txt
│ │ ├── DataObject.cpp
│ │ ├── DataObject.h
│ │ ├── Folder.h
│ │ ├── HostFolder.cpp
│ │ ├── HostFolder.h
│ │ ├── IconExtractor.cpp
│ │ ├── IconExtractor.h
│ │ ├── KbdInteractiveDialog.cpp
│ │ ├── KbdInteractiveDialog.h
│ │ ├── Pidl.h
│ │ ├── Registry.cpp
│ │ ├── Registry.h
│ │ ├── RemoteFolder.cpp
│ │ ├── RemoteFolder.h
│ │ ├── SftpDataObject.cpp
│ │ ├── SftpDataObject.h
│ │ ├── SftpDirectory.cpp
│ │ ├── SftpDirectory.h
│ │ ├── SnitchingDataObject.hpp
│ │ ├── Swish.idl
│ │ ├── SwishFolder.hpp
│ │ ├── com_dll/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── HostFolder.rgs
│ │ │ ├── RemoteFolder.rgs
│ │ │ ├── Swish.rgs
│ │ │ ├── SwishCoClasses.cpp
│ │ │ ├── SwishModule.cpp
│ │ │ ├── com_dll.def
│ │ │ ├── com_dll.rc
│ │ │ └── resource.h
│ │ ├── data_object/
│ │ │ ├── FileGroupDescriptor.hpp
│ │ │ ├── GlobalLocker.hpp
│ │ │ ├── ShellDataObject.cpp
│ │ │ ├── ShellDataObject.hpp
│ │ │ └── StorageMedium.hpp
│ │ ├── locale_setup.hpp
│ │ ├── resource.h
│ │ ├── shell_folder.rc
│ │ └── wtl.hpp
│ ├── trace.hpp
│ ├── utils.hpp
│ ├── versions/
│ │ ├── CMakeLists.txt
│ │ ├── git_version.h.in
│ │ ├── metadata.h.in
│ │ ├── version.cpp
│ │ └── version.hpp
│ └── windows_api.hpp
├── test/
│ ├── CMakeLists.txt
│ ├── common_boost/
│ │ ├── CMakeLists.txt
│ │ ├── ConsumerStub.hpp
│ │ ├── MockConsumer.hpp
│ │ ├── MockProvider.hpp
│ │ ├── SwishPidlFixture.hpp
│ │ ├── data_object_utils.cpp
│ │ ├── data_object_utils.hpp
│ │ ├── fixtures.hpp
│ │ ├── helpers.hpp
│ │ ├── stream_utils.cpp
│ │ ├── stream_utils.hpp
│ │ ├── tree.hh
│ │ └── tree.hpp
│ ├── connection/
│ │ ├── CMakeLists.txt
│ │ ├── authenticated_session_test.cpp
│ │ ├── connection_spec_create_session_test.cpp
│ │ ├── connection_spec_test.cpp
│ │ ├── running_session_test.cpp
│ │ ├── session_manager_test.cpp
│ │ └── session_pool_test.cpp
│ ├── drop_target/
│ │ ├── CMakeLists.txt
│ │ ├── drop_target_test.cpp
│ │ └── rooted_source_test.cpp
│ ├── ezel/
│ │ ├── CMakeLists.txt
│ │ └── form_test.cpp
│ ├── fix_key_permissions.sh
│ ├── fixtures/
│ │ ├── CMakeLists.txt
│ │ ├── com_stream_fixture.cpp
│ │ ├── com_stream_fixture.hpp
│ │ ├── fixture_dsakey
│ │ ├── fixture_dsakey.pub
│ │ ├── fixture_hostkey
│ │ ├── fixture_hostkey.pub
│ │ ├── fixture_rsakey
│ │ ├── fixture_rsakey.pub
│ │ ├── fixture_wrong_dsakey
│ │ ├── fixture_wrong_dsakey.pub
│ │ ├── local_sandbox_fixture.cpp
│ │ ├── local_sandbox_fixture.hpp
│ │ ├── openssh_fixture.cpp
│ │ ├── openssh_fixture.hpp
│ │ ├── provider_fixture.cpp
│ │ ├── provider_fixture.hpp
│ │ ├── session_fixture.cpp
│ │ ├── session_fixture.hpp
│ │ ├── sftp_fixture.cpp
│ │ ├── sftp_fixture.hpp
│ │ ├── ssh_server/
│ │ │ ├── Dockerfile
│ │ │ ├── authorized_keys
│ │ │ └── ssh_host_rsa_key
│ │ ├── test_known_hosts
│ │ ├── test_known_hosts_hashed
│ │ └── test_known_hosts_out
│ ├── forms/
│ │ ├── CMakeLists.txt
│ │ ├── add_host_test.cpp
│ │ └── password_test.cpp
│ ├── host_folder/
│ │ ├── CMakeLists.txt
│ │ ├── columns_test.cpp
│ │ ├── host_management_test.cpp
│ │ ├── host_pidl_test.cpp
│ │ ├── properties_test.cpp
│ │ └── view_callback_test.cpp
│ ├── module.cpp.in
│ ├── nse/
│ │ ├── CMakeLists.txt
│ │ ├── default_context_menu_callback_tests.cpp
│ │ └── explorer_command_tests.cpp
│ ├── provider-integration/
│ │ ├── CMakeLists.txt
│ │ ├── auth_test.cpp
│ │ ├── provider_test.cpp
│ │ ├── stream_create_test.cpp
│ │ ├── stream_read_test.cpp
│ │ ├── stream_test.cpp
│ │ └── stream_write_test.cpp
│ ├── remote_folder/
│ │ ├── CMakeLists.txt
│ │ ├── columns_test.cpp
│ │ ├── properties_test.cpp
│ │ ├── remote_commands_test.cpp
│ │ ├── remote_pidl_test.cpp
│ │ └── swish_pidl_test.cpp
│ ├── shell/
│ │ ├── CMakeLists.txt
│ │ └── shell_test.cpp
│ ├── shell_folder/
│ │ ├── CMakeLists.txt
│ │ ├── atl.cpp
│ │ ├── data_object_test.cpp
│ │ ├── exercise_data_object.h
│ │ ├── file_group_descriptor_test.cpp
│ │ ├── global_lock_test.cpp
│ │ ├── remote_folder_test.cpp
│ │ ├── sftp_data_object_nasty_old_test.cpp
│ │ ├── sftp_data_object_test.cpp
│ │ ├── sftp_directory_test.cpp
│ │ ├── shell_data_object_test.cpp
│ │ └── utils_test.cpp
│ ├── shell_folder-com_dll/
│ │ ├── CMakeLists.txt
│ │ ├── CppUnitExtensions.h
│ │ ├── HostFolder_test.cpp
│ │ ├── Module.cpp
│ │ ├── RemoteFolder_test.cpp
│ │ ├── main.cpp
│ │ ├── pidl.cpp
│ │ └── pidl.hpp
│ ├── shell_folder-dialogue/
│ │ ├── CMakeLists.txt
│ │ └── KbdInteractiveDialog_test.cpp
│ ├── ssh/
│ │ ├── CMakeLists.txt
│ │ ├── auth_test.cpp
│ │ ├── filesystem_construction_test.cpp
│ │ ├── filesystem_test.cpp
│ │ ├── fixture_dsakey
│ │ ├── fixture_dsakey.pub
│ │ ├── fixture_hostkey
│ │ ├── fixture_hostkey.pub
│ │ ├── fixture_rsakey
│ │ ├── fixture_rsakey.pub
│ │ ├── fixture_wrong_dsakey
│ │ ├── fixture_wrong_dsakey.pub
│ │ ├── host_key_test.cpp
│ │ ├── input_stream_test.cpp
│ │ ├── io_stream_test.cpp
│ │ ├── knownhost_test.cpp
│ │ ├── module.cpp
│ │ ├── openssh_fixture.cpp
│ │ ├── openssh_fixture.hpp
│ │ ├── output_stream_test.cpp
│ │ ├── path_test.cpp
│ │ ├── session_fixture.cpp
│ │ ├── session_fixture.hpp
│ │ ├── session_test.cpp
│ │ ├── sftp_fixture.cpp
│ │ ├── sftp_fixture.hpp
│ │ ├── ssh_server/
│ │ │ ├── Dockerfile
│ │ │ ├── authorized_keys
│ │ │ └── ssh_host_rsa_key
│ │ ├── stream_threading_test.cpp
│ │ ├── test_known_hosts
│ │ ├── test_known_hosts_hashed
│ │ └── test_known_hosts_out
│ └── versions/
│ ├── CMakeLists.txt
│ └── version_test.cpp
└── thirdparty/
└── taskdialog98/
├── TaskDialog.h
├── TaskDialogTest.cpp
├── TaskDialogTest.dsp
├── TaskDialogTest.dsw
├── TaskDialogTest.h
├── TaskDialogTest.rc
├── icons.h
├── maindlg.h
├── res/
│ ├── TaskDialogTest.exe.manifest
│ └── make_icons_include.bat
├── resource.h
├── stdafx.cpp
└── stdafx.h
Showing preview only (308K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3356 symbols across 286 files)
FILE: build/news_html.py
function main (line 7) | def main():
function extract_version (line 21) | def extract_version(news):
function read_news (line 24) | def read_news(news, indent):
function create_list_item (line 43) | def create_list_item(item, indent):
function read_entry (line 46) | def read_entry(news):
FILE: ezel/control.hpp
type ezel (line 37) | namespace ezel {
class form (line 39) | class form
class control (line 51) | class control : public window<T>
method control (line 55) | control(boost::shared_ptr<T> impl) : window<T>(impl) {}
FILE: ezel/control_parent_impl.hpp
type ezel (line 37) | namespace ezel {
type detail (line 38) | namespace detail {
class control_parent_impl (line 44) | class control_parent_impl : public window_impl
method LRESULT (line 51) | virtual LRESULT handle_message(
method LRESULT (line 63) | LRESULT on(message<WM_COMMAND> m)
method control_parent_impl (line 75) | control_parent_impl(
FILE: ezel/controls/button.hpp
type ezel (line 42) | namespace ezel {
type controls (line 43) | namespace controls {
class button_impl (line 45) | class button_impl : public ezel::detail::window_impl
method handle_command (line 52) | virtual void handle_command(
method button_impl (line 58) | button_impl(
method window_class (line 65) | std::wstring window_class() const { return L"button"; }
method DWORD (line 67) | DWORD style() const
method on (line 78) | void on(command<BN_CLICKED>) { m_on_click(); }
class button (line 86) | class button : public ezel::control<button_impl>
method button (line 89) | button(
method left (line 99) | short left() const { return impl()->left(); }
method top (line 100) | short top() const { return impl()->top(); }
method width (line 101) | short width() const { return impl()->width(); }
method height (line 102) | short height() const { return impl()->height(); }
FILE: ezel/controls/checkbox.hpp
type ezel (line 39) | namespace ezel {
type controls (line 40) | namespace controls {
class checkbox_impl (line 44) | class checkbox_impl : public ezel::detail::window_impl
method handle_command (line 51) | virtual void handle_command(
method checkbox_impl (line 57) | checkbox_impl(
method window_class (line 64) | std::wstring window_class() const { return L"button"; }
method DWORD (line 66) | DWORD style() const
method on (line 73) | void on(command<BN_CLICKED>) { m_on_click(); }
class checkbox (line 81) | class checkbox : public ezel::control<checkbox_impl>
method checkbox (line 84) | checkbox(
method text (line 92) | std::wstring text() const { return impl()->text(); }
method left (line 93) | short left() const { return impl()->left(); }
method top (line 94) | short top() const { return impl()->top(); }
method width (line 95) | short width() const { return impl()->width(); }
method height (line 96) | short height() const { return impl()->height(); }
FILE: ezel/controls/edit.hpp
type ezel (line 39) | namespace ezel {
type controls (line 40) | namespace controls {
class edit_impl (line 42) | class edit_impl : public ezel::detail::window_impl
method handle_command (line 49) | virtual void handle_command(
method edit_impl (line 55) | edit_impl(
method window_class (line 62) | std::wstring window_class() const { return L"Edit"; }
method DWORD (line 64) | DWORD style() const
method on (line 77) | void on(command<EN_CHANGE>) { m_on_change(); }
method on (line 78) | void on(command<EN_UPDATE>) { m_on_update(); }
class edit (line 86) | class edit : public ezel::control<edit_impl>
type style (line 90) | struct style
type value (line 92) | enum value
method edit (line 101) | edit(
method left (line 118) | short left() const { return impl()->left(); }
method top (line 119) | short top() const { return impl()->top(); }
method width (line 120) | short width() const { return impl()->width(); }
method height (line 121) | short height() const { return impl()->height(); }
FILE: ezel/controls/icon.hpp
type ezel (line 40) | namespace ezel {
type controls (line 41) | namespace controls {
class icon_impl (line 43) | class icon_impl : public ezel::detail::window_impl
method icon_impl (line 50) | icon_impl(short left, short top, short width, short height)
method window_class (line 55) | std::wstring window_class() const { return L"static"; }
method DWORD (line 56) | DWORD style() const
method HICON (line 64) | HICON change_icon(HICON new_icon)
method push (line 85) | virtual void push()
class icon (line 97) | class icon : public ezel::control<icon_impl>
type style (line 101) | struct style
type value (line 103) | enum value
method icon (line 110) | icon(short left, short top, short width, short height)
method HICON (line 116) | HICON change_icon(HICON new_icon) { return impl()->change_icon(new...
method left (line 118) | short left() const { return impl()->left(); }
method top (line 119) | short top() const { return impl()->top(); }
method width (line 120) | short width() const { return impl()->width(); }
method height (line 121) | short height() const { return impl()->height(); }
FILE: ezel/controls/label.hpp
type ezel (line 38) | namespace ezel {
type controls (line 39) | namespace controls {
class label_impl (line 41) | class label_impl : public ezel::detail::window_impl
method label_impl (line 45) | label_impl(
method window_class (line 52) | std::wstring window_class() const { return L"static"; }
method DWORD (line 53) | DWORD style() const
class label (line 68) | class label : public ezel::control<label_impl>
type style (line 72) | struct style
type value (line 74) | enum value
method label (line 81) | label(
method left (line 90) | short left() const { return impl()->left(); }
method top (line 91) | short top() const { return impl()->top(); }
method width (line 92) | short width() const { return impl()->width(); }
method height (line 93) | short height() const { return impl()->height(); }
FILE: ezel/controls/line.hpp
type ezel (line 38) | namespace ezel {
type controls (line 39) | namespace controls {
class line_impl (line 41) | class line_impl : public ezel::detail::window_impl
method line_impl (line 45) | line_impl(short left, short top, short width)
method window_class (line 49) | std::wstring window_class() const { return L"static"; }
method DWORD (line 50) | DWORD style() const
class line (line 56) | class line : public ezel::control<line_impl>
method line (line 59) | line(
method left (line 66) | short left() const { return impl()->left(); }
method top (line 67) | short top() const { return impl()->top(); }
method width (line 68) | short width() const { return impl()->width(); }
method height (line 69) | short height() const { return impl()->height(); }
FILE: ezel/controls/spinner.hpp
type ezel (line 43) | namespace ezel {
type controls (line 44) | namespace controls {
class spinner_impl (line 46) | class spinner_impl : public ezel::detail::window_impl
method spinner_impl (line 53) | spinner_impl(
method window_class (line 62) | std::wstring window_class() const { return L"msctls_updown32"; }
method DWORD (line 63) | DWORD style() const
method range (line 72) | void range(boost::int32_t minimum, boost::int32_t maximum)
method value (line 86) | boost::int32_t value(boost::int32_t v)
method push (line 100) | virtual void push()
class spinner (line 117) | class spinner : public ezel::control<spinner_impl>
type style (line 121) | struct style
type value (line 123) | enum value
method spinner (line 131) | spinner(
method range (line 144) | void range(boost::int32_t minimum, boost::int32_t maximum)
method value (line 147) | boost::int32_t value(boost::int32_t new_value)
method left (line 150) | short left() const { return impl()->left(); }
method top (line 151) | short top() const { return impl()->top(); }
method width (line 152) | short width() const { return impl()->width(); }
method height (line 153) | short height() const { return impl()->height(); }
FILE: ezel/detail/command_dispatch.hpp
type ezel (line 71) | namespace ezel {
type detail (line 72) | namespace detail {
function dispatch_command_next (line 78) | inline void dispatch_command_next(
function dispatch_command_next (line 85) | inline void dispatch_command_next(
function dispatch_command (line 99) | inline void dispatch_command(
function dispatch_command (line 107) | inline void dispatch_command(
function dispatch_command (line 135) | inline void dispatch_command(
class command_map (line 147) | class command_map
FILE: ezel/detail/dialog_template.hpp
type ezel (line 42) | namespace ezel {
type detail (line 43) | namespace detail {
function T (line 58) | inline T* next_double_word(T* p)
function T (line 68) | inline T* next_word(T* p)
function calculate_template_size (line 81) | inline size_t calculate_template_size(
function DLGITEMTEMPLATE (line 113) | inline DLGITEMTEMPLATE* write_template_to_buffer(
function calculate_control_template_size (line 169) | inline size_t calculate_control_template_size(
function DLGITEMTEMPLATE (line 204) | inline DLGITEMTEMPLATE* write_control_to_buffer(
function increment_required_buffer_size (line 251) | inline size_t increment_required_buffer_size(
function DLGITEMTEMPLATE (line 261) | inline DLGITEMTEMPLATE* to_buffer(
function build_dialog_template_in_memory (line 275) | inline std::vector<unsigned char> build_dialog_template_in_memory(
FILE: ezel/detail/hooks.hpp
type ezel (line 39) | namespace ezel {
type detail (line 40) | namespace detail {
type native (line 42) | namespace native {
type create_struct (line 46) | struct create_struct
type create_struct<char> (line 48) | struct create_struct<char>
type create_struct<wchar_t> (line 51) | struct create_struct<wchar_t>
type cbt_createwnd (line 57) | struct cbt_createwnd
type cbt_createwnd<char> (line 59) | struct cbt_createwnd<char>
type cbt_createwnd<wchar_t> (line 62) | struct cbt_createwnd<wchar_t>
function handle_create (line 69) | inline void handle_create(
function handle_destroy (line 87) | inline void handle_destroy(HWND hwnd)
function LRESULT (line 103) | inline LRESULT CALLBACK cbt_hook_function(
class creation_hooks (line 141) | class creation_hooks
method creation_hooks (line 144) | creation_hooks()
FILE: ezel/detail/hwnd_linking.hpp
type ezel (line 34) | namespace ezel {
type detail (line 35) | namespace detail {
function store_user_window_data (line 43) | inline void store_user_window_data(HWND hwnd, const U& data)
function store_dialog_window_data (line 54) | inline void store_dialog_window_data(HWND hwnd, const U& data)
function U (line 71) | inline U fetch_user_window_data(HWND hwnd)
function U (line 88) | inline U fetch_dialog_window_data(HWND hwnd)
FILE: ezel/detail/message_dispatch.hpp
type ezel (line 71) | namespace ezel {
type detail (line 72) | namespace detail {
function LRESULT (line 79) | inline LRESULT dispatch_message_next(
function LRESULT (line 86) | inline LRESULT dispatch_message_next(
function LRESULT (line 100) | inline LRESULT dispatch_message(
function LRESULT (line 108) | inline LRESULT dispatch_message(
function LRESULT (line 136) | inline LRESULT dispatch_message(
class message_map (line 148) | class message_map
FILE: ezel/detail/window_impl.hpp
type ezel (line 50) | namespace ezel {
type detail (line 59) | namespace detail {
class window_impl (line 67) | class window_impl
method LRESULT (line 242) | virtual LRESULT handle_message(
method handle_command (line 248) | virtual void handle_command(
method window_impl (line 254) | window_impl(
method is_active (line 267) | bool is_active() const { return m_link.attached(); }
method DWORD (line 270) | virtual DWORD style() const
method left (line 275) | short left() const { return window().left(); }
method top (line 276) | short top() const { return window().top(); }
method width (line 277) | short width() const { return window().width(); }
method height (line 278) | short height() const { return window().height(); }
method text (line 280) | std::wstring text() const { return window().text(); }
method text (line 281) | void text(const std::wstring& new_text) { window().text(new_text); }
method visible (line 283) | void visible(bool state) { window().visible(state); }
method enable (line 284) | void enable(bool state) { window().enable(state); }
method LRESULT (line 305) | LRESULT on(message<WM_CREATE> m)
method LRESULT (line 312) | LRESULT on(message<WM_DESTROY> m)
method LRESULT (line 326) | LRESULT on(message<WM_NCDESTROY> m)
method LRESULT (line 335) | LRESULT on(message<WM_SETTEXT> m)
method LRESULT (line 343) | LRESULT on(message<WM_SHOWWINDOW> m)
method LRESULT (line 360) | virtual LRESULT default_message_handler(
method LRESULT (line 367) | LRESULT default_message_handler(const message<N>& m)
method on (line 379) | virtual void on(washer::gui::command_base unknown)
method attach (line 404) | void attach(HWND hwnd)
method HWND (line 430) | HWND hwnd() const { return m_link.hwnd(); }
method pull (line 442) | virtual void pull()
method push (line 462) | virtual void push()
method detach (line 490) | void detach()
method install_window_procedure (line 503) | virtual void install_window_procedure()
method remove_window_procedure (line 512) | virtual void remove_window_procedure()
function window_impl (line 72) | inline window_impl* window_from_hwnd(HWND hwnd)
method LRESULT (line 242) | virtual LRESULT handle_message(
method handle_command (line 248) | virtual void handle_command(
method window_impl (line 254) | window_impl(
method is_active (line 267) | bool is_active() const { return m_link.attached(); }
method DWORD (line 270) | virtual DWORD style() const
method left (line 275) | short left() const { return window().left(); }
method top (line 276) | short top() const { return window().top(); }
method width (line 277) | short width() const { return window().width(); }
method height (line 278) | short height() const { return window().height(); }
method text (line 280) | std::wstring text() const { return window().text(); }
method text (line 281) | void text(const std::wstring& new_text) { window().text(new_text); }
method visible (line 283) | void visible(bool state) { window().visible(state); }
method enable (line 284) | void enable(bool state) { window().enable(state); }
method LRESULT (line 305) | LRESULT on(message<WM_CREATE> m)
method LRESULT (line 312) | LRESULT on(message<WM_DESTROY> m)
method LRESULT (line 326) | LRESULT on(message<WM_NCDESTROY> m)
method LRESULT (line 335) | LRESULT on(message<WM_SETTEXT> m)
method LRESULT (line 343) | LRESULT on(message<WM_SHOWWINDOW> m)
method LRESULT (line 360) | virtual LRESULT default_message_handler(
method LRESULT (line 367) | LRESULT default_message_handler(const message<N>& m)
method on (line 379) | virtual void on(washer::gui::command_base unknown)
method attach (line 404) | void attach(HWND hwnd)
method HWND (line 430) | HWND hwnd() const { return m_link.hwnd(); }
method pull (line 442) | virtual void pull()
method push (line 462) | virtual void push()
method detach (line 490) | void detach()
method install_window_procedure (line 503) | virtual void install_window_procedure()
method remove_window_procedure (line 512) | virtual void remove_window_procedure()
class internal_window (line 87) | class internal_window
class fake_window (line 112) | class fake_window : public internal_window<T>
method fake_window (line 115) | fake_window(
method text (line 122) | std::basic_string<T> text() const { return m_text; }
method text (line 123) | void text(const std::basic_string<T>& new_text) { m_text = new_tex...
method is_visible (line 125) | bool is_visible() { return m_visible; }
method is_enabled (line 126) | bool is_enabled() { return m_enabled; }
method visible (line 127) | void visible(bool state) { m_visible = state; }
method enable (line 128) | void enable(bool state) { m_enabled = state; }
method left (line 130) | short left() const { return m_left; }
method top (line 131) | short top() const { return m_top; }
method width (line 132) | short width() const { return m_width; }
method height (line 133) | short height() const { return m_height; }
class real_window (line 151) | class real_window : public internal_window<T>
method real_window (line 154) | real_window(HWND hwnd) :
method text (line 169) | std::basic_string<T> text() const { return window().text<T>(); }
method text (line 179) | void text(const std::basic_string<T>& new_text)
method is_visible (line 182) | bool is_visible() { return window().is_visible(); }
method is_enabled (line 183) | bool is_enabled() { return window().is_enabled(); }
method visible (line 185) | void visible(bool state) { window().visible(state); }
method enable (line 186) | void enable(bool state) { window().enable(state); }
method left (line 188) | short left() const { return window().position().left(); }
method top (line 189) | short top() const { return window().position().top(); }
method width (line 190) | short width() const { return window().position().width(); }
method height (line 191) | short height() const { return window().position().height(); }
function copy_fields (line 202) | void copy_fields(internal_window<T>& source, internal_window<T>& tar...
class window_impl (line 231) | class window_impl : private boost::noncopyable
method LRESULT (line 242) | virtual LRESULT handle_message(
method handle_command (line 248) | virtual void handle_command(
method window_impl (line 254) | window_impl(
method is_active (line 267) | bool is_active() const { return m_link.attached(); }
method DWORD (line 270) | virtual DWORD style() const
method left (line 275) | short left() const { return window().left(); }
method top (line 276) | short top() const { return window().top(); }
method width (line 277) | short width() const { return window().width(); }
method height (line 278) | short height() const { return window().height(); }
method text (line 280) | std::wstring text() const { return window().text(); }
method text (line 281) | void text(const std::wstring& new_text) { window().text(new_text); }
method visible (line 283) | void visible(bool state) { window().visible(state); }
method enable (line 284) | void enable(bool state) { window().enable(state); }
method LRESULT (line 305) | LRESULT on(message<WM_CREATE> m)
method LRESULT (line 312) | LRESULT on(message<WM_DESTROY> m)
method LRESULT (line 326) | LRESULT on(message<WM_NCDESTROY> m)
method LRESULT (line 335) | LRESULT on(message<WM_SETTEXT> m)
method LRESULT (line 343) | LRESULT on(message<WM_SHOWWINDOW> m)
method LRESULT (line 360) | virtual LRESULT default_message_handler(
method LRESULT (line 367) | LRESULT default_message_handler(const message<N>& m)
method on (line 379) | virtual void on(washer::gui::command_base unknown)
method attach (line 404) | void attach(HWND hwnd)
method HWND (line 430) | HWND hwnd() const { return m_link.hwnd(); }
method pull (line 442) | virtual void pull()
method push (line 462) | virtual void push()
method detach (line 490) | void detach()
method install_window_procedure (line 503) | virtual void install_window_procedure()
method remove_window_procedure (line 512) | virtual void remove_window_procedure()
function LRESULT (line 541) | inline LRESULT CALLBACK window_impl_proc(
FILE: ezel/detail/window_link.hpp
type ezel (line 39) | namespace ezel {
type detail (line 40) | namespace detail {
class window_link_helper (line 58) | class window_link_helper : private boost::noncopyable
method window_link_helper (line 64) | window_link_helper(HWND hwnd, pointer_type wrapper) : m_hwnd(hwnd)
method window_link_helper (line 70) | window_link_helper() : m_hwnd(NULL) {}
method HWND (line 87) | HWND hwnd() const { return m_hwnd; }
method attached (line 88) | bool attached() const { return m_hwnd != NULL; }
class window_link (line 104) | class window_link
method window_link (line 110) | window_link(HWND hwnd, pointer_type wrapper)
method window_link (line 114) | window_link() : m_link(boost::make_shared<window_link_helper<T> >(...
method HWND (line 116) | HWND hwnd() const { return m_link->hwnd(); }
method attached (line 117) | bool attached() const { return m_link->attached(); }
FILE: ezel/detail/window_proc.hpp
type ezel (line 38) | namespace ezel {
type detail (line 39) | namespace detail {
class window_proc_base (line 41) | class window_proc_base
class window_proc (line 53) | class window_proc : public window_proc_base
method window_proc (line 60) | window_proc(HWND hwnd, WNDPROC new_proc) :
method LRESULT (line 88) | virtual LRESULT do_default_handling(
class dialog_proc (line 117) | class dialog_proc : public window_proc
method dialog_proc (line 121) | dialog_proc(HWND hwnd, WNDPROC new_proc) : window_proc(hwnd, new_p...
method LRESULT (line 123) | virtual LRESULT do_default_handling(
FILE: ezel/detail/window_proxy.hpp
type ezel (line 37) | namespace ezel {
type detail (line 38) | namespace detail {
class window_proxy (line 65) | class window_proxy
method window_proxy (line 68) | window_proxy(boost::shared_ptr<FakeType> fake)
method Interface (line 71) | Interface* operator->() { return m_active_window; }
method Interface (line 72) | Interface& operator*() { return *m_active_window; }
method Interface (line 73) | const Interface* operator->() const { return m_active_window; }
method Interface (line 74) | const Interface& operator*() const { return *m_active_window; }
method attach (line 79) | void attach(HWND hwnd)
method detach (line 91) | void detach()
method pull (line 109) | void pull()
method push (line 126) | void push()
method Interface (line 134) | Interface& real() { return *m_real_window; }
method Interface (line 135) | Interface& fake() { return *m_fake_window; }
FILE: ezel/form.hpp
type ezel (line 61) | namespace ezel {
type detail (line 63) | namespace detail {
class form_impl (line 71) | class form_impl : public control_parent_impl
method LRESULT (line 76) | virtual LRESULT handle_message(
method form_impl (line 84) | form_impl(
method window_class (line 90) | std::wstring window_class() const { return L"#32770"; }
method DWORD (line 91) | DWORD style() const
method add_control (line 94) | void add_control(boost::shared_ptr<window_impl> control)
method show (line 99) | void show(HWND hwnd_owner)
method end (line 127) | void end()
method LRESULT (line 153) | LRESULT on(message<WM_CLOSE> m)
method LRESULT (line 159) | LRESULT on(message<WM_ACTIVATE> m)
method LRESULT (line 180) | LRESULT on(message<WM_INITDIALOG> /*message*/)
method install_window_procedure (line 200) | virtual void install_window_procedure()
method hook_window_creation (line 209) | void hook_window_creation()
method unhook_window_creation (line 214) | void unhook_window_creation()
function INT_PTR (line 258) | inline INT_PTR CALLBACK dialog_creation_handler(
class form (line 287) | class form : public window<detail::form_impl>
method form (line 291) | form(
method add_control (line 299) | void add_control(const control<T>& control)
method show (line 304) | void show(HWND hwnd_owner=NULL)
method end (line 309) | void end()
method killer (line 327) | boost::function<void ()> killer()
FILE: ezel/window.hpp
type ezel (line 36) | namespace ezel {
class window (line 47) | class window
method window (line 51) | window(boost::shared_ptr<T> impl) : m_impl(impl) {}
method text (line 54) | std::wstring text() const { return impl()->text(); }
method text (line 55) | void text(const std::wstring& new_text) const
method visible (line 60) | void visible(bool visibility) { impl()->visible(visibility); }
method enable (line 61) | void enable(bool enablement) { impl()->enable(enablement); }
method impl (line 79) | boost::shared_ptr<T> impl() const { return m_impl; }
FILE: ssh/agent.hpp
type ssh (line 54) | namespace ssh
class identity (line 57) | class identity
method identity (line 60) | identity(boost::shared_ptr<detail::agent_state> agent,
method authenticate (line 66) | void authenticate(const std::string& user_name)
type detail (line 80) | namespace detail
class identity_iterator_base (line 84) | class identity_iterator_base
method identity_iterator_base (line 97) | identity_iterator_base(boost::shared_ptr<agent_state> agent)
method identity_iterator_base (line 106) | identity_iterator_base() : m_pos(NULL)
method identity_iterator_base (line 116) | identity_iterator_base(const identity_iterator_base<OtherValue>& o...
method increment (line 122) | void increment()
method equal (line 143) | bool equal(const identity_iterator_base& other) const
method value_type (line 148) | value_type dereference() const
class agent_identities (line 168) | class agent_identities
method agent_identities (line 174) | explicit agent_identities(detail::session_state& session)
method iterator (line 189) | iterator begin() const
method iterator (line 194) | iterator end() const
FILE: ssh/detail/agent_state.hpp
type ssh (line 47) | namespace ssh
type detail (line 49) | namespace detail
function LIBSSH2_AGENT (line 52) | inline LIBSSH2_AGENT* do_agent_init(session_state& session)
class agent_state (line 65) | class agent_state : private boost::noncopyable
method agent_state (line 83) | agent_state(session_state& session)
method scoped_lock (line 109) | scoped_lock aquire_lock()
method LIBSSH2_SESSION (line 114) | LIBSSH2_SESSION* session_ptr()
method LIBSSH2_AGENT (line 119) | LIBSSH2_AGENT* agent_ptr()
method session_state (line 125) | session_state& session_ref()
FILE: ssh/detail/file_handle_state.hpp
type ssh (line 49) | namespace ssh
type detail (line 51) | namespace detail
function LIBSSH2_SFTP_HANDLE (line 54) | inline LIBSSH2_SFTP_HANDLE* do_open(sftp_channel_state& sftp,
class file_handle_state (line 71) | class file_handle_state : private boost::noncopyable
method file_handle_state (line 89) | file_handle_state(sftp_channel_state& sftp, const char* filename,
method scoped_lock (line 105) | scoped_lock aquire_lock()
method LIBSSH2_SESSION (line 110) | LIBSSH2_SESSION* session_ptr()
method LIBSSH2_SFTP (line 115) | LIBSSH2_SFTP* sftp_ptr()
method LIBSSH2_SFTP_HANDLE (line 120) | LIBSSH2_SFTP_HANDLE* file_handle()
method sftp_channel_state (line 126) | sftp_channel_state& sftp_ref()
FILE: ssh/detail/libssh2/agent.hpp
type ssh (line 52) | namespace ssh
type detail (line 54) | namespace detail
type libssh2 (line 56) | namespace libssh2
type agent (line 58) | namespace agent
function LIBSSH2_AGENT (line 64) | inline LIBSSH2_AGENT*
function LIBSSH2_AGENT (line 81) | inline LIBSSH2_AGENT* init(LIBSSH2_SESSION* session)
function connect (line 99) | inline void
function connect (line 114) | inline void connect(LIBSSH2_AGENT* agent, LIBSSH2_SESSION* session)
function get_identity (line 133) | inline int get_identity(
function get_identity (line 153) | inline int get_identity(LIBSSH2_AGENT* agent, LIBSSH2_SESSION* s...
function list_identities (line 174) | inline void list_identities(
function list_identities (line 190) | inline void list_identities(LIBSSH2_AGENT* agent, LIBSSH2_SESSIO...
function userauth (line 207) | inline void
function userauth (line 222) | inline void userauth(LIBSSH2_AGENT* agent, LIBSSH2_SESSION* sess...
FILE: ssh/detail/libssh2/knownhost.hpp
type ssh (line 50) | namespace ssh
type detail (line 52) | namespace detail
type libssh2 (line 54) | namespace libssh2
type knownhost (line 56) | namespace knownhost
function LIBSSH2_KNOWNHOSTS (line 62) | inline LIBSSH2_KNOWNHOSTS*
function LIBSSH2_KNOWNHOSTS (line 79) | inline LIBSSH2_KNOWNHOSTS* init(LIBSSH2_SESSION* session)
function readline (line 97) | inline void
function readline (line 113) | inline void readline(LIBSSH2_SESSION* session, LIBSSH2_KNOWNHOST...
function writeline (line 131) | inline void
function writeline (line 149) | inline void writeline(LIBSSH2_SESSION* session, LIBSSH2_KNOWNHOS...
function get (line 172) | inline int
function get (line 193) | inline int get(LIBSSH2_SESSION* session, LIBSSH2_KNOWNHOSTS* hosts,
function add (line 212) | inline void
function add (line 230) | inline void add(LIBSSH2_SESSION* session, LIBSSH2_KNOWNHOSTS* ho...
function del (line 249) | inline void
function del (line 265) | inline void del(LIBSSH2_SESSION* session, LIBSSH2_KNOWNHOSTS* ho...
function check (line 282) | inline int
function check (line 313) | inline int check(LIBSSH2_SESSION* session, LIBSSH2_KNOWNHOSTS* h...
FILE: ssh/detail/libssh2/libssh2.hpp
type ssh (line 40) | namespace ssh
type detail (line 42) | namespace detail
type libssh2 (line 100) | namespace libssh2
FILE: ssh/detail/libssh2/session.hpp
type ssh (line 51) | namespace ssh
type detail (line 53) | namespace detail
type libssh2 (line 55) | namespace libssh2
type session (line 57) | namespace session
function LIBSSH2_SESSION (line 63) | inline LIBSSH2_SESSION* init()
function startup (line 77) | inline void
function startup (line 92) | inline void startup(LIBSSH2_SESSION* session, int socket)
function disconnect (line 108) | inline void disconnect(
function disconnect (line 124) | inline void disconnect(LIBSSH2_SESSION* session, const char* des...
FILE: ssh/detail/libssh2/sftp.hpp
type ssh (line 56) | namespace ssh
type detail (line 58) | namespace detail
type libssh2 (line 60) | namespace libssh2
type sftp (line 62) | namespace sftp
function LIBSSH2_SFTP (line 68) | inline LIBSSH2_SFTP*
function LIBSSH2_SFTP (line 84) | inline LIBSSH2_SFTP* init(LIBSSH2_SESSION* session)
function LIBSSH2_SFTP_HANDLE (line 98) | inline LIBSSH2_SFTP_HANDLE*
function LIBSSH2_SFTP_HANDLE (line 118) | inline LIBSSH2_SFTP_HANDLE* open(LIBSSH2_SESSION* session, LIBSS...
function symlink_ex (line 146) | inline int symlink_ex(
function symlink_ex (line 192) | inline int symlink_ex(LIBSSH2_SESSION* session, LIBSSH2_SFTP* sftp,
function symlink (line 214) | inline void
function symlink (line 229) | inline void symlink(LIBSSH2_SESSION* session, LIBSSH2_SFTP* sftp,
function stat (line 242) | inline void
function stat (line 260) | inline void stat(LIBSSH2_SESSION* session, LIBSSH2_SFTP* sftp, c...
function fstat (line 279) | inline void
function fstat (line 296) | inline void fstat(LIBSSH2_SESSION* session, LIBSSH2_SFTP* sftp,
function unlink_ex (line 314) | inline void
function unlink_ex (line 330) | inline void unlink_ex(LIBSSH2_SESSION* session, LIBSSH2_SFTP* sftp,
function mkdir_ex (line 348) | inline void
function mkdir_ex (line 364) | inline void mkdir_ex(LIBSSH2_SESSION* session, LIBSSH2_SFTP* sftp,
function rmdir_ex (line 382) | inline void
function rmdir_ex (line 398) | inline void rmdir_ex(LIBSSH2_SESSION* session, LIBSSH2_SFTP* sftp,
function rename (line 416) | inline void
function rename (line 434) | inline void rename(LIBSSH2_SESSION* session, LIBSSH2_SFTP* sftp,
function read (line 455) | inline ssize_t
function read (line 474) | inline ssize_t read(LIBSSH2_SESSION* session, LIBSSH2_SFTP* sftp,
function write (line 495) | inline ssize_t
function write (line 514) | inline ssize_t write(LIBSSH2_SESSION* session, LIBSSH2_SFTP* sftp,
function readdir_ex (line 535) | inline int readdir_ex(
function readdir_ex (line 556) | inline int readdir_ex(LIBSSH2_SESSION* session, LIBSSH2_SFTP* sftp,
FILE: ssh/detail/libssh2/userauth.hpp
type ssh (line 52) | namespace ssh
type detail (line 54) | namespace detail
type libssh2 (line 56) | namespace libssh2
type userauth (line 58) | namespace userauth
function password (line 108) | inline void
function password (line 128) | inline void password(LIBSSH2_SESSION* session, const char* usern...
function keyboard_interactive_ex (line 149) | inline void keyboard_interactive_ex(
function keyboard_interactive_ex (line 167) | inline void keyboard_interactive_ex(
function public_key_from_file (line 187) | inline void public_key_from_file(
function public_key_from_file (line 206) | inline void public_key_from_file(LIBSSH2_SESSION* session, const...
FILE: ssh/detail/session_state.hpp
type ssh (line 53) | namespace ssh
type detail (line 55) | namespace detail
class session_state (line 69) | class session_state : private boost::noncopyable
method session_state (line 86) | session_state() : m_session(::ssh::detail::libssh2::session::init())
method session_state (line 93) | session_state(int socket, const std::string& disconnection_message)
method scoped_lock (line 134) | scoped_lock aquire_lock()
method LIBSSH2_SESSION (line 139) | LIBSSH2_SESSION* session_ptr()
FILE: ssh/detail/sftp_channel_state.hpp
type ssh (line 47) | namespace ssh
type detail (line 49) | namespace detail
function LIBSSH2_SFTP (line 52) | inline LIBSSH2_SFTP* do_sftp_init(session_state& session)
class sftp_channel_state (line 65) | class sftp_channel_state : private boost::noncopyable
method sftp_channel_state (line 82) | sftp_channel_state(session_state& session)
method scoped_lock (line 94) | scoped_lock aquire_lock()
method LIBSSH2_SESSION (line 99) | LIBSSH2_SESSION* session_ptr()
method LIBSSH2_SFTP (line 104) | LIBSSH2_SFTP* sftp_ptr()
method session_state (line 110) | session_state& session_ref()
FILE: ssh/filesystem.hpp
type ssh (line 49) | namespace ssh
class session (line 54) | class session
type filesystem (line 56) | namespace filesystem
class file_attributes (line 59) | class file_attributes
type file_type (line 62) | enum file_type
method file_type (line 74) | file_type type() const
method permissions (line 104) | boost::optional<unsigned long> permissions() const
method size (line 116) | boost::optional<boost::uint64_t> size() const
method uid (line 128) | boost::optional<unsigned long> uid() const
method gid (line 140) | boost::optional<unsigned long> gid() const
method last_accessed (line 155) | boost::optional<unsigned long> last_accessed() const
method last_modified (line 170) | boost::optional<unsigned long> last_modified() const
method file_attributes (line 186) | explicit file_attributes(const LIBSSH2_SFTP_ATTRIBUTES& raw_attrib...
method is_valid_attribute (line 191) | bool is_valid_attribute(unsigned long attribute_type) const
class sftp_file (line 199) | class sftp_file : boost::totally_ordered<sftp_file>
method sftp_file (line 202) | sftp_file(const path& file, const std::string& long_entry,
method path (line 208) | ssh::filesystem::path path() const
method file_attributes (line 218) | const file_attributes& attributes() const
type file_type (line 234) | enum file_type
type perms (line 252) | enum perms
type detail (line 279) | namespace detail
function file_type (line 282) | inline file_type permissions_to_file_type(unsigned long permissions)
function file_type_to_permissions (line 308) | inline unsigned long file_type_to_permissions(file_type type)
function open_directory (line 425) | inline boost::shared_ptr<::ssh::detail::file_handle_state>
function check_status (line 1250) | check_status(sftp_filesystem& filesystem, const path& path)
class file_status (line 335) | class file_status
method file_status (line 342) | explicit file_status(file_type type = file_type::none_,
method file_status (line 348) | explicit file_status(const LIBSSH2_SFTP_ATTRIBUTES& attributes)
method file_type (line 373) | file_type type() const
method perms (line 378) | perms permissions() const
method file_size (line 384) | boost::uintmax_t file_size() const
method last_write_time (line 396) | std::time_t last_write_time() const
method is_available_attribute (line 408) | bool is_available_attribute(const LIBSSH2_SFTP_ATTRIBUTES attributes,
class sftp_filesystem (line 420) | class sftp_filesystem
method sftp_filesystem (line 661) | sftp_filesystem(BOOST_RV_REF(sftp_filesystem) other)
method sftp_filesystem (line 669) | sftp_filesystem& operator=(BOOST_RV_REF(sftp_filesystem) other)
method directory_iterator (line 685) | directory_iterator directory_iterator(const path& path)
method directory_iterator (line 694) | ssh::filesystem::directory_iterator directory_iterator()
method file_attributes (line 708) | file_attributes attributes(const path& file, bool follow_links)
method path (line 727) | path resolve_link_target(const path& link)
method path (line 735) | path canonical_path(const path& link)
class factory_attorney (line 749) | class factory_attorney
method sftp_filesystem (line 754) | sftp_filesystem operator()(::ssh::detail::session_state& session...
method sftp_filesystem (line 764) | explicit sftp_filesystem(::ssh::detail::session_state& session_state)
method create_directory (line 786) | bool create_directory(const path& new_directory)
method create_symlink (line 836) | void create_symlink(const path& link, const path& target)
method file_status (line 849) | file_status status(const path& target)
method permissions (line 883) | void permissions(const path& file, perms new_permissions)
method rename (line 918) | void rename(const path& source, const path& destination,
method remove (line 955) | bool remove(const path& target)
method remove_all (line 993) | boost::uintmax_t remove_all(const path& target)
method remove_one_file (line 1014) | bool remove_one_file(const path& file)
method remove_empty_directory (line 1019) | bool remove_empty_directory(const path& file)
method do_remove (line 1026) | bool do_remove(const path& target, bool is_directory)
method path (line 1068) | path symlink_resolve(const char* path, unsigned int path_len,
type detail (line 422) | namespace detail
function file_type (line 282) | inline file_type permissions_to_file_type(unsigned long permissions)
function file_type_to_permissions (line 308) | inline unsigned long file_type_to_permissions(file_type type)
function open_directory (line 425) | inline boost::shared_ptr<::ssh::detail::file_handle_state>
function check_status (line 1250) | check_status(sftp_filesystem& filesystem, const path& path)
class directory_iterator (line 442) | class directory_iterator
method directory_iterator (line 452) | directory_iterator()
class factory_attorney (line 469) | class factory_attorney
method directory_iterator (line 474) | directory_iterator
method directory_iterator (line 480) | directory_iterator operator()()
method directory_iterator (line 488) | directory_iterator(::ssh::detail::sftp_channel_state& sftp_channel,
method increment (line 499) | void increment()
method equal (line 506) | bool equal(directory_iterator const& other) const
method next_file (line 511) | void next_file()
method sftp_file (line 582) | sftp_file dereference() const
type detail (line 604) | namespace detail
function file_type (line 282) | inline file_type permissions_to_file_type(unsigned long permissions)
function file_type_to_permissions (line 308) | inline unsigned long file_type_to_permissions(file_type type)
function open_directory (line 425) | inline boost::shared_ptr<::ssh::detail::file_handle_state>
function check_status (line 1250) | check_status(sftp_filesystem& filesystem, const path& path)
class sftp_output_device (line 644) | class sftp_output_device
class sftp_io_device (line 645) | class sftp_io_device
class sftp_filesystem (line 653) | class sftp_filesystem : private boost::noncopyable
method sftp_filesystem (line 661) | sftp_filesystem(BOOST_RV_REF(sftp_filesystem) other)
method sftp_filesystem (line 669) | sftp_filesystem& operator=(BOOST_RV_REF(sftp_filesystem) other)
method directory_iterator (line 685) | directory_iterator directory_iterator(const path& path)
method directory_iterator (line 694) | ssh::filesystem::directory_iterator directory_iterator()
method file_attributes (line 708) | file_attributes attributes(const path& file, bool follow_links)
method path (line 727) | path resolve_link_target(const path& link)
method path (line 735) | path canonical_path(const path& link)
class factory_attorney (line 749) | class factory_attorney
method sftp_filesystem (line 754) | sftp_filesystem operator()(::ssh::detail::session_state& session...
method sftp_filesystem (line 764) | explicit sftp_filesystem(::ssh::detail::session_state& session_state)
method create_directory (line 786) | bool create_directory(const path& new_directory)
method create_symlink (line 836) | void create_symlink(const path& link, const path& target)
method file_status (line 849) | file_status status(const path& target)
method permissions (line 883) | void permissions(const path& file, perms new_permissions)
method rename (line 918) | void rename(const path& source, const path& destination,
method remove (line 955) | bool remove(const path& target)
method remove_all (line 993) | boost::uintmax_t remove_all(const path& target)
method remove_one_file (line 1014) | bool remove_one_file(const path& file)
method remove_empty_directory (line 1019) | bool remove_empty_directory(const path& file)
method do_remove (line 1026) | bool do_remove(const path& target, bool is_directory)
method path (line 1068) | path symlink_resolve(const char* path, unsigned int path_len,
function swap (line 1108) | inline void swap(sftp_filesystem& lhs, sftp_filesystem& rhs)
function create_directory (line 1127) | inline bool create_directory(sftp_filesystem& fs, const path& new_di...
function create_symlink (line 1145) | inline void create_symlink(sftp_filesystem& fs, const path& link,
function rename (line 1188) | inline void rename(sftp_filesystem& fs, const path& source,
function remove (line 1216) | inline bool remove(sftp_filesystem& fs, const path& target)
function remove_all (line 1241) | inline boost::uintmax_t remove_all(sftp_filesystem& fs, const path& ...
type detail (line 1246) | namespace detail
function file_type (line 282) | inline file_type permissions_to_file_type(unsigned long permissions)
function file_type_to_permissions (line 308) | inline unsigned long file_type_to_permissions(file_type type)
function open_directory (line 425) | inline boost::shared_ptr<::ssh::detail::file_handle_state>
function check_status (line 1250) | check_status(sftp_filesystem& filesystem, const path& path)
function exists (line 1288) | inline bool exists(sftp_filesystem& filesystem, const path& file)
function path (line 1309) | inline path resolve_link_target(sftp_filesystem& filesystem,
function path (line 1315) | inline path canonical_path(sftp_filesystem& filesystem, const sftp_f...
function file_status (line 1327) | inline file_status status(sftp_filesystem& filesystem, const path& f...
method file_status (line 342) | explicit file_status(file_type type = file_type::none_,
method file_status (line 348) | explicit file_status(const LIBSSH2_SFTP_ATTRIBUTES& attributes)
method file_type (line 373) | file_type type() const
method perms (line 378) | perms permissions() const
method file_size (line 384) | boost::uintmax_t file_size() const
method last_write_time (line 396) | std::time_t last_write_time() const
method is_available_attribute (line 408) | bool is_available_attribute(const LIBSSH2_SFTP_ATTRIBUTES attributes,
function is_regular_file (line 1335) | inline bool is_regular_file(const file_status& status)
function is_regular_file (line 1343) | inline bool is_regular_file(sftp_filesystem& filesystem, const path&...
function is_directory (line 1351) | inline bool is_directory(const file_status& status)
function is_directory (line 1359) | inline bool is_directory(sftp_filesystem& filesystem, const path& file)
function permissions (line 1372) | inline void permissions(sftp_filesystem& filesystem, const path& file,
function file_size (line 1381) | inline boost::uintmax_t file_size(sftp_filesystem& filesystem, const...
function last_write_time (line 1392) | inline std::time_t last_write_time(sftp_filesystem& filesystem,
function is_empty (line 1401) | inline bool is_empty(sftp_filesystem& filesystem, const path& file)
FILE: ssh/filesystem/path.hpp
type ssh (line 33) | namespace ssh
type filesystem (line 35) | namespace filesystem
type detail (line 38) | namespace detail
function lexical_compare (line 54) | inline int lexical_compare(Iterator lhs, const Iterator& lhs_end, ...
function find_next_slash (line 87) | inline typename StringType::size_type
function find_previous_slash (line 95) | inline typename StringType::size_type
function find_next_non_slash (line 103) | inline typename StringType::size_type
function find_previous_non_slash (line 111) | inline typename StringType::size_type
function utf8_locale (line 133) | inline std::locale utf8_locale()
function system_locale (line 139) | inline std::locale system_locale()
function from_source (line 145) | inline std::string from_source(const std::string& source)
function from_source (line 150) | inline std::string from_source(const std::wstring& source)
function from_source (line 157) | inline std::string from_source(const InputIterator& begin,
class path (line 167) | class path : boost::totally_ordered<path>
class iterator (line 172) | class iterator
method path (line 175) | path()
method path (line 180) | path(const Source& source)
method path (line 186) | path(const InputIterator& begin, const InputIterator& end)
method is_relative (line 191) | bool is_relative() const
method is_absolute (line 196) | bool is_absolute() const
method empty (line 201) | bool empty() const
method has_parent_path (line 206) | bool has_parent_path() const
method has_relative_path (line 213) | bool has_relative_path() const
method has_filename (line 220) | bool has_filename() const
method string_type (line 227) | string_type native() const
method string (line 241) | std::string string() const
method string (line 247) | std::wstring string() const
method u8string (line 252) | std::string u8string() const
method string (line 257) | std::string string() const
method wstring (line 264) | std::wstring wstring() const
method path (line 275) | path& operator/=(const path& rhs)
method path (line 293) | path& operator/=(const Source& rhs)
method path (line 300) | static path path_from_range(const InputIterator& begin,
method from_utf (line 311) | std::string from_utf(const std::locale& locale) const
class path::iterator (line 322) | class path::iterator
method iterator (line 329) | explicit iterator(const path* source_path, string_type::size_type ...
method iterator (line 340) | iterator()
method equal (line 346) | bool equal(const iterator& other) const
method path (line 352) | const path& dereference() const
method increment (line 365) | void increment()
method decrement (line 376) | void decrement()
method next_element_positions (line 384) | static std::pair<string_type::size_type, string_type::size_type>
method previous_element_positions (line 396) | static std::pair<string_type::size_type, string_type::size_type>
method find_next_element_first_position (line 409) | static string_type::size_type
method find_previous_element_first_position (line 474) | static string_type::size_type find_previous_element_first_position(
method find_element_last_position (line 560) | static string_type::size_type
method string_type (line 601) | static string_type element_from_positions(
function path (line 639) | inline path path::parent_path() const
class iterator (line 172) | class iterator
method path (line 175) | path()
method path (line 180) | path(const Source& source)
method path (line 186) | path(const InputIterator& begin, const InputIterator& end)
method is_relative (line 191) | bool is_relative() const
method is_absolute (line 196) | bool is_absolute() const
method empty (line 201) | bool empty() const
method has_parent_path (line 206) | bool has_parent_path() const
method has_relative_path (line 213) | bool has_relative_path() const
method has_filename (line 220) | bool has_filename() const
method string_type (line 227) | string_type native() const
method string (line 241) | std::string string() const
method string (line 247) | std::wstring string() const
method u8string (line 252) | std::string u8string() const
method string (line 257) | std::string string() const
method wstring (line 264) | std::wstring wstring() const
method path (line 275) | path& operator/=(const path& rhs)
method path (line 293) | path& operator/=(const Source& rhs)
method path (line 300) | static path path_from_range(const InputIterator& begin,
method from_utf (line 311) | std::string from_utf(const std::locale& locale) const
function path (line 651) | inline path path::relative_path() const
class iterator (line 172) | class iterator
method path (line 175) | path()
method path (line 180) | path(const Source& source)
method path (line 186) | path(const InputIterator& begin, const InputIterator& end)
method is_relative (line 191) | bool is_relative() const
method is_absolute (line 196) | bool is_absolute() const
method empty (line 201) | bool empty() const
method has_parent_path (line 206) | bool has_parent_path() const
method has_relative_path (line 213) | bool has_relative_path() const
method has_filename (line 220) | bool has_filename() const
method string_type (line 227) | string_type native() const
method string (line 241) | std::string string() const
method string (line 247) | std::wstring string() const
method u8string (line 252) | std::string u8string() const
method string (line 257) | std::string string() const
method wstring (line 264) | std::wstring wstring() const
method path (line 275) | path& operator/=(const path& rhs)
method path (line 293) | path& operator/=(const Source& rhs)
method path (line 300) | static path path_from_range(const InputIterator& begin,
method from_utf (line 311) | std::string from_utf(const std::locale& locale) const
function path (line 663) | inline path path::filename() const
class iterator (line 172) | class iterator
method path (line 175) | path()
method path (line 180) | path(const Source& source)
method path (line 186) | path(const InputIterator& begin, const InputIterator& end)
method is_relative (line 191) | bool is_relative() const
method is_absolute (line 196) | bool is_absolute() const
method empty (line 201) | bool empty() const
method has_parent_path (line 206) | bool has_parent_path() const
method has_relative_path (line 213) | bool has_relative_path() const
method has_filename (line 220) | bool has_filename() const
method string_type (line 227) | string_type native() const
method string (line 241) | std::string string() const
method string (line 247) | std::wstring string() const
method u8string (line 252) | std::string u8string() const
method string (line 257) | std::string string() const
method wstring (line 264) | std::wstring wstring() const
method path (line 275) | path& operator/=(const path& rhs)
method path (line 293) | path& operator/=(const Source& rhs)
method path (line 300) | static path path_from_range(const InputIterator& begin,
method from_utf (line 311) | std::string from_utf(const std::locale& locale) const
function path (line 710) | inline path operator/(const path& lhs, const Source& rhs)
class iterator (line 172) | class iterator
method path (line 175) | path()
method path (line 180) | path(const Source& source)
method path (line 186) | path(const InputIterator& begin, const InputIterator& end)
method is_relative (line 191) | bool is_relative() const
method is_absolute (line 196) | bool is_absolute() const
method empty (line 201) | bool empty() const
method has_parent_path (line 206) | bool has_parent_path() const
method has_relative_path (line 213) | bool has_relative_path() const
method has_filename (line 220) | bool has_filename() const
method string_type (line 227) | string_type native() const
method string (line 241) | std::string string() const
method string (line 247) | std::wstring string() const
method u8string (line 252) | std::string u8string() const
method string (line 257) | std::string string() const
method wstring (line 264) | std::wstring wstring() const
method path (line 275) | path& operator/=(const path& rhs)
method path (line 293) | path& operator/=(const Source& rhs)
method path (line 300) | static path path_from_range(const InputIterator& begin,
method from_utf (line 311) | std::string from_utf(const std::locale& locale) const
FILE: ssh/host_key.hpp
type ssh (line 54) | namespace ssh
type detail (line 57) | namespace detail
function hostkey (line 63) | inline std::pair<std::string, int> hostkey(session_state& session)
function T (line 93) | inline T hostkey_hash(session_state& session, int hash_type)
function method (line 123) | inline std::string method(session_state& session, int method_type)
function type_to_hostkey_type (line 164) | inline hostkey_type::enum_t type_to_hostkey_type(int type)
type hostkey_type (line 146) | struct hostkey_type
type enum_t (line 148) | enum enum_t
type detail (line 157) | namespace detail
function hostkey (line 63) | inline std::pair<std::string, int> hostkey(session_state& session)
function T (line 93) | inline T hostkey_hash(session_state& session, int hash_type)
function method (line 123) | inline std::string method(session_state& session, int method_type)
function type_to_hostkey_type (line 164) | inline hostkey_type::enum_t type_to_hostkey_type(int type)
class host_key (line 184) | class host_key
method host_key (line 187) | explicit host_key(detail::session_state& session)
method key (line 204) | std::string key() const
method is_base64 (line 212) | bool is_base64() const
method algorithm (line 220) | hostkey_type::enum_t algorithm() const
method algorithm_name (line 228) | std::string algorithm_name() const
method md5_hash (line 240) | std::vector<unsigned char> md5_hash() const
method sha1_hash (line 252) | std::vector<unsigned char> sha1_hash() const
function hexify (line 273) | std::string hexify(const T& bytes, const std::string& nibble_sep = ":",
FILE: ssh/knownhost.hpp
type ssh (line 64) | namespace ssh
class knownhost (line 67) | class knownhost
method knownhost (line 239) | knownhost(boost::shared_ptr<detail::session_state> session,
method name (line 247) | std::string name() const
method key (line 252) | std::string key() const
method comment (line 267) | std::string comment() const
method to_string (line 277) | std::string to_string(int type) const
method key_algo (line 315) | std::string key_algo() const
method is_name_plain (line 337) | bool is_name_plain() const
method is_name_sha1 (line 349) | bool is_name_sha1() const
method is_name_custom (line 358) | bool is_name_custom() const
type detail (line 69) | namespace detail
class read_entry (line 76) | class read_entry : public std::unary_function<T, void>
method read_entry (line 79) | read_entry(boost::shared_ptr<session_state> session,
class write_entry (line 106) | class write_entry : public std::unary_function<const knownhost&, std...
method write_entry (line 109) | write_entry(boost::shared_ptr<session_state> /*session*/,
class line (line 131) | class line
method length (line 156) | std::string::size_type length() const
method data (line 161) | std::string::const_pointer data() const
function libssh2_knownhost (line 175) | inline libssh2_knownhost* next_host(boost::shared_ptr<session_state>...
function libssh2_knownhost (line 200) | inline libssh2_knownhost* add(boost::shared_ptr<session_state> session,
function internal_key (line 227) | inline std::string internal_key(const libssh2_knownhost* pos)
function hostkey_type_to_add_type (line 513) | inline int hostkey_type_to_add_type(ssh::hostkey_type::enum_t type)
function init (line 530) | inline boost::shared_ptr<LIBSSH2_KNOWNHOSTS>
class knownhost (line 233) | class knownhost
method knownhost (line 239) | knownhost(boost::shared_ptr<detail::session_state> session,
method name (line 247) | std::string name() const
method key (line 252) | std::string key() const
method comment (line 267) | std::string comment() const
method to_string (line 277) | std::string to_string(int type) const
method key_algo (line 315) | std::string key_algo() const
method is_name_plain (line 337) | bool is_name_plain() const
method is_name_sha1 (line 349) | bool is_name_sha1() const
method is_name_custom (line 358) | bool is_name_custom() const
class knownhost_iterator (line 375) | class knownhost_iterator
method knownhost_iterator (line 383) | knownhost_iterator() : m_pos(NULL)
method knownhost_iterator (line 397) | knownhost_iterator erase(knownhost_iterator it)
method knownhost_iterator (line 421) | knownhost_iterator(boost::shared_ptr<detail::session_state> session,
method knownhost_iterator (line 432) | knownhost_iterator(boost::shared_ptr<detail::session_state> session,
method increment (line 441) | void increment()
method equal (line 449) | bool equal(knownhost_iterator const& other) const
method knownhost (line 454) | knownhost dereference() const
class knownhost_search_result (line 470) | class knownhost_search_result
method knownhost_search_result (line 473) | knownhost_search_result(const knownhost_iterator& it,
method knownhost_iterator (line 480) | knownhost_iterator host() const
method mismatch (line 485) | bool mismatch() const
method match (line 490) | bool match() const
method not_found (line 495) | bool not_found() const
type detail (line 506) | namespace detail
class read_entry (line 76) | class read_entry : public std::unary_function<T, void>
method read_entry (line 79) | read_entry(boost::shared_ptr<session_state> session,
class write_entry (line 106) | class write_entry : public std::unary_function<const knownhost&, std...
method write_entry (line 109) | write_entry(boost::shared_ptr<session_state> /*session*/,
class line (line 131) | class line
method length (line 156) | std::string::size_type length() const
method data (line 161) | std::string::const_pointer data() const
function libssh2_knownhost (line 175) | inline libssh2_knownhost* next_host(boost::shared_ptr<session_state>...
function libssh2_knownhost (line 200) | inline libssh2_knownhost* add(boost::shared_ptr<session_state> session,
function internal_key (line 227) | inline std::string internal_key(const libssh2_knownhost* pos)
function hostkey_type_to_add_type (line 513) | inline int hostkey_type_to_add_type(ssh::hostkey_type::enum_t type)
function init (line 530) | inline boost::shared_ptr<LIBSSH2_KNOWNHOSTS>
class knownhost_collection (line 544) | class knownhost_collection
method knownhost_collection (line 547) | explicit knownhost_collection()
method knownhost_iterator (line 557) | knownhost_iterator begin() const
method knownhost_iterator (line 562) | knownhost_iterator end() const
method knownhost_search_result (line 567) | knownhost_search_result find(const std::string& host,
method knownhost_search_result (line 607) | knownhost_search_result find(const std::string& host,
method knownhost (line 613) | knownhost add(const std::string& host_or_ip, const std::string& key,
method knownhost (line 626) | knownhost add(const std::string& host_or_ip, const ssh::host_key& key)
method knownhost (line 631) | knownhost add_hashed(const std::string& host_or_ip, const std::strin...
method knownhost (line 644) | knownhost add_hashed(const std::string& host_or_ip, const std::strin...
method knownhost (line 651) | knownhost add_custom(const std::string& host_or_ip, const std::strin...
method knownhost (line 664) | knownhost add_custom(const std::string& host_or_ip,
method load_entries (line 684) | void load_entries(const InputIt& begin, const InputIt& end)
method OutputIt (line 703) | OutputIt save_entries(const knownhost_iterator& begin,
function knownhost (line 715) | knownhost add(knownhost_collection& hosts, const std::string& host_or_ip,
method knownhost (line 239) | knownhost(boost::shared_ptr<detail::session_state> session,
method name (line 247) | std::string name() const
method key (line 252) | std::string key() const
method comment (line 267) | std::string comment() const
method to_string (line 277) | std::string to_string(int type) const
method key_algo (line 315) | std::string key_algo() const
method is_name_plain (line 337) | bool is_name_plain() const
method is_name_sha1 (line 349) | bool is_name_sha1() const
method is_name_custom (line 358) | bool is_name_custom() const
function knownhost (line 721) | knownhost add_hashed(knownhost_collection& hosts, const std::string& h...
method knownhost (line 239) | knownhost(boost::shared_ptr<detail::session_state> session,
method name (line 247) | std::string name() const
method key (line 252) | std::string key() const
method comment (line 267) | std::string comment() const
method to_string (line 277) | std::string to_string(int type) const
method key_algo (line 315) | std::string key_algo() const
method is_name_plain (line 337) | bool is_name_plain() const
method is_name_sha1 (line 349) | bool is_name_sha1() const
method is_name_custom (line 358) | bool is_name_custom() const
function knownhost (line 728) | knownhost add_custom(knownhost_collection& hosts, const std::string& h...
method knownhost (line 239) | knownhost(boost::shared_ptr<detail::session_state> session,
method name (line 247) | std::string name() const
method key (line 252) | std::string key() const
method comment (line 267) | std::string comment() const
method to_string (line 277) | std::string to_string(int type) const
method key_algo (line 315) | std::string key_algo() const
method is_name_plain (line 337) | bool is_name_plain() const
method is_name_sha1 (line 349) | bool is_name_sha1() const
method is_name_custom (line 358) | bool is_name_custom() const
function knownhost (line 735) | knownhost update(knownhost_collection& hosts, const std::string& host_...
method knownhost (line 239) | knownhost(boost::shared_ptr<detail::session_state> session,
method name (line 247) | std::string name() const
method key (line 252) | std::string key() const
method comment (line 267) | std::string comment() const
method to_string (line 277) | std::string to_string(int type) const
method key_algo (line 315) | std::string key_algo() const
method is_name_plain (line 337) | bool is_name_plain() const
method is_name_sha1 (line 349) | bool is_name_sha1() const
method is_name_custom (line 358) | bool is_name_custom() const
class openssh_knownhost_collection (line 750) | class openssh_knownhost_collection : public knownhost_collection
method openssh_knownhost_collection (line 755) | openssh_knownhost_collection(InputIt begin, InputIt end)
method openssh_knownhost_collection (line 761) | openssh_knownhost_collection(const boost::filesystem::path& filename)
method OutputIt (line 783) | OutputIt save(const knownhost_iterator& begin,
method save (line 791) | void save(const boost::filesystem::path& filename) const
FILE: ssh/session.hpp
type ssh (line 70) | namespace ssh
type filesystem (line 73) | namespace filesystem
class sftp_filesystem (line 75) | class sftp_filesystem
type detail (line 78) | namespace detail
function convert_prompt (line 81) | inline std::pair<std::string, bool>
function convert_response (line 87) | inline void convert_response(LIBSSH2_USERAUTH_KBDINT_RESPONSE& raw_r...
class challenge_response_translator (line 112) | class challenge_response_translator
method challenge_response_translator (line 115) | challenge_response_translator(const ChallengeResponder& resp)
method do_challenge_response (line 124) | bool do_challenge_response(LIBSSH2_SESSION* session,
method translate_status (line 189) | bool translate_status(const boost::system::error_code& ec,
method dethunker (line 263) | static void dethunker(const char* name, int name_len,
method call_inner_responder (line 281) | void call_inner_responder(const char* name, int name_len,
class session (line 332) | class session : private boost::noncopyable
method session (line 354) | session(int socket, const std::string& disconnection_message =
method session (line 363) | session(BOOST_RV_REF(session) other)
method session (line 371) | session& operator=(BOOST_RV_REF(session) other)
method hostkey (line 380) | ssh::host_key hostkey()
method authentication_methods (line 396) | std::vector<std::string> authentication_methods(const std::string& u...
method authenticated (line 436) | bool authenticated()
method authenticate_by_password (line 460) | bool authenticate_by_password(const std::string& username,
method authenticate_interactively (line 542) | bool authenticate_interactively(const std::string& username,
method authenticate_by_key_files (line 583) | void authenticate_by_key_files(const std::string& username,
method agent_identities (line 600) | ::ssh::agent_identities agent_identities()
method connect_to_filesystem (line 614) | filesystem::sftp_filesystem connect_to_filesystem()
function swap (line 640) | inline void swap(session& lhs, session& rhs)
FILE: ssh/sftp_error.hpp
type ssh (line 51) | namespace ssh
type filesystem (line 53) | namespace filesystem
type detail (line 58) | namespace detail
function sftp_error_code_to_string (line 68) | inline std::string sftp_error_code_to_string(unsigned long code)
class _sftp_error_category (line 102) | class _sftp_error_category : public boost::system::error_category
method message (line 112) | virtual std::string message(int code) const
method default_error_condition (line 117) | virtual boost::system::error_condition
method equivalent (line 135) | virtual bool
method _sftp_error_category (line 157) | _sftp_error_category()
function last_sftp_error_code (line 181) | inline boost::system::error_code last_sftp_error_code(
type detail (line 174) | namespace detail
function sftp_error_code_to_string (line 68) | inline std::string sftp_error_code_to_string(unsigned long code)
class _sftp_error_category (line 102) | class _sftp_error_category : public boost::system::error_category
method message (line 112) | virtual std::string message(int code) const
method default_error_condition (line 117) | virtual boost::system::error_condition
method equivalent (line 135) | virtual bool
method _sftp_error_category (line 157) | _sftp_error_category()
function last_sftp_error_code (line 181) | inline boost::system::error_code last_sftp_error_code(
FILE: ssh/ssh_error.hpp
type ssh (line 56) | namespace ssh
type detail (line 61) | namespace detail
function ssh_error_code_to_string (line 68) | inline std::string ssh_error_code_to_string(int code)
class _ssh_error_category (line 125) | class _ssh_error_category : public boost::system::error_category
method message (line 135) | std::string message(int code) const
method default_error_condition (line 140) | virtual boost::system::error_condition
method _ssh_error_category (line 157) | _ssh_error_category()
function last_error_code (line 180) | inline boost::system::error_code last_error_code(
function BOOST_ATTRIBUTE_NORETURN (line 208) | BOOST_ATTRIBUTE_NORETURN inline void
function BOOST_ATTRIBUTE_NORETURN (line 225) | BOOST_ATTRIBUTE_NORETURN inline void
type detail (line 173) | namespace detail
function ssh_error_code_to_string (line 68) | inline std::string ssh_error_code_to_string(int code)
class _ssh_error_category (line 125) | class _ssh_error_category : public boost::system::error_category
method message (line 135) | std::string message(int code) const
method default_error_condition (line 140) | virtual boost::system::error_condition
method _ssh_error_category (line 157) | _ssh_error_category()
function last_error_code (line 180) | inline boost::system::error_code last_error_code(
function BOOST_ATTRIBUTE_NORETURN (line 208) | BOOST_ATTRIBUTE_NORETURN inline void
function BOOST_ATTRIBUTE_NORETURN (line 225) | BOOST_ATTRIBUTE_NORETURN inline void
FILE: ssh/stream.hpp
type ssh (line 59) | namespace ssh
type filesystem (line 61) | namespace filesystem
type openmode (line 74) | struct openmode
type value (line 76) | enum value
type detail (line 174) | namespace detail
function translate_flags (line 177) | inline openmode::value translate_flags(std::ios_base::openmode std...
function openmode_to_libssh2_flags (line 216) | inline long openmode_to_libssh2_flags(openmode::value opening_mode)
function open_file (line 297) | inline boost::shared_ptr<::ssh::detail::file_handle_state>
function open_input_file (line 313) | inline boost::shared_ptr<::ssh::detail::file_handle_state>
function open_output_file (line 323) | inline boost::shared_ptr<::ssh::detail::file_handle_state>
function seek (line 334) | inline boost::iostreams::stream_offset
function read (line 391) | inline std::streamsize read(::ssh::detail::file_handle_state& handle,
function write (line 427) | inline std::streamsize write(::ssh::detail::file_handle_state& han...
type input_device_category (line 465) | struct input_device_category : boost::iostreams::input_seekable,
type output_device_category (line 470) | struct output_device_category : boost::iostreams::output_seekable,
type io_device_category (line 475) | struct io_device_category : boost::iostreams::seekable,
class sftp_stream (line 487) | class sftp_stream : public boost::iostreams::stream<Device>
method sftp_stream (line 493) | sftp_stream(sftp_filesystem& channel, const path& open_path)
method sftp_stream (line 498) | sftp_stream(sftp_filesystem& channel, const path& open_path,
method sftp_stream (line 504) | sftp_stream(sftp_filesystem& channel, const path& open_path,
method sftp_stream (line 510) | sftp_stream(sftp_filesystem& channel, const path& open_path,
method sftp_stream (line 516) | sftp_stream(sftp_filesystem& channel, const path& open_path,
class sftp_input_device (line 537) | class sftp_input_device
method sftp_input_device (line 541) | sftp_input_device(sftp_filesystem& channel, const path& open_path,
method sftp_input_device (line 549) | sftp_input_device(sftp_filesystem& channel, const path& open_path,
method optimal_buffer_size (line 558) | std::streamsize optimal_buffer_size() const
method read (line 563) | std::streamsize read(char* buffer, std::streamsize buffer_size)
method seek (line 568) | boost::iostreams::stream_offset seek(boost::iostreams::stream_offs...
class sftp_output_device (line 590) | class sftp_output_device
method sftp_output_device (line 594) | sftp_output_device(sftp_filesystem& channel, const path& open_path,
method sftp_output_device (line 602) | sftp_output_device(sftp_filesystem& channel, const path& open_path,
method optimal_buffer_size (line 611) | std::streamsize optimal_buffer_size() const
method write (line 616) | std::streamsize write(const char* data, std::streamsize data_size)
method seek (line 621) | boost::iostreams::stream_offset seek(boost::iostreams::stream_offs...
class sftp_io_device (line 643) | class sftp_io_device
method sftp_io_device (line 647) | sftp_io_device(sftp_filesystem& channel, const path& open_path,
method sftp_io_device (line 655) | sftp_io_device(sftp_filesystem& channel, const path& open_path,
method optimal_buffer_size (line 663) | std::streamsize optimal_buffer_size() const
method read (line 668) | std::streamsize read(char* buffer, std::streamsize buffer_size)
method write (line 673) | std::streamsize write(const char* data, std::streamsize data_size)
method seek (line 678) | boost::iostreams::stream_offset seek(boost::iostreams::stream_offs...
FILE: swish/CoFactory.hpp
type swish (line 41) | namespace swish {
class CCoFactory (line 44) | class CCoFactory
method CreateCoObject (line 58) | static ATL::CComPtr<T> CreateCoObject() throw(...)
FILE: swish/atl.hpp
function AtlThrow (line 89) | __declspec(noreturn) inline void AtlThrow(HRESULT hr)
FILE: swish/connection/authenticated_session.cpp
type swish (line 100) | namespace swish {
type connection (line 101) | namespace connection {
function verify_host_key (line 108) | void verify_host_key(
function password_authentication (line 193) | password_authentication(
class user_aborted_authentication (line 219) | class user_aborted_authentication :
method user_aborted_authentication (line 223) | user_aborted_authentication() :
class consumer_responder (line 231) | class consumer_responder
method consumer_responder (line 235) | consumer_responder(com_ptr<ISftpConsumer> consumer)
function keyboard_interactive_authentication (line 283) | keyboard_interactive_authentication(
function public_key_file_based_authentication (line 330) | public_key_file_based_authentication(
function public_key_agent_authentication (line 353) | public_key_agent_authentication(
function authenticate_user (line 389) | void authenticate_user(
function running_session (line 468) | running_session create_and_authenticate(
function session (line 506) | session& authenticated_session::get_session()
function sftp_filesystem (line 511) | sftp_filesystem& authenticated_session::get_sftp_filesystem()
function swap (line 521) | void swap(authenticated_session& lhs, authenticated_session& rhs)
FILE: swish/connection/authenticated_session.hpp
type swish (line 54) | namespace swish {
type connection (line 55) | namespace connection {
class authenticated_session (line 67) | class authenticated_session : private boost::noncopyable
FILE: swish/connection/connection_spec.cpp
type swish (line 45) | namespace swish {
type connection (line 46) | namespace connection {
function authenticated_session (line 58) | authenticated_session connection_spec::create_session(
FILE: swish/connection/connection_spec.hpp
type swish (line 37) | namespace swish {
type connection (line 38) | namespace connection {
class authenticated_session (line 44) | class authenticated_session
class connection_spec (line 53) | class connection_spec
FILE: swish/connection/interruptable_session.hpp
type swish (line 36) | namespace swish {
type connection (line 37) | namespace connection {
class interruptable_session (line 39) | class interruptable_session
method authenticate_interactively (line 53) | bool authenticate_interactively(
FILE: swish/connection/running_session.cpp
type swish (line 51) | namespace swish
type connection (line 53) | namespace connection
function connect_socket_to_host (line 64) | void connect_socket_to_host(tcp::socket& socket, const wstring& host,
function session_on_socket (line 99) | ssh::session session_on_socket(tcp::socket& socket, const wstring& h...
function session (line 129) | session& running_session::get_session()
function swap (line 148) | void swap(running_session& lhs, running_session& rhs)
FILE: swish/connection/running_session.hpp
type swish (line 50) | namespace swish {
type connection (line 51) | namespace connection {
class running_session (line 61) | class running_session : private boost::noncopyable
FILE: swish/connection/session_manager.cpp
type swish (line 65) | namespace swish {
type connection (line 66) | namespace connection {
class task_registration (line 70) | class task_registration
method task_registration (line 77) | task_registration(
method string (line 89) | string name() const
method connection_spec (line 96) | connection_spec specification() const
class session_reservation_impl (line 111) | class session_reservation_impl : private boost::noncopyable
method session_reservation_impl (line 115) | session_reservation_impl(
method authenticated_session (line 125) | authenticated_session& session()
class reservations_ledger (line 141) | class reservations_ledger
method new_reservation (line 147) | void new_reservation(
method reservations_for_connection (line 153) | vector<task_registration> reservations_for_connection(
method unreserve (line 170) | void unreserve(const task_registration& task)
function string (line 191) | string extract_task_name(const task_registration& task)
class session_manager_impl (line 197) | class session_manager_impl
method has_session (line 201) | bool has_session(const connection_spec& specification) const
method session_reservation (line 206) | session_reservation reserve_session(
method disconnect_session (line 231) | void disconnect_session(
method wait_for_remaining_uses (line 255) | bool wait_for_remaining_uses(
method unreserve_session (line 313) | void unreserve_session(const task_registration& task_id)
method session_manager_impl (line 320) | session_manager_impl() {}
method session_manager_impl (line 328) | static session_manager_impl& get()
method do_init (line 334) | static void do_init()
function authenticated_session (line 377) | authenticated_session& session_reservation::session()
function session_reservation (line 382) | session_reservation session_manager::reserve_session(
FILE: swish/connection/session_manager.hpp
type swish (line 43) | namespace swish {
type connection (line 44) | namespace connection {
class session_reservation_impl (line 46) | class session_reservation_impl
class session_reservation (line 55) | class session_reservation : private boost::noncopyable
class session_manager (line 96) | class session_manager
FILE: swish/connection/session_pool.cpp
type swish (line 50) | namespace swish {
type connection (line 51) | namespace connection {
class session_pool_impl (line 58) | class session_pool_impl
method session_pool_impl (line 69) | static session_pool_impl& get()
method destroy (line 75) | static void destroy()
method authenticated_session (line 80) | authenticated_session& pooled_session(
method has_session (line 111) | bool has_session(const connection_spec& specification) const
method remove_session (line 118) | void remove_session(const connection_spec& specification)
method session_pool_impl (line 128) | session_pool_impl() {}
method do_init (line 130) | static void do_init()
function authenticated_session (line 149) | authenticated_session& session_pool::pooled_session(
FILE: swish/connection/session_pool.hpp
type swish (line 40) | namespace swish {
type connection (line 41) | namespace connection {
class session_pool (line 48) | class session_pool
FILE: swish/drop_target/CopyFileOperation.cpp
type swish (line 70) | namespace swish {
type drop_target (line 71) | namespace drop_target {
function size_of_stream (line 80) | int64_t size_of_stream(const com_ptr<IStream>& stream)
function copy_stream_to_remote_destination (line 107) | void copy_stream_to_remote_destination(
function Operation (line 263) | Operation* CopyFileOperation::do_clone() const
FILE: swish/drop_target/CopyFileOperation.hpp
type swish (line 40) | namespace swish {
type drop_target (line 41) | namespace drop_target {
class CopyFileOperation (line 43) | class CopyFileOperation : public Operation
FILE: swish/drop_target/CreateDirectoryOperation.cpp
type swish (line 48) | namespace swish {
type drop_target (line 49) | namespace drop_target {
function wstring (line 55) | wstring CreateDirectoryOperation::title() const
function wstring (line 66) | wstring CreateDirectoryOperation::description() const
function Operation (line 92) | Operation* CreateDirectoryOperation::do_clone() const
FILE: swish/drop_target/CreateDirectoryOperation.hpp
type swish (line 38) | namespace swish {
type drop_target (line 39) | namespace drop_target {
class CreateDirectoryOperation (line 41) | class CreateDirectoryOperation : public Operation
FILE: swish/drop_target/DropActionCallback.hpp
type swish (line 35) | namespace swish {
type drop_target (line 36) | namespace drop_target {
class Progress (line 38) | class Progress
class DropActionCallback (line 43) | class DropActionCallback
FILE: swish/drop_target/DropTarget.cpp
type comet::comtype<IAsyncOperation> (line 62) | struct comet::comtype<IAsyncOperation>
method IID (line 64) | static const IID& uuid() throw() { return IID_IAsyncOperation; }
type comet::comtype<IDataObject> (line 68) | struct comet::comtype<IDataObject>
method IID (line 70) | static const IID& uuid() throw() { return IID_IDataObject; }
type swish (line 74) | namespace swish {
type drop_target (line 75) | namespace drop_target {
function DWORD (line 84) | DWORD determine_drop_effect(
function copy_format_to_provider (line 111) | void copy_format_to_provider(
function async_copy_format_to_provider (line 122) | void async_copy_format_to_provider(
function copy_data_to_provider (line 171) | void copy_data_to_provider(
function STDMETHODIMP (line 226) | STDMETHODIMP CDropTarget::DragEnter(
function STDMETHODIMP (line 250) | STDMETHODIMP CDropTarget::DragOver(
function STDMETHODIMP (line 268) | STDMETHODIMP CDropTarget::DragLeave()
function STDMETHODIMP (line 285) | STDMETHODIMP CDropTarget::Drop(
FILE: swish/drop_target/DropTarget.hpp
type comet::comtype<IDropTarget> (line 48) | struct comet::comtype<IDropTarget>
method IID (line 50) | static const IID& uuid() throw() { return IID_IDropTarget; }
type swish (line 54) | namespace swish {
type drop_target (line 55) | namespace drop_target {
class CDropTarget (line 57) | class CDropTarget :
FILE: swish/drop_target/DropUI.cpp
type swish (line 72) | namespace swish {
type drop_target (line 73) | namespace drop_target {
function do_events (line 80) | void do_events()
class DropProgress (line 112) | class DropProgress : public noncopyable, public Progress
method DropProgress (line 116) | DropProgress(
method user_cancelled (line 124) | bool user_cancelled()
method line (line 146) | void line(DWORD index, const wstring& text)
method line_path (line 157) | void line_path(DWORD index, const wstring& text)
method update (line 166) | void update(ULONGLONG so_far, ULONGLONG out_of)
method hide (line 179) | void hide()
method show (line 195) | void show()
method progress (line 205) | static progress create_dialog(
class ScopedDisabler (line 224) | class ScopedDisabler
method ScopedDisabler (line 227) | ScopedDisabler(Progress& progress) : m_progress(progress)
class DummyProgress (line 298) | class DummyProgress : public Progress
method user_cancelled (line 301) | virtual bool user_cancelled()
method line (line 306) | virtual void line(DWORD, const std::wstring&) {}
method line_path (line 307) | virtual void line_path(DWORD, const std::wstring&) {}
method update (line 308) | virtual void update(ULONGLONG, ULONGLONG) {}
method hide (line 309) | virtual void hide() {}
method show (line 310) | virtual void show() {}
FILE: swish/drop_target/DropUI.hpp
type swish (line 40) | namespace swish {
type drop_target (line 41) | namespace drop_target {
class DropUI (line 47) | class DropUI : public DropActionCallback
FILE: swish/drop_target/Operation.hpp
type swish (line 44) | namespace swish {
type drop_target (line 45) | namespace drop_target {
class DropActionCallback (line 47) | class DropActionCallback
class OperationCallback (line 57) | class OperationCallback
class Operation (line 81) | class Operation
method Operation (line 94) | Operation* clone() const
function Operation (line 106) | inline Operation* new_clone(const Operation& item)
method Operation (line 94) | Operation* clone() const
FILE: swish/drop_target/PidlCopyPlan.cpp
type swish (line 70) | namespace swish {
type drop_target (line 71) | namespace drop_target {
function path (line 78) | path target_name_from_source(const RootedSource& source)
function output_operations_for_stream_pidl (line 85) | void output_operations_for_stream_pidl(
function output_operations_for_folder_pidl (line 99) | void output_operations_for_folder_pidl(
function output_operations_for_pidl (line 126) | void output_operations_for_pidl(
FILE: swish/drop_target/PidlCopyPlan.hpp
type swish (line 39) | namespace swish {
type drop_target (line 40) | namespace drop_target {
class PidlCopyPlan (line 45) | class PidlCopyPlan /* final */ : public Plan
FILE: swish/drop_target/Plan.hpp
type swish (line 36) | namespace swish {
type drop_target (line 37) | namespace drop_target {
class DropActionCallback (line 39) | class DropActionCallback
class Plan (line 44) | class Plan
FILE: swish/drop_target/Progress.hpp
type swish (line 35) | namespace swish {
type drop_target (line 36) | namespace drop_target {
class Progress (line 38) | class Progress
FILE: swish/drop_target/RootedSource.hpp
type swish (line 37) | namespace swish {
type drop_target (line 38) | namespace drop_target {
type detail (line 40) | namespace detail {
function display_name_of_item (line 42) | inline std::wstring display_name_of_item(
function relative_name_for_pidl (line 54) | inline std::wstring relative_name_for_pidl(
class RootedSource (line 87) | class RootedSource
method RootedSource (line 90) | RootedSource(
method pidl (line 100) | washer::shell::pidl::apidl_t pidl() const
method relative_name (line 105) | std::wstring relative_name() const
method RootedSource (line 110) | RootedSource operator/(const washer::shell::pidl::pidl_t& pidl) const
FILE: swish/drop_target/SequentialPlan.cpp
type swish (line 59) | namespace swish {
type drop_target (line 60) | namespace drop_target {
function uintmax_t (line 69) | uintmax_t percentage(uintmax_t done, uintmax_t total)
class IntraSequenceCallback (line 90) | class IntraSequenceCallback : public OperationCallback
method IntraSequenceCallback (line 94) | IntraSequenceCallback(
method check_if_user_cancelled (line 102) | virtual void check_if_user_cancelled() const
method request_overwrite_permission (line 107) | virtual bool request_overwrite_permission(const path& target) const
method update_progress (line 120) | virtual void update_progress(uintmax_t so_far, uintmax_t out_of)
class OperationExecutor (line 145) | class OperationExecutor : private OperationCallback
method OperationExecutor (line 148) | OperationExecutor(DropActionCallback& callback)
method check_if_user_cancelled (line 175) | virtual void check_if_user_cancelled() const
method request_overwrite_permission (line 184) | virtual bool request_overwrite_permission(const path& target) const
method update_progress (line 189) | virtual void update_progress(uintmax_t so_far, uintmax_t out_of)
method Progress (line 196) | Progress& progress()
FILE: swish/drop_target/SequentialPlan.hpp
type swish (line 37) | namespace swish {
type drop_target (line 38) | namespace drop_target {
class Operation (line 40) | class Operation
class SequentialPlan (line 48) | class SequentialPlan /* final */ : public Plan
FILE: swish/drop_target/SftpDestination.hpp
type swish (line 45) | namespace swish {
type drop_target (line 46) | namespace drop_target {
class resolved_destination (line 52) | class resolved_destination
method resolved_destination (line 55) | resolved_destination(
method filename (line 71) | const std::wstring filename() const
method as_absolute_path (line 76) | ssh::filesystem::path as_absolute_path() const
class SftpDestination (line 96) | class SftpDestination
method SftpDestination (line 99) | SftpDestination(
method resolved_destination (line 109) | resolved_destination resolve_destination() const
method SftpDestination (line 127) | SftpDestination operator/(const ssh::filesystem::path& path) const
method root_name (line 132) | std::wstring root_name() const
FILE: swish/forms/add_host.cpp
type swish (line 66) | namespace swish {
type forms (line 67) | namespace forms {
class AddHostForm (line 97) | class AddHostForm
method AddHostForm (line 100) | AddHostForm(HWND owner)
method was_cancelled (line 203) | bool was_cancelled() const { return m_cancelled; }
method name (line 205) | const std::wstring name() const { return m_name_box.text(); }
method host (line 206) | const std::wstring host() const { return m_host_box.text(); }
method user (line 207) | const std::wstring user() const { return m_user_box.text(); }
method port (line 208) | int port() const { return lexical_cast<int>(m_port_box.text()); }
method path (line 209) | const std::wstring path() const { return m_path_box.text(); }
method is_valid_name (line 224) | bool is_valid_name() const
method is_valid_host (line 239) | bool is_valid_host() const
method is_valid_user (line 257) | bool is_valid_user() const
method is_valid_port (line 271) | bool is_valid_port() const
method is_valid_path (line 292) | bool is_valid_path() const
method all_fields_complete (line 299) | bool all_fields_complete() const
method on_ok (line 311) | void on_ok()
method update_validity (line 322) | void update_validity()
function host_info (line 411) | host_info add_host(HWND owner)
FILE: swish/forms/add_host.hpp
type swish (line 35) | namespace swish {
type forms (line 36) | namespace forms {
type host_info (line 38) | struct host_info
FILE: swish/forms/password.cpp
type swish (line 47) | namespace swish {
type forms (line 48) | namespace forms {
class PasswordForm (line 52) | class PasswordForm
method PasswordForm (line 55) | PasswordForm(HWND hwnd_owner, const wstring& prompt)
method on_ok (line 75) | void on_ok()
method was_cancelled (line 81) | bool was_cancelled() const
method wstring (line 84) | wstring password() const
function password_prompt (line 94) | bool password_prompt(
FILE: swish/forms/password.hpp
type swish (line 35) | namespace swish {
type forms (line 36) | namespace forms {
FILE: swish/frontend/UserInteraction.cpp
type swish (line 67) | namespace swish {
type frontend (line 68) | namespace frontend {
function HRESULT (line 128) | HRESULT on_confirm_overwrite(
function HRESULT (line 162) | HRESULT CUserInteraction::OnConfirmOverwrite(
function HRESULT (line 176) | HRESULT return_hr(HRESULT hr) { return hr; }
function HRESULT (line 178) | HRESULT on_hostkey_mismatch(
function HRESULT (line 225) | HRESULT on_hostkey_unknown(
function HRESULT (line 270) | HRESULT CUserInteraction::OnHostkeyMismatch(
function HRESULT (line 281) | HRESULT CUserInteraction::OnHostkeyUnknown(
FILE: swish/frontend/UserInteraction.hpp
type swish (line 36) | namespace swish {
type frontend (line 37) | namespace frontend {
class CUserInteraction (line 39) | class CUserInteraction : public comet::simple_object<ISftpConsumer>
FILE: swish/frontend/announce_error.cpp
function wstring (line 57) | wstring hexify_hr(HRESULT hr)
function wstring (line 66) | wstring hresult_code(HRESULT hr)
function wstring (line 106) | wstring format_exception(const exception& error)
function wstring (line 117) | wstring format_exception(const com_error& error)
type swish (line 130) | namespace swish {
type frontend (line 131) | namespace frontend {
function announce_error (line 133) | void announce_error(
function announce_last_exception (line 147) | void announce_last_exception(
FILE: swish/frontend/announce_error.hpp
type swish (line 35) | namespace swish {
type frontend (line 36) | namespace frontend {
FILE: swish/frontend/bind_best_taskdialog.cpp
type swish (line 42) | namespace swish {
type frontend (line 43) | namespace frontend {
function tdi_function (line 45) | tdi_function bind_best_taskdialog()
FILE: swish/frontend/bind_best_taskdialog.hpp
type swish (line 33) | namespace swish {
type frontend (line 34) | namespace frontend {
class best_taskdialog (line 38) | class best_taskdialog : public washer::gui::task_dialog::tdi_impleme...
method best_taskdialog (line 41) | best_taskdialog()
FILE: swish/frontend/commands/About.cpp
type swish (line 54) | namespace swish {
type frontend (line 55) | namespace frontend {
type commands (line 56) | namespace commands {
function path (line 62) | path installation_path()
FILE: swish/frontend/commands/About.hpp
type swish (line 22) | namespace swish {
type frontend (line 23) | namespace frontend {
type commands (line 24) | namespace commands {
class About (line 26) | class About : public swish::nse::Command
FILE: swish/frontend/winsparkle_shower.cpp
type swish (line 34) | namespace swish {
type frontend (line 35) | namespace frontend {
FILE: swish/frontend/winsparkle_shower.hpp
type swish (line 33) | namespace swish {
type frontend (line 34) | namespace frontend {
class winsparkle_shower (line 36) | class winsparkle_shower
FILE: swish/host_folder/ViewCallback.cpp
type comet::comtype<IDataObject> (line 61) | struct comet::comtype<IDataObject>
method IID (line 63) | static const IID& uuid() throw() { return IID_IDataObject; }
type swish (line 67) | namespace swish {
type host_folder (line 68) | namespace host_folder {
function selection_shell_item_array (line 77) | com_ptr<IShellItemArray> selection_shell_item_array(
function is_vista_or_greater (line 94) | bool is_vista_or_greater()
FILE: swish/host_folder/ViewCallback.hpp
type swish (line 40) | namespace swish {
type host_folder (line 41) | namespace host_folder {
class CViewCallback (line 43) | class CViewCallback :
FILE: swish/host_folder/columns.cpp
type swish (line 47) | namespace swish {
type host_folder (line 48) | namespace host_folder {
function column_entry (line 82) | const column_entry& HostColumnEntries::entry(size_t index) const
function property_key (line 90) | const property_key& property_key_from_column_index(size_t index)
FILE: swish/host_folder/columns.hpp
type swish (line 45) | namespace swish {
type host_folder (line 46) | namespace host_folder {
type column_entry (line 51) | struct column_entry
method title (line 66) | std::wstring title() const
method SHCOLSTATEF (line 71) | SHCOLSTATEF flags() const { return m_flags; }
method format (line 72) | int format() const { return m_format; }
method avg_char_width (line 73) | int avg_char_width() const { return m_avg_char_width; }
method detail (line 81) | std::wstring detail(const washer::shell::pidl::cpidl_t& pidl) const
method compare (line 86) | int compare(
class HostColumnEntries (line 99) | class HostColumnEntries
FILE: swish/host_folder/commands/Add.cpp
type swish (line 54) | namespace swish {
type host_folder (line 55) | namespace host_folder {
type commands (line 56) | namespace commands {
function notify_shell (line 68) | void notify_shell(const apidl_t folder_pidl)
FILE: swish/host_folder/commands/Add.hpp
type swish (line 25) | namespace swish {
type host_folder (line 26) | namespace host_folder {
type commands (line 27) | namespace commands {
class Add (line 29) | class Add : public swish::nse::Command
FILE: swish/host_folder/commands/CloseSession.cpp
type swish (line 86) | namespace swish {
type host_folder (line 87) | namespace host_folder {
type commands (line 88) | namespace commands {
function notify_shell (line 96) | void notify_shell(const apidl_t item)
function start_marquee (line 145) | void start_marquee(progress_bar bar)
function wstring (line 151) | wstring ui_content_text(const PendingTaskRange& pending_tasks)
function do_nothing_command (line 176) | void do_nothing_command() {}
function start_async (line 179) | pair<shared_ptr<unique_future<Result>>, shared_ptr<thread>>
class async_task_dialog_runner (line 192) | class async_task_dialog_runner : private noncopyable
method async_task_dialog_runner (line 195) | explicit async_task_dialog_runner(task_dialog_builder<Result, Im...
method task_dialog (line 217) | task_dialog dialog()
method on_create (line 241) | void on_create(const task_dialog& dialog)
method Result (line 247) | Result dialog_loop()
class running_dialog (line 263) | class running_dialog
method running_dialog (line 267) | running_dialog(
method task_dialog (line 273) | task_dialog dialog()
method command_id (line 278) | command_id dismissal_command_id()
method dialog_has_been_dismissed (line 283) | bool dialog_has_been_dismissed()
function running_dialog (line 295) | running_dialog run_task_dialog(const PendingTaskRange& pending_tasks)
method running_dialog (line 267) | running_dialog(
method task_dialog (line 273) | task_dialog dialog()
method command_id (line 278) | command_id dismissal_command_id()
method dialog_has_been_dismissed (line 283) | bool dialog_has_been_dismissed()
class waiting_ui (line 314) | class waiting_ui
method waiting_ui (line 318) | explicit waiting_ui(const PendingTaskRange& pending_tasks)
method update (line 322) | bool update(const PendingTaskRange& pending_tasks)
class disconnection_progress (line 342) | class disconnection_progress : private noncopyable
FILE: swish/host_folder/commands/CloseSession.hpp
type swish (line 24) | namespace swish {
type host_folder (line 25) | namespace host_folder {
type commands (line 26) | namespace commands {
class CloseSession (line 28) | class CloseSession : public swish::nse::Command
FILE: swish/host_folder/commands/LaunchAgent.cpp
type swish (line 57) | namespace swish {
type host_folder (line 58) | namespace host_folder {
type commands (line 59) | namespace commands {
function path (line 66) | path pageant_path()
function notify_shell (line 79) | void notify_shell(const apidl_t folder_pidl)
FILE: swish/host_folder/commands/LaunchAgent.hpp
type swish (line 26) | namespace swish {
type host_folder (line 27) | namespace host_folder {
type commands (line 28) | namespace commands {
class LaunchAgent (line 30) | class LaunchAgent : public swish::nse::Command
FILE: swish/host_folder/commands/Remove.cpp
type swish (line 51) | namespace swish {
type host_folder (line 52) | namespace host_folder {
type commands (line 53) | namespace commands {
function notify_shell (line 65) | void notify_shell(const apidl_t& folder_pidl)
FILE: swish/host_folder/commands/Remove.hpp
type swish (line 26) | namespace swish {
type host_folder (line 27) | namespace host_folder {
type commands (line 28) | namespace commands {
class Remove (line 30) | class Remove : public swish::nse::Command
FILE: swish/host_folder/commands/Rename.cpp
type swish (line 51) | namespace swish {
type host_folder (line 52) | namespace host_folder {
type commands (line 53) | namespace commands {
FILE: swish/host_folder/commands/Rename.hpp
type swish (line 22) | namespace swish {
type host_folder (line 23) | namespace host_folder {
type commands (line 24) | namespace commands {
class Rename (line 26) | class Rename : public swish::nse::Command
FILE: swish/host_folder/commands/commands.cpp
type swish (line 63) | namespace swish {
type host_folder (line 64) | namespace host_folder {
type commands (line 65) | namespace commands {
function host_folder_command_provider (line 67) | com_ptr<IExplorerCommandProvider> host_folder_command_provider(
class CSftpTasksTitle (line 79) | class CSftpTasksTitle : public simple_object<CUIElementErrorAdapter>
method title (line 83) | virtual std::wstring title(
method icon (line 89) | virtual std::wstring icon(
method tool_tip (line 95) | virtual std::wstring tool_tip(
function host_folder_task_pane_titles (line 103) | std::pair<com_ptr<IUIElement>, com_ptr<IUIElement> >
function host_folder_task_pane_tasks (line 109) | std::pair<com_ptr<IEnumUICommand>, com_ptr<IEnumUICommand> >
FILE: swish/host_folder/commands/commands.hpp
type swish (line 30) | namespace swish {
type host_folder (line 31) | namespace host_folder {
type commands (line 32) | namespace commands {
FILE: swish/host_folder/context_menu_callback.cpp
type swish (line 41) | namespace swish {
type host_folder (line 42) | namespace host_folder {
function do_invoke_command (line 49) | bool do_invoke_command(
FILE: swish/host_folder/context_menu_callback.hpp
type swish (line 35) | namespace swish {
type host_folder (line 36) | namespace host_folder {
class context_menu_callback (line 38) | class context_menu_callback : public swish::nse::default_context_men...
FILE: swish/host_folder/extract_icon.hpp
type swish (line 39) | namespace swish {
type host_folder (line 40) | namespace host_folder {
class extract_icon_co (line 42) | class extract_icon_co : public comet::simple_object<IExtractIconW>
method extract_icon_co (line 45) | extract_icon_co(
method STDMETHODIMP (line 56) | STDMETHODIMP extract_icon_co::Extract(
method STDMETHODIMP (line 68) | STDMETHODIMP extract_icon_co::GetIconLocation(
FILE: swish/host_folder/host_itemid_connection.cpp
type swish (line 35) | namespace swish {
type host_folder (line 36) | namespace host_folder {
function connection_spec (line 38) | connection_spec connection_from_host_itemid(const host_itemid_view& ...
FILE: swish/host_folder/host_itemid_connection.hpp
type swish (line 35) | namespace swish {
type host_folder (line 36) | namespace host_folder {
FILE: swish/host_folder/host_management.cpp
function regkey (line 61) | regkey get_connection_from_registry(const wstring& label)
type swish (line 70) | namespace swish {
type host_folder (line 71) | namespace host_folder {
type host_management (line 72) | namespace host_management {
function FindConnectionInRegistry (line 85) | optional<cpidl_t> FindConnectionInRegistry(const wstring& label)
function cpidl_t (line 107) | cpidl_t GetConnectionDetailsFromRegistry(const wstring& label) {
function LoadConnectionsFromRegistry (line 124) | vector<cpidl_t> LoadConnectionsFromRegistry()
function AddConnectionToRegistry (line 150) | void AddConnectionToRegistry(
function delete_all_subkeys_recursively (line 178) | void delete_all_subkeys_recursively(const regkey& key)
function delete_subkey_recursively (line 188) | void delete_subkey_recursively(
function RemoveConnectionFromRegistry (line 199) | void RemoveConnectionFromRegistry(wstring label)
function RenameConnectionInRegistry (line 207) | void RenameConnectionInRegistry(const wstring& from_label, const w...
class label_matches (line 222) | class label_matches
method label_matches (line 226) | label_matches(const wstring& label) : m_label(label) {}
function ConnectionExists (line 241) | bool ConnectionExists(wstring label)
FILE: swish/host_folder/host_management.hpp
type swish (line 38) | namespace swish {
type host_folder (line 39) | namespace host_folder {
type host_management (line 40) | namespace host_management {
FILE: swish/host_folder/host_pidl.hpp
type swish (line 56) | namespace swish {
type host_folder (line 57) | namespace host_folder {
type detail (line 59) | namespace detail {
type host_item_id (line 62) | struct host_item_id
function copy_unaligned_string (line 78) | inline std::wstring copy_unaligned_string(const wchar_t __unaligne...
type is_valid_host_item (line 159) | struct is_valid_host_item
type host_item_template (line 204) | struct host_item_template
class host_itemid_view (line 93) | class host_itemid_view
method host_itemid_view (line 102) | explicit host_itemid_view(
method host_itemid_view (line 106) | explicit host_itemid_view(PCUIDLIST_RELATIVE pidl)
method valid (line 109) | bool valid() const
method host (line 118) | std::wstring host() const
method user (line 125) | std::wstring user() const
method label (line 132) | std::wstring label() const
method path (line 139) | ssh::filesystem::path path() const
method port (line 147) | int port() const
type detail (line 158) | namespace detail {
type host_item_id (line 62) | struct host_item_id
function copy_unaligned_string (line 78) | inline std::wstring copy_unaligned_string(const wchar_t __unaligne...
type is_valid_host_item (line 159) | struct is_valid_host_item
type host_item_template (line 204) | struct host_item_template
function find_host_itemid (line 178) | inline washer::shell::pidl::raw_pidl_iterator find_host_itemid(
function find_host_itemid (line 195) | inline washer::shell::pidl::raw_pidl_iterator find_host_itemid(
type detail (line 201) | namespace detail {
type host_item_id (line 62) | struct host_item_id
function copy_unaligned_string (line 78) | inline std::wstring copy_unaligned_string(const wchar_t __unaligne...
type is_valid_host_item (line 159) | struct is_valid_host_item
type host_item_template (line 204) | struct host_item_template
function create_host_itemid (line 216) | inline washer::shell::pidl::cpidl_t create_host_itemid(
function url_from_host_itemid (line 260) | inline std::wstring url_from_host_itemid(
FILE: swish/host_folder/menu_command_manager.cpp
type swish (line 72) | namespace swish {
type host_folder (line 73) | namespace host_folder {
function item (line 81) | item item_from_menu(
function item (line 100) | item fallback_menu(const menu_bar& parent_menu)
function item (line 111) | item tools_menu_with_fallback(const menu_bar& parent_menu)
function item (line 131) | item help_menu_with_fallback(const menu_bar& parent_menu)
function merge_command_items (line 145) | void merge_command_items(
class merge_tools_command_items (line 186) | class merge_tools_command_items
method merge_tools_command_items (line 192) | merge_tools_command_items(
class merge_help_command_items (line 234) | class merge_help_command_items
method merge_help_command_items (line 240) | merge_help_command_items(
class update_command_items (line 364) | class update_command_items
method update_command_items (line 370) | update_command_items(
class selectability_setter (line 377) | class selectability_setter
method selectability_setter (line 382) | selectability_setter(BOOST_SCOPED_ENUM(selectability) selectabil...
method BOOST_FOREACH (line 405) | BOOST_FOREACH(const mapped_command& menu_command, m_commands)
FILE: swish/host_folder/menu_command_manager.hpp
type swish (line 38) | namespace swish {
type host_folder (line 39) | namespace host_folder {
class menu_command_manager (line 46) | class menu_command_manager
FILE: swish/host_folder/overlay_icon.hpp
type swish (line 39) | namespace swish {
type host_folder (line 40) | namespace host_folder {
class overlay_icon (line 42) | class overlay_icon
method overlay_icon (line 45) | overlay_icon(const washer::shell::pidl::cpidl_t& item)
method has_overlay (line 50) | bool has_overlay() const
method index (line 55) | int index() const
method icon_index (line 60) | int icon_index() const
FILE: swish/host_folder/properties.cpp
type swish (line 52) | namespace swish {
type host_folder (line 53) | namespace host_folder {
class unknown_property_error (line 66) | class unknown_property_error : public std::runtime_error
method unknown_property_error (line 69) | unknown_property_error() : std::runtime_error("Unknown property") {}
function variant_t (line 77) | variant_t net_drive_returner(const cpidl_t& /*pidl*/)
function variant_t (line 82) | variant_t label_getter(const cpidl_t& pidl)
function variant_t (line 84) | variant_t host_getter(const cpidl_t& pidl)
function variant_t (line 86) | variant_t user_getter(const cpidl_t& pidl)
function variant_t (line 88) | variant_t port_getter(const cpidl_t& pidl)
function variant_t (line 90) | variant_t path_getter(const cpidl_t& pidl)
function variant_t (line 108) | variant_t property_from_pidl(const cpidl_t& pidl, const property_key...
function compare_pidls_by_property (line 128) | int compare_pidls_by_property(
FILE: swish/host_folder/properties.hpp
type swish (line 38) | namespace swish {
type host_folder (line 39) | namespace host_folder {
FILE: swish/nse/Command.cpp
type swish (line 38) | namespace swish {
type nse (line 39) | namespace nse {
function wstring (line 49) | wstring Command::title(comet::com_ptr<IShellItemArray>) const
function uuid_t (line 52) | const uuid_t& Command::guid() const
function wstring (line 55) | wstring Command::tool_tip(comet::com_ptr<IShellItemArray>) const
function wstring (line 58) | wstring Command::icon_descriptor(comet::com_ptr<IShellItemArray>) const
function wstring (line 61) | wstring Command::menu_title(
function wstring (line 65) | wstring Command::webtask_title(
FILE: swish/nse/Command.hpp
type swish (line 38) | namespace swish {
type nse (line 39) | namespace nse {
class Command (line 41) | class Command
method state (line 111) | state(
class WebtaskCommandTitleAdapter (line 141) | class WebtaskCommandTitleAdapter : public CommandImpl
method title (line 153) | virtual std::wstring title(
FILE: swish/nse/StaticColumn.hpp
type swish (line 37) | namespace swish {
type nse (line 38) | namespace nse {
class StaticColumn (line 41) | class StaticColumn : Base
method StaticColumn (line 49) | StaticColumn(size_t index) : m_index(index) {}
method header (line 55) | std::wstring header() const
method detail (line 67) | std::wstring detail(const washer::shell::pidl::cpidl_t& pidl) const
method average_width_in_chars (line 75) | int average_width_in_chars() const
method SHCOLSTATEF (line 84) | SHCOLSTATEF state() const
method format (line 92) | int format() const
method compare (line 104) | int compare(
FILE: swish/nse/UICommand.hpp
type swish (line 37) | namespace swish {
type nse (line 38) | namespace nse {
type IUIElement (line 57) | struct IUIElement : public IUnknown
method get_Name (line 59) | get_Name(
method get_Icon (line 61) | get_Icon(
method get_Tooltip (line 63) | get_Tooltip(
type IUICommand (line 75) | struct IUICommand : public IUIElement
method get_CanonicalName (line 77) | get_CanonicalName(GUID* pGuid) = 0;
method get_State (line 78) | get_State(
method Invoke (line 80) | Invoke(
type IEnumUICommand (line 92) | struct IEnumUICommand : public IUnknown
method Next (line 94) | Next(
method Skip (line 96) | Skip(ULONG celt) = 0;
method Reset (line 97) | Reset() = 0;
method Clone (line 98) | Clone(IEnumUICommand** ppenum) = 0;
type comet::comtype<swish::nse::IUIElement> (line 103) | struct comet::comtype<swish::nse::IUIElement>
method IID (line 105) | static const IID& uuid() throw()
type comet::comtype<swish::nse::IUICommand> (line 110) | struct comet::comtype<swish::nse::IUICommand>
method IID (line 112) | static const IID& uuid() throw()
type comet::comtype<swish::nse::IEnumUICommand> (line 117) | struct comet::comtype<swish::nse::IEnumUICommand>
method IID (line 119) | static const IID& uuid() throw()
type comet::enumerated_type_of<swish::nse::IEnumUICommand> (line 125) | struct comet::enumerated_type_of<swish::nse::IEnumUICommand>
type comet::impl::type_policy<swish::nse::IUICommand*> (line 129) | struct comet::impl::type_policy<swish::nse::IUICommand*>
method init (line 132) | static void init(swish::nse::IUICommand*& p, const S& s)
method clear (line 135) | static void clear(swish::nse::IUICommand*& p) { p->Release(); }
FILE: swish/nse/command_site.cpp
type swish (line 32) | namespace swish {
type nse (line 33) | namespace nse {
FILE: swish/nse/command_site.hpp
type swish (line 28) | namespace swish {
type nse (line 29) | namespace nse {
class command_site (line 61) | class command_site
FILE: swish/nse/data_object_util.cpp
type swish (line 33) | namespace swish {
type nse (line 34) | namespace nse {
function data_object_from_item_array (line 36) | com_ptr<IDataObject> data_object_from_item_array(
FILE: swish/nse/data_object_util.hpp
type comet::comtype<IDataObject> (line 36) | struct comet::comtype<IDataObject>
method IID (line 38) | static const IID& uuid() throw() { return IID_IDataObject; }
type swish (line 42) | namespace swish {
type nse (line 43) | namespace nse {
FILE: swish/nse/default_context_menu_callback.cpp
type swish (line 47) | namespace swish {
type nse (line 48) | namespace nse {
function HRESULT (line 52) | HRESULT default_context_menu_callback::operator()(
function HRESULT (line 169) | HRESULT default_context_menu_callback::on_unknown_dfm(
FILE: swish/nse/default_context_menu_callback.hpp
type swish (line 37) | namespace swish {
type nse (line 38) | namespace nse {
class default_context_menu_callback (line 40) | class default_context_menu_callback
FILE: swish/nse/detail/command_state_conversion.hpp
type swish (line 38) | namespace swish {
type nse (line 39) | namespace nse {
type detail (line 40) | namespace detail {
function EXPCMDSTATE (line 42) | inline EXPCMDSTATE command_state_to_expcmdstate(
FILE: swish/nse/explorer_command.cpp
type comet::enumerated_type_of<IEnumExplorerCommand> (line 45) | struct comet::enumerated_type_of<IEnumExplorerCommand>
type comet::impl::type_policy<IExplorerCommand*> (line 48) | struct comet::impl::type_policy<IExplorerCommand*>
method init (line 51) | static void init(IExplorerCommand*& p, const S& s)
method clear (line 54) | static void clear(IExplorerCommand*& p) { p->Release(); }
type swish (line 57) | namespace swish {
type nse (line 58) | namespace nse {
function BOOST_FOREACH (line 71) | BOOST_FOREACH(comet::com_ptr<IExplorerCommand>& c, m_commands)
function STDMETHODIMP (line 81) | STDMETHODIMP CExplorerCommandProvider::GetCommands(
function STDMETHODIMP (line 101) | STDMETHODIMP CExplorerCommandProvider::GetCommand(
function STDMETHODIMP (line 134) | STDMETHODIMP CExplorerCommandErrorAdapter::GetTitle(
function STDMETHODIMP (line 163) | STDMETHODIMP CExplorerCommandErrorAdapter::GetIcon(
function STDMETHODIMP (line 190) | STDMETHODIMP CExplorerCommandErrorAdapter::GetToolTip(
function STDMETHODIMP (line 214) | STDMETHODIMP CExplorerCommandErrorAdapter::GetCanonicalName(
function STDMETHODIMP (line 240) | STDMETHODIMP CExplorerCommandErrorAdapter::GetState(
function STDMETHODIMP (line 264) | STDMETHODIMP CExplorerCommandErrorAdapter::Invoke(
function STDMETHODIMP (line 276) | STDMETHODIMP CExplorerCommandErrorAdapter::GetFlags(EXPCMDFLAGS* pFl...
function STDMETHODIMP (line 292) | STDMETHODIMP CExplorerCommandErrorAdapter::EnumSubCommands(
FILE: swish/nse/explorer_command.hpp
type comet::comtype<IExplorerCommand> (line 44) | struct comet::comtype<IExplorerCommand>
method IID (line 46) | static const IID& uuid() throw() { return IID_IExplorerCommand; }
type comet::comtype<IExplorerCommandProvider> (line 50) | struct comet::comtype<IExplorerCommandProvider>
method IID (line 52) | static const IID& uuid() throw() { return IID_IExplorerCommandProvider; }
type comet::comtype<IEnumExplorerCommand> (line 56) | struct comet::comtype<IEnumExplorerCommand>
method IID (line 58) | static const IID& uuid() throw() { return IID_IEnumExplorerCommand; }
type swish (line 62) | namespace swish {
type nse (line 63) | namespace nse {
class CExplorerCommandProvider (line 65) | class CExplorerCommandProvider :
class CExplorerCommandErrorAdapter (line 112) | class CExplorerCommandErrorAdapter : public IExplorerCommand
class CExplorerCommand (line 189) | class CExplorerCommand :
method title (line 220) | std::wstring title(const comet::com_ptr<IShellItemArray>& items) c...
method tool_tip (line 231) | std::wstring tool_tip(const comet::com_ptr<IShellItemArray>& items...
method icon (line 245) | std::wstring icon(const comet::com_ptr<IShellItemArray>& items) const
method EXPCMDSTATE (line 259) | EXPCMDSTATE state(
method EXPCMDFLAGS (line 267) | EXPCMDFLAGS flags() const
method subcommands (line 272) | comet::com_ptr<IEnumExplorerCommand> subcommands() const
method invoke (line 284) | void invoke(
method on_set_site (line 296) | void on_set_site(comet::com_ptr<IUnknown> ole_site)
FILE: swish/nse/task_pane.hpp
type swish (line 50) | namespace swish {
type nse (line 51) | namespace nse {
class CUIElementErrorAdapterBase (line 68) | class CUIElementErrorAdapterBase : public Interface
method IFACEMETHODIMP (line 87) | virtual IFACEMETHODIMP get_Name(
method IFACEMETHODIMP (line 116) | virtual IFACEMETHODIMP get_Icon(
method IFACEMETHODIMP (line 143) | virtual IFACEMETHODIMP get_Tooltip(
class CUIElementErrorAdapter (line 189) | class CUIElementErrorAdapter :
class CUICommandErrorAdapter (line 198) | class CUICommandErrorAdapter : public CUIElementErrorAdapterBase<IUI...
method IFACEMETHODIMP (line 210) | IFACEMETHODIMP get_CanonicalName(GUID* pguidCommandName)
method IFACEMETHODIMP (line 235) | IFACEMETHODIMP get_State(
method IFACEMETHODIMP (line 261) | IFACEMETHODIMP Invoke(
class CUICommand (line 314) | class CUICommand :
method title (line 345) | std::wstring title(const comet::com_ptr<IShellItemArray>& items) c...
method tool_tip (line 356) | std::wstring tool_tip(const comet::com_ptr<IShellItemArray>& items...
method icon (line 370) | std::wstring icon(const comet::com_ptr<IShellItemArray>& items) const
method EXPCMDSTATE (line 384) | EXPCMDSTATE state(
method invoke (line 398) | void invoke(
method on_set_site (line 410) | virtual void on_set_site(comet::com_ptr<IUnknown> ole_site)
FILE: swish/nse/view_callback.cpp
type swish (line 50) | namespace swish {
type nse (line 51) | namespace nse {
function STDMETHODIMP (line 55) | STDMETHODIMP CViewCallback::MessageSFVCB(
FILE: swish/nse/view_callback.hpp
type comet::comtype<IShellFolderViewCB> (line 37) | struct comet::comtype<IShellFolderViewCB>
method IID (line 39) | static const IID& uuid() throw() { return IID_IShellFolderViewCB; }
type swish (line 43) | namespace swish {
type nse (line 44) | namespace nse {
class CViewCallback (line 46) | class CViewCallback : public IShellFolderViewCB
type SFV_SELECTINFO (line 83) | struct SFV_SELECTINFO
type SFV_WEBVIEW_CONTENT_DATA (line 98) | struct SFV_WEBVIEW_CONTENT_DATA
type SFV_WEBVIEW_TASKSECTION_DATA (line 115) | struct SFV_WEBVIEW_TASKSECTION_DATA
FILE: swish/port_conversion.hpp
type swish (line 48) | namespace swish {
function T (line 54) | inline T basic_port_to_string(long port)
function port_to_string (line 69) | inline std::string port_to_string(long port)
function port_to_wstring (line 75) | inline std::wstring port_to_wstring(long port)
FILE: swish/provider/Provider.cpp
type swish (line 82) | namespace swish
type provider (line 84) | namespace provider
class provider (line 87) | class provider
function directory_listing (line 117) | directory_listing CProvider::listing(const path& directory)
function VARIANT_BOOL (line 128) | VARIANT_BOOL CProvider::rename(ISftpConsumer* consumer, const path& ...
function path (line 144) | path CProvider::resolve_link(const path& path)
function sftp_filesystem_item (line 149) | sftp_filesystem_item CProvider::stat(const path& path, bool follow_l...
function m_ticket (line 157) | m_ticket(ticket)
function not_special_file (line 164) | bool not_special_file(const sftp_file& file)
function directory_listing (line 175) | directory_listing provider::listing(const path& directory)
function rename_non_atomic_overwrite (line 245) | void rename_non_atomic_overwrite(authenticated_session& session,
function rename_retry_with_overwrite (line 319) | bool rename_retry_with_overwrite(authenticated_session& session,
function VARIANT_BOOL (line 435) | VARIANT_BOOL provider::rename(com_ptr<ISftpConsumer> consumer, const...
function path (line 488) | const path provider::resolve_link(const path& path)
function sftp_filesystem_item (line 502) | sftp_filesystem_item provider::stat(const path& path, bool follow_li...
FILE: swish/provider/Provider.hpp
type swish (line 48) | namespace swish {
type provider (line 49) | namespace provider {
class provider (line 51) | class provider
class CProvider (line 53) | class CProvider : public sftp_provider
FILE: swish/provider/libssh2_sftp_filesystem_item.cpp
function parse_user_from_long_entry (line 79) | optional<wstring> parse_user_from_long_entry(const string& long_entry)
function parse_group_from_long_entry (line 97) | optional<wstring> parse_group_from_long_entry(const string& long_entry)
type swish (line 112) | namespace swish {
type provider (line 113) | namespace provider {
function sftp_filesystem_item (line 115) | sftp_filesystem_item
function sftp_filesystem_item (line 124) | sftp_filesystem_item
function datetime_t (line 272) | datetime_t libssh2_sftp_filesystem_item::last_accessed() const
function datetime_t (line 277) | datetime_t libssh2_sftp_filesystem_item::last_modified() const
FILE: swish/provider/libssh2_sftp_filesystem_item.hpp
type ssh (line 44) | namespace ssh {
type filesystem (line 45) | namespace filesystem {
class file_attributes (line 47) | class file_attributes
class sftp_file (line 48) | class sftp_file
type swish (line 53) | namespace swish {
type provider (line 54) | namespace provider {
class libssh2_sftp_filesystem_item (line 59) | class libssh2_sftp_filesystem_item : public sftp_filesystem_item_int...
FILE: swish/provider/sftp_filesystem_item.hpp
type swish (line 47) | namespace swish {
type provider (line 48) | namespace provider {
class sftp_filesystem_item_interface (line 59) | class sftp_filesystem_item_interface
class sftp_filesystem_item (line 121) | class sftp_filesystem_item : public sftp_filesystem_item_interface
method BOOST_SCOPED_ENUM (line 125) | BOOST_SCOPED_ENUM(type) type() const
method filename (line 128) | ssh::filesystem::path filename() const
method permissions (line 131) | unsigned long permissions() const
method owner (line 134) | boost::optional<std::wstring> owner() const
method uid (line 137) | unsigned long uid() const
method group (line 140) | boost::optional<std::wstring> group() const
method gid (line 143) | unsigned long gid() const
method size_in_bytes (line 146) | boost::uint64_t size_in_bytes() const
method last_accessed (line 149) | comet::datetime_t last_accessed() const
method last_modified (line 152) | comet::datetime_t last_modified() const
method sftp_filesystem_item (line 155) | explicit sftp_filesystem_item(
FILE: swish/provider/sftp_provider.hpp
class ISftpConsumer (line 47) | class ISftpConsumer : public IUnknown
type swish (line 100) | namespace swish {
type provider (line 101) | namespace provider {
class sftp_provider (line 109) | class sftp_provider
type comet (line 143) | namespace comet {
type comtype<ISftpConsumer> (line 145) | struct comtype<ISftpConsumer>
method IID (line 147) | static const IID& uuid() throw()
FILE: swish/provider/ticketed_stream.hpp
type swish (line 41) | namespace swish {
type provider (line 42) | namespace provider {
class ticketed_stream (line 50) | class ticketed_stream : public comet::simple_object<IStream>
method ticketed_stream (line 54) | ticketed_stream(
method Read (line 59) | Read(
method Write (line 65) | Write(
method Seek (line 71) | Seek(
method SetSize (line 77) | SetSize(ULARGE_INTEGER new_size)
method CopyTo (line 82) | CopyTo(
method Commit (line 90) | Commit(DWORD commit_flags)
method Revert (line 95) | Revert()
method LockRegion (line 100) | LockRegion(
method UnlockRegion (line 107) | UnlockRegion(
method Stat (line 114) | Stat(
method Clone (line 120) | Clone(IStream** stream_out)
FILE: swish/remote_folder/Mode.h
function namespace (line 28) | namespace swish {
FILE: swish/remote_folder/ViewCallback.cpp
type swish (line 55) | namespace swish {
type remote_folder (line 56) | namespace remote_folder {
function is_vista_or_greater (line 60) | bool is_vista_or_greater()
function consumer (line 148) | com_ptr<ISftpConsumer> consumer(HWND hwnd)
FILE: swish/remote_folder/ViewCallback.hpp
type swish (line 34) | namespace swish {
type remote_folder (line 35) | namespace remote_folder {
class CViewCallback (line 37) | class CViewCallback :
FILE: swish/remote_folder/columns.cpp
type swish (line 53) | namespace swish {
type remote_folder (line 54) | namespace remote_folder {
function wstring (line 61) | wstring date_formatter(const variant_t& val)
function wstring (line 69) | wstring size_formatter(const variant_t& val)
function column_entry (line 118) | const column_entry& RemoteColumnEntries::entry(size_t index) const
function property_key (line 126) | const property_key& property_key_from_column_index(size_t index)
FILE: swish/remote_folder/columns.hpp
type swish (line 48) | namespace swish {
type remote_folder (line 49) | namespace remote_folder {
type column_entry (line 54) | struct column_entry
method title (line 70) | std::wstring title() const
method SHCOLSTATEF (line 75) | SHCOLSTATEF flags() const { return m_flags; }
method format (line 76) | int format() const { return m_format; }
method avg_char_width (line 77) | int avg_char_width() const { return m_avg_char_width; }
method detail (line 85) | std::wstring detail(const washer::shell::pidl::cpidl_t& pidl) const
method compare (line 94) | int compare(
class RemoteColumnEntries (line 107) | class RemoteColumnEntries
FILE: swish/remote_folder/commands/NewFolder.cpp
function wstring (line 96) | wstring prefix_if_necessary(
type swish (line 160) | namespace swish {
type remote_folder (line 161) | namespace remote_folder {
type commands (line 162) | namespace commands {
FILE: swish/remote_folder/commands/NewFolder.hpp
type swish (line 30) | namespace swish {
type remote_folder (line 31) | namespace remote_folder {
type commands (line 32) | namespace commands {
class NewFolder (line 40) | class NewFolder : public swish::nse::Command
FILE: swish/remote_folder/commands/commands.cpp
type swish (line 65) | namespace swish {
type remote_folder (line 66) | namespace remote_folder {
type commands (line 67) | namespace commands {
function remote_folder_command_provider (line 69) | com_ptr<IExplorerCommandProvider> remote_folder_command_provider(
class CSftpTasksTitle (line 81) | class CSftpTasksTitle : public simple_object<CUIElementErrorAdapter>
method title (line 85) | virtual std::wstring title(
method icon (line 91) | virtual std::wstring icon(
method tool_tip (line 97) | virtual std::wstring tool_tip(
function remote_folder_task_pane_titles (line 104) | std::pair<com_ptr<IUIElement>, com_ptr<IUIElement> >
function remote_folder_task_pane_tasks (line 110) | std::pair<com_ptr<IEnumUICommand>, com_ptr<IEnumUICommand> >
FILE: swish/remote_folder/commands/commands.hpp
type swish (line 34) | namespace swish {
type remote_folder (line 35) | namespace remote_folder {
type commands (line 36) | namespace commands {
FILE: swish/remote_folder/commands/delete.cpp
type swish (line 64) | namespace swish {
type remote_folder (line 65) | namespace remote_folder {
type commands (line 66) | namespace commands {
function do_delete (line 77) | void do_delete(
function confirm_deletion (line 106) | bool confirm_deletion(
function confirm_multiple_deletion (line 144) | bool confirm_multiple_deletion(HWND hwnd_view, size_t item_count)
function execute_death_row (line 173) | void execute_death_row(
FILE: swish/remote_folder/commands/delete.hpp
type swish (line 40) | namespace swish {
type remote_folder (line 41) | namespace remote_folder {
type commands (line 42) | namespace commands {
class Delete (line 44) | class Delete
FILE: swish/remote_folder/context_menu_callback.cpp
type comet (line 83) | namespace comet {
type comtype<IDropTarget> (line 85) | struct comtype<IDropTarget>
method IID (line 87) | static const IID& uuid() throw() { return IID_IDropTarget; }
type swish (line 93) | namespace swish {
type remote_folder (line 94) | namespace remote_folder {
function is_single_link (line 98) | bool is_single_link(com_ptr<IShellItemArray> selection)
function are_normal_files (line 116) | bool are_normal_files(com_ptr<IShellItemArray> selection)
function do_invoke_command (line 244) | bool do_invoke_command(
FILE: swish/remote_folder/context_menu_callback.hpp
type swish (line 46) | namespace swish {
type remote_folder (line 47) | namespace remote_folder {
class context_menu_callback (line 49) | class context_menu_callback : public swish::nse::default_context_men...
FILE: swish/remote_folder/filemode.c
function setst (line 38) | static void
function ftypelet (line 86) | static char
function mode_string (line 136) | void
FILE: swish/remote_folder/filemode.h
type mode_t (line 89) | typedef unsigned long mode_t;
FILE: swish/remote_folder/pidl_connection.cpp
type swish (line 55) | namespace swish {
type remote_folder (line 56) | namespace remote_folder {
function params_from_pidl (line 60) | void params_from_pidl(
function connection_spec (line 77) | connection_spec connection_from_pidl(const apidl_t& pidl)
function provider_from_pidl (line 87) | shared_ptr<sftp_provider> provider_from_pidl(
FILE: swish/remote_folder/pidl_connection.hpp
type swish (line 43) | namespace swish {
type remote_folder (line 44) | namespace remote_folder {
FILE: swish/remote_folder/properties.cpp
type swish (line 65) | namespace swish {
type remote_folder (line 66) | namespace remote_folder {
function lookup_friendly_typename (line 94) | std::wstring lookup_friendly_typename(const cpidl_t& pidl)
class unknown_property_error (line 120) | class unknown_property_error : public std::runtime_error
method unknown_property_error (line 123) | unknown_property_error() : std::runtime_error("Unknown property") {}
function variant_t (line 131) | variant_t label_getter(const cpidl_t& pidl)
function variant_t (line 134) | variant_t owner_getter(const cpidl_t& pidl)
function variant_t (line 137) | variant_t group_getter(const cpidl_t& pidl)
function variant_t (line 140) | variant_t owner_id_getter(const cpidl_t& pidl)
function variant_t (line 143) | variant_t group_id_getter(const cpidl_t& pidl)
function variant_t (line 146) | variant_t size_getter(const cpidl_t& pidl)
function variant_t (line 149) | variant_t modified_date_getter(const cpidl_t& pidl)
function variant_t (line 152) | variant_t accessed_date_getter(const cpidl_t& pidl)
function variant_t (line 155) | variant_t type_getter(const cpidl_t& pidl)
function variant_t (line 158) | variant_t permissions_getter(const cpidl_t& pidl)
function variant_t (line 183) | variant_t property_from_pidl(const cpidl_t& pidl, const property_key...
function compare_pidls_by_property (line 203) | int compare_pidls_by_property(
FILE: swish/remote_folder/properties.hpp
type swish (line 38) | namespace swish {
type remote_folder (line 39) | namespace remote_folder {
FILE: swish/remote_folder/remote_pidl.hpp
type swish (line 54) | namespace swish {
type remote_folder (line 55) | namespace remote_folder {
type detail (line 57) | namespace detail {
type remote_item_id (line 63) | struct remote_item_id
function copy_unaligned_string (line 86) | inline std::wstring copy_unaligned_string(const wchar_t __unaligne...
type remote_item_template (line 211) | struct remote_item_template
class remote_itemid_view (line 101) | class remote_itemid_view
method remote_itemid_view (line 110) | explicit remote_itemid_view(
method remote_itemid_view (line 115) | explicit remote_itemid_view(PCUIDLIST_RELATIVE pidl)
method valid (line 118) | bool valid() const
method filename (line 127) | std::wstring filename() const
method owner (line 134) | std::wstring owner() const
method group (line 141) | std::wstring group() const
method ULONG (line 148) | ULONG owner_id() const
method ULONG (line 155) | ULONG group_id() const
method is_folder (line 162) | bool is_folder() const
method is_link (line 169) | bool is_link() const
method DWORD (line 176) | DWORD permissions() const
method ULONGLONG (line 183) | ULONGLONG size() const
method date_modified (line 190) | comet::datetime_t date_modified() const
method date_accessed (line 197) | comet::datetime_t date_accessed() const
type detail (line 208) | namespace detail {
type remote_item_id (line 63) | struct remote_item_id
function copy_unaligned_string (line 86) | inline std::wstring copy_unaligned_string(const wchar_t __unaligne...
type remote_item_template (line 211) | struct remote_item_template
function create_remote_itemid (line 235) | inline washer::shell::pidl::cpidl_t create_remote_itemid(
function path_from_remote_pidl (line 286) | inline ssh::filesystem::path path_from_remote_pidl(
FILE: swish/remote_folder/swish_pidl.hpp
type swish (line 39) | namespace swish {
type remote_folder (line 40) | namespace remote_folder {
function absolute_path_from_swish_pidl (line 48) | inline ssh::filesystem::path absolute_path_from_swish_pidl(
FILE: swish/shell/parent_and_item.hpp
type comet (line 26) | namespace comet {
type comtype<IParentAndItem> (line 28) | struct comtype<IParentAndItem>
method IID (line 30) | static const IID& uuid() throw()
type wrap_t<IParentAndItem> (line 35) | struct wrap_t<IParentAndItem>
method parent_pidl (line 37) | washer::shell::pidl::apidl_t parent_pidl()
method item_pidl (line 46) | washer::shell::pidl::cpidl_t item_pidl()
method absolute_item_pidl (line 55) | washer::shell::pidl::apidl_t absolute_item_pidl()
method parent_folder (line 65) | comet::com_ptr<IShellFolder> parent_folder()
FILE: swish/shell/shell.cpp
type swish (line 60) | namespace swish {
type shell (line 61) | namespace shell {
function path (line 63) | path path_from_pidl(PIDLIST_ABSOLUTE pidl)
function pidl_from_path (line 68) | shared_ptr<ITEMIDLIST_ABSOLUTE> pidl_from_path(
function data_object_for_file (line 80) | com_ptr<IDataObject> data_object_for_file(const path& file)
function data_object_for_directory (line 85) | com_ptr<IDataObject> data_object_for_directory(const path& directory)
function put_view_item_into_rename_mode (line 95) | void put_view_item_into_rename_mode(
function window_for_ole_site (line 107) | optional<window<wchar_t>> window_for_ole_site(com_ptr<IUnknown> ole_...
FILE: swish/shell/shell.hpp
function PUITEMID_CHILD (line 57) | PUITEMID_CHILD find_last_ID(const ITEMIDLIST_RELATIVE& idl)
type comet (line 63) | namespace comet {
type comtype<IDataObject> (line 65) | struct comtype<IDataObject>
method IID (line 67) | static const IID& uuid() throw() { return IID_IDataObject; }
type swish (line 73) | namespace swish {
type shell (line 74) | namespace shell {
function data_object_for_files (line 106) | comet::com_ptr<IDataObject> data_object_for_files(It begin, It end)
function ui_object_of_items (line 140) | comet::com_ptr<T> ui_object_of_items(It begin, It end)
function ui_object_of_item (line 187) | comet::com_ptr<T> ui_object_of_item(PCIDLIST_ABSOLUTE pidl)
FILE: swish/shell/shell_item.hpp
type swish (line 24) | namespace swish {
type shell (line 25) | namespace shell {
type comet::wrap_t<IShellItem> (line 27) | struct comet::wrap_t<IShellItem>
FILE: swish/shell/shell_item_array.hpp
type comet (line 30) | namespace comet {
type comtype<IShellItemArray> (line 32) | struct comtype<IShellItemArray>
method IID (line 34) | static const IID& uuid() throw() { return IID_IShellItemArray; }
type comtype<IShellItem> (line 38) | struct comtype<IShellItem>
method IID (line 40) | static const IID& uuid() throw() { return IID_IShellItem; }
type comet::impl::type_policy<IShellItem*> (line 44) | struct comet::impl::type_policy<IShellItem*>
method init (line 46) | static void init(IShellItem*& destination, IShellItem* source)
method clear (line 52) | static void clear(IShellItem*& p)
type enumerated_type_of<IEnumShellItems> (line 59) | struct enumerated_type_of<IEnumShellItems>
type wrap_t<IShellItemArray> (line 64) | struct wrap_t<IShellItemArray>
method size (line 68) | size_t size()
method at (line 78) | comet::com_ptr<IShellItem> at(size_t index)
method iterator_type (line 94) | iterator_type begin()
method iterator_type (line 103) | iterator_type end()
type swish (line 111) | namespace swish {
type shell (line 112) | namespace shell {
function shell_item_array_from_folder_items (line 114) | inline comet::com_ptr<IShellItemArray> shell_item_array_from_folder_...
function shell_item_array_from_folder_pidl_and_items (line 130) | inline comet::com_ptr<IShellItemArray> shell_item_array_from_folder_...
function shell_item_array_from_pidls (line 144) | inline comet::com_ptr<IShellItemArray> shell_item_array_from_pidls(
function shell_item_array_from_data_object (line 156) | inline comet::com_ptr<IShellItemArray> shell_item_array_from_data_ob...
FILE: swish/shell_folder/DataObject.cpp
type comet (line 40) | namespace comet {
type comtype<IDataObject> (line 42) | struct comtype<IDataObject>
method IID (line 44) | static const IID& uuid() { return IID_IDataObject; }
function shell_data_object_from_pidls (line 52) | com_ptr<IDataObject> shell_data_object_from_pidls(
function STDMETHODIMP (line 97) | STDMETHODIMP CDataObject::GetData(FORMATETC *pformatetcIn, STGMEDIUM *pm...
function STDMETHODIMP (line 159) | STDMETHODIMP CDataObject::SetData(
function STDMETHODIMP (line 208) | STDMETHODIMP CDataObject::GetDataHere(FORMATETC *pformatetc, STGMEDIUM *...
function STDMETHODIMP (line 213) | STDMETHODIMP CDataObject::QueryGetData(FORMATETC *pformatetc)
function STDMETHODIMP (line 218) | STDMETHODIMP CDataObject::GetCanonicalFormatEtc(
function STDMETHODIMP (line 223) | STDMETHODIMP CDataObject::EnumFormatEtc(
function STDMETHODIMP (line 229) | STDMETHODIMP CDataObject::DAdvise(
function STDMETHODIMP (line 236) | STDMETHODIMP CDataObject::DUnadvise(DWORD dwConnection)
function STDMETHODIMP (line 241) | STDMETHODIMP CDataObject::EnumDAdvise(IEnumSTATDATA **ppenumAdvise)
function HRESULT (line 259) | HRESULT CDataObject::ProdInnerWithFormat(CLIPFORMAT nFormat, DWORD tymed)
FILE: swish/shell_folder/DataObject.h
function class (line 128) | class CStorageMedium : public STGMEDIUM
function class (line 150) | class CFormatEtc : public FORMATETC
function class (line 196) | class CGlobalLock
FILE: swish/shell_folder/Folder.h
function namespace (line 69) | namespace comet {
function namespace (line 79) | namespace swish {
function GUID (line 581) | GUID get_default_search_guid()
function IEnumExtraSearch (line 594) | IEnumExtraSearch* enum_searches()
function get_default_column (line 609) | void get_default_column(ULONG* sort_out, ULONG* display_out)
function SHCOLSTATEF (line 621) | SHCOLSTATEF get_default_column_state(UINT column_index)
function VARIANT (line 634) | VARIANT get_details_ex(PCUITEMID_CHILD pidl, const SHCOLUMNID* pscid)
function virtual (line 689) | virtual int compare_pidls(
FILE: swish/shell_folder/HostFolder.cpp
type comet (line 112) | namespace comet {
type comtype<::IEnumIDList> (line 114) | struct comtype<::IEnumIDList>
type enumerated_type_of<IEnumIDList> (line 120) | struct enumerated_type_of<IEnumIDList>
type comtype<IQueryAssociations> (line 123) | struct comtype<IQueryAssociations>
method IID (line 125) | static const IID& uuid() { return IID_IQueryAssociations; }
type comtype<::IExtractIconW> (line 129) | struct comtype<::IExtractIconW>
type impl::type_policy<PITEMID_CHILD> (line 138) | struct impl::type_policy<PITEMID_CHILD>
method init (line 140) | static void init(PITEMID_CHILD& raw_pidl, const cpidl_t& pidl)
method clear (line 145) | static void clear(PITEMID_CHILD& raw_pidl) { ::CoTaskMemFree(raw_pid...
type comtype<::IShellIconOverlay> (line 149) | struct comtype<::IShellIconOverlay>
function IEnumIDList (line 173) | IEnumIDList* CHostFolder::enum_objects(HWND hwnd, SHCONTF flags)
function PIDLIST_RELATIVE (line 197) | PIDLIST_RELATIVE CHostFolder::parse_display_name(
function STRRET (line 275) | STRRET CHostFolder::get_display_name_of(PCUITEMID_CHILD pidl, SHGDNF flags)
function notify_shell_that_rename_occurred (line 327) | void notify_shell_that_rename_occurred(
function PITEMID_CHILD (line 338) | PITEMID_CHILD CHostFolder::set_name_of(
function SHCOLUMNID (line 398) | SHCOLUMNID CHostFolder::map_column_to_scid(UINT column_index)
function CLSID (line 458) | CLSID CHostFolder::clsid() const
function consumer_factory (line 479) | com_ptr<ISftpConsumer> consumer_factory(HWND hwnd)
function variant_t (line 505) | variant_t CHostFolder::property(const property_key& key, const cpidl_t& ...
function HRESULT (line 577) | HRESULT CALLBACK menu_callback(
FILE: swish/shell_folder/IconExtractor.cpp
function STDMETHODIMP (line 64) | STDMETHODIMP CIconExtractor::GetIconLocation(
function STDMETHODIMP (line 87) | STDMETHODIMP CIconExtractor::GetIconLocation(
function STDMETHODIMP (line 113) | STDMETHODIMP CIconExtractor::Extract(PCWSTR, UINT, HICON *, HICON *, UINT)
function STDMETHODIMP (line 123) | STDMETHODIMP CIconExtractor::Extract(PCSTR, UINT, HICON *, HICON *, UINT)
FILE: swish/shell_folder/KbdInteractiveDialog.cpp
function LRESULT (line 67) | LRESULT CKbdInteractiveDialog::OnInitDialog(UINT, WPARAM, LPARAM, BOOL&)
function LRESULT (line 119) | LRESULT CKbdInteractiveDialog::OnOK(WORD, WORD wID, HWND, BOOL&)
function LRESULT (line 126) | LRESULT CKbdInteractiveDialog::OnCancel(WORD, WORD wID, HWND, BOOL&)
function CRect (line 136) | CRect CKbdInteractiveDialog::_DrawInstruction(CRect rectDialog)
function CRect (line 164) | CRect CKbdInteractiveDialog::_DrawPrompt(
function CRect (line 198) | CRect CKbdInteractiveDialog::_DrawResponseBox(
function CRect (line 228) | CRect CKbdInteractiveDialog::_DrawOKCancel(
function each (line 262) | each (HWND hwnd in m_vecResponseWindows)
FILE: swish/shell_folder/Pidl.h
type IdListType (line 43) | typedef const IdListType *ConstPidlType;
type PidlType (line 44) | typedef PidlType Type;
function m_pidl (line 47) | m_pidl(NULL) {}
function explicit (line 48) | explicit CPidlData( __in_opt Type pidl ) throw() : m_pidl(pidl) {}
function explicit (line 49) | explicit CPidlData( __in const CPidlData& pidl ) throw() : m_pidl(pidl) {}
type IdListType (line 87) | typedef const IdListType *ConstPidlType;
type ConstPidlType (line 88) | typedef ConstPidlType Type;
function m_pidl (line 91) | m_pidl(NULL) {}
type typename (line 144) | typedef typename DataT::ConstPidlType ConstPidlType;
function throw (line 148) | CPidlBase( __in_opt typename DataT::Type pidl ) throw() : DataT(pidl) {}
function PCUITEMID_CHILD (line 176) | PCUITEMID_CHILD GetLast() const throw(...)
function explicit (line 261) | explicit CPidl(
type CPidl (line 327) | typedef CPidl<ITEMIDLIST_RELATIVE> CRelativePidl;
type CPidl (line 332) | typedef CPidl<ITEMIDLIST_ABSOLUTE> CAbsolutePidl;
type CPidl (line 337) | typedef CPidl<ITEMID_CHILD> CChildPidl;
FILE: swish/shell_folder/Registry.cpp
function HRESULT (line 65) | HRESULT CRegistry::GetHostFolderAssocKeys(
function HRESULT (line 104) | HRESULT CRegistry::GetRemoteFolderAssocKeys(
function remote_folder_background_key_names (line 117) | CRegistry::KeyNames remote_folder_background_key_names()
function HRESULT (line 128) | HRESULT CRegistry::GetRemoteFolderBackgroundAssocKeys(
function HRESULT (line 337) | HRESULT CRegistry::_GetHKEYArrayFromKeynames(
function HRESULT (line 348) | HRESULT CRegistry::_GetHKEYArrayFromVector(
function each (line 374) | each (CString strKeyname in vecKeynames)
FILE: swish/shell_folder/Registry.h
function class (line 36) | class CRegistry
FILE: swish/shell_folder/RemoteFolder.cpp
type comet (line 100) | namespace comet {
type comtype<::IContextMenu> (line 102) | struct comtype<::IContextMenu>
function cpidl_t (line 113) | cpidl_t create_filename_only_pidl(const wstring& filename)
function wstring (line 123) | wstring filename_without_extension(const cpidl_t remote_item)
function IEnumIDList (line 165) | IEnumIDList* CRemoteFolder::enum_objects(HWND hwnd, SHCONTF flags)
function PIDLIST_RELATIVE (line 197) | PIDLIST_RELATIVE CRemoteFolder::parse_display_name(
function extension_hiding_disabled_in_registry (line 265) | bool extension_hiding_disabled_in_registry()
function FAILED (line 320) | FAILED(hr)
function STRRET (line 338) | STRRET CRemoteFolder::get_display_name_of(PCUITEMID_CHILD pidl, SHGDNF f...
function PITEMID_CHILD (line 416) | PITEMID_CHILD CRemoteFolder::set_name_of(
function SHCOLUMNID (line 550) | SHCOLUMNID CRemoteFolder::map_column_to_scid(UINT column_index)
function CLSID (line 566) | CLSID CRemoteFolder::clsid() const
function variant_t (line 608) | variant_t CRemoteFolder::property(const property_key& key, const cpidl_t...
function HRESULT (line 687) | HRESULT CALLBACK CRemoteFolder::menu_callback(
function HRESULT (line 871) | HRESULT CRemoteFolder::MenuCallback(
FILE: swish/shell_folder/RemoteFolder.h
function set_consumer_factory (line 140) | void set_consumer_factory(
FILE: swish/shell_folder/SftpDataObject.cpp
type comet (line 72) | namespace comet {
type comtype<IDataObject> (line 74) | struct comtype<IDataObject>
method IID (line 76) | static const IID& uuid() { return IID_IDataObject; }
function STDMETHODIMP (line 136) | STDMETHODIMP CSftpDataObject::GetData(
function STGMEDIUM (line 256) | STGMEDIUM CSftpDataObject::_DelayRenderCfFileContents(long lindex)
function HGLOBAL (line 283) | HGLOBAL CSftpDataObject::_CreateFileGroupDescriptor()
function remote_itemid_view (line 355) | remote_itemid_view view_of_last_item(const basic_pidl<T, U>& pidl)
function Descriptor (line 370) | Descriptor make_descriptor(const basic_pidl<T, U>& pidl, bool dialogue)
FILE: swish/shell_folder/SftpDataObject.h
function class (line 71) | class CSftpDataObject : public CDataObject
FILE: swish/shell_folder/SftpDirectory.cpp
type comet (line 88) | namespace comet {
type comtype<IEnumIDList> (line 90) | struct comtype<IEnumIDList>
method IID (line 92) | static const IID& uuid() throw() { return IID_IEnumIDList; }
type enumerated_type_of<IEnumIDList> (line 96) | struct enumerated_type_of<IEnumIDList>
type impl::type_policy<PITEMID_CHILD> (line 102) | struct impl::type_policy<PITEMID_CHILD>
method init (line 104) | static void init(PITEMID_CHILD& t, const cpidl_t& s)
method clear (line 109) | static void clear(PITEMID_CHILD& t)
function is_link (line 131) | bool is_link(const sftp_filesystem_item& lt)
function is_directory (line 136) | bool is_directory(
function is_dotted (line 169) | bool is_dotted(const sftp_filesystem_item& file)
function cpidl_t (line 175) | cpidl_t convert_directory_entry_to_pidl(
function notify_shell_created_directory (line 201) | void notify_shell_created_directory(const apidl_t& folder_pidl)
function notify_shell_of_deletion (line 218) | void notify_shell_of_deletion(
function CSftpDirectory (line 294) | CSftpDirectory CSftpDirectory::GetSubdirectory(const cpidl_t& directory)
function writeable_to_openmode (line 305) | std::ios_base::openmode writeable_to_openmode(bool writeable)
function cpidl_t (line 404) | cpidl_t CSftpDirectory::CreateDirectory(const wstring& name)
function apidl_t (line 431) | apidl_t CSftpDirectory::ResolveLink(const cpidl_t& item)
FILE: swish/shell_folder/SftpDirectory.h
function class (line 43) | class CSftpDirectory
FILE: swish/shell_folder/SnitchingDataObject.hpp
type comet (line 44) | namespace comet {
type comtype<::IDataObject> (line 46) | struct comtype<::IDataObject>
function CSnitchingDataObject (line 65) | CSnitchingDataObject(comet::com_ptr<IDataObject> wrapped_data_object)
FILE: swish/shell_folder/SwishFolder.hpp
type swish (line 42) | namespace swish {
type shell_folder (line 43) | namespace shell_folder {
type folder (line 44) | namespace folder {
class CSwishFolder (line 47) | class CSwishFolder : public swish::shell_folder::folder::CFolder<C...
method if (line 73) | if (riid == __uuidof(IShellView))
method else (line 77) | else if (riid == __uuidof(IShellDetails))
method else (line 81) | else if (riid == __uuidof(IDropTarget))
method else (line 85) | else if (riid == __uuidof(IExplorerCommandProvider))
method else (line 89) | else if (riid == __uuidof(IContextMenu))
function folder_view (line 160) | virtual ATL::CComPtr<IShellView> folder_view(HWND hwnd)
function shell_details (line 193) | virtual ATL::CComPtr<IShellDetails> shell_details(HWND /*hwnd*/)
function drop_target (line 201) | virtual ATL::CComPtr<IDropTarget> drop_target(HWND /*hwnd*/)
function command_provider (line 209) | virtual ATL::CComPtr<IExplorerCommandProvider> command_provider(
function background_context_menu (line 221) | virtual ATL::CComPtr<IContextMenu> background_context_menu(HWND /*...
function extract_icon_w (line 235) | virtual ATL::CComPtr<IExtractIconW> extract_icon_w(
function extract_icon_a (line 249) | virtual ATL::CComPtr<IExtractIconA> extract_icon_a(
function context_menu (line 259) | virtual ATL::CComPtr<IContextMenu> context_menu(
function query_associations (line 268) | virtual ATL::CComPtr<IQueryAssociations> query_associations(
function data_object (line 277) | virtual ATL::CComPtr<IDataObject> data_object(
function folder_view_callback (line 289) | virtual ATL::CComPtr<IShellFolderViewCB> folder_view_callback(
FILE: swish/shell_folder/com_dll/SwishCoClasses.cpp
type swish (line 33) | namespace swish {
type shell_folder (line 34) | namespace shell_folder {
type com_dll (line 35) | namespace com_dll {
class ATL_NO_VTABLE (line 42) | class ATL_NO_VTABLE
class ATL_NO_VTABLE (line 61) | class ATL_NO_VTABLE
FILE: swish/shell_folder/com_dll/SwishModule.cpp
type swish (line 33) | namespace swish {
type shell_folder (line 34) | namespace shell_folder {
type com_dll (line 35) | namespace com_dll {
function BOOL (line 57) | BOOL WINAPI DllMain(
function STDAPI (line 66) | STDAPI DllCanUnloadNow()
function STDAPI (line 72) | STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
function STDAPI (line 82) | STDAPI DllRegisterServer()
function STDAPI (line 89) | STDAPI DllUnregisterServer()
FILE: swish/shell_folder/data_object/FileGroupDescriptor.hpp
type swish (line 53) | namespace swish {
type shell_folder (line 54) | namespace shell_folder {
type data_object (line 55) | namespace data_object {
function lo_dword (line 59) | inline boost::uint32_t lo_dword(boost::uint64_t qword)
function hi_dword (line 64) | inline boost::uint32_t hi_dword(boost::uint64_t qword)
function ptime_to_filetime (line 72) | void ptime_to_filetime(const boost::posix_time::ptime& time, FILET...
function filetime_to_ptime (line 86) | boost::posix_time::ptime filetime_to_ptime(const FILETIME& ft)
class field_error (line 97) | class field_error : public std::logic_error
method field_error (line 100) | explicit field_error(const std::string message) : std::logic_err...
class Descriptor (line 107) | class Descriptor : private FILEDESCRIPTORW
method Descriptor (line 111) | Descriptor() : FILEDESCRIPTORW() {}
method Descriptor (line 112) | Descriptor(const FILEDESCRIPTORW& d) : FILEDESCRIPTORW(d) {}
method FILEDESCRIPTORW (line 115) | const FILEDESCRIPTORW& get() const
method path (line 123) | std::wstring path() const
method path (line 135) | void path(std::wstring path)
method file_size (line 156) | boost::uint64_t file_size() const
method file_size (line 173) | void file_size(boost::uint64_t size)
method creation_time (line 183) | boost::posix_time::ptime creation_time() const
method creation_time (line 194) | void creation_time(const boost::posix_time::ptime& time)
method last_access_time (line 203) | boost::posix_time::ptime last_access_time() const
method last_access_time (line 215) | void last_access_time(const boost::posix_time::ptime& time)
method last_write_time (line 224) | boost::posix_time::ptime last_write_time() const
method last_write_time (line 236) | void last_write_time(const boost::posix_time::ptime& time)
method want_progress (line 245) | bool want_progress() const
method want_progress (line 253) | void want_progress(bool show)
method DWORD (line 264) | DWORD attributes() const
method attributes (line 274) | void attributes(DWORD attrs)
method _valid_field (line 285) | bool _valid_field(DWORD field) const
method _set_field_valid (line 293) | void _set_field_valid(DWORD field)
method _unset_field_valid (line 301) | void _unset_field_valid(DWORD field)
class FileGroupDescriptor (line 315) | class FileGroupDescriptor
method FileGroupDescriptor (line 322) | FileGroupDescriptor(HGLOBAL hglobal) : m_lock(hglobal) {}
method size (line 329) | size_t size() const
method Descriptor (line 337) | Descriptor& operator[](size_t i) const
function HGLOBAL (line 361) | HGLOBAL group_descriptor_from_range(It first, It last)
FILE: swish/shell_folder/data_object/GlobalLocker.hpp
type swish (line 33) | namespace swish {
type shell_folder (line 34) | namespace shell_folder {
type data_object (line 35) | namespace data_object {
class GlobalLocker (line 37) | class GlobalLocker
method GlobalLocker (line 69) | explicit GlobalLocker(HGLOBAL hglobal) :
method GlobalLocker (line 113) | GlobalLocker(const GlobalLocker& lock) :
method GlobalLocker (line 126) | GlobalLocker& operator=(GlobalLocker lock) throw()
method T (line 135) | T* get() const
function swap (line 45) | inline void swap(GlobalLocker<T>& lhs, GlobalLocker<T>& rhs) throw()
class GlobalLocker (line 58) | class GlobalLocker
method GlobalLocker (line 69) | explicit GlobalLocker(HGLOBAL hglobal) :
method GlobalLocker (line 113) | GlobalLocker(const GlobalLocker& lock) :
method GlobalLocker (line 126) | GlobalLocker& operator=(GlobalLocker lock) throw()
method T (line 135) | T* get() const
FILE: swish/shell_folder/data_object/ShellDataObject.cpp
type comet::comtype<IAsyncOperation> (line 53) | struct comet::comtype<IAsyncOperation>
method IID (line 55) | static const IID& uuid() throw() { return IID_IAsyncOperation; }
type swish (line 59) | namespace swish {
type shell_folder (line 60) | namespace shell_folder {
type data_object (line 61) | namespace data_object {
class GlobalCida (line 80) | class GlobalCida
method GlobalCida (line 83) | GlobalCida(const StorageMedium& medium) :
method CIDA (line 88) | const CIDA& get() const
function StorageMedium (line 106) | StorageMedium cfstr_shellidlist_from_data_object(
function pidl_t (line 128) | pidl_t pidl_from_cida(const CIDA& cida, int i)
function apidl_t (line 140) | apidl_t parent_from_cida(const CIDA& cida)
function pidl_t (line 148) | pidl_t child_from_cida(const CIDA& cida, int i)
function apidl_t (line 292) | apidl_t PidlFormat::parent_folder() const
function apidl_t (line 306) | apidl_t PidlFormat::file(UINT i) const
function pidl_t (line 317) | pidl_t PidlFormat::relative_file(UINT i) const
function UINT (line 336) | UINT PidlFormat::pidl_count() const
FILE: swish/shell_folder/data_object/ShellDataObject.hpp
type swish (line 36) | namespace swish {
type shell_folder (line 37) | namespace shell_folder {
type data_object (line 38) | namespace data_object {
class ShellDataObject (line 44) | class ShellDataObject
class PidlFormat (line 66) | class PidlFormat
FILE: swish/shell_folder/data_object/StorageMedium.hpp
type swish (line 35) | namespace swish {
type shell_folder (line 36) | namespace shell_folder {
type data_object (line 37) | namespace data_object {
class StorageMedium (line 39) | class StorageMedium
method StorageMedium (line 42) | StorageMedium() throw()
method StorageMedium (line 47) | StorageMedium(const StorageMedium& medium)
method StorageMedium (line 54) | StorageMedium& operator=(StorageMedium medium) throw()
method STGMEDIUM (line 73) | STGMEDIUM* out()
method STGMEDIUM (line 82) | const STGMEDIUM& get() const
method empty (line 91) | bool empty() const
FILE: swish/shell_folder/locale_setup.hpp
type swish (line 38) | namespace swish {
type shell_folder (line 39) | namespace shell_folder {
type detail (line 41) | namespace detail {
function switch_to_boost_locale (line 46) | inline std::locale switch_to_boost_locale()
class LocaleSetup (line 76) | class LocaleSetup
method LocaleSetup (line 79) | LocaleSetup() : m_old_locale(detail::switch_to_boost_locale()) {}
FILE: swish/trace.hpp
type swish (line 55) | namespace swish {
type tracing (line 56) | namespace tracing {
class Tracer (line 63) | class Tracer
method Tracer (line 66) | Tracer()
method trace (line 76) | void trace(const std::string& message) const
class TraceFormatter (line 97) | class TraceFormatter
method TraceFormatter (line 105) | TraceFormatter(const std::string& format) : m_format(format) {}
method TraceFormatter (line 120) | TraceFormatter& operator%(const std::wstring& value)
method TraceFormatter (line 128) | TraceFormatter& operator%(const T& value)
function TraceFormatter (line 148) | inline TraceFormatter trace(const std::string& format)
method TraceFormatter (line 105) | TraceFormatter(const std::string& format) : m_format(format) {}
method TraceFormatter (line 120) | TraceFormatter& operator%(const std::wstring& value)
method TraceFormatter (line 128) | TraceFormatter& operator%(const T& value)
function trace_f (line 159) | inline void trace_f(std::string format, ...)
class DummyFormatter (line 196) | class DummyFormatter
method DummyFormatter (line 200) | DummyFormatter& operator%(const T&)
function DummyFormatter (line 208) | inline DummyFormatter trace(const std::string&)
method DummyFormatter (line 200) | DummyFormatter& operator%(const T&)
function trace_f (line 213) | inline void trace_f(std::string, ...) {}
type tracing (line 192) | namespace tracing {
class Tracer (line 63) | class Tracer
method Tracer (line 66) | Tracer()
method trace (line 76) | void trace(const std::string& message) const
class TraceFormatter (line 97) | class TraceFormatter
method TraceFormatter (line 105) | TraceFormatter(const std::string& format) : m_format(format) {}
method TraceFormatter (line 120) | TraceFormatter& operator%(const std::wstring& value)
method TraceFormatter (line 128) | TraceFormatter& operator%(const T& value)
function TraceFormatter (line 148) | inline TraceFormatter trace(const std::string& format)
method TraceFormatter (line 105) | TraceFormatter(const std::string& format) : m_format(format) {}
method TraceFormatter (line 120) | TraceFormatter& operator%(const std::wstring& value)
method TraceFormatter (line 128) | TraceFormatter& operator%(const T& value)
function trace_f (line 159) | inline void trace_f(std::string format, ...)
class DummyFormatter (line 196) | class DummyFormatter
method DummyFormatter (line 200) | DummyFormatter& operator%(const T&)
function DummyFormatter (line 208) | inline DummyFormatter trace(const std::string&)
method DummyFormatter (line 200) | DummyFormatter& operator%(const T&)
function trace_f (line 213) | inline void trace_f(std::string, ...) {}
type swish (line 191) | namespace swish {
type tracing (line 56) | namespace tracing {
class Tracer (line 63) | class Tracer
method Tracer (line 66) | Tracer()
method trace (line 76) | void trace(const std::string& message) const
class TraceFormatter (line 97) | class TraceFormatter
method TraceFormatter (line 105) | TraceFormatter(const std::string& format) : m_format(format) {}
method TraceFormatter (line 120) | TraceFormatter& operator%(const std::wstring& value)
method TraceFormatter (line 128) | TraceFormatter& operator%(const T& value)
function TraceFormatter (line 148) | inline TraceFormatter trace(const std::string& format)
method TraceFormatter (line 105) | TraceFormatter(const std::string& format) : m_format(format) {}
method TraceFormatter (line 120) | TraceFormatter& operator%(const std::wstring& value)
method TraceFormatter (line 128) | TraceFormatter& operator%(const T& value)
function trace_f (line 159) | inline void trace_f(std::string format, ...)
class DummyFormatter (line 196) | class DummyFormatter
method DummyFormatter (line 200) | DummyFormatter& operator%(const T&)
function DummyFormatter (line 208) | inline DummyFormatter trace(const std::string&)
method DummyFormatter (line 200) | DummyFormatter& operator%(const T&)
function trace_f (line 213) | inline void trace_f(std::string, ...) {}
type tracing (line 192) | namespace tracing {
class Tracer (line 63) | class Tracer
method Tracer (line 66) | Tracer()
method trace (line 76) | void trace(const std::string& message) const
class TraceFormatter (line 97) | class TraceFormatter
method TraceFormatter (line 105) | TraceFormatter(const std::string& format) : m_format(format) {}
method TraceFormatter (line 120) | TraceFormatter& operator%(const std::wstring& value)
method TraceFormatter (line 128) | TraceFormatter& operator%(const T& value)
function TraceFormatter (line 148) | inline TraceFormatter trace(const std::string& format)
method TraceFormatter (line 105) | TraceFormatter(const std::string& format) : m_format(format) {}
method TraceFormatter (line 120) | TraceFormatter& operator%(const std::wstring& value)
method TraceFormatter (line 128) | TraceFormatter& operator%(const T& value)
function trace_f (line 159) | inline void trace_f(std::string format, ...)
class DummyFormatter (line 196) | class DummyFormatter
method DummyFormatter (line 200) | DummyFormatter& operator%(const T&)
function DummyFormatter (line 208) | inline DummyFormatter trace(const std::string&)
method DummyFormatter (line 200) | DummyFormatter& operator%(const T&)
function trace_f (line 213) | inline void trace_f(std::string, ...) {}
FILE: swish/utils.hpp
type Converter (line 61) | struct Converter
type Narrow (line 69) | struct Narrow : Converter<wchar_t, char>
type Widen (line 80) | struct Widen : Converter<char, wchar_t>
type swish (line 92) | namespace swish {
type utils (line 93) | namespace utils {
function ConvertString (line 101) | inline typename T::ToType ConvertString(const typename T::FromType& ...
function WideStringToUtf8String (line 131) | inline std::string WideStringToUtf8String(const std::wstring& wide)
function Utf8StringToWideString (line 139) | inline std::wstring Utf8StringToWideString(const std::string& narrow)
type detail (line 180) | namespace detail {
function current_user (line 186) | inline typename T::return_type current_user()
type utils (line 178) | namespace utils {
function ConvertString (line 101) | inline typename T::ToType ConvertString(const typename T::FromType& ...
function WideStringToUtf8String (line 131) | inline std::string WideStringToUtf8String(const std::wstring& wide)
function Utf8StringToWideString (line 139) | inline std::wstring Utf8StringToWideString(const std::string& narrow)
type detail (line 180) | namespace detail {
function current_user (line 186) | inline typename T::return_type current_user()
function current_user (line 222) | inline WideUserTraits::return_type current_user()
function current_user_a (line 227) | inline NarrowUserTraits::return_type current_user_a()
type detail (line 232) | namespace detail {
function DWORD (line 234) | inline DWORD get_environment_variable(
function DWORD (line 240) | inline DWORD get_environment_variable(
function T (line 252) | inline T environment_variable(const T& key)
function T (line 276) | inline T home_directory()
type com (line 311) | namespace com {
function running_object_table (line 316) | inline comet::com_ptr<IRunningObjectTable> running_object_table()
function CLSID (line 333) | inline CLSID clsid_from_progid(const std::wstring& progid)
function class_object (line 347) | inline comet::com_ptr<T> class_object(
function class_object (line 365) | inline comet::com_ptr<T> class_object(
type NarrowUserTraits (line 152) | struct NarrowUserTraits
method BOOL (line 157) | inline static BOOL get_user_name(
type WideUserTraits (line 164) | struct WideUserTraits
method BOOL (line 169) | inline static BOOL get_user_name(
type swish (line 177) | namespace swish {
type utils (line 93) | namespace utils {
function ConvertString (line 101) | inline typename T::ToType ConvertString(const typename T::FromType& ...
function WideStringToUtf8String (line 131) | inline std::string WideStringToUtf8String(const std::wstring& wide)
function Utf8StringToWideString (line 139) | inline std::wstring Utf8StringToWideString(const std::string& narrow)
type detail (line 180) | namespace detail {
function current_user (line 186) | inline typename T::return_type current_user()
type utils (line 178) | namespace utils {
function ConvertString (line 101) | inline typename T::ToType ConvertString(const typename T::FromType& ...
function WideStringToUtf8String (line 131) | inline std::string WideStringToUtf8String(const std::wstring& wide)
function Utf8StringToWideString (line 139) | inline std::wstring Utf8StringToWideString(const std::string& narrow)
type detail (line 180) | namespace detail {
function current_user (line 186) | inline typename T::return_type current_user()
function current_user (line 222) | inline WideUserTraits::return_type current_user()
function current_user_a (line 227) | inline NarrowUserTraits::return_type current_user_a()
type detail (line 232) | namespace detail {
function DWORD (line 234) | inline DWORD get_environment_variable(
function DWORD (line 240) | inline DWORD get_environment_variable(
function T (line 252) | inline T environment_variable(const T& key)
function T (line 276) | inline T home_directory()
type com (line 311) | namespace com {
function running_object_table (line 316) | inline comet::com_ptr<IRunningObjectTable> running_object_table()
function CLSID (line 333) | inline CLSID clsid_from_progid(const std::wstring& progid)
function class_object (line 347) | inline comet::com_ptr<T> class_object(
function class_object (line 365) | inline comet::com_ptr<T> class_object(
FILE: swish/versions/version.cpp
type swish (line 40) | namespace swish {
function string (line 42) | string snapshot_version()
function build_time (line 47) | std::string build_time()
function build_date (line 52) | std::string build_date()
function structured_version (line 78) | structured_version& structured_version::operator=(structured_version o...
function string (line 87) | string structured_version::as_string() const { return m_pimpl->as_stri...
function structured_version (line 89) | structured_version release_version()
FILE: swish/versions/version.hpp
type swish (line 38) | namespace swish {
class structured_version_impl (line 71) | class structured_version_impl
class structured_version (line 86) | class structured_version
method swap (line 101) | void swap(structured_version& l, structured_version& r)
FILE: swish/windows_api.hpp
type swish (line 41) | namespace swish {
type windows_api (line 42) | namespace windows_api {
function HRESULT (line 58) | inline HRESULT WINAPI SHBindToParent(
FILE: test/common_boost/ConsumerStub.hpp
type test (line 43) | namespace test {
class CConsumerStub (line 48) | class CConsumerStub : public comet::simple_object<ISftpConsumer>
method CConsumerStub (line 54) | CConsumerStub(
method prompt_for_password (line 60) | virtual boost::optional<std::wstring> prompt_for_password()
method key_files (line 65) | virtual boost::optional<
method challenge_response (line 72) | virtual boost::optional<std::vector<std::string>> challenge_response(
method HRESULT (line 80) | HRESULT OnConfirmOverwrite(
method HRESULT (line 87) | HRESULT OnHostkeyMismatch(
method HRESULT (line 93) | HRESULT OnHostkeyUnknown(
FILE: test/common_boost/MockConsumer.hpp
type test (line 34) | namespace test
class MockConsumer (line 37) | class MockConsumer : public comet::simple_object<ISftpConsumer>
type ConfirmOverwriteBehaviour (line 46) | enum ConfirmOverwriteBehaviour
type PasswordBehaviour (line 55) | enum PasswordBehaviour
type KeyboardInteractiveBehaviour (line 68) | enum KeyboardInteractiveBehaviour
type PublicKeyBehaviour (line 80) | enum PublicKeyBehaviour
method MockConsumer (line 90) | MockConsumer()
method set_password (line 103) | void set_password(const std::wstring& password)
method set_password_behaviour (line 108) | void set_password_behaviour(PasswordBehaviour behaviour)
method set_password_max_attempts (line 113) | void set_password_max_attempts(int max)
method set_keyboard_interactive_behaviour (line 118) | void
method set_keyboard_interactive_max_attempts (line 124) | void set_keyboard_interactive_max_attempts(int max)
method set_key_files (line 129) | void set_key_files(const std::string& private_key,
method set_pubkey_behaviour (line 136) | void set_pubkey_behaviour(PublicKeyBehaviour behaviour)
method set_confirm_overwrite_behaviour (line 141) | void set_confirm_overwrite_behaviour(ConfirmOverwriteBehaviour behav...
method was_asked_to_confirm_overwrite (line 146) | bool was_asked_to_confirm_overwrite() const
method prompt_for_password (line 152) | virtual boost::optional<std::wstring> prompt_for_password()
method key_files (line 185) | virtual boost::optional<
method challenge_response (line 212) | virtual boost::optional<std::vector<std::string>>
method HRESULT (line 269) | HRESULT OnConfirmOverwrite(BSTR /*bstrOldFile*/, BSTR /*bstrNewFile*/)
method HRESULT (line 286) | HRESULT OnHostkeyMismatch(BSTR /*bstrHostName*/, BSTR /*bstrHostKey*/,
method HRESULT (line 292) | HRESULT OnHostkeyUnknown(BSTR /*bstrHostName*/, BSTR /*bstrHostKey*/,
FILE: test/common_boost/MockProvider.hpp
type test (line 51) | namespace test {
type detail (line 52) | namespace detail {
function name_match (line 57) | inline bool name_match(
function FilesystemLocation (line 68) | inline FilesystemLocation find_location_from_path(
class mock_filesystem_file (line 102) | class mock_filesystem_file :
method create (line 106) | static swish::provider::sftp_filesystem_item create(
method BOOST_SCOPED_ENUM (line 115) | BOOST_SCOPED_ENUM(type) type() const
method filename (line 120) | ssh::filesystem::path filename() const
method permissions (line 125) | unsigned long permissions() const
method owner (line 130) | boost::optional<std::wstring> owner() const
method uid (line 135) | unsigned long uid() const
method group (line 140) | boost::optional<std::wstring> group() const
method gid (line 145) | unsigned long gid() const
method size_in_bytes (line 150) | boost::uint64_t size_in_bytes() const
method last_accessed (line 155) | comet::datetime_t last_accessed() const
method last_modified (line 160) | comet::datetime_t last_modified() const
method mock_filesystem_file (line 166) | mock_filesystem_file(
class mock_filesystem_directory (line 178) | class mock_filesystem_directory :
method create (line 182) | static swish::provider::sftp_filesystem_item create(
method BOOST_SCOPED_ENUM (line 190) | BOOST_SCOPED_ENUM(type) type() const
method filename (line 195) | ssh::filesystem::path filename() const
method permissions (line 200) | unsigned long permissions() const
method owner (line 205) | boost::optional<std::wstring> owner() const
method uid (line 210) | unsigned long uid() const
method group (line 215) | boost::optional<std::wstring> group() const
method gid (line 220) | unsigned long gid() const
method size_in_bytes (line 225) | boost::uint64_t size_in_bytes() const
method last_accessed (line 230) | comet::datetime_t last_accessed() const
method last_modified (line 235) | comet::datetime_t last_modified() const
method mock_filesystem_directory (line 241) | mock_filesystem_directory(const std::wstring& name) : m_name(name) {}
class mock_filesystem_link (line 246) | class mock_filesystem_link :
method create (line 250) | static swish::provider::sftp_filesystem_item create(
method BOOST_SCOPED_ENUM (line 258) | BOOST_SCOPED_ENUM(type) type() const
method filename (line 263) | ssh::filesystem::path filename() const
method permissions (line 268) | unsigned long permissions() const
method owner (line 273) | boost::optional<std::wstring> owner() const
method uid (line 278) | unsigned long uid() const
method group (line 283) | boost::optional<std::wstring> group() const
method gid (line 288) | unsigned long gid() const
method size_in_bytes (line 293) | boost::uint64_t size_in_bytes() const
method last_accessed (line 298) | comet::datetime_t last_accessed() const
method last_modified (line 303) | comet::datetime_t last_modified() const
method mock_filesystem_link (line 309) | mock_filesystem_link(const std::wstring& name) : m_name(name) {}
function tag_filename (line 314) | inline std::wstring tag_filename(
function make_item_in (line 323) | inline void make_item_in(
function make_item_in (line 330) | inline void make_item_in(
function fill_mock_listing (line 343) | inline void fill_mock_listing(
type comparator (line 423) | struct comparator
class MockProvider (line 435) | class MockProvider : public swish::provider::sftp_provider
type tagListingBehaviour (line 442) | enum tagListingBehaviour {
type tagRenameBehaviour (line 453) | enum tagRenameBehaviour {
method MockProvider (line 461) | MockProvider() :
method set_listing_behaviour (line 486) | void set_listing_behaviour(ListingBehaviour behaviour)
method set_rename_behaviour (line 491) | void set_rename_behaviour(RenameBehaviour behaviour)
method listing (line 496) | virtual swish::provider::directory_listing listing(
method get_file (line 537) | virtual comet::com_ptr<IStream> get_file(
method VARIANT_BOOL (line 549) | virtual VARIANT_BOOL rename(
method resolve_link (line 591) | virtual ssh::filesystem::path resolve_link(
method stat (line 610) | virtual swish::provider::sftp_filesystem_item stat(
FILE: test/common_boost/SwishPidlFixture.hpp
type test (line 29) | namespace test
class SwishPidlFixture (line 32) | class SwishPidlFixture
method fake_swish_pidl (line 38) | washer::shell::pidl::apidl_t fake_swish_pidl()
method real_swish_pidl (line 76) | washer::shell::pidl::apidl_t real_swish_pidl()
method create_dummy_remote_itemid (line 83) | washer::shell::pidl::cpidl_t
method create_dummy_root_host_pidl (line 96) | washer::shell::pidl::apidl_t create_dummy_root_host_pidl()
method create_dummy_root_pidl (line 106) | washer::shell::pidl::apidl_t create_dummy_root_pidl()
FILE: test/common_boost/data_object_utils.cpp
function path (line 65) | path get_module_path(HMODULE hmodule=NULL)
type test (line 80) | namespace test {
type data_object_utils (line 81) | namespace data_object_utils {
function path (line 94) | path create_test_zip_file(const path& in_directory)
function data_object_for_zipfile (line 108) | com_ptr<IDataObject> data_object_for_zipfile(const path& zip_file)
FILE: test/common_boost/data_object_utils.hpp
type test (line 33) | namespace test {
type data_object_utils (line 34) | namespace data_object_utils {
FILE: test/common_boost/fixtures.hpp
type test (line 26) | namespace test
class ComFixture (line 32) | class ComFixture
method ComFixture (line 35) | ComFixture()
class WinsockFixture (line 50) | class WinsockFixture
method WinsockFixture (line 53) | WinsockFixture()
FILE: test/common_boost/helpers.hpp
type std (line 40) | namespace std {
type test (line 64) | namespace test {
type detail (line 65) | namespace detail {
function s_ok (line 67) | inline boost::test_tools::predicate_result s_ok(HRESULT hr)
function s_ok_error_info (line 85) | inline boost::test_tools::predicate_result s_ok_error_info(
FILE: test/common_boost/stream_utils.cpp
type test (line 36) | namespace test {
type stream_utils (line 37) | namespace stream_utils {
function verify_stream_read_ (line 41) | size_t verify_stream_read_(
function verify_stream_read (line 88) | size_t verify_stream_read(
FILE: test/common_boost/stream_utils.hpp
type test (line 34) | namespace test {
type stream_utils (line 35) | namespace stream_utils {
FILE: test/common_boost/tree.hh
type kp (line 73) | namespace kp {
function constructor (line 76) | void constructor(T1* p, T2& val)
function constructor (line 82) | void constructor(T1* p)
function destructor (line 88) | void destructor(T1* p)
class tree_node_ (line 97) | class tree_node_ { // size: 5*4=20 bytes (on 32 bit arch), can be reduce...
class iterator_base (line 113) | class iterator_base
class iterator_base (line 130) | class iterator_base {
class pre_order_iterator (line 160) | class pre_order_iterator : public iterator_base {
class post_order_iterator (line 178) | class post_order_iterator : public iterator_base {
class breadth_first_queued_iterator (line 199) | class breadth_first_queued_iterator : public iterator_base {
class fixed_depth_iterator (line 220) | class fixed_depth_iterator : public iterator_base {
class sibling_iterator (line 241) | class sibling_iterator : public iterator_base {
class leaf_iterator (line 265) | class leaf_iterator : public iterator_base {
class iterator_base_less (line 434) | class iterator_base_less {
class compare_nodes (line 450) | class compare_nodes {
method compare_nodes (line 452) | compare_nodes(StrictWeakOrdering comp) : comp_(comp) {}
class pre_order_iterator (line 114) | class pre_order_iterator
class post_order_iterator (line 115) | class post_order_iterator
class sibling_iterator (line 116) | class sibling_iterator
class leaf_iterator (line 117) | class leaf_iterator
class iterator_base (line 128) | class iterator_base : public stlport::bidirectional_iterator<T, ptrdiff_...
class iterator_base (line 130) | class iterator_base {
class pre_order_iterator (line 160) | class pre_order_iterator : public iterator_base {
class post_order_iterator (line 178) | class post_order_iterator : public iterator_base {
class breadth_first_queued_iterator (line 199) | class breadth_first_queued_iterator : public iterator_base {
class fixed_depth_iterator (line 220) | class fixed_depth_iterator : public iterator_base {
class sibling_iterator (line 241) | class sibling_iterator : public iterator_base {
class leaf_iterator (line 265) | class leaf_iterator : public iterator_base {
class iterator_base_less (line 434) | class iterator_base_less {
class compare_nodes (line 450) | class compare_nodes {
method compare_nodes (line 452) | compare_nodes(StrictWeakOrdering comp) : comp_(comp) {}
function iter (line 619) | iter tree<T, tree_node_allocator>::erase(iter it)
function iter (line 787) | iter tree<T, tree_node_allocator>::parent(iter position)
function iter (line 795) | iter tree<T, tree_node_allocator>::previous_sibling(iter position) const
function iter (line 805) | iter tree<T, tree_node_allocator>::next_sibling(iter position) const
function iter (line 815) | iter tree<T, tree_node_allocator>::next_at_same_depth(iter position) const
function iter (line 860) | iter tree<T, tree_node_allocator>::append_child(iter position)
function iter (line 885) | iter tree<T, tree_node_allocator>::prepend_child(iter position)
function iter (line 910) | iter tree<T, tree_node_allocator>::append_child(iter position, const T& x)
function iter (line 939) | iter tree<T, tree_node_allocator>::prepend_child(iter position, const T& x)
function iter (line 964) | iter tree<T, tree_node_allocator>::append_child(iter position, iter other)
function iter (line 975) | iter tree<T, tree_node_allocator>::prepend_child(iter position, iter other)
function iter (line 986) | iter tree<T, tree_node_allocator>::append_children(iter position, siblin...
function iter (line 1002) | iter tree<T, tree_node_allocator>::prepend_children(iter position, sibli...
function iter (line 1025) | iter tree<T, tree_node_allocator>::insert(iter position, const T& x)
function iter (line 1081) | iter tree<T, tree_node_allocator>::insert_after(iter position, const T& x)
function iter (line 1105) | iter tree<T, tree_node_allocator>::insert_subtree(iter position, const i...
function iter (line 1115) | iter tree<T, tree_node_allocator>::insert_subtree_after(iter position, c...
function iter (line 1135) | iter tree<T, tree_node_allocator>::replace(iter position, const T& x)
function iter (line 1144) | iter tree<T, tree_node_allocator>::replace(iter position, const iterator...
function iter (line 1254) | iter tree<T, tree_node_allocator>::flatten(iter position)
function iter (line 1282) | iter tree<T, tree_node_allocator>::reparent(iter position, sibling_itera...
function iter (line 1330) | iter tree<T, tree_node_allocator>::reparent(iter position, iter from)
function iter (line 1337) | iter tree<T, tree_node_allocator>::wrap(iter position, const T& x)
function iter (line 1348) | iter tree<T, tree_node_allocator>::move_after(iter target, iter source)
function iter (line 1377) | iter tree<T, tree_node_allocator>::move_before(iter target, iter source)
function iter (line 1444) | iter tree<T, tree_node_allocator>::move_ontop(iter target, iter source)
function T (line 1906) | T& tree<T, tree_node_allocator>::iterator_base::operator*() const
function T (line 1912) | T* tree<T, tree_node_allocator>::iterator_base::operator->() const
FILE: test/connection/authenticated_session_test.cpp
function predicate_result (line 49) | predicate_result sftp_is_alive(authenticated_session& session)
function BOOST_AUTO_TEST_CASE (line 68) | BOOST_AUTO_TEST_CASE(connect)
function BOOST_AUTO_TEST_CASE (line 77) | BOOST_AUTO_TEST_CASE(multiple_connections)
function BOOST_AUTO_TEST_CASE (line 97) | BOOST_AUTO_TEST_CASE(server_death)
function BOOST_AUTO_TEST_CASE (line 116) | BOOST_AUTO_TEST_CASE(server_restart)
function authenticated_session (line 135) | authenticated_session move_create(const wstring& host, unsigned int port,
function BOOST_AUTO_TEST_CASE (line 143) | BOOST_AUTO_TEST_CASE(move_contruct)
function BOOST_AUTO_TEST_CASE (line 152) | BOOST_AUTO_TEST_CASE(move_assign)
FILE: test/connection/connection_spec_create_session_test.cpp
class fixture (line 46) | class fixture : private openssh_fixture
method connection_spec (line 49) | connection_spec get_connection()
method consumer (line 54) | com_ptr<ISftpConsumer> consumer()
method predicate_result (line 64) | predicate_result alive(authenticated_session& session)
function BOOST_AUTO_TEST_CASE (line 86) | BOOST_AUTO_TEST_CASE(create)
FILE: test/connection/connection_spec_test.cpp
function BOOST_AUTO_TEST_CASE (line 30) | BOOST_AUTO_TEST_CASE(self)
function BOOST_AUTO_TEST_CASE (line 36) | BOOST_AUTO_TEST_CASE(equal)
function BOOST_AUTO_TEST_CASE (line 44) | BOOST_AUTO_TEST_CASE(less_host)
function BOOST_AUTO_TEST_CASE (line 52) | BOOST_AUTO_TEST_CASE(equal_host_less_user)
function BOOST_AUTO_TEST_CASE (line 60) | BOOST_AUTO_TEST_CASE(greater_host_less_user)
function BOOST_AUTO_TEST_CASE (line 68) | BOOST_AUTO_TEST_CASE(equal_host_equal_user_less_port)
function BOOST_AUTO_TEST_CASE (line 76) | BOOST_AUTO_TEST_CASE(equal_host_greater_user_less_port)
function BOOST_AUTO_TEST_CASE (line 84) | BOOST_AUTO_TEST_CASE(use_as_map_key_same)
function BOOST_AUTO_TEST_CASE (line 96) | BOOST_AUTO_TEST_CASE(use_as_map_key_different_user)
FILE: test/connection/running_session_test.cpp
function BOOST_AUTO_TEST_CASE (line 43) | BOOST_AUTO_TEST_CASE(connecting_with_correct_host_and_port_succeeds)
function BOOST_AUTO_TEST_CASE (line 49) | BOOST_AUTO_TEST_CASE(connection_failure_throws_error)
function BOOST_AUTO_TEST_CASE (line 55) | BOOST_AUTO_TEST_CASE(multiple_connections_do_not_interfere)
function running_session (line 72) | running_session move_create(const wstring& host, unsigned int port)
function BOOST_AUTO_TEST_CASE (line 79) | BOOST_AUTO_TEST_CASE(session_survives_move_construction)
function BOOST_AUTO_TEST_CASE (line 85) | BOOST_AUTO_TEST_CASE(session_survives_move_assignment)
FILE: test/connection/session_manager_test.cpp
class fixture (line 64) | class fixture : private openssh_fixture
method connection_spec (line 67) | connection_spec get_connection()
method consumer (line 72) | com_ptr<ISftpConsumer> consumer()
function predicate_result (line 83) | predicate_result alive(authenticated_session& session)
function BOOST_AUTO_TEST_CASE (line 104) | BOOST_AUTO_TEST_CASE(new_reservation_are_registered_with_session_manager)
function BOOST_AUTO_TEST_CASE (line 122) | BOOST_AUTO_TEST_CASE(session_outlives_reservation)
function BOOST_AUTO_TEST_CASE (line 133) | BOOST_AUTO_TEST_CASE(factory_reuses_existing_sessions)
class progress_callback (line 148) | class progress_callback : boost::noncopyable
method progress_callback (line 151) | progress_callback(
method notifications (line 175) | std::vector<std::vector<string>> notifications()
method release_tickets (line 182) | void release_tickets()
function BOOST_AUTO_TEST_CASE (line 203) | BOOST_AUTO_TEST_CASE(removing_session_really_removes_it)
function BOOST_AUTO_TEST_CASE (line 223) | BOOST_AUTO_TEST_CASE(removing_session_with_pending_task)
function BOOST_AUTO_TEST_CASE (line 245) | BOOST_AUTO_TEST_CASE(removing_session_with_multiple_pending_tasks)
function BOOST_AUTO_TEST_CASE (line 278) | BOOST_AUTO_TEST_CASE(removing_session_with_colliding_task_names)
FILE: test/connection/session_pool_test.cpp
class fixture (line 56) | class fixture : public openssh_fixture
method connection_spec (line 59) | connection_spec get_connection()
method consumer (line 64) | com_ptr<ISftpConsumer> consumer()
method predicate_result (line 74) | predicate_result alive(authenticated_session& session)
function BOOST_AUTO_TEST_CASE (line 103) | BOOST_AUTO_TEST_CASE(new_session)
function BOOST_AUTO_TEST_CASE (line 121) | BOOST_AUTO_TEST_CASE(unrelated_unaffected_by_creation)
function BOOST_AUTO_TEST_CASE (line 136) | BOOST_AUTO_TEST_CASE(existing_session)
class use_session_thread (line 156) | class use_session_thread : public thread
method use_session_thread (line 159) | use_session_thread(T* fixture, exception_ptr& error)
method DWORD (line 165) | DWORD thread_main()
function BOOST_AUTO_TEST_CASE (line 225) | BOOST_AUTO_TEST_CASE(threaded)
function BOOST_AUTO_TEST_CASE (line 253) | BOOST_AUTO_TEST_CASE(remove_session)
function BOOST_AUTO_TEST_CASE (line 273) | BOOST_AUTO_TEST_CASE(sessions_across_server_restart)
FILE: test/drop_target/drop_target_test.cpp
function string (line 82) | string test_data()
function create_multifile_data_object (line 94) | com_ptr<IDataObject> create_multifile_data_object(It begin, It end)
function create_data_object (line 103) | com_ptr<IDataObject> create_data_object(const path& local)
function fill_file (line 111) | void fill_file(const path& file)
function create_empty_file (line 120) | void create_empty_file(path name)
class ProgressStub (line 125) | class ProgressStub : public Progress
method user_cancelled (line 128) | bool user_cancelled()
method line (line 132) | void line(DWORD, const wstring&)
method line_path (line 135) | void line_path(DWORD, const wstring&)
method update (line 138) | void update(ULONGLONG, ULONGLONG)
method hide (line 141) | void hide()
method show (line 144) | void show()
class CopyCallbackStub (line 149) | class CopyCallbackStub : public DropActionCallback
method site (line 152) | void site(com_ptr<IUnknown>)
method progress (line 156) | std::auto_ptr<Progress> progress()
method can_overwrite (line 161) | bool can_overwrite(const ssh::filesystem::path&)
method handle_last_exception (line 166) | void handle_last_exception()
class ForbidOverwrite (line 171) | class ForbidOverwrite : public CopyCallbackStub
method can_overwrite (line 174) | bool can_overwrite(const ssh::filesystem::path&)
class AllowOverwrite (line 180) | class AllowOverwrite : public CopyCallbackStub
method can_overwrite (line 183) | bool can_overwrite(const ssh::filesystem::path&)
class DropTargetFixture (line 189) | class DropTargetFixture : public provider_fixture,
method create_drop_target (line 194) | comet::com_ptr<IDropTarget> create_drop_target()
method predicate_result (line 206) | predicate_result file_contents_correct(const ssh::filesystem::path& file)
function BOOST_AUTO_TEST_CASE (line 248) | BOOST_AUTO_TEST_CASE(create)
function BOOST_AUTO_TEST_CASE (line 263) | BOOST_AUTO_TEST_CASE(copy_single)
function BOOST_AUTO_TEST_CASE (line 286) | BOOST_AUTO_TEST_CASE(copy_many)
function BOOST_AUTO_TEST_CASE (line 325) | BOOST_AUTO_TEST_CASE(copy_recursively)
function BOOST_AUTO_TEST_CASE (line 422) | BOOST_AUTO_TEST_CASE(copy_virtual_hierarchy_recursively)
function BOOST_AUTO_TEST_CASE (line 470) | BOOST_AUTO_TEST_CASE(copy_overwrite_yes)
function BOOST_AUTO_TEST_CASE (line 494) | BOOST_AUTO_TEST_CASE(copy_overwrite_no)
function BOOST_AUTO_TEST_CASE (line 522) | BOOST_AUTO_TEST_CASE(copy_overwrite_larger)
function BOOST_AUTO_TEST_CASE (line 561) | BOOST_AUTO_TEST_CASE(drag_enter)
function BOOST_AUTO_TEST_CASE (line 580) | BOOST_AUTO_TEST_CASE(drag_enter_bad_effect)
function BOOST_AUTO_TEST_CASE (line
Condensed preview — 460 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,853K chars).
[
{
"path": ".clang-format",
"chars": 561,
"preview": "---\nAccessModifierOffset: '-4'\nAllowShortFunctionsOnASingleLine: Empty\nAlwaysBreakTemplateDeclarations: 'true'\nBreakBef"
},
{
"path": ".gitattributes",
"chars": 15,
"preview": "*.sh crlf=input"
},
{
"path": ".tx/config",
"chars": 154,
"preview": "[main]\nhost = https://www.transifex.com\n\n[swish.swish]\nfile_filter = po\\<lang>\\swish.po\nsource_file = po\\template\\swish."
},
{
"path": "CMakeLists.txt",
"chars": 4047,
"preview": "# Copyright (C) 2015 Alexander Lamaison <swish@lammy.co.uk>\n#\n# This program is free software; you can redistribute it "
},
{
"path": "COPYING.rtf",
"chars": 18729,
"preview": "{\\rtf1\\ansi\\ansicpg1252\\deff0{\\fonttbl{\\f0\\fmodern\\fprq1\\fcharset0 Courier New;}}\r\n{\\colortbl ;\\red0\\green0\\blue0;}\r\n{\\*"
},
{
"path": "LICENSE.txt",
"chars": 17987,
"preview": "\t\t GNU GENERAL PUBLIC LICENSE\n\t\t Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc."
},
{
"path": "NEWS",
"chars": 7725,
"preview": "swish-0.8.2\n-Fixed error when known_hosts contained unrecognised key types.\n\nswish-0.8.1\n-Fix crash in 32-bit version wh"
},
{
"path": "README.md",
"chars": 2802,
"preview": "Swish\n=====\n\nWhat is Swish?\n--------------\n\nSwish is a plugin for Microsoft Windows Explorer that adds support for SFTP."
},
{
"path": "appcast.xml.in",
"chars": 728,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<rss version=\"2.0\" xmlns:sparkle=\"http://www.andymatuschak.org/xml-namespaces/spa"
},
{
"path": "build/making_a_release.txt",
"chars": 473,
"preview": "Update version number in:\n- top-level CMakeLists.txt\n- wix/swish.wxs\n- wix/wix.wixproj\n\nAdd notable changes to NEWS.\n\nMa"
},
{
"path": "build/news_html.py",
"chars": 1755,
"preview": "\"\"\"Convert Swish NEWS file to HTML.\r\n\"\"\"\r\n\r\n_NEWS = '../NEWS'\r\n_VERSIONED_NEWS = '../NEWS-%s.html'\r\n\r\ndef main():\r\n\r\n "
},
{
"path": "cmake/GetGitRevisionDescription.cmake",
"chars": 4126,
"preview": "# - Returns a version string from Git\n#\n# These functions force a re-configure on each git commit so that you can\n# trus"
},
{
"path": "cmake/GetGitRevisionDescription.cmake.in",
"chars": 1283,
"preview": "#\n# Internal file for GetGitRevisionDescription.cmake\n#\n# Requires CMake 2.6 or newer (uses the 'function' command)\n#\n# "
},
{
"path": "cmake/Hunter/config.cmake",
"chars": 35,
"preview": "hunter_config(Boost VERSION 1.49.0)"
},
{
"path": "cmake/HunterGate.cmake",
"chars": 15579,
"preview": "# Copyright (c) 2013-2015, Ruslan Baratov\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, "
},
{
"path": "cpack_wix_patch.xml",
"chars": 4417,
"preview": "<CPackWiXPatch>\n <!-- When #PRODUCT is supported (CMake 3.3?) we can yse this to remove the\n license page -->\n <"
},
{
"path": "ezel/CMakeLists.txt",
"chars": 1364,
"preview": "# Copyright (C) 2015 Alexander Lamaison <swish@lammy.co.uk>\n#\n# This program is free software: you can redistribute it "
},
{
"path": "ezel/control.hpp",
"chars": 1596,
"preview": "/**\n @file\n\n GUI control base.\n\n @if license\n\n Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.ac.uk>\n\n"
},
{
"path": "ezel/control_parent_impl.hpp",
"chars": 2225,
"preview": "/**\n @file\n\n Compound window parent.\n\n @if license\n\n Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.ac"
},
{
"path": "ezel/controls/button.hpp",
"chars": 2967,
"preview": "/**\n @file\n\n GUI button control.\n\n @if license\n\n Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.ac.uk>"
},
{
"path": "ezel/controls/checkbox.hpp",
"chars": 2774,
"preview": "/**\n @file\n\n GUI check-box control.\n\n @if license\n\n Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.ac."
},
{
"path": "ezel/controls/edit.hpp",
"chars": 3594,
"preview": "/**\n @file\n\n GUI edit (text) control.\n\n @if license\n\n Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.a"
},
{
"path": "ezel/controls/icon.hpp",
"chars": 3156,
"preview": "/**\n @file\n\n GUI icon control.\n\n @if license\n\n Copyright (C) 2010, 2013 Alexander Lamaison <awl03@doc.ic.ac"
},
{
"path": "ezel/controls/label.hpp",
"chars": 2597,
"preview": "/**\n @file\n\n GUI label (static text) control.\n\n @if license\n\n Copyright (C) 2010 Alexander Lamaison <awl03@"
},
{
"path": "ezel/controls/line.hpp",
"chars": 2001,
"preview": "/**\n @file\n\n GUI horizontal line control.\n\n @if license\n\n Copyright (C) 2010 Alexander Lamaison <awl03@doc."
},
{
"path": "ezel/controls/spinner.hpp",
"chars": 4176,
"preview": "/**\n @file\n\n GUI spinner control.\n\n @if license\n\n Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.ac.uk"
},
{
"path": "ezel/detail/command_dispatch.hpp",
"chars": 5531,
"preview": "/**\n @file\n\n Command message dispatch.\n\n @if license\n\n Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic."
},
{
"path": "ezel/detail/dialog_template.hpp",
"chars": 9989,
"preview": "/**\n @file\n\n Windows dialog in-memory template helpers\n\n @if license\n\n Copyright (C) 2010 Alexander Lamaiso"
},
{
"path": "ezel/detail/hooks.hpp",
"chars": 3801,
"preview": "/**\n @file\n\n Window creation hooks\n\n @if license\n\n Copyright (C) 2010, 2011 Alexander Lamaison <awl03@doc.i"
},
{
"path": "ezel/detail/hwnd_linking.hpp",
"chars": 2715,
"preview": "/**\n @file\n\n Low-level HWND manipulation.\n\n @if license\n\n Copyright (C) 2010, 2011 Alexander Lamaison <awl0"
},
{
"path": "ezel/detail/message_dispatch.hpp",
"chars": 5614,
"preview": "/**\n @file\n\n Message dispatch.\n\n @if license\n\n Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.ac.uk>\n\n"
},
{
"path": "ezel/detail/window_impl.hpp",
"chars": 17709,
"preview": "/**\n @file\n\n HWND wrapper implementation.\n\n @if license\n\n Copyright (C) 2010, 2013 Alexander Lamaison <awl0"
},
{
"path": "ezel/detail/window_link.hpp",
"chars": 3655,
"preview": "/**\n @file\n\n HWND/wrapper linking.\n\n @if license\n\n Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.ac.u"
},
{
"path": "ezel/detail/window_proc.hpp",
"chars": 3597,
"preview": "/**\n @file\n\n Window procedures.\n\n @if license\n\n Copyright (C) 2010, 2013 Alexander Lamaison <awl03@doc.ic.a"
},
{
"path": "ezel/detail/window_proxy.hpp",
"chars": 4754,
"preview": "/**\n @file\n\n Window implementation switcher.\n\n @if license\n\n Copyright (C) 2010 Alexander Lamaison <awl03@d"
},
{
"path": "ezel/form.hpp",
"chars": 11330,
"preview": "/**\n @file\n\n GUI forms (aka dialogs)\n\n @if license\n\n Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.ac"
},
{
"path": "ezel/window.hpp",
"chars": 2231,
"preview": "/**\n @file\n\n Ezel window.\n\n @if license\n\n Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.ac.uk>\n\n T"
},
{
"path": "guids.txt",
"chars": 20114,
"preview": "b816a838-5022-11dc-9153-0090f5284f85 Swish Type Library (DLL module UUID)\r\nb816a839-5022-11dc-9153-0090f5284f85 *REMOV"
},
{
"path": "po/CMakeLists.txt",
"chars": 340,
"preview": "set(LANGUAGES\n bg\n ca\n cs\n cy\n da_DK\n de\n el_GR\n es\n et\n fi\n fr\n he\n hi\n hu\n it\n ja\n ko\n lv\n nl\n pl\n"
},
{
"path": "po/bg/swish.po",
"chars": 14517,
"preview": "# \n# Translators:\n# albertvision <avbincco@gmail.com>, 2012\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Swish\\n\"\n\"Report-Msg"
},
{
"path": "po/ca/swish.po",
"chars": 14666,
"preview": "# \n# Translators:\n# lluis.dalmau <lluis.dalmau@guifi.net>, 2013\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Swish\\n\"\n\"Report"
},
{
"path": "po/compile_mo.sh",
"chars": 136,
"preview": "#!/bin/sh\nfor lang in *; do\n if [ -d $lang ]; then\n msgfmt -c --statistics --verbose -o $lang/swish.mo $lang/swis"
},
{
"path": "po/cs/swish.po",
"chars": 14698,
"preview": "# \n# Translators:\n# Karol Kružel <k.kruzel@gmail.com>, 2012\n# mishak <mishak@mishak.net>, 2012\nmsgid \"\"\nmsgstr \"\"\n\"Proje"
},
{
"path": "po/cy/swish.po",
"chars": 13445,
"preview": "# \n# Translators:\n# Alexander Lamaison <alexander.lamaison@gmail.com>, 2013\n# rdj <rhysjones437@googlemail.com>, 2012\nms"
},
{
"path": "po/da_DK/swish.po",
"chars": 12650,
"preview": "# \n# Translators:\n# Martin Finnerup <hackerfinn@gmail.com>, 2012\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Swish\\n\"\n\"Repor"
},
{
"path": "po/de/swish.po",
"chars": 15479,
"preview": "# \n# Translators:\n# Gottfried von Makhir <>, 2012\n# leolabs2 <leo.bernard@me.com>, 2012\n# Philippe Käüver <>, 2012\n# vr0"
},
{
"path": "po/el_GR/swish.po",
"chars": 15476,
"preview": "# \n# Translators:\n# Klonos TwinZ <klonos@gmail.com>, 2012\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Swish\\n\"\n\"Report-Msgid"
},
{
"path": "po/es/swish.po",
"chars": 15049,
"preview": "# \n# Translators:\n# Antonio Rico <aricop@gmail.com>, 2012\n# Tomas Figueroa <teft90@gmail.com>, 2012\nmsgid \"\"\nmsgstr \"\"\n\""
},
{
"path": "po/et/swish.po",
"chars": 14471,
"preview": "# \n# Translators:\n# pexy <pexyyy@gmail.com>, 2012\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Swish\\n\"\n\"Report-Msgid-Bugs-To"
},
{
"path": "po/fi/swish.po",
"chars": 14740,
"preview": "# \n# Translators:\n# Heikki Salko <hezecc@gmail.com>, 2012\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Swish\\n\"\n\"Report-Msgid"
},
{
"path": "po/fr/swish.po",
"chars": 15141,
"preview": "# \n# Translators:\n# fkhannouf <fkhannouf@me.com>, 2012\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Swish\\n\"\n\"Report-Msgid-Bu"
},
{
"path": "po/he/swish.po",
"chars": 13883,
"preview": "# \n# Translators:\n# aharonoosh <aharonoosh1@gmail.com>, 2012\n# SmileyBarry <smiley@smileybarry.com>, 2014\nmsgid \"\"\nmsgst"
},
{
"path": "po/hi/swish.po",
"chars": 14405,
"preview": "# \n# Translators:\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Swish\\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2012-0"
},
{
"path": "po/hu/swish.po",
"chars": 14927,
"preview": "# \n# Translators:\n# Laszlo Pap <papla960@gmail.com>, 2013\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Swish\\n\"\n\"Report-Msgid"
},
{
"path": "po/it/swish.po",
"chars": 14970,
"preview": "# \n# Translators:\n# Alessandro Calorì <axelgenus@gmail.com>, 2012\n# gbdenaro <gb.denaro@gmail.com>, 2012\n# pizar <pietro"
},
{
"path": "po/ja/swish.po",
"chars": 13314,
"preview": "# \n# Translators:\n# Satoshi Kikuta <kik0220@gmail.com>, 2012\n# Tadashi \"ELF\" Jokagi <elf@poyo.jp>, 2012\n# takaf <m465c3i"
},
{
"path": "po/ko/swish.po",
"chars": 12444,
"preview": "# \n# Translators:\n# swkim85 <swkim85@gmail.com>, 2012-2013\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Swish\\n\"\n\"Report-Msgi"
},
{
"path": "po/lv/swish.po",
"chars": 14867,
"preview": "# \n# Translators:\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Swish\\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2012-0"
},
{
"path": "po/nl/swish.po",
"chars": 15159,
"preview": "# \n# Translators:\n# Jos Lagerweij <transifex@lagerwey.net>, 2012\n# Stefan Suceveanu <ssuceveanu@yahoo.com>, 2013\n# Thijs"
},
{
"path": "po/pl/swish.po",
"chars": 14833,
"preview": "# \n# Translators:\n# Mr Pyo <mrp1990@gmail.com>, 2012\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Swish\\n\"\n\"Report-Msgid-Bugs"
},
{
"path": "po/pt/swish.po",
"chars": 15189,
"preview": "# \n# Translators:\n# Éliton Claus <eliton@eliton.com.br>, 2012\n# jmruas <jmruas@gmail.com>, 2013\nmsgid \"\"\nmsgstr \"\"\n\"Proj"
},
{
"path": "po/pt_BR/swish.po",
"chars": 15070,
"preview": "# \n# Translators:\n# Éliton Claus <eliton@eliton.com.br>, 2012\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Swish\\n\"\n\"Report-M"
},
{
"path": "po/ro/swish.po",
"chars": 15193,
"preview": "# \n# Translators:\n# Stefan Suceveanu <ssuceveanu@yahoo.com>, 2013\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Swish\\n\"\n\"Repo"
},
{
"path": "po/ru/swish.po",
"chars": 14455,
"preview": "# \n# Translators:\n# mPolr <mpolr21@gmail.com>, 2012\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Swish\\n\"\n\"Report-Msgid-Bugs-"
},
{
"path": "po/sk/swish.po",
"chars": 14338,
"preview": "# \n# Translators:\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Swish\\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2012-0"
},
{
"path": "po/sv/swish.po",
"chars": 14710,
"preview": "# \n# Translators:\n# Sopor, 2012\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Swish\\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creatio"
},
{
"path": "po/template/swish.pot",
"chars": 11393,
"preview": "# Alexander Lamaison <awl03@doc.ic.ac.uk>, 2010.\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Swish\\n\"\n\"Report-Msgid-Bugs-To:"
},
{
"path": "po/tr/swish.po",
"chars": 14189,
"preview": "# \n# Translators:\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Swish\\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2012-0"
},
{
"path": "po/zh_CN/swish.po",
"chars": 12766,
"preview": "# \n# Translators:\n# Rob . <rbnwmk@gmail.com>, 2012\n# vibbow <vibbow@hotmail.com>, 2012\n# ZH CEXO <xcjjzh@gmail.com>, 201"
},
{
"path": "po/zh_TW/swish.po",
"chars": 12589,
"preview": "# \n# Translators:\n# Rob . <rbnwmk@gmail.com>, 2012\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Swish\\n\"\n\"Report-Msgid-Bugs-T"
},
{
"path": "setup_conf.xml.in",
"chars": 4939,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configurations lcid_type=\"UserExe\" show_language_selector=\"False\" language_selec"
},
{
"path": "ssh/.clang-format",
"chars": 557,
"preview": "---\nAccessModifierOffset: '-4'\nAllowShortFunctionsOnASingleLine: Empty\nAlwaysBreakTemplateDeclarations: 'true'\nBreakBef"
},
{
"path": "ssh/CMakeLists.txt",
"chars": 1425,
"preview": "# Copyright (C) 2015 Alexander Lamaison <swish@lammy.co.uk>\n#\n# This program is free software: you can redistribute it "
},
{
"path": "ssh/agent.hpp",
"chars": 6090,
"preview": "/**\n @file\n\n Key-agent protocol.\n\n @if license\n\n Copyright (C) 2012, 2013 Alexander Lamaison <awl03@doc.ic."
},
{
"path": "ssh/detail/agent_state.hpp",
"chars": 3996,
"preview": "/**\n @file\n\n RAII lifetime management of libssh2 agent collections.\n\n @if license\n\n Copyright (C) 2013 Alex"
},
{
"path": "ssh/detail/file_handle_state.hpp",
"chars": 4167,
"preview": "/**\n @file\n\n RAII lifetime management of libssh2 file handles.\n\n @if license\n\n Copyright (C) 2013 Alexander"
},
{
"path": "ssh/detail/libssh2/agent.hpp",
"chars": 6503,
"preview": "/**\n @file\n\n Exception wrapper round raw libssh2 agent functions.\n\n @if license\n\n Copyright (C) 2013 Alexan"
},
{
"path": "ssh/detail/libssh2/knownhost.hpp",
"chars": 9687,
"preview": "/**\n @file\n\n Exception wrapper round raw libssh2 knownhost functions.\n\n @if license\n\n Copyright (C) 2013 Al"
},
{
"path": "ssh/detail/libssh2/libssh2.hpp",
"chars": 4126,
"preview": "/**\n @file\n\n ssh::detail::libssh2 namespace documentation.\n\n @if license\n\n Copyright (C) 2013 Alexander Lam"
},
{
"path": "ssh/detail/libssh2/session.hpp",
"chars": 3926,
"preview": "/**\n @file\n\n Exception wrapper round raw libssh2 session functions.\n\n @if license\n\n Copyright (C) 2013 Alex"
},
{
"path": "ssh/detail/libssh2/sftp.hpp",
"chars": 17484,
"preview": "/**\n @file\n\n Error-reporting wrapper round raw libssh2 SFTP functions.\n\n @if license\n\n Copyright (C) 2013 A"
},
{
"path": "ssh/detail/libssh2/userauth.hpp",
"chars": 7189,
"preview": "/**\n @file\n\n Exception wrapper round raw libssh2 userauth functions.\n\n @if license\n\n Copyright (C) 2013 Ale"
},
{
"path": "ssh/detail/session_state.hpp",
"chars": 5015,
"preview": "/**\n @file\n\n RAII lifetime management of libssh2 sessions.\n\n @if license\n\n Copyright (C) 2013 Alexander Lam"
},
{
"path": "ssh/detail/sftp_channel_state.hpp",
"chars": 3515,
"preview": "/**\n @file\n\n RAII lifetime management of libssh2 SFTP channels.\n\n @if license\n\n Copyright (C) 2013 Alexande"
},
{
"path": "ssh/filesystem/path.hpp",
"chars": 20367,
"preview": "// Copyright 2015, 2016 Alexander Lamaison\n\n// This program is free software: you can redistribute it and/or modify\n// i"
},
{
"path": "ssh/filesystem.hpp",
"chars": 45100,
"preview": "// Copyright 2010, 2012, 2013, 2015, 2016 Alexander Lamaison\n\n// This program is free software: you can redistribute it "
},
{
"path": "ssh/host_key.hpp",
"chars": 8313,
"preview": "/**\n @file\n\n Host-key wrapper.\n\n @if license\n\n Copyright (C) 2010, 2013 Alexander Lamaison <awl03@doc.ic.ac"
},
{
"path": "ssh/knownhost.hpp",
"chars": 24679,
"preview": "/**\n @file\n\n Interface to known-host mechanism.\n\n @if license\n\n Copyright (C) 2010, 2013 Alexander Lamaison"
},
{
"path": "ssh/session.hpp",
"chars": 25158,
"preview": "/**\n @file\n\n SSH session object.\n\n @if license\n\n Copyright (C) 2010, 2012, 2013 Alexander Lamaison <awl03@d"
},
{
"path": "ssh/sftp_error.hpp",
"chars": 6758,
"preview": "/**\n @file\n\n SFTP error reporting.\n\n @if license\n\n Copyright (C) 2013 Alexander Lamaison <awl03@doc.ic.ac.u"
},
{
"path": "ssh/ssh_error.hpp",
"chars": 9581,
"preview": "/**\n @file\n\n SSH error reporting.\n\n @if license\n\n Copyright (C) 2010, 2013 Alexander Lamaison <awl03@doc.ic"
},
{
"path": "ssh/stream.hpp",
"chars": 22343,
"preview": "/**\n @file\n\n SSH SFTP file streams.\n\n @if license\n\n Copyright (C) 2013, 2015 Alexander Lamaison <awl03@doc."
},
{
"path": "swish/CMakeLists.txt",
"chars": 1110,
"preview": "# Copyright (C) 2015 Alexander Lamaison <swish@lammy.co.uk>\n#\n# This program is free software; you can redistribute it "
},
{
"path": "swish/CoFactory.hpp",
"chars": 2368,
"preview": "/**\n @file\n\n Mixin class which gives CComObjects a creator of AddReffed instances.\n\n @if license\n\n Copyright"
},
{
"path": "swish/atl.hpp",
"chars": 2863,
"preview": "/**\n @file\n\n Set up ATL support.\n\n @if license\n\n Copyright (C) 2009, 2010, 2012 Alexander Lamaison <awl03@d"
},
{
"path": "swish/connection/CMakeLists.txt",
"chars": 1204,
"preview": "# Copyright (C) 2015 Alexander Lamaison <swish@lammy.co.uk>\n#\n# This program is free software: you can redistribute it "
},
{
"path": "swish/connection/authenticated_session.cpp",
"chars": 16862,
"preview": "/**\n @file\n\n SSH session authentication.\n\n @if license\n\n Copyright (C) 2013 Alexander Lamaison <awl03@doc.i"
},
{
"path": "swish/connection/authenticated_session.hpp",
"chars": 4592,
"preview": "/**\n @file\n\n SSH session authentication.\n\n @if license\n\n Copyright (C) 2013 Alexander Lamaison <awl03@doc.i"
},
{
"path": "swish/connection/connection.vcproj",
"chars": 6183,
"preview": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"8.00\"\n\tName=\"conn"
},
{
"path": "swish/connection/connection_spec.cpp",
"chars": 2108,
"preview": "/**\n @file\n\n Specify a connection.\n\n @if license\n\n Copyright (C) 2013 Alexander Lamaison <awl03@doc.ic.ac.u"
},
{
"path": "swish/connection/connection_spec.hpp",
"chars": 3060,
"preview": "/**\n @file\n\n Specify a connection.\n\n @if license\n\n Copyright (C) 2013 Alexander Lamaison <awl03@doc.ic.ac.u"
},
{
"path": "swish/connection/interruptable_session.hpp",
"chars": 2220,
"preview": "/**\n @file\n\n A session that can die mid-way through an operation.\n\n @if license\n\n Copyright (C) 2013 Alexan"
},
{
"path": "swish/connection/running_session.cpp",
"chars": 4677,
"preview": "// Copyright 2008, 2009, 2010, 2011, 2013, 2016 Alexander Lamaison\n\n// This program is free software: you can redistribu"
},
{
"path": "swish/connection/running_session.hpp",
"chars": 3691,
"preview": "/**\n @file\n\n C++ wrapper round Libssh2 SSH and SFTP session creation.\n\n @if license\n\n Copyright (C) 2008, 20"
},
{
"path": "swish/connection/session_manager.cpp",
"chars": 11917,
"preview": "/**\n @file\n\n Reservation system for sessions.\n\n @if license\n\n Copyright (C) 2013 Alexander Lamaison <awl03@"
},
{
"path": "swish/connection/session_manager.hpp",
"chars": 4740,
"preview": "/**\n @file\n\n Reservation system for sessions.\n\n @if license\n\n Copyright (C) 2013 Alexander Lamaison <awl03@"
},
{
"path": "swish/connection/session_pool.cpp",
"chars": 4413,
"preview": "/**\n @file\n\n Pool of reusuable SFTP connections.\n\n @if license\n\n Copyright (C) 2007, 2008, 2009, 2010, 2011,"
},
{
"path": "swish/connection/session_pool.hpp",
"chars": 2567,
"preview": "/**\n @file\n\n Pool of reusable SFTP connections.\n\n @if license\n\n Copyright (C) 2007, 2008, 2009, 2010, 2011, "
},
{
"path": "swish/debug.hpp",
"chars": 3110,
"preview": "/**\n @file\n\n Debug macros.\n\n @if license\n\n Copyright (C) 2009 Alexander Lamaison <awl03@doc.ic.ac.uk>\n\n "
},
{
"path": "swish/drop_target/CMakeLists.txt",
"chars": 1335,
"preview": "# Copyright (C) 2015 Alexander Lamaison <swish@lammy.co.uk>\n#\n# This program is free software: you can redistribute it "
},
{
"path": "swish/drop_target/CopyFileOperation.cpp",
"chars": 9023,
"preview": "/**\n @file\n\n File copy operation.\n\n @if license\n\n Copyright (C) 2012, 2013 Alexander Lamaison <awl03@doc.ic"
},
{
"path": "swish/drop_target/CopyFileOperation.hpp",
"chars": 1815,
"preview": "/**\n @file\n\n File copy operation.\n\n @if license\n\n Copyright (C) 2012, 2013 Alexander Lamaison <awl03@doc.ic"
},
{
"path": "swish/drop_target/CreateDirectoryOperation.cpp",
"chars": 2839,
"preview": "/**\n @file\n\n Directory creation operation.\n\n @if license\n\n Copyright (C) 2012, 2013 Alexander Lamaison <awl"
},
{
"path": "swish/drop_target/CreateDirectoryOperation.hpp",
"chars": 1780,
"preview": "/**\n @file\n\n Directory creation operation.\n\n @if license\n\n Copyright (C) 2012, 2013 Alexander Lamaison <awl"
},
{
"path": "swish/drop_target/DropActionCallback.hpp",
"chars": 1458,
"preview": "/**\n @file\n\n User interaction during a drop.\n\n @if license\n\n Copyright (C) 2012, 2013 Alexander Lamaison <a"
},
{
"path": "swish/drop_target/DropTarget.cpp",
"chars": 8982,
"preview": "/**\n @file\n\n Expose the remote filesystem as an IDropTarget.\n\n @if license\n\n Copyright (C) 2009, 2010, 2012,"
},
{
"path": "swish/drop_target/DropTarget.hpp",
"chars": 3136,
"preview": "/**\n @file\n\n Expose the remote filesystem as an IDropTarget.\n\n @if license\n\n Copyright (C) 2009, 2010, 2011,"
},
{
"path": "swish/drop_target/DropUI.cpp",
"chars": 9711,
"preview": "/**\n @file\n\n User-interaction for DropTarget.\n\n @if license\n\n Copyright (C) 2010, 2012, 2013 Alexander Lama"
},
{
"path": "swish/drop_target/DropUI.hpp",
"chars": 1813,
"preview": "/**\n @file\n\n User-interaction for DropTarget.\n\n @if license\n\n Copyright (C) 2010, 2012, 2013 Alexander Lama"
},
{
"path": "swish/drop_target/Operation.hpp",
"chars": 2981,
"preview": "/**\n @file\n\n Interface to drop target operations.\n\n @if license\n\n Copyright (C) 2012, 2013 Alexander Lamais"
},
{
"path": "swish/drop_target/PidlCopyPlan.cpp",
"chars": 5875,
"preview": "/**\n @file\n\n Plan copying items in PIDL clipboard format to remote server.\n\n @if license\n\n Copyright (C) 201"
},
{
"path": "swish/drop_target/PidlCopyPlan.hpp",
"chars": 1878,
"preview": "/**\n @file\n\n Plan copying items in PIDL clipboard format to remote server.\n\n @if license\n\n Copyright (C) 201"
},
{
"path": "swish/drop_target/Plan.hpp",
"chars": 1450,
"preview": "/**\n @file\n\n Executable schedule of operations.\n\n @if license\n\n Copyright (C) 2012 Alexander Lamaison <awl0"
},
{
"path": "swish/drop_target/Progress.hpp",
"chars": 1428,
"preview": "/**\n @file\n\n Progress callback.\n\n @if license\n\n Copyright (C) 2012, 2013 Alexander Lamaison <awl03@doc.ic.a"
},
{
"path": "swish/drop_target/RootedSource.hpp",
"chars": 3418,
"preview": "/**\n @file\n\n Source PIDL with common root.\n\n @if license\n\n Copyright (C) 2012 Alexander Lamaison <awl03@doc"
},
{
"path": "swish/drop_target/SequentialPlan.cpp",
"chars": 6772,
"preview": "/**\n @file\n\n Standard drop operation plan implementation.\n\n @if license\n\n Copyright (C) 2012, 2013 Alexande"
},
{
"path": "swish/drop_target/SequentialPlan.hpp",
"chars": 1729,
"preview": "/**\n @file\n\n Standard drop operation plan implementation.\n\n @if license\n\n Copyright (C) 2012, 2013 Alexande"
},
{
"path": "swish/drop_target/SftpDestination.hpp",
"chars": 4358,
"preview": "/**\n @file\n\n Abstraction of SFTP drop destination.\n\n @if license\n\n Copyright (C) 2012 Alexander Lamaison <a"
},
{
"path": "swish/forms/CMakeLists.txt",
"chars": 952,
"preview": "# Copyright (C) 2015 Alexander Lamaison <swish@lammy.co.uk>\n#\n# This program is free software: you can redistribute it "
},
{
"path": "swish/forms/add_host.cpp",
"chars": 13754,
"preview": "/**\n @file\n\n New host dialogue.\n\n @if license\n\n Copyright (C) 2010, 2011, 2013 Alexander Lamaison <awl03@do"
},
{
"path": "swish/forms/add_host.hpp",
"chars": 1230,
"preview": "/**\n @file\n\n New host dialogue.\n\n @if license\n\n Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.ac.uk>\n"
},
{
"path": "swish/forms/password.cpp",
"chars": 2804,
"preview": "/**\n @file\n\n Form class for login password prompt.\n\n @if license\n\n Copyright (C) 2010, 2011 Alexander Lamai"
},
{
"path": "swish/forms/password.hpp",
"chars": 1180,
"preview": "/**\n @file\n\n Login password prompt.\n\n @if license\n\n Copyright (C) 2010, 2011 Alexander Lamaison <awl03@doc."
},
{
"path": "swish/frontend/CMakeLists.txt",
"chars": 1366,
"preview": "# Copyright (C) 2015 Alexander Lamaison <swish@lammy.co.uk>\n#\n# This program is free software: you can redistribute it "
},
{
"path": "swish/frontend/UserInteraction.cpp",
"chars": 8968,
"preview": "/**\n @file\n\n Component to handle user-interaction between the user and an SftpProvider.\n\n @if license\n\n Copy"
},
{
"path": "swish/frontend/UserInteraction.hpp",
"chars": 2339,
"preview": "/**\n @file\n\n Component to handle user-interaction between the user and an SftpProvider.\n\n @if license\n\n Copy"
},
{
"path": "swish/frontend/announce_error.cpp",
"chars": 6478,
"preview": "/**\n @file\n\n Reporting exceptions to the user.\n\n @if license\n\n Copyright (C) 2010, 2011, 2013 Alexander Lam"
},
{
"path": "swish/frontend/announce_error.hpp",
"chars": 1398,
"preview": "/**\n @file\n\n Reporting exceptions to the user.\n\n @if license\n\n Copyright (C) 2010, 2011, 2013 Alexander Lam"
},
{
"path": "swish/frontend/bind_best_taskdialog.cpp",
"chars": 1572,
"preview": "/**\n @file\n\n TaskDialogIndirect implementation selector.\n\n @if license\n\n Copyright (C) 2011 Alexander Lamai"
},
{
"path": "swish/frontend/bind_best_taskdialog.hpp",
"chars": 1405,
"preview": "/**\n @file\n\n TaskDialogIndirect implementation selector.\n\n @if license\n\n Copyright (C) 2011 Alexander Lamai"
},
{
"path": "swish/frontend/commands/About.cpp",
"chars": 3854,
"preview": "/* Copyright (C) 2013, 2015 Alexander Lamaison <swish@lammy.co.uk>\n\n This program is free software: you can redistrib"
},
{
"path": "swish/frontend/commands/About.hpp",
"chars": 1325,
"preview": "/* Copyright (C) 2013, 2015 Alexander Lamaison <swish@lammy.co.uk>\n\n This program is free software: you can redistrib"
},
{
"path": "swish/frontend/winsparkle_shower.cpp",
"chars": 1832,
"preview": "/**\n @file\n\n Manage WinSparkle initialisation and cleanup.\n\n @if license\n\n Copyright (C) 2011 Alexander Lam"
},
{
"path": "swish/frontend/winsparkle_shower.hpp",
"chars": 1429,
"preview": "/**\n @file\n\n Manage WinSparkle initialisation and cleanup.\n\n @if license\n\n Copyright (C) 2011 Alexander Lam"
},
{
"path": "swish/host_folder/CMakeLists.txt",
"chars": 1728,
"preview": "# Copyright (C) 2015 Alexander Lamaison <swish@lammy.co.uk>\n#\n# This program is free software: you can redistribute it "
},
{
"path": "swish/host_folder/ViewCallback.cpp",
"chars": 8031,
"preview": "/* Handler for host folder's interaction with Explorer Shell Folder View.\n\n Copyright (C) 2008, 2009, 2010, 2011, 20"
},
{
"path": "swish/host_folder/ViewCallback.hpp",
"chars": 2864,
"preview": "/* Handler for host folder's interaction with Explorer Shell Folder View.\n\n Copyright (C) 2008, 2009, 2010, 2011, 20"
},
{
"path": "swish/host_folder/columns.cpp",
"chars": 2738,
"preview": "/**\n @file\n\n Host folder detail columns.\n\n @if license\n\n Copyright (C) 2010 Alexander Lamaison <awl03@doc.i"
},
{
"path": "swish/host_folder/columns.hpp",
"chars": 2961,
"preview": "/**\n @file\n\n Host folder detail columns.\n\n @if license\n\n Copyright (C) 2010 Alexander Lamaison <awl03@doc.i"
},
{
"path": "swish/host_folder/commands/Add.cpp",
"chars": 3331,
"preview": "/* Copyright (C) 2010, 2011, 2012, 2013, 2015\n Alexander Lamaison <swish@lammy.co.uk>\n\n This program is free softwar"
},
{
"path": "swish/host_folder/commands/Add.hpp",
"chars": 1499,
"preview": "/* Copyright (C) 2010, 2011, 2012, 2013, 2015\n Alexander Lamaison <swish@lammy.co.uk>\n\n This program is free softwar"
},
{
"path": "swish/host_folder/commands/CloseSession.cpp",
"chars": 11921,
"preview": "/* Copyright (C) 2013, 2014, 2015\n Alexander Lamaison <swish@lammy.co.uk>\n\n This program is free software: you can r"
},
{
"path": "swish/host_folder/commands/CloseSession.hpp",
"chars": 1382,
"preview": "/* Copyright (C) 2013, 2015\n Alexander Lamaison <swish@lammy.co.uk>\n\n This program is free software: you can redistr"
},
{
"path": "swish/host_folder/commands/LaunchAgent.cpp",
"chars": 4166,
"preview": "/* Copyright (C) 2012, 2013, 2015\n Alexander Lamaison <swish@lammy.co.uk>\n\n This program is free software: you can r"
},
{
"path": "swish/host_folder/commands/LaunchAgent.hpp",
"chars": 1534,
"preview": "/* Copyright (C) 2012, 2013, 2015\n Alexander Lamaison <swish@lammy.co.uk>\n\n This program is free software: you can r"
},
{
"path": "swish/host_folder/commands/Remove.cpp",
"chars": 4013,
"preview": "/* Copyright (C) 2010, 2011, 2012, 2013, 2015\n Alexander Lamaison <swish@lammy.co.uk>\n\n This program is free softwar"
},
{
"path": "swish/host_folder/commands/Remove.hpp",
"chars": 1524,
"preview": "/* Copyright (C) 2010, 2011, 2012, 2013, 2015\n Alexander Lamaison <swish@lammy.co.uk>\n\n This program is free softwar"
},
{
"path": "swish/host_folder/commands/Rename.cpp",
"chars": 3366,
"preview": "/* Copyright (C) 2015 Alexander Lamaison <swish@lammy.co.uk>\n\n This program is free software: you can redistribute it"
},
{
"path": "swish/host_folder/commands/Rename.hpp",
"chars": 1336,
"preview": "/* Copyright (C) 2015 Alexander Lamaison <swish@lammy.co.uk>\n\n This program is free software: you can redistribute it"
},
{
"path": "swish/host_folder/commands/commands.cpp",
"chars": 4340,
"preview": "/* Copyright (C) 2010, 2011, 2012, 2015\n Alexander Lamaison <swish@lammy.co.uk>\n\n This program is free software: you"
},
{
"path": "swish/host_folder/commands/commands.hpp",
"chars": 1576,
"preview": "/* Copyright (C) 2010, 2011, 2012, 2015\n Alexander Lamaison <swish@lammy.co.uk>\n\n This program is free software: you"
},
{
"path": "swish/host_folder/context_menu_callback.cpp",
"chars": 3437,
"preview": "/* Copyright (C) 2015 Alexander Lamaison <swish@lammy.co.uk>\n\n This program is free software: you can redistribute it"
},
{
"path": "swish/host_folder/context_menu_callback.hpp",
"chars": 1975,
"preview": "/* HostFolder context menu implementation.\n\n Copyright (C) 2015 Alexander Lamaison <swish@lammy.co.uk>\n\n This progr"
},
{
"path": "swish/host_folder/extract_icon.hpp",
"chars": 2605,
"preview": "/**\n @file\n\n Host folder icons.\n\n @if license\n\n Copyright (C) 2013 Alexander Lamaison <awl03@doc.ic.ac.uk>\n"
},
{
"path": "swish/host_folder/host_itemid_connection.cpp",
"chars": 1402,
"preview": "/**\n @file\n\n Relates host item IDs to SFTP connections.\n\n @if license\n\n Copyright (C) 2013 Alexander Lamais"
},
{
"path": "swish/host_folder/host_itemid_connection.hpp",
"chars": 1418,
"preview": "/**\n @file\n\n Relates host item IDs to SFTP connections.\n\n @if license\n\n Copyright (C) 2013 Alexander Lamais"
},
{
"path": "swish/host_folder/host_management.cpp",
"chars": 7256,
"preview": "/**\n @file\n\n Management functions for host entries saved in the registry.\n\n @if license\n\n Copyright (C) 2009"
},
{
"path": "swish/host_folder/host_management.hpp",
"chars": 1785,
"preview": "/**\n @file\n\n Management functions for host entries saved in the registry.\n\n @if license\n\n Copyright (C) 2009"
},
{
"path": "swish/host_folder/host_pidl.hpp",
"chars": 8396,
"preview": "/**\n @file\n\n PIDL access particular to host folder PIDLs.\n\n @if license\n\n Copyright (C) 2011, 2012 Alexande"
},
{
"path": "swish/host_folder/menu_command_manager.cpp",
"chars": 13315,
"preview": "/* Manage complexities of adding and removing menu items in host window.\n\n Copyright (C) 2013, 2015 Alexander Lamaiso"
},
{
"path": "swish/host_folder/menu_command_manager.hpp",
"chars": 2832,
"preview": "/* Manage complexities of adding and removing menu items in host window.\n\n Copyright (C) 2013, 2015 Alexander Lamaiso"
},
{
"path": "swish/host_folder/overlay_icon.hpp",
"chars": 1884,
"preview": "/**\n @file\n\n Host folder overlay icons.\n\n @if license\n\n Copyright (C) 2013 Alexander Lamaison <awl03@doc.ic"
},
{
"path": "swish/host_folder/properties.cpp",
"chars": 4644,
"preview": "/**\n @file\n\n Host folder property columns.\n\n @if license\n\n Copyright (C) 2010 Alexander Lamaison <awl03@doc"
},
{
"path": "swish/host_folder/properties.hpp",
"chars": 2016,
"preview": "/**\n @file\n\n Properties available for items in a host folder.\n\n @if license\n\n Copyright (C) 2010 Alexander "
},
{
"path": "swish/nse/CMakeLists.txt",
"chars": 1351,
"preview": "# Copyright (C) 2015 Alexander Lamaison <swish@lammy.co.uk>\n#\n# This program is free software: you can redistribute it "
},
{
"path": "swish/nse/Command.cpp",
"chars": 2113,
"preview": "/**\n @file\n\n Swish host folder commands.\n\n @if license\n\n Copyright (C) 2010, 2011 Alexander Lamaison <awl03"
},
{
"path": "swish/nse/Command.hpp",
"chars": 5391,
"preview": "/* Copyright (C) 2010, 2011, 2013, 2015\n Alexander Lamaison <swish@lammy.co.uk>\n\n This program is free software: you"
},
{
"path": "swish/nse/StaticColumn.hpp",
"chars": 2886,
"preview": "/**\n @file\n\n NSE folder columns.\n\n @if license\n\n Copyright (C) 2010 Alexander Lamaison <awl03@doc.ic.ac.uk>"
},
{
"path": "swish/nse/UICommand.cpp",
"chars": 995,
"preview": "/**\n @file\n\n Undocumented Windows XP task pane interfaces.\n\n @if license\n\n Copyright (C) 2010 Alexander Lam"
},
{
"path": "swish/nse/UICommand.hpp",
"chars": 4187,
"preview": "/**\n @file\n\n Undocumented Windows XP task pane interfaces.\n\n @if license\n\n Copyright (C) 2010 Alexander Lam"
},
{
"path": "swish/nse/command_site.cpp",
"chars": 2084,
"preview": "/* Copyright (C) 2015 Alexander Lamaison <swish@lammy.co.uk>\n\n This program is free software: you can redistribute it"
},
{
"path": "swish/nse/command_site.hpp",
"chars": 3516,
"preview": "/* Copyright (C) 2015 Alexander Lamaison <swish@lammy.co.uk>\n\n This program is free software: you can redistribute it"
},
{
"path": "swish/nse/data_object_util.cpp",
"chars": 1599,
"preview": "/**\n @file\n\n Utility functions to work with DataObjects.\n\n @if license\n\n Copyright (C) 2010 Alexander Lamai"
},
{
"path": "swish/nse/data_object_util.hpp",
"chars": 1746,
"preview": "/**\n @file\n\n Utility functions to work with DataObjects.\n\n @if license\n\n Copyright (C) 2010 Alexander Lamai"
},
{
"path": "swish/nse/default_context_menu_callback.cpp",
"chars": 7180,
"preview": "/**\n @file\n\n Handler for Explorer Default Context Menu messages.\n\n @if license\n\n Copyright (C) 2011 Alexand"
},
{
"path": "swish/nse/default_context_menu_callback.hpp",
"chars": 5987,
"preview": "/**\n @file\n\n Handler for Explorer Default Context Menu messages.\n\n @if license\n\n Copyright (C) 2011 Alexand"
},
{
"path": "swish/nse/detail/command_state_conversion.hpp",
"chars": 1848,
"preview": "/**\n @file\n\n Conversion between command state representations.\n\n @if license\n\n Copyright (C) 2013 Alexander"
},
{
"path": "swish/nse/explorer_command.cpp",
"chars": 7909,
"preview": "/**\n @file\n\n Explorer tool-bar command button implementation classes.\n\n @if license\n\n Copyright (C) 2010, 20"
},
{
"path": "swish/nse/explorer_command.hpp",
"chars": 9323,
"preview": "/* Explorer tool-bar command button implementation classes.\n\n Copyright (C) 2010, 2011, 2013, 2015\n Alexander Lamais"
},
{
"path": "swish/nse/task_pane.hpp",
"chars": 12205,
"preview": "/* Windows XP web view task pane expandos.\n\n Copyright (C) 2010, 2013, 2015 Alexander Lamaison <swish@lammy.co.uk>\n\n "
},
{
"path": "swish/nse/view_callback.cpp",
"chars": 5490,
"preview": "/**\n @file\n\n Explorer shell view windows callback handler.\n\n @if license\n\n Copyright (C) 2011 Alexander Lam"
},
{
"path": "swish/nse/view_callback.hpp",
"chars": 6868,
"preview": "/**\n @file\n\n Explorer shell view windows callback handler.\n\n @if license\n\n Copyright (C) 2011 Alexander Lam"
},
{
"path": "swish/port_conversion.hpp",
"chars": 2295,
"preview": "/**\n @file\n\n Convert between port numbers and canonical strings.\n\n @if license\n\n Copyright (C) 2011 Alexand"
},
{
"path": "swish/provider/CMakeLists.txt",
"chars": 1156,
"preview": "# Copyright (C) 2015 Alexander Lamaison <swish@lammy.co.uk>\n#\n# This program is free software: you can redistribute it "
},
{
"path": "swish/provider/Provider.cpp",
"chars": 16760,
"preview": "// Copyright 2008, 2009, 2010, 2011, 2012, 2013, 2016 Alexander Lamaison\n\n// This program is free software: you can redi"
},
{
"path": "swish/provider/Provider.hpp",
"chars": 2839,
"preview": "/**\n @file\n\n libssh2-based SFTP provider component.\n\n @if license\n\n Copyright (C) 2008, 2009, 2010, 2012, 20"
},
{
"path": "swish/provider/libssh2_sftp_filesystem_item.cpp",
"chars": 8186,
"preview": "/**\n @file\n\n SFTP filesystem item using libssh2 backend.\n\n @if license\n\n Copyright (C) 2012, 2015 Alexander"
},
{
"path": "swish/provider/libssh2_sftp_filesystem_item.hpp",
"chars": 3862,
"preview": "/**\n @file\n\n SFTP filesystem item using libssh2 backend.\n\n @if license\n\n Copyright (C) 2012 Alexander Lamai"
},
{
"path": "swish/provider/sftp_filesystem_item.hpp",
"chars": 5136,
"preview": "/**\n @file\n\n SFTP backend filesystem item interface.\n\n @if license\n\n Copyright (C) 2012 Alexander Lamaison "
},
{
"path": "swish/provider/sftp_provider.hpp",
"chars": 4486,
"preview": "/**\n @file\n\n SFTP backend interfaces.\n\n @if license\n\n Copyright (C) 2010, 2011, 2012, 2013\n Alexander Lam"
}
]
// ... and 260 more files (download for full content)
About this extraction
This page contains the full source code of the alamaison/swish GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 460 files (2.6 MB), approximately 692.3k tokens, and a symbol index with 3356 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.