openfire-Spark二次開發——修改設定視窗
阿新 • • 發佈:2019-01-30
spark開發了幾周了,該總結一下了。
今天說說修改設定介面的視窗。
這是spark的設定介面。
裡面有很多項設定,但是也有許多內容暫時不需要的比如ROAR,顯示樣式中的主題,因為我已經辛辛苦苦的套上了新主題,如果再變換主題就沒意思了。暫時先閹了。
這個視窗的具體實現類
org.jivesoftware.sparkimpl.preference.PreferenceDialog//設定視窗的類
上面的類中有如下屬性
private JDialog preferenceDialog;
private JOptionPane pane = null;
private PreferencesPanel prefPanel;//這是左邊那些面板列表的定義
進入PreferencePanel中後發現建構函式宣告如下
public PreferencesPanel(Iterator<Preference> preferences) {
this.setLayout(new GridBagLayout());
titleLabel.setText(Res.getString("title.preferences"));
titleLabel.setFont(new Font("Dialog", Font.BOLD, 15 ));
scrollPane = new JScrollPane(list);
scrollPane.setPreferredSize(new Dimension(125, 0));
scrollPane.setMinimumSize(new Dimension(125,100));
list.setFixedCellHeight(50);
add(scrollPane, new GridBagConstraints(0, 0, 1, 1, 0.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.VERTICAL, new Insets(5, 5, 5, 5), 50, 0));
add(flowPanel, new GridBagConstraints(1, 0, 1, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0));
list.setCellRenderer(new JLabelIconRenderer());
list.addListSelectionListener(this);
// Populate with current preferences
while (preferences.hasNext()) {
Preference preference = preferences.next();
listModel.addElement(new PreferenceUI(preference));
}
list.setSelectedIndex(0);
}
不難發現Iterator<Preference>
就是左邊的各種元件。選中Preference按下ctrl+T檢視他的實現樹。
這個基本是我們想看到的。先幹掉一個Privacy Plugin壓壓驚。
但是問題來了。如果是修改外掛裡面的內容則在上圖中的類中找到相應外掛修改。如果直接不載入這個外掛。那麼肯定要在啟動的時候去除載入這個外掛。
主面板點選設定後會彈出總的設定對話方塊。
首先主面板類
/spark/src/java/org/jivesoftware/MainWindow.java
//其中的build方法
private void buildMenu() {
// setup file menu
final JMenuItem exitMenuItem = new JMenuItem();
// Setup ResourceUtils
ResourceUtils.resButton(connectMenu, "&" + Default.getString(Default.APPLICATION_NAME));
ResourceUtils.resButton(contactsMenu, Res.getString("menuitem.contacts"));
ResourceUtils.resButton(actionsMenu, Res.getString("menuitem.actions"));
ResourceUtils.resButton(exitMenuItem, Res.getString("menuitem.exit"));
ResourceUtils.resButton(pluginsMenu, Res.getString("menuitem.plugins"));
exitMenuItem.setIcon(null);
mainWindowBar.add(connectMenu);
mainWindowBar.add(contactsMenu);
mainWindowBar.add(actionsMenu);
//mainWindowBar.add(pluginsMenu);
mainWindowBar.add(helpMenu);
preferenceMenuItem = new JMenuItem(SparkRes.getImageIcon(SparkRes.PREFERENCES_IMAGE));
preferenceMenuItem.setText(Res.getString("title.spark.preferences"));
preferenceMenuItem.addActionListener(this); //新增的點選響應事件
connectMenu.add(preferenceMenuItem);//這就是設定按鈕,
alwaysOnTopItem = new JCheckBoxMenuItem();//面板總在最前面按鈕
ResourceUtils.resButton(alwaysOnTopItem, Res.getString("menuitem.always.on.top"));
alwaysOnTopItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
if (alwaysOnTopItem.isSelected())
{
SettingsManager.getLocalPreferences().setMainWindowAlwaysOnTop(true);
MainWindow.getInstance().setAlwaysOnTop(true);
}
else
{
SettingsManager.getLocalPreferences().setMainWindowAlwaysOnTop(false);
MainWindow.getInstance().setAlwaysOnTop(false);
}
}
});
if (SettingsManager.getLocalPreferences().isMainWindowAlwaysOnTop())
{
alwaysOnTopItem.setSelected(true);
this.setAlwaysOnTop(true);
}
connectMenu.add(alwaysOnTopItem);
if(!Default.getBoolean("DISABLE_EXIT"))
connectMenu.addSeparator();
//EventQueue.invokeLater(new Runnable() {
// public void run() {
JMenuItem logoutMenuItem = new JMenuItem(); //登出按鈕
ResourceUtils.resButton(logoutMenuItem, Res.getString("menuitem.logout.no.status"));
logoutMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
logout(false);
}
});
JMenuItem logoutWithStatus = new JMenuItem(); //登出記錄理由按鈕
ResourceUtils.resButton(logoutWithStatus, Res.getString("menuitem.logout.with.status"));
logoutWithStatus.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
logout(true);
}
});
if ((Spark.isWindows() || Spark.isLinux()) || Spark.isMac() && !Default.getBoolean("DISABLE_EXIT")) {
connectMenu.add(logoutMenuItem);
connectMenu.add(logoutWithStatus);
connectMenu.addSeparator();
}
if (!Default.getBoolean("DISABLE_EXIT")) {
connectMenu.add(exitMenuItem);
}
JMenuItem updateMenu= new JMenuItem("", SparkRes.getImageIcon(SparkRes.DOWNLOAD_16x16));
ResourceUtils.resButton(updateMenu, Res.getString("menuitem.check.for.updates"));
updateMenu.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
checkForUpdates(true);
}
});
在PreferencesPanel的構造中載入了一個設定集合。只要找到這個集合,去掉相應的內容即可。根據spark的命名規則,感覺我們應該找類似PreferenceManager之類的東西、
就在
public PreferencesPanel(Iterator<Preference> preferences)
//點選Preference,發現與他同級的目錄下就有個PreferenceManager。果然如此。
//在PreferenceManager的構造方法中發現如下
PrivacyPreferences privacy = new PrivacyPreferences();
addPreference(privacy); //把這個直接註釋了。
privacy.load();
執行spark。
已經沒有了Privacy Plugin