private static Panel CreateViewFooter([NotNull] FormSparseWorkingCopyViewModel sparse, [NotNull] ToolTip tooltip, [NotNull] out Button btnSave, [NotNull] out Button btnCancel) { var tableFooterButtons = new TableLayoutPanel() { BackColor = SystemColors.ControlLightLight, Dock = DockStyle.Fill, AutoSize = true, AutoSizeMode = AutoSizeMode.GrowAndShrink, ColumnCount = 4, RowCount = 1, Margin = Padding.Empty, ColumnStyles = { new ColumnStyle(SizeType.Percent, 100) }, Padding = new Padding(10, 15, 10, 15), CellBorderStyle = TableLayoutPanelCellBorderStyle.None }; CheckBox check; tableFooterButtons.Controls.Add(check = new CheckBox() { Text = Globalized.Strings.RefreshWorkingCopyUsingTheCurrentSettingsAndRules.Text, Checked = sparse.IsRefreshWorkingCopyOnSave, AutoSize = true, Dock = DockStyle.Fill, Margin = Padding.Empty }); check.CheckedChanged += delegate { sparse.IsRefreshWorkingCopyOnSave = check.Checked; }; tooltip.SetToolTip(check, string.Format(Globalized.Strings.RefreshWorkingCopyCheckboxHint.Text, FormSparseWorkingCopyViewModel.RefreshWorkingCopyCommandName)); tableFooterButtons.Controls.Add(btnSave = new Button { Width = 75, Height = 23, Text = Globalized.Strings.Save.Text, DialogResult = DialogResult.OK, Dock = DockStyle.Bottom, UseVisualStyleBackColor = true, Margin = Padding.Empty }); tableFooterButtons.Controls.Add(new Control { Width = 10, Dock = DockStyle.Fill }); tableFooterButtons.Controls.Add(btnCancel = new Button { Width = 75, Height = 23, Text = Globalized.Strings.Cancel.Text, DialogResult = DialogResult.Cancel, Dock = DockStyle.Bottom, UseVisualStyleBackColor = true, Margin = Padding.Empty }); return(tableFooterButtons); }
public FormSparseWorkingCopy(GitUICommands commands) : base(commands) { var sparse = new FormSparseWorkingCopyViewModel(commands); BindToViewModelGlobal(sparse); CreateView(sparse); InitializeComplete(); }
public FormSparseWorkingCopy([CanBeNull] GitUICommands aCommands /* Translation tests set it to NULL */) : base(aCommands) { if(aCommands == null) return; var sparse = new FormSparseWorkingCopyViewModel(aCommands); BindToViewModelGlobal(sparse); CreateView(sparse); Translate(); }
public FormSparseWorkingCopy([CanBeNull] GitUICommands aCommands /* Translation tests set it to NULL */) : base(aCommands) { if (aCommands == null) { return; } var sparse = new FormSparseWorkingCopyViewModel(aCommands); BindToViewModelGlobal(sparse); CreateView(sparse); Translate(); }
private void BindToViewModelGlobal([NotNull] FormSparseWorkingCopyViewModel sparse) { if (sparse == null) { throw new ArgumentNullException(nameof(sparse)); } sparse.ComfirmAdjustingRulesOnDeactRequested += (sender, args) => { if (!args.Cancel) { args.Cancel |= MessageBox.Show(this, string.Format(Globalized.Strings.ConfirmDisableGitSparse.Text, (args.IsCurrentRuleSetEmpty ? Globalized.Strings.WithTheSparsePassFilterEmptyOrMissing.Text : Globalized.Strings.WithSomeRulesStillInTheSparsePassFilter.Text)), Globalized.Strings.DisableGitSparse.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes; } }; }
private void CreateView([NotNull] FormSparseWorkingCopyViewModel sparse) { Text = Globalized.Strings.SparseWorkingCopy.Text; AutoScaleMode = AutoScaleMode.Dpi; StartPosition = FormStartPosition.CenterParent; MinimumSize = new Size(800, 600); // Tooltips support for the form var componentcontainer = new Container(); _disposable1 = componentcontainer; var tooltip = new ToolTip(componentcontainer) { AutomaticDelay = (int)TimeSpan.FromSeconds(10).TotalMilliseconds }; Panel panelHeader = CreateViewHeader(); Button btnSave; Button btnCancel; Panel panelFooter = CreateViewFooter(sparse, tooltip, out btnSave, out btnCancel); Control panelOnOff = CreateViewOnOff(sparse, tooltip); Panel panelRules = CreateViewRules(sparse, tooltip, this); sparse.FirePropertyChanged(); // Initial binding Controls.Add(new TableLayoutPanel() { Dock = DockStyle.Fill, Padding = Padding.Empty, Margin = Padding.Empty, AutoSize = true, AutoSizeMode = AutoSizeMode.GrowAndShrink, Controls = { panelHeader, CreateViewSeparator(), panelOnOff, panelRules, CreateViewSeparator(), panelFooter }, RowStyles = { new RowStyle(), new RowStyle(), new RowStyle(), new RowStyle(SizeType.Percent, 100) } }); AcceptButton = btnSave; CancelButton = btnCancel; BindSaveOnClose(sparse); // Special binding: as the editor takes Enter for itself, bind Ctrl+Enter to commit KeyPreview = true; PreviewKeyDown += (sender, args) => { if (args.KeyData == (Keys.Enter | Keys.Control)) { DialogResult = DialogResult.OK; Close(); } }; }
private static Panel CreateViewRules([NotNull] FormSparseWorkingCopyViewModel sparse, [NotNull] ToolTip tooltip, [NotNull] IGitUICommandsSource cmdsource) { // Label var label1 = new Label() { AutoSize = true, Text = Globalized.Strings.SpecifyTheRulesForIncludingOrExcludingFilesAndDirectories.Text, Dock = DockStyle.Top, Padding = new Padding(10, 5, 10, 0) }; var label2 = new Label() { AutoSize = true, Text = Globalized.Strings.SpecifyTheRulesForIncludingOrExcludingFilesAndDirectoriesLine2.Text, Dock = DockStyle.Top, Padding = new Padding(25, 3, 10, 3), ForeColor = SystemColors.GrayText }; sparse.PropertyChanged += delegate { label1.Visible = label2.Visible = sparse.IsSparseCheckoutEnabled; }; // Text editor var editor = new FileViewer() { Dock = DockStyle.Fill, UICommandsSource = cmdsource, IsReadOnly = false }; editor.TextLoaded += (sender, args) => sparse.SetRulesTextAsOnDisk(editor.GetText()); try { FileInfo sparsefile = sparse.GetPathToSparseCheckoutFile(); if (sparsefile.Exists) { editor.ViewFile(sparsefile.FullName); } } catch (Exception ex) { MessageBox.Show(ActiveForm, Globalized.Strings.CannotLoadTheTextOfTheSparseFile.Text + "\n\n" + ex.Message, Globalized.Strings.SparseWorkingCopy.Text + " – " + Globalized.Strings.LoadFile.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); } editor.TextChanged += (sender, args) => sparse.RulesText = editor.GetText() ?? ""; tooltip.SetToolTip(editor, Globalized.Strings.EditsTheContentsOfTheGitInfoSparseCheckoutFile.Text); Control separator = CreateViewSeparator(DockStyle.Top); sparse.PropertyChanged += delegate { editor.Visible = separator.Visible = sparse.IsSparseCheckoutEnabled; }; var panel = new Panel() { Margin = Padding.Empty, Padding = Padding.Empty, Controls = { editor, separator, label2, label1 }, AutoSize = true, Dock = DockStyle.Fill }; return(panel); }
private static Control CreateViewOnOff([NotNull] FormSparseWorkingCopyViewModel sparse, [NotNull] ToolTip tooltip) { // When disabled: hint-like panel to enable var panelWhenDisabled = new TableLayoutPanel() { BackColor = SystemColors.Info, AutoSize = true, AutoSizeMode = AutoSizeMode.GrowAndShrink, Dock = DockStyle.Bottom, ColumnCount = 2, RowCount = 1, ColumnStyles = { new ColumnStyle(SizeType.Percent, 100) }, Margin = Padding.Empty, Padding = new Padding(10, 5, 10, 5) }; panelWhenDisabled.Controls.Add(new Label() { ForeColor = SystemColors.InfoText, Text = Globalized.Strings.SparseWorkingCopySupportHasNotBeenEnabledForThisRepository.Text, Dock = DockStyle.Fill, AutoSize = true, TextAlign = ContentAlignment.MiddleLeft, Margin = Padding.Empty }); Button btnEnable; panelWhenDisabled.Controls.Add(btnEnable = new Button { Width = 75, Height = 23, Text = Globalized.Strings.Enable.Text, Anchor = AnchorStyles.Bottom | AnchorStyles.Right, Dock = DockStyle.Right, UseVisualStyleBackColor = true, Margin = Padding.Empty }); btnEnable.Click += delegate { sparse.IsSparseCheckoutEnabled = true; }; tooltip.SetToolTip(btnEnable, string.Format(Globalized.Strings.SetsTheGitPropertyToTrueForTheLocalRepository.Text, FormSparseWorkingCopyViewModel.SettingCoreSparseCheckout)); sparse.PropertyChanged += delegate { panelWhenDisabled.Visible = !sparse.IsSparseCheckoutEnabled; }; // When-disabled case should have a separator Control separatorWhenDisabled = CreateViewSeparator(DockStyle.Bottom); sparse.PropertyChanged += delegate { separatorWhenDisabled.Visible = !sparse.IsSparseCheckoutEnabled; }; // When enabled: a less bold link to disable string sLabelBeforeLink = Globalized.Strings.SparseWorkingCopySupportIsEnabled.Text + ' '; string sLabelWithLink = sLabelBeforeLink + Globalized.Strings.DisableForThisRepository.Text; var labelWhenEnabled = new LinkLabel() { Text = sLabelWithLink, Dock = DockStyle.Bottom, AutoSize = true, Padding = new Padding(10, 10, 10, 5), FlatStyle = FlatStyle.System, UseCompatibleTextRendering = true }; labelWhenEnabled.Links.Add(new LinkLabel.Link(sLabelBeforeLink.Length, sLabelWithLink.Length - sLabelBeforeLink.Length)); labelWhenEnabled.LinkClicked += delegate { sparse.IsSparseCheckoutEnabled = false; }; tooltip.SetToolTip(labelWhenEnabled, string.Format(Globalized.Strings.SetsTheGitPropertyToFalseForTheLocalRepository.Text, FormSparseWorkingCopyViewModel.SettingCoreSparseCheckout)); sparse.PropertyChanged += delegate { labelWhenEnabled.Visible = sparse.IsSparseCheckoutEnabled; }; return(new Panel() { Dock = DockStyle.Fill, Controls = { panelWhenDisabled, separatorWhenDisabled, labelWhenEnabled }, Margin = Padding.Empty, Padding = Padding.Empty, AutoSize = true }); }
private void BindSaveOnClose(FormSparseWorkingCopyViewModel sparse) { if (sparse is null) { throw new ArgumentNullException(nameof(sparse)); } Closing += (sender, args) => { try { // Save on OK — even if not dirty, to upd the rules if checkbox is ON if (DialogResult == DialogResult.OK) { sparse.SaveChanges(); return; } // Closing/canceling, prompt to save if dirty if (sparse.IsWithUnsavedChanges()) { switch (MessageBox.Show(this, Globalized.Strings.YouHaveMadeChangesToSettingsOrRulesWouldYouLikeToSaveThem.Text, Globalized.Strings.SparseWorkingCopy.Text + " – " + Globalized.Strings.Cancel.Text, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)) { case DialogResult.Yes: sparse.SaveChanges(); break; case DialogResult.No: // Just exit break; default: // Cancel, or error args.Cancel = true; break; } } } catch (Exception ex) { MessageBox.Show(ActiveForm, Globalized.Strings.CouldNotSave.Text + "\n\n" + ex.Message, Globalized.Strings.SparseWorkingCopy.Text + " – " + Globalized.Strings.SaveFile.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); } }; }