├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── issue_template.md ├── .gitignore ├── .vs └── config │ └── applicationhost.config ├── CNAME ├── LICENSE.txt ├── LicenseChecker └── McTools.StopAdvertisement.dll ├── Plugins └── MsCrmTools.SampleTool │ ├── .vs │ └── MsCrmTools.SampleTool.csproj.dtbcache.json │ ├── CompanionTool.Designer.cs │ ├── CompanionTool.cs │ ├── CompanionTool.resx │ ├── MsCrmTools.SampleTool.csproj │ ├── Plugin.cs │ ├── PluginCompanion.cs │ ├── PluginMulti.cs │ ├── Properties │ └── AssemblyInfo.cs │ ├── SampleTool.Designer.cs │ ├── SampleTool.cs │ ├── SampleTool.resx │ ├── SampleToolMulti.Designer.cs │ ├── SampleToolMulti.cs │ ├── SampleToolMulti.resx │ ├── Settings.cs │ ├── app.config │ └── packages.config ├── README.md ├── Referenced Assemblies ├── ILMerge.exe ├── Microsoft.Crm.Sdk.Proxy.dll ├── Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll ├── Microsoft.IdentityModel.Clients.ActiveDirectory.dll ├── Microsoft.Xrm.Sdk.Deployment.dll ├── Microsoft.Xrm.Sdk.dll ├── Microsoft.Xrm.Tooling.Connector.dll └── Microsoft.Xrm.Tooling.CrmConnectControl.dll ├── XrmToolBox.AutoUpdater ├── .vs │ └── XrmToolBox.AutoUpdater.csproj.dtbcache.json ├── App.config ├── AutoUpdater.Designer.cs ├── AutoUpdater.cs ├── AutoUpdater.resx ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── XrmToolBox.AutoUpdater.csproj ├── XrmToolBox.Updater.ico └── packages.config ├── XrmToolBox.Extensibility ├── .vs │ └── XrmToolBox.Extensibility.csproj.dtbcache.json ├── AdditionalConnections.cs ├── Args │ ├── DuplicateToolArgs.cs │ ├── DuplicateToolWithConnectionArgs.cs │ ├── MessageBusEventArgs.cs │ ├── RequestConnectionEventArgs.cs │ └── StatusBarMessageEventArgs.cs ├── Extensions.cs ├── ExternalMethodCallerInfo.cs ├── Forms │ ├── CurrencySelectionDialog.Designer.cs │ ├── CurrencySelectionDialog.cs │ ├── CurrencySelectionDialog.resx │ ├── ErrorDetail.cs │ ├── ErrorDetail.designer.cs │ └── ErrorDetail.resx ├── ITSecurityChecker.cs ├── Icons.Designer.cs ├── Icons.resx ├── Images │ └── progress.gif ├── InformationPanel.cs ├── Interfaces │ ├── IAboutPlugin.cs │ ├── ICodePlexPlugin.cs │ ├── ICompanion.cs │ ├── IConnectionControlUpdateSettings.cs │ ├── IDuplicatableTool.cs │ ├── IEarlyBoundProxy.cs │ ├── IGitHubPlugin.cs │ ├── IHelpPlugin.cs │ ├── IMessageBusHost.cs │ ├── INoConnectionRequired.cs │ ├── INoHighlightingPlugin.cs │ ├── IPayPalPlugin.cs │ ├── IPluginMetadata.cs │ ├── IPluginMetadataExt.cs │ ├── IPrivatePlugin.cs │ ├── ISettingsPlugin.cs │ ├── IShortcutReceiver.cs │ ├── IStatusBarMessager.cs │ ├── IStatusBarMessenger.cs │ ├── IToolLibrary.cs │ ├── IToolLibrarySettings.cs │ ├── IWorkerHost.cs │ ├── IXrmToolBoxLibraryTool.cs │ ├── IXrmToolBoxPlugin.cs │ └── IXrmToolBoxPluginControl.cs ├── LogManager.cs ├── Manifest │ ├── Manifest.cs │ ├── ManifestLoader.cs │ └── PluginMetadata.cs ├── MultipleConnectionsPluginControlBase.cs ├── Paths.cs ├── PluginBase.cs ├── PluginCloseInfo.cs ├── PluginControlBase.cs ├── PluginNotFoundException.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ └── Resources.resx ├── Resources │ ├── error_52.gif │ ├── money_dollar.png │ ├── money_euro.png │ ├── money_pound.png │ ├── notif_icn_alert16.png │ ├── notif_icn_crit16.png │ ├── notif_icn_info16.png │ ├── paypal.png │ └── progress_new.gif ├── SettingsManager.cs ├── UserControls │ ├── LargePluginModel.Designer.cs │ ├── LargePluginModel.cs │ ├── LargePluginModel.resx │ ├── NotificationArea.Designer.cs │ ├── NotificationArea.cs │ ├── NotificationArea.resx │ ├── PluginModel.cs │ ├── PluginModel.resx │ ├── SmallPluginLabel.cs │ ├── SmallPluginModel.Designer.cs │ ├── SmallPluginModel.cs │ └── SmallPluginModel.resx ├── WorkAsyncInfo.cs ├── Worker.cs ├── XrmToolBox.Extensibility.csproj ├── app.config └── packages.config ├── XrmToolBox.PluginsStore ├── AppInsights │ └── AppInsights.cs ├── ConnectionControlsUpdateSettings.cs ├── DTO │ └── XtbPlugin.cs ├── Extensions.cs ├── InstallationInfo.cs ├── LicenseAcceptanceForm.Designer.cs ├── LicenseAcceptanceForm.cs ├── LicenseAcceptanceForm.resx ├── ListViewItemComparer.cs ├── Options.cs ├── PluginDeletions.cs ├── PluginLicense.Designer.cs ├── PluginLicense.cs ├── PluginLicense.resx ├── PluginUpdates.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ └── Resources.resx ├── ProxySettingsHelper.cs ├── StoreForm - Copier.Designer.cs ├── StoreForm - Copier.cs ├── StoreForm - Copier.resx ├── StoreFormFromPortal.Designer.cs ├── StoreFormFromPortal.cs ├── StoreFormFromPortal.resx ├── StoreFromPortal.cs ├── ToolInformationEventArgs.cs ├── XmlSerializerHelper.cs ├── XrmToolBox.PluginsStore.csproj ├── app.config └── packages.config ├── XrmToolBox.ToolLibrary ├── .vs │ └── XrmToolBox.ToolLibrary.csproj.dtbcache.json ├── AppCode │ ├── ConnectionControlsUpdateSettings.cs │ ├── Extensions.cs │ ├── ImageCache.cs │ ├── OpenPluginEventArgs.cs │ ├── PackageVersion.cs │ ├── PluginDeletions.cs │ ├── PluginUpdates.cs │ ├── SerializerHelper.cs │ ├── ToolLibrarySettings.cs │ ├── ToolOperationEventArgs.cs │ ├── WebRequestHelper.cs │ ├── XmlSerializerHelper.cs │ ├── XtbPlugin.cs │ └── XtbPluginVersion.cs ├── Forms │ ├── LicenseAcceptanceForm.Designer.cs │ ├── LicenseAcceptanceForm.cs │ ├── LicenseAcceptanceForm.resx │ ├── ToolLibraryForm.Drawing.cs │ ├── ToolLibraryForm.Processing.cs │ ├── ToolLibraryForm.cs │ ├── ToolLibraryForm.designer.cs │ └── ToolLibraryForm.resx ├── Properties │ └── AssemblyInfo.cs ├── Resource.Designer.cs ├── Resource.resx ├── Resources │ ├── ClearCache.png │ ├── Download32.png │ ├── Error32.png │ ├── Incompatible.png │ ├── Install32.png │ ├── New.png │ ├── NewToInstall.png │ ├── No32.png │ ├── NoLogo100.png │ ├── Open16.png │ ├── Open32.png │ ├── Pending32.png │ ├── PluginsStore32.png │ ├── Refresh.png │ ├── RefreshImages.png │ ├── Restart.png │ ├── Settings.png │ ├── StatusInvalid.18.18.png │ ├── StatusOK.18.18.png │ ├── StatusUpdateAvailable.18.18.png │ ├── Success32.png │ ├── Uninstall.png │ ├── Update.png │ ├── github.png │ ├── mvp.png │ ├── progress.gif │ └── star.png ├── ToolLibrary.cs ├── UserControls │ ├── InstallProgressControl.Designer.cs │ ├── InstallProgressControl.cs │ ├── InstallProgressControl.resx │ ├── PluginLicense.Designer.cs │ ├── PluginLicense.cs │ ├── PluginLicense.resx │ ├── ProgressStepControl.Designer.cs │ ├── ProgressStepControl.cs │ ├── ProgressStepControl.resx │ ├── ToolPackageProperties.cs │ ├── ToolPackageProperties.designer.cs │ └── ToolPackageProperties.resx ├── XrmToolBox.ToolLibrary.csproj ├── app.config ├── app.manifest └── packages.config ├── XrmToolBox.sln ├── XrmToolBox ├── .vs │ └── XrmToolBox.csproj.dtbcache.json ├── AbstractControlDescriptionProvider.cs ├── Announcement │ ├── AnnouncementDialog.Designer.cs │ ├── AnnouncementDialog.cs │ ├── AnnouncementDialog.resx │ ├── AnnouncementManager.cs │ └── AnnouncementSettings.cs ├── AppCode │ ├── AppInsights │ │ ├── AppInsights.cs │ │ └── InstallationInfo.cs │ ├── DockExtensions.cs │ ├── Extensions.cs │ ├── Favorites.cs │ ├── IToolsForm.cs │ ├── ListViewItemComparer.cs │ ├── MostRecentlyUsedItems.cs │ ├── PluginControlStatus.cs │ ├── PluginUpdateSkip.cs │ ├── PluginUpdates.cs │ ├── PropertySorter.cs │ ├── RegistryHelper.cs │ ├── ReleasesDTO.cs │ ├── SettingsPropertyEventArgs.cs │ ├── SettingsPropertyInfo.cs │ └── WebProxyHelper.cs ├── AppInsights │ └── AppInsights.cs ├── ConnectionParameterInfo.cs ├── Controls │ ├── AdvancedControl.cs │ ├── AdvancedControl.designer.cs │ ├── AdvancedControl.resx │ ├── ApplicationProtocolControl.Designer.cs │ ├── ApplicationProtocolControl.cs │ ├── ApplicationProtocolControl.resx │ ├── AssembliesControl.Designer.cs │ ├── AssembliesControl.cs │ ├── AssembliesControl.resx │ ├── ConnectingCdsControl.cs │ ├── ConnectingCdsControl.designer.cs │ ├── ConnectingCdsControl.resx │ ├── ConnectingControl.Designer.cs │ ├── ConnectingControl.cs │ ├── ConnectingControl.resx │ ├── CreditsControl.Designer.cs │ ├── CreditsControl.cs │ ├── CreditsControl.resx │ ├── DropdownSettingsControl.cs │ ├── DropdownSettingsControl.designer.cs │ ├── DropdownSettingsControl.resx │ ├── HiddenToolsControl.Designer.cs │ ├── HiddenToolsControl.cs │ ├── HiddenToolsControl.resx │ ├── HighlightItem.Designer.cs │ ├── HighlightItem.cs │ ├── HighlightItem.resx │ ├── ISettingsControl.cs │ ├── NavLeftItem.cs │ ├── NavLeftItem.designer.cs │ ├── NavLeftItem.resx │ ├── PathsControl.Designer.cs │ ├── PathsControl.cs │ ├── PathsControl.resx │ ├── ProxyControl.Designer.cs │ ├── ProxyControl.cs │ ├── ProxyControl.resx │ ├── SwitchControl.cs │ ├── SwitchControl.designer.cs │ ├── SwitchControl.resx │ ├── SwitchSettingsControl.cs │ ├── SwitchSettingsControl.designer.cs │ ├── SwitchSettingsControl.resx │ ├── TextBoxSettingsControl.cs │ ├── TextBoxSettingsControl.designer.cs │ ├── TextBoxSettingsControl.resx │ └── TextBoxWithPlaceholder.cs ├── CrmExceptionHelper.cs ├── Forms │ ├── DonationIntroForm.Designer.cs │ ├── DonationIntroForm.cs │ ├── DonationIntroForm.resx │ ├── HiddenPluginsDialog.Designer.cs │ ├── HiddenPluginsDialog.cs │ ├── HiddenPluginsDialog.resx │ ├── NewConnectionVersion.Designer.cs │ ├── NewConnectionVersion.cs │ ├── NewConnectionVersion.resx │ ├── NewPluginVersion.Designer.cs │ ├── NewPluginVersion.cs │ ├── NewPluginVersion.resx │ ├── NewVersionForm.Designer.cs │ ├── NewVersionForm.cs │ ├── NewVersionForm.resx │ ├── OptionsDialog.Designer.cs │ ├── OptionsDialog.cs │ ├── OptionsDialog.resx │ ├── SettingsForm.cs │ ├── SettingsForm.designer.cs │ ├── SettingsForm.resx │ ├── SuccessDialog.cs │ ├── SuccessDialog.designer.cs │ ├── SuccessDialog.resx │ ├── TabConnectionUpdater.Designer.cs │ ├── TabConnectionUpdater.cs │ ├── TabConnectionUpdater.resx │ ├── UserSelectionDialog.Designer.cs │ ├── UserSelectionDialog.cs │ ├── UserSelectionDialog.resx │ ├── WelcomeDialog.Designer.cs │ ├── WelcomeDialog.cs │ └── WelcomeDialog.resx ├── Images │ ├── nologo.png │ ├── nologo32.png │ └── progress.gif ├── InformationPanel.cs ├── New │ ├── CustomFloatWindow.cs │ ├── EventArgs │ │ ├── OpenFavoritePluginEventArgs.cs │ │ ├── OpenMruPluginEventArgs.cs │ │ ├── OpenPluginEventArgs.cs │ │ ├── PluginEventArgs.cs │ │ └── PluginsListEventArgs.cs │ ├── FavoriteControl.Designer.cs │ ├── FavoriteControl.cs │ ├── FavoriteControl.resx │ ├── InvalidPluginsForm.Designer.cs │ ├── InvalidPluginsForm.cs │ ├── InvalidPluginsForm.resx │ ├── InvalidPluginsInfo.Designer.cs │ ├── InvalidPluginsInfo.cs │ ├── InvalidPluginsInfo.resx │ ├── MostRecentlyUsedItemControl.Designer.cs │ ├── MostRecentlyUsedItemControl.cs │ ├── MostRecentlyUsedItemControl.resx │ ├── NewForm.Community.cs │ ├── NewForm.Designer.cs │ ├── NewForm.cs │ ├── NewForm.resx │ ├── NewVersionForm.Designer.cs │ ├── NewVersionForm.cs │ ├── NewVersionForm.resx │ ├── PluginForm.Designer.cs │ ├── PluginForm.cs │ ├── PluginForm.resx │ ├── PluginsFilterInfo.Designer.cs │ ├── PluginsFilterInfo.cs │ ├── PluginsFilterInfo.resx │ ├── PluginsForm.Designer.cs │ ├── PluginsForm.cs │ ├── PluginsForm.resx │ ├── PluginsForm2.cs │ ├── PluginsForm2.designer.cs │ ├── PluginsForm2.resx │ ├── StartPage.Designer.cs │ ├── StartPage.cs │ ├── StartPage.resx │ └── ToolInfo.cs ├── Options.cs ├── PluginManagerExtended.cs ├── PluginUseCount.cs ├── PluginsListForm.Designer.cs ├── PluginsListForm.cs ├── PluginsListForm.resx ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── Resources │ ├── 3.png │ ├── ApplicationProtocol32.png │ ├── Assemblies32.png │ ├── CheckForUpdate24.png │ ├── Clear_16.png │ ├── CloseBehavior32.png │ ├── Comparison32.png │ ├── Configuration32.png │ ├── Connect16.png │ ├── Connect24.png │ ├── Connect32.png │ ├── ConnectingDataverse.gif │ ├── ConnectingDynamics.gif │ ├── ConnectionControls32.png │ ├── Connections32.png │ ├── Credits32.png │ ├── Customizations32.png │ ├── Data32.png │ ├── DataCollect32.png │ ├── Dataverse24.png │ ├── Dataverse_16x16.png │ ├── Development32.png │ ├── Display32.png │ ├── Documentation32.png │ ├── Dollar24.png │ ├── Dynamics365_24.png │ ├── Eraser24.png │ ├── Euro24.png │ ├── Expand32.png │ ├── Favorite24.png │ ├── Gitter32.png │ ├── Help24.png │ ├── Hide24.png │ ├── Hide32.png │ ├── Impersonate24.png │ ├── LoadingConnection.gif │ ├── LogoDyn365.png │ ├── ManageConnections24.png │ ├── Migration32.png │ ├── New32.png │ ├── OpenToolsLibrary.png │ ├── Paths32.png │ ├── Plugins32.png │ ├── PluginsStore32.png │ ├── PluginsStore64.png │ ├── Pound24.png │ ├── PowerApps24.png │ ├── PowerApps_scalable.png │ ├── PowerBI32.png │ ├── PowerPages32.png │ ├── Processes32.png │ ├── ProxySettings32.png │ ├── Refresh24.png │ ├── Reporting32.png │ ├── Security32.png │ ├── Session32.png │ ├── Settings24.png │ ├── Settings32.png │ ├── Shortcut24.png │ ├── Shrink32.png │ ├── Solutions32.png │ ├── StartPage32.png │ ├── Startup32.png │ ├── Tools24.png │ ├── ToolsListDisplay32.png │ ├── Troubleshooting32.png │ ├── Uninstall24.png │ ├── UserInterface32.png │ ├── Web24.png │ ├── close.png │ ├── close1.png │ ├── hide_detail.png │ ├── left-arrow.png │ ├── lightning.png │ ├── loading_dv0.png │ ├── loading_dv1.png │ ├── loading_dv2.png │ ├── loading_dv3.png │ ├── loading_dv4.png │ ├── logo_0016.png │ ├── logo_0032.png │ ├── logo_0400.png │ ├── logo_0400_old.png │ ├── mask.png │ ├── money_dollar.png │ ├── money_euro.png │ ├── money_pound.png │ ├── off-button.png │ ├── on-button.png │ ├── paypal.png │ ├── powerapps16.png │ ├── right-arrow.png │ ├── server.png │ ├── shortcut.png │ ├── star.png │ ├── three_tags.png │ ├── twitter.png │ └── www_page.png ├── Startup │ └── NugetCleanup.Command.xml ├── UserControls │ ├── LargePluginModel.Designer.cs │ ├── LargePluginModel.cs │ ├── LargePluginModel.resx │ ├── PluginModel.cs │ ├── SmallPluginLabel.cs │ ├── SmallPluginModel.Designer.cs │ ├── SmallPluginModel.cs │ └── SmallPluginModel.resx ├── XrmToolBox.csproj ├── XrmToolBox.csproj.vspscc ├── XrmToolBox201512.ico ├── app.config ├── app.manifest ├── favicon3Fr.ico └── packages.config └── packages └── repositories.config /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [mscrmtools] 4 | custom: ["https://paypal.me/tanguytouzard"] 5 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: A template to report a bug 4 | title: "[BUG]" 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior 15 | 16 | **Expected behavior** 17 | A clear and concise description of what you expected to happen. 18 | 19 | **Screenshots** 20 | If applicable, add screenshots to help explain your problem. 21 | 22 | **Desktop (please complete the following information):** 23 | - XrmToolbox Version 24 | - Tool version 25 | 26 | **Additional context** 27 | Add any other context about the problem here. 28 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: "[Improvement]" 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/issue_template.md: -------------------------------------------------------------------------------- 1 | Before creating an issue, please ensure you are in the appropriate repository: 2 | - for connectivity issue, please submit an issue in [MscrmTools.Xrm.Connection repository](https://github.com/MscrmTools/MscrmTools.Xrm.Connection/issues) 3 | - for plugins issue, we only accept issue for plugins from MscrmTools that don't have their own repository (which are, as of today: MsCrmTools.FetchXmlTester, MsCrmTools.MetadataDocumentGenerator, MsCrmTools.SolutionImport and MsCrmTools.SynchronousEventOrderEditor). Any other plugin issue should be created on their respective repository 4 | -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | www.xrmtoolbox.com -------------------------------------------------------------------------------- /LicenseChecker/McTools.StopAdvertisement.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/LicenseChecker/McTools.StopAdvertisement.dll -------------------------------------------------------------------------------- /Plugins/MsCrmTools.SampleTool/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | // PROJECT : MsCrmTools.SampleTool 2 | // This project was developed by Tanguy Touzard 3 | // CODEPLEX: http://xrmtoolbox.codeplex.com 4 | // BLOG: http://mscrmtools.blogspot.com 5 | 6 | using System.Reflection; 7 | using System.Runtime.InteropServices; 8 | 9 | [assembly: AssemblyTitle("A Sample Tool")] 10 | [assembly: AssemblyDescription("Illustrates how to create a tool to be used with the toolbox")] 11 | [assembly: AssemblyConfiguration("")] 12 | [assembly: AssemblyCompany("MscrmTools")] 13 | [assembly: AssemblyProduct("MsCrmTools.SampleTool")] 14 | [assembly: AssemblyCopyright("Copyright © MscrmTools 2012")] 15 | [assembly: AssemblyTrademark("")] 16 | [assembly: AssemblyCulture("")] 17 | [assembly: ComVisible(false)] 18 | [assembly: Guid("a8234074-9ff2-4a4c-b580-a2ad4507a116")] 19 | [assembly: AssemblyVersion("1.2018.6.23")] 20 | [assembly: AssemblyFileVersion("1.2018.6.23")] -------------------------------------------------------------------------------- /Plugins/MsCrmTools.SampleTool/Settings.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace MsCrmTools.SampleTool 8 | { 9 | public class Settings 10 | { 11 | public string Var1 { get; set; } 12 | public bool Var2 { get; set; } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # XrmToolBox 2 | 3 | [![Join the chat at https://gitter.im/MscrmTools/XrmToolBox](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/MscrmTools/XrmToolBox?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) 4 | 5 | [![Build status](https://ci.appveyor.com/api/projects/status/dp6r9n9vhcprpur6?svg=true)](https://ci.appveyor.com/project/MscrmTools/xrmtoolbox) 6 | 7 | 8 | XrmToolBox is a Windows application that connects to the Common Data Service for Apps (CDS). Dynamics 365 Customer Engagement (CE) applications, like Dynamics 365 for Sales, Service or Talent also use the Common Data Service for Apps as their foundational data service. XrmToolBox, provides tools to ease customization, configuration and operation tasks for anything built on CDS, including Dynamics 365 CE (formerly CRM) and model-driven PowerApps. It is shipped with more than 30 plugins to make administration, customization or configuration tasks easier and less time consuming. 9 | 10 | One of the great points about XrmToolBox is its capability to welcome external plugins written by other developers, just by implementing specific parts of XrmToolBox code. 11 | 12 | # Documentation 13 | The documentation is available through the [Wiki](https://github.com/MscrmTools/XrmToolBox/wiki) of XrmToolBox's GitHub repository. You will find information about prerequisites, a list of existing plugins, help on how to connect to your Microsoft Dynamics CRM deployment and much more… 14 | If you feel you can contribute to this documentation, please create a GitHub account and help me to fill the [Wiki](https://github.com/MscrmTools/XrmToolBox/wiki) with as much interesting content as possible. 15 | 16 | # Report bugs or make suggestions 17 | If you have faced a bug or would like to make a suggestion to improve XrmToolBox and its included plugins, please go the [suggestions](https://github.com/MscrmTools/XrmToolBox/issues) section of XrmToolBox GitHub repository. You will have to create an account if you don't have one yet. 18 | 19 | # Support XrmToolBox 20 | 21 | XrmToolBox is a free tool and will remain like this. But if you think this tool has improved your productivity or saved you time on your Microsoft Dynamics CRM project, then you can help me by donating whatever amount you want through [PayPal](https://www.xrmtoolbox.com/donators/). 22 | -------------------------------------------------------------------------------- /Referenced Assemblies/ILMerge.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/Referenced Assemblies/ILMerge.exe -------------------------------------------------------------------------------- /Referenced Assemblies/Microsoft.Crm.Sdk.Proxy.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/Referenced Assemblies/Microsoft.Crm.Sdk.Proxy.dll -------------------------------------------------------------------------------- /Referenced Assemblies/Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/Referenced Assemblies/Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll -------------------------------------------------------------------------------- /Referenced Assemblies/Microsoft.IdentityModel.Clients.ActiveDirectory.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/Referenced Assemblies/Microsoft.IdentityModel.Clients.ActiveDirectory.dll -------------------------------------------------------------------------------- /Referenced Assemblies/Microsoft.Xrm.Sdk.Deployment.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/Referenced Assemblies/Microsoft.Xrm.Sdk.Deployment.dll -------------------------------------------------------------------------------- /Referenced Assemblies/Microsoft.Xrm.Sdk.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/Referenced Assemblies/Microsoft.Xrm.Sdk.dll -------------------------------------------------------------------------------- /Referenced Assemblies/Microsoft.Xrm.Tooling.Connector.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/Referenced Assemblies/Microsoft.Xrm.Tooling.Connector.dll -------------------------------------------------------------------------------- /Referenced Assemblies/Microsoft.Xrm.Tooling.CrmConnectControl.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/Referenced Assemblies/Microsoft.Xrm.Tooling.CrmConnectControl.dll -------------------------------------------------------------------------------- /XrmToolBox.AutoUpdater/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /XrmToolBox.AutoUpdater/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace XrmToolBox.AutoUpdater 5 | { 6 | internal static class Program 7 | { 8 | /// 9 | /// Point d'entrée principal de l'application. 10 | /// 11 | [STAThread] 12 | private static void Main(string[] args) 13 | { 14 | Application.EnableVisualStyles(); 15 | Application.SetCompatibleTextRenderingDefault(false); 16 | Application.Run(new AutoUpdater(args[0])); 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /XrmToolBox.AutoUpdater/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | 4 | // Les informations générales relatives à un assembly dépendent de 5 | // l'ensemble d'attributs suivant. Changez les valeurs de ces attributs pour modifier les informations 6 | // associées à un assembly. 7 | [assembly: AssemblyTitle("XrmToolBox.AutoUpdater")] 8 | [assembly: AssemblyDescription("")] 9 | [assembly: AssemblyConfiguration("")] 10 | [assembly: AssemblyCompany("")] 11 | [assembly: AssemblyProduct("XrmToolBox.AutoUpdater")] 12 | [assembly: AssemblyCopyright("Copyright © 2016")] 13 | [assembly: AssemblyTrademark("")] 14 | [assembly: AssemblyCulture("")] 15 | 16 | // L'affectation de la valeur false à ComVisible rend les types invisibles dans cet assembly 17 | // aux composants COM. Si vous devez accéder à un type dans cet assembly à partir de 18 | // COM, affectez la valeur true à l'attribut ComVisible sur ce type. 19 | [assembly: ComVisible(false)] 20 | 21 | // Le GUID suivant est pour l'ID de la typelib si ce projet est exposé à COM 22 | [assembly: Guid("564c72c8-586e-4218-b6b3-f464f7c3903a")] 23 | 24 | // Les informations de version pour un assembly se composent des quatre valeurs suivantes : 25 | // 26 | // Version principale 27 | // Version secondaire 28 | // Numéro de build 29 | // Révision 30 | // 31 | // Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut 32 | // en utilisant '*', comme indiqué ci-dessous : 33 | // [assembly: AssemblyVersion("1.0.*")] 34 | [assembly: AssemblyVersion("1.1.0.2")] 35 | [assembly: AssemblyFileVersion("1.1.0.2")] -------------------------------------------------------------------------------- /XrmToolBox.AutoUpdater/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // Ce code a été généré par un outil. 4 | // Version du runtime :4.0.30319.42000 5 | // 6 | // Les modifications apportées à ce fichier peuvent provoquer un comportement incorrect et seront perdues si 7 | // le code est régénéré. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace XrmToolBox.AutoUpdater.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.3.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /XrmToolBox.AutoUpdater/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /XrmToolBox.AutoUpdater/XrmToolBox.Updater.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.AutoUpdater/XrmToolBox.Updater.ico -------------------------------------------------------------------------------- /XrmToolBox.AutoUpdater/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/AdditionalConnections.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using McTools.Xrm.Connection; 4 | 5 | namespace XrmToolBox.Extensibility 6 | { 7 | public class AdditionalConnections 8 | { 9 | private readonly List connections; 10 | 11 | public AdditionalConnections() 12 | { 13 | connections = new List(); 14 | } 15 | 16 | public event EventHandler AdditionalConnectionAdded; 17 | 18 | public List Connections => connections; 19 | 20 | public void Add(ConnectionDetail detail) 21 | { 22 | if (connections.Contains(detail)) return; 23 | connections.Add(detail); 24 | AdditionalConnectionAdded?.Invoke(this, new ConnectionDetailEventArgs(detail)); 25 | } 26 | 27 | public void Clear() 28 | { 29 | connections.Clear(); 30 | } 31 | 32 | public void Remove(ConnectionDetail detail) 33 | { 34 | connections.Remove(detail); 35 | } 36 | 37 | public bool Contains(ConnectionDetail detail) 38 | { 39 | return connections.Contains(detail); 40 | } 41 | } 42 | 43 | public class ConnectionDetailEventArgs : EventArgs 44 | { 45 | public ConnectionDetailEventArgs() 46 | { 47 | } 48 | 49 | public ConnectionDetailEventArgs(ConnectionDetail detail) 50 | { 51 | Detail = detail; 52 | } 53 | 54 | public ConnectionDetail Detail { get; set; } 55 | } 56 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Args/DuplicateToolArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace XrmToolBox.Extensibility.Args 4 | { 5 | public class DuplicateToolArgs : EventArgs 6 | { 7 | public DuplicateToolArgs(object state, bool newConnection) 8 | { 9 | State = state; 10 | NewConnection = newConnection; 11 | } 12 | 13 | public bool NewConnection { get; } 14 | public object State { get; } 15 | } 16 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Args/DuplicateToolWithConnectionArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using XrmToolBox.Extensibility.Interfaces; 3 | 4 | namespace XrmToolBox.Extensibility.Args 5 | { 6 | public class DuplicateToolWithConnectionArgs : EventArgs 7 | { 8 | public IDuplicatableTool SourceTool { get; set; } 9 | 10 | public object State { get; set; } 11 | public Lazy Tool { get; set; } 12 | } 13 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Args/MessageBusEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace XrmToolBox.Extensibility 4 | { 5 | /// 6 | /// Object that passed as argument in message bus communication 7 | /// 8 | public class MessageBusEventArgs : EventArgs 9 | { 10 | /// 11 | /// Initializes a new instance of the class. 12 | /// 13 | /// Unique string name (title) of plugin to call 14 | /// Switch instructing message broker start new instance of the plugin even if one is already present 15 | public MessageBusEventArgs(string targetPlugin, bool newInstance = false) 16 | { 17 | this.TargetPlugin = targetPlugin; 18 | this.NewInstance = newInstance; 19 | } 20 | 21 | /// 22 | /// Gets or sets value indicating whether new instance of target plugin should be created. 23 | /// 24 | public bool NewInstance 25 | { 26 | get; 27 | set; 28 | } 29 | 30 | /// 31 | /// Gets or sets name of plugin to return. 32 | /// This value if not set is resolved by message broker. 33 | /// 34 | public string SourcePlugin 35 | { 36 | get; 37 | set; 38 | } 39 | 40 | /// 41 | /// Gets or sets data will be passed to target plugin. 42 | /// This is dynamic data type. New properties and methods could be added on the fly. 43 | /// 44 | public dynamic TargetArgument 45 | { 46 | get; 47 | set; 48 | } 49 | 50 | /// 51 | /// Gets name of the plugin to start. 52 | /// This value should be set in the constructor. 53 | /// 54 | public string TargetPlugin 55 | { 56 | get; 57 | private set; 58 | } 59 | } 60 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Args/RequestConnectionEventArgs.cs: -------------------------------------------------------------------------------- 1 | // PROJECT : XrmToolBox 2 | // This project was developed by Tanguy Touzard 3 | // CODEPLEX: http://xrmtoolbox.codeplex.com 4 | // BLOG: http://mscrmtools.blogspot.com 5 | 6 | using System; 7 | using XrmToolBox.Extensibility.Interfaces; 8 | 9 | namespace XrmToolBox.Extensibility 10 | { 11 | public class RequestConnectionEventArgs : EventArgs 12 | { 13 | /// 14 | /// The name of the action 15 | /// 16 | /// 17 | /// Useful when the connection call back arrives to understand which 18 | /// action required a connection 19 | /// 20 | public string ActionName; 21 | 22 | /// 23 | /// The control that required a connection 24 | /// 25 | public IXrmToolBoxPluginControl Control; 26 | 27 | /// 28 | /// A parameter if passing extra data is needed 29 | /// 30 | public object Parameter; 31 | } 32 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Args/StatusBarMessageEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace XrmToolBox.Extensibility.Args 4 | { 5 | public class StatusBarMessageEventArgs : EventArgs 6 | { 7 | public StatusBarMessageEventArgs(string message) 8 | { 9 | Message = message; 10 | } 11 | 12 | public StatusBarMessageEventArgs(int? progress) 13 | { 14 | if (progress.HasValue && (progress < 0 || progress > 100)) 15 | { 16 | throw new Exception("Progress value has to be between 0 and 100"); 17 | } 18 | 19 | Progress = progress; 20 | } 21 | 22 | public StatusBarMessageEventArgs(int? progress, string message) 23 | { 24 | Message = message; 25 | 26 | if (progress.HasValue && (progress < 0 || progress > 100)) 27 | { 28 | throw new Exception("Progress value has to be between 0 and 100"); 29 | } 30 | 31 | Progress = progress; 32 | } 33 | 34 | public string Message { get; private set; } 35 | public int? Progress { get; private set; } 36 | } 37 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/ExternalMethodCallerInfo.cs: -------------------------------------------------------------------------------- 1 | // PROJECT : XrmToolBox 2 | // Author : Daryl LaBar http://www.linkedin.com/pub/daryl-labar/4/988/5b8/ 3 | // CODEPLEX: http://xrmtoolbox.codeplex.com 4 | // BLOG: http://www.dotnetdust.blogspot.com/ 5 | 6 | using System; 7 | 8 | namespace XrmToolBox.Extensibility 9 | { 10 | public class ExternalMethodCallerInfo 11 | { 12 | public Action ExternalAction { get; set; } 13 | public T Parameter { get; set; } 14 | } 15 | 16 | public class ExternalMethodCallerInfo 17 | { 18 | public ExternalMethodCallerInfo(Action action) 19 | { 20 | ExternalAction = action; 21 | } 22 | 23 | public Action ExternalAction { get; set; } 24 | } 25 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Forms/CurrencySelectionDialog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.Web; 4 | using System.Windows.Forms; 5 | using XrmToolBox.Extensibility.Interfaces; 6 | 7 | namespace XrmToolBox.Extensibility.Forms 8 | { 9 | public partial class CurrencySelectionDialog : Form 10 | { 11 | private IPayPalPlugin pp; 12 | 13 | public CurrencySelectionDialog(IPayPalPlugin pp) 14 | { 15 | InitializeComponent(); 16 | 17 | this.pp = pp; 18 | } 19 | 20 | private void btn_Click(object sender, EventArgs e) 21 | { 22 | string currency = "USD"; 23 | if (sender == btnEuro) 24 | { 25 | currency = "EUR"; 26 | } 27 | else if (sender == btnPound) 28 | { 29 | currency = "GBP"; 30 | } 31 | 32 | var url = string.Format( 33 | "https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business={0}&lc={1}&item_name={2}¤cy_code={3}&bn=PP%2dDonationsBF", 34 | pp.EmailAccount, 35 | "EN", 36 | HttpUtility.UrlEncode(pp.DonationDescription), 37 | currency); 38 | 39 | Process.Start(url); 40 | Close(); 41 | } 42 | } 43 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Images/progress.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.Extensibility/Images/progress.gif -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Interfaces/IAboutPlugin.cs: -------------------------------------------------------------------------------- 1 | namespace XrmToolBox.Extensibility.Interfaces 2 | { 3 | public interface IAboutPlugin 4 | { 5 | void ShowAboutDialog(); 6 | } 7 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Interfaces/ICodePlexPlugin.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace XrmToolBox.Extensibility.Interfaces 4 | { 5 | /// 6 | /// This interface allows a user to specify CodePlex project name to add a 7 | /// menu to redirect end user to CodePlex project pages (issues, discussions) 8 | /// 9 | public interface ICodePlexPlugin 10 | { 11 | /// 12 | /// Name of the CodePlex project to build a CodePlex url formatted as 13 | /// following : http://CodePlexUrlName.codeplex.com 14 | /// 15 | String CodePlexUrlName { get; } 16 | } 17 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Interfaces/ICompanion.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace XrmToolBox.Extensibility.Interfaces 4 | { 5 | public enum RightOrLeft 6 | { 7 | Left, 8 | Right, 9 | Bottom 10 | } 11 | 12 | public interface ICompanion 13 | { 14 | RightOrLeft GetPosition(); 15 | } 16 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Interfaces/IConnectionControlUpdateSettings.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace XrmToolBox.Extensibility.Interfaces 4 | { 5 | public interface IConnectionControlUpdateSettings 6 | { 7 | bool NewVersion { get; set; } 8 | string ReleaseNotes { get; set; } 9 | bool RestartNow { get; set; } 10 | string Version { get; set; } 11 | } 12 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Interfaces/IDuplicatableTool.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using XrmToolBox.Extensibility.Args; 3 | 4 | namespace XrmToolBox.Extensibility.Interfaces 5 | { 6 | public interface IDuplicatableTool 7 | { 8 | /// 9 | /// Ask XrmToolBox to duplicate this tool 10 | /// 11 | event EventHandler DuplicateRequested; 12 | 13 | /// 14 | /// Apply state retrieved from another tool instance to the current tool 15 | /// 16 | /// State to apply 17 | void ApplyState(object state); 18 | 19 | /// 20 | /// Get the state of the current tool 21 | /// 22 | /// 23 | object GetState(); 24 | } 25 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Interfaces/IEarlyBoundProxy.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Reflection; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace XrmToolBox.Extensibility.Interfaces 9 | { 10 | public interface IEarlyBoundProxy 11 | { 12 | Assembly GetEarlyBoundProxyAssembly(); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Interfaces/IGitHubPlugin.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace XrmToolBox.Extensibility.Interfaces 4 | { 5 | /// 6 | /// This interface allows a user to specify Github user name and repository name 7 | /// to add a menu to redirect end user to Github issues page 8 | /// 9 | public interface IGitHubPlugin 10 | { 11 | /// 12 | /// Github Repository name 13 | /// 14 | String RepositoryName { get; } 15 | 16 | /// 17 | /// Github Username 18 | /// 19 | String UserName { get; } 20 | } 21 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Interfaces/IHelpPlugin.cs: -------------------------------------------------------------------------------- 1 | namespace XrmToolBox.Extensibility.Interfaces 2 | { 3 | public interface IHelpPlugin 4 | { 5 | string HelpUrl { get; } 6 | } 7 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Interfaces/IMessageBusHost.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace XrmToolBox.Extensibility.Interfaces 4 | { 5 | /// 6 | /// Interface which plugins should implement to be able communicate between each other 7 | /// 8 | public interface IMessageBusHost 9 | { 10 | /// 11 | /// Event raised by plugin notifying broker that new message is ready to dispatch 12 | /// 13 | event EventHandler OnOutgoingMessage; 14 | 15 | /// 16 | /// Method that accepts dispatched message 17 | /// 18 | /// 19 | void OnIncomingMessage(MessageBusEventArgs message); 20 | } 21 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Interfaces/INoConnectionRequired.cs: -------------------------------------------------------------------------------- 1 | namespace XrmToolBox.Extensibility.Interfaces 2 | { 3 | public interface INoConnectionRequired 4 | { 5 | } 6 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Interfaces/INoHighlightingPlugin.cs: -------------------------------------------------------------------------------- 1 | namespace XrmToolBox.Extensibility.Interfaces 2 | { 3 | public interface INoHighlightingPlugin 4 | { 5 | } 6 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Interfaces/IPayPalPlugin.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace XrmToolBox.Extensibility.Interfaces 4 | { 5 | /// 6 | /// This interface allows a user to specify Paypal account 7 | /// to add a menu to redirect end user to Paypal donation page 8 | /// 9 | public interface IPayPalPlugin 10 | { 11 | /// 12 | /// Description to add in Donation page 13 | /// 14 | String DonationDescription { get; } 15 | 16 | /// 17 | /// PayPal email account 18 | /// 19 | String EmailAccount { get; } 20 | } 21 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Interfaces/IPluginMetadata.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace XrmToolBox.Extensibility.Interfaces 4 | { 5 | public interface IPluginMetadata 6 | { 7 | string BackgroundColor { get; } 8 | string BigImageBase64 { get; } 9 | string Description { get; } 10 | string Name { get; } 11 | string PrimaryFontColor { get; } 12 | string SecondaryFontColor { get; } 13 | string SmallImageBase64 { get; } 14 | } 15 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Interfaces/IPluginMetadataExt.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace XrmToolBox.Extensibility.Interfaces 5 | { 6 | public interface IPluginMetadataExt : IPluginMetadata 7 | { 8 | DateTime AddedOn { get; set; } 9 | string AssemblyFilename { get; } 10 | string AssemblyQualifiedName { get; } 11 | List Categories { get; } 12 | string Company { get; } 13 | string Control { get; } 14 | Guid Id { get; } 15 | string[] Interfaces { get; } 16 | int numberOfUse { get; set; } 17 | string PluginType { get; } 18 | decimal Rating { get; set; } 19 | string Version { get; } 20 | } 21 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Interfaces/IPrivatePlugin.cs: -------------------------------------------------------------------------------- 1 | namespace XrmToolBox.Extensibility.Interfaces 2 | { 3 | /// 4 | /// This interface just helps to make sure the tool control that implements 5 | /// it does not report any usage to XrmToolBox Application Insights 6 | /// 7 | public interface IPrivatePlugin 8 | { 9 | } 10 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Interfaces/ISettingsPlugin.cs: -------------------------------------------------------------------------------- 1 | namespace XrmToolBox.Extensibility.Interfaces 2 | { 3 | public interface ISettingsPlugin 4 | { 5 | void ShowSettings(); 6 | } 7 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Interfaces/IShortcutReceiver.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Forms; 2 | 3 | namespace XrmToolBox.Extensibility.Interfaces 4 | { 5 | public interface IShortcutReceiver 6 | { 7 | void ReceiveKeyDownShortcut(KeyEventArgs e); 8 | 9 | void ReceiveKeyPressShortcut(KeyPressEventArgs e); 10 | 11 | void ReceiveKeyUpShortcut(KeyEventArgs e); 12 | 13 | void ReceivePreviewKeyDownShortcut(PreviewKeyDownEventArgs e); 14 | } 15 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Interfaces/IStatusBarMessager.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using XrmToolBox.Extensibility.Args; 3 | 4 | namespace XrmToolBox.Extensibility.Interfaces 5 | { 6 | /// 7 | /// This interface allows to send message or progress to main application 8 | /// to display progress data in the status bar 9 | /// 10 | [Obsolete("Please use the interface IStatusBarMessenger instead")] 11 | public interface IStatusBarMessager 12 | { 13 | event EventHandler SendMessageToStatusBar; 14 | } 15 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Interfaces/IStatusBarMessenger.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using XrmToolBox.Extensibility.Args; 3 | 4 | namespace XrmToolBox.Extensibility.Interfaces 5 | { 6 | /// 7 | /// This interface allows to send message or progress to main application 8 | /// to display progress data in the status bar 9 | /// 10 | public interface IStatusBarMessenger 11 | { 12 | event EventHandler SendMessageToStatusBar; 13 | } 14 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Interfaces/IToolLibrary.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Threading.Tasks; 4 | using System.Windows.Forms; 5 | 6 | namespace XrmToolBox.Extensibility.Interfaces 7 | { 8 | public interface IToolLibrary 9 | { 10 | bool AllowConnectionControlPreRelease { get; set; } 11 | 12 | List Categories { get; } 13 | 14 | int PluginsCount { get; } 15 | 16 | int PluginsUpdatesCount { get; } 17 | 18 | List Tools { get; } 19 | 20 | string GetPluginProjectUrlByFileName(string fileName); 21 | 22 | IXrmToolBoxLibraryTool GetPluginUpdateByFile(string location); 23 | 24 | void InstallOneToolUpdate(IXrmToolBoxLibraryTool tool, bool onNextRestart, Form form); 25 | 26 | Task IsConnectionControlsUpdateAvailable(string connectionControlsVersion); 27 | 28 | Task LoadTools(bool fromStorePortal = true); 29 | 30 | Task PrepareConnectionControlsUpdate(Form form, bool restart); 31 | 32 | void UninstallByFileName(string fileName); 33 | } 34 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Interfaces/IToolLibrarySettings.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace XrmToolBox.Extensibility.Interfaces 4 | { 5 | public interface IToolLibrarySettings 6 | { 7 | string AdditionalRepositories { get; set; } 8 | bool DisplayPluginsStoreOnlyIfUpdates { get; set; } 9 | bool DisplayPluginsStoreOnStartup { get; set; } 10 | bool LibraryFilterMvp { get; set; } 11 | bool LibraryFilterNew { get; set; } 12 | bool LibraryFilterOpenSource { get; set; } 13 | bool LibraryFilterRating { get; set; } 14 | bool LibraryShowIncompatible { get; set; } 15 | bool LibraryShowInstalled { get; set; } 16 | bool LibraryShowNotInstalled { get; set; } 17 | bool LibraryShowUpdates { get; set; } 18 | int MostRatedMinNumberOfVotes { get; set; } 19 | decimal MostRatedMinRatingAverage { get; set; } 20 | string RepositoryUrl { get; set; } 21 | 22 | #region Proxy 23 | 24 | bool ByPassProxyOnLocal { get; set; } 25 | string Password { get; set; } 26 | string ProxyAddress { get; set; } 27 | bool UseCustomProxy { get; set; } 28 | bool UseDefaultCredentials { get; set; } 29 | bool UseInternetExplorerProxy { get; set; } 30 | string UserName { get; set; } 31 | 32 | #endregion Proxy 33 | } 34 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Interfaces/IWorkerHost.cs: -------------------------------------------------------------------------------- 1 | // PROJECT : XrmToolBox 2 | // Author : Daryl LaBar http://www.linkedin.com/pub/daryl-labar/4/988/5b8/ 3 | // CODEPLEX: http://xrmtoolbox.codeplex.com 4 | // BLOG: http://www.dotnetdust.blogspot.com/ 5 | 6 | using System; 7 | using System.ComponentModel; 8 | using System.Windows.Forms; 9 | 10 | namespace XrmToolBox.Extensibility.Interfaces 11 | { 12 | public interface IWorkerHost 13 | { 14 | Control.ControlCollection Controls { get; } 15 | 16 | void RaiseRequestConnectionEvent(RequestConnectionEventArgs args); 17 | 18 | void SetWorkingMessage(string message, int width, int height); 19 | 20 | void WorkAsync(WorkAsyncInfo info); 21 | } 22 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Interfaces/IXrmToolBoxLibraryTool.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace XrmToolBox.Extensibility.Interfaces 5 | { 6 | public interface IXrmToolBoxLibraryTool 7 | { 8 | string CategoriesList { get; } 9 | 10 | List Files { get; } 11 | 12 | string LatestReleaseNote { get; } 13 | string LogoUrl { get; } 14 | string Name { get; } 15 | string Version { get; } 16 | } 17 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Interfaces/IXrmToolBoxPlugin.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace XrmToolBox.Extensibility.Interfaces 4 | { 5 | public interface IXrmToolBoxPlugin 6 | { 7 | string GetCompany(); 8 | 9 | IXrmToolBoxPluginControl GetControl(); 10 | 11 | string GetAssemblyQualifiedName(); 12 | 13 | string GetVersion(); 14 | } 15 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Interfaces/IXrmToolBoxPluginControl.cs: -------------------------------------------------------------------------------- 1 | // PROJECT : XrmToolBox 2 | // This project was developed by Tanguy Touzard 3 | // CODEPLEX: http://xrmtoolbox.codeplex.com 4 | // BLOG: http://mscrmtools.blogspot.com 5 | 6 | using McTools.Xrm.Connection; 7 | using Microsoft.Xrm.Sdk; 8 | using System; 9 | 10 | namespace XrmToolBox.Extensibility.Interfaces 11 | { 12 | public interface IXrmToolBoxPluginControl 13 | { 14 | /// 15 | /// EventHandler to close the current tool 16 | /// 17 | event EventHandler OnCloseTool; 18 | 19 | /// 20 | /// EventHandler to request a connection to an organization 21 | /// 22 | event EventHandler OnRequestConnection; 23 | 24 | /// 25 | /// EventHandler when a work async is started 26 | /// 27 | event EventHandler OnWorkAsync; 28 | 29 | /// 30 | /// Gets the organization service used by the tool 31 | /// 32 | IOrganizationService Service { get; } 33 | 34 | /// 35 | /// Method to allow plugin to Cancel a closing event, or perform any save events required before closing. 36 | /// 37 | /// 38 | void ClosingPlugin(PluginCloseInfo info); 39 | 40 | /// 41 | /// Updates the organization service used by the tool 42 | /// 43 | /// Organization service 44 | /// Details of the connection 45 | /// Action that requested a service update 46 | /// Parameter passed when requesting a service update 47 | void UpdateConnection(IOrganizationService newService, ConnectionDetail connectionDetail, string actionName = "", object parameter = null); 48 | } 49 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Manifest/Manifest.cs: -------------------------------------------------------------------------------- 1 | #region File header 2 | // Project / File: XrmToolBox / XrmToolBox.Extensibility / Manifest.cs 3 | // Author: Ahmed Elsawalhy (yagasoft.com) 4 | // Contributors: 5 | // Version: 1.2021.12.53 6 | // Created: 2021 / 09 / 19 7 | #endregion 8 | 9 | #region Imports 10 | 11 | using System; 12 | 13 | #endregion 14 | 15 | namespace XrmToolBox.Extensibility.Manifest 16 | { 17 | public class Manifest 18 | { 19 | public AssemblyInfo[] ScannedAssemblies { get; set; } = Array.Empty(); 20 | public PluginMetadata[] PluginMetadata { get; set; } = Array.Empty(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Manifest/PluginMetadata.cs: -------------------------------------------------------------------------------- 1 | #region File header 2 | 3 | // Project / File: XrmToolBox / XrmToolBox.Extensibility / PluginMetadata.cs 4 | // Author: Ahmed Elsawalhy (yagasoft.com) 5 | // Contributors: 6 | // Version: 1.2021.12.53 7 | // Created: 2021 / 09 / 19 8 | 9 | #endregion 10 | 11 | #region Imports 12 | 13 | using System; 14 | using System.Collections.Generic; 15 | using XrmToolBox.Extensibility.Interfaces; 16 | 17 | #endregion 18 | 19 | namespace XrmToolBox.Extensibility.Manifest 20 | { 21 | public class PluginMetadata : IPluginMetadataExt 22 | { 23 | public DateTime AddedOn { get; set; } 24 | public string AssemblyFilename { get; set; } 25 | public string AssemblyQualifiedName { get; set; } 26 | public string BackgroundColor { get; set; } 27 | public string BigImageBase64 { get; set; } 28 | public List Categories { get; set; } = new List(); 29 | public string Company { get; set; } 30 | public string Control { get; set; } 31 | public string Description { get; set; } 32 | public Guid Id { get; set; } 33 | public string[] Interfaces { get; set; } 34 | public string Name { get; set; } 35 | public int numberOfUse { get; set; } 36 | public string PluginType { get; set; } 37 | public string PrimaryFontColor { get; set; } 38 | public decimal Rating { get; set; } 39 | public string SecondaryFontColor { get; set; } 40 | public string SmallImageBase64 { get; set; } 41 | public string Version { get; set; } 42 | } 43 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Paths.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | 4 | namespace XrmToolBox.Extensibility 5 | { 6 | public static class Paths 7 | { 8 | private static string rootPath; 9 | private static string userApplicationDataFolder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 10 | 11 | public static string PluginsPath 12 | { 13 | get 14 | { 15 | return Path.Combine(rootPath?? XrmToolBoxPath, "Plugins"); 16 | } 17 | } 18 | public static string LogsPath 19 | { 20 | get 21 | { 22 | return Path.Combine(rootPath ?? XrmToolBoxPath, "Logs"); 23 | } 24 | } 25 | public static string SettingsPath 26 | { 27 | get 28 | { 29 | return Path.Combine(rootPath ?? XrmToolBoxPath, "Settings"); 30 | } 31 | } 32 | public static string ConnectionsPath 33 | { 34 | get 35 | { 36 | return Path.Combine(rootPath ?? XrmToolBoxPath, "Connections"); 37 | } 38 | } 39 | 40 | public static string XrmToolBoxPath 41 | { 42 | get 43 | { 44 | return Path.Combine(rootPath ?? Path.Combine(userApplicationDataFolder, "MscrmTools", "XrmToolBox")); 45 | } 46 | } 47 | 48 | public static void OverrideRootPath(string newRootPath) 49 | { 50 | if(!Directory.Exists(Path.GetFullPath(Environment.ExpandEnvironmentVariables(newRootPath)))) 51 | throw new DirectoryNotFoundException(newRootPath); 52 | 53 | rootPath = newRootPath; 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/PluginBase.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using XrmToolBox.Extensibility.Interfaces; 3 | 4 | namespace XrmToolBox.Extensibility 5 | { 6 | public abstract class PluginBase : IXrmToolBoxPlugin 7 | { 8 | public string GetAssemblyQualifiedName() 9 | { 10 | return GetType().AssemblyQualifiedName; 11 | } 12 | 13 | public string GetCompany() 14 | { 15 | return GetType().GetCompany(); 16 | } 17 | 18 | public abstract IXrmToolBoxPluginControl GetControl(); 19 | 20 | public virtual Guid GetId() 21 | { 22 | return Guid.Empty; 23 | } 24 | 25 | public string GetVersion() 26 | { 27 | return GetType().Assembly.GetName().Version.ToString(); 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/PluginCloseInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace XrmToolBox.Extensibility 5 | { 6 | public enum ToolBoxCloseReason 7 | { 8 | None, 9 | CloseAll, 10 | CloseAllExceptActive, 11 | CloseCurrent, 12 | CloseMiddleClick, 13 | CloseHotKey, 14 | PluginRequest, 15 | } 16 | 17 | public class PluginCloseInfo 18 | { 19 | public PluginCloseInfo() 20 | { 21 | FormReason = CloseReason.None; 22 | ToolBoxReason = ToolBoxCloseReason.None; 23 | Silent = false; 24 | Cancel = false; 25 | } 26 | 27 | public PluginCloseInfo(CloseReason reason) : this() 28 | { 29 | if (reason == CloseReason.None) 30 | { 31 | throw new ArgumentException("None is not a valid CloseReason"); 32 | } 33 | FormReason = reason; 34 | } 35 | 36 | public PluginCloseInfo(ToolBoxCloseReason reason) : this() 37 | { 38 | if (reason == ToolBoxCloseReason.None) 39 | { 40 | throw new ArgumentException("None is not a valid ToolBoxCloseReason"); 41 | } 42 | ToolBoxReason = reason; 43 | } 44 | 45 | public bool Silent { get; set; } 46 | public bool Cancel { get; set; } 47 | public CloseReason FormReason { get; set; } 48 | public ToolBoxCloseReason ToolBoxReason { get; set; } 49 | } 50 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/PluginNotFoundException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace XrmToolBox.Extensibility 4 | { 5 | [Serializable()] 6 | public class PluginNotFoundException : Exception 7 | { 8 | public PluginNotFoundException(string format, params object[] args) 9 | : base(String.Format(format, args)) 10 | { 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | 4 | // Les informations générales relatives à un assembly dépendent de 5 | // l'ensemble d'attributs suivant. Changez les valeurs de ces attributs pour modifier les informations 6 | // associées à un assembly. 7 | [assembly: AssemblyTitle("XrmToolBox.Extensibility")] 8 | [assembly: AssemblyDescription("")] 9 | [assembly: AssemblyConfiguration("")] 10 | [assembly: AssemblyCompany("")] 11 | [assembly: AssemblyProduct("XrmToolBox.Extensibility")] 12 | [assembly: AssemblyCopyright("Copyright © 2015")] 13 | [assembly: AssemblyTrademark("")] 14 | [assembly: AssemblyCulture("")] 15 | 16 | // L'affectation de la valeur false à ComVisible rend les types invisibles dans cet assembly 17 | // aux composants COM. Si vous devez accéder à un type dans cet assembly à partir de 18 | // COM, affectez la valeur true à l'attribut ComVisible sur ce type. 19 | [assembly: ComVisible(false)] 20 | 21 | // Le GUID suivant est pour l'ID de la typelib si ce projet est exposé à COM 22 | [assembly: Guid("d9c6659a-eb9f-4c00-961b-aafea12246bc")] 23 | 24 | // Les informations de version pour un assembly se composent des quatre valeurs suivantes : 25 | // 26 | // Version principale 27 | // Version secondaire 28 | // Numéro de build 29 | // Révision 30 | // 31 | // Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut 32 | // en utilisant '*', comme indiqué ci-dessous : 33 | // [assembly: AssemblyVersion("1.0.*")] 34 | [assembly: AssemblyVersion("1.2024.9.69")] 35 | [assembly: AssemblyFileVersion("1.2024.9.69")] -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Resources/error_52.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.Extensibility/Resources/error_52.gif -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Resources/money_dollar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.Extensibility/Resources/money_dollar.png -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Resources/money_euro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.Extensibility/Resources/money_euro.png -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Resources/money_pound.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.Extensibility/Resources/money_pound.png -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Resources/notif_icn_alert16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.Extensibility/Resources/notif_icn_alert16.png -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Resources/notif_icn_crit16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.Extensibility/Resources/notif_icn_crit16.png -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Resources/notif_icn_info16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.Extensibility/Resources/notif_icn_info16.png -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Resources/paypal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.Extensibility/Resources/paypal.png -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/Resources/progress_new.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.Extensibility/Resources/progress_new.gif -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/UserControls/NotificationArea.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.Windows.Forms; 4 | 5 | namespace XrmToolBox.Extensibility.UserControls 6 | { 7 | public partial class NotificationArea : UserControl 8 | { 9 | private Uri moreInfoUri; 10 | 11 | public NotificationArea() 12 | { 13 | InitializeComponent(); 14 | } 15 | 16 | private void Initialize(string message, Uri infoUri, int height = 30) 17 | { 18 | lblMessage.Text = message; 19 | Height = height; 20 | llLearMore.Visible = infoUri != null; 21 | moreInfoUri = infoUri; 22 | Visible = true; 23 | } 24 | 25 | public void ShowInfoNotification(string message, Uri infoUri, int height = 30) 26 | { 27 | Initialize(message, infoUri, height); 28 | 29 | pbNotif.Image = Icons.notif_icn_info16; 30 | } 31 | 32 | public void ShowWarningNotification(string message, Uri infoUri, int height = 30) 33 | { 34 | Initialize(message, infoUri, height); 35 | 36 | pbNotif.Image = Icons.notif_icn_alert16; 37 | } 38 | 39 | public void ShowErrorNotification(string message, Uri infoUri, int height = 30) 40 | { 41 | Initialize(message, infoUri, height); 42 | 43 | pbNotif.Image = Icons.notif_icn_crit16; 44 | } 45 | 46 | private void llDismiss_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 47 | { 48 | Visible = false; 49 | } 50 | 51 | private void llLearnMore_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 52 | { 53 | Process.Start(moreInfoUri.AbsoluteUri); 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/UserControls/PluginModel.cs: -------------------------------------------------------------------------------- 1 | // PROJECT : XrmToolBox 2 | // This project was developed by Tanguy Touzard 3 | // CODEPLEX: http://xrmtoolbox.codeplex.com 4 | // BLOG: http://mscrmtools.blogspot.com 5 | 6 | using System; 7 | using System.Drawing; 8 | using System.Drawing.Drawing2D; 9 | using System.Windows.Forms; 10 | using XrmToolBox.Extensibility.Forms; 11 | using XrmToolBox.Extensibility.Interfaces; 12 | 13 | namespace XrmToolBox.Extensibility.UserControls 14 | { 15 | public class PluginModel : UserControl 16 | { 17 | protected int numberOfDaysToShowNewRibbon = 7; 18 | 19 | #region Delegates 20 | 21 | public delegate void ClickedEventHandler(object sender, EventArgs e); 22 | 23 | #endregion Delegates 24 | 25 | #region Event Handlers 26 | 27 | public virtual event EventHandler Clicked; 28 | 29 | #endregion Event Handlers 30 | 31 | protected void DrawRotatedTextAt(Graphics gr, float angle, 32 | string txt, int x, int y, Font the_font, Brush the_brush) 33 | { 34 | // Save the graphics state. 35 | GraphicsState state = gr.Save(); 36 | gr.ResetTransform(); 37 | 38 | // Rotate. 39 | gr.RotateTransform(angle); 40 | 41 | // Translate to desired position. Be sure to append 42 | // the rotation so it occurs after the rotation. 43 | gr.TranslateTransform(x, y, MatrixOrder.Append); 44 | 45 | // Draw the text at the origin. 46 | gr.DrawString(txt, the_font, the_brush, 0, 0); 47 | 48 | // Restore the graphics state. 49 | gr.Restore(state); 50 | } 51 | 52 | protected void OpenPayPalDonationDialog() 53 | { 54 | if (((Lazy)Tag).Value is IPayPalPlugin pp) 55 | { 56 | using (var dialog = new CurrencySelectionDialog(pp)) 57 | { 58 | dialog.ShowDialog(Parent); 59 | } 60 | } 61 | } 62 | 63 | private void InitializeComponent() 64 | { 65 | this.SuspendLayout(); 66 | // 67 | // PluginModel 68 | // 69 | this.Name = "PluginModel"; 70 | this.ResumeLayout(false); 71 | } 72 | } 73 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/UserControls/SmallPluginLabel.cs: -------------------------------------------------------------------------------- 1 | using System.Drawing; 2 | using System.Windows.Forms; 3 | 4 | namespace XrmToolBox.Extensibility.UserControls 5 | { 6 | internal class SmallPluginLabel : Label 7 | { 8 | private Color primaryFontColor; 9 | private Color secondaryFontColor; 10 | 11 | public Color PrimaryFontColor 12 | { 13 | set { primaryFontColor = value; } 14 | } 15 | 16 | public Color SecondaryFontColor 17 | { 18 | set 19 | { 20 | secondaryFontColor = value; 21 | } 22 | } 23 | 24 | protected override void OnPaint(PaintEventArgs e) 25 | { 26 | Point drawPoint = new Point(0, 10); 27 | 28 | try 29 | { 30 | int indexOfBy = Text.IndexOf("by"); 31 | int indexOfSeparator = Text.IndexOf(" - ", indexOfBy); 32 | 33 | string firstPart = Text.Substring(0, indexOfBy); 34 | string secondPart = Text.Substring(indexOfBy, indexOfSeparator - indexOfBy); 35 | string thirdPart = Text.Remove(0, indexOfSeparator); 36 | 37 | Font normalFont = this.Font; 38 | 39 | Font smallFont = new Font(normalFont.FontFamily, normalFont.Size - 4); 40 | 41 | Size normalSize1 = TextRenderer.MeasureText(firstPart, normalFont); 42 | Size smallSize = TextRenderer.MeasureText(secondPart, smallFont); 43 | Size normalSize2 = TextRenderer.MeasureText(thirdPart, normalFont); 44 | 45 | Rectangle normalRect1 = new Rectangle(drawPoint, normalSize1); 46 | Rectangle smallRect = new Rectangle(new Point(normalSize1.Width - 10, 15), smallSize); 47 | Rectangle normalRect2 = new Rectangle(new Point(smallSize.Width + normalSize1.Width - 20, 10), normalSize2); 48 | 49 | TextRenderer.DrawText(e.Graphics, firstPart, normalFont, normalRect1, primaryFontColor); //ForeColor); 50 | TextRenderer.DrawText(e.Graphics, secondPart, smallFont, smallRect, secondaryFontColor);//Color.Gray); 51 | TextRenderer.DrawText(e.Graphics, thirdPart, normalFont, normalRect2, primaryFontColor); //ForeColor); 52 | } 53 | catch 54 | { 55 | TextRenderer.DrawText(e.Graphics, Text, Font, drawPoint, ForeColor); 56 | } 57 | } 58 | } 59 | } -------------------------------------------------------------------------------- /XrmToolBox.Extensibility/WorkAsyncInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel; 3 | using System.Windows.Forms; 4 | 5 | namespace XrmToolBox.Extensibility 6 | { 7 | public class WorkAsyncInfo 8 | { 9 | public WorkAsyncInfo() 10 | { 11 | Message = "Working..."; 12 | MessageWidth = 340; 13 | MessageHeight = 150; 14 | IsCancelable = false; 15 | } 16 | 17 | /// 18 | /// Constructor for non cancelable Work 19 | /// 20 | /// The message. 21 | /// The work. 22 | public WorkAsyncInfo(string message, Action work) : this(message, (s, e) => { work(e); }) 23 | { 24 | } 25 | 26 | /// 27 | /// Constructor for cancelable Work 28 | /// 29 | /// The message. 30 | /// The work. 31 | public WorkAsyncInfo(string message, Action work) : this(message) 32 | { 33 | Work = work; 34 | } 35 | 36 | private WorkAsyncInfo(string message) 37 | { 38 | Message = message; 39 | MessageWidth = 340; 40 | MessageHeight = 150; 41 | IsCancelable = false; 42 | } 43 | 44 | public object AsyncArgument { get; set; } 45 | public Control Host { get; set; } 46 | public bool IsCancelable { get; set; } 47 | public string Message { get; set; } 48 | public int MessageHeight { get; set; } 49 | 50 | public int MessageWidth { get; set; } 51 | 52 | public Action PostWorkCallBack { get; set; } 53 | 54 | public Action ProgressChanged { get; set; } 55 | 56 | /// 57 | /// Gets or sets the work to be performed Asynchronously. 58 | /// 59 | /// 60 | /// The work. 61 | /// 62 | public Action Work { get; set; } 63 | 64 | internal void PerformProgressChange(object worker, ProgressChangedEventArgs args) 65 | { 66 | ProgressChanged(args); 67 | } 68 | 69 | internal void PerformWork(object worker, DoWorkEventArgs args) 70 | { 71 | Work((BackgroundWorker)worker, args); 72 | } 73 | } 74 | } -------------------------------------------------------------------------------- /XrmToolBox.PluginsStore/ConnectionControlsUpdateSettings.cs: -------------------------------------------------------------------------------- 1 | using XrmToolBox.Extensibility.Interfaces; 2 | 3 | namespace XrmToolBox.PluginsStore 4 | { 5 | public class ConnectionControlsUpdateSettings : IConnectionControlUpdateSettings 6 | { 7 | public bool NewVersion { get; set; } 8 | public string ReleaseNotes { get; set; } 9 | public bool RestartNow { get; set; } 10 | public string Version { get; set; } 11 | } 12 | } -------------------------------------------------------------------------------- /XrmToolBox.PluginsStore/Extensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Linq; 4 | using System.Reflection; 5 | using XrmToolBox.Extensibility; 6 | using XrmToolBox.Extensibility.Interfaces; 7 | 8 | namespace XrmToolBox.PluginsStore 9 | { 10 | public static class FileInfoExtensions 11 | { 12 | /// 13 | /// Checks if the current file contains types that implement 14 | /// IXrmToolBoxPlugin interface 15 | /// 16 | /// Current file info 17 | /// Value that indicates if the current file contains types that implement 18 | /// IXrmToolBoxPlugin interface 19 | public static bool ImplementsXrmToolBoxPlugin(this FileInfo fi) 20 | { 21 | try 22 | { 23 | var assembly = Assembly.LoadFile(fi.FullName); 24 | 25 | foreach (var type in assembly.GetTypes()) 26 | { 27 | if (type.GetInterfaces().Contains(typeof(IXrmToolBoxPlugin))) 28 | { 29 | return true; 30 | } 31 | } 32 | return false; 33 | } 34 | catch (Exception error) 35 | { 36 | var lm = new LogManager(typeof(StoreFromPortal)); 37 | lm.LogError($"Unable to check if {fi.Name} is implementing interface IXrmToolBoxPlugin: {error.Message}"); 38 | return false; 39 | } 40 | } 41 | } 42 | } -------------------------------------------------------------------------------- /XrmToolBox.PluginsStore/InstallationInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | using System.Xml; 6 | using XrmToolBox.Extensibility; 7 | 8 | namespace XrmToolBox.PluginsStore 9 | { 10 | public class InstallationInfo 11 | { 12 | private const string OptionFileName = "XrmToolBox.Installation.xml"; 13 | 14 | private static InstallationInfo instance; 15 | 16 | private InstallationInfo() 17 | { 18 | } 19 | 20 | public static InstallationInfo Instance 21 | { 22 | get 23 | { 24 | if (instance == null) 25 | { 26 | instance = Load(); 27 | } 28 | 29 | if (instance?.InstallationId == Guid.Empty) 30 | { 31 | instance?.Save(); 32 | } 33 | 34 | return instance; 35 | } 36 | } 37 | 38 | public Guid InstallationId { get; set; } 39 | public DateTime InstallationDate { get; set; } = DateTime.Now; 40 | 41 | public void Save() 42 | { 43 | if (InstallationId == Guid.Empty) 44 | { 45 | InstallationId = Guid.NewGuid(); 46 | } 47 | if (!Directory.Exists(Paths.SettingsPath)) 48 | { 49 | Directory.CreateDirectory(Paths.SettingsPath); 50 | } 51 | 52 | var settingsFile = Path.Combine(Paths.SettingsPath, OptionFileName); 53 | 54 | XmlSerializerHelper.SerializeToFile(this, settingsFile); 55 | } 56 | 57 | private static InstallationInfo Load() 58 | { 59 | if (!Directory.Exists(Paths.SettingsPath)) 60 | { 61 | Directory.CreateDirectory(Paths.SettingsPath); 62 | } 63 | 64 | var settingsFile = Path.Combine(Paths.SettingsPath, OptionFileName); 65 | 66 | if (File.Exists(settingsFile)) 67 | { 68 | try 69 | { 70 | var document = new XmlDocument(); 71 | document.Load(settingsFile); 72 | 73 | return (InstallationInfo)XmlSerializerHelper.Deserialize(document.OuterXml, typeof(InstallationInfo)); 74 | } 75 | catch { } 76 | } 77 | return new InstallationInfo(); 78 | } 79 | } 80 | } -------------------------------------------------------------------------------- /XrmToolBox.PluginsStore/LicenseAcceptanceForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Windows.Forms; 5 | using XrmToolBox.PluginsStore.DTO; 6 | 7 | namespace XrmToolBox.PluginsStore 8 | { 9 | public partial class LicenseAcceptanceForm : Form 10 | { 11 | public LicenseAcceptanceForm(List plugins) 12 | { 13 | InitializeComponent(); 14 | 15 | SetStyle( 16 | ControlStyles.AllPaintingInWmPaint | 17 | ControlStyles.UserPaint | 18 | ControlStyles.DoubleBuffer, 19 | true); 20 | 21 | foreach (var plugin in plugins.OrderByDescending(p => p.Name)) 22 | { 23 | pnlLicenses.Controls.Add(new PluginLicense(plugin) { Dock = DockStyle.Top }); 24 | } 25 | } 26 | 27 | private void btnDecline_Click(object sender, EventArgs e) 28 | { 29 | Close(); 30 | } 31 | 32 | private void btnAccept_Click(object sender, EventArgs e) 33 | { 34 | Close(); 35 | } 36 | } 37 | } -------------------------------------------------------------------------------- /XrmToolBox.PluginsStore/PluginDeletions.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Xml.Serialization; 3 | 4 | namespace XrmToolBox.PluginsStore 5 | { 6 | public class PluginDeletion 7 | { 8 | [XmlIgnore] 9 | public List ConfictedPackages { get; set; } 10 | 11 | [XmlIgnore] 12 | public bool Conflict { get; set; } 13 | 14 | public List Files { get; set; } 15 | } 16 | 17 | public class PluginDeletions 18 | { 19 | public PluginDeletions() 20 | { 21 | Plugins = new List(); 22 | } 23 | 24 | public List Plugins { get; set; } 25 | 26 | public int PreviousProcessId { get; set; } 27 | } 28 | } -------------------------------------------------------------------------------- /XrmToolBox.PluginsStore/PluginLicense.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.Windows.Forms; 4 | using XrmToolBox.PluginsStore.DTO; 5 | 6 | namespace XrmToolBox.PluginsStore 7 | { 8 | public partial class PluginLicense : UserControl 9 | { 10 | private readonly XtbPlugin plugin; 11 | 12 | public PluginLicense(XtbPlugin plugin) 13 | { 14 | InitializeComponent(); 15 | 16 | lblPluginName.Text = plugin.Name; 17 | lblAuthors.Text = string.Format(lblAuthors.Tag.ToString(), plugin.Authors); 18 | 19 | this.plugin = plugin; 20 | } 21 | 22 | private void llLicense_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 23 | { 24 | if (string.IsNullOrEmpty(plugin.LicenseUrl)) 25 | { 26 | MessageBox.Show(this, @"License url is empty!", @"Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 27 | return; 28 | } 29 | 30 | if (!Uri.TryCreate(plugin.LicenseUrl, UriKind.Absolute, out Uri _)) 31 | { 32 | MessageBox.Show(this, @"License url is not a valid URI!", @"Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 33 | return; 34 | } 35 | 36 | Process.Start(plugin.LicenseUrl); 37 | } 38 | } 39 | } -------------------------------------------------------------------------------- /XrmToolBox.PluginsStore/PluginUpdates.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace XrmToolBox.PluginsStore 4 | { 5 | public class PluginUpdate 6 | { 7 | public string Destination { get; set; } 8 | public string Source { get; set; } 9 | public bool RequireRestart { get; set; } 10 | } 11 | 12 | public class PluginUpdates 13 | { 14 | public PluginUpdates() 15 | { 16 | Plugins = new List(); 17 | } 18 | 19 | public List Plugins { get; set; } 20 | 21 | public int PreviousProcessId { get; set; } 22 | } 23 | } -------------------------------------------------------------------------------- /XrmToolBox.PluginsStore/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | 4 | // Les informations générales relatives à un assembly dépendent de 5 | // l'ensemble d'attributs suivant. Changez les valeurs de ces attributs pour modifier les informations 6 | // associées à un assembly. 7 | [assembly: AssemblyTitle("XrmToolBox.PluginsStore")] 8 | [assembly: AssemblyDescription("Plugins Store for XrmToolBox")] 9 | [assembly: AssemblyConfiguration("")] 10 | [assembly: AssemblyCompany("MscrmTools")] 11 | [assembly: AssemblyProduct("XrmToolBox.PluginsStore")] 12 | [assembly: AssemblyCopyright("Copyright © MscrmTools 2016")] 13 | [assembly: AssemblyTrademark("")] 14 | [assembly: AssemblyCulture("")] 15 | 16 | // L'affectation de la valeur false à ComVisible rend les types invisibles dans cet assembly 17 | // aux composants COM. Si vous devez accéder à un type dans cet assembly à partir de 18 | // COM, affectez la valeur true à l'attribut ComVisible sur ce type. 19 | [assembly: ComVisible(false)] 20 | 21 | // Le GUID suivant est pour l'ID de la typelib si ce projet est exposé à COM 22 | [assembly: Guid("ebcb3d22-03f2-40d2-b949-05cae575f2ea")] 23 | 24 | // Les informations de version pour un assembly se composent des quatre valeurs suivantes : 25 | // 26 | // Version principale 27 | // Version secondaire 28 | // Numéro de build 29 | // Révision 30 | // 31 | // Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut 32 | // en utilisant '*', comme indiqué ci-dessous : 33 | // [assembly: AssemblyVersion("1.0.*")] 34 | [assembly: AssemblyVersion("1.2023.1.63")] 35 | [assembly: AssemblyFileVersion("1.2023.1.63")] -------------------------------------------------------------------------------- /XrmToolBox.PluginsStore/ProxySettingsHelper.cs: -------------------------------------------------------------------------------- 1 | using McTools.Xrm.Connection.WinForms; 2 | using NuGet.Configuration; 3 | using System.Text.RegularExpressions; 4 | using System.Windows.Forms; 5 | 6 | namespace XrmToolBox.PluginsStore 7 | { 8 | public class ProxySettingsHelper 9 | { 10 | private const string KEY_HTTP_PROXY = "http_proxy"; 11 | private const string KEY_HTTP_PROXY_PASSWORD = "http_proxy.password"; 12 | private const string KEY_HTTP_PROXY_USER = "http_proxy.user"; 13 | 14 | public static void registerSettings(Form parentForm) 15 | { 16 | using (ProxySettingsForm frmProxy = new ProxySettingsForm 17 | { 18 | StartPosition = FormStartPosition.CenterParent 19 | }) 20 | { 21 | var settings = Settings.LoadDefaultSettings("c:\\temp"); 22 | var proxyInfos = SettingsUtility.GetConfigValue(settings, KEY_HTTP_PROXY); 23 | 24 | if (proxyInfos == null) 25 | { 26 | proxyInfos = ""; 27 | } 28 | 29 | Match m = Regex.Match(proxyInfos, @"http://(.*)?:(.*)", RegexOptions.IgnoreCase); 30 | 31 | if (m.Success) 32 | { 33 | frmProxy.UseCustomProxy = true; 34 | 35 | frmProxy.proxyAddress = m.Groups[1].Value; 36 | 37 | frmProxy.proxyPort = m.Groups[2].Value; 38 | } 39 | else 40 | { 41 | frmProxy.UseCustomProxy = false; 42 | 43 | frmProxy.proxyAddress = ""; 44 | 45 | frmProxy.proxyPort = ""; 46 | } 47 | 48 | if (frmProxy.ShowDialog(parentForm) == DialogResult.OK) 49 | { 50 | if (frmProxy.UseCustomProxy) 51 | { 52 | SettingsUtility.SetConfigValue(settings, KEY_HTTP_PROXY, string.Format("http://{0}:{1}", frmProxy.proxyAddress, frmProxy.proxyPort)); 53 | } 54 | else 55 | { 56 | SettingsUtility.DeleteConfigValue(settings, KEY_HTTP_PROXY); 57 | SettingsUtility.DeleteConfigValue(settings, KEY_HTTP_PROXY_USER); 58 | SettingsUtility.DeleteConfigValue(settings, KEY_HTTP_PROXY_PASSWORD); 59 | } 60 | MessageBox.Show("You need to restart XrmToolbox for changes to take effect"); 61 | } 62 | } 63 | } 64 | } 65 | } -------------------------------------------------------------------------------- /XrmToolBox.PluginsStore/ToolInformationEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace XrmToolBox.PluginsStore 4 | { 5 | public class ToolInformationEventArgs : EventArgs 6 | { 7 | public int ProgressPercentage { get; internal set; } 8 | public string ToolName { get; set; } 9 | } 10 | } -------------------------------------------------------------------------------- /XrmToolBox.PluginsStore/XmlSerializerHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Text; 4 | using System.Xml.Serialization; 5 | 6 | namespace XrmToolBox.PluginsStore 7 | { 8 | /// 9 | /// Classe utilitaire permettant de réaliser des opérations de 10 | /// sérialisation et de déserialization 11 | /// 12 | public class XmlSerializerHelper 13 | { 14 | /// 15 | /// Deserialize un contenu xml de type chaine de caractère en 16 | /// une instance de la classe du type spécifié 17 | /// 18 | /// Contenu xml 19 | /// Type de l'objet de destination 20 | /// Objet déserialisé 21 | public static object Deserialize(string xmlContent, Type objectType) 22 | { 23 | StringReader reader = new StringReader(xmlContent); 24 | XmlSerializer s = new XmlSerializer(objectType); 25 | return s.Deserialize(reader); 26 | } 27 | 28 | /// 29 | /// Sérialise un objet sous forme de chaine de caractère Xml 30 | /// 31 | /// Objet à sérialiser 32 | /// Chaine résultante 33 | public static string Serialize(object o) 34 | { 35 | try 36 | { 37 | XmlSerializer s = new XmlSerializer(o.GetType()); 38 | StringBuilder builder = new StringBuilder(); 39 | using (StringWriter writer = new StringWriter(builder)) 40 | { 41 | s.Serialize(writer, o); 42 | } 43 | return builder.ToString(); 44 | } 45 | catch (Exception error) 46 | { 47 | throw new Exception("Error while serializing: " + error.Message); 48 | } 49 | } 50 | 51 | /// 52 | /// Sérialize un objet dans un fichier 53 | /// 54 | /// Objet à sérialiser 55 | /// Chemin du fichier de destination 56 | public static void SerializeToFile(object o, string path) 57 | { 58 | try 59 | { 60 | XmlSerializer s = new XmlSerializer(o.GetType()); 61 | 62 | using (StreamWriter writer = new StreamWriter(path, false)) 63 | { 64 | s.Serialize(writer, o); 65 | } 66 | } 67 | catch (Exception error) 68 | { 69 | throw new Exception("Error while serializing: " + error.Message); 70 | } 71 | } 72 | } 73 | } -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/AppCode/ConnectionControlsUpdateSettings.cs: -------------------------------------------------------------------------------- 1 | using XrmToolBox.Extensibility.Interfaces; 2 | 3 | namespace XrmToolBox.ToolLibrary.AppCode 4 | { 5 | public class ConnectionControlsUpdateSettings : IConnectionControlUpdateSettings 6 | { 7 | public bool NewVersion { get; set; } 8 | public string ReleaseNotes { get; set; } 9 | public bool RestartNow { get; set; } 10 | public string Version { get; set; } 11 | } 12 | } -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/AppCode/Extensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace XrmToolBox.ToolLibrary.AppCode 5 | { 6 | internal static class Extensions 7 | { 8 | public static void SetAutoWidth(this Label label) 9 | { 10 | label.Width = TextRenderer.MeasureText(label.Text, label.Font).Width; 11 | } 12 | 13 | public static void SetAutoWidth(this LinkLabel label) 14 | { 15 | label.Width = TextRenderer.MeasureText(label.Text, label.Font).Width; 16 | } 17 | 18 | public static void SetAutoWidth(this ComboBox combobox) 19 | { 20 | string longestWord = ""; 21 | 22 | foreach (object item in combobox.Items) 23 | { 24 | if (item.ToString().Length > longestWord.Length) 25 | { 26 | longestWord = item.ToString(); 27 | } 28 | } 29 | 30 | combobox.Width = TextRenderer.MeasureText(longestWord, combobox.Font).Width + 16; 31 | } 32 | 33 | public static Version Simplify(this Version version) 34 | { 35 | if (version.Revision != -1) 36 | return version; 37 | 38 | return new Version( 39 | version.Major == -1 ? 0 : version.Major, 40 | version.Minor == -1 ? 0 : version.Minor, 41 | version.Build == -1 ? 0 : version.Build, 42 | version.Revision == -1 ? 0 : version.Revision); 43 | } 44 | } 45 | } -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/AppCode/OpenPluginEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace XrmToolBox.ToolLibrary.AppCode 4 | { 5 | public class OpenPluginEventArgs : EventArgs 6 | { 7 | public XtbPlugin Plugin { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/AppCode/PackageVersion.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace XrmToolBox.ToolLibrary.AppCode 4 | { 5 | public class PackageVersion 6 | { 7 | public PackageVersion(string packageName, string version, string releaseNotes, byte[] content) 8 | { 9 | var versionParts = version.Split('-'); 10 | 11 | Version = new Version(versionParts[0]); 12 | 13 | if (versionParts.Length > 1) 14 | { 15 | Release = versionParts[1]; 16 | IsPrerelease = true; 17 | } 18 | 19 | PackageName = packageName; 20 | Content = content; 21 | ReleaseNotes = releaseNotes; 22 | } 23 | 24 | public byte[] Content { get; } 25 | public bool IsPrerelease { get; } 26 | public string PackageName { get; } 27 | public string Release { get; } 28 | public string ReleaseNotes { get; } 29 | public Version Version { get; } 30 | 31 | public override string ToString() 32 | { 33 | return $"{Version}{(IsPrerelease ? "-" + Release : "")}"; 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/AppCode/PluginDeletions.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Xml.Serialization; 3 | 4 | namespace XrmToolBox.ToolLibrary.AppCode 5 | { 6 | public class PluginDeletion 7 | { 8 | [XmlIgnore] 9 | public List ConfictedPackages { get; set; } 10 | 11 | [XmlIgnore] 12 | public bool Conflict { get; set; } 13 | 14 | public List Files { get; set; } 15 | public string Name { get; set; } 16 | } 17 | 18 | public class PluginDeletions 19 | { 20 | public PluginDeletions() 21 | { 22 | Plugins = new List(); 23 | } 24 | 25 | public List Plugins { get; set; } 26 | 27 | public int PreviousProcessId { get; set; } 28 | } 29 | } -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/AppCode/PluginUpdates.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace XrmToolBox.ToolLibrary.AppCode 4 | { 5 | public class PluginUpdate 6 | { 7 | public string Destination { get; set; } 8 | public string Name { get; set; } 9 | public bool RequireRestart { get; set; } 10 | public string Source { get; set; } 11 | } 12 | 13 | public class PluginUpdates 14 | { 15 | public PluginUpdates() 16 | { 17 | Plugins = new List(); 18 | } 19 | 20 | public List Plugins { get; set; } 21 | 22 | public int PreviousProcessId { get; set; } 23 | } 24 | } -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/AppCode/SerializerHelper.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | using System.Runtime.Serialization; 3 | using System.Runtime.Serialization.Json; 4 | using System.Text; 5 | 6 | namespace XrmToolBox.ToolLibrary.AppCode 7 | { 8 | public class SerializerHelper 9 | { 10 | public static T ReadObject(Stream content) 11 | { 12 | var serializer = new DataContractJsonSerializer(typeof(T), new DataContractJsonSerializerSettings 13 | { 14 | UseSimpleDictionaryFormat = true 15 | }); 16 | 17 | return (T)serializer.ReadObject(content); 18 | } 19 | 20 | public static T ReadObject(Stream content, DateTimeFormat dtf) 21 | { 22 | var settings = new DataContractJsonSerializerSettings 23 | { 24 | UseSimpleDictionaryFormat = true, 25 | }; 26 | 27 | if (dtf != null) 28 | { 29 | settings.DateTimeFormat = dtf; 30 | } 31 | 32 | var serializer = new DataContractJsonSerializer(typeof(T), settings); 33 | 34 | return (T)serializer.ReadObject(content); 35 | } 36 | 37 | public static T ReadObject(string content, DateTimeFormat dtf = null) 38 | { 39 | var settings = new DataContractJsonSerializerSettings 40 | { 41 | UseSimpleDictionaryFormat = true, 42 | }; 43 | 44 | if (dtf != null) 45 | { 46 | settings.DateTimeFormat = dtf; 47 | } 48 | 49 | var serializer = new DataContractJsonSerializer(typeof(T), settings); 50 | 51 | return (T)serializer.ReadObject(new MemoryStream(Encoding.UTF8.GetBytes(content))); 52 | } 53 | 54 | public static string WriteObject(T content, Encoding encoding, DateTimeFormat dtf = null) 55 | { 56 | var settings = new DataContractJsonSerializerSettings 57 | { 58 | UseSimpleDictionaryFormat = true, 59 | }; 60 | 61 | if (dtf != null) 62 | { 63 | settings.DateTimeFormat = dtf; 64 | } 65 | 66 | var serializer = new DataContractJsonSerializer(typeof(T), settings); 67 | 68 | MemoryStream stream = new MemoryStream(); 69 | serializer.WriteObject(stream, content); 70 | 71 | return encoding.GetString(stream.ToArray()); 72 | } 73 | } 74 | } -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/AppCode/ToolLibrarySettings.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using XrmToolBox.Extensibility.Interfaces; 3 | 4 | namespace XrmToolBox.ToolLibrary.AppCode 5 | { 6 | public class ToolLibrarySettings : IToolLibrarySettings 7 | { 8 | public string AdditionalRepositories { get; set; } 9 | public bool ByPassProxyOnLocal { get; set; } 10 | public bool DisplayPluginsStoreOnlyIfUpdates { get; set; } 11 | public bool DisplayPluginsStoreOnStartup { get; set; } 12 | public bool LibraryFilterMvp { get; set; } 13 | public bool LibraryFilterNew { get; set; } 14 | public bool LibraryFilterOpenSource { get; set; } 15 | public bool LibraryFilterRating { get; set; } 16 | public bool LibraryShowIncompatible { get; set; } 17 | public bool LibraryShowInstalled { get; set; } = true; 18 | public bool LibraryShowNotInstalled { get; set; } = true; 19 | public bool LibraryShowUpdates { get; set; } = true; 20 | public int MostRatedMinNumberOfVotes { get; set; } 21 | public decimal MostRatedMinRatingAverage { get; set; } 22 | public string Password { get; set; } 23 | public string ProxyAddress { get; set; } 24 | public string RepositoryUrl { get; set; } 25 | public bool UseCustomProxy { get; set; } 26 | public bool UseDefaultCredentials { get; set; } 27 | public bool UseInternetExplorerProxy { get; set; } 28 | public string UserName { get; set; } 29 | } 30 | } -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/AppCode/ToolOperationEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace XrmToolBox.ToolLibrary.AppCode 4 | { 5 | public class ToolOperationEventArgs : EventArgs 6 | { 7 | private bool succeeded; 8 | 9 | public ToolOperationEventArgs(bool isInstallation, XtbPlugin plugin, Version version, string downloadUrl) 10 | { 11 | IsInstallation = isInstallation; 12 | Plugin = plugin; 13 | Version = version; 14 | DownloadUrl = downloadUrl; 15 | } 16 | 17 | public event EventHandler OnOperationCompleted; 18 | 19 | public string DownloadUrl { get; } 20 | public bool IsInstallation { get; } 21 | public XtbPlugin Plugin { get; } 22 | 23 | public bool Succeeded 24 | { 25 | get 26 | { 27 | return succeeded; 28 | } 29 | internal set 30 | { 31 | succeeded = value; 32 | OnOperationCompleted?.Invoke(this, value); 33 | } 34 | } 35 | 36 | public Version Version { get; } 37 | } 38 | } -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/AppCode/XmlSerializerHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Text; 4 | using System.Xml.Serialization; 5 | 6 | namespace XrmToolBox.ToolLibrary.AppCode 7 | { 8 | /// 9 | /// Classe utilitaire permettant de réaliser des opérations de 10 | /// sérialisation et de déserialization 11 | /// 12 | public class XmlSerializerHelper 13 | { 14 | /// 15 | /// Deserialize un contenu xml de type chaine de caractère en 16 | /// une instance de la classe du type spécifié 17 | /// 18 | /// Contenu xml 19 | /// Type de l'objet de destination 20 | /// Objet déserialisé 21 | public static object Deserialize(string xmlContent, Type objectType) 22 | { 23 | StringReader reader = new StringReader(xmlContent); 24 | XmlSerializer s = new XmlSerializer(objectType); 25 | return s.Deserialize(reader); 26 | } 27 | 28 | /// 29 | /// Sérialise un objet sous forme de chaine de caractère Xml 30 | /// 31 | /// Objet à sérialiser 32 | /// Chaine résultante 33 | public static string Serialize(object o) 34 | { 35 | try 36 | { 37 | XmlSerializer s = new XmlSerializer(o.GetType()); 38 | StringBuilder builder = new StringBuilder(); 39 | using (StringWriter writer = new StringWriter(builder)) 40 | { 41 | s.Serialize(writer, o); 42 | } 43 | return builder.ToString(); 44 | } 45 | catch (Exception error) 46 | { 47 | throw new Exception("Error while serializing: " + error.Message); 48 | } 49 | } 50 | 51 | /// 52 | /// Sérialize un objet dans un fichier 53 | /// 54 | /// Objet à sérialiser 55 | /// Chemin du fichier de destination 56 | public static void SerializeToFile(object o, string path) 57 | { 58 | try 59 | { 60 | XmlSerializer s = new XmlSerializer(o.GetType()); 61 | 62 | using (StreamWriter writer = new StreamWriter(path, false)) 63 | { 64 | s.Serialize(writer, o); 65 | } 66 | } 67 | catch (Exception error) 68 | { 69 | throw new Exception("Error while serializing: " + error.Message); 70 | } 71 | } 72 | } 73 | } -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Forms/LicenseAcceptanceForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Windows.Forms; 5 | using XrmToolBox.ToolLibrary.AppCode; 6 | using XrmToolBox.ToolLibrary.UserControls; 7 | 8 | namespace XrmToolBox.ToolLibrary.Forms 9 | { 10 | public partial class LicenseAcceptanceForm : Form 11 | { 12 | public LicenseAcceptanceForm(List plugins) 13 | { 14 | InitializeComponent(); 15 | 16 | SetStyle( 17 | ControlStyles.AllPaintingInWmPaint | 18 | ControlStyles.UserPaint | 19 | ControlStyles.DoubleBuffer, 20 | true); 21 | 22 | foreach (var plugin in plugins.OrderByDescending(p => p.Name)) 23 | { 24 | pnlLicenses.Controls.Add(new PluginLicense(plugin) { Dock = DockStyle.Top }); 25 | } 26 | } 27 | 28 | private void btnAccept_Click(object sender, EventArgs e) 29 | { 30 | Close(); 31 | } 32 | 33 | private void btnDecline_Click(object sender, EventArgs e) 34 | { 35 | Close(); 36 | } 37 | } 38 | } -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | 4 | // Les informations générales relatives à un assembly dépendent de 5 | // l'ensemble d'attributs suivant. Changez les valeurs de ces attributs pour modifier les informations 6 | // associées à un assembly. 7 | [assembly: AssemblyTitle("XrmToolBox.ToolLibrary")] 8 | [assembly: AssemblyDescription("")] 9 | [assembly: AssemblyConfiguration("")] 10 | [assembly: AssemblyCompany("")] 11 | [assembly: AssemblyProduct("XrmToolBox.ToolLibrary")] 12 | [assembly: AssemblyCopyright("Copyright © 2023")] 13 | [assembly: AssemblyTrademark("")] 14 | [assembly: AssemblyCulture("")] 15 | 16 | // L'affectation de la valeur false à ComVisible rend les types invisibles dans cet assembly 17 | // aux composants COM. Si vous devez accéder à un type dans cet assembly à partir de 18 | // COM, affectez la valeur true à l'attribut ComVisible sur ce type. 19 | [assembly: ComVisible(false)] 20 | 21 | // Le GUID suivant est pour l'ID de la typelib si ce projet est exposé à COM 22 | [assembly: Guid("626aeba8-4315-4d82-b8b9-b94200fd7589")] 23 | 24 | // Les informations de version pour un assembly se composent des quatre valeurs suivantes : 25 | // 26 | // Version principale 27 | // Version secondaire 28 | // Numéro de build 29 | // Révision 30 | // 31 | // Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut 32 | // en utilisant '*', comme indiqué ci-dessous : 33 | // [assembly: AssemblyVersion("1.0.*")] 34 | [assembly: AssemblyVersion("1.2024.9.69")] 35 | [assembly: AssemblyFileVersion("1.2024.9.69")] -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/ClearCache.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/ClearCache.png -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/Download32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/Download32.png -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/Error32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/Error32.png -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/Incompatible.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/Incompatible.png -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/Install32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/Install32.png -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/New.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/New.png -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/NewToInstall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/NewToInstall.png -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/No32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/No32.png -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/NoLogo100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/NoLogo100.png -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/Open16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/Open16.png -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/Open32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/Open32.png -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/Pending32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/Pending32.png -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/PluginsStore32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/PluginsStore32.png -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/Refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/Refresh.png -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/RefreshImages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/RefreshImages.png -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/Restart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/Restart.png -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/Settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/Settings.png -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/StatusInvalid.18.18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/StatusInvalid.18.18.png -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/StatusOK.18.18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/StatusOK.18.18.png -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/StatusUpdateAvailable.18.18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/StatusUpdateAvailable.18.18.png -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/Success32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/Success32.png -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/Uninstall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/Uninstall.png -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/Update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/Update.png -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/github.png -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/mvp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/mvp.png -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/progress.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/progress.gif -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/Resources/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox.ToolLibrary/Resources/star.png -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/UserControls/InstallProgressControl.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace XrmToolBox.ToolLibrary.UserControls 5 | { 6 | public partial class InstallProgressControl : UserControl 7 | { 8 | public InstallProgressControl() 9 | { 10 | InitializeComponent(); 11 | } 12 | 13 | public event EventHandler OnCloseRequested; 14 | 15 | public bool IsSuccess { get; private set; } = true; 16 | 17 | public void AddDownloadStep(string toolName) 18 | { 19 | var step = new ProgressStepControl($"Downloading {toolName}", Resource.Download32); 20 | step.Dock = DockStyle.Top; 21 | step.Height = 52; 22 | 23 | pnlMain.Controls.Add(step); 24 | pnlMain.Controls.SetChildIndex(step, 0); 25 | 26 | pnlMain.ScrollControlIntoView(step); 27 | } 28 | 29 | public void AddInstallStep(string toolName) 30 | { 31 | var step = new ProgressStepControl($"Installing {toolName}", Resource.Install32); 32 | step.Dock = DockStyle.Top; 33 | step.Height = 52; 34 | 35 | pnlMain.Controls.Add(step); 36 | pnlMain.Controls.SetChildIndex(step, 0); 37 | 38 | pnlMain.ScrollControlIntoView(step); 39 | } 40 | 41 | public void End() 42 | { 43 | btnClose.Enabled = true; 44 | } 45 | 46 | public void SetError(string message) 47 | { 48 | ((ProgressStepControl)pnlMain.Controls[0]).SetFailure(message); 49 | IsSuccess = false; 50 | } 51 | 52 | public void SetSuccess(bool pending = false) 53 | { 54 | ((ProgressStepControl)pnlMain.Controls[0]).SetSuccess(pending); 55 | 56 | btnRestart.Visible = pending; 57 | } 58 | 59 | private void btnClose_Click(object sender, EventArgs e) 60 | { 61 | OnCloseRequested?.Invoke(this, new EventArgs()); 62 | } 63 | 64 | private void btnRestart_Click(object sender, EventArgs e) 65 | { 66 | Application.Restart(); 67 | } 68 | } 69 | } -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/UserControls/PluginLicense.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.Windows.Forms; 4 | using XrmToolBox.ToolLibrary.AppCode; 5 | 6 | namespace XrmToolBox.ToolLibrary.UserControls 7 | { 8 | public partial class PluginLicense : UserControl 9 | { 10 | private readonly XtbPlugin plugin; 11 | 12 | public PluginLicense(XtbPlugin plugin) 13 | { 14 | InitializeComponent(); 15 | 16 | lblPluginName.Text = plugin.Name; 17 | lblAuthors.Text = string.Format(lblAuthors.Tag.ToString(), plugin.Authors); 18 | 19 | this.plugin = plugin; 20 | } 21 | 22 | private void llLicense_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 23 | { 24 | if (string.IsNullOrEmpty(plugin.LicenseUrl)) 25 | { 26 | MessageBox.Show(this, @"License url is empty!", @"Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 27 | return; 28 | } 29 | 30 | if (!Uri.TryCreate(plugin.LicenseUrl, UriKind.Absolute, out Uri _)) 31 | { 32 | MessageBox.Show(this, @"License url is not a valid URI!", @"Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 33 | return; 34 | } 35 | 36 | Process.Start(plugin.LicenseUrl); 37 | } 38 | } 39 | } -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/UserControls/ProgressStepControl.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using System.Windows.Forms; 4 | using XrmToolBox.ToolLibrary.AppCode; 5 | 6 | namespace XrmToolBox.ToolLibrary.UserControls 7 | { 8 | public partial class ProgressStepControl : UserControl 9 | { 10 | private ToolTip tooltip = new ToolTip(); 11 | 12 | public ProgressStepControl(string actionText, Image img) 13 | { 14 | InitializeComponent(); 15 | 16 | lblAction.Text = actionText; 17 | pbAction.Image = img; 18 | lblAction.SetAutoWidth(); 19 | lblAction.Width += 40; 20 | 21 | pbAction.Size = new Size(32, 32); 22 | pbState.Size = new Size(32, 32); 23 | Height = 52; 24 | pnlAction.Size = new Size(52, 52); 25 | pnlState.Size = new Size(52, 52); 26 | } 27 | 28 | public void SetFailure(string errorMessage) 29 | { 30 | pbState.Image = Resource.Error32; 31 | tooltip.SetToolTip(pbState, errorMessage); 32 | } 33 | 34 | public void SetSuccess(bool pending = false) 35 | { 36 | pbState.Image = pending ? Resource.Pending32 : Resource.Success32; 37 | } 38 | } 39 | } -------------------------------------------------------------------------------- /XrmToolBox.ToolLibrary/app.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /XrmToolBox/AbstractControlDescriptionProvider.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Linq; 5 | using System.Text; 6 | 7 | namespace XrmToolBox 8 | { 9 | public class AbstractControlDescriptionProvider : TypeDescriptionProvider 10 | { 11 | public AbstractControlDescriptionProvider() 12 | : base(TypeDescriptor.GetProvider(typeof(TAbstract))) 13 | { 14 | } 15 | 16 | public override Type GetReflectionType(Type objectType, object instance) 17 | { 18 | if (objectType.FullName == typeof(TAbstract).FullName) 19 | return typeof(TBase); 20 | 21 | return base.GetReflectionType(objectType, instance); 22 | } 23 | 24 | public override object CreateInstance(IServiceProvider provider, Type objectType, Type[] argTypes, object[] args) 25 | { 26 | if (objectType.FullName == typeof(TAbstract).FullName) 27 | objectType = typeof(TBase); 28 | 29 | return base.CreateInstance(provider, objectType, argTypes, args); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /XrmToolBox/Announcement/AnnouncementDialog.cs: -------------------------------------------------------------------------------- 1 | using System.Diagnostics; 2 | using System.Windows.Forms; 3 | 4 | namespace XrmToolBox.Announcement 5 | { 6 | public partial class AnnouncementDialog : Form 7 | { 8 | private readonly AnnouncementItem item; 9 | 10 | public AnnouncementDialog(AnnouncementItem item) 11 | { 12 | InitializeComponent(); 13 | 14 | try 15 | { 16 | this.item = item; 17 | int titleHeight = RectangleToScreen(ClientRectangle).Top - Top; 18 | 19 | var image = item.Image; 20 | Height = image.Height + pnlFooter.Height + titleHeight; 21 | Width = image.Width; 22 | 23 | pbImage.Image = image; 24 | pbImage.SizeMode = PictureBoxSizeMode.StretchImage; 25 | 26 | if (AnnouncementSettings.Instance.LastShown.Contains(item.Id)) 27 | { 28 | AnnouncementSettings.Instance.LastShown.Remove(item.Id); 29 | } 30 | 31 | AnnouncementSettings.Instance.LastShown.Add(item.Id); 32 | } 33 | catch 34 | { 35 | IsInvalid = true; 36 | } 37 | } 38 | 39 | public bool IsInvalid { get; } 40 | 41 | private void llForget_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 42 | { 43 | if (!AnnouncementSettings.Instance.ToHide.Contains(item.Id)) 44 | AnnouncementSettings.Instance.ToHide.Add(item.Id); 45 | AnnouncementSettings.Instance.Save(); 46 | Close(); 47 | } 48 | 49 | private void llMoreInfo_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 50 | { 51 | Process.Start(item.Url); 52 | Close(); 53 | } 54 | 55 | private void pbImage_Click(object sender, System.EventArgs e) 56 | { 57 | Process.Start(item.Url); 58 | Close(); 59 | } 60 | } 61 | } -------------------------------------------------------------------------------- /XrmToolBox/Announcement/AnnouncementSettings.cs: -------------------------------------------------------------------------------- 1 | using McTools.Xrm.Connection; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.IO; 5 | using System.Xml; 6 | using XrmToolBox.Extensibility; 7 | 8 | namespace XrmToolBox.Announcement 9 | { 10 | public class AnnouncementSettings 11 | { 12 | private const string FileName = "XrmToolBox.Announcements.xml"; 13 | private static AnnouncementSettings instance; 14 | 15 | private AnnouncementSettings() 16 | { 17 | } 18 | 19 | public static AnnouncementSettings Instance => instance ?? (instance = Load()); 20 | 21 | public List LastShown { get; set; } = new List(); 22 | public DateTime LastShownDate { get; set; } 23 | public List ToHide { get; set; } = new List(); 24 | 25 | public void Save() 26 | { 27 | if (!Directory.Exists(Paths.SettingsPath)) 28 | { 29 | Directory.CreateDirectory(Paths.SettingsPath); 30 | } 31 | 32 | var settingsFile = Path.Combine(Paths.SettingsPath, FileName); 33 | 34 | XmlSerializerHelper.SerializeToFile(this, settingsFile); 35 | } 36 | 37 | private static AnnouncementSettings Load() 38 | { 39 | if (!Directory.Exists(Paths.SettingsPath)) 40 | { 41 | Directory.CreateDirectory(Paths.SettingsPath); 42 | } 43 | 44 | var file = Path.Combine(Paths.SettingsPath, FileName); 45 | 46 | if (File.Exists(file)) 47 | { 48 | try 49 | { 50 | var document = new XmlDocument(); 51 | document.Load(file); 52 | 53 | return (AnnouncementSettings)XmlSerializerHelper.Deserialize(document.OuterXml, typeof(AnnouncementSettings)); 54 | } 55 | catch 56 | { 57 | return new AnnouncementSettings(); 58 | } 59 | } 60 | 61 | return new AnnouncementSettings(); 62 | } 63 | } 64 | } -------------------------------------------------------------------------------- /XrmToolBox/AppCode/AppInsights/InstallationInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Xml; 4 | using XrmToolBox.Extensibility; 5 | using XrmToolBox.ToolLibrary.AppCode; 6 | 7 | namespace XrmToolBox.AppCode.AppInsights 8 | { 9 | public class InstallationInfo 10 | { 11 | private const string OptionFileName = "XrmToolBox.Installation.xml"; 12 | 13 | private static InstallationInfo instance; 14 | 15 | private InstallationInfo() 16 | { 17 | } 18 | 19 | public static InstallationInfo Instance 20 | { 21 | get 22 | { 23 | if (instance == null) 24 | { 25 | instance = Load(); 26 | } 27 | 28 | if (instance?.InstallationId == Guid.Empty) 29 | { 30 | instance?.Save(); 31 | } 32 | 33 | return instance; 34 | } 35 | } 36 | 37 | public DateTime InstallationDate { get; set; } = DateTime.Now; 38 | public Guid InstallationId { get; set; } 39 | 40 | public void Save() 41 | { 42 | if (InstallationId == Guid.Empty) 43 | { 44 | InstallationId = Guid.NewGuid(); 45 | } 46 | if (!Directory.Exists(Paths.SettingsPath)) 47 | { 48 | Directory.CreateDirectory(Paths.SettingsPath); 49 | } 50 | 51 | var settingsFile = Path.Combine(Paths.SettingsPath, OptionFileName); 52 | 53 | XmlSerializerHelper.SerializeToFile(this, settingsFile); 54 | } 55 | 56 | private static InstallationInfo Load() 57 | { 58 | if (!Directory.Exists(Paths.SettingsPath)) 59 | { 60 | Directory.CreateDirectory(Paths.SettingsPath); 61 | } 62 | 63 | var settingsFile = Path.Combine(Paths.SettingsPath, OptionFileName); 64 | 65 | if (File.Exists(settingsFile)) 66 | { 67 | try 68 | { 69 | var document = new XmlDocument(); 70 | document.Load(settingsFile); 71 | 72 | return (InstallationInfo)XmlSerializerHelper.Deserialize(document.OuterXml, typeof(InstallationInfo)); 73 | } 74 | catch { } 75 | } 76 | return new InstallationInfo(); 77 | } 78 | } 79 | } -------------------------------------------------------------------------------- /XrmToolBox/AppCode/DockExtensions.cs: -------------------------------------------------------------------------------- 1 | using WeifenLuo.WinFormsUI.Docking; 2 | 3 | namespace XrmToolBox.AppCode 4 | { 5 | public static class DockExtensions 6 | { 7 | public static void EnsureVisible(this DockContent form, DockPanel parent, DockState defaultState) 8 | { 9 | switch (form.DockState) 10 | { 11 | case DockState.Unknown: 12 | case DockState.Hidden: 13 | form.Show(parent, defaultState); 14 | break; 15 | 16 | case DockState.DockBottomAutoHide: 17 | form.DockState = DockState.DockBottom; 18 | break; 19 | 20 | case DockState.DockTopAutoHide: 21 | form.DockState = DockState.DockTop; 22 | break; 23 | 24 | case DockState.DockLeftAutoHide: 25 | form.DockState = DockState.DockLeft; 26 | break; 27 | 28 | case DockState.DockRightAutoHide: 29 | form.DockState = DockState.DockRight; 30 | break; 31 | 32 | case DockState.Float: 33 | form.DockState = DockState.Float; 34 | break; 35 | } 36 | form.Activate(); 37 | } 38 | } 39 | } -------------------------------------------------------------------------------- /XrmToolBox/AppCode/Extensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using System.Drawing.Drawing2D; 4 | using System.Drawing.Imaging; 5 | using System.IO; 6 | using System.Linq; 7 | using System.Reflection; 8 | using XrmToolBox.Extensibility.Interfaces; 9 | 10 | namespace XrmToolBox.AppCode 11 | { 12 | public static class FileInfoExtensions 13 | { 14 | /// 15 | /// Checks if the current file contains types that implement 16 | /// IXrmToolBoxPlugin interface 17 | /// 18 | /// Current file info 19 | /// Value that indicates if the current file contains types that implement 20 | /// IXrmToolBoxPlugin interface 21 | public static bool ImplementsXrmToolBoxPlugin(this FileInfo fi) 22 | { 23 | var assembly = Assembly.LoadFile(fi.FullName); 24 | 25 | foreach (var type in assembly.GetTypes()) 26 | { 27 | if (type.GetInterfaces().Contains(typeof(IXrmToolBoxPlugin))) 28 | { 29 | return true; 30 | } 31 | } 32 | 33 | return false; 34 | } 35 | 36 | public static Image ResizeImage(this Image image, int width, int height) 37 | { 38 | Bitmap newImage = new Bitmap(width, height); 39 | using (Graphics gr = Graphics.FromImage(newImage)) 40 | { 41 | gr.CompositingMode = CompositingMode.SourceCopy; 42 | gr.CompositingQuality = CompositingQuality.HighQuality; 43 | gr.InterpolationMode = InterpolationMode.HighQualityBicubic; 44 | gr.SmoothingMode = SmoothingMode.HighQuality; 45 | gr.PixelOffsetMode = PixelOffsetMode.HighQuality; 46 | 47 | using (var wrapMode = new ImageAttributes()) 48 | { 49 | wrapMode.SetWrapMode(WrapMode.TileFlipXY); 50 | gr.DrawImage(image, new Rectangle(0, 0, width, height), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode); 51 | } 52 | } 53 | 54 | return newImage; 55 | } 56 | } 57 | } -------------------------------------------------------------------------------- /XrmToolBox/AppCode/IToolsForm.cs: -------------------------------------------------------------------------------- 1 | using McTools.Xrm.Connection; 2 | using System; 3 | using System.Collections.Generic; 4 | using XrmToolBox.Extensibility.Interfaces; 5 | using XrmToolBox.New.EventArgs; 6 | 7 | namespace XrmToolBox.AppCode 8 | { 9 | internal interface IToolsForm 10 | { 11 | event EventHandler ActionRequested; 12 | 13 | event EventHandler OpenPluginProjectUrlRequested; 14 | 15 | event EventHandler OpenPluginRequested; 16 | 17 | event EventHandler UninstallPluginRequested; 18 | 19 | ConnectionDetail ConnectionDetail { get; set; } 20 | PluginManagerExtended PluginManager { get; } 21 | 22 | void DisplayCategories(Dictionary> categories); 23 | 24 | void DuplicateTool(string pluginName, IDuplicatableTool sourceTool, object state, OpenMruPluginEventArgs e = null); 25 | 26 | void OpenPlugin(string pluginName, OpenMruPluginEventArgs e = null, bool needNewConnection = false); 27 | 28 | void ReloadPluginsList(); 29 | } 30 | } -------------------------------------------------------------------------------- /XrmToolBox/AppCode/PluginControlStatus.cs: -------------------------------------------------------------------------------- 1 | using XrmToolBox.Extensibility.Interfaces; 2 | 3 | namespace XrmToolBox.AppCode 4 | { 5 | internal class PluginControlStatus 6 | { 7 | public PluginControlStatus(IXrmToolBoxPluginControl control, int? percentage, string message) 8 | { 9 | Control = control; 10 | Percentage = percentage; 11 | Message = message; 12 | } 13 | 14 | public IXrmToolBoxPluginControl Control { get; } 15 | public string Message { get; set; } 16 | public int? Percentage { get; set; } 17 | } 18 | } -------------------------------------------------------------------------------- /XrmToolBox/AppCode/PluginUpdateSkip.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace XrmToolBox.AppCode 4 | { 5 | public class PluginUpdateSkip 6 | { 7 | public DateTime Date { get; set; } 8 | public string Name { get; set; } 9 | 10 | public string Version { get; set; } 11 | } 12 | } -------------------------------------------------------------------------------- /XrmToolBox/AppCode/PluginUpdates.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace XrmToolBox.AppCode 4 | { 5 | public class PluginUpdate 6 | { 7 | public string Destination { get; set; } 8 | public string Source { get; set; } 9 | public bool RequireRestart { get; set; } 10 | } 11 | 12 | public class PluginUpdates 13 | { 14 | public PluginUpdates() 15 | { 16 | Plugins = new List(); 17 | } 18 | 19 | public List Plugins { get; set; } 20 | 21 | public int PreviousProcessId { get; set; } 22 | } 23 | } -------------------------------------------------------------------------------- /XrmToolBox/AppCode/RegistryHelper.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using System; 3 | 4 | namespace XrmToolBox.AppCode 5 | { 6 | internal static class RegistryHelper 7 | { 8 | public static void AddXtbProtocol(string xtbPath, string xtbStoragePath) 9 | { 10 | var softwareKey = Registry.CurrentUser.OpenSubKey("Software", true); 11 | var classesKey = softwareKey.OpenSubKey("Classes", true); 12 | var xtbKey = classesKey.CreateSubKey("xrmtoolbox"); 13 | xtbKey.SetValue("", "XrmToolBox"); 14 | xtbKey.SetValue("URL Protocol", ""); 15 | var shellKey = xtbKey.CreateSubKey("shell"); 16 | var openKey = shellKey.CreateSubKey("open"); 17 | var commandKey = openKey.CreateSubKey("command"); 18 | commandKey.SetValue("", $"\"{xtbPath}\" /overridepath:\"{xtbStoragePath}\" \"%1\""); 19 | 20 | commandKey.Dispose(); 21 | openKey.Dispose(); 22 | shellKey.Dispose(); 23 | xtbKey.Dispose(); 24 | classesKey.Dispose(); 25 | softwareKey.Dispose(); 26 | } 27 | 28 | public static string XtbProtocolPath() 29 | { 30 | if (Registry.ClassesRoot.OpenSubKey("xrmtoolbox") is RegistryKey xtbKey && 31 | xtbKey.OpenSubKey("shell") is RegistryKey shellKey && 32 | shellKey.OpenSubKey("open") is RegistryKey openKey && 33 | openKey.OpenSubKey("command") is RegistryKey commandKey && 34 | commandKey.GetValue("") is string command) 35 | { 36 | if (command.Contains(" /overridepath")) 37 | { 38 | command = command.Split(new string[] { " /overridepath" }, StringSplitOptions.None)[0].Trim(); 39 | } 40 | command = command.Trim('"'); 41 | return command; 42 | } 43 | return null; 44 | } 45 | 46 | public static void RemoveXtbProtocol() 47 | { 48 | var softwareKey = Registry.CurrentUser.OpenSubKey("Software", true); 49 | var classesKey = softwareKey.OpenSubKey("Classes", true); 50 | classesKey.DeleteSubKeyTree("xrmtoolbox"); 51 | classesKey.Dispose(); 52 | softwareKey.Dispose(); 53 | } 54 | } 55 | } -------------------------------------------------------------------------------- /XrmToolBox/AppCode/ReleasesDTO.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Runtime.Serialization; 3 | 4 | namespace XrmToolBox.AppCode 5 | { 6 | [DataContract] 7 | public class Releases 8 | { 9 | [DataMember(Name = "odatametadata")] 10 | public string ODataMetadata { get; set; } 11 | 12 | [DataMember(Name = "value")] 13 | public Release[] Items { get; set; } 14 | } 15 | 16 | [DataContract] 17 | public class Release 18 | { 19 | [DataMember(Name = "mctools_releaseid")] 20 | public string Id { get; set; } 21 | 22 | [DataMember(Name = "mctools_name")] 23 | public string Version { get; set; } 24 | 25 | [DataMember(Name = "mctools_downloadurl")] 26 | public string DownloadUrl { get; set; } 27 | 28 | [DataMember(Name = "mctools_webpageid")] 29 | public WebPageReference WebPage { get; set; } 30 | 31 | [DataMember(Name = "listid")] 32 | public string ListId { get; set; } 33 | 34 | [DataMember(Name = "viewid")] 35 | public string ViewId { get; set; } 36 | 37 | [DataMember(Name = "entitypermissionsenabled")] 38 | public object EntityPermissionEnabled { get; set; } 39 | } 40 | 41 | [DataContract(Name = "Mctools_Webpageid")] 42 | public class WebPageReference 43 | { 44 | public string Id { get; set; } 45 | public string Name { get; set; } 46 | } 47 | } -------------------------------------------------------------------------------- /XrmToolBox/AppCode/SettingsPropertyEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace XrmToolBox.AppCode 4 | { 5 | public class SettingsPropertyEventArgs : EventArgs 6 | { 7 | public SettingsPropertyEventArgs(string propertyName, object value) 8 | { 9 | PropertyName = propertyName; 10 | Value = value; 11 | } 12 | 13 | public string PropertyName { get; set; } 14 | 15 | public object Value { get; set; } 16 | } 17 | } -------------------------------------------------------------------------------- /XrmToolBox/AppCode/SettingsPropertyInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace XrmToolBox.AppCode 4 | { 5 | internal class SettingsPropertyInfo 6 | { 7 | public string Category { get; set; } 8 | public string Description { get; set; } 9 | public bool IsReadOnly { get; set; } 10 | public string Name { get; internal set; } 11 | public int Order { get; set; } 12 | public string Title { get; set; } 13 | public Type Type { get; internal set; } 14 | public bool IsMultiline { get; internal set; } 15 | } 16 | } -------------------------------------------------------------------------------- /XrmToolBox/ConnectionParameterInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Forms; 2 | 3 | namespace XrmToolBox 4 | { 5 | /// 6 | /// Class to keep track of the Info panel, so it can be removed when the connection has succeeded 7 | /// 8 | internal class ConnectionParameterInfo 9 | { 10 | public UserControl ConnControl { get; set; } 11 | public object ConnectionParmater { get; set; } 12 | } 13 | } -------------------------------------------------------------------------------- /XrmToolBox/Controls/ApplicationProtocolControl.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.Drawing; 4 | using System.IO; 5 | using System.Windows.Forms; 6 | using XrmToolBox.AppCode; 7 | using XrmToolBox.Extensibility; 8 | 9 | namespace XrmToolBox.Controls 10 | { 11 | public partial class ApplicationProtocolControl : UserControl 12 | { 13 | public ApplicationProtocolControl() 14 | { 15 | InitializeComponent(); 16 | 17 | CheckAppProtocolStatus(); 18 | } 19 | 20 | private void btnAppProtocol_Click(object sender, EventArgs e) 21 | { 22 | try 23 | { 24 | if (!string.IsNullOrEmpty(RegistryHelper.XtbProtocolPath())) 25 | { 26 | RegistryHelper.RemoveXtbProtocol(); 27 | } 28 | else 29 | { 30 | RegistryHelper.AddXtbProtocol(Application.ExecutablePath, Paths.XrmToolBoxPath == "." ? new FileInfo(Application.ExecutablePath).DirectoryName : Paths.XrmToolBoxPath); 31 | } 32 | 33 | CheckAppProtocolStatus(); 34 | } 35 | catch (Exception error) 36 | { 37 | MessageBox.Show(this, $"An error occured when setting application protocol: {error.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 38 | } 39 | } 40 | 41 | private void CheckAppProtocolStatus() 42 | { 43 | var protocolPath = RegistryHelper.XtbProtocolPath(); 44 | var isEnabled = !string.IsNullOrEmpty(protocolPath); 45 | 46 | lblAppProtocolStatus.Text = string.Format(lblAppProtocolStatus.Tag.ToString(), isEnabled ? "Enabled" : "Disabled"); 47 | lblAppProtocolStatus.ForeColor = isEnabled ? Color.Green : Color.Red; 48 | 49 | btnAppProtocol.Text = isEnabled ? "Disable" : "Enable"; 50 | 51 | lblAppProtocolPath.Text = protocolPath; 52 | lblAppProtocolPath.Visible = isEnabled; 53 | } 54 | 55 | private void llProtocolDoc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 56 | { 57 | Process.Start("https://www.xrmtoolbox.com/documentation/for-developers/implement-application-protocol/"); 58 | } 59 | } 60 | } -------------------------------------------------------------------------------- /XrmToolBox/Controls/AssembliesControl.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Data; 4 | using System.Diagnostics; 5 | using System.Linq; 6 | using System.Reflection; 7 | using System.Windows.Forms; 8 | 9 | namespace XrmToolBox.Controls 10 | { 11 | public partial class AssembliesControl : UserControl 12 | { 13 | public AssembliesControl() 14 | { 15 | InitializeComponent(); 16 | 17 | PopulateAssemblies(); 18 | } 19 | 20 | private static string assemblyPrioritizer(string assemblyName) 21 | { 22 | return 23 | assemblyName.Equals("XrmToolBox") ? "AAAAAAAAAAAA" : 24 | assemblyName.Contains("XrmToolBox") ? "AAAAAAAAAAAB" : 25 | assemblyName.Equals(Assembly.GetExecutingAssembly().GetName().Name) ? "AAAAAAAAAAAC" : 26 | assemblyName; 27 | } 28 | 29 | private ListViewItem GetListItem(AssemblyName a) 30 | { 31 | var assembly = Assembly.Load(a); 32 | var fi = FileVersionInfo.GetVersionInfo(assembly.Location); 33 | 34 | var item = new ListViewItem(a.Name); 35 | item.SubItems.Add(fi.FileVersion.ToString()); 36 | return item; 37 | } 38 | 39 | private List GetReferencedAssemblies() 40 | { 41 | var names = Assembly.GetExecutingAssembly().GetReferencedAssemblies() 42 | .Where(a => !a.Name.Equals("mscorlib") && !a.Name.StartsWith("System") && !a.Name.Contains("CSharp")).ToList(); 43 | names.Add(Assembly.GetExecutingAssembly().GetName()); 44 | names = names.OrderBy(a => assemblyPrioritizer(a.Name)).ToList(); 45 | return names; 46 | } 47 | 48 | private void PopulateAssemblies() 49 | { 50 | var assemblies = GetReferencedAssemblies(); 51 | var items = assemblies.Select(a => GetListItem(a)).ToArray(); 52 | lvAssemblies.Items.Clear(); 53 | lvAssemblies.Items.AddRange(items); 54 | } 55 | } 56 | } -------------------------------------------------------------------------------- /XrmToolBox/Controls/ConnectingCdsControl.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using System.Threading; 4 | using System.Windows.Forms; 5 | using XrmToolBox.Properties; 6 | 7 | namespace XrmToolBox.Controls 8 | { 9 | public partial class ConnectingCdsControl : UserControl 10 | { 11 | private int currentFrame = 0; 12 | 13 | private Thread pictureThread; 14 | 15 | private System.Timers.Timer t; 16 | 17 | public ConnectingCdsControl() 18 | { 19 | AutoScaleMode = AutoScaleMode.Font; 20 | 21 | InitializeComponent(); 22 | } 23 | 24 | private void AnimatePicture() 25 | { 26 | t = new System.Timers.Timer(300); 27 | t.Elapsed += T_Elapsed; 28 | t.Start(); 29 | } 30 | 31 | private void ConnectingCdsControl_Load(object sender, System.EventArgs e) 32 | { 33 | pictureThread = new Thread(AnimatePicture); 34 | pictureThread.Start(); 35 | } 36 | 37 | private void T_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 38 | { 39 | Image newImage = null; 40 | switch (currentFrame) 41 | { 42 | case 0: 43 | newImage = Resources.loading_dv1; 44 | currentFrame++; 45 | break; 46 | 47 | case 1: 48 | newImage = Resources.loading_dv2; 49 | currentFrame++; 50 | break; 51 | 52 | case 2: 53 | newImage = Resources.loading_dv3; 54 | currentFrame++; 55 | break; 56 | 57 | case 3: 58 | newImage = Resources.loading_dv4; 59 | currentFrame++; 60 | break; 61 | 62 | case 4: 63 | newImage = Resources.loading_dv0; 64 | currentFrame = 0; 65 | break; 66 | } 67 | 68 | if (this.IsDisposed) return; 69 | 70 | Invoke(new Action(() => 71 | { 72 | pbConnectionLoading.Image = newImage; 73 | })); 74 | } 75 | } 76 | } -------------------------------------------------------------------------------- /XrmToolBox/Controls/ConnectingControl.cs: -------------------------------------------------------------------------------- 1 | using System.Drawing; 2 | using System.Reflection; 3 | using System.Windows.Forms; 4 | 5 | namespace XrmToolBox.Controls 6 | { 7 | public partial class ConnectingControl : UserControl 8 | { 9 | public ConnectingControl() 10 | { 11 | AutoScaleMode = AutoScaleMode.Font; 12 | 13 | InitializeComponent(); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /XrmToolBox/Controls/CreditsControl.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.Windows.Forms; 4 | 5 | namespace XrmToolBox.Controls 6 | { 7 | public partial class CreditsControl : UserControl 8 | { 9 | public CreditsControl() 10 | { 11 | InitializeComponent(); 12 | } 13 | 14 | private void rtbCredits_LinkClicked(object sender, LinkClickedEventArgs e) 15 | { 16 | Process.Start(e.LinkText); 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /XrmToolBox/Controls/HiddenToolsControl.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Data; 3 | using System.Linq; 4 | using System.Windows.Forms; 5 | 6 | namespace XrmToolBox.Controls 7 | { 8 | public partial class HiddenToolsControl : UserControl 9 | { 10 | public HiddenToolsControl() 11 | { 12 | InitializeComponent(); 13 | 14 | PopulateTools(); 15 | } 16 | 17 | private ListViewItem GetListItem(string name) 18 | { 19 | var item = new ListViewItem(name); 20 | item.Checked = true; 21 | return item; 22 | } 23 | 24 | private void HiddenToolsControl_Paint(object sender, PaintEventArgs e) 25 | { 26 | PopulateTools(); 27 | } 28 | 29 | private void lvAssemblies_ItemChecked(object sender, ItemCheckedEventArgs e) 30 | { 31 | if (e.Item.Checked) 32 | { 33 | Options.Instance.HiddenPlugins.Add(e.Item.Text); 34 | } 35 | else 36 | { 37 | Options.Instance.HiddenPlugins.Remove(e.Item.Text); 38 | } 39 | } 40 | 41 | private void PopulateTools() 42 | { 43 | lvAssemblies.ItemChecked -= lvAssemblies_ItemChecked; 44 | var items = Options.Instance.HiddenPlugins.Select(a => GetListItem(a)).ToArray(); 45 | lvAssemblies.Items.Clear(); 46 | lvAssemblies.Items.AddRange(items); 47 | lvAssemblies.ItemChecked += lvAssemblies_ItemChecked; 48 | } 49 | } 50 | } -------------------------------------------------------------------------------- /XrmToolBox/Controls/HighlightItem.cs: -------------------------------------------------------------------------------- 1 | using McTools.Xrm.Connection; 2 | using System; 3 | using System.Drawing; 4 | using System.Drawing.Drawing2D; 5 | using System.IO; 6 | using System.Windows.Forms; 7 | 8 | namespace XrmToolBox.Controls 9 | { 10 | public partial class HighlightItem : UserControl 11 | { 12 | private Color from; 13 | private Color to; 14 | 15 | public HighlightItem() 16 | { 17 | InitializeComponent(); 18 | } 19 | 20 | public HighlightItem(ConnectionDetail detail) 21 | { 22 | InitializeComponent(); 23 | 24 | SetContent(detail); 25 | } 26 | 27 | public HighlightItem(Color from, Color to) 28 | { 29 | InitializeComponent(); 30 | 31 | Controls.Clear(); 32 | 33 | this.from = from; 34 | this.to = to; 35 | 36 | Paint += HighlightItem_Paint; 37 | } 38 | 39 | private void HighlightItem_Paint(object sender, PaintEventArgs e) 40 | { 41 | LinearGradientBrush linGrBrush = new LinearGradientBrush( 42 | new Point(0, 10), 43 | new Point(Width, 10), 44 | from, // Opaque red 45 | to); // Opaque blue 46 | 47 | e.Graphics.FillRectangle(linGrBrush, 0, 0, Width, Height); 48 | } 49 | 50 | private void HighlightItem_Resize(object sender, EventArgs e) 51 | { 52 | Invalidate(); 53 | } 54 | 55 | private void SetContent(ConnectionDetail detail) 56 | { 57 | BackColor = detail.EnvironmentHighlightingInfo?.Color ?? DefaultBackColor; 58 | lblName.ForeColor = detail.EnvironmentHighlightingInfo?.TextColor ?? DefaultForeColor; 59 | lblName.Text = detail.ConnectionName; 60 | 61 | if (detail.ParentConnectionFile?.Base64Image != null) 62 | { 63 | byte[] bytes = Convert.FromBase64String(detail.ParentConnectionFile.Base64Image); 64 | 65 | using (MemoryStream ms = new MemoryStream(bytes)) 66 | { 67 | pbLogo.SizeMode = PictureBoxSizeMode.StretchImage; 68 | pbLogo.Image = Image.FromStream(ms); 69 | } 70 | } 71 | else 72 | { 73 | pbLogo.Visible = false; 74 | } 75 | 76 | Width = 10 + 8 + TextRenderer.MeasureText(lblName.Text, lblName.Font).Width + (pbLogo.Visible ? pbLogo.Width : 0); 77 | } 78 | } 79 | } -------------------------------------------------------------------------------- /XrmToolBox/Controls/ISettingsControl.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using XrmToolBox.AppCode; 3 | 4 | namespace XrmToolBox.Controls 5 | { 6 | internal interface ISettingsControl 7 | { 8 | event EventHandler OnSettingsPropertyChanged; 9 | 10 | string PropertyName { get; set; } 11 | } 12 | } -------------------------------------------------------------------------------- /XrmToolBox/Controls/NavLeftItem.designer.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace XrmToolBox.Controls 3 | { 4 | partial class NavLeftItem 5 | { 6 | /// 7 | /// Variable nécessaire au concepteur. 8 | /// 9 | private System.ComponentModel.IContainer components = null; 10 | 11 | /// 12 | /// Nettoyage des ressources utilisées. 13 | /// 14 | /// true si les ressources managées doivent être supprimées ; sinon, false. 15 | protected override void Dispose(bool disposing) 16 | { 17 | if (disposing && (components != null)) 18 | { 19 | components.Dispose(); 20 | } 21 | base.Dispose(disposing); 22 | } 23 | 24 | #region Code généré par le Concepteur de composants 25 | 26 | /// 27 | /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas 28 | /// le contenu de cette méthode avec l'éditeur de code. 29 | /// 30 | private void InitializeComponent() 31 | { 32 | this.SuspendLayout(); 33 | // 34 | // NavLeftItem 35 | // 36 | this.AutoScaleDimensions = new System.Drawing.SizeF(13F, 32F); 37 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 38 | this.BackColor = System.Drawing.SystemColors.Control; 39 | this.Font = new System.Drawing.Font("Segoe UI Variable Text", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 40 | this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); 41 | this.Name = "NavLeftItem"; 42 | this.Size = new System.Drawing.Size(764, 198); 43 | this.Click += new System.EventHandler(this.NavLeftItem_Click); 44 | this.Paint += new System.Windows.Forms.PaintEventHandler(this.NavLeftItem_Paint); 45 | this.ResumeLayout(false); 46 | 47 | } 48 | 49 | #endregion 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /XrmToolBox/Controls/SwitchControl.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using System.Windows.Forms; 4 | using XrmToolBox.AppCode; 5 | 6 | namespace XrmToolBox.Controls 7 | { 8 | public partial class SwitchControl : UserControl 9 | { 10 | private bool _checked; 11 | 12 | public SwitchControl() 13 | { 14 | InitializeComponent(); 15 | } 16 | 17 | public event EventHandler OnCheckedChanged; 18 | 19 | public bool Checked 20 | { 21 | get 22 | { 23 | return _checked; 24 | } 25 | set 26 | { 27 | _checked = value; 28 | Invalidate(); 29 | OnCheckedChanged?.Invoke(this, new EventArgs()); 30 | } 31 | } 32 | 33 | public bool Enabled { get; set; } = true; 34 | 35 | private void SwitchControl_Click(object sender, EventArgs e) 36 | { 37 | Checked = !Checked; 38 | } 39 | 40 | private void SwitchControl_Paint(object sender, PaintEventArgs e) 41 | { 42 | using (Image img = (_checked ? Properties.Resources.on_button : Properties.Resources.off_button).ResizeImage(40, 40)) 43 | { 44 | e.Graphics.DrawImage(img, new Point(4, Height / 2 - img.Height / 2)); 45 | } 46 | var text = _checked ? "True" : "False"; 47 | var textSize = TextRenderer.MeasureText(text, Font); 48 | 49 | e.Graphics.DrawString(text, Font, new SolidBrush(Enabled ? ForeColor : Color.LightGray), new Point(50, Height / 2 - textSize.Height / 2)); 50 | } 51 | } 52 | } -------------------------------------------------------------------------------- /XrmToolBox/Controls/SwitchControl.designer.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace XrmToolBox.Controls 3 | { 4 | partial class SwitchControl 5 | { 6 | /// 7 | /// Variable nécessaire au concepteur. 8 | /// 9 | private System.ComponentModel.IContainer components = null; 10 | 11 | /// 12 | /// Nettoyage des ressources utilisées. 13 | /// 14 | /// true si les ressources managées doivent être supprimées ; sinon, false. 15 | protected override void Dispose(bool disposing) 16 | { 17 | if (disposing && (components != null)) 18 | { 19 | components.Dispose(); 20 | } 21 | base.Dispose(disposing); 22 | } 23 | 24 | #region Code généré par le Concepteur de composants 25 | 26 | /// 27 | /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas 28 | /// le contenu de cette méthode avec l'éditeur de code. 29 | /// 30 | private void InitializeComponent() 31 | { 32 | this.SuspendLayout(); 33 | // 34 | // SwitchControl 35 | // 36 | this.AutoScaleDimensions = new System.Drawing.SizeF(11F, 27F); 37 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 38 | this.Font = new System.Drawing.Font("Segoe UI Variable Text", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 39 | this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); 40 | this.Name = "SwitchControl"; 41 | this.Size = new System.Drawing.Size(232, 72); 42 | this.Click += new System.EventHandler(this.SwitchControl_Click); 43 | this.Paint += new System.Windows.Forms.PaintEventHandler(this.SwitchControl_Paint); 44 | this.ResumeLayout(false); 45 | 46 | } 47 | 48 | #endregion 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /XrmToolBox/Controls/TextBoxWithPlaceholder.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using System.Windows.Forms; 4 | 5 | namespace XrmToolBox.Controls 6 | { 7 | public class TextBoxWithPlaceholder : TextBox 8 | { 9 | private string placeholder; 10 | private bool silent; 11 | 12 | public TextBoxWithPlaceholder() 13 | { 14 | ForeColor = Color.LightGray; 15 | Enter += TextBoxWithPlaceholder_Enter; 16 | Leave += TextBoxWithPlaceholder_Leave; 17 | GotFocus += TextBoxWithPlaceholder_GotFocus; 18 | Tag = true; 19 | } 20 | 21 | public string Placeholder 22 | { 23 | get { return placeholder; } 24 | set 25 | { 26 | placeholder = value; 27 | base.Text = value; 28 | } 29 | } 30 | 31 | public override string Text 32 | { 33 | get 34 | { 35 | if ((bool)Tag) 36 | return string.Empty; 37 | return base.Text; 38 | } 39 | set => base.Text = value; 40 | } 41 | 42 | protected override void OnTextChanged(EventArgs e) 43 | { 44 | if (!silent) 45 | { 46 | base.OnTextChanged(e); 47 | } 48 | 49 | ForeColor = SystemColors.ControlText; 50 | } 51 | 52 | private void TextBoxWithPlaceholder_Enter(object sender, EventArgs e) 53 | { 54 | if ((bool)Tag) 55 | { 56 | Tag = false; 57 | silent = true; 58 | Text = ""; 59 | ForeColor = SystemColors.ControlText; 60 | silent = false; 61 | } 62 | } 63 | 64 | private void TextBoxWithPlaceholder_GotFocus(object sender, EventArgs e) 65 | { 66 | TextBoxWithPlaceholder_Enter(sender, e); 67 | } 68 | 69 | private void TextBoxWithPlaceholder_Leave(object sender, EventArgs e) 70 | { 71 | if (Text.Length == 0) 72 | { 73 | Tag = true; 74 | silent = true; 75 | Text = placeholder; 76 | ForeColor = Color.LightGray; 77 | silent = false; 78 | } 79 | } 80 | } 81 | } -------------------------------------------------------------------------------- /XrmToolBox/CrmExceptionHelper.cs: -------------------------------------------------------------------------------- 1 | // PROJECT : XrmToolBox 2 | // This project was developed by Tanguy Touzard 3 | // CODEPLEX: http://xrmtoolbox.codeplex.com 4 | // BLOG: http://mscrmtools.blogspot.com 5 | 6 | using System; 7 | using System.ServiceModel; 8 | 9 | namespace XrmToolBox 10 | { 11 | public class CrmExceptionHelper 12 | { 13 | public static string GetErrorMessage(Exception error, bool returnWithStackTrace) 14 | { 15 | if (error.InnerException is FaultException) 16 | { 17 | if (returnWithStackTrace) 18 | { 19 | return (error.InnerException).ToString(); 20 | } 21 | else 22 | { 23 | return (error.InnerException).Message; 24 | } 25 | } 26 | else if (error.InnerException != null) 27 | { 28 | if (returnWithStackTrace) 29 | { 30 | return error.InnerException.ToString(); 31 | } 32 | else 33 | { 34 | return error.InnerException.Message; 35 | } 36 | } 37 | else 38 | { 39 | if (returnWithStackTrace) 40 | { 41 | return error.ToString(); 42 | } 43 | else 44 | { 45 | return error.Message; 46 | } 47 | } 48 | } 49 | } 50 | } -------------------------------------------------------------------------------- /XrmToolBox/Forms/HiddenPluginsDialog.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | using System.Windows.Forms; 4 | 5 | namespace XrmToolBox.Forms 6 | { 7 | public partial class HiddenPluginsDialog : Form 8 | { 9 | public HiddenPluginsDialog(List hiddenPlugins) 10 | { 11 | InitializeComponent(); 12 | 13 | foreach (var plugin in PluginManagerExtended.Instance.PluginsExt) 14 | { 15 | try 16 | { 17 | var title = plugin.Metadata.Name; 18 | var author = plugin.Metadata.Company; 19 | var version = plugin.Metadata.Version; 20 | 21 | var item = new ListViewItem(title); 22 | item.SubItems.Add(author); 23 | item.SubItems.Add(version); 24 | item.Checked = hiddenPlugins?.Contains(title) ?? false; 25 | 26 | lvPlugins.Items.Add(item); 27 | } 28 | catch { } 29 | } 30 | } 31 | 32 | public List HiddenPlugins 33 | { 34 | get 35 | { 36 | return lvPlugins.Items 37 | .Cast() 38 | .Where(i => i.Checked) 39 | .Select(i => i.Text) 40 | .ToList(); 41 | } 42 | } 43 | 44 | private void btnCancel_Click(object sender, System.EventArgs e) 45 | { 46 | Close(); 47 | } 48 | 49 | private void btnOk_Click(object sender, System.EventArgs e) 50 | { 51 | Close(); 52 | } 53 | } 54 | } -------------------------------------------------------------------------------- /XrmToolBox/Forms/SuccessDialog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace XrmToolBox.Forms 5 | { 6 | public partial class SuccessDialog : Form 7 | { 8 | public SuccessDialog() 9 | { 10 | InitializeComponent(); 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /XrmToolBox/Forms/TabConnectionUpdater.cs: -------------------------------------------------------------------------------- 1 | // PROJECT : XrmToolBox 2 | // This project was developed by Tanguy Touzard 3 | // CODEPLEX: http://xrmtoolbox.codeplex.com 4 | // BLOG: http://mscrmtools.blogspot.com 5 | 6 | using McTools.Xrm.Connection; 7 | using System; 8 | using System.Collections.Generic; 9 | using System.Windows.Forms; 10 | using XrmToolBox.New; 11 | 12 | namespace XrmToolBox.Forms 13 | { 14 | public partial class TabConnectionUpdater : Form 15 | { 16 | private readonly List pluginForms; 17 | 18 | public TabConnectionUpdater(List pluginForms, ConnectionDetail detail) 19 | { 20 | InitializeComponent(); 21 | 22 | this.pluginForms = pluginForms; 23 | SelectedPluginForms = new List(); 24 | 25 | lblHeaderDesc.Text = string.Format(lblHeaderDesc.Tag.ToString(), detail.ConnectionName); 26 | } 27 | 28 | public List SelectedPluginForms { get; } 29 | 30 | private void btnAll_Click(object sender, EventArgs e) 31 | { 32 | foreach (ListViewItem item in lvTabs.Items) 33 | { 34 | item.Checked = true; 35 | } 36 | btnOK.PerformClick(); 37 | } 38 | 39 | private void btnCancel_Click(object sender, EventArgs e) 40 | { 41 | DialogResult = DialogResult.Cancel; 42 | Close(); 43 | } 44 | 45 | private void BtnOkClick(object sender, EventArgs e) 46 | { 47 | foreach (ListViewItem item in lvTabs.CheckedItems) 48 | { 49 | SelectedPluginForms.Add((PluginForm)item.Tag); 50 | } 51 | 52 | DialogResult = DialogResult.OK; 53 | Close(); 54 | } 55 | 56 | private void EnableButtons() 57 | { 58 | btnAll.Enabled = lvTabs.Items.Count > 0; 59 | btnOK.Enabled = lvTabs.CheckedItems.Count > 0; 60 | } 61 | 62 | private void lvTabs_ItemChecked(object sender, ItemCheckedEventArgs e) 63 | { 64 | EnableButtons(); 65 | } 66 | 67 | private void TabConnectionUpdaterLoad(object sender, EventArgs e) 68 | { 69 | if (pluginForms != null) 70 | { 71 | foreach (var pluginForm in pluginForms) 72 | { 73 | string[] nameParts = pluginForm.Text.Split('('); 74 | 75 | var item = new ListViewItem(nameParts[0]); 76 | item.SubItems.Add(nameParts[1].Replace(")", "")); 77 | item.Tag = pluginForm; 78 | 79 | lvTabs.Items.Add(item); 80 | } 81 | } 82 | 83 | EnableButtons(); 84 | } 85 | } 86 | } -------------------------------------------------------------------------------- /XrmToolBox/Images/nologo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Images/nologo.png -------------------------------------------------------------------------------- /XrmToolBox/Images/nologo32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Images/nologo32.png -------------------------------------------------------------------------------- /XrmToolBox/Images/progress.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Images/progress.gif -------------------------------------------------------------------------------- /XrmToolBox/New/CustomFloatWindow.cs: -------------------------------------------------------------------------------- 1 | using System.Drawing; 2 | using System.Windows.Forms; 3 | using WeifenLuo.WinFormsUI.Docking; 4 | 5 | namespace XrmToolBox.New 6 | { 7 | public class CustomFloatWindow : FloatWindow 8 | { 9 | public CustomFloatWindow(DockPanel dockPanel, DockPane pane) 10 | : base(dockPanel, pane) 11 | { 12 | FormBorderStyle = FormBorderStyle.Sizable; 13 | } 14 | 15 | public CustomFloatWindow(DockPanel dockPanel, DockPane pane, Rectangle bounds) 16 | : base(dockPanel, pane, bounds) 17 | { 18 | FormBorderStyle = FormBorderStyle.Sizable; 19 | } 20 | } 21 | 22 | public class CustomFloatWindowFactory : DockPanelExtender.IFloatWindowFactory 23 | { 24 | public FloatWindow CreateFloatWindow(DockPanel dockPanel, DockPane pane, Rectangle bounds) 25 | { 26 | return new CustomFloatWindow(dockPanel, pane, bounds); 27 | } 28 | 29 | public FloatWindow CreateFloatWindow(DockPanel dockPanel, DockPane pane) 30 | { 31 | return new CustomFloatWindow(dockPanel, pane); 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /XrmToolBox/New/EventArgs/OpenFavoritePluginEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using XrmToolBox.AppCode; 3 | 4 | namespace XrmToolBox.New.EventArgs 5 | { 6 | public class OpenFavoritePluginEventArgs : System.EventArgs 7 | { 8 | public OpenFavoritePluginEventArgs(Favorite item, bool newConnectionNeeded = false) 9 | { 10 | Item = item; 11 | 12 | if (item.ConnectionId == Guid.Empty) 13 | { 14 | NewConnectionNeeded = newConnectionNeeded; 15 | } 16 | } 17 | 18 | public Favorite Item { get; } 19 | public bool NewConnectionNeeded { get; } 20 | } 21 | } -------------------------------------------------------------------------------- /XrmToolBox/New/EventArgs/OpenMruPluginEventArgs.cs: -------------------------------------------------------------------------------- 1 | using XrmToolBox.AppCode; 2 | 3 | namespace XrmToolBox.New.EventArgs 4 | { 5 | public class OpenMruPluginEventArgs : System.EventArgs 6 | { 7 | public OpenMruPluginEventArgs(MostRecentlyUsedItem item) 8 | { 9 | Item = item; 10 | } 11 | 12 | public MostRecentlyUsedItem Item { get; } 13 | } 14 | } -------------------------------------------------------------------------------- /XrmToolBox/New/EventArgs/OpenPluginEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using XrmToolBox.Extensibility.Interfaces; 7 | 8 | namespace XrmToolBox.New.EventArgs 9 | { 10 | public class OpenPluginEventArgs : System.EventArgs 11 | { 12 | public OpenPluginEventArgs(Lazy plugin) 13 | { 14 | Plugin = plugin; 15 | } 16 | 17 | public Lazy Plugin { get; } 18 | } 19 | } -------------------------------------------------------------------------------- /XrmToolBox/New/EventArgs/PluginEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using XrmToolBox.Extensibility.Interfaces; 3 | using XrmToolBox.Extensibility.UserControls; 4 | 5 | namespace XrmToolBox.New.EventArgs 6 | { 7 | public class PluginEventArgs : System.EventArgs 8 | { 9 | public PluginEventArgs(PluginModel pluginModel) 10 | { 11 | PluginModel = pluginModel; 12 | Plugin = (Lazy)pluginModel.Tag; 13 | } 14 | 15 | public PluginEventArgs(string pluginName) 16 | { 17 | PluginName = pluginName; 18 | } 19 | 20 | public PluginEventArgs(OpenMruPluginEventArgs mruInfo, Lazy plugin) 21 | { 22 | MruInfo = mruInfo; 23 | PluginName = mruInfo.Item.PluginName; 24 | Plugin = plugin; 25 | } 26 | 27 | public PluginEventArgs(IXrmToolBoxPluginControl pluginControl) 28 | { 29 | PluginControl = pluginControl; 30 | } 31 | 32 | public PluginEventArgs(Lazy plugin) 33 | { 34 | Plugin = plugin; 35 | } 36 | 37 | public OpenMruPluginEventArgs MruInfo { get; } 38 | public bool NeedNewConnection { get; set; } 39 | public Lazy Plugin { get; } 40 | public IXrmToolBoxPluginControl PluginControl { get; } 41 | public PluginModel PluginModel { get; } 42 | public string PluginName { get; } 43 | public IDuplicatableTool SourceTool { get; set; } 44 | public object State { get; set; } 45 | } 46 | } -------------------------------------------------------------------------------- /XrmToolBox/New/EventArgs/PluginsListEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace XrmToolBox.New.EventArgs 8 | { 9 | public class PluginsListEventArgs : System.EventArgs 10 | { 11 | public PluginsListEventArgs(PluginsListAction action) 12 | { 13 | Action = action; 14 | } 15 | 16 | public PluginsListAction Action { get; } 17 | } 18 | 19 | 20 | public abstract class PluginsListAction { } 21 | 22 | public class OpenPluginsStoreAction : PluginsListAction 23 | { 24 | public OpenPluginsStoreAction(string searchTerm) 25 | { 26 | SearchTerm = searchTerm; 27 | } 28 | 29 | public string SearchTerm { get; } 30 | } 31 | 32 | public class ResetSearchFilterAction : PluginsListAction { } 33 | 34 | } -------------------------------------------------------------------------------- /XrmToolBox/New/InvalidPluginsForm.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Diagnostics; 3 | using System.Linq; 4 | using System.Windows.Forms; 5 | using XrmToolBox.Extensibility; 6 | 7 | namespace XrmToolBox.New 8 | { 9 | public partial class InvalidPluginsForm : Form 10 | { 11 | private readonly Dictionary validationErrors; 12 | 13 | public InvalidPluginsForm(Dictionary validationErrors) 14 | { 15 | InitializeComponent(); 16 | 17 | this.validationErrors = validationErrors; 18 | } 19 | 20 | private void InvalidPluginsForm_Load(object sender, System.EventArgs e) 21 | { 22 | lvPlugins.Items.AddRange(validationErrors.Select(ve => new ListViewItem(ve.Key) { Tag = ve.Value }).ToArray()); 23 | } 24 | 25 | private void llShortcut_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 26 | { 27 | MessageBox.Show(this, @"Do not forget to close XrmToolBox before deleting tools", @"Information", 28 | MessageBoxButtons.OK, MessageBoxIcon.Information); 29 | 30 | Process.Start(Paths.PluginsPath); 31 | Close(); 32 | } 33 | 34 | private void lvPlugins_SelectedIndexChanged(object sender, System.EventArgs e) 35 | { 36 | if (lvPlugins.SelectedItems.Count > 0) 37 | { 38 | txtError.Text = lvPlugins.SelectedItems[0].Tag.ToString(); 39 | } 40 | } 41 | } 42 | } -------------------------------------------------------------------------------- /XrmToolBox/New/InvalidPluginsInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Windows.Forms; 3 | 4 | namespace XrmToolBox.New 5 | { 6 | public partial class InvalidPluginsInfo : UserControl 7 | { 8 | private readonly Dictionary validationErrors; 9 | 10 | public InvalidPluginsInfo(Dictionary validationErrors) 11 | { 12 | InitializeComponent(); 13 | 14 | this.validationErrors = validationErrors; 15 | } 16 | 17 | private void lblSecurityFilter_MouseClick(object sender, MouseEventArgs e) 18 | { 19 | if (e.Button == MouseButtons.Left) 20 | { 21 | using (var ipForm = new InvalidPluginsForm(validationErrors)) 22 | { 23 | ipForm.ShowDialog(ParentForm); 24 | } 25 | } 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /XrmToolBox/New/PluginsFilterInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Forms; 2 | 3 | namespace XrmToolBox.New 4 | { 5 | public partial class PluginsFilterInfo : UserControl 6 | { 7 | public PluginsFilterInfo() 8 | { 9 | InitializeComponent(); 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /XrmToolBox/New/ToolInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Drawing; 4 | 5 | namespace XrmToolBox.New 6 | { 7 | internal class ToolInfo 8 | { 9 | public string Author { get; set; } 10 | public Color BackColor { get; set; } 11 | public List Categories { get; set; } = new List(); 12 | public Color Color { get; set; } 13 | public string Description { get; set; } 14 | public bool hasPayPal { get; set; } 15 | public Image Image { get; set; } 16 | public string Name { get; set; } 17 | public int NumberOfUse { get; set; } 18 | public Color SecondaryColor { get; set; } 19 | public string Version { get; set; } 20 | } 21 | } -------------------------------------------------------------------------------- /XrmToolBox/PluginUseCount.cs: -------------------------------------------------------------------------------- 1 | namespace XrmToolBox 2 | { 3 | public class PluginUseCount 4 | { 5 | public int Count { get; set; } 6 | public string Name { get; set; } 7 | } 8 | } -------------------------------------------------------------------------------- /XrmToolBox/PluginsListForm.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace XrmToolBox 2 | { 3 | partial class PluginsListForm 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.components = new System.ComponentModel.Container(); 32 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 33 | this.Text = "PluginsListForm"; 34 | } 35 | 36 | #endregion 37 | } 38 | } -------------------------------------------------------------------------------- /XrmToolBox/PluginsListForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | using System.Windows.Forms; 10 | 11 | namespace XrmToolBox 12 | { 13 | public partial class PluginsListForm : Form 14 | { 15 | public PluginsListForm() 16 | { 17 | InitializeComponent(); 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /XrmToolBox/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | // PROJECT : XrmToolBox 2 | // This project was developed by Tanguy Touzard 3 | // CODEPLEX: http://xrmtoolbox.codeplex.com 4 | // BLOG: http://mscrmtools.blogspot.com 5 | 6 | using System.Reflection; 7 | using System.Runtime.InteropServices; 8 | 9 | // Les informations générales relatives à un assembly dépendent de 10 | // l'ensemble d'attributs suivant. Changez les valeurs de ces attributs pour modifier les informations 11 | // associées à un assembly. 12 | [assembly: AssemblyTitle("XrmToolBox")] 13 | [assembly: AssemblyDescription("")] 14 | [assembly: AssemblyConfiguration("")] 15 | [assembly: AssemblyCompany("MscrmTools")] 16 | [assembly: AssemblyProduct("XrmToolBox")] 17 | [assembly: AssemblyCopyright("Copyright © MscrmTools 2012")] 18 | [assembly: AssemblyTrademark("")] 19 | [assembly: AssemblyCulture("")] 20 | 21 | // L'affectation de la valeur false à ComVisible rend les types invisibles dans cet assembly 22 | // aux composants COM. Si vous devez accéder à un type dans cet assembly à partir de 23 | // COM, affectez la valeur true à l'attribut ComVisible sur ce type. 24 | [assembly: ComVisible(false)] 25 | 26 | // Le GUID suivant est pour l'ID de la typelib si ce projet est exposé à COM 27 | [assembly: Guid("c42f3d01-2b09-4f3a-93fb-3ad3118a421c")] 28 | 29 | // Les informations de version pour un assembly se composent des quatre valeurs suivantes : 30 | // 31 | // Version principale 32 | // Version secondaire 33 | // Numéro de build 34 | // Révision 35 | // 36 | // Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut 37 | // en utilisant '*', comme indiqué ci-dessous : 38 | // [assembly: AssemblyVersion("1.0.*")] 39 | [assembly: AssemblyVersion("1.2024.9.69")] 40 | [assembly: AssemblyFileVersion("1.2024.9.69")] -------------------------------------------------------------------------------- /XrmToolBox/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // Ce code a été généré par un outil. 4 | // Version du runtime :4.0.30319.34209 5 | // 6 | // Les modifications apportées à ce fichier peuvent provoquer un comportement incorrect et seront perdues si 7 | // le code est régénéré. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace XrmToolBox.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /XrmToolBox/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /XrmToolBox/Resources/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/3.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/ApplicationProtocol32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/ApplicationProtocol32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Assemblies32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Assemblies32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/CheckForUpdate24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/CheckForUpdate24.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Clear_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Clear_16.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/CloseBehavior32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/CloseBehavior32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Comparison32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Comparison32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Configuration32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Configuration32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Connect16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Connect16.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Connect24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Connect24.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Connect32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Connect32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/ConnectingDataverse.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/ConnectingDataverse.gif -------------------------------------------------------------------------------- /XrmToolBox/Resources/ConnectingDynamics.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/ConnectingDynamics.gif -------------------------------------------------------------------------------- /XrmToolBox/Resources/ConnectionControls32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/ConnectionControls32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Connections32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Connections32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Credits32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Credits32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Customizations32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Customizations32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Data32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Data32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/DataCollect32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/DataCollect32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Dataverse24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Dataverse24.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Dataverse_16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Dataverse_16x16.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Development32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Development32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Display32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Display32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Documentation32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Documentation32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Dollar24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Dollar24.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Dynamics365_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Dynamics365_24.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Eraser24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Eraser24.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Euro24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Euro24.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Expand32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Expand32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Favorite24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Favorite24.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Gitter32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Gitter32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Help24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Help24.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Hide24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Hide24.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Hide32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Hide32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Impersonate24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Impersonate24.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/LoadingConnection.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/LoadingConnection.gif -------------------------------------------------------------------------------- /XrmToolBox/Resources/LogoDyn365.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/LogoDyn365.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/ManageConnections24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/ManageConnections24.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Migration32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Migration32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/New32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/New32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/OpenToolsLibrary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/OpenToolsLibrary.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Paths32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Paths32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Plugins32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Plugins32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/PluginsStore32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/PluginsStore32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/PluginsStore64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/PluginsStore64.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Pound24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Pound24.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/PowerApps24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/PowerApps24.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/PowerApps_scalable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/PowerApps_scalable.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/PowerBI32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/PowerBI32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/PowerPages32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/PowerPages32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Processes32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Processes32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/ProxySettings32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/ProxySettings32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Refresh24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Refresh24.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Reporting32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Reporting32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Security32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Security32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Session32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Session32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Settings24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Settings24.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Settings32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Settings32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Shortcut24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Shortcut24.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Shrink32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Shrink32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Solutions32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Solutions32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/StartPage32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/StartPage32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Startup32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Startup32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Tools24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Tools24.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/ToolsListDisplay32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/ToolsListDisplay32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Troubleshooting32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Troubleshooting32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Uninstall24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Uninstall24.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/UserInterface32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/UserInterface32.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/Web24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/Web24.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/close.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/close1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/close1.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/hide_detail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/hide_detail.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/left-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/left-arrow.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/lightning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/lightning.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/loading_dv0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/loading_dv0.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/loading_dv1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/loading_dv1.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/loading_dv2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/loading_dv2.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/loading_dv3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/loading_dv3.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/loading_dv4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/loading_dv4.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/logo_0016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/logo_0016.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/logo_0032.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/logo_0032.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/logo_0400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/logo_0400.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/logo_0400_old.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/logo_0400_old.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/mask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/mask.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/money_dollar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/money_dollar.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/money_euro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/money_euro.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/money_pound.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/money_pound.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/off-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/off-button.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/on-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/on-button.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/paypal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/paypal.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/powerapps16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/powerapps16.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/right-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/right-arrow.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/server.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/server.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/shortcut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/shortcut.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/star.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/three_tags.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/three_tags.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/twitter.png -------------------------------------------------------------------------------- /XrmToolBox/Resources/www_page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/Resources/www_page.png -------------------------------------------------------------------------------- /XrmToolBox/Startup/NugetCleanup.Command.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Nuget.Common.dll 5 | XrmToolBox.PluginsStore.dll 6 | 7 | This version of XrmToolBox removes the legacy tool library. Nuget assemblies are not needed anymore and will be deleted. 8 | 9 | IF EXIST "Nuget.Common.dll" (DEL "Nuget.Common.dll") 10 | IF EXIST "Nuget.Configuration.dll" (DEL "Nuget.Configuration.dll") 11 | IF EXIST "Nuget.Core.dll" (DEL "Nuget.Core.dll") 12 | IF EXIST "Nuget.Frameworks.dll" (DEL "Nuget.Frameworks.dll") 13 | IF EXIST "Nuget.Packaging.dll" (DEL "Nuget.Packaging.dll") 14 | IF EXIST "Nuget.Protocol.dll" (DEL "Nuget.Protocol.dll") 15 | IF EXIST "Nuget.Versioning.dll" (DEL "Nuget.Versioning.dll") 16 | IF EXIST "XrmToolBox.PluginsStore.dll" (DEL "Nuget.Versioning.dll") 17 | 18 | 19 | -------------------------------------------------------------------------------- /XrmToolBox/UserControls/LargePluginModel.cs: -------------------------------------------------------------------------------- 1 | // PROJECT : XrmToolBox 2 | // This project was developed by Tanguy Touzard 3 | // CODEPLEX: http://xrmtoolbox.codeplex.com 4 | // BLOG: http://mscrmtools.blogspot.com 5 | 6 | using System; 7 | using System.Drawing; 8 | using System.IO; 9 | using System.Windows.Forms; 10 | 11 | namespace XrmToolBox.UserControls 12 | { 13 | public partial class LargePluginModel : PluginModel 14 | { 15 | #region Event Handlers 16 | 17 | public override event ClickedEventHandler Clicked; 18 | 19 | #endregion 20 | 21 | #region Constructors 22 | 23 | public LargePluginModel() 24 | { 25 | InitializeComponent(); 26 | } 27 | 28 | public LargePluginModel(Image image, string title, string description, string company, string version, Color backColor, Color primaryColor, Color secondaryColor, int count) 29 | { 30 | InitializeComponent(); 31 | 32 | picture.Image = image; 33 | lblTitle.Text = title; 34 | lblDescription.Text = description; 35 | lblAuthor.Text = "Author: " + company; 36 | lblVersion.Text = "Version: " + version; 37 | 38 | lblTitle.ForeColor = primaryColor; 39 | lblDescription.ForeColor = primaryColor; 40 | lblAuthor.ForeColor = primaryColor; 41 | lblVersion.ForeColor = primaryColor; 42 | 43 | BackColor = backColor; 44 | 45 | if (count > 0) 46 | { 47 | lblCount.Text = count.ToString(); 48 | } 49 | else 50 | { 51 | lblCount.Visible = false; 52 | } 53 | } 54 | 55 | #endregion Constructors 56 | 57 | private new void MouseClick(object sender, EventArgs e) 58 | { 59 | if(Clicked != null) 60 | Clicked(this, new EventArgs()); 61 | } 62 | 63 | public void UpdateCount(int count) 64 | { 65 | lblCount.Text = count.ToString(); 66 | } 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /XrmToolBox/UserControls/PluginModel.cs: -------------------------------------------------------------------------------- 1 | // PROJECT : XrmToolBox 2 | // This project was developed by Tanguy Touzard 3 | // CODEPLEX: http://xrmtoolbox.codeplex.com 4 | // BLOG: http://mscrmtools.blogspot.com 5 | 6 | using System; 7 | using System.Drawing; 8 | using System.Windows.Forms; 9 | 10 | namespace XrmToolBox.UserControls 11 | { 12 | public class PluginModel : UserControl 13 | { 14 | #region Delegates 15 | 16 | public delegate void ClickedEventHandler(object sender, EventArgs e); 17 | 18 | #endregion 19 | 20 | #region Event Handlers 21 | 22 | public virtual event ClickedEventHandler Clicked; 23 | 24 | #endregion 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /XrmToolBox/UserControls/SmallPluginLabel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Drawing; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Windows.Forms; 7 | 8 | namespace XrmToolBox.UserControls 9 | { 10 | internal class SmallPluginLabel : Label 11 | { 12 | private Color primaryFontColor; 13 | private Color secondaryFontColor; 14 | public Color PrimaryFontColor { 15 | set { primaryFontColor = value; } 16 | } 17 | 18 | public Color SecondaryFontColor 19 | { 20 | set 21 | { 22 | secondaryFontColor = value; 23 | } 24 | } 25 | 26 | protected override void OnPaint(PaintEventArgs e) 27 | { 28 | Point drawPoint = new Point(0, 0); 29 | 30 | try 31 | { 32 | int indexOfBy = Text.IndexOf("by"); 33 | int indexOfSeparator = Text.IndexOf(" - ", indexOfBy); 34 | 35 | string firstPart = Text.Substring(0, indexOfBy); 36 | string secondPart = Text.Substring(indexOfBy, indexOfSeparator - indexOfBy); 37 | string thirdPart = Text.Remove(0, indexOfSeparator); 38 | 39 | 40 | Font normalFont = this.Font; 41 | 42 | Font smallFont = new Font(normalFont.FontFamily, normalFont.Size - 4); 43 | 44 | Size normalSize1 = TextRenderer.MeasureText(firstPart, normalFont); 45 | Size smallSize = TextRenderer.MeasureText(secondPart, smallFont); 46 | Size normalSize2 = TextRenderer.MeasureText(thirdPart, normalFont); 47 | 48 | Rectangle normalRect1 = new Rectangle(drawPoint, normalSize1); 49 | Rectangle smallRect = new Rectangle(new Point(normalSize1.Width - 10,5), smallSize); 50 | Rectangle normalRect2 = new Rectangle(new Point(smallSize.Width + normalSize1.Width - 20, 0), normalSize2); 51 | 52 | TextRenderer.DrawText(e.Graphics, firstPart, normalFont, normalRect1, primaryFontColor); //ForeColor); 53 | TextRenderer.DrawText(e.Graphics, secondPart, smallFont, smallRect, secondaryFontColor);//Color.Gray); 54 | TextRenderer.DrawText(e.Graphics, thirdPart, normalFont, normalRect2, primaryFontColor); //ForeColor); 55 | } 56 | catch 57 | { 58 | TextRenderer.DrawText(e.Graphics, Text, Font, drawPoint, ForeColor); 59 | } 60 | } 61 | } 62 | } -------------------------------------------------------------------------------- /XrmToolBox/UserControls/SmallPluginModel.cs: -------------------------------------------------------------------------------- 1 | // PROJECT : XrmToolBox 2 | // This project was developed by Tanguy Touzard 3 | // CODEPLEX: http://xrmtoolbox.codeplex.com 4 | // BLOG: http://mscrmtools.blogspot.com 5 | 6 | using System; 7 | using System.Drawing; 8 | using System.IO; 9 | using System.Windows.Forms; 10 | 11 | namespace XrmToolBox.UserControls 12 | { 13 | public partial class SmallPluginModel : PluginModel 14 | { 15 | #region Event Handlers 16 | 17 | public override event ClickedEventHandler Clicked; 18 | 19 | #endregion 20 | 21 | #region Constructors 22 | 23 | public SmallPluginModel() 24 | { 25 | InitializeComponent(); 26 | } 27 | 28 | public SmallPluginModel(Image image, string title, string description, string company, string version, Color backColor, Color primaryColor, Color secondaryColor, int count) 29 | { 30 | InitializeComponent(); 31 | 32 | picture.Image = image; 33 | lblTitle.PrimaryFontColor = primaryColor; 34 | lblTitle.SecondaryFontColor = secondaryColor; 35 | lblTitle.Text = string.Format("{0} by {1} - {2}", title, company, version); 36 | 37 | if (count > 0) 38 | { 39 | lblCount.Text = count.ToString(); 40 | lblCount.ForeColor = secondaryColor; 41 | } 42 | else 43 | { 44 | lblCount.Visible = false; 45 | } 46 | 47 | var tip = new ToolTip(); 48 | tip.SetToolTip(lblTitle, description); 49 | 50 | BackColor = backColor; 51 | } 52 | 53 | #endregion Constructors 54 | 55 | private new void MouseClick(object sender, EventArgs e) 56 | { 57 | if(Clicked != null) 58 | Clicked(this, new EventArgs()); 59 | } 60 | 61 | private void LblTitleClick(object sender, EventArgs e) 62 | { 63 | MouseClick(null, null); 64 | } 65 | 66 | public void UpdateCount(int count) 67 | { 68 | lblCount.Text = count.ToString(); 69 | Refresh(); 70 | } 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /XrmToolBox/XrmToolBox.csproj.vspscc: -------------------------------------------------------------------------------- 1 | "" 2 | { 3 | "FILE_VERSION" = "9237" 4 | "ENLISTMENT_CHOICE" = "NEVER" 5 | "PROJECT_FILE_RELATIVE_PATH" = "" 6 | "NUMBER_OF_EXCLUDED_FILES" = "0" 7 | "ORIGINAL_PROJECT_FILE_PATH" = "" 8 | "NUMBER_OF_NESTED_PROJECTS" = "0" 9 | "SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" 10 | } 11 | -------------------------------------------------------------------------------- /XrmToolBox/XrmToolBox201512.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/XrmToolBox201512.ico -------------------------------------------------------------------------------- /XrmToolBox/favicon3Fr.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MscrmTools/XrmToolBox/7f3daa3d24d5ca5d6c03845d2eed5f49d46aa4de/XrmToolBox/favicon3Fr.ico -------------------------------------------------------------------------------- /packages/repositories.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | --------------------------------------------------------------------------------