diff --git a/Main/App.config b/Main/App.config
deleted file mode 100644
index f27a85b..0000000
--- a/Main/App.config
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- Office 2010 Black
-
-
- 324810
-
-
- 324810,328070,440
-
-
- hl2master.steampowered.com:27011
-
-
- 0
-
-
- 1
-
-
- False
-
-
- True
-
-
- hl2master.steampowered.com:27011,hl1master.steampowered.com:27011,masterserver.css.setti.info:27011
-
-
- True
-
-
- True
-
-
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Main/Main.csproj b/Main/Main.csproj
index de44daa..f8602b6 100644
--- a/Main/Main.csproj
+++ b/Main/Main.csproj
@@ -74,11 +74,6 @@
-
- Settings.settings
- True
- True
-
ResXFileCodeGenerator
Resources.Designer.cs
@@ -93,14 +88,9 @@
-
-
- SettingsSingleFileGenerator
- Settings.Designer.cs
-
diff --git a/Main/Program.cs b/Main/Program.cs
index 1e25953..c3bf921 100644
--- a/Main/Program.cs
+++ b/Main/Program.cs
@@ -8,7 +8,7 @@ namespace Main
{
public static class Program
{
- private const string Version = "1.12.2";
+ private const string Version = "1.13";
[STAThread]
static void Main()
@@ -20,7 +20,7 @@ static void Main()
System.Threading.Thread.CurrentThread.CurrentCulture = culture;
#endif
// change font before creating the main form to get correct auto-scaling
- ServerBrowser.Program.Init(new Font("Segoe UI", AppearanceObject.DefaultFont.Size + 0.75f), Properties.Settings.Default.Skin);
+ ServerBrowser.Program.Init(new Font("Segoe UI", AppearanceObject.DefaultFont.Size + 0.75f), ServerBrowser.Properties.Settings.Default.Skin);
var mainForm = new ServerBrowserForm();
var icon = typeof (Program).Assembly.GetManifestResourceStream("Main.App.ico");
diff --git a/Main/Properties/AssemblyInfo.cs b/Main/Properties/AssemblyInfo.cs
index 725d0c9..a40609c 100644
--- a/Main/Properties/AssemblyInfo.cs
+++ b/Main/Properties/AssemblyInfo.cs
@@ -5,11 +5,11 @@
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
-[assembly: AssemblyTitle("Main")]
+[assembly: AssemblyTitle("ServerBrowser")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("Main")]
+[assembly: AssemblyCompany("ServerBrowser")]
+[assembly: AssemblyProduct("ServerBrowser")]
[assembly: AssemblyCopyright("Copyright © 2015")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
diff --git a/Main/Properties/Settings.Designer.cs b/Main/Properties/Settings.Designer.cs
deleted file mode 100644
index f6289d1..0000000
--- a/Main/Properties/Settings.Designer.cs
+++ /dev/null
@@ -1,219 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.34209
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace Main.Properties {
-
-
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")]
- internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
-
- private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
-
- public static Settings Default {
- get {
- return defaultInstance;
- }
- }
-
- [global::System.Configuration.UserScopedSettingAttribute()]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("Office 2010 Black")]
- public string Skin {
- get {
- return ((string)(this["Skin"]));
- }
- set {
- this["Skin"] = value;
- }
- }
-
- [global::System.Configuration.UserScopedSettingAttribute()]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("324810")]
- public int InitialGameID {
- get {
- return ((int)(this["InitialGameID"]));
- }
- set {
- this["InitialGameID"] = value;
- }
- }
-
- [global::System.Configuration.UserScopedSettingAttribute()]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("324810,328070,440")]
- public string FavGameIDs {
- get {
- return ((string)(this["FavGameIDs"]));
- }
- set {
- this["FavGameIDs"] = value;
- }
- }
-
- [global::System.Configuration.UserScopedSettingAttribute()]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("hl2master.steampowered.com:27011")]
- public string MasterServer {
- get {
- return ((string)(this["MasterServer"]));
- }
- set {
- this["MasterServer"] = value;
- }
- }
-
- [global::System.Configuration.UserScopedSettingAttribute()]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("0")]
- public int ToxikkConsoleKey {
- get {
- return ((int)(this["ToxikkConsoleKey"]));
- }
- set {
- this["ToxikkConsoleKey"] = value;
- }
- }
-
- [global::System.Configuration.UserScopedSettingAttribute()]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("1")]
- public int RefreshInterval {
- get {
- return ((int)(this["RefreshInterval"]));
- }
- set {
- this["RefreshInterval"] = value;
- }
- }
-
- [global::System.Configuration.UserScopedSettingAttribute()]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("False")]
- public bool ShowOptions {
- get {
- return ((bool)(this["ShowOptions"]));
- }
- set {
- this["ShowOptions"] = value;
- }
- }
-
- [global::System.Configuration.UserScopedSettingAttribute()]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("True")]
- public bool RefreshSelected {
- get {
- return ((bool)(this["RefreshSelected"]));
- }
- set {
- this["RefreshSelected"] = value;
- }
- }
-
- [global::System.Configuration.UserScopedSettingAttribute()]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("hl2master.steampowered.com:27011,hl1master.steampowered.com:27011,masterserver.cs" +
- "s.setti.info:27011")]
- public string MasterServerList {
- get {
- return ((string)(this["MasterServerList"]));
- }
- set {
- this["MasterServerList"] = value;
- }
- }
-
- [global::System.Configuration.UserScopedSettingAttribute()]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("True")]
- public bool GetEmptyServers {
- get {
- return ((bool)(this["GetEmptyServers"]));
- }
- set {
- this["GetEmptyServers"] = value;
- }
- }
-
- [global::System.Configuration.UserScopedSettingAttribute()]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("True")]
- public bool GetFullServers {
- get {
- return ((bool)(this["GetFullServers"]));
- }
- set {
- this["GetFullServers"] = value;
- }
- }
-
- [global::System.Configuration.UserScopedSettingAttribute()]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("0")]
- public int ShowAddressMode {
- get {
- return ((int)(this["ShowAddressMode"]));
- }
- set {
- this["ShowAddressMode"] = value;
- }
- }
-
- [global::System.Configuration.UserScopedSettingAttribute()]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("")]
- public string TagsInclude {
- get {
- return ((string)(this["TagsInclude"]));
- }
- set {
- this["TagsInclude"] = value;
- }
- }
-
- [global::System.Configuration.UserScopedSettingAttribute()]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("")]
- public string TagsExclude {
- get {
- return ((string)(this["TagsExclude"]));
- }
- set {
- this["TagsExclude"] = value;
- }
- }
-
- [global::System.Configuration.UserScopedSettingAttribute()]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("")]
- public string FilterMod {
- get {
- return ((string)(this["FilterMod"]));
- }
- set {
- this["FilterMod"] = value;
- }
- }
-
- [global::System.Configuration.UserScopedSettingAttribute()]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("")]
- public string FilterMap {
- get {
- return ((string)(this["FilterMap"]));
- }
- set {
- this["FilterMap"] = value;
- }
- }
- }
-}
diff --git a/Main/Properties/Settings.settings b/Main/Properties/Settings.settings
deleted file mode 100644
index f6f014f..0000000
--- a/Main/Properties/Settings.settings
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
-
- Office 2010 Black
-
-
- 324810
-
-
- 324810,328070,440
-
-
- hl2master.steampowered.com:27011
-
-
- 0
-
-
- 1
-
-
- False
-
-
- True
-
-
- hl2master.steampowered.com:27011,hl1master.steampowered.com:27011,masterserver.css.setti.info:27011
-
-
- True
-
-
- True
-
-
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/ServerBrowser/Properties/Settings.Designer.cs b/ServerBrowser/Properties/Settings.Designer.cs
index 29f5e5d..6759fb2 100644
--- a/ServerBrowser/Properties/Settings.Designer.cs
+++ b/ServerBrowser/Properties/Settings.Designer.cs
@@ -13,7 +13,7 @@ namespace ServerBrowser.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")]
- internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+ public sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
@@ -215,5 +215,29 @@ public string FilterMap {
this["FilterMap"] = value;
}
}
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("")]
+ public string FavServers {
+ get {
+ return ((string)(this["FavServers"]));
+ }
+ set {
+ this["FavServers"] = value;
+ }
+ }
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("False")]
+ public bool KeepFavServersOnTop {
+ get {
+ return ((bool)(this["KeepFavServersOnTop"]));
+ }
+ set {
+ this["KeepFavServersOnTop"] = value;
+ }
+ }
}
}
diff --git a/ServerBrowser/Properties/Settings.settings b/ServerBrowser/Properties/Settings.settings
index f6f014f..612adb7 100644
--- a/ServerBrowser/Properties/Settings.settings
+++ b/ServerBrowser/Properties/Settings.settings
@@ -50,5 +50,11 @@
+
+
+
+
+ False
+
\ No newline at end of file
diff --git a/ServerBrowser/ServerBrowser.csproj b/ServerBrowser/ServerBrowser.csproj
index 0811157..4235d0c 100644
--- a/ServerBrowser/ServerBrowser.csproj
+++ b/ServerBrowser/ServerBrowser.csproj
@@ -140,6 +140,11 @@
+
+ Settings.settings
+ True
+ True
+
Form
@@ -201,11 +206,6 @@
SettingsSingleFileGenerator
Settings.Designer.cs
-
- True
- Settings.settings
- True
-
diff --git a/ServerBrowser/ServerBrowserForm.Designer.cs b/ServerBrowser/ServerBrowserForm.Designer.cs
index c729d8b..a73460b 100644
--- a/ServerBrowser/ServerBrowserForm.Designer.cs
+++ b/ServerBrowser/ServerBrowserForm.Designer.cs
@@ -53,6 +53,9 @@ private void InitializeComponent()
this.colLocation = new DevExpress.XtraGrid.Columns.GridColumn();
this.riCountryFlagEdit = new DevExpress.XtraEditors.Repository.RepositoryItemImageComboBox();
this.imgFlags = new DevExpress.Utils.ImageCollection(this.components);
+ this.colFavServer = new DevExpress.XtraGrid.Columns.GridColumn();
+ this.riFavServer = new DevExpress.XtraEditors.Repository.RepositoryItemCheckEdit();
+ this.imageCollection = new DevExpress.Utils.ImageCollection(this.components);
this.colEndPoint = new DevExpress.XtraGrid.Columns.GridColumn();
this.colName = new DevExpress.XtraGrid.Columns.GridColumn();
this.colDedicated = new DevExpress.XtraGrid.Columns.GridColumn();
@@ -69,6 +72,11 @@ private void InitializeComponent()
this.colStatus = new DevExpress.XtraGrid.Columns.GridColumn();
this.toolTipController = new DevExpress.Utils.ToolTipController(this.components);
this.dockManager1 = new DevExpress.XtraBars.Docking.DockManager(this.components);
+ this.panelRcon = new DevExpress.XtraBars.Docking.DockPanel();
+ this.controlContainer3 = new DevExpress.XtraBars.Docking.ControlContainer();
+ this.labelControl13 = new DevExpress.XtraEditors.LabelControl();
+ this.labelControl15 = new DevExpress.XtraEditors.LabelControl();
+ this.txtRconPort = new DevExpress.XtraEditors.ButtonEdit();
this.barManager1 = new DevExpress.XtraBars.BarManager(this.components);
this.barMenu = new DevExpress.XtraBars.Bar();
this.miReloadServers = new DevExpress.XtraBars.BarButtonItem();
@@ -76,13 +84,18 @@ private void InitializeComponent()
this.barDockControlBottom = new DevExpress.XtraBars.BarDockControl();
this.barDockControlLeft = new DevExpress.XtraBars.BarDockControl();
this.barDockControlRight = new DevExpress.XtraBars.BarDockControl();
- this.imageCollection = new DevExpress.Utils.ImageCollection(this.components);
this.miUpdateServerInfo = new DevExpress.XtraBars.BarButtonItem();
this.miConnect = new DevExpress.XtraBars.BarButtonItem();
this.miConnectSpectator = new DevExpress.XtraBars.BarButtonItem();
this.miCopyAddress = new DevExpress.XtraBars.BarButtonItem();
this.miAddRulesColumnText = new DevExpress.XtraBars.BarButtonItem();
this.miAddRulesColumnNumeric = new DevExpress.XtraBars.BarButtonItem();
+ this.barButtonItem1 = new DevExpress.XtraBars.BarButtonItem();
+ this.miFavServer = new DevExpress.XtraBars.BarButtonItem();
+ this.txtRconConsole = new DevExpress.XtraEditors.MemoEdit();
+ this.txtRconCommand = new DevExpress.XtraEditors.ButtonEdit();
+ this.labelControl14 = new DevExpress.XtraEditors.LabelControl();
+ this.txtRconPassword = new DevExpress.XtraEditors.ButtonEdit();
this.panelContainer1 = new DevExpress.XtraBars.Docking.DockPanel();
this.panelPlayers = new DevExpress.XtraBars.Docking.DockPanel();
this.dockPanel1_Container = new DevExpress.XtraBars.Docking.ControlContainer();
@@ -95,15 +108,6 @@ private void InitializeComponent()
this.gvRules = new DevExpress.XtraGrid.Views.Grid.GridView();
this.gridColumn1 = new DevExpress.XtraGrid.Columns.GridColumn();
this.gridColumn2 = new DevExpress.XtraGrid.Columns.GridColumn();
- this.panelRcon = new DevExpress.XtraBars.Docking.DockPanel();
- this.controlContainer3 = new DevExpress.XtraBars.Docking.ControlContainer();
- this.labelControl13 = new DevExpress.XtraEditors.LabelControl();
- this.labelControl15 = new DevExpress.XtraEditors.LabelControl();
- this.txtRconPort = new DevExpress.XtraEditors.ButtonEdit();
- this.txtRconConsole = new DevExpress.XtraEditors.MemoEdit();
- this.txtRconCommand = new DevExpress.XtraEditors.ButtonEdit();
- this.labelControl14 = new DevExpress.XtraEditors.LabelControl();
- this.txtRconPassword = new DevExpress.XtraEditors.ButtonEdit();
this.panelServerList = new DevExpress.XtraBars.Docking.DockPanel();
this.controlContainer1 = new DevExpress.XtraBars.Docking.ControlContainer();
this.btnSkin = new DevExpress.XtraEditors.SimpleButton();
@@ -113,6 +117,7 @@ private void InitializeComponent()
this.panelTop = new DevExpress.XtraEditors.PanelControl();
this.panelControls = new DevExpress.XtraEditors.PanelControl();
this.panelOptions = new DevExpress.XtraEditors.PanelControl();
+ this.btnQuickRefresh = new DevExpress.XtraEditors.SimpleButton();
this.rbFavGame4 = new DevExpress.XtraEditors.CheckEdit();
this.txtMod = new DevExpress.XtraEditors.ButtonEdit();
this.labelControl12 = new DevExpress.XtraEditors.LabelControl();
@@ -135,6 +140,7 @@ private void InitializeComponent()
this.labelControl3 = new DevExpress.XtraEditors.LabelControl();
this.timerUpdateServerList = new System.Windows.Forms.Timer(this.components);
this.panelAdvancedOptions = new DevExpress.XtraEditors.PanelControl();
+ this.cbFavServersOnTop = new DevExpress.XtraEditors.CheckEdit();
this.txtGameServer = new DevExpress.XtraEditors.ButtonEdit();
this.rbAddressGamePort = new DevExpress.XtraEditors.CheckEdit();
this.rbAddressQueryPort = new DevExpress.XtraEditors.CheckEdit();
@@ -166,9 +172,16 @@ private void InitializeComponent()
((System.ComponentModel.ISupportInitialize)(this.gvServers)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.riCountryFlagEdit)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.imgFlags)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.riFavServer)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.imageCollection)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.dockManager1)).BeginInit();
+ this.panelRcon.SuspendLayout();
+ this.controlContainer3.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.txtRconPort.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.barManager1)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.imageCollection)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.txtRconConsole.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.txtRconCommand.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.txtRconPassword.Properties)).BeginInit();
this.panelContainer1.SuspendLayout();
this.panelPlayers.SuspendLayout();
this.dockPanel1_Container.SuspendLayout();
@@ -179,12 +192,6 @@ private void InitializeComponent()
((System.ComponentModel.ISupportInitialize)(this.gcRules)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.dsRules)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.gvRules)).BeginInit();
- this.panelRcon.SuspendLayout();
- this.controlContainer3.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.txtRconPort.Properties)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.txtRconConsole.Properties)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.txtRconCommand.Properties)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.txtRconPassword.Properties)).BeginInit();
this.panelServerList.SuspendLayout();
this.controlContainer1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.cbRefreshSelectedServer.Properties)).BeginInit();
@@ -206,6 +213,7 @@ private void InitializeComponent()
((System.ComponentModel.ISupportInitialize)(this.panelTopFill)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.panelAdvancedOptions)).BeginInit();
this.panelAdvancedOptions.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.cbFavServersOnTop.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.txtGameServer.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.rbAddressGamePort.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.rbAddressQueryPort.Properties)).BeginInit();
@@ -385,7 +393,8 @@ private void InitializeComponent()
this.gcServers.MainView = this.gvServers;
this.gcServers.Name = "gcServers";
this.gcServers.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] {
- this.riCountryFlagEdit});
+ this.riCountryFlagEdit,
+ this.riFavServer});
this.gcServers.Size = new System.Drawing.Size(1095, 358);
this.gcServers.TabIndex = 0;
this.gcServers.ToolTipController = this.toolTipController;
@@ -400,6 +409,7 @@ private void InitializeComponent()
//
this.gvServers.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] {
this.colLocation,
+ this.colFavServer,
this.colEndPoint,
this.colName,
this.colDedicated,
@@ -424,6 +434,7 @@ private void InitializeComponent()
this.gvServers.OptionsView.ShowIndicator = false;
this.gvServers.SortInfo.AddRange(new DevExpress.XtraGrid.Columns.GridColumnSortInfo[] {
new DevExpress.XtraGrid.Columns.GridColumnSortInfo(this.colPlayerCount, DevExpress.Data.ColumnSortOrder.Descending)});
+ this.gvServers.StartSorting += new System.EventHandler(this.gvServers_StartSorting);
this.gvServers.FocusedRowChanged += new DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventHandler(this.gvServers_FocusedRowChanged);
this.gvServers.ColumnFilterChanged += new System.EventHandler(this.gvServers_ColumnFilterChanged);
this.gvServers.CustomUnboundColumnData += new DevExpress.XtraGrid.Views.Base.CustomColumnDataEventHandler(this.gvServers_CustomUnboundColumnData);
@@ -440,7 +451,7 @@ private void InitializeComponent()
this.colLocation.OptionsColumn.AllowEdit = false;
this.colLocation.ToolTip = "Country";
this.colLocation.Visible = true;
- this.colLocation.VisibleIndex = 0;
+ this.colLocation.VisibleIndex = 1;
this.colLocation.Width = 49;
//
// riCountryFlagEdit
@@ -695,6 +706,44 @@ private void InitializeComponent()
this.imgFlags.Images.SetKeyName(239, "zm.png");
this.imgFlags.Images.SetKeyName(240, "zw.png");
//
+ // colFavServer
+ //
+ this.colFavServer.Caption = "Favorite";
+ this.colFavServer.ColumnEdit = this.riFavServer;
+ this.colFavServer.FieldName = "IsFavorite";
+ this.colFavServer.Name = "colFavServer";
+ this.colFavServer.SortMode = DevExpress.XtraGrid.ColumnSortMode.Value;
+ this.colFavServer.ToolTip = "Favorite Server";
+ this.colFavServer.UnboundType = DevExpress.Data.UnboundColumnType.Boolean;
+ this.colFavServer.Visible = true;
+ this.colFavServer.VisibleIndex = 0;
+ this.colFavServer.Width = 22;
+ //
+ // riFavServer
+ //
+ this.riFavServer.AutoHeight = false;
+ this.riFavServer.CheckStyle = DevExpress.XtraEditors.Controls.CheckStyles.UserDefined;
+ this.riFavServer.ImageIndexChecked = 3;
+ this.riFavServer.ImageIndexGrayed = 10;
+ this.riFavServer.Images = this.imageCollection;
+ this.riFavServer.Name = "riFavServer";
+ this.riFavServer.EditValueChanged += new System.EventHandler(this.riFavServer_EditValueChanged);
+ //
+ // imageCollection
+ //
+ this.imageCollection.ImageStream = ((DevExpress.Utils.ImageCollectionStreamer)(resources.GetObject("imageCollection.ImageStream")));
+ this.imageCollection.Images.SetKeyName(0, "0005.png");
+ this.imageCollection.Images.SetKeyName(1, "001.png");
+ this.imageCollection.Images.SetKeyName(2, "002.png");
+ this.imageCollection.Images.SetKeyName(3, "003.png");
+ this.imageCollection.Images.SetKeyName(4, "004.png");
+ this.imageCollection.Images.SetKeyName(5, "005.png");
+ this.imageCollection.Images.SetKeyName(6, "006.png");
+ this.imageCollection.Images.SetKeyName(7, "007.png");
+ this.imageCollection.Images.SetKeyName(8, "008.png");
+ this.imageCollection.Images.SetKeyName(9, "009.png");
+ this.imageCollection.Images.SetKeyName(10, "010.png");
+ //
// colEndPoint
//
this.colEndPoint.Caption = "Address";
@@ -703,7 +752,7 @@ private void InitializeComponent()
this.colEndPoint.OptionsColumn.ReadOnly = true;
this.colEndPoint.UnboundType = DevExpress.Data.UnboundColumnType.String;
this.colEndPoint.Visible = true;
- this.colEndPoint.VisibleIndex = 1;
+ this.colEndPoint.VisibleIndex = 2;
this.colEndPoint.Width = 132;
//
// colName
@@ -714,7 +763,7 @@ private void InitializeComponent()
this.colName.OptionsColumn.ReadOnly = true;
this.colName.UnboundType = DevExpress.Data.UnboundColumnType.String;
this.colName.Visible = true;
- this.colName.VisibleIndex = 2;
+ this.colName.VisibleIndex = 3;
this.colName.Width = 260;
//
// colDedicated
@@ -725,7 +774,7 @@ private void InitializeComponent()
this.colDedicated.ToolTip = "Dedicated";
this.colDedicated.UnboundType = DevExpress.Data.UnboundColumnType.Boolean;
this.colDedicated.Visible = true;
- this.colDedicated.VisibleIndex = 3;
+ this.colDedicated.VisibleIndex = 4;
this.colDedicated.Width = 35;
//
// colPrivate
@@ -736,7 +785,7 @@ private void InitializeComponent()
this.colPrivate.Name = "colPrivate";
this.colPrivate.OptionsColumn.AllowEdit = false;
this.colPrivate.Visible = true;
- this.colPrivate.VisibleIndex = 4;
+ this.colPrivate.VisibleIndex = 5;
this.colPrivate.Width = 45;
//
// colDescription
@@ -746,7 +795,7 @@ private void InitializeComponent()
this.colDescription.Name = "colDescription";
this.colDescription.OptionsColumn.AllowEdit = false;
this.colDescription.Visible = true;
- this.colDescription.VisibleIndex = 5;
+ this.colDescription.VisibleIndex = 6;
this.colDescription.Width = 101;
//
// colTags
@@ -756,7 +805,7 @@ private void InitializeComponent()
this.colTags.Name = "colTags";
this.colTags.OptionsColumn.AllowEdit = false;
this.colTags.Visible = true;
- this.colTags.VisibleIndex = 6;
+ this.colTags.VisibleIndex = 7;
this.colTags.Width = 127;
//
// colPlayerCount
@@ -767,7 +816,7 @@ private void InitializeComponent()
this.colPlayerCount.OptionsColumn.AllowEdit = false;
this.colPlayerCount.SortMode = DevExpress.XtraGrid.ColumnSortMode.Value;
this.colPlayerCount.Visible = true;
- this.colPlayerCount.VisibleIndex = 7;
+ this.colPlayerCount.VisibleIndex = 8;
//
// colHumanPlayers
//
@@ -777,7 +826,7 @@ private void InitializeComponent()
this.colHumanPlayers.OptionsColumn.AllowEdit = false;
this.colHumanPlayers.ToolTip = "Human Players";
this.colHumanPlayers.Visible = true;
- this.colHumanPlayers.VisibleIndex = 8;
+ this.colHumanPlayers.VisibleIndex = 9;
this.colHumanPlayers.Width = 30;
//
// colBots
@@ -787,7 +836,7 @@ private void InitializeComponent()
this.colBots.Name = "colBots";
this.colBots.OptionsColumn.AllowEdit = false;
this.colBots.Visible = true;
- this.colBots.VisibleIndex = 9;
+ this.colBots.VisibleIndex = 10;
this.colBots.Width = 30;
//
// colTotalPlayers
@@ -798,7 +847,7 @@ private void InitializeComponent()
this.colTotalPlayers.OptionsColumn.AllowEdit = false;
this.colTotalPlayers.ToolTip = "Total Players (Humans + Bots)";
this.colTotalPlayers.Visible = true;
- this.colTotalPlayers.VisibleIndex = 10;
+ this.colTotalPlayers.VisibleIndex = 11;
this.colTotalPlayers.Width = 30;
//
// colMaxPlayers
@@ -809,7 +858,7 @@ private void InitializeComponent()
this.colMaxPlayers.OptionsColumn.AllowEdit = false;
this.colMaxPlayers.ToolTip = "Maximum Players";
this.colMaxPlayers.Visible = true;
- this.colMaxPlayers.VisibleIndex = 11;
+ this.colMaxPlayers.VisibleIndex = 12;
this.colMaxPlayers.Width = 30;
//
// colMap
@@ -819,7 +868,7 @@ private void InitializeComponent()
this.colMap.Name = "colMap";
this.colMap.OptionsColumn.AllowEdit = false;
this.colMap.Visible = true;
- this.colMap.VisibleIndex = 12;
+ this.colMap.VisibleIndex = 13;
this.colMap.Width = 110;
//
// colPing
@@ -831,7 +880,7 @@ private void InitializeComponent()
this.colPing.Name = "colPing";
this.colPing.OptionsColumn.AllowEdit = false;
this.colPing.Visible = true;
- this.colPing.VisibleIndex = 13;
+ this.colPing.VisibleIndex = 14;
this.colPing.Width = 32;
//
// colStatus
@@ -841,7 +890,7 @@ private void InitializeComponent()
this.colStatus.Name = "colStatus";
this.colStatus.OptionsColumn.AllowEdit = false;
this.colStatus.Visible = true;
- this.colStatus.VisibleIndex = 14;
+ this.colStatus.VisibleIndex = 15;
this.colStatus.Width = 61;
//
// toolTipController
@@ -872,6 +921,62 @@ private void InitializeComponent()
"DevExpress.XtraEditors.PanelControl"});
this.dockManager1.StartDocking += new DevExpress.XtraBars.Docking.DockPanelCancelEventHandler(this.dockManager1_StartDocking);
//
+ // panelRcon
+ //
+ this.panelRcon.Controls.Add(this.controlContainer3);
+ this.panelRcon.Dock = DevExpress.XtraBars.Docking.DockingStyle.Bottom;
+ this.panelRcon.ID = new System.Guid("7b6df7b6-b112-4685-a1f4-c23ae548835f");
+ this.panelRcon.Location = new System.Drawing.Point(0, 648);
+ this.panelRcon.Name = "panelRcon";
+ this.panelRcon.OriginalSize = new System.Drawing.Size(200, 136);
+ this.panelRcon.SavedDock = DevExpress.XtraBars.Docking.DockingStyle.Bottom;
+ this.panelRcon.SavedIndex = 1;
+ this.panelRcon.Size = new System.Drawing.Size(1103, 136);
+ this.panelRcon.Text = "Remote Console";
+ this.panelRcon.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden;
+ //
+ // controlContainer3
+ //
+ this.controlContainer3.Controls.Add(this.labelControl13);
+ this.controlContainer3.Controls.Add(this.labelControl15);
+ this.controlContainer3.Controls.Add(this.txtRconPort);
+ this.controlContainer3.Controls.Add(this.txtRconConsole);
+ this.controlContainer3.Controls.Add(this.txtRconCommand);
+ this.controlContainer3.Controls.Add(this.labelControl14);
+ this.controlContainer3.Controls.Add(this.txtRconPassword);
+ this.controlContainer3.Location = new System.Drawing.Point(4, 23);
+ this.controlContainer3.Name = "controlContainer3";
+ this.controlContainer3.Size = new System.Drawing.Size(1095, 109);
+ this.controlContainer3.TabIndex = 0;
+ //
+ // labelControl13
+ //
+ this.labelControl13.Location = new System.Drawing.Point(4, 6);
+ this.labelControl13.Name = "labelControl13";
+ this.labelControl13.Size = new System.Drawing.Size(24, 13);
+ this.labelControl13.TabIndex = 0;
+ this.labelControl13.Text = "Port:";
+ //
+ // labelControl15
+ //
+ this.labelControl15.Location = new System.Drawing.Point(406, 6);
+ this.labelControl15.Name = "labelControl15";
+ this.labelControl15.Size = new System.Drawing.Size(51, 13);
+ this.labelControl15.TabIndex = 4;
+ this.labelControl15.Text = "Command:";
+ //
+ // txtRconPort
+ //
+ this.txtRconPort.Location = new System.Drawing.Point(49, 3);
+ this.txtRconPort.MenuManager = this.barManager1;
+ this.txtRconPort.Name = "txtRconPort";
+ this.txtRconPort.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+ new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Delete)});
+ this.txtRconPort.Properties.Mask.EditMask = "\\d+";
+ this.txtRconPort.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.RegEx;
+ this.txtRconPort.Size = new System.Drawing.Size(83, 20);
+ this.txtRconPort.TabIndex = 1;
+ //
// barManager1
//
this.barManager1.Bars.AddRange(new DevExpress.XtraBars.Bar[] {
@@ -894,8 +999,10 @@ private void InitializeComponent()
this.miCopyAddress,
this.miReloadServers,
this.miAddRulesColumnText,
- this.miAddRulesColumnNumeric});
- this.barManager1.MaxItemId = 7;
+ this.miAddRulesColumnNumeric,
+ this.barButtonItem1,
+ this.miFavServer});
+ this.barManager1.MaxItemId = 9;
//
// barMenu
//
@@ -949,19 +1056,6 @@ private void InitializeComponent()
this.barDockControlRight.Location = new System.Drawing.Point(1465, 31);
this.barDockControlRight.Size = new System.Drawing.Size(0, 777);
//
- // imageCollection
- //
- this.imageCollection.ImageStream = ((DevExpress.Utils.ImageCollectionStreamer)(resources.GetObject("imageCollection.ImageStream")));
- this.imageCollection.Images.SetKeyName(0, "000.png");
- this.imageCollection.Images.SetKeyName(1, "001.png");
- this.imageCollection.Images.SetKeyName(2, "002.png");
- this.imageCollection.Images.SetKeyName(3, "003.png");
- this.imageCollection.Images.SetKeyName(4, "004.png");
- this.imageCollection.Images.SetKeyName(5, "005.png");
- this.imageCollection.Images.SetKeyName(6, "006.png");
- this.imageCollection.Images.SetKeyName(7, "007.png");
- this.imageCollection.Images.SetKeyName(8, "008.png");
- //
// miUpdateServerInfo
//
this.miUpdateServerInfo.Caption = "Update Information";
@@ -1011,6 +1105,64 @@ private void InitializeComponent()
this.miAddRulesColumnNumeric.Name = "miAddRulesColumnNumeric";
this.miAddRulesColumnNumeric.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miAddRulesColumnNumeric_ItemClick);
//
+ // barButtonItem1
+ //
+ this.barButtonItem1.Caption = "barButtonItem1";
+ this.barButtonItem1.Id = 7;
+ this.barButtonItem1.Name = "barButtonItem1";
+ //
+ // miFavServer
+ //
+ this.miFavServer.ButtonStyle = DevExpress.XtraBars.BarButtonStyle.Check;
+ this.miFavServer.Caption = "Favorite Server";
+ this.miFavServer.Id = 8;
+ this.miFavServer.ImageIndex = 3;
+ this.miFavServer.Name = "miFavServer";
+ this.miFavServer.DownChanged += new DevExpress.XtraBars.ItemClickEventHandler(this.miFavServer_DownChanged);
+ //
+ // txtRconConsole
+ //
+ this.txtRconConsole.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtRconConsole.Location = new System.Drawing.Point(-2, 26);
+ this.txtRconConsole.MenuManager = this.barManager1;
+ this.txtRconConsole.Name = "txtRconConsole";
+ this.txtRconConsole.Properties.ReadOnly = true;
+ this.txtRconConsole.Size = new System.Drawing.Size(1094, 81);
+ this.txtRconConsole.TabIndex = 6;
+ //
+ // txtRconCommand
+ //
+ this.txtRconCommand.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtRconCommand.Location = new System.Drawing.Point(481, 3);
+ this.txtRconCommand.MenuManager = this.barManager1;
+ this.txtRconCommand.Name = "txtRconCommand";
+ this.txtRconCommand.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+ new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Delete)});
+ this.txtRconCommand.Size = new System.Drawing.Size(611, 20);
+ this.txtRconCommand.TabIndex = 5;
+ this.txtRconCommand.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtRconCommand_KeyDown);
+ //
+ // labelControl14
+ //
+ this.labelControl14.Location = new System.Drawing.Point(161, 6);
+ this.labelControl14.Name = "labelControl14";
+ this.labelControl14.Size = new System.Drawing.Size(50, 13);
+ this.labelControl14.TabIndex = 2;
+ this.labelControl14.Text = "Password:";
+ //
+ // txtRconPassword
+ //
+ this.txtRconPassword.Location = new System.Drawing.Point(230, 3);
+ this.txtRconPassword.MenuManager = this.barManager1;
+ this.txtRconPassword.Name = "txtRconPassword";
+ this.txtRconPassword.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+ new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Delete)});
+ this.txtRconPassword.Size = new System.Drawing.Size(143, 20);
+ this.txtRconPassword.TabIndex = 3;
+ //
// panelContainer1
//
this.panelContainer1.ActiveChild = this.panelPlayers;
@@ -1134,105 +1286,6 @@ private void InitializeComponent()
this.gridColumn2.VisibleIndex = 1;
this.gridColumn2.Width = 150;
//
- // panelRcon
- //
- this.panelRcon.Controls.Add(this.controlContainer3);
- this.panelRcon.Dock = DevExpress.XtraBars.Docking.DockingStyle.Bottom;
- this.panelRcon.ID = new System.Guid("7b6df7b6-b112-4685-a1f4-c23ae548835f");
- this.panelRcon.Location = new System.Drawing.Point(0, 648);
- this.panelRcon.Name = "panelRcon";
- this.panelRcon.OriginalSize = new System.Drawing.Size(200, 136);
- this.panelRcon.SavedDock = DevExpress.XtraBars.Docking.DockingStyle.Bottom;
- this.panelRcon.SavedIndex = 1;
- this.panelRcon.Size = new System.Drawing.Size(1103, 136);
- this.panelRcon.Text = "Remote Console";
- this.panelRcon.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden;
- //
- // controlContainer3
- //
- this.controlContainer3.Controls.Add(this.labelControl13);
- this.controlContainer3.Controls.Add(this.labelControl15);
- this.controlContainer3.Controls.Add(this.txtRconPort);
- this.controlContainer3.Controls.Add(this.txtRconConsole);
- this.controlContainer3.Controls.Add(this.txtRconCommand);
- this.controlContainer3.Controls.Add(this.labelControl14);
- this.controlContainer3.Controls.Add(this.txtRconPassword);
- this.controlContainer3.Location = new System.Drawing.Point(4, 23);
- this.controlContainer3.Name = "controlContainer3";
- this.controlContainer3.Size = new System.Drawing.Size(1095, 109);
- this.controlContainer3.TabIndex = 0;
- //
- // labelControl13
- //
- this.labelControl13.Location = new System.Drawing.Point(4, 6);
- this.labelControl13.Name = "labelControl13";
- this.labelControl13.Size = new System.Drawing.Size(24, 13);
- this.labelControl13.TabIndex = 0;
- this.labelControl13.Text = "Port:";
- //
- // labelControl15
- //
- this.labelControl15.Location = new System.Drawing.Point(406, 6);
- this.labelControl15.Name = "labelControl15";
- this.labelControl15.Size = new System.Drawing.Size(51, 13);
- this.labelControl15.TabIndex = 4;
- this.labelControl15.Text = "Command:";
- //
- // txtRconPort
- //
- this.txtRconPort.Location = new System.Drawing.Point(49, 3);
- this.txtRconPort.MenuManager = this.barManager1;
- this.txtRconPort.Name = "txtRconPort";
- this.txtRconPort.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
- new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Delete)});
- this.txtRconPort.Properties.Mask.EditMask = "\\d+";
- this.txtRconPort.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.RegEx;
- this.txtRconPort.Size = new System.Drawing.Size(83, 20);
- this.txtRconPort.TabIndex = 1;
- //
- // txtRconConsole
- //
- this.txtRconConsole.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.txtRconConsole.Location = new System.Drawing.Point(-2, 26);
- this.txtRconConsole.MenuManager = this.barManager1;
- this.txtRconConsole.Name = "txtRconConsole";
- this.txtRconConsole.Properties.ReadOnly = true;
- this.txtRconConsole.Size = new System.Drawing.Size(1094, 81);
- this.txtRconConsole.TabIndex = 6;
- //
- // txtRconCommand
- //
- this.txtRconCommand.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.txtRconCommand.Location = new System.Drawing.Point(481, 3);
- this.txtRconCommand.MenuManager = this.barManager1;
- this.txtRconCommand.Name = "txtRconCommand";
- this.txtRconCommand.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
- new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Delete)});
- this.txtRconCommand.Size = new System.Drawing.Size(611, 20);
- this.txtRconCommand.TabIndex = 5;
- this.txtRconCommand.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtRconCommand_KeyDown);
- //
- // labelControl14
- //
- this.labelControl14.Location = new System.Drawing.Point(161, 6);
- this.labelControl14.Name = "labelControl14";
- this.labelControl14.Size = new System.Drawing.Size(50, 13);
- this.labelControl14.TabIndex = 2;
- this.labelControl14.Text = "Password:";
- //
- // txtRconPassword
- //
- this.txtRconPassword.Location = new System.Drawing.Point(230, 3);
- this.txtRconPassword.MenuManager = this.barManager1;
- this.txtRconPassword.Name = "txtRconPassword";
- this.txtRconPassword.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
- new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Delete)});
- this.txtRconPassword.Size = new System.Drawing.Size(143, 20);
- this.txtRconPassword.TabIndex = 3;
- //
// panelServerList
//
this.panelServerList.Controls.Add(this.controlContainer1);
@@ -1261,7 +1314,7 @@ private void InitializeComponent()
//
// btnSkin
//
- this.btnSkin.Location = new System.Drawing.Point(514, 5);
+ this.btnSkin.Location = new System.Drawing.Point(369, 54);
this.btnSkin.Name = "btnSkin";
this.btnSkin.Size = new System.Drawing.Size(115, 25);
this.btnSkin.TabIndex = 12;
@@ -1288,13 +1341,14 @@ private void InitializeComponent()
//
// btnQueryMaster
//
- this.btnQueryMaster.ImageIndex = 1;
+ this.btnQueryMaster.ImageIndex = 0;
this.btnQueryMaster.ImageList = this.imageCollection;
- this.btnQueryMaster.Location = new System.Drawing.Point(939, 54);
+ this.btnQueryMaster.Location = new System.Drawing.Point(1071, 13);
this.btnQueryMaster.Name = "btnQueryMaster";
this.btnQueryMaster.Size = new System.Drawing.Size(115, 25);
this.btnQueryMaster.TabIndex = 20;
- this.btnQueryMaster.Text = "Reload Servers";
+ this.btnQueryMaster.Text = "Find Servers";
+ this.btnQueryMaster.ToolTip = "Get new server list from Valve master server";
this.btnQueryMaster.Click += new System.EventHandler(this.btnQueryMaster_Click);
//
// panelTop
@@ -1322,6 +1376,7 @@ private void InitializeComponent()
// panelOptions
//
this.panelOptions.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
+ this.panelOptions.Controls.Add(this.btnQuickRefresh);
this.panelOptions.Controls.Add(this.rbFavGame4);
this.panelOptions.Controls.Add(this.txtMod);
this.panelOptions.Controls.Add(this.labelControl12);
@@ -1351,6 +1406,18 @@ private void InitializeComponent()
this.panelOptions.Size = new System.Drawing.Size(1460, 83);
this.panelOptions.TabIndex = 0;
//
+ // btnQuickRefresh
+ //
+ this.btnQuickRefresh.ImageIndex = 1;
+ this.btnQuickRefresh.ImageList = this.imageCollection;
+ this.btnQuickRefresh.Location = new System.Drawing.Point(1071, 54);
+ this.btnQuickRefresh.Name = "btnQuickRefresh";
+ this.btnQuickRefresh.Size = new System.Drawing.Size(115, 25);
+ this.btnQuickRefresh.TabIndex = 22;
+ this.btnQuickRefresh.Text = "Quick Refresh";
+ this.btnQuickRefresh.ToolTip = "Update status of the servers in the current list";
+ this.btnQuickRefresh.Click += new System.EventHandler(this.btnQuickRefresh_Click);
+ //
// rbFavGame4
//
this.rbFavGame4.Location = new System.Drawing.Point(343, 57);
@@ -1440,7 +1507,7 @@ private void InitializeComponent()
//
this.cbAdvancedOptions.ImageIndex = 4;
this.cbAdvancedOptions.ImageList = this.imageCollection;
- this.cbAdvancedOptions.Location = new System.Drawing.Point(1070, 54);
+ this.cbAdvancedOptions.Location = new System.Drawing.Point(939, 54);
this.cbAdvancedOptions.Name = "cbAdvancedOptions";
this.cbAdvancedOptions.Size = new System.Drawing.Size(115, 25);
this.cbAdvancedOptions.TabIndex = 21;
@@ -1560,6 +1627,7 @@ private void InitializeComponent()
//
// panelAdvancedOptions
//
+ this.panelAdvancedOptions.Controls.Add(this.cbFavServersOnTop);
this.panelAdvancedOptions.Controls.Add(this.txtGameServer);
this.panelAdvancedOptions.Controls.Add(this.rbAddressGamePort);
this.panelAdvancedOptions.Controls.Add(this.rbAddressQueryPort);
@@ -1580,9 +1648,19 @@ private void InitializeComponent()
this.panelAdvancedOptions.TabIndex = 1;
this.panelAdvancedOptions.Visible = false;
//
+ // cbFavServersOnTop
+ //
+ this.cbFavServersOnTop.Location = new System.Drawing.Point(369, 28);
+ this.cbFavServersOnTop.Name = "cbFavServersOnTop";
+ this.cbFavServersOnTop.Properties.AutoWidth = true;
+ this.cbFavServersOnTop.Properties.Caption = "Keep favorite servers on top";
+ this.cbFavServersOnTop.Size = new System.Drawing.Size(160, 19);
+ this.cbFavServersOnTop.TabIndex = 16;
+ this.cbFavServersOnTop.CheckedChanged += new System.EventHandler(this.cbFavServersOnTop_CheckedChanged);
+ //
// txtGameServer
//
- this.txtGameServer.Location = new System.Drawing.Point(445, 50);
+ this.txtGameServer.Location = new System.Drawing.Point(445, 6);
this.txtGameServer.MenuManager = this.barManager1;
this.txtGameServer.Name = "txtGameServer";
this.txtGameServer.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
@@ -1620,7 +1698,7 @@ private void InitializeComponent()
//
// labelControl6
//
- this.labelControl6.Location = new System.Drawing.Point(369, 53);
+ this.labelControl6.Location = new System.Drawing.Point(369, 9);
this.labelControl6.Name = "labelControl6";
this.labelControl6.Size = new System.Drawing.Size(65, 13);
this.labelControl6.TabIndex = 8;
@@ -1714,7 +1792,8 @@ private void InitializeComponent()
new DevExpress.XtraBars.LinkPersistInfo(this.miUpdateServerInfo),
new DevExpress.XtraBars.LinkPersistInfo(this.miConnect),
new DevExpress.XtraBars.LinkPersistInfo(this.miConnectSpectator),
- new DevExpress.XtraBars.LinkPersistInfo(this.miCopyAddress, true)});
+ new DevExpress.XtraBars.LinkPersistInfo(this.miCopyAddress, true),
+ new DevExpress.XtraBars.LinkPersistInfo(this.miFavServer)});
this.menuServers.Manager = this.barManager1;
this.menuServers.Name = "menuServers";
//
@@ -1776,9 +1855,17 @@ private void InitializeComponent()
((System.ComponentModel.ISupportInitialize)(this.gvServers)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.riCountryFlagEdit)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.imgFlags)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.riFavServer)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.imageCollection)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.dockManager1)).EndInit();
+ this.panelRcon.ResumeLayout(false);
+ this.controlContainer3.ResumeLayout(false);
+ this.controlContainer3.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.txtRconPort.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.barManager1)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.imageCollection)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.txtRconConsole.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.txtRconCommand.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.txtRconPassword.Properties)).EndInit();
this.panelContainer1.ResumeLayout(false);
this.panelPlayers.ResumeLayout(false);
this.dockPanel1_Container.ResumeLayout(false);
@@ -1789,13 +1876,6 @@ private void InitializeComponent()
((System.ComponentModel.ISupportInitialize)(this.gcRules)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.dsRules)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.gvRules)).EndInit();
- this.panelRcon.ResumeLayout(false);
- this.controlContainer3.ResumeLayout(false);
- this.controlContainer3.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.txtRconPort.Properties)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.txtRconConsole.Properties)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.txtRconCommand.Properties)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.txtRconPassword.Properties)).EndInit();
this.panelServerList.ResumeLayout(false);
this.controlContainer1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.cbRefreshSelectedServer.Properties)).EndInit();
@@ -1819,6 +1899,7 @@ private void InitializeComponent()
((System.ComponentModel.ISupportInitialize)(this.panelAdvancedOptions)).EndInit();
this.panelAdvancedOptions.ResumeLayout(false);
this.panelAdvancedOptions.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.cbFavServersOnTop.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.txtGameServer.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.rbAddressGamePort.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.rbAddressQueryPort.Properties)).EndInit();
@@ -1955,6 +2036,12 @@ private void InitializeComponent()
protected ButtonEdit txtRconPassword;
protected LabelControl labelControl13;
protected ButtonEdit txtRconPort;
+ private DevExpress.XtraGrid.Columns.GridColumn colFavServer;
+ private DevExpress.XtraEditors.Repository.RepositoryItemCheckEdit riFavServer;
+ private DevExpress.XtraBars.BarButtonItem barButtonItem1;
+ private DevExpress.XtraBars.BarButtonItem miFavServer;
+ protected SimpleButton btnQuickRefresh;
+ protected CheckEdit cbFavServersOnTop;
diff --git a/ServerBrowser/ServerBrowserForm.cs b/ServerBrowser/ServerBrowserForm.cs
index b0ba5dc..ca0f942 100644
--- a/ServerBrowser/ServerBrowserForm.cs
+++ b/ServerBrowser/ServerBrowserForm.cs
@@ -7,6 +7,7 @@
using System.Media;
using System.Net;
using System.Reflection;
+using System.Text;
using System.Threading;
using System.Windows.Forms;
using DevExpress.Data;
@@ -16,7 +17,6 @@
using DevExpress.XtraBars.Docking;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Controls;
-using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraGrid.Views.Grid;
@@ -60,6 +60,7 @@ public partial class ServerBrowserForm : XtraForm
private ServerRow currentServer;
private IServerSource serverSource;
private int geoIpModified;
+ private readonly HashSet favServers = new HashSet();
#region ctor()
public ServerBrowserForm()
@@ -150,6 +151,15 @@ protected virtual void SaveAppSettings()
Properties.Settings.Default.RefreshInterval = Convert.ToInt32(this.spinRefreshInterval.EditValue);
Properties.Settings.Default.RefreshSelected = this.cbRefreshSelectedServer.Checked;
+ var sb = new StringBuilder();
+ foreach (var fav in this.favServers)
+ {
+ if (sb.Length > 0) sb.Append(",");
+ sb.Append(fav);
+ }
+ Properties.Settings.Default.FavServers = sb.ToString();
+ Properties.Settings.Default.KeepFavServersOnTop = this.cbFavServersOnTop.Checked;
+
Properties.Settings.Default.Save();
}
#endregion
@@ -267,6 +277,15 @@ protected virtual void InitAppSettings()
this.txtTagExclude.Text = Properties.Settings.Default.TagsExclude;
this.txtMod.Text = Properties.Settings.Default.FilterMod;
this.txtMap.Text = Properties.Settings.Default.FilterMap;
+
+ // load favorite servers
+ foreach (var server in Properties.Settings.Default.FavServers.Split(','))
+ {
+ if (server == "") continue;
+ var parts = server.Split(':');
+ this.favServers.Add(new IPEndPoint(IPAddress.Parse(parts[0]), int.Parse(parts[1])));
+ }
+ this.cbFavServersOnTop.Checked = Properties.Settings.Default.KeepFavServersOnTop;
}
#endregion
@@ -780,6 +799,17 @@ private void btnQueryMaster_Click(object sender, EventArgs e)
}
#endregion
+ #region btnQuickRefresh_Click
+ private void btnQuickRefresh_Click(object sender, EventArgs e)
+ {
+ if (this.queryLogic.IsUpdating)
+ return;
+ this.timerReloadServers.Stop();
+ this.queryLogic.RefreshAllServers(this.servers);
+ this.timerReloadServers.Start();
+ }
+ #endregion
+
#region linkFilter_HyperlinkClick
private void linkFilter_HyperlinkClick(object sender, HyperlinkClickEventArgs e)
{
@@ -897,6 +927,17 @@ private void btnSkin_Click(object sender, EventArgs e)
}
#endregion
+ #region cbFavServersOnTop_CheckedChanged
+ private void cbFavServersOnTop_CheckedChanged(object sender, EventArgs e)
+ {
+ this.gvServers.BeginSort();
+ if (this.cbFavServersOnTop.Checked)
+ gvServers_StartSorting(null, null);
+ else
+ this.colFavServer.SortOrder = ColumnSortOrder.None;
+ this.gvServers.EndSort();
+ }
+ #endregion
// Servers grid
@@ -927,20 +968,36 @@ private void timerUpdateServerList_Tick(object sender, EventArgs e)
#endregion
#region gvServers_CustomUnboundColumnData
- private void gvServers_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e)
+ private void gvServers_CustomUnboundColumnData(object sender, CustomColumnDataEventArgs e)
{
- if (!e.IsGetData) return;
+ if (e.IsSetData)
+ {
+ if (e.Column == this.colFavServer)
+ {
+ var server = (ServerRow) e.Row;
+ if ((bool) e.Value)
+ this.favServers.Add(server.EndPoint);
+ else
+ this.favServers.Remove(server.EndPoint);
+ }
+ return;
+ }
+
var row = (ServerRow) e.Row;
- if (e.Column == this.colEndPoint)
+ if (e.Column == this.colFavServer)
+ e.Value = this.favServers.Contains(row.EndPoint);
+ else if (e.Column == this.colEndPoint)
e.Value = GetServerAddress(row);
else if (e.Column == this.colName)
- e.Value = row.ServerInfo == null ? (showAddressMode == 0 ? GetServerAddress(row) : null) : row.ServerInfo.Name;
+ e.Value = row.ServerInfo == null ? (showAddressMode == 0 ? GetServerAddress(row) : null) : row.ServerInfo.Name.Trim();
else if (e.Column.FieldName.StartsWith(CustomNumericRuleColumnPrefix))
{
var fieldName = e.Column.FieldName.Substring(CustomNumericRuleColumnPrefix.Length);
e.Value = row.GetExtenderCellValue(fieldName);
try { e.Value = Convert.ToDecimal(e.Value); }
- catch { }
+ catch
+ {
+ }
}
else
e.Value = row.GetExtenderCellValue(e.Column.FieldName);
@@ -979,7 +1036,7 @@ private void toolTipController_GetActiveObjectInfo(object sender, ToolTipControl
#endregion
#region gvServers_FocusedRowChanged
- private void gvServers_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
+ private void gvServers_FocusedRowChanged(object sender, FocusedRowChangedEventArgs e)
{
try
{
@@ -1042,6 +1099,19 @@ private void gvServers_MouseDown(object sender, MouseEventArgs e)
}
#endregion
+ #region gvServers_StartSorting
+ private void gvServers_StartSorting(object sender, EventArgs e)
+ {
+ if (this.cbFavServersOnTop.Checked)
+ {
+ if (this.gvServers.SortInfo[this.colFavServer] == null)
+ this.gvServers.SortInfo.Insert(0, this.colFavServer, ColumnSortOrder.Descending);
+ this.colFavServer.SortOrder = ColumnSortOrder.Descending;
+ this.colFavServer.SortIndex = 0;
+ }
+ }
+ #endregion
+
#region miUpdateServerInfo_ItemClick
private void miUpdateServerInfo_ItemClick(object sender, ItemClickEventArgs e)
{
@@ -1071,13 +1141,33 @@ private void miCopyAddress_ItemClick(object sender, ItemClickEventArgs e)
}
#endregion
+ #region riFavServer_EditValueChanged
+ private void riFavServer_EditValueChanged(object sender, EventArgs e)
+ {
+ this.gvServers.PostEditor();
+ }
+ #endregion
+
+ #region miFavServer_DownChanged
+ private void miFavServer_DownChanged(object sender, ItemClickEventArgs e)
+ {
+ var row = (ServerRow)this.gvServers.GetFocusedRow();
+ if (row == null) return;
+ if (this.miFavServer.Down)
+ this.favServers.Add(row.EndPoint);
+ else
+ this.favServers.Remove(row.EndPoint);
+ this.gvServers.RefreshRow(this.gvServers.FocusedRowHandle);
+ }
+ #endregion
+
// Players grid
#region gvPlayers_CustomUnboundColumnData
- private void gvPlayers_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e)
+ private void gvPlayers_CustomUnboundColumnData(object sender, CustomColumnDataEventArgs e)
{
if (!e.IsGetData) return;
- var server = (ServerRow)this.gvServers.GetFocusedRow();
+ var server = (ServerRow) this.gvServers.GetFocusedRow();
var player = (Player) e.Row;
if (server != null && player != null)
e.Value = server.GameExtension.GetPlayerCellValue(server, player, e.Column.FieldName);
@@ -1198,5 +1288,6 @@ private void SendRconCommand(ServerRow row, int port, string pass, string text)
if (row.GameExtension != null)
row.GameExtension.Rcon(row, port, pass, text);
}
+
}
}
\ No newline at end of file
diff --git a/ServerBrowser/ServerBrowserForm.resx b/ServerBrowser/ServerBrowserForm.resx
index 7a11ba6..07a3515 100644
--- a/ServerBrowser/ServerBrowserForm.resx
+++ b/ServerBrowser/ServerBrowserForm.resx
@@ -3808,18 +3808,6 @@
4ClskjT9C1o4e2dU+Eg0AAAAAElFTkSuQmCCCw==
-
- 369, 56
-
-
- 142, 17
-
-
- 475, 17
-
-
- 17, 17
-
17, 56
@@ -3831,90 +3819,126 @@
a2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAAChEZXZFeHByZXNzLlV0aWxzLkltYWdlQ29sbGVjdGlvblN0
cmVhbWVyAgAAAAlJbWFnZVNpemUERGF0YQQHE1N5c3RlbS5EcmF3aW5nLlNpemUDAAAAAgIAAAAF/P//
/xNTeXN0ZW0uRHJhd2luZy5TaXplAgAAAAV3aWR0aAZoZWlnaHQAAAgIAwAAABAAAAAQAAAACQUAAAAP
- BQAAAPcSAAACTgEAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRy
- oQAAAMpJREFUOE+lkr0OwiAQgGlro5tRF03cfNE+ZSemDnTqxMIE3p13zRVJDJXk4+B+vjQNJsbYpJRK
- 9MABaBV4PwMnvjcGtg4PjDTiGWuI1HRuzZthGNJeYHUk2LN4rv1X0JMghFANCx4k8N5Xw4I7CZZlqYYF
- n584z/MG59xXLmcjmKapmo3gF9ZaIs+TADZ5eRI1HTaO40jw0AXzwBNj/lRLXEXCAsytz1kEaJRzKfY4
- rARrXZokoYckivxY+AJDBb7cOOZCzQtQtWTeF24184AzFQ0AAAAASUVORK5CYIKSAgAAiVBORw0KGgoA
- AAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwwAADsMBx2+o
- ZAAAABp0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMTAw9HKhAAACDklEQVQ4T2MgFrgXH0xgZGZl
- gnJJA1ohy/hdq67/dM7fkwgVwg8cUzcJBdeey3Uvv7jcufziNufKS3vtK279d62+/tYkYpYMVBl2EFBx
- ItC97Mpby/xr/01yr/03yr3+3zD/xn+jwpv/TUpu/7ctObcBqAy7V/xKj/ta5V7+o5d6/p9m3LEHWonH
- r+pmXPxkWHjrv0nZ3f/mVff/29Y/+O9QfCgaqgUBzGPXClhknH6uHbFlrpJ9lTZQiA2ImVX9Z6ibV937
- b13/8L9t06P/lhUXjxkkrnEDa0IGjunb/LV8JnsAmSjOsyi/nGhdf/+PecmZTZrh8xyAQiwQGUzACKVR
- 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
- rkJgggs=
+ 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
+ g9ECzSBjSIkAAAAASUVORK5CYIIL
+
+ 369, 56
+
+
+ 142, 17
+
+
+ 475, 17
+
+
+ 17, 17
+
568, 17
diff --git a/ServerBrowser/ServerQueryLogic.cs b/ServerBrowser/ServerQueryLogic.cs
index b6eaff5..ca0b44e 100644
--- a/ServerBrowser/ServerQueryLogic.cs
+++ b/ServerBrowser/ServerQueryLogic.cs
@@ -188,6 +188,18 @@ private void OnMasterServerReceive(UpdateRequest request, ReadOnlyCollection servers)
+ {
+ var request = new UpdateRequest(this.currentRequest.AppId, this.currentRequest.MaxResults, this.currentRequest.Timeout, this.currentRequest.GameExtension);
+ request.Servers.AddRange(servers);
+ foreach (var server in servers)
+ server.Status = "updating...";
+ this.currentRequest.SetDataModified();
+ ThreadPool.QueueUserWorkItem(ctx => this.AllServersReceived(request));
+ }
+ #endregion
+
#region AllServersReceived()
private void AllServersReceived(UpdateRequest request)
{
diff --git a/ServerBrowser/Settings.cs b/ServerBrowser/Settings.cs
index bfa7c47..e1c8a33 100644
--- a/ServerBrowser/Settings.cs
+++ b/ServerBrowser/Settings.cs
@@ -6,7 +6,7 @@
// The PropertyChanged event is raised after a setting's value is changed.
// The SettingsLoaded event is raised after the setting values are loaded.
// The SettingsSaving event is raised before the setting values are saved.
- internal sealed partial class Settings {
+ public sealed partial class Settings {
public Settings() {
// // To add event handlers for saving and changing settings, uncomment the lines below:
diff --git a/ServerBrowser/app.config b/ServerBrowser/app.config
index 93eb0ed..dd26c95 100644
--- a/ServerBrowser/app.config
+++ b/ServerBrowser/app.config
@@ -44,16 +44,22 @@
0
-
+
-
+
-
+
-
+
+
+
+
+
+
+ False
diff --git a/ServerBrowser/images/000.png b/ServerBrowser/images/000.png
index 311eb82..bcf5982 100644
Binary files a/ServerBrowser/images/000.png and b/ServerBrowser/images/000.png differ
diff --git a/ServerBrowser/images/009.png b/ServerBrowser/images/009.png
new file mode 100644
index 0000000..311eb82
Binary files /dev/null and b/ServerBrowser/images/009.png differ
diff --git a/ServerBrowser/images/010.png b/ServerBrowser/images/010.png
new file mode 100644
index 0000000..d97101e
Binary files /dev/null and b/ServerBrowser/images/010.png differ
diff --git a/changelog.md b/changelog.md
index 49ea44a..790163e 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,10 @@
+1.13
+---
+- added support to mark servers as favorites and keep them on top of the server list
+- added button for "Quick Refresh" which updates the status of all servers in the current list
+- renamed "Reload Servers" to "Find Servers" which should make it clearer that it loads a new server list
+- removing leading/trailing spaces from server names
+
1.12.2
---
- when trying to connect to a skill limited TOXIKK server, a message box informs you that this is not possible