@@ -14,7 +14,7 @@ namespace V2RayW
1414 public partial class MainForm : Form
1515 {
1616
17- ConfigForm configForm ;
17+ public ConfigForm configForm ;
1818 FormCoreOutput outputForm ;
1919
2020 public MainForm ( )
@@ -24,47 +24,80 @@ public MainForm()
2424
2525 public void updateMenu ( )
2626 {
27- statusToolStripMenuItem . Text = Program . proxyIsOn ? "V2Ray: On " : "V2Ray: Off " ;
27+ statusToolStripMenuItem . Text = Program . coreLoaded ? "V2Ray: loaded " : "V2Ray: unloaded " ;
2828 startStopToolStripMenuItem . Enabled = Program . profiles . Count > 0 ;
29- startStopToolStripMenuItem . Text = Program . proxyIsOn ? "Stop V2Ray" : "Start V2Ray" ;
29+ startStopToolStripMenuItem . Text = Program . coreLoaded ? "Unload V2Ray" : "Load V2Ray" ;
3030
31- v2RayRulesToolStripMenuItem . Checked = false ;
32- pacModeToolStripMenuItem . Checked = false ;
33- globalModeToolStripMenuItem . Checked = false ;
34- switch ( Program . proxyMode )
31+ //v2RayRulesToolStripMenuItem.Checked = Program.proxyMode == Program.RULES_MODE;
32+ pacModeToolStripMenuItem . Checked = Program . proxyMode == Program . PAC_MODE ;
33+ //globalModeToolStripMenuItem.Checked = Program.proxyMode == Program.GLOBAL_MODE;
34+ manualModeToolStripMenuItem . Checked = Program . proxyMode == Program . MANUAL_MODE ;
35+ if ( ! Program . useCusProfile )
3536 {
36- case 0 : v2RayRulesToolStripMenuItem . Checked = true ; break ;
37- case 1 : pacModeToolStripMenuItem . Checked = true ; break ;
38- case 2 : globalModeToolStripMenuItem . Checked = true ; break ;
37+ v2RayRulesToolStripMenuItem . Checked = Program . proxyMode == Program . RULES_MODE ;
38+ globalModeToolStripMenuItem . Checked = Program . proxyMode == Program . GLOBAL_MODE ;
39+ v2RayRulesToolStripMenuItem . Visible = true ;
40+ } else
41+ {
42+ v2RayRulesToolStripMenuItem . Visible = false ;
43+ globalModeToolStripMenuItem . Checked = Program . proxyMode == Program . GLOBAL_MODE || Program . proxyMode == Program . RULES_MODE ;
3944 }
45+
46+
4047 serversToolStripMenuItem . DropDownItems . Clear ( ) ;
48+ if ( Program . profiles . Count == 0 && Program . cusProfiles . Count == 0 )
49+ {
50+ ToolStripMenuItem noServer = new ToolStripMenuItem ( "no available servers." ) ;
51+ serversToolStripMenuItem . DropDownItems . Add ( noServer ) ;
52+ return ;
53+ }
4154 var serverMenuItems = Program . profiles . Select ( p => new ToolStripMenuItem ( p . remark == "" ? p . address : p . remark , null , switchToServer ) ) . ToArray ( ) ;
42- if ( Program . profiles . Count > 0 )
55+ var cusServerMenuItems = Program . cusProfiles . Select ( p => new ToolStripMenuItem ( p . Split ( '\\ ' ) . Last ( ) , null , switchToCusServer ) ) . ToArray ( ) ;
56+ if ( Program . useCusProfile )
4357 {
44- serverMenuItems [ Program . selectedServerIndex ] . Checked = true ;
45- foreach ( var p in Program . profiles )
46- {
47- serversToolStripMenuItem . DropDownItems . AddRange ( serverMenuItems ) ;
48- }
58+ cusServerMenuItems [ Program . selectedCusServerIndex ] . Checked = true ;
4959 } else
5060 {
51- var item = new ToolStripMenuItem ( "no available servers." ) ;
52- item . Enabled = false ;
53- serversToolStripMenuItem . DropDownItems . Add ( item ) ;
61+ serverMenuItems [ Program . selectedServerIndex ] . Checked = true ;
62+ }
63+ foreach ( var p in serverMenuItems )
64+ {
65+ serversToolStripMenuItem . DropDownItems . Add ( p ) ;
5466 }
67+ if ( serverMenuItems . Count ( ) > 1 )
68+ {
69+ serversToolStripMenuItem . DropDownItems . Add ( new ToolStripMenuItem ( "use all" , null , switchToServer ) ) ;
70+ }
71+ if ( serverMenuItems . Count ( ) > 0 && cusServerMenuItems . Count ( ) > 0 )
72+ {
73+ serversToolStripMenuItem . DropDownItems . Add ( new ToolStripSeparator ( ) ) ;
74+ }
75+ serversToolStripMenuItem . DropDownItems . AddRange ( cusServerMenuItems ) ;
5576 }
5677
5778 private void switchToServer ( object sender , EventArgs e )
5879 {
5980 Program . selectedServerIndex = serversToolStripMenuItem . DropDownItems . IndexOf ( ( ToolStripMenuItem ) sender ) ;
60- foreach ( ToolStripMenuItem i in serversToolStripMenuItem . DropDownItems )
81+ if ( Program . selectedServerIndex == Program . profiles . Count )
6182 {
62- i . Checked = false ;
83+ Program . useMultipleServer = true ;
84+ } else
85+ {
86+ Program . useMultipleServer = false ;
6387 }
64- ( ( ToolStripMenuItem ) serversToolStripMenuItem . DropDownItems [ Program . selectedServerIndex ] ) . Checked = true ;
65- Program . updateSystemProxy ( ) ;
88+ Program . useCusProfile = false ;
89+ Program . configurationDidChange ( ) ;
90+ }
91+
92+ private void switchToCusServer ( object sender , EventArgs e )
93+ {
94+ Program . selectedCusServerIndex = Program . cusProfiles . Count - serversToolStripMenuItem . DropDownItems . Count + serversToolStripMenuItem . DropDownItems . IndexOf ( ( ToolStripMenuItem ) sender ) ;
95+ Program . useCusProfile = true ;
96+ Program . useMultipleServer = false ;
97+ Program . configurationDidChange ( ) ;
6698 }
6799
100+
68101 private void configureToolStripMenuItem_Click ( object sender , EventArgs e )
69102 {
70103 if ( this . configForm == null || this . configForm . IsDisposed )
@@ -77,22 +110,22 @@ private void configureToolStripMenuItem_Click(object sender, EventArgs e)
77110
78111 private void quitToolStripMenuItem_Click ( object sender , EventArgs e )
79112 {
80- if ( Program . proxyIsOn )
113+ if ( Program . coreLoaded )
81114 {
82- Program . proxyIsOn = false ; // change to false temporarily
115+ Program . coreLoaded = false ; // change to false temporarily
83116 Program . finalAction = true ;
84117 Debug . WriteLine ( "close system proxy on exit" ) ;
85118 Program . updateSystemProxy ( ) ;
86119 Debug . WriteLine ( "wait quit" ) ;
87120 Program . _resetEvent . WaitOne ( ) ;
88- Program . proxyIsOn = true ; // recover proxy state
121+ Program . coreLoaded = true ; // recover proxy state
89122 }
90123 Application . Exit ( ) ;
91124 }
92125
93126 private void helpToolStripMenuItem_Click ( object sender , EventArgs e )
94127 {
95- Process . Start ( "http ://v2ray.com" ) ;
128+ Process . Start ( "https ://v2ray.com" ) ;
96129 }
97130
98131 private void notifyIconMain_MouseDoubleClick ( object sender , MouseEventArgs e )
@@ -102,30 +135,56 @@ private void notifyIconMain_MouseDoubleClick(object sender, MouseEventArgs e)
102135
103136 private void startStopToolStripMenuItem_Click ( object sender , EventArgs e )
104137 {
105- Program . proxyIsOn = ! Program . proxyIsOn ;
106- Program . updateSystemProxy ( ) ;
107- this . updateMenu ( ) ;
138+ if ( ! Program . coreLoaded && Program . proxyMode != 3 )
139+ {
140+ Program . backUpProxy ( ) ;
141+ }
142+ if ( Program . coreLoaded && Program . proxyMode != 3 )
143+ {
144+ Program . restoreProxy ( ) ;
145+ }
146+ Program . coreLoaded = ! Program . coreLoaded ;
147+ Program . configurationDidChange ( ) ;
108148 }
109149
110150 private void v2RayRulesToolStripMenuItem_Click ( object sender , EventArgs e )
111151 {
112- Program . proxyMode = 0 ;
113- this . updateMenu ( ) ;
114- Program . updateSystemProxy ( ) ;
152+ if ( Program . coreLoaded && Program . proxyMode == 3 )
153+ {
154+ Program . backUpProxy ( ) ;
155+ }
156+ Program . proxyMode = Program . RULES_MODE ;
157+ Program . configurationDidChange ( ) ;
115158 }
116159
117160 private void pacModeToolStripMenuItem_Click ( object sender , EventArgs e )
118161 {
119- Program . proxyMode = 1 ;
120- this . updateMenu ( ) ;
121- Program . updateSystemProxy ( ) ;
162+ if ( Program . coreLoaded && Program . proxyMode == 3 )
163+ {
164+ Program . backUpProxy ( ) ;
165+ }
166+ Program . proxyMode = Program . PAC_MODE ;
167+ Program . configurationDidChange ( ) ;
122168 }
123169
124170 private void globalModeToolStripMenuItem_Click ( object sender , EventArgs e )
125171 {
126- Program . proxyMode = 2 ;
127- this . updateMenu ( ) ;
128- Program . updateSystemProxy ( ) ;
172+ if ( Program . coreLoaded && Program . proxyMode == 3 )
173+ {
174+ Program . backUpProxy ( ) ;
175+ }
176+ Program . proxyMode = Program . GLOBAL_MODE ;
177+ Program . configurationDidChange ( ) ;
178+ }
179+
180+ private void manualModeToolStripMenuItem_Click ( object sender , EventArgs e )
181+ {
182+ if ( Program . coreLoaded && Program . proxyMode != 3 )
183+ {
184+ Program . restoreProxy ( ) ;
185+ }
186+ Program . proxyMode = Program . MANUAL_MODE ;
187+ Program . configurationDidChange ( ) ;
129188 }
130189
131190 internal void viewLogToolStripMenuItem_Click ( object sender , EventArgs e )
@@ -136,13 +195,6 @@ internal void viewLogToolStripMenuItem_Click(object sender, EventArgs e)
136195 outputForm . Show ( ) ;
137196 }
138197 outputForm . Focus ( ) ;
139- /*
140- if(Program.proxyIsOn)
141- {
142- startStopToolStripMenuItem_Click(sender,e);
143- }
144- System.Threading.Thread.Sleep(500);
145- MessageBox.Show(Program.v2rayoutput);*/
146198 }
147199 }
148200}
0 commit comments