您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

PreferencesManager.java 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. /*
  2. * Copyright (c) 2006-2014 DMDirc Developers
  3. *
  4. * Permission is hereby granted, free of charge, to any person obtaining a copy
  5. * of this software and associated documentation files (the "Software"), to deal
  6. * in the Software without restriction, including without limitation the rights
  7. * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  8. * copies of the Software, and to permit persons to whom the Software is
  9. * furnished to do so, subject to the following conditions:
  10. *
  11. * The above copyright notice and this permission notice shall be included in
  12. * all copies or substantial portions of the Software.
  13. *
  14. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  17. * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  18. * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  19. * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  20. * SOFTWARE.
  21. */
  22. package com.dmdirc.config.prefs;
  23. import com.dmdirc.events.ConnectionPrefsRequestedEvent;
  24. import com.dmdirc.events.GroupChatPrefsRequestedEvent;
  25. import com.dmdirc.interfaces.config.AggregateConfigProvider;
  26. import com.dmdirc.interfaces.config.ConfigProvider;
  27. import com.dmdirc.util.validators.NumericalValidator;
  28. import com.dmdirc.util.validators.OptionalValidator;
  29. import javax.inject.Inject;
  30. import net.engio.mbassy.bus.MBassador;
  31. /**
  32. * Manages preferences for the client.
  33. *
  34. * @since 0.6.5
  35. */
  36. public class PreferencesManager {
  37. /** Event bus to public events on. */
  38. private final MBassador eventBus;
  39. @Inject
  40. public PreferencesManager(final MBassador eventBus) {
  41. this.eventBus = eventBus;
  42. }
  43. /**
  44. * Retrieves a category containing preferences settings which should be displayed in
  45. * channel-specific contexts.
  46. *
  47. * @param manager The config manager to load settings from
  48. * @param identity The identity to save settings to
  49. *
  50. * @return A preferences category populated with channel settings
  51. */
  52. public PreferencesCategory getServerSettings(final AggregateConfigProvider manager,
  53. final ConfigProvider identity) {
  54. final PreferencesCategory category = new PreferencesCategory("Server settings",
  55. "These settings are specific to this server on this network,"
  56. + " any settings specified here will overwrite global settings");
  57. // Copy all the channel ones
  58. for (PreferencesSetting setting : getChannelSettings(manager, identity)
  59. .getSettings()) {
  60. category.addSetting(setting);
  61. }
  62. category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
  63. "general", "closechannelsonquit", "Close channels on quit",
  64. "Close channel windows when you manually disconnect from the server",
  65. manager, identity));
  66. category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
  67. "general", "closechannelsondisconnect",
  68. "Close channels on disconnect", "Close channel windows when "
  69. + "the server is disconnected (because of an error)",
  70. manager, identity));
  71. category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
  72. "general", "closequeriesonquit", "Close queries on quit",
  73. "Close query windows when you manually disconnect from the server",
  74. manager, identity));
  75. category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
  76. "general", "closequeriesondisconnect",
  77. "Close queries on disconnect", "Close query windows when "
  78. + "the server is disconnected (because of an error)",
  79. manager, identity));
  80. category.addSetting(new PreferencesSetting(PreferencesType.DURATION,
  81. "server", "pingtimer", "Ping warning time",
  82. "How long to wait after a ping reply is sent before showing "
  83. + "a warning message",
  84. manager, identity));
  85. category.addSetting(new PreferencesSetting(PreferencesType.DURATION,
  86. "server", "pingtimeout", "Ping timeout",
  87. "How long to wait for a server to reply to a PING request "
  88. + "before assuming the server has died",
  89. manager, identity));
  90. category.addSetting(new PreferencesSetting(PreferencesType.DURATION,
  91. "server", "pingfrequency", "Ping frequency",
  92. "How often a PING request should be sent to the server (to "
  93. + "check that it is still alive)",
  94. manager, identity));
  95. category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
  96. "general", "reconnectonconnectfailure", "Reconnect on failure",
  97. "Attempt to reconnect if there is an error when connecting",
  98. manager, identity));
  99. category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
  100. "general", "reconnectondisconnect", "Reconnect on disconnect",
  101. "Attempt to reconnect if the server is disconnected",
  102. manager, identity));
  103. category.addSetting(new PreferencesSetting(PreferencesType.DURATION,
  104. "general", "reconnectdelay", "Reconnect delay",
  105. "How long to wait before attempting to reconnect to a server",
  106. manager, identity));
  107. category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
  108. "general", "rejoinchannels", "Rejoin open channels",
  109. "Rejoin open channels when reconnecting to a server",
  110. manager, identity));
  111. category.addSetting(new PreferencesSetting(PreferencesType.TEXT,
  112. "general", "quitmessage",
  113. "Quit message", "Default quit message to use when disconnecting",
  114. manager, identity));
  115. category.addSetting(new PreferencesSetting(PreferencesType.TEXT,
  116. "general", "reconnectmessage",
  117. "Reconnect message", "Default quit message to use when reconnecting",
  118. manager, identity));
  119. eventBus.publish(new ConnectionPrefsRequestedEvent(category));
  120. return category;
  121. }
  122. /**
  123. * Retrieves a category containing preferences settings which should be displayed in
  124. * channel-specific contexts.
  125. *
  126. * @param manager The config manager to load settings from
  127. * @param identity The identity to save settings to
  128. *
  129. * @return A preferences category populated with channel settings
  130. */
  131. public PreferencesCategory getChannelSettings(final AggregateConfigProvider manager,
  132. final ConfigProvider identity) {
  133. final PreferencesCategory category = new PreferencesCategory("Channel settings",
  134. "These settings are specific to this channel on this network,"
  135. + " any settings specified here will overwrite global settings");
  136. category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
  137. "channel", "splitusermodes", "Split user modes",
  138. "Show individual mode lines for each mode change that affects"
  139. + " a user (e.g. op, devoice)",
  140. manager, identity));
  141. category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
  142. "channel", "sendwho", "Send channel WHOs",
  143. "Request information (away state, hostname, etc) on channel "
  144. + "users automatically",
  145. manager, identity));
  146. category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
  147. "channel", "showmodeprefix", "Show mode prefix",
  148. "Prefix users' names with their mode (e.g. @) in channels",
  149. manager, identity));
  150. category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
  151. "ui", "shownickcoloursintext", "Show nick colours in text area",
  152. "Show nickname colours (if set) in text areas",
  153. manager, identity));
  154. category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
  155. "ui", "shownickcoloursinnicklist", "Show nick colours in nicklists",
  156. "Show nickname colours (if set) in channel nicklists",
  157. manager, identity));
  158. category.addSetting(new PreferencesSetting(PreferencesType.TEXT,
  159. "general", "partmessage",
  160. "Part message", "Default part message to use when leaving channels",
  161. manager, identity));
  162. category.addSetting(new PreferencesSetting(PreferencesType.TEXT,
  163. "general", "cyclemessage",
  164. "Cycle message", "Default part message to use when cycling channels",
  165. manager, identity));
  166. category.addSetting(new PreferencesSetting(PreferencesType.TEXT,
  167. "general", "kickmessage",
  168. "Kick message", "Default message to use when kicking people",
  169. manager, identity));
  170. category.addSetting(new PreferencesSetting(PreferencesType.COLOUR,
  171. "ui", "backgroundcolour", "Background colour", "Default "
  172. + "background colour to use",
  173. manager, identity));
  174. category.addSetting(new PreferencesSetting(PreferencesType.COLOUR,
  175. "ui", "foregroundcolour", "Foreground colour", "Default "
  176. + "foreground colour to use",
  177. manager, identity));
  178. category.addSetting(new PreferencesSetting(PreferencesType.COLOUR,
  179. "ui", "inputbackgroundcolour", "Input background colour",
  180. "Default background colour to use for input fields",
  181. manager, identity));
  182. category.addSetting(new PreferencesSetting(PreferencesType.COLOUR,
  183. "ui", "inputforegroundcolour", "Input foreground colour",
  184. "Default foreground colour to use for input fields",
  185. manager, identity));
  186. category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
  187. "general", "showcolourdialog", "Show colour dialog",
  188. "Show colour picker dialog when using colour control codes",
  189. manager, identity));
  190. category.addSetting(new PreferencesSetting(PreferencesType.COLOUR,
  191. "ui", "nicklistbackgroundcolour", "Nicklist background colour",
  192. "Background colour to use for the nicklist",
  193. manager, identity));
  194. category.addSetting(new PreferencesSetting(PreferencesType.COLOUR,
  195. "ui", "nicklistforegroundcolour", "Nicklist foreground colour",
  196. "Foreground colour to use for the nicklist",
  197. manager, identity));
  198. category.addSetting(new PreferencesSetting(PreferencesType.COLOUR,
  199. "ui", "nickListAltBackgroundColour",
  200. "Alternate background colour",
  201. "Background colour to use for every other nicklist entry",
  202. manager, identity));
  203. category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
  204. "nicklist", "sortByMode", "Sort nicklist by user mode",
  205. "Sort nicknames by the modes that they have?",
  206. manager, identity));
  207. category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
  208. "nicklist", "sortByCase", "Sort nicklist by case",
  209. "Sort nicknames in a case-sensitive manner?",
  210. manager, identity));
  211. category.addSetting(new PreferencesSetting(PreferencesType.OPTIONALINTEGER,
  212. new OptionalValidator(new NumericalValidator(10, -1)),
  213. "ui", "frameBufferSize", "Window buffer size",
  214. "The maximum number of lines in a window buffer",
  215. manager, identity));
  216. category.addSetting(new PreferencesSetting(PreferencesType.FONT,
  217. "ui", "textPaneFontName", "Textpane font",
  218. "Font for the textpane",
  219. manager, identity));
  220. category.addSetting(new PreferencesSetting(PreferencesType.INTEGER,
  221. "ui", "textPaneFontSize", "Textpane font size",
  222. "Font size for the textpane",
  223. manager, identity));
  224. category.addSetting(new PreferencesSetting(PreferencesType.INTEGER,
  225. "ui", "inputbuffersize", "Input buffer size",
  226. "Number of items of input history to keep",
  227. manager, identity));
  228. eventBus.publish(new GroupChatPrefsRequestedEvent(category));
  229. return category;
  230. }
  231. }