@Override
  public boolean performOk() {
    if (!isInit) {
      return true;
    }

    if (btnCheckUpdateWithStartup.getSelection()) {
      preferenceStore.setValue(
          IPreferenceConstants.SYSTEM_AUTO_UPDATE,
          IPreferenceConstants.SYSTEM_CHECK_UPDATE_WITH_STARTUP);
    } else if (btnCheckUpdateWithMonthly.getSelection()) {
      preferenceStore.setValue(
          IPreferenceConstants.SYSTEM_AUTO_UPDATE,
          IPreferenceConstants.SYSTEM_CHECK_UPDATE_WITH_MONTHLY);
      preferenceStore.setValue(
          IPreferenceConstants.SYSTEM_CHECK_UPDATE_WITH_MONTHLY_DATE, selectDateSpi.getSelection());
    } else if (btnCheckUpdateWithWeekly.getSelection()) {
      preferenceStore.setValue(
          IPreferenceConstants.SYSTEM_AUTO_UPDATE,
          IPreferenceConstants.SYSTEM_CHECK_UPDATE_WITH_WEEKLY);
      preferenceStore.setValue(
          IPreferenceConstants.SYSTEM_CHECK_UPDATE_WITH_WEEKLY_DATE,
          cmbSelectWeek.getSelectionIndex() + 1);
    } else if (btnCheckUpdateWithNever.getSelection()) {
      preferenceStore.setValue(
          IPreferenceConstants.SYSTEM_AUTO_UPDATE,
          IPreferenceConstants.SYSTEM_CHECK_UPDATE_WITH_NEVER);
    }

    preferenceStore.setValue(
        IPreferenceConstants.SYSTEM_USER,
        txtSystemUser.getText() == null ? "" : txtSystemUser.getText());
    // 将用户保存到平台首选项中
    PlatformUI.getPreferenceStore()
        .setValue(
            IPreferenceConstants.SYSTEM_USER,
            preferenceStore.getString(IPreferenceConstants.SYSTEM_USER));
    if (btnLanguageWithEN.getSelection()) {
      preferenceStore.setValue(
          IPreferenceConstants.SYSTEM_LANGUAGE, IPreferenceConstants.SYSTEM_LANGUAGE_WITH_EN);
      CommonFunction.setSystemLanguage("en");
      if (initLang != IPreferenceConstants.SYSTEM_LANGUAGE_WITH_EN) {
        changeLocale("en");
        if (MessageDialog.openConfirm(
            getShell(),
            Messages.getString("preferencepage.SystemPreferencePage.msgTitle"),
            Messages.getString("preferencepage.SystemPreferencePage.msgInfo"))) {
          PlatformUI.getWorkbench().restart();
        }
      }
    } else if (btnLanguageWithZHCN.getSelection()) {
      preferenceStore.setValue(
          IPreferenceConstants.SYSTEM_LANGUAGE, IPreferenceConstants.SYSTEM_LANGUAGE_WITH_ZH_CN);
      CommonFunction.setSystemLanguage("zh");
      if (initLang != IPreferenceConstants.SYSTEM_LANGUAGE_WITH_ZH_CN) {
        changeLocale("zh");
        if (MessageDialog.openConfirm(
            getShell(),
            Messages.getString("preferencepage.SystemPreferencePage.msgTitle"),
            Messages.getString("preferencepage.SystemPreferencePage.msgInfo"))) {
          PlatformUI.getWorkbench().restart();
        }
      }
    }

    FontData[] fontData = editorFontSetting.getFontSetingFont();
    JFaceResources.getFontRegistry().put(Constants.XLIFF_EDITOR_TEXT_FONT, fontData);
    preferenceStore.setValue(IPreferenceConstants.XLIFF_EDITOR_FONT_NAME, fontData[0].getName());
    preferenceStore.setValue(IPreferenceConstants.XLIFF_EDITOR_FONT_SIZE, fontData[0].getHeight());

    fontData = matchViewFontSetting.getFontSetingFont();
    JFaceResources.getFontRegistry().put(Constants.MATCH_VIEWER_TEXT_FONT, fontData);
    preferenceStore.setValue(IPreferenceConstants.MATCH_VIEW_FONT_NAME, fontData[0].getName());
    preferenceStore.setValue(IPreferenceConstants.MATCH_VIEW_FONT_SIZE, fontData[0].getHeight());

    return true;
  }
  /**
   * 对控件设置值
   *
   * @param blnIsApplyDefault ;
   */
  private void setInitValues(boolean blnIsApplyDefault) {
    int intAutoUpdate;
    int intLanguage;
    String strSystemUser;
    String strEditorFontName;
    int intEdutorFontSize;
    String strMatchViewFontName;
    int intMatchViewFontSize;
    if (blnIsApplyDefault) {
      intAutoUpdate = preferenceStore.getDefaultInt(IPreferenceConstants.SYSTEM_AUTO_UPDATE);
      intLanguage = preferenceStore.getDefaultInt(IPreferenceConstants.SYSTEM_LANGUAGE);
      strSystemUser = preferenceStore.getDefaultString(IPreferenceConstants.SYSTEM_USER);
      strEditorFontName =
          preferenceStore.getDefaultString(IPreferenceConstants.XLIFF_EDITOR_FONT_NAME);
      intEdutorFontSize =
          preferenceStore.getDefaultInt(IPreferenceConstants.XLIFF_EDITOR_FONT_SIZE);
      strMatchViewFontName =
          preferenceStore.getDefaultString(IPreferenceConstants.MATCH_VIEW_FONT_NAME);
      intMatchViewFontSize =
          preferenceStore.getDefaultInt(IPreferenceConstants.MATCH_VIEW_FONT_SIZE);
    } else {
      intAutoUpdate = preferenceStore.getInt(IPreferenceConstants.SYSTEM_AUTO_UPDATE);
      intLanguage = preferenceStore.getInt(IPreferenceConstants.SYSTEM_LANGUAGE);
      initLang = intLanguage;
      strSystemUser = preferenceStore.getString(IPreferenceConstants.SYSTEM_USER);
      strEditorFontName = preferenceStore.getString(IPreferenceConstants.XLIFF_EDITOR_FONT_NAME);
      intEdutorFontSize = preferenceStore.getInt(IPreferenceConstants.XLIFF_EDITOR_FONT_SIZE);
      strMatchViewFontName = preferenceStore.getString(IPreferenceConstants.MATCH_VIEW_FONT_NAME);
      intMatchViewFontSize = preferenceStore.getInt(IPreferenceConstants.MATCH_VIEW_FONT_SIZE);
    }
    if (intAutoUpdate == IPreferenceConstants.SYSTEM_CHECK_UPDATE_WITH_STARTUP) {
      btnCheckUpdateWithStartup.setSelection(true);
      btnCheckUpdateWithMonthly.setSelection(false);
      selectDateSpi.setEnabled(false);
      selectDateSpi.setSelection(1);
      btnCheckUpdateWithWeekly.setSelection(false);
      cmbSelectWeek.setEnabled(false);
      cmbSelectWeek.select(0);
      btnCheckUpdateWithNever.setSelection(false);
    } else if (intAutoUpdate == IPreferenceConstants.SYSTEM_CHECK_UPDATE_WITH_MONTHLY) {
      btnCheckUpdateWithStartup.setSelection(false);
      btnCheckUpdateWithMonthly.setSelection(true);
      btnCheckUpdateWithWeekly.setSelection(false);
      cmbSelectWeek.setEnabled(false);
      cmbSelectWeek.select(0);
      btnCheckUpdateWithNever.setSelection(false);
      int selDate;
      if (blnIsApplyDefault) {
        selDate =
            preferenceStore.getDefaultInt(
                IPreferenceConstants.SYSTEM_CHECK_UPDATE_WITH_MONTHLY_DATE);
      } else {
        selDate =
            preferenceStore.getInt(IPreferenceConstants.SYSTEM_CHECK_UPDATE_WITH_MONTHLY_DATE);
      }
      selectDateSpi.setEnabled(true);
      selectDateSpi.setSelection(selDate);
    } else if (intAutoUpdate == IPreferenceConstants.SYSTEM_CHECK_UPDATE_WITH_WEEKLY) {
      btnCheckUpdateWithStartup.setSelection(false);
      btnCheckUpdateWithMonthly.setSelection(false);
      selectDateSpi.setEnabled(false);
      selectDateSpi.setSelection(1);
      btnCheckUpdateWithWeekly.setSelection(true);
      btnCheckUpdateWithNever.setSelection(false);
      int selWeek;
      if (blnIsApplyDefault) {
        selWeek =
            preferenceStore.getDefaultInt(
                IPreferenceConstants.SYSTEM_CHECK_UPDATE_WITH_WEEKLY_DATE);
      } else {
        selWeek = preferenceStore.getInt(IPreferenceConstants.SYSTEM_CHECK_UPDATE_WITH_WEEKLY_DATE);
      }
      cmbSelectWeek.setEnabled(true);
      // ArrayList<String> list = new ArrayList<String>(Arrays.asList(arrWeek));
      cmbSelectWeek.select(selWeek - 1);
    } else if (intAutoUpdate == IPreferenceConstants.SYSTEM_CHECK_UPDATE_WITH_NEVER) {
      btnCheckUpdateWithStartup.setSelection(false);
      btnCheckUpdateWithMonthly.setSelection(false);
      selectDateSpi.setEnabled(false);
      btnCheckUpdateWithWeekly.setSelection(false);
      cmbSelectWeek.setEnabled(false);
      cmbSelectWeek.select(0);
      btnCheckUpdateWithNever.setSelection(true);
    }

    if (intLanguage == IPreferenceConstants.SYSTEM_LANGUAGE_WITH_EN) {
      btnLanguageWithEN.setSelection(true);
      btnLanguageWithZHCN.setSelection(false);
    } else if (intLanguage == IPreferenceConstants.SYSTEM_LANGUAGE_WITH_ZH_CN) {
      btnLanguageWithEN.setSelection(false);
      btnLanguageWithZHCN.setSelection(true);
    }
    txtSystemUser.setText(strSystemUser);
    editorFontSetting.initFont(strEditorFontName, intEdutorFontSize);
    matchViewFontSetting.initFont(strMatchViewFontName, intMatchViewFontSize);
  }
  @Override
  protected Control createContents(Composite parent) {
    isInit = true;
    Composite tparent = new Composite(parent, SWT.NONE);
    tparent.setLayout(new GridLayout());
    tparent.setLayoutData(new GridData(GridData.FILL_BOTH));

    Group groupCommon = new Group(tparent, SWT.NONE);
    groupCommon.setLayout(new GridLayout());
    groupCommon.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    groupCommon.setText(Messages.getString("preferencepage.SystemPreferencePage.groupCommon"));

    HsImageLabel imageLabel1 =
        new HsImageLabel(
            Messages.getString("preferencepage.SystemPreferencePage.imageLabel1"),
            Activator.getImageDescriptor(ImageConstant.PREFERENCE_SYS_UPDATE));
    Composite cmpCommon = imageLabel1.createControl(groupCommon);
    cmpCommon.setLayout(new GridLayout());
    cmpCommon.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

    btnCheckUpdateWithStartup = new Button(cmpCommon, SWT.RADIO);
    btnCheckUpdateWithStartup.setText(
        Messages.getString("preferencepage.SystemPreferencePage.btnCheckUpdateWithStartup"));
    GridDataFactory.fillDefaults().applyTo(btnCheckUpdateWithStartup);
    btnCheckUpdateWithStartup.addSelectionListener(
        new SelectionListener() {

          public void widgetSelected(SelectionEvent e) {
            if (btnCheckUpdateWithStartup.getSelection()) {
              btnCheckUpdateWithMonthly.setSelection(false);
              btnCheckUpdateWithWeekly.setSelection(false);
              btnCheckUpdateWithNever.setSelection(false);
              selectDateSpi.setEnabled(false);
              cmbSelectWeek.setEnabled(false);
            }
          }

          public void widgetDefaultSelected(SelectionEvent e) {}
        });

    cmpMonthly = new Composite(cmpCommon, SWT.None);
    GridLayoutFactory.swtDefaults()
        .numColumns(3)
        .equalWidth(false)
        .margins(0, 0)
        .spacing(0, 0)
        .applyTo(cmpMonthly);
    cmpMonthly.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    btnCheckUpdateWithMonthly = new Button(cmpMonthly, SWT.RADIO);
    btnCheckUpdateWithMonthly.setText(
        Messages.getString("preferencepage.SystemPreferencePage.btnCheckUpdateWithMonthly1"));
    GridData spinnaData = new GridData();
    spinnaData.widthHint = 20;
    selectDateSpi = new Spinner(cmpMonthly, SWT.BORDER);
    selectDateSpi.setMinimum(1);
    selectDateSpi.setMaximum(31);
    selectDateSpi.setTextLimit(2);
    selectDateSpi.setEnabled(false);
    selectDateSpi.setLayoutData(spinnaData);
    selectDateSpi.addModifyListener(
        new ModifyListener() {

          public void modifyText(ModifyEvent e) {
            String text = selectDateSpi.getText();
            if (text != null && !text.trim().equals("")) {
              if (Integer.parseInt(text.trim()) > 31) {
                selectDateSpi.setSelection(31);
              } else if (Integer.parseInt(text.trim()) < 1) {
                selectDateSpi.setSelection(1);
              }
            }
          }
        });
    new Label(cmpMonthly, SWT.None)
        .setText(
            Messages.getString("preferencepage.SystemPreferencePage.btnCheckUpdateWithMonthly2"));
    btnCheckUpdateWithMonthly.addSelectionListener(
        new SelectionListener() {

          public void widgetSelected(SelectionEvent e) {
            selectDateSpi.setEnabled(btnCheckUpdateWithMonthly.getSelection());
            if (btnCheckUpdateWithMonthly.getSelection()) {
              btnCheckUpdateWithStartup.setSelection(false);
              btnCheckUpdateWithWeekly.setSelection(false);
              btnCheckUpdateWithNever.setSelection(false);
              cmbSelectWeek.setEnabled(false);
            }
          }

          public void widgetDefaultSelected(SelectionEvent e) {}
        });

    cmpWeekly = new Composite(cmpCommon, SWT.None);
    GridLayoutFactory.swtDefaults()
        .numColumns(3)
        .equalWidth(false)
        .margins(0, 0)
        .spacing(0, 0)
        .applyTo(cmpWeekly);
    cmpWeekly.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    btnCheckUpdateWithWeekly = new Button(cmpWeekly, SWT.RADIO);
    btnCheckUpdateWithWeekly.setText(
        Messages.getString("preferencepage.SystemPreferencePage.btnCheckUpdateWithWeekly1"));
    cmbSelectWeek = new Combo(cmpWeekly, SWT.READ_ONLY);
    cmbSelectWeek.setItems(arrWeek);
    cmbSelectWeek.setEnabled(false);
    cmbSelectWeek.select(0);
    GridDataFactory.swtDefaults().applyTo(cmbSelectWeek);
    new Label(cmpWeekly, SWT.NONE)
        .setText(
            Messages.getString("preferencepage.SystemPreferencePage.btnCheckUpdateWithWeekly2"));
    btnCheckUpdateWithWeekly.addSelectionListener(
        new SelectionListener() {

          public void widgetSelected(SelectionEvent e) {
            cmbSelectWeek.setEnabled(btnCheckUpdateWithWeekly.getSelection());
            if (btnCheckUpdateWithWeekly.getSelection()) {
              btnCheckUpdateWithStartup.setSelection(false);
              btnCheckUpdateWithMonthly.setSelection(false);
              btnCheckUpdateWithNever.setSelection(false);
              selectDateSpi.setEnabled(false);
            }
          }

          public void widgetDefaultSelected(SelectionEvent e) {}
        });

    btnCheckUpdateWithNever = new Button(cmpCommon, SWT.RADIO);
    btnCheckUpdateWithNever.setText(
        Messages.getString("preferencepage.SystemPreferencePage.btnCheckUpdateWithNever"));
    btnCheckUpdateWithNever.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    GridDataFactory.fillDefaults().applyTo(btnCheckUpdateWithNever);
    btnCheckUpdateWithNever.addSelectionListener(
        new SelectionListener() {

          public void widgetSelected(SelectionEvent e) {
            if (btnCheckUpdateWithNever.getSelection()) {
              btnCheckUpdateWithMonthly.setSelection(false);
              btnCheckUpdateWithWeekly.setSelection(false);
              btnCheckUpdateWithStartup.setSelection(false);
              selectDateSpi.setEnabled(false);
              cmbSelectWeek.setEnabled(false);
            }
          }

          public void widgetDefaultSelected(SelectionEvent e) {}
        });

    Group groupLanguage = new Group(tparent, SWT.NONE);
    groupLanguage.setLayout(new GridLayout());
    groupLanguage.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    groupLanguage.setText(Messages.getString("preferencepage.SystemPreferencePage.groupLanguage"));

    HsImageLabel imageLabel2 =
        new HsImageLabel(
            Messages.getString("preferencepage.SystemPreferencePage.imageLabel3"),
            Activator.getImageDescriptor(ImageConstant.PREFERENCE_SYS_LANGUAGE));
    Composite cmpLang = imageLabel2.createControl(groupLanguage);
    cmpLang.setLayout(new GridLayout());
    cmpLang.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

    btnLanguageWithEN = new Button(cmpLang, SWT.RADIO);
    btnLanguageWithEN.setText(
        Messages.getString("preferencepage.SystemPreferencePage.btnLanguageWithEN"));
    btnLanguageWithEN.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

    btnLanguageWithZHCN = new Button(cmpLang, SWT.RADIO);
    btnLanguageWithZHCN.setText(
        Messages.getString("preferencepage.SystemPreferencePage.btnLanguageWithZHCN"));
    btnLanguageWithZHCN.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

    Group groupFont = new Group(tparent, SWT.NONE);
    groupFont.setLayout(new GridLayout());
    groupFont.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    groupFont.setText(Messages.getString("preferencepage.SystemPreferencePage.groupFont"));
    HsImageLabel imageLabel4 =
        new HsImageLabel(
            Messages.getString("preferencepage.SystemPreferencePage.groupFont.desc"),
            Activator.getImageDescriptor("images/preference/system/font.png"));
    Composite cmpFont = imageLabel4.createControl(groupFont);
    GridLayout cmpFontGl = new GridLayout(2, true);
    cmpFontGl.marginLeft = 0;
    cmpFontGl.marginRight = 0;
    cmpFontGl.marginTop = 0;
    cmpFontGl.marginBottom = 0;
    cmpFontGl.marginWidth = 0;
    cmpFontGl.marginHeight = 0;
    cmpFont.setLayout(cmpFontGl);
    GridData cmpFontGd = new GridData(SWT.FILL, SWT.FILL, true, true);
    cmpFont.setLayoutData(cmpFontGd);

    editorFontSetting =
        new HSFontSettingComposite(
            cmpFont, SWT.NONE, Messages.getString("preferencepage.fontsetting.editor.title"));
    GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
    editorFontSetting.setLayoutData(gd);
    matchViewFontSetting =
        new HSFontSettingComposite(
            cmpFont, SWT.NONE, Messages.getString("preferencepage.fontsetting.matchView.title"));
    matchViewFontSetting.setLayoutData(gd);

    Group groupSystemUser = new Group(tparent, SWT.NONE);
    groupSystemUser.setLayout(new GridLayout());
    groupSystemUser.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    groupSystemUser.setText(
        Messages.getString("preferencepage.SystemPreferencePage.groupSystemUser"));

    HsImageLabel imageLabel3 =
        new HsImageLabel(
            Messages.getString("preferencepage.SystemPreferencePage.imageLabel4"),
            Activator.getImageDescriptor(ImageConstant.PREFERENCE_SYS_USER));
    Composite cmpUser = imageLabel3.createControl(groupSystemUser);
    cmpUser.setLayout(new GridLayout(2, false));
    cmpUser.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

    new Label(cmpUser, SWT.NONE)
        .setText(Messages.getString("preferencepage.SystemPreferencePage.lblUser"));

    txtSystemUser = new Text(cmpUser, SWT.BORDER);
    txtSystemUser.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

    imageLabel1.computeSize();
    imageLabel2.computeSize();
    imageLabel3.computeSize();
    imageLabel4.computeSize();
    setInitValues(false);
    return parent;
  }