Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

PreferencesManager.java 12KB

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