Skip to content
This repository was archived by the owner on Apr 17, 2019. It is now read-only.

Commit b31a44c

Browse files
authored
Merge pull request #33 from MarkWhybird/master
Multiple monitors (Issue #8)
2 parents df51a72 + 6e94f1a commit b31a44c

16 files changed

+1205
-366
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,3 +190,7 @@ _Pvt_Extensions/
190190
ModelManifest.xml
191191

192192
Thumbs.db
193+
/.vs
194+
/.vs
195+
/.vs/slnx.sqlite
196+
/.vs/ProjectSettings.json

PreUpgradePrefs.reg

896 Bytes
Binary file not shown.

PreferencesForm.Designer.cs

Lines changed: 144 additions & 111 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

PreferencesForm.cs

Lines changed: 130 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -5,130 +5,184 @@
55

66
namespace pl.polidea.lab.Web_Page_Screensaver
77
{
8+
using System.Collections.Generic;
9+
using System.Drawing;
10+
11+
using global::Web_Page_Screensaver;
12+
813
public partial class PreferencesForm : Form
914
{
10-
public const string URL_PREF = "Url";
11-
public const string CLOSE_ON_ACTIVITY_PREF = "CloseOnActivity";
12-
public const string INTERVAL_PREF = "RotationInterval";
13-
public const string RANDOMIZE_PREF = "RandomOrder";
15+
private PreferencesManager prefsManager = new PreferencesManager();
1416

15-
public const string URL_PREF_DEFAULT = "https://www.google.com/trends/hottrends/visualize?nrow=5&ncol=5 https://screensaver.twingly.com/";
16-
public const string CLOSE_ON_ACTIVITY_PREF_DEFAULT = "True";
17-
public const string INTERVAL_PREF_DEFAULT = "30";
18-
public const string RANDOMIZE_PREF_DEFAULT = "False";
19-
20-
private ContextMenuStrip urlsContextMenu;
17+
private List<PrefsByScreenUserControl> screenUserControls;
2118

2219
public PreferencesForm()
2320
{
2421
InitializeComponent();
25-
26-
urlsContextMenu = new ContextMenuStrip();
27-
urlsContextMenu.Opening += UrlsContextMenu_Opening;
28-
29-
var moveUrlUp = urlsContextMenu.Items.Add("Move Up");
30-
moveUrlUp.Click += MoveUrlUp_Click;
31-
32-
var moveUrlDown = urlsContextMenu.Items.Add("Move Down");
33-
moveUrlDown.Click += MoveUrlDown_Click;
34-
35-
var removeUrl = urlsContextMenu.Items.Add("Remove URL");
36-
removeUrl.Click += RemoveUrl_Click;
37-
38-
lbUrls.ContextMenuStrip = urlsContextMenu;
39-
lbUrls.MouseDown += LbUrls_MouseDown;
4022
}
4123

42-
private void MoveUrlDown_Click(object sender, EventArgs e)
24+
private void PreferencesForm_Load(object sender, EventArgs e)
4325
{
44-
var selected = lbUrls.SelectedItem;
45-
if (selected != null)
26+
cbCloseOnActivity.Checked = prefsManager.CloseOnActivity;
27+
if (Screen.AllScreens.Count() == 1)
28+
{
29+
multiScreenGroup.Enabled = false;
30+
}
31+
else
4632
{
47-
var newIndex = Math.Min(lbUrls.Items.Count - 1, lbUrls.SelectedIndex + 1);
48-
lbUrls.Items.RemoveAt(lbUrls.SelectedIndex);
49-
lbUrls.Items.Insert(newIndex, selected);
50-
lbUrls.SelectedIndex = newIndex;
33+
multiScreenGroup.Enabled = true;
34+
SetMultiScreenButtonFromMode();
35+
ArrangeScreenTabs();
5136
}
5237
}
5338

54-
private void MoveUrlUp_Click(object sender, EventArgs e)
39+
private void LoadValuesForTab(int screenNum)
5540
{
56-
var selected = lbUrls.SelectedItem;
57-
if (selected != null)
41+
var currentPrefsUserControl = screenUserControls[screenNum];
42+
loadUrlsForTabToControl(screenNum, currentPrefsUserControl);
43+
currentPrefsUserControl.nudRotationInterval.Value = prefsManager.GetRotationIntervalByScreen(screenNum);
44+
currentPrefsUserControl.cbRandomize.Checked = prefsManager.GetRandomizeFlagByScreen(screenNum);
45+
}
46+
47+
private void ArrangeScreenTabs()
48+
{
49+
switch (prefsManager.MultiScreenMode)
5850
{
59-
var newIndex = Math.Max(0, lbUrls.SelectedIndex - 1);
60-
lbUrls.Items.RemoveAt(lbUrls.SelectedIndex);
61-
lbUrls.Items.Insert(newIndex, selected);
62-
lbUrls.SelectedIndex = newIndex;
51+
case PreferencesManager.MultiScreenModeItem.Span:
52+
RemoveExtraTabPages();
53+
screenTabControl.TabPages[0].Text = "Composite Screen";
54+
screenUserControls = new List<PrefsByScreenUserControl>() { prefsByScreenUserControl1 };
55+
LoadValuesForTab(0);
56+
break;
57+
case PreferencesManager.MultiScreenModeItem.Mirror:
58+
RemoveExtraTabPages();
59+
screenTabControl.TabPages[0].Text = "Each Screen";
60+
screenUserControls = new List<PrefsByScreenUserControl>() { prefsByScreenUserControl1 };
61+
LoadValuesForTab(0);
62+
break;
63+
case PreferencesManager.MultiScreenModeItem.Separate:
64+
for (int i = 0; i < Screen.AllScreens.Length; i++)
65+
{
66+
TabPage tabPage = null;
67+
68+
if (i >= screenTabControl.TabPages.Count)
69+
{
70+
tabPage = new TabPage();
71+
screenTabControl.TabPages.Add(tabPage);
72+
73+
if (i > 0)
74+
{
75+
var prefsByScreenUserControl = new PrefsByScreenUserControl
76+
{
77+
Name = string.Format("prefsByScreenUserControl{0}", i + 1),
78+
Location = new Point(0, 0), //prefsByScreenUserControl1.Location,
79+
Size = prefsByScreenUserControl1.Size,
80+
Anchor = prefsByScreenUserControl1.Anchor,
81+
BackColor = prefsByScreenUserControl1.BackColor
82+
};
83+
prefsByScreenUserControl.lvUrls.ContextMenuStrip =
84+
prefsByScreenUserControl1.ContextMenuStrip;
85+
screenUserControls.Add(prefsByScreenUserControl);
86+
tabPage.Controls.Add(prefsByScreenUserControl);
87+
}
88+
}
89+
else if (screenTabControl.TabPages.Count == 1)
90+
{
91+
tabPage = screenTabControl.TabPages[0];
92+
screenUserControls =
93+
new List<PrefsByScreenUserControl>() { prefsByScreenUserControl1 };
94+
}
95+
96+
LoadValuesForTab(i);
97+
string primaryIndicator = string.Empty;
98+
if (Screen.AllScreens[i].Primary) primaryIndicator = " (main)";
99+
tabPage.Text = string.Format("Screen {0}{1}", i + 1, primaryIndicator);
100+
}
101+
102+
break;
63103
}
64104
}
65105

66-
private void UrlsContextMenu_Opening(object sender, System.ComponentModel.CancelEventArgs e)
106+
private void RemoveExtraTabPages()
67107
{
68-
if (lbUrls.SelectedItem == null)
108+
while (screenTabControl.TabPages.Count > 1)
69109
{
70-
e.Cancel = true;
110+
screenTabControl.TabPages.RemoveAt(screenTabControl.TabPages.Count - 1);
71111
}
72112
}
73113

74-
private void LbUrls_MouseDown(object sender, MouseEventArgs e)
114+
private void SetMultiScreenButtonFromMode()
75115
{
76-
var clickedIndex = lbUrls.IndexFromPoint(e.Location);
77-
lbUrls.SelectedIndex = lbUrls.IndexFromPoint(e.Location);
116+
switch (prefsManager.MultiScreenMode)
117+
{
118+
case PreferencesManager.MultiScreenModeItem.Span:
119+
spanScreensButton.Checked = true;
120+
break;
121+
case PreferencesManager.MultiScreenModeItem.Mirror:
122+
mirrorScreensButton.Checked = true;
123+
break;
124+
case PreferencesManager.MultiScreenModeItem.Separate:
125+
separateScreensButton.Checked = true;
126+
break;
127+
}
78128
}
79129

80-
private void RemoveUrl_Click(object sender, EventArgs e)
130+
private void setMultiScreenModeFromButtonState()
81131
{
82-
if (lbUrls.SelectedItem != null)
132+
if (spanScreensButton.Checked)
133+
{
134+
prefsManager.MultiScreenMode = PreferencesManager.MultiScreenModeItem.Span;
135+
}
136+
else if (mirrorScreensButton.Checked)
83137
{
84-
lbUrls.Items.Remove(lbUrls.SelectedItem);
138+
prefsManager.MultiScreenMode = PreferencesManager.MultiScreenModeItem.Mirror;
85139
}
140+
else
141+
{
142+
prefsManager.MultiScreenMode = PreferencesManager.MultiScreenModeItem.Separate;
143+
}
144+
145+
prefsManager.ResetEffectiveScreensList();
86146
}
87147

88-
private void PreferencesForm_Load(object sender, EventArgs e)
148+
private void readBackValuesFromUI()
89149
{
90-
RegistryKey reg = Registry.CurrentUser.CreateSubKey(Program.KEY);
91-
loadUrls(reg);
92-
cbCloseOnActivity.Checked = Boolean.Parse((string)reg.GetValue(CLOSE_ON_ACTIVITY_PREF, CLOSE_ON_ACTIVITY_PREF_DEFAULT));
93-
nudRotationInterval.Value = int.Parse((string)reg.GetValue(INTERVAL_PREF, INTERVAL_PREF_DEFAULT));
94-
cbRandomize.Checked = Boolean.Parse((string)reg.GetValue(RANDOMIZE_PREF, RANDOMIZE_PREF_DEFAULT));
95-
reg.Close();
150+
for (var i = 0; i < screenUserControls.Count; i++)
151+
{
152+
var currentPrefsUserControl = screenUserControls[i];
153+
List<string> urls = (from ListViewItem lvUrlsItem in currentPrefsUserControl.lvUrls.Items
154+
select lvUrlsItem.Text).ToList();
155+
prefsManager.SetUrlsForScreen(i, urls);
156+
prefsManager.SetRotationIntervalForScreen(i,
157+
(int)currentPrefsUserControl.nudRotationInterval.Value);
158+
prefsManager.SetRandomizeFlagForScreen(i, currentPrefsUserControl.cbRandomize.Checked);
159+
prefsManager.CloseOnActivity = cbCloseOnActivity.Checked;
160+
}
96161
}
97162

98-
private void loadUrls(RegistryKey reg)
163+
private void loadUrlsForTabToControl(int screenNum, PrefsByScreenUserControl currentPrefsUserControl)
99164
{
100-
lbUrls.Items.Clear();
165+
currentPrefsUserControl.lvUrls.Items.Clear();
101166

102-
var urls = ((string)reg.GetValue(URL_PREF, URL_PREF_DEFAULT)).Split(' ');
167+
var urls = prefsManager.GetUrlsByScreen(screenNum);
103168

104169
foreach (var url in urls)
105170
{
106-
lbUrls.Items.Add(url);
171+
currentPrefsUserControl.lvUrls.Items.Add(url);
107172
}
108173
}
109174

110175
protected override void OnClosed(EventArgs e)
111176
{
112177
if (DialogResult == DialogResult.OK)
113178
{
114-
RegistryKey reg = Registry.CurrentUser.CreateSubKey(Program.KEY);
115-
saveUrls(reg);
116-
reg.SetValue(CLOSE_ON_ACTIVITY_PREF, cbCloseOnActivity.Checked);
117-
reg.SetValue(INTERVAL_PREF, nudRotationInterval.Value);
118-
reg.SetValue(RANDOMIZE_PREF, cbRandomize.Checked);
119-
reg.Close();
179+
readBackValuesFromUI();
180+
prefsManager.SavePreferences();
120181
}
121182

122183
base.OnClosed(e);
123184
}
124185

125-
private void saveUrls(RegistryKey reg)
126-
{
127-
var urls = String.Join(" ", lbUrls.Items.Cast<String>());
128-
129-
reg.SetValue(URL_PREF, urls);
130-
}
131-
132186
private void llProjectLocationUrl_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
133187
{
134188
System.Diagnostics.Process.Start(llProjectLocationUrl.Text);
@@ -144,11 +198,11 @@ private void cancelButton_Click(object sender, EventArgs e)
144198
Close();
145199
}
146200

147-
private void addUrlButton_Click(object sender, EventArgs e)
201+
private void anyMultiScreenModeButton_Click(object sender, EventArgs e)
148202
{
149-
var url = tbUrlToAdd.Text;
150-
151-
lbUrls.Items.Add(url);
203+
readBackValuesFromUI();
204+
setMultiScreenModeFromButtonState();
205+
ArrangeScreenTabs();
152206
}
153207
}
154208
}

PreferencesForm.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,4 +117,7 @@
117117
<resheader name="writer">
118118
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
119119
</resheader>
120+
<metadata name="screenModeTooltip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
121+
<value>17, 17</value>
122+
</metadata>
120123
</root>

0 commit comments

Comments
 (0)