void COptionsPageEdit::OnBrowseEditor(wxCommandEvent& event) { wxFileDialog dlg(this, _("Select default editor"), _T(""), _T(""), #ifdef __WXMSW__ _T("Executable file (*.exe)|*.exe"), #elif __WXMAC__ _T("Applications (*.app)|*.app"), #else wxFileSelectorDefaultWildcardStr, #endif wxFD_OPEN | wxFD_FILE_MUST_EXIST); if (dlg.ShowModal() != wxID_OK) return; wxString editor = dlg.GetPath(); if (editor == _T("")) return; if (!ProgramExists(editor)) { XRCCTRL(*this, "ID_EDITOR", wxWindow)->SetFocus(); wxMessageBox(_("Selected editor does not exist."), _("File not found"), wxICON_EXCLAMATION, this); return; } if (editor.Find(' ') != -1) editor = _T("\"") + editor + _T("\""); bool tmp; SetText(XRCID("ID_EDITOR"), editor, tmp); }
/* * Find a command in a directory, returning the path. */ static char * Resolve(char *indir, char *cmd) { char name[PATH_MAX + 2], *real; if ((JLI_StrLen(indir) + JLI_StrLen(cmd) + 1) > PATH_MAX) return 0; JLI_Snprintf(name, sizeof(name), "%s%c%s", indir, FILE_SEPARATOR, cmd); if (!ProgramExists(name)) return 0; real = JLI_MemAlloc(PATH_MAX + 2); if (!realpath(name, real)) JLI_StrCpy(real, name); return real; }
/* * Find a command in a directory, returning the path. */ static char * Resolve(char *indir, char *cmd) { char name[PATH_MAX + 2], *real; if ((strlen(indir) + strlen(cmd) + 1) > PATH_MAX) return 0; sprintf(name, "%s%c%s", indir, FILE_SEPARATOR, cmd); if (!ProgramExists(name)) return 0; real = MemAlloc(PATH_MAX + 2); if (!realpath(name, real)) strcpy(real, name); return real; }
bool COptionsPageEdit::Validate() { bool failure = false; const bool custom = GetRCheck(XRCID("ID_DEFAULT_CUSTOM")); wxString editor; if (custom) { editor = GetText(XRCID("ID_EDITOR")); editor.Trim(true); editor.Trim(false); SetText(XRCID("EDITOR"), editor, failure); if (editor != _T("")) { wxString args; if (!UnquoteCommand(editor, args)) return DisplayError(_T("ID_EDITOR"), _("Default editor not properly quoted.")); if (editor == _T("")) return DisplayError(_T("ID_EDITOR"), _("Empty quoted string.")); if (!ProgramExists(editor)) return DisplayError(_T("ID_EDITOR"), _("The file selected as default editor does not exist.")); } } if (GetRCheck(XRCID("ID_USEDEFAULT"))) { if (GetRCheck(XRCID("ID_DEFAULT_NONE")) || (custom && editor.empty())) { return DisplayError(_T("ID_EDITOR"), _("A default editor needs to be set.")); } } return true; }
bool COptionsPageEditAssociations::Validate() { wxString associations = GetText(XRCID("ID_ASSOCIATIONS")) + _T("\n"); associations.Replace(_T("\r"), _T("")); int pos; while ((pos = associations.Find('\n')) != -1) { wxString assoc = associations.Left(pos); associations = associations.Mid(pos + 1); if (assoc == _T("")) continue; wxString command; if (!UnquoteCommand(assoc, command)) return DisplayError(_T("ID_ASSOCIATIONS"), _("Improperly quoted association.")); if (assoc == _T("")) return DisplayError(_T("ID_ASSOCIATIONS"), _("Empty file extension.")); wxString args; if (!UnquoteCommand(command, args)) return DisplayError(_T("ID_ASSOCIATIONS"), _("Improperly quoted association.")); if (command == _T("")) return DisplayError(_T("ID_ASSOCIATIONS"), _("Empty command.")); if (!ProgramExists(command)) { wxString error = _("Associated program not found:"); error += '\n'; error += command; return DisplayError(_T("ID_ASSOCIATIONS"), error); } } return true; }
wxString GetSystemOpenCommand(wxString file, bool &program_exists) { wxFileName fn(file); const wxString& ext = fn.GetExt(); if (ext == _T("")) return _T(""); for (;;) { wxFileType* pType = wxTheMimeTypesManager->GetFileTypeFromExtension(ext); if (!pType) return _T(""); wxString cmd; if (!pType->GetOpenCommand(&cmd, wxFileType::MessageParameters(file))) { delete pType; return _T(""); } delete pType; if (cmd.empty()) return wxEmptyString; program_exists = false; wxString editor; bool is_dde = false; #ifdef __WXMSW__ if (cmd.Left(7) == _T("WX_DDE#")) { // See wxWidget's wxExecute in src/msw/utilsexc.cpp // WX_DDE#<command>#DDE_SERVER#DDE_TOPIC#DDE_COMMAND editor = cmd.Mid(7); int pos = editor.Find('#'); if (pos < 1) return cmd; editor = editor.Left(pos); is_dde = true; } else #endif { editor = cmd; } wxString args; if (!UnquoteCommand(editor, args, is_dde) || editor.empty()) return cmd; if (!PathExpand(editor)) return cmd; if (ProgramExists(editor)) program_exists = true; #ifdef __WXGTK__ int pos = args.Find(file); if (pos != -1 && file.Find(' ') != -1 && file[0] != '\'' && file[0] != '"') { // Might need to quote filename, wxWidgets doesn't do it if ((!pos || (args[pos - 1] != '\'' && args[pos - 1] != '"')) && args[pos + file.Length()] != '\'' && args[pos + file.Length()] != '"') { // Filename in command arguments isn't quoted. Repeat with quoted filename file = _T("\"") + file + _T("\""); continue; } } #endif return cmd; } return wxEmptyString; }
/* static */ ProgramProfileOGL ProgramProfileOGL::GetProfileFor(gl::ShaderProgramType aType, MaskType aMask) { NS_ASSERTION(ProgramExists(aType, aMask), "Invalid program type."); ProgramProfileOGL result; switch (aType) { case gl::RGBALayerProgramType: if (aMask == Mask3d) { result.mVertexShaderString = sLayerMask3DVS; result.mFragmentShaderString = sRGBATextureLayerMask3DFS; } else if (aMask == Mask2d) { result.mVertexShaderString = sLayerMaskVS; result.mFragmentShaderString = sRGBATextureLayerMaskFS; } else { result.mVertexShaderString = sLayerVS; result.mFragmentShaderString = sRGBATextureLayerFS; } AddCommonArgs(result); AddCommonTextureArgs(result); result.mTextureCount = 1; break; case gl::RGBALayerExternalProgramType: if (aMask == Mask3d) { result.mVertexShaderString = sLayerMask3DVS; result.mFragmentShaderString = sRGBATextureLayerExternalMask3DFS; } else if (aMask == Mask2d) { result.mVertexShaderString = sLayerMaskVS; result.mFragmentShaderString = sRGBATextureLayerExternalMaskFS; } else { result.mVertexShaderString = sLayerVS; result.mFragmentShaderString = sRGBATextureLayerExternalFS; } AddCommonArgs(result); AddCommonTextureArgs(result); result.mUniforms.AppendElement(Argument("uTextureTransform")); result.mHasTextureTransform = true; result.mTextureCount = 1; break; case gl::BGRALayerProgramType: if (aMask == Mask2d) { result.mVertexShaderString = sLayerMaskVS; result.mFragmentShaderString = sBGRATextureLayerMaskFS; } else { result.mVertexShaderString = sLayerVS; result.mFragmentShaderString = sBGRATextureLayerFS; } AddCommonArgs(result); AddCommonTextureArgs(result); result.mTextureCount = 1; break; case gl::RGBXLayerProgramType: if (aMask == Mask2d) { result.mVertexShaderString = sLayerMaskVS; result.mFragmentShaderString = sRGBXTextureLayerMaskFS; } else { result.mVertexShaderString = sLayerVS; result.mFragmentShaderString = sRGBXTextureLayerFS; } AddCommonArgs(result); AddCommonTextureArgs(result); result.mTextureCount = 1; break; case gl::BGRXLayerProgramType: if (aMask == Mask2d) { result.mVertexShaderString = sLayerMaskVS; result.mFragmentShaderString = sBGRXTextureLayerMaskFS; } else { result.mVertexShaderString = sLayerVS; result.mFragmentShaderString = sBGRXTextureLayerFS; } AddCommonArgs(result); AddCommonTextureArgs(result); result.mTextureCount = 1; break; case gl::RGBARectLayerProgramType: if (aMask == Mask3d) { result.mVertexShaderString = sLayerMask3DVS; result.mFragmentShaderString = sRGBARectTextureLayerMask3DFS; } else if (aMask == Mask2d) { result.mVertexShaderString = sLayerMaskVS; result.mFragmentShaderString = sRGBARectTextureLayerMaskFS; } else { result.mVertexShaderString = sLayerVS; result.mFragmentShaderString = sRGBARectTextureLayerFS; } AddCommonArgs(result); AddCommonTextureArgs(result); result.mTextureCount = 1; break; case gl::RGBAExternalLayerProgramType: if (aMask == Mask3d) { result.mVertexShaderString = sLayerMask3DVS; result.mFragmentShaderString = sRGBAExternalTextureLayerMask3DFS; } else if (aMask == Mask2d) { result.mVertexShaderString = sLayerMaskVS; result.mFragmentShaderString = sRGBAExternalTextureLayerMaskFS; } else { result.mVertexShaderString = sLayerVS; result.mFragmentShaderString = sRGBAExternalTextureLayerFS; } AddCommonArgs(result); AddCommonTextureArgs(result); result.mTextureCount = 1; break; case gl::ColorLayerProgramType: if (aMask == Mask2d) { result.mVertexShaderString = sLayerMaskVS; result.mFragmentShaderString = sSolidColorLayerMaskFS; } else { result.mVertexShaderString = sLayerVS; result.mFragmentShaderString = sSolidColorLayerFS; } AddCommonArgs(result); result.mUniforms.AppendElement(Argument("uRenderColor")); break; case gl::YCbCrLayerProgramType: if (aMask == Mask2d) { result.mVertexShaderString = sLayerMaskVS; result.mFragmentShaderString = sYCbCrTextureLayerMaskFS; } else { result.mVertexShaderString = sLayerVS; result.mFragmentShaderString = sYCbCrTextureLayerFS; } AddCommonArgs(result); result.mUniforms.AppendElement(Argument("uLayerOpacity")); result.mUniforms.AppendElement(Argument("uYTexture")); result.mUniforms.AppendElement(Argument("uCbTexture")); result.mUniforms.AppendElement(Argument("uCrTexture")); result.mAttributes.AppendElement(Argument("aTexCoord")); result.mTextureCount = 3; break; case gl::ComponentAlphaPass1ProgramType: if (aMask == Mask2d) { result.mVertexShaderString = sLayerMaskVS; result.mFragmentShaderString = sComponentPassMask1FS; } else { result.mVertexShaderString = sLayerVS; result.mFragmentShaderString = sComponentPass1FS; } AddCommonArgs(result); result.mUniforms.AppendElement(Argument("uLayerOpacity")); result.mUniforms.AppendElement(Argument("uBlackTexture")); result.mUniforms.AppendElement(Argument("uWhiteTexture")); result.mAttributes.AppendElement(Argument("aTexCoord")); result.mTextureCount = 2; break; case gl::ComponentAlphaPass2ProgramType: if (aMask == Mask2d) { result.mVertexShaderString = sLayerMaskVS; result.mFragmentShaderString = sComponentPassMask2FS; } else { result.mVertexShaderString = sLayerVS; result.mFragmentShaderString = sComponentPass2FS; } AddCommonArgs(result); result.mUniforms.AppendElement(Argument("uLayerOpacity")); result.mUniforms.AppendElement(Argument("uBlackTexture")); result.mUniforms.AppendElement(Argument("uWhiteTexture")); result.mAttributes.AppendElement(Argument("aTexCoord")); result.mTextureCount = 2; break; case gl::Copy2DProgramType: NS_ASSERTION(!aMask, "Program does not have masked variant."); result.mVertexShaderString = sCopyVS; result.mFragmentShaderString = sCopy2DFS; result.mUniforms.AppendElement(Argument("uTexture")); result.mAttributes.AppendElement(Argument("aVertexCoord")); result.mAttributes.AppendElement(Argument("aTexCoord")); result.mTextureCount = 1; break; case gl::Copy2DRectProgramType: NS_ASSERTION(!aMask, "Program does not have masked variant."); result.mVertexShaderString = sCopyVS; result.mFragmentShaderString = sCopy2DRectFS; result.mUniforms.AppendElement(Argument("uTexture")); result.mAttributes.AppendElement(Argument("aVertexCoord")); result.mAttributes.AppendElement(Argument("aTexCoord")); result.mTextureCount = 1; break; default: NS_NOTREACHED("Unknown shader program type."); } if (aMask > MaskNone) { result.mUniforms.AppendElement(Argument("uMaskTexture")); result.mUniforms.AppendElement(Argument("uMaskQuadTransform")); result.mTextureCount += 1; } return result; }
/* static */ ProgramProfileOGL ProgramProfileOGL::GetProfileFor(ShaderProgramType aType, MaskType aMask) { NS_ASSERTION(ProgramExists(aType, aMask), "Invalid program type."); ProgramProfileOGL result; AddUniforms(result); switch (aType) { case RGBALayerProgramType: if (aMask == Mask3d) { result.mVertexShaderString = sLayerMask3DVS; result.mFragmentShaderString = sRGBATextureLayerMask3DFS; } else if (aMask == Mask2d) { result.mVertexShaderString = sLayerMaskVS; result.mFragmentShaderString = sRGBATextureLayerMaskFS; } else { result.mVertexShaderString = sLayerVS; result.mFragmentShaderString = sRGBATextureLayerFS; } AddCommonArgs(result); AddCommonTextureArgs(result); result.mTextureCount = 1; break; case BGRALayerProgramType: if (aMask == Mask2d) { result.mVertexShaderString = sLayerMaskVS; result.mFragmentShaderString = sBGRATextureLayerMaskFS; } else { result.mVertexShaderString = sLayerVS; result.mFragmentShaderString = sBGRATextureLayerFS; } AddCommonArgs(result); AddCommonTextureArgs(result); result.mTextureCount = 1; break; case RGBXLayerProgramType: if (aMask == Mask2d) { result.mVertexShaderString = sLayerMaskVS; result.mFragmentShaderString = sRGBXTextureLayerMaskFS; } else { result.mVertexShaderString = sLayerVS; result.mFragmentShaderString = sRGBXTextureLayerFS; } AddCommonArgs(result); AddCommonTextureArgs(result); result.mTextureCount = 1; break; case BGRXLayerProgramType: if (aMask == Mask2d) { result.mVertexShaderString = sLayerMaskVS; result.mFragmentShaderString = sBGRXTextureLayerMaskFS; } else { result.mVertexShaderString = sLayerVS; result.mFragmentShaderString = sBGRXTextureLayerFS; } AddCommonArgs(result); AddCommonTextureArgs(result); result.mTextureCount = 1; break; case RGBARectLayerProgramType: if (aMask == Mask3d) { result.mVertexShaderString = sLayerMask3DVS; result.mFragmentShaderString = sRGBARectTextureLayerMask3DFS; } else if (aMask == Mask2d) { result.mVertexShaderString = sLayerMaskVS; result.mFragmentShaderString = sRGBARectTextureLayerMaskFS; } else { result.mVertexShaderString = sLayerVS; result.mFragmentShaderString = sRGBARectTextureLayerFS; } AddCommonArgs(result); AddCommonTextureArgs(result); result.mTextureCount = 1; break; case RGBXRectLayerProgramType: if (aMask == Mask3d) { result.mVertexShaderString = sLayerMask3DVS; result.mFragmentShaderString = sRGBXRectTextureLayerMask3DFS; } else if (aMask == Mask2d) { result.mVertexShaderString = sLayerMaskVS; result.mFragmentShaderString = sRGBXRectTextureLayerMaskFS; } else { result.mVertexShaderString = sLayerVS; result.mFragmentShaderString = sRGBXRectTextureLayerFS; } AddCommonArgs(result); AddCommonTextureArgs(result); result.mTextureCount = 1; break; case BGRARectLayerProgramType: MOZ_ASSERT(aMask == MaskNone, "BGRARectLayerProgramType can't handle masks."); result.mVertexShaderString = sLayerVS; result.mFragmentShaderString = sBGRARectTextureLayerFS; AddCommonArgs(result); AddCommonTextureArgs(result); result.mTextureCount = 1; break; case RGBAExternalLayerProgramType: if (aMask == Mask3d) { result.mVertexShaderString = sLayerMask3DVS; result.mFragmentShaderString = sRGBAExternalTextureLayerMask3DFS; } else if (aMask == Mask2d) { result.mVertexShaderString = sLayerMaskVS; result.mFragmentShaderString = sRGBAExternalTextureLayerMaskFS; } else { result.mVertexShaderString = sLayerVS; result.mFragmentShaderString = sRGBAExternalTextureLayerFS; } AddCommonArgs(result); AddCommonTextureArgs(result); result.mTextureCount = 1; break; case ColorLayerProgramType: if (aMask == Mask2d) { result.mVertexShaderString = sLayerMaskVS; result.mFragmentShaderString = sSolidColorLayerMaskFS; } else { result.mVertexShaderString = sLayerVS; result.mFragmentShaderString = sSolidColorLayerFS; } AddCommonArgs(result); break; case YCbCrLayerProgramType: if (aMask == Mask2d) { result.mVertexShaderString = sLayerMaskVS; result.mFragmentShaderString = sYCbCrTextureLayerMaskFS; } else { result.mVertexShaderString = sLayerVS; result.mFragmentShaderString = sYCbCrTextureLayerFS; } AddCommonArgs(result); result.mAttributes.AppendElement(Argument("aTexCoord")); result.mTextureCount = 3; break; case ComponentAlphaPass1ProgramType: if (aMask == Mask2d) { result.mVertexShaderString = sLayerMaskVS; result.mFragmentShaderString = sComponentPassMask1FS; } else { result.mVertexShaderString = sLayerVS; result.mFragmentShaderString = sComponentPass1FS; } AddCommonArgs(result); result.mAttributes.AppendElement(Argument("aTexCoord")); result.mTextureCount = 2; break; case ComponentAlphaPass1RGBProgramType: if (aMask == Mask2d) { result.mVertexShaderString = sLayerMaskVS; result.mFragmentShaderString = sComponentPassMask1RGBFS; } else { result.mVertexShaderString = sLayerVS; result.mFragmentShaderString = sComponentPass1RGBFS; } AddCommonArgs(result); result.mAttributes.AppendElement(Argument("aTexCoord")); result.mTextureCount = 2; break; case ComponentAlphaPass2ProgramType: if (aMask == Mask2d) { result.mVertexShaderString = sLayerMaskVS; result.mFragmentShaderString = sComponentPassMask2FS; } else { result.mVertexShaderString = sLayerVS; result.mFragmentShaderString = sComponentPass2FS; } AddCommonArgs(result); result.mAttributes.AppendElement(Argument("aTexCoord")); result.mTextureCount = 2; break; case ComponentAlphaPass2RGBProgramType: if (aMask == Mask2d) { result.mVertexShaderString = sLayerMaskVS; result.mFragmentShaderString = sComponentPassMask2RGBFS; } else { result.mVertexShaderString = sLayerVS; result.mFragmentShaderString = sComponentPass2RGBFS; } AddCommonArgs(result); result.mAttributes.AppendElement(Argument("aTexCoord")); result.mTextureCount = 2; break; case Copy2DProgramType: NS_ASSERTION(!aMask, "Program does not have masked variant."); result.mVertexShaderString = sCopyVS; result.mFragmentShaderString = sCopy2DFS; result.mAttributes.AppendElement(Argument("aVertexCoord")); result.mAttributes.AppendElement(Argument("aTexCoord")); result.mTextureCount = 1; break; case Copy2DRectProgramType: NS_ASSERTION(!aMask, "Program does not have masked variant."); result.mVertexShaderString = sCopyVS; result.mFragmentShaderString = sCopy2DRectFS; result.mAttributes.AppendElement(Argument("aVertexCoord")); result.mAttributes.AppendElement(Argument("aTexCoord")); result.mTextureCount = 1; break; default: NS_NOTREACHED("Unknown shader program type."); } if (aMask > MaskNone) { result.mTextureCount += 1; } return result; }