Example #1
0
 public static void TransferContextMenuForControl(ISheetComponent source)
 {
     if (source.sheet != null &&
         source.sheet.form != null &&
         source.sheet.form.contextMenuDuplicators.TryGetValue(source.uiElement, out List <Control> destinations))
     {
         foreach (Control dest in destinations)
         {
             dest.ContextMenuStrip = source.uiElement.ContextMenuStrip;
         }
     }
 }
Example #2
0
        public void RefreshSheet()
        {
            //in case we're being called from another thread
            if (PlayerTextBox.InvokeRequired)
            {
                refreshSheetCallback d = new refreshSheetCallback(RefreshSheet);
                this.Invoke(d, new object[] { });
                return;
            }

            autoSaveDisabled = true;
            drawingHelper.SuspendDrawing();

            NameTextBox.Text      = sheet.name;
            PlayerTextBox.Text    = sheet.player;
            ChronicleTextBox.Text = sheet.chronicle;

            LeftComponentTable.Controls.Clear();
            LeftComponentTable.RowStyles.Clear();
            MiddleComponentTable.Controls.Clear();
            MiddleComponentTable.RowStyles.Clear();
            RightComponentTable.Controls.Clear();
            RightComponentTable.RowStyles.Clear();

            int amountOfRows = Convert.ToInt32(Math.Ceiling(sheet.components.Count / 2.0F));

            sheet.allowRefreshingMods = false;

            contextMenuDuplicators.Clear();

            for (int i = 0; i < sheet.components.Count; i++)
            {
                ISheetComponent component = sheet.components[i];

                TableLayoutPanel componentUIElement = new TableLayoutPanel
                {
                    ColumnCount = 1
                };
                componentUIElement.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
                componentUIElement.Dock     = DockStyle.Fill;
                componentUIElement.RowCount = 2;
                componentUIElement.TabIndex = 0;
                componentUIElement.Size     = new Size(292, 26);

                Label nameLabel = new Label
                {
                    Anchor   = AnchorStyles.None,
                    AutoSize = true,
                    Size     = new Size(35, 13),
                    TabIndex = 0
                };
                nameLabel.Font = new Font(nameLabel.Font, FontStyle.Bold);
                nameLabel.Text = component.name.Replace('_', ' ');

                componentUIElement.Controls.Add(nameLabel, 0, 0);
                Control componentValueElement = component.ConstructUIElement();
                componentUIElement.Controls.Add(componentValueElement, 0, 1);
                //pass on context menu strip to other components as well
                contextMenuDuplicators.Add(componentValueElement, new List <Control> {
                    componentUIElement, nameLabel
                });
                TransferContextMenuForControl(component);

                if (component.column == ColumnId.Left)
                {
                    LeftComponentTable.Controls.Add(componentUIElement);
                    ++LeftComponentTable.RowCount;
                }
                else if (component.column == ColumnId.Middle)
                {
                    MiddleComponentTable.Controls.Add(componentUIElement);
                    ++MiddleComponentTable.RowCount;
                }
                else
                {
                    RightComponentTable.Controls.Add(componentUIElement);
                    ++RightComponentTable.RowCount;
                }
            }

            sheet.allowRefreshingMods = true;

            //all components refreshed, now apply modification sets
            sheet.RefreshModifications(false);

            //add empty tables to be used for padding out each column
            LeftComponentTable.Controls.Add(new TableLayoutPanel());
            ++LeftComponentTable.RowCount;
            MiddleComponentTable.Controls.Add(new TableLayoutPanel());
            ++MiddleComponentTable.RowCount;
            RightComponentTable.Controls.Add(new TableLayoutPanel());
            ++RightComponentTable.RowCount;

            ResizeColumn(LeftComponentTable);
            ResizeColumn(MiddleComponentTable);
            ResizeColumn(RightComponentTable);

            drawingHelper.ResumeDrawing(true);
            autoSaveDisabled = false;
        }