home *** CD-ROM | disk | FTP | other *** search
/ Tools / WinSN5.0Ver.iso / NETSCAP.50 / WIN1998.ZIP / ns / cmd / xfe / src / PrefsDialog.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-04-08  |  28.5 KB  |  1,183 lines

  1. /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
  2.  *
  3.  * The contents of this file are subject to the Netscape Public License
  4.  * Version 1.0 (the "NPL"); you may not use this file except in
  5.  * compliance with the NPL.  You may obtain a copy of the NPL at
  6.  * http://www.mozilla.org/NPL/
  7.  *
  8.  * Software distributed under the NPL is distributed on an "AS IS" basis,
  9.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
  10.  * for the specific language governing rights and limitations under the
  11.  * NPL.
  12.  *
  13.  * The Initial Developer of this code under the NPL is Netscape
  14.  * Communications Corporation.  Portions created by Netscape are
  15.  * Copyright (C) 1998 Netscape Communications Corporation.  All Rights
  16.  * Reserved.
  17.  */
  18. /* */
  19. /*
  20.    PrefsDialog.h -- class definitions for FE preferences dialog windows
  21.    Created: Linda Wei <lwei@netscape.com>, 17-Sep-96.
  22.  */
  23.  
  24. // class XFE_PrefsDialog 
  25. //       . class definition for the preferences dialog.
  26. //       . containing instances of XFE_PrefsPage
  27. // 
  28. // class XFE_PrefsPage
  29. //       . abstract base class of all preferences pages
  30. // 
  31.  
  32.  
  33. #ifndef _xfe_prefsdialog_h
  34. #define _xfe_prefsdialog_h
  35.  
  36. #include "outline.h"
  37. #include "Dialog.h"
  38. #include "xeditor.h"
  39. #include "Outliner.h"
  40. #include "Outlinable.h"
  41. #include "PrefsData.h"
  42. #ifdef MOZ_LDAP
  43.  #include "dirprefs.h"
  44. #endif
  45.  
  46. #define PREFS_SET_GLOBALPREF_TEXT(SLOT1,SLOT2) \
  47. { \
  48.     char *s = 0; \
  49.     if (fe_globalPrefs.SLOT1) XP_FREE(fe_globalPrefs.SLOT1); \
  50.     s = fe_GetTextField(fep->SLOT2); \
  51.     fe_globalPrefs.SLOT1 = s ? XP_STRDUP(s) : XP_STRDUP(""); \
  52.     if (s) XtFree(s); \
  53. }
  54.  
  55. #define PREFS_SET_GLOBALPREF_BOOLEAN(SLOT1,SLOT2) \
  56. { \
  57.     Boolean    b; \
  58.     XtVaGetValues(fep->SLOT1, XmNset, &b, 0); \
  59.     fe_globalPrefs.SLOT2 = b; \
  60. }
  61.  
  62. #define PREFS_CHECK_FILE(W,DESC,MSG,N) \
  63. { \
  64.     char *text = 0;    \
  65.     char *orig_text = 0;    \
  66.     orig_text = fe_GetTextField (W); \
  67.     text = fe_StringTrim (orig_text); \
  68.     if (!text || !*text || stat (text, &st)) { \
  69.         PR_snprintf (MSG, 200, \
  70.                      XP_GetString(XFE_FILE_DOES_NOT_EXIST),    \
  71.                      DESC, (text ? text : ""));    \
  72.         MSG += strlen (MSG); \
  73.     } \
  74.     if (orig_text) XtFree(orig_text); \
  75. }
  76.  
  77. #define PREFS_CHECK_DIR(W,DESC,MSG,N) \
  78. { \
  79.     char *text = 0;    \
  80.     char *orig_text = 0;    \
  81.     orig_text = fe_GetTextField (W); \
  82.     text = fe_StringTrim (orig_text); \
  83.     if (!text || !*text) { \
  84.         PR_snprintf (MSG, 200, \
  85.                      XP_GetString(XFE_EMPTY_DIR), \
  86.                      DESC);    \
  87.         MSG += strlen (MSG); \
  88.     } \
  89.     else if (stat (text, &st) || (!S_ISDIR(st.st_mode))) { \
  90.         PR_snprintf (MSG, 200, \
  91.                      XP_GetString(XFE_DIR_DOES_NOT_EXIST),    \
  92.                      DESC, text);    \
  93.         MSG += strlen (MSG); \
  94.     } \
  95.     if (orig_text) XtFree(orig_text); \
  96. }
  97.  
  98.  
  99. #define PREFS_CHECK_HOST_1(TEXT,DESC,MSG,N)    \
  100. { \
  101.     int d; char c; \
  102.     PRHostEnt hpbuf; \
  103.     char dbbuf[PR_NETDB_BUF_SIZE]; \
  104.     if (TEXT && 4 == sscanf (TEXT, " %d.%d.%d.%d %c", \
  105.                              &d, &d, &d, &d, &c)) \
  106.         /* IP addresses are ok */ ;     \
  107.     else if (!TEXT || !*TEXT ||    \
  108.              (PR_GetHostByName(TEXT, dbbuf, sizeof(dbbuf), &hpbuf)) == PR_FAILURE) { \
  109.         PR_snprintf (MSG, 200,\
  110.                      XP_GetString(XFE_HOST_IS_UNKNOWN), \
  111.                      DESC, (TEXT ? TEXT : "")); \
  112.         MSG += strlen (MSG); \
  113.     } \
  114. }
  115.  
  116.  
  117. #define PREFS_CHECK_HOST(W,DESC,MSG,N) \
  118. { \
  119.     char *text = 0; \
  120.     char *orig_text = 0;    \
  121.     orig_text = fe_GetTextField (W); \
  122.     text = fe_StringTrim (orig_text); \
  123.     PREFS_CHECK_HOST_1 (text, DESC, MSG, N); \
  124.     if (orig_text) XtFree(orig_text); \
  125. }
  126.  
  127. #define PREFS_CHECK_PROXY(W1,W2,DESC,PORT_REQUIRED,MSG,N) \
  128. { \
  129.     char *orig_text1 = 0;    \
  130.     char *orig_text2 = 0;    \
  131.     char *text = 0;\
  132.     orig_text1 = fe_GetTextField (W1); \
  133.     text = fe_StringTrim (orig_text1); \
  134.     if (text && *text) { \
  135.         PREFS_CHECK_HOST_1 (text, DESC, MSG, N); \
  136.         text = 0; \
  137.         orig_text2 =  fe_GetTextField(W2); \
  138.         text = fe_StringTrim (orig_text2); \
  139.         if ((!text || !*text) && PORT_REQUIRED) { \
  140.             PR_snprintf (MSG, 200, \
  141.                          XP_GetString(XFE_NO_PORT_NUMBER), DESC); \
  142.             MSG += strlen (MSG); \
  143.         } \
  144.         if (orig_text2) XtFree(orig_text2); \
  145.     } \
  146.     if (orig_text1) XtFree(orig_text1); \
  147. }
  148.  
  149. // Top level categories
  150.  
  151. #define CAT_APPEARANCE           "Appearance"
  152. #define CAT_BROWSER              "Browser"
  153. #define CAT_MAILNEWS             "Mail & Groups"
  154. #define CAT_EDITOR               "Editor"
  155. #ifdef PREFS_UNSUPPORTED
  156. #define CAT_OFFLINE              "Offline"
  157. #endif /* PREFS_UNSUPPORTED */
  158. #define CAT_ADVANCED             "Advanced"
  159.  
  160. class XFE_PrefsDialog;
  161. class XFE_PrefsPage;
  162.  
  163. struct PrefsCategory {
  164.     char                  *name;
  165.     char                  *categoryName;
  166.     char                  *categoryDesc;
  167.     Boolean                leaf;
  168.     struct PrefsCategory  *parent;
  169.     struct PrefsCategory  *children;
  170.     int                    numChildren;
  171.     Boolean                open;
  172.     XFE_PrefsPage         *page;
  173. };
  174.  
  175. // ************************* XFE_PrefsDialog  *************************
  176.  
  177. class XFE_PrefsDialog : public XFE_Dialog
  178. {
  179. public:
  180.  
  181.     // Constructors, Destructors
  182.  
  183.     XFE_PrefsDialog(Widget     parent,    
  184.                     char      *name,  
  185.                     MWContext *context,
  186.                     Boolean    modal = TRUE);
  187.  
  188.     virtual ~XFE_PrefsDialog();
  189.  
  190.     MWContext *getContext();            // Getting MWContext
  191.     int getVisibleCategoryCount();      
  192.     PrefsCategory *getCategoryByIndex(int);
  193.     PrefsCategory *getCategoryByName(const char *);
  194.     PrefsCategory *getCurrentCategory();
  195.     void refreshCategories();
  196.     Boolean isCurrentCategory(PrefsCategory *);
  197.     Widget getOutline();
  198.     Widget getPrefsParent();
  199.     Widget getPageForm();
  200.     Widget getDialogChrome();
  201.  
  202.     virtual void show();                // pop up dialog
  203.     void setContext(MWContext *);       // Setting MWContext (for now)            
  204.     void calcVisibleCategoryCount();    // Calculate category count
  205.     void setCurrentCategory(PrefsCategory *);
  206.     void openCategory(const char *);    // open a category
  207.     void closeCategory(const char *);   // close a category
  208.     void setDoInitInSetPage(Boolean);   // set the flag
  209.     void saveChanges();                 // save all the changes
  210.     Dimension calculateWidth();         // calculate the dialog width 
  211.     Dimension calculateHeight();        // calculate the dialog height
  212.  
  213.     // Callbacks - main
  214.  
  215.     static void prefsMainCb_ok(Widget, XtPointer, XtPointer);
  216.     static void prefsMainCb_cancel(Widget, XtPointer, XtPointer);
  217.     static void prefsMainCb_help(Widget, XtPointer, XtPointer);
  218.     static void prefsMainCb_destroy(Widget, XtPointer, XtPointer);
  219.  
  220.     // Callbacks - category outline
  221.  
  222.     static Boolean categoryDataFunc(Widget, void*, int, fe_OutlineDesc*, int);
  223.     static void categoryClickFunc(Widget, void*, int, int, const char*,
  224.                                   int, int, Boolean, Boolean, int);
  225.     static void categoryIconFunc(Widget, void*, int, int);
  226.  
  227. private:
  228.  
  229.     void createRegions();
  230.     void initCategories();
  231.     void deleteCategories();
  232.     void newPage(XFE_PrefsPage *&, int);
  233.  
  234.     Widget                   m_wPageLabel;
  235.     Widget                   m_wPageTitle;
  236.     Widget                   m_wPageForm;
  237.     Widget                   m_wOutline;
  238.     MWContext               *m_context;
  239.     int                      m_numPages;
  240.     XFE_PrefsPage          **m_pages;
  241.     char                    *m_columnWidths;
  242.     fe_OutlineHeaderDesc    *m_outlineHeaders;
  243.     int                      m_numCategories;
  244.     PrefsCategory           *m_categories;
  245.     int                      m_visibleCategoryCount;
  246.     PrefsCategory           *m_currentCategory;
  247.     Boolean                  m_initPageLabel;
  248. };
  249.  
  250. // ************************* XFE_PrefsPage  *************************
  251.  
  252. class XFE_PrefsPage
  253. {
  254. public:
  255.  
  256.     // Constructors, Destructors
  257.  
  258.     XFE_PrefsPage(XFE_PrefsDialog  *dialog);
  259.     virtual ~XFE_PrefsPage();
  260.  
  261.     // Manipulators
  262.  
  263.     virtual void create() = 0;
  264.     virtual void init() = 0;
  265.     virtual void map();
  266.     virtual void unmap();
  267.     virtual Boolean verify();
  268.     virtual void install() = 0;
  269.     virtual void save() = 0;
  270.  
  271.     void setCreated(Boolean);
  272.     void setInitialized(Boolean);
  273.     void setDoInitInMap(Boolean);
  274.     void setChanged(Boolean);
  275.  
  276.     // Gets
  277.  
  278.     Boolean isCreated();
  279.     Boolean isInitialized();
  280.     Boolean doInitInMap();
  281.     Boolean isChanged();
  282.     MWContext *getContext();
  283.     XFE_PrefsDialog *getPrefsDialog();
  284.     Dimension getWidth();
  285.     Dimension getHeight();
  286.  
  287. protected:
  288.  
  289.     // Data
  290.  
  291.     MWContext          *m_context;
  292.     XFE_PrefsDialog    *m_prefsDialog;
  293.     Widget              m_wPageForm;   /* in the prefs dialog */
  294.     Widget              m_wPage;       /* top level form in this page */
  295.     Boolean             m_created;
  296.     Boolean             m_initialized;
  297.     Boolean             m_doInitInMap;
  298.     Boolean             m_changed;
  299. };
  300.  
  301. // ************************* XFE_PrefsPageAppearance  *************************
  302.  
  303. class XFE_PrefsPageGeneralAppearance : public XFE_PrefsPage
  304. {
  305. public:
  306.  
  307.     // Constructors, Destructors
  308.  
  309.     XFE_PrefsPageGeneralAppearance(XFE_PrefsDialog  *dialog);
  310.     virtual ~XFE_PrefsPageGeneralAppearance();
  311.  
  312.     // Manipulators
  313.  
  314.     virtual void create();
  315.     virtual void init();
  316.     virtual void install();
  317.     virtual void save();
  318.  
  319.     // Gets
  320.  
  321.     PrefsDataGeneralAppearance *getData();
  322.  
  323.     // Callbacks - page GeneralAppearance
  324.  
  325.     static void cb_setToolbarAttr(Widget, XtPointer, XtPointer);
  326.  
  327. private:    
  328.  
  329.     // Data
  330.  
  331.     PrefsDataGeneralAppearance        *m_prefsDataGeneralAppearance;
  332.     XP_Bool                            m_toolbar_needs_updating;
  333. };
  334.  
  335. // ************************* XFE_PrefsPageGeneralFonts  *************************
  336.  
  337. class XFE_PrefsPageGeneralFonts : public XFE_PrefsPage
  338. {
  339. public:
  340.  
  341.     // Constructors, Destructors
  342.  
  343.     XFE_PrefsPageGeneralFonts(XFE_PrefsDialog  *dialog);
  344.     virtual ~XFE_PrefsPageGeneralFonts();
  345.  
  346.     // Manipulators
  347.  
  348.     virtual void create();
  349.     virtual void relayout(PrefsDataGeneralFonts *fep);
  350.     virtual void init();
  351.     virtual void install();
  352.     virtual void save();
  353.  
  354.     // Gets
  355.  
  356.     PrefsDataGeneralFonts *getData();
  357.  
  358.     // Callbacks - page General/Fonts
  359.  
  360.     static void cb_charSet(Widget, XtPointer, XtPointer);
  361.     static void cb_toggleUseFont(Widget, XtPointer, XtPointer);
  362.     static void cb_allowScaling(Widget, XtPointer, XtPointer);
  363.  
  364. private:    
  365.  
  366.     // Data
  367.  
  368.     PrefsDataGeneralFonts        *m_prefsDataGeneralFonts;
  369. };
  370.  
  371. // ************************* XFE_PrefsPageGeneralColors  *************************
  372.  
  373. class XFE_PrefsPageGeneralColors : public XFE_PrefsPage
  374. {
  375. public:
  376.  
  377.     // Constructors, Destructors
  378.  
  379.     XFE_PrefsPageGeneralColors(XFE_PrefsDialog  *dialog);
  380.     virtual ~XFE_PrefsPageGeneralColors();
  381.  
  382.     // Manipulators
  383.  
  384.     virtual void create();
  385.     virtual void init();
  386.     virtual void install();
  387.     virtual void save();
  388.  
  389.     // Gets
  390.  
  391.     PrefsDataGeneralColors *getData();
  392.  
  393.     // Callbacks - page General/Colors
  394.  
  395.     static void cb_activateColor(Widget, XtPointer, XtPointer);
  396.     static void cb_defaultColor(Widget, XtPointer, XtPointer);
  397.  
  398. private:    
  399.  
  400.     // Data
  401.  
  402.     PrefsDataGeneralColors   *m_prefsDataGeneralColors;
  403.     XP_Bool                   m_underlinelinks_changed;
  404.     XP_Bool                   m_colors_changed;
  405. };
  406.  
  407. // ************************* XFE_PrefsPageGeneralAdvanced  *************************
  408.  
  409. class XFE_PrefsPageGeneralAdvanced : public XFE_PrefsPage
  410. {
  411. public:
  412.  
  413.     // Constructors, Destructors
  414.  
  415.     XFE_PrefsPageGeneralAdvanced(XFE_PrefsDialog  *dialog);
  416.     virtual ~XFE_PrefsPageGeneralAdvanced();
  417.  
  418.     // Manipulators
  419.  
  420.     virtual void create();
  421.     virtual void init();
  422.     virtual void install();
  423.     virtual void save();
  424.  
  425.     // Gets
  426.  
  427.     PrefsDataGeneralAdvanced *getData();
  428.  
  429.     // Callbacks - page General/Advanced
  430.  
  431.     static void cb_toggleCookieState(Widget, XtPointer, XtPointer);
  432.  
  433. private:    
  434.  
  435.     // Data
  436.  
  437.     PrefsDataGeneralAdvanced        *m_prefsDataGeneralAdvanced;
  438.  
  439.     XP_Bool    m_toolbar_needs_updating;
  440. };
  441.  
  442. // ************************* XFE_PrefsPageGeneralAppl  *************************
  443.  
  444. class XFE_PrefsPageGeneralAppl : public XFE_PrefsPage
  445. {
  446. public:
  447.  
  448.     // Constructors, Destructors
  449.  
  450.     XFE_PrefsPageGeneralAppl(XFE_PrefsDialog  *dialog);
  451.     virtual ~XFE_PrefsPageGeneralAppl();
  452.  
  453.     // Manipulators
  454.  
  455.     virtual void create();
  456.     virtual void init();
  457.     virtual void install();
  458.     virtual void save();
  459.     virtual void unmap();
  460.     void setModified(Boolean);
  461.  
  462.     // Gets
  463.  
  464.     PrefsDataGeneralAppl *getData();
  465.  
  466.     // Callbacks - page General/Applications
  467.  
  468.     static void cb_new(Widget, XtPointer, XtPointer);
  469.     static void cb_edit(Widget, XtPointer, XtPointer);
  470.     static void cb_delete(Widget, XtPointer, XtPointer);
  471.     static void cb_browse(Widget, XtPointer, XtPointer);
  472.  
  473. private:    
  474.  
  475.     // Data
  476.  
  477.     PrefsDataGeneralAppl        *m_prefsDataGeneralAppl;
  478. };
  479.  
  480. // ************************* XFE_PrefsPageGeneralCache  *************************
  481.  
  482. class XFE_PrefsPageGeneralCache : public XFE_PrefsPage
  483. {
  484. public:
  485.  
  486.     // Constructors, Destructors
  487.  
  488.     XFE_PrefsPageGeneralCache(XFE_PrefsDialog  *dialog);
  489.     virtual ~XFE_PrefsPageGeneralCache();
  490.  
  491.     // Manipulators
  492.  
  493.     virtual void create();
  494.     virtual void init();
  495.     virtual void install();
  496.     virtual void save();
  497.  
  498.     // Gets
  499.  
  500.     PrefsDataGeneralCache *getData();
  501.  
  502.     // Callbacks - page General/Cache
  503.  
  504.     static void cb_browse(Widget, XtPointer, XtPointer);
  505.     static void cb_clearDisk(Widget, XtPointer, XtPointer);
  506.     static void cb_clearMem(Widget, XtPointer, XtPointer);
  507.  
  508. private:    
  509.  
  510.     // Data
  511.  
  512.     PrefsDataGeneralCache        *m_prefsDataGeneralCache;
  513. };
  514.  
  515. // ************************* XFE_PrefsPageGeneralProxies  *************************
  516.  
  517. class XFE_PrefsPageGeneralProxies : public XFE_PrefsPage
  518. {
  519. public:
  520.  
  521.     // Constructors, Destructors
  522.  
  523.     XFE_PrefsPageGeneralProxies(XFE_PrefsDialog  *dialog);
  524.     virtual ~XFE_PrefsPageGeneralProxies();
  525.  
  526.     // Manipulators
  527.  
  528.     virtual void create();
  529.     virtual void init();
  530.     virtual void install();
  531.     virtual void save();
  532.  
  533.     // Gets
  534.  
  535.     PrefsDataGeneralProxies *getData();
  536.  
  537.     // Callbacks - page General/Proxies
  538.  
  539.     static void cb_reloadProxies(Widget, XtPointer, XtPointer);
  540.     static void cb_setProxies(Widget, XtPointer, XtPointer);
  541.     static void cb_viewProxies(Widget, XtPointer, XtPointer);
  542.  
  543. private:    
  544.  
  545.     // Data
  546.  
  547.     PrefsDataGeneralProxies        *m_prefsDataGeneralProxies;
  548. };
  549.  
  550. // ************************* XFE_PrefsPageBrowser  *************************
  551.  
  552. class XFE_PrefsPageBrowser : public XFE_PrefsPage
  553. {
  554. public:
  555.  
  556.     // Constructors, Destructors
  557.  
  558.     XFE_PrefsPageBrowser(XFE_PrefsDialog  *dialog);
  559.     virtual ~XFE_PrefsPageBrowser();
  560.  
  561.     // Manipulators
  562.  
  563.     virtual void create();
  564.     virtual void init();
  565.     virtual void install();
  566.     virtual void save();
  567.  
  568.     // Gets
  569.  
  570.     PrefsDataBrowser *getData();
  571.  
  572.     // Callbacks - page Browser
  573.  
  574.     static void cb_browse(Widget, XtPointer, XtPointer);
  575.     static void cb_setStartupPage(Widget, XtPointer, XtPointer);
  576.     static void cb_expireNow(Widget, XtPointer, XtPointer);
  577.     static void cb_useCurrent(Widget, XtPointer, XtPointer);
  578.  
  579. private:    
  580.  
  581.     // Data
  582.  
  583.     PrefsDataBrowser  *m_prefsDataBrowser;
  584.     XP_Bool            m_home_changed;
  585. };
  586.  
  587. // ************************* XFE_PrefsPageBrowserLang  *************************
  588.  
  589. class XFE_PrefsPageBrowserLang : public XFE_PrefsPage, public XFE_Outlinable
  590. {
  591. public:
  592.  
  593.     // Constructors, Destructors
  594.  
  595.     XFE_PrefsPageBrowserLang(XFE_PrefsDialog  *dialog);
  596.     virtual ~XFE_PrefsPageBrowserLang();
  597.  
  598.     // Manipulators
  599.  
  600.     virtual void create();
  601.     virtual void init();
  602.     virtual void install();
  603.     virtual void save();
  604.  
  605.     void    insertLang(char *lang);
  606.     void    insertLangAtPos(int pos, char *lang);
  607.     void    deleteLangAtPos(int pos);
  608.     void    swapLangs(int pos1, int pos2, int selPos);
  609.     void    setSelectionPos(int pos);
  610.     void    deselectPos(int pos);
  611.  
  612.     // Gets
  613.  
  614.     PrefsDataBrowserLang *getData();
  615.  
  616.     // Outlinable interface methods
  617.     virtual void *ConvFromIndex(int index);
  618.     virtual int ConvToIndex(void *item);
  619.  
  620.     virtual char *getColumnName(int column);
  621.     virtual char *getColumnHeaderText(int column);
  622.     virtual fe_icon *getColumnHeaderIcon(int column);
  623.     virtual EOutlinerTextStyle getColumnHeaderStyle(int column);
  624.     virtual void *acquireLineData(int line);
  625.     virtual void getTreeInfo(XP_Bool *expandable, XP_Bool *is_expanded, int *depth, 
  626.                              OutlinerAncestorInfo **ancestor);
  627.     virtual EOutlinerTextStyle getColumnStyle(int column);
  628.     virtual char *getColumnText(int column);
  629.     virtual fe_icon *getColumnIcon(int column);
  630.     virtual void releaseLineData();
  631.  
  632.     virtual void Buttonfunc(const OutlineButtonFuncData *data);
  633.     virtual void Flippyfunc(const OutlineFlippyFuncData *data);
  634.  
  635.     virtual XFE_Outliner *getOutliner();
  636.     // Get tooltipString & docString; 
  637.     // returned string shall be freed by the callee
  638.     // row < 0 indicates heading row; otherwise it is a content row
  639.     // (starting from 0)
  640.     //
  641.     virtual char *getCellTipString(int /* row */, int /* column */) {return NULL;}
  642.     virtual char *getCellDocString(int /* row */, int /* column */) {return NULL;}
  643.  
  644.     // Callbacks - page BrowserLang
  645.  
  646.     static void cb_add(Widget, XtPointer, XtPointer);
  647.     static void cb_delete(Widget, XtPointer, XtPointer);
  648.     static void cb_promote(Widget, XtPointer, XtPointer);
  649.     static void cb_demote(Widget, XtPointer, XtPointer);
  650.  
  651. private:    
  652.  
  653.     // Data
  654.  
  655.     static const int OUTLINER_COLUMN_ORDER;
  656.     static const int OUTLINER_COLUMN_LANG;
  657.     static const int OUTLINER_COLUMN_MAX_LENGTH;
  658.     static const int OUTLINER_INIT_POS;
  659.  
  660.     PrefsDataBrowserLang   *m_prefsDataBrowserLang;
  661.     int                     m_rowIndex;
  662. };
  663.  
  664. #ifdef MOZ_MAIL_NEWS
  665.  
  666. // ************************* XFE_PrefsPageMailNews  *************************
  667.  
  668. class XFE_PrefsPageMailNews : public XFE_PrefsPage
  669. {
  670. public:
  671.  
  672.     // Constructors, Destructors
  673.  
  674.     XFE_PrefsPageMailNews(XFE_PrefsDialog  *dialog);
  675.     virtual ~XFE_PrefsPageMailNews();
  676.  
  677.     // Manipulators
  678.  
  679.     virtual void create();
  680.     virtual void init();
  681.     virtual void install();
  682.     virtual void save();
  683.  
  684.     // Gets
  685.  
  686.     PrefsDataMailNews *getData();
  687.  
  688.     // Callbacks - page MailNews
  689.  
  690.     static void cb_toggleMsgFont(Widget, XtPointer, XtPointer);
  691.     static void cb_quotedTextColor(Widget, XtPointer, XtPointer);
  692.  
  693. private:    
  694.  
  695.     // Data
  696.  
  697.     PrefsDataMailNews        *m_prefsDataMailNews;
  698.     XP_Bool                   m_refresh_needed;
  699. };
  700. #endif
  701.  
  702. // ************************* XFE_PrefsPageMailNewsIdentity  *************************
  703.  
  704. class XFE_PrefsPageMailNewsIdentity : public XFE_PrefsPage
  705. {
  706. public:
  707.  
  708.     // Constructors, Destructors
  709.  
  710.     XFE_PrefsPageMailNewsIdentity(XFE_PrefsDialog  *dialog);
  711.     virtual ~XFE_PrefsPageMailNewsIdentity();
  712.  
  713.     // Manipulators
  714.  
  715.     virtual void create();
  716.     virtual void init();
  717.     virtual void install();
  718.     virtual void save();
  719.     virtual Boolean verify();
  720.  
  721.     // Gets
  722.  
  723.     PrefsDataMailNewsIdentity *getData();
  724.  
  725.     // Callbacks - page Mail News/Identity
  726.  
  727. #ifdef MOZ_MAIL_NEWS
  728.     static void cb_browse(Widget, XtPointer, XtPointer);
  729.     static void cb_toggleAttachCard(Widget, XtPointer, XtPointer);
  730. #endif
  731.  
  732. private:    
  733.  
  734.     // Data
  735.  
  736.     PrefsDataMailNewsIdentity        *m_prefsDataMailNewsIdentity;
  737. };
  738.  
  739. #ifdef MOZ_MAIL_NEWS
  740. // ************************* XFE_PrefsPageMailNewsComposition  *************************
  741.  
  742. class XFE_PrefsPageMailNewsComposition : public XFE_PrefsPage
  743. {
  744. public:
  745.  
  746.     // Constructors, Destructors
  747.  
  748.     XFE_PrefsPageMailNewsComposition(XFE_PrefsDialog  *dialog);
  749.     virtual ~XFE_PrefsPageMailNewsComposition();
  750.  
  751.     // Manipulators
  752.  
  753.     virtual void create();
  754.     virtual void init();
  755.     virtual void install();
  756.     virtual void save();
  757.  
  758.     // Gets
  759.  
  760.     PrefsDataMailNewsComposition *getData();
  761.  
  762.     // Callbacks - page Mail News/Composition
  763.  
  764.     static void cb_more(Widget, XtPointer, XtPointer);
  765.  
  766. private:    
  767.  
  768.     // Data
  769.  
  770.     PrefsDataMailNewsComposition        *m_prefsDataMailNewsComposition;
  771.  
  772.     void setFccMenu(Boolean);
  773. };
  774.  
  775. // ************************* XFE_PrefsPageMailNewsMserver  *************************
  776.  
  777. class XFE_PrefsPageMailNewsMserver : public XFE_PrefsPage
  778. {
  779. public:
  780.  
  781.     // Constructors, Destructors
  782.  
  783.     XFE_PrefsPageMailNewsMserver(XFE_PrefsDialog  *dialog);
  784.     virtual ~XFE_PrefsPageMailNewsMserver();
  785.  
  786.     // Manipulators
  787.  
  788.     virtual void create();
  789.     virtual void init();
  790.     virtual void install();
  791.     virtual void save();
  792.     virtual Boolean verify();
  793.  
  794.     // Gets
  795.  
  796.     PrefsDataMailNewsMserver *getData();
  797.  
  798.     // Callbacks - page Mail News/Mail Server
  799.  
  800.     static void cb_browseApplication(Widget, XtPointer, XtPointer);
  801.     static void cb_more(Widget, XtPointer, XtPointer);
  802.     static void cb_toggleServerType(Widget, XtPointer, XtPointer);
  803.     static void cb_toggleApplication(Widget, XtPointer, XtPointer);
  804.  
  805. private:    
  806.  
  807.     // Data
  808.  
  809.     PrefsDataMailNewsMserver        *m_prefsDataMailNewsMserver;
  810. };
  811.  
  812. // ************************* XFE_PrefsPageMailNewsNserver  *************************
  813.  
  814. class XFE_PrefsPageMailNewsNserver : public XFE_PrefsPage
  815. {
  816. public:
  817.  
  818.     // Constructors, Destructors
  819.  
  820.     XFE_PrefsPageMailNewsNserver(XFE_PrefsDialog  *dialog);
  821.     virtual ~XFE_PrefsPageMailNewsNserver();
  822.  
  823.     // Manipulators
  824.  
  825.     virtual void create();
  826.     virtual void init();
  827.     virtual void install();
  828.     virtual void save();
  829.     virtual Boolean verify();
  830.  
  831.     // Gets
  832.  
  833.     PrefsDataMailNewsNserver *getData();
  834.  
  835.     // Callbacks - page Mail News/News Server
  836.  
  837.     static void cb_browse(Widget, XtPointer, XtPointer);
  838.     static void cb_toggleSecure(Widget, XtPointer, XtPointer);
  839.  
  840. private:    
  841.  
  842.     // Data
  843.  
  844.     PrefsDataMailNewsNserver        *m_prefsDataMailNewsNserver;
  845. };
  846.  
  847. // ************************* XFE_PrefsPageMailNewsAddrBook  *************************
  848.  
  849. class XFE_PrefsPageMailNewsAddrBook : public XFE_PrefsPage, public XFE_Outlinable
  850. {
  851. public:
  852.  
  853.     // Constructors, Destructors
  854.  
  855.     XFE_PrefsPageMailNewsAddrBook(XFE_PrefsDialog  *dialog);
  856.     virtual ~XFE_PrefsPageMailNewsAddrBook();
  857.  
  858.     // Manipulators
  859.  
  860.     virtual void create();
  861.     virtual void init();
  862.     virtual void install();
  863.     virtual void save();
  864.  
  865.     void    insertDir(DIR_Server *dir);
  866.     void    insertDirAtPos(int pos, DIR_Server *dir);
  867.     void    deleteDirAtPos(int pos);
  868.     void    swapDirs(int pos1, int pos2, int selPos);
  869.     void    setSelectionPos(int pos);
  870.     void    deselectPos(int pos);
  871.  
  872.     // Gets
  873.  
  874.     PrefsDataMailNewsAddrBook *getData();
  875.  
  876.     // Outlinable interface methods
  877.     virtual void *ConvFromIndex(int index);
  878.     virtual int ConvToIndex(void *item);
  879.  
  880.     virtual char *getColumnName(int column);
  881.     virtual char *getColumnHeaderText(int column);
  882.     virtual fe_icon *getColumnHeaderIcon(int column);
  883.     virtual EOutlinerTextStyle getColumnHeaderStyle(int column);
  884.     virtual void *acquireLineData(int line);
  885.     virtual void getTreeInfo(XP_Bool *expandable, XP_Bool *is_expanded, int *depth, 
  886.                              OutlinerAncestorInfo **ancestor);
  887.     virtual EOutlinerTextStyle getColumnStyle(int column);
  888.     virtual char *getColumnText(int column);
  889.     virtual fe_icon *getColumnIcon(int column);
  890.     virtual void releaseLineData();
  891.  
  892.     virtual void Buttonfunc(const OutlineButtonFuncData *data);
  893.     virtual void Flippyfunc(const OutlineFlippyFuncData *data);
  894.  
  895.     virtual XFE_Outliner *getOutliner();
  896.     // Get tooltipString & docString; 
  897.     // returned string shall be freed by the callee
  898.     // row < 0 indicates heading row; otherwise it is a content row
  899.     // (starting from 0)
  900.     //
  901.     virtual char *getCellTipString(int /* row */, int /* column */) {return NULL;}
  902.     virtual char *getCellDocString(int /* row */, int /* column */) {return NULL;}
  903.  
  904.  
  905.     // Callbacks - page Mail News/Address Book
  906.  
  907.     static void cb_add(Widget, XtPointer, XtPointer);
  908.     static void cb_edit(Widget, XtPointer, XtPointer);
  909.     static void cb_delete(Widget, XtPointer, XtPointer);
  910.     static void cb_promote(Widget, XtPointer, XtPointer);
  911.     static void cb_demote(Widget, XtPointer, XtPointer);
  912.     static void cb_toggleNameOrder(Widget, XtPointer, XtPointer);
  913.  
  914. private:    
  915.  
  916.     // Data
  917.  
  918.     static const int OUTLINER_COLUMN_NAME;
  919.     static const int OUTLINER_COLUMN_MAX_LENGTH;
  920.     static const int OUTLINER_INIT_POS;
  921.  
  922.     PrefsDataMailNewsAddrBook  *m_prefsDataMailNewsAddrBook;
  923.     int                         m_rowIndex;
  924. };
  925.  
  926. #endif /* MOZ_MAIL_NEWS */
  927.  
  928. #ifdef EDITOR
  929.  
  930. // ************************* XFE_PrefsPageEditor  *************************
  931.  
  932. class XFE_PrefsPageEditor : public XFE_PrefsPage
  933. {
  934. public:
  935.  
  936.     // Constructors, Destructors
  937.  
  938.     XFE_PrefsPageEditor(XFE_PrefsDialog  *dialog);
  939.     virtual ~XFE_PrefsPageEditor();
  940.  
  941.     // Manipulators
  942.  
  943.     virtual void create();
  944.     virtual void init();
  945.     virtual void install();
  946.     virtual void save();
  947.     virtual Boolean verify();
  948.  
  949.     // Gets
  950.  
  951.     PrefsDataEditor *getData();
  952.  
  953.     // Callbacks - page Editor
  954.  
  955.     static void cb_changed(Widget, XtPointer, XtPointer);
  956.     static void cb_browseToTextField(Widget, XtPointer, XtPointer);
  957.     static void cb_restoreTemplate(Widget, XtPointer, XtPointer);
  958.     static void cb_autosaveToggle(Widget, XtPointer, XtPointer);
  959.     static void cb_browseTemplate(Widget, XtPointer, XtPointer);
  960.  
  961. private:    
  962.  
  963.     // Data
  964.  
  965.     PrefsDataEditor        *m_prefsDataEditor;
  966. };
  967.  
  968. // ************************* XFE_PrefsPageEditorAppearance  *************************
  969.  
  970. class XFE_PrefsPageEditorAppearance : public XFE_PrefsPage
  971. {
  972. public:
  973.  
  974.     // Constructors, Destructors
  975.  
  976.     XFE_PrefsPageEditorAppearance(XFE_PrefsDialog  *dialog);
  977.     virtual ~XFE_PrefsPageEditorAppearance();
  978.  
  979.     // Manipulators
  980.  
  981.     virtual void create();
  982.     virtual void init();
  983.     virtual void install();
  984.     virtual void save();
  985.  
  986.     // Gets
  987.  
  988.     PrefsDataEditorAppearance *getData();
  989.  
  990.     // Callbacks - page Editor/Appearance
  991.  
  992. private:    
  993.  
  994.     // Data
  995.  
  996.     PrefsDataEditorAppearance        *m_prefsDataEditorAppearance;
  997. };
  998.  
  999. // ************************* XFE_PrefsPageEditorPublish  *************************
  1000.  
  1001. class XFE_PrefsPageEditorPublish : public XFE_PrefsPage
  1002. {
  1003. public:
  1004.  
  1005.     // Constructors, Destructors
  1006.  
  1007.     XFE_PrefsPageEditorPublish(XFE_PrefsDialog  *dialog);
  1008.     virtual ~XFE_PrefsPageEditorPublish();
  1009.  
  1010.     // Manipulators
  1011.  
  1012.     virtual void create();
  1013.     virtual void init();
  1014.     virtual void install();
  1015.     virtual void save();
  1016.  
  1017.     // Gets
  1018.  
  1019.     PrefsDataEditorPublish *getData();
  1020.  
  1021.     // Callbacks - page Editor/Publish
  1022.  
  1023.     static void cb_changed(Widget, XtPointer, XtPointer);
  1024.     static void cb_passwordChanged(Widget, XtPointer, XtPointer);
  1025.  
  1026. private:    
  1027.  
  1028.     // Data
  1029.  
  1030.     PrefsDataEditorPublish        *m_prefsDataEditorPublish;
  1031. };
  1032.  
  1033. #endif /* EDITOR */
  1034.  
  1035. #ifdef PREFS_UNSUPPORTED
  1036. // ************************* XFE_PrefsPageOffline  *************************
  1037.  
  1038. class XFE_PrefsPageOffline : public XFE_PrefsPage
  1039. {
  1040. public:
  1041.  
  1042.     // Constructors, Destructors
  1043.  
  1044.     XFE_PrefsPageOffline(XFE_PrefsDialog  *dialog);
  1045.     virtual ~XFE_PrefsPageOffline();
  1046.  
  1047.     // Manipulators
  1048.  
  1049.     virtual void create();
  1050.     virtual void init();
  1051.     virtual void install();
  1052.     virtual void save();
  1053.  
  1054.     // Gets
  1055.  
  1056.     PrefsDataOffline *getData();
  1057.  
  1058.     // Callbacks - page Offline
  1059.  
  1060.     static void cb_toggleStartup(Widget, XtPointer, XtPointer);
  1061.  
  1062. private:    
  1063.  
  1064.     // Data
  1065.  
  1066.     PrefsDataOffline        *m_prefsDataOffline;
  1067. };
  1068.  
  1069. #ifdef MOZ_MAIL_NEWS
  1070.  
  1071. // ************************* XFE_PrefsPageOfflineNews  *************************
  1072.  
  1073. class XFE_PrefsPageOfflineNews : public XFE_PrefsPage
  1074. {
  1075. public:
  1076.  
  1077.     // Constructors, Destructors
  1078.  
  1079.     XFE_PrefsPageOfflineNews(XFE_PrefsDialog  *dialog);
  1080.     virtual ~XFE_PrefsPageOfflineNews();
  1081.  
  1082.     // Manipulators
  1083.  
  1084.     virtual void create();
  1085.     virtual void init();
  1086.     virtual void install();
  1087.     virtual void save();
  1088.  
  1089.     // Gets
  1090.  
  1091.     PrefsDataOfflineNews *getData();
  1092.  
  1093.     // Callbacks - page OfflineNews
  1094.  
  1095.     static void cb_toggleDownLoadByDate(Widget, XtPointer, XtPointer);
  1096.  
  1097. private:    
  1098.  
  1099.     // Data
  1100.  
  1101.     PrefsDataOfflineNews        *m_prefsDataOfflineNews;
  1102. };
  1103.  
  1104. #endif /* MOZ_MAIL_NEWS */
  1105.  
  1106. #endif /* PREFS_UNSUPPORTED */
  1107.  
  1108. // ************************* XFE_PrefsPageDiskSpace  *************************
  1109.  
  1110. class XFE_PrefsPageDiskSpace : public XFE_PrefsPage
  1111. {
  1112. public:
  1113.  
  1114.     // Constructors, Destructors
  1115.  
  1116.     XFE_PrefsPageDiskSpace(XFE_PrefsDialog  *dialog);
  1117.     virtual ~XFE_PrefsPageDiskSpace();
  1118.  
  1119.     // Manipulators
  1120.  
  1121.     virtual void create();
  1122.     virtual void init();
  1123.     virtual void install();
  1124.     virtual void save();
  1125.  
  1126.     // Gets
  1127.  
  1128.     PrefsDataDiskSpace *getData();
  1129.  
  1130.     // Callbacks - page DiskSpace
  1131.  
  1132.     // static void cb_more(Widget, XtPointer, XtPointer);
  1133.     static void cb_toggleKeepNews(Widget, XtPointer, XtPointer);
  1134.  
  1135. private:    
  1136.  
  1137.     // Data
  1138.  
  1139.     PrefsDataDiskSpace        *m_prefsDataDiskSpace;
  1140. };
  1141.  
  1142. #ifdef PREFS_UNSUPPORTED
  1143.  
  1144. // ************************* XFE_PrefsPageHelpFiles  *************************
  1145.  
  1146. class XFE_PrefsPageHelpFiles : public XFE_PrefsPage
  1147. {
  1148. public:
  1149.  
  1150.     // Constructors, Destructors
  1151.  
  1152.     XFE_PrefsPageHelpFiles(XFE_PrefsDialog  *dialog);
  1153.     virtual ~XFE_PrefsPageHelpFiles();
  1154.  
  1155.     // Manipulators
  1156.  
  1157.     virtual void create();
  1158.     virtual void init();
  1159.     virtual void install();
  1160.     virtual void save();
  1161.  
  1162.     // Gets
  1163.  
  1164.     PrefsDataHelpFiles *getData();
  1165.  
  1166.     // Callbacks - page HelpFiles
  1167.  
  1168.     static void cb_toggleHelpSite(Widget, XtPointer, XtPointer);
  1169.     static void cb_browse(Widget, XtPointer, XtPointer);
  1170.  
  1171. private:    
  1172.  
  1173.     // Data
  1174.  
  1175.     PrefsDataHelpFiles        *m_prefsDataHelpFiles;
  1176. };
  1177. #endif
  1178.  
  1179. extern "C" void
  1180. fe_showEditorPreferences(XFE_Component *topLevel, MWContext *context);
  1181.  
  1182. #endif /* _xfe_prefsdialog_h */
  1183.