コード例 #1
0
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);
    }
}
コード例 #2
0
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);
}