source: branches/eraser6/Eraser/MainForm.cs @ 325

Revision 325, 5.7 KB checked in by lowjoel, 7 years ago (diff)

Added TranslateControl? to the Gettext utilities class. The function finds every control on the provided control and translates the control's strings. Specializations for Menus and ContextMenus? provided. Specializations for ListView? groups and columns also provided.
Menus may need to be translated explicitly though, since they may not be associated with any control on the control to be translated.

Line 
1using System;
2using System.Collections.Generic;
3using System.ComponentModel;
4using System.Data;
5using System.Drawing;
6using System.Drawing.Drawing2D;
7using System.Text;
8using System.Windows.Forms;
9using Eraser.Util;
10
11namespace Eraser
12{
13    public partial class MainForm : Form
14    {
15        public enum Pages
16        {
17            SCHEDULER = 0,
18            SETTINGS
19        }
20
21        private ToolBar ToolBar = new ToolBar();
22        private BasePanel CurrPage = null;
23        private SchedulerPanel SchedulerPage = new SchedulerPanel();
24        private SettingsPanel SettingsPage = new SettingsPanel();
25
26        public MainForm()
27        {
28            InitializeComponent();
29            S.TranslateControl(this);
30            S.TranslateControl(toolbarScheduleMenu);
31            S.TranslateControl(toolbarHelpMenu);
32
33            //Create the toolbar control
34            ToolBar.Name = "toolBar";
35            ToolBar.Location = new Point(14, 27);
36            ToolBar.Size = new Size(500, 26);
37            ToolBar.TabIndex = 1;
38            Controls.Add(ToolBar);
39
40            ToolBarItem schedule = new ToolBarItem();
41            schedule.Bitmap = Properties.Resources.ToolbarSchedule;
42            schedule.Text = S._("Erase Schedule");
43            schedule.Menu = toolbarScheduleMenu;
44            schedule.ToolbarItemClicked += delegate(object sender, EventArgs args)
45            {
46                ChangePage(Pages.SCHEDULER);
47            };
48            ToolBar.Items.Add(schedule);
49
50            ToolBarItem settings = new ToolBarItem();
51            settings.Bitmap = Properties.Resources.ToolbarSettings;
52            settings.Text = S._("Settings");
53            settings.ToolbarItemClicked += delegate(object sender, EventArgs args)
54            {
55                ChangePage(Pages.SETTINGS);
56            };
57            ToolBar.Items.Add(settings);
58
59            ToolBarItem help = new ToolBarItem();
60            help.Bitmap = Properties.Resources.ToolbarHelp;
61            help.Text = S._("Help");
62            help.Menu = toolbarHelpMenu;
63            ToolBar.Items.Add(help);
64
65            //Set the docking style for each of the pages
66            SchedulerPage.Dock = DockStyle.Fill;
67
68            //Show the default page.
69            ChangePage(Pages.SCHEDULER);
70        }
71
72        /// <summary>
73        /// Changes the active page displayed in the form.
74        /// </summary>
75        /// <param name="page">The new page to change to. No action is done when the
76        /// current page is the same as the new page requested</param>
77        public void ChangePage(Pages page)
78        {
79            BasePanel oldPage = CurrPage;
80            switch (page)
81            {
82                case Pages.SCHEDULER:
83                    CurrPage = SchedulerPage;
84                    break;
85                case Pages.SETTINGS:
86                    CurrPage = SettingsPage;
87                    break;
88            }
89
90            if (oldPage != CurrPage)
91            {
92                contentPanel.SuspendLayout();
93                contentPanel.Controls.Remove(oldPage);
94                contentPanel.Controls.Add(CurrPage);
95
96                if (CurrPage.Dock == DockStyle.None)
97                {
98                    CurrPage.Anchor = AnchorStyles.Left | AnchorStyles.Right |
99                        AnchorStyles.Top;
100                    CurrPage.Left = 0;
101                    CurrPage.Top = 0;
102                    CurrPage.Width = contentPanel.Width;
103                }
104                contentPanel.ResumeLayout();
105            }
106        }
107
108        private static GraphicsPath CreateRoundRect(float X, float Y, float width,
109            float height, float radius)
110        {
111            GraphicsPath result = new GraphicsPath();
112
113            //Top line.
114            result.AddLine(X + radius, Y, X + width - 2 * radius, Y);
115
116            //Top-right corner
117            result.AddArc(X + width - 2 * radius, Y, 2 * radius, 2 * radius, 270, 90);
118
119            //Right line.
120            result.AddLine(X + width, Y + radius, X + width, Y + height - 2 * radius);
121
122            //Bottom-right corner
123            result.AddArc(X + width - 2 * radius, Y + height - 2 * radius, 2 * radius, 2 * radius, 0, 90);
124
125            //Bottom line.
126            result.AddLine(X + width - 2 * radius, Y + height, X + radius, Y + height);
127
128            //Bottom-left corner
129            result.AddArc(X, Y + height - 2 *radius, 2 * radius, 2 * radius, 90, 90);
130
131            //Left line
132            result.AddLine(X, Y + height - 2 * radius, X, Y + radius);
133
134            //Top-left corner
135            result.AddArc(X, Y, 2 * radius, 2 * radius, 180, 90);
136            result.CloseFigure();
137
138            return result;
139        }
140
141        private void DrawBackground(Graphics dc)
142        {
143            //Draw the base background
144            dc.FillRectangle(new SolidBrush(Color.FromArgb(unchecked((int)0xFF292929))),
145                new Rectangle(new Point(0, 0), Size));
146
147            //Then the side gradient
148            dc.FillRectangle(new LinearGradientBrush(new Rectangle(0, 0, 338, Math.Max(1, ClientSize.Height)),
149                    Color.FromArgb(unchecked((int)0xFF363636)),
150                    Color.FromArgb(unchecked((int)0xFF292929)), 0.0),
151                0, 0, 338, ClientSize.Height);
152
153            //Draw the top background
154            dc.FillRectangle(new SolidBrush(Color.FromArgb(unchecked((int)0xFF414141))),
155                new Rectangle(0, 0, ClientSize.Width, 32));
156
157            //The top gradient
158            dc.DrawImage(Properties.Resources.BackgroundGradient, new Point(0, 0));
159
160            //And the logo
161            Bitmap logo = Properties.Resources.BackgroundLogo;
162            dc.DrawImage(logo, new Point(ClientSize.Width - logo.Width - 10,
163                (contentPanel.Top - logo.Height) / 2));
164
165            dc.SmoothingMode = SmoothingMode.AntiAlias;
166            dc.FillPath(Brushes.White, CreateRoundRect(11, 74, contentPanel.Width + 8, ClientSize.Height - 85, 3));
167        }
168
169        private void MainForm_Paint(object sender, PaintEventArgs e)
170        {
171            e.Graphics.SetClip(new Rectangle(0, 0, Width, Height), CombineMode.Intersect);
172            DrawBackground(e.Graphics);
173        }
174
175        private void MainForm_Resize(object sender, EventArgs e)
176        {
177            Bitmap bmp = new Bitmap(Width, Height);
178            Graphics dc = Graphics.FromImage(bmp);
179            DrawBackground(dc);
180
181            CreateGraphics().DrawImage(bmp, new Point(0, 0));
182        }
183
184        private void aboutEraserToolStripMenuItem_Click(object sender, EventArgs e)
185        {
186            using (AboutForm form = new AboutForm())
187            {
188                form.ShowDialog();
189            }
190        }
191
192        private void newTaskToolStripMenuItem_Click(object sender, EventArgs e)
193        {
194            ToolStripDropDownItem item = sender as ToolStripDropDownItem;
195            using (TaskPropertiesForm form = new TaskPropertiesForm())
196            {
197                if (form.ShowDialog() == DialogResult.OK)
198                    SchedulerPage.AddTask(form.Task);
199            }
200        }
201    }
202}
Note: See TracBrowser for help on using the repository browser.