示例#1
0
        public BloomMetadataEditorDialog(Metadata metadata, bool isDerivedBook) : base(metadata)
        {
            ShowCreator = false;
            if (isDerivedBook)
            {
                this.SuspendLayout();

                _replaceCopyrightCheckbox                 = new CheckBox();
                _replaceCopyrightCheckbox.Text            = LocalizationManager.GetString("EditTab.CopyrightThisDerivedVersion", "Copyright and license this translated version");
                _replaceCopyrightCheckbox.Checked         = true;
                _replaceCopyrightCheckbox.CheckedChanged += ReplaceCopyrightCheckboxChanged;
                _replaceCopyrightCheckbox.Location        = new System.Drawing.Point(20, 10);
                _replaceCopyrightCheckbox.AutoSize        = true;

                var topPanel = new Panel();
                topPanel.SuspendLayout();
                topPanel.Dock     = System.Windows.Forms.DockStyle.Top;
                topPanel.AutoSize = true;
                topPanel.Controls.Add(_replaceCopyrightCheckbox);

                this.Controls.Add(topPanel);
                this.Size = new System.Drawing.Size(this.Width, this.Height + topPanel.Height);
                MetadataControl.BringToFront();
                topPanel.ResumeLayout(false);
                topPanel.PerformLayout();
                this.ResumeLayout(false);
            }
        }
 public void OnXamlRendered(FrameworkElement control)
 {
     _metadataControl = control.FindChild("metadataControl") as MetadataControl;
     if (_metadataControl != null)
     {
         _metadataControl.Items = _units;
     }
 }
        public BloomMetadataEditorDialog(Metadata metadata, bool isDerivedBook) : base(metadata)
        {
            ShowCreator = false;
            if (isDerivedBook)
            {
                this.SuspendLayout();

                _replaceCopyrightCheckbox                 = new CheckBox();
                _replaceCopyrightCheckbox.Text            = LocalizationManager.GetString("EditTab.CopyrightThisDerivedVersion", "Copyright and license this translated version");
                _replaceCopyrightCheckbox.Checked         = true;
                _replaceCopyrightCheckbox.CheckedChanged += ReplaceCopyrightCheckboxChanged;
                _replaceCopyrightCheckbox.Location        = new System.Drawing.Point(20, 10);
                _replaceCopyrightCheckbox.AutoSize        = true;

                var topPanel = new Panel();
                topPanel.SuspendLayout();
                topPanel.Dock     = System.Windows.Forms.DockStyle.Top;
                topPanel.AutoSize = true;
                topPanel.Controls.Add(_replaceCopyrightCheckbox);

                this.Controls.Add(topPanel);
                // I don't know why we need to subtract 30 here but it avoids an undesirably larger gap above
                // the OK and Cancel buttons.
                this.Size = new System.Drawing.Size(this.Width, this.Height + topPanel.Height - 30);
                MetadataControl.BringToFront();
                topPanel.ResumeLayout(false);
                topPanel.PerformLayout();
                this.ResumeLayout(false);
            }

            // The tweaks here allow us to adjust the layout of the dialog so it fits better on smaller screens.
            // For a long-term solution it would be better to fix the underlying implementation in LibPalaso.
            // But this fix has a very short lifetime; it is already replaced with a new React implementation
            // in 5.3. So this is easier than negotiating the redesign of a possibly shared dialog.

            // The spec for BL-11207 says we can reduce the copyright holder field to one line, but this
            // actually still has room for at least two, yet still gives us a good reduction. Also, we need the remaining
            // height for some localizations (e.g., az) of "Copyright holder")
            const int copyrightPanelReduction = 30;
            // The actual copyright holder field is docked in such a way that all we have to do is shrink the
            // containing panel (and move the lower controls up).
            var copyrightPanel = MetadataControl.Controls.Cast <Control>().First(x => x is TableLayoutPanel);

            copyrightPanel.Height -= copyrightPanelReduction;
            foreach (Control c in MetadataControl.Controls)
            {
                if (c.Top > copyrightPanel.Bottom)
                {
                    c.Top -= copyrightPanelReduction;
                }
            }

            // We will also place the CC license picture over on the right, saving its height plus a little padding.
            var ccLicenseBox          = MetadataControl.Controls.Cast <Control>().First(x => x is BetterPictureBox);
            int ccLicenseBoxReduction = ccLicenseBox.Height + 5;

            foreach (Control c in MetadataControl.Controls)
            {
                if (c.Top > ccLicenseBox.Bottom)
                {
                    c.Top -= ccLicenseBoxReduction;
                }
            }
            ccLicenseBox.Top -= 165;
            // What we want to do here is add 250 to its Left to move it over. We can't do that because
            // the Libpalaso code uses the Left of this control to align the Left of the LicenseRights
            // control when the CC image is hidden (i.e., when it contains Custom rights rather than
            // Additional Requests). So, instead, we make it wider by twice that amount.
            // Centering of the image puts it where we want.
            ccLicenseBox.Width += 500;

            // Even before these tweaks, this control sometimes lost part of its last letter to the label on its right.
            var cc0Box = MetadataControl.Controls.Cast <Control>().First(x => x.Name == "_publicDomainCC0");

            cc0Box.BringToFront();

            // panel2 contains the "Allow commercial use..." heading and radio buttons.
            // The heading may go the full width in some localizations, so we've arranged to place the image
            // to the right of the "yes/no" radio buttons, which are unlikely to need to be too wide.
            // But we can't just make the panel narrower; bad things happen if it needs to wrap the heading
            // onto a second line. Nor does Windows.Forms support giving it a transparent background.
            // So the only way to allow its first child to be wide and the picture to be seen below that
            // and right of the radio buttons is to move the heading out of the panel, adjust the positions
            // of the panel children, and make the panel less wide so it doesn't cover the picture.
            // (We can't just promote ALL the children and get rid of the panel, because the behavior
            // of the radio buttons is somehow tied to being grouped in this panel.)
            var panel2  = MetadataControl.Controls.Cast <Control>().First(x => x.Name == "panel2");
            var heading = panel2.Controls[0];

            heading.Location = new Point(heading.Location.X + panel2.Location.X, heading.Location.Y + panel2.Location.Y);
            MetadataControl.Controls.Add(heading);
            const int headingHeight = 17;

            foreach (Control c in panel2.Controls.Cast <Control>().ToArray())
            {
                c.Top -= headingHeight;
            }
            panel2.Height -= headingHeight;
            panel2.Top    += headingHeight;
            panel2.Width   = 250;

            // This is just a tweak. It wasn't well aligned before, but now it's between two other boxes
            // and closer to one of them, it is more noticeable, so we adjust it.
            var moreInfoBox = MetadataControl.Controls.Cast <Control>().First(x => x.Name == "_linkToDefinitionOfNonCommercial");

            moreInfoBox.Left -= 5;

            // This is how much we get to shrink the main control and the whole dialog.
            var totalReduction = copyrightPanelReduction + ccLicenseBoxReduction;

            MetadataControl.Height -= totalReduction;
            Height -= totalReduction;             // OK and Cancel buttons move by being docked.
        }