void ShellExt::buildSubMenu(const seafile::RepoInfo& repo, const std::string& path_in_repo) { insertSubMenuItem(SEAFILE_TR("get seafile download link"), GetShareLink); insertSubMenuItem(SEAFILE_TR("get seafile internal link"), GetInternalLink); std::unique_ptr<wchar_t[]> path_w(utils::utf8ToWString(path_)); bool is_dir = GetFileAttributesW(path_w.get()) & FILE_ATTRIBUTE_DIRECTORY; if (repo.support_private_share && is_dir) { insertSubMenuItem(SEAFILE_TR("share to a user"), ShareToUser); insertSubMenuItem(SEAFILE_TR("share to a group"), ShareToGroup); } if (repo.support_file_lock && !is_dir) { seafile::RepoInfo::Status status = getRepoFileStatus(repo.repo_id, path_in_repo, false); if (status == seafile::RepoInfo::LockedByMe) { insertSubMenuItem(SEAFILE_TR("unlock this file"), UnlockFile); } else if (status != seafile::RepoInfo::LockedByOthers) { insertSubMenuItem(SEAFILE_TR("lock this file"), LockFile); } } if (!is_dir) { insertSubMenuItem(SEAFILE_TR("view file history"), ShowHistory); } }
HRESULT csMenu::QueryContextMenu(HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT /*idCmdLast*/, UINT uFlags) { if( uFlags & CMF_DEFAULTONLY ) { return MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, 0); } UINT uPos = 0; UINT uCmdID = idCmdFirst; const DWORD flags = regReadFlags(); const csWString parallel = regReadParallel(); const DWORD parallelCount = regReadParallelCount(); const bool hasParallel = !parallel.empty() && parallelCount > 1; HMENU submenu = CreatePopupMenu(); insertMenuItem(submenu, uPos++, uCmdID++, L"List", !_files.empty()); insertMenuItem(submenu, uPos++, uCmdID++, L"List (path)", !_files.empty()); insertMenuItem(submenu, uPos++, uCmdID++, L"List (path, tabular)", !_files.empty()); insertSeparatorMenuItem(submenu, uPos++); insertMenuItem(submenu, uPos++, uCmdID++, L"Create symbolic link...", _files.size() == 1); insertSeparatorMenuItem(submenu, uPos++); insertCheckableMenuItem(submenu, uPos++, uCmdID++, L"Batch processing", testFlags(flags, CMD_FLAG_BATCH)); insertCheckableMenuItem(submenu, uPos++, uCmdID++, L"Parallel execution", testFlags(flags, CMD_FLAG_PARALLEL), hasParallel); insertCheckableMenuItem(submenu, uPos++, uCmdID++, L"Resolve UNC paths", testFlags(flags, CMD_FLAG_UNC)); insertCheckableMenuItem(submenu, uPos++, uCmdID++, L"UN*X path separators", testFlags(flags, CMD_FLAG_UNIX)); insertSubMenuItem(hmenu, submenu, indexMenu, uCmdID++, L"CS::Menu", _menuBitmap); const csWStringList scripts = regReadScripts(); if( !scripts.empty() && !_files.empty() ) { insertSeparatorMenuItem(submenu, uPos++); for(csWStringList::const_iterator it = scripts.begin(); it != scripts.end(); it++) { insertMenuItem(submenu, uPos++, uCmdID++, it->c_str()); } } return MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, uCmdID-idCmdFirst); }