public ProductionFrame(ProductionComponent source)
            : base(1, 3)
        {
            padding_ = new Vector2(5);
            source_ = source;
            buttons_ = new ItemButton[2];
            for (int index = 0; index < 2; ++index)
            {
                buttons_[index] = new ItemButton(source_, index);
                buttons_[index].getSource = getSource;
                buttons_[index].getComponent = getComponent;
                buttons_[index].getTarget = source_.getItem;
            }
            bar_ = new ProgressBar();

            set(0, 0, buttons_[0]);
            set(0, 1, bar_);
            set(0, 2, buttons_[1]);

            refresh();
            source_.register(refresh);
        }
        public SystemsWindow()
            : base(2, 1, 5)
        {
            FrameComponent frame, frame1;
            ProgressBar bar;
            Text text;
            Window window;
            Text title = new Text("Ship Systems Overview", true);
            title.centerX = false;
            set(0, 0, title);

            FrameComponent subFrame = new FrameComponent(2, 2);
            set(1, 0, subFrame);

            #region LEFT
            FrameComponent left = new FrameComponent(5, 1, 5);
            left.centerY = false;
            subFrame.set(0, 0, left);
            {
                #region POWER
                frame = new FrameComponent(2, 1, 5);
                frame.fill = true;
                left.set(0, 0, frame);
                {
                    title = new Text("Power", true);
                    title.centerX = false;
                    frame.set(0, 0, title);

                    window = new Window(2, 2, 5);
                    window.color_ = Color.Black;
                    window.fill = true;
                    frame.set(1, 0, window);
                    {
                        text = new Text("Demand/Supply:", false, 5);
                        text.centerX = false;
                        window.set(0, 0, text);

                        frame1 = new FrameComponent(1, 3, 5);
                        window.set(0, 1, frame1);
                        {
                            text = new Text("4.0 GW", false, 5);
                            frame1.set(0, 0, text);

                            bar = new ProgressBar();
                            bar.percent = 4f / 6.8f;
                            frame1.set(0, 1, bar);

                            text = new Text("6.8 GW", false, 5);
                            frame1.set(0, 2, text);
                        }

                        text = new Text("Reserves:", false, 5);
                        text.centerX = false;
                        window.set(1, 0, text);

                        frame1 = new FrameComponent(1, 3, 5);
                        window.set(1, 1, frame1);
                        {
                            text = new Text("0.0 J ", false, 5);
                            frame1.set(0, 0, text);

                            bar = new ProgressBar();
                            bar.percent = 0;
                            frame1.set(0, 1, bar);

                            text = new Text("0.0 J ", false, 5);
                            frame1.set(0, 2, text);
                        }
                    }
                }
                #endregion
                #region SHIELD
                frame = new FrameComponent(2, 1, 5);
                frame.fill = true;
                left.set(1, 0, frame);
                {
                    title = new Text("Shields", true);
                    title.centerX = false;
                    frame.set(0, 0, title);

                    window = new Window(1, 3, 5);
                    window.color_ = Color.Black;
                    window.fill = true;
                    frame.set(1, 0, window);
                    {
                        text = new Text("0 P", false, 5);
                        window.set(0, 0, text);

                        bar = new ProgressBar();
                        bar.fg = Color.Red;
                        bar.percent = 1;
                        window.set(0, 1, bar);

                        text = new Text("0 P", false, 5);
                        window.set(0, 2, text);
                    }
                }
                #endregion
                #region ENGINES
                frame = new FrameComponent(2, 1, 5);
                frame.fill = true;
                left.set(2, 0, frame);
                {
                    title = new Text("Engines", true);
                    title.centerX = false;
                    frame.set(0, 0, title);

                    window = new Window(2, 2, 5);
                    window.color_ = Color.Black;
                    window.fill = true;
                    frame.set(1, 0, window);
                    {
                        text = new Text("Engines Online:", false, 5);
                        text.centerX = false;
                        window.set(0, 0, text);

                        engineText = new Text("0 / 6", false, 5);
                        window.set(0, 1, engineText);

                        text = new Text("Thrust:", false, 5);
                        text.centerX = false;
                        window.set(1, 0, text);

                        frame1 = new FrameComponent(1, 3, 5);
                        window.set(1, 1, frame1);
                        {
                            thrustText = new Text("0.0 N ", false, 5);
                            frame1.set(0, 0, thrustText);

                            thrustbar = new ProgressBar();
                            frame1.set(0, 1, thrustbar);

                            thrustMaxText = new Text("47.3 MN", false, 5);
                            frame1.set(0, 2, thrustMaxText);
                        }
                    }
                }
                #endregion
                #region WEAPONS
                frame = new FrameComponent(2, 1, 5);
                frame.fill = true;
                left.set(3, 0, frame);
                {
                    title = new Text("Weapons", true);
                    title.centerX = false;
                    frame.set(0, 0, title);

                    window = new Window(3, 2, 5);
                    window.color_ = Color.Black;
                    window.fill = true;
                    frame.set(1, 0, window);
                    {
                        text = new Text("Kinetic Turrets Online:", false, 5);
                        text.centerX = false;
                        window.set(0, 0, text);

                        text = new Text("0 / 0", false, 5);
                        window.set(0, 1, text);

                        text = new Text("Laser Turrets Online:", false, 5);
                        text.centerX = false;
                        window.set(1, 0, text);

                        text = new Text("1 / 2", false, 5);
                        window.set(1, 1, text);

                        text = new Text("Missile Turrets Online:", false, 5);
                        text.centerX = false;
                        window.set(2, 0, text);

                        text = new Text("0 / 0", false, 5);
                        window.set(2, 1, text);
                    }
                }
                #endregion
                #region LIFE SUPPORT
                frame = new FrameComponent(2, 1, 5);
                frame.fill = true;
                left.set(4, 0, frame);
                {
                    title = new Text("Life Support Systems", true);
                    title.centerX = false;
                    frame.set(0, 0, title);

                    window = new Window(1, 2, 5);
                    window.color_ = Color.Black;
                    window.fill = true;
                    frame.set(1, 0, window);
                    {
                        text = new Text("Oxygen:", false, 5);
                        text.centerX = false;
                        window.set(0, 0, text);

                        text = new Text("100%", false, 5);
                        window.set(0, 1, text);
                    }
                }
                #endregion
            }
            #endregion
            #region RIGHT
            FrameComponent right = new FrameComponent(2, 1, 5);
            right.centerY = false;
            subFrame.set(0, 1, right);
            {
                #region SENSORS
                frame = new FrameComponent(2, 1, 5);
                frame.fill = true;
                right.set(0, 0, frame);
                {
                    title = new Text("Sensors", true);
                    title.centerX = false;
                    frame.set(0, 0, title);

                    window = new Window(1, 2, 5);
                    window.color_ = Color.Black;
                    window.fill = true;
                    frame.set(1, 0, window);
                    {
                        text = new Text("Effective Range:", false, 5);
                        text.centerX = false;
                        window.set(0, 0, text);

                        text = new Text("384.4 Mm", false, 5);
                        window.set(0, 1, text);
                    }
                }
                #endregion
                #region MAP
                Map map = new Map();
                map.padding_ = new Vector2(10);
                right.set(1, 0, map);
                #endregion
            }
            #endregion

            pack();
            Locator.getMessageBoard().register(onPost);
        }