55
66namespace 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}
0 commit comments