Hi Folks.

The attached patch does the following:
  - added XP support for a DefaultPageSize in the preferences and text
      engine.
  - added unix GUI support for same (in the Other tab).
  - provides stubs (that honour the textual prefs file) for all other 
      platforms
  - fixed unix gui bug causing the ruler to revert to inches each time the
      options dialog was used.

Setting the default page size will currently affect *all* documents when
they are loaded. This should/will be fixed when the Page Setup dialog 
is done.  However this patch should really interest European users.

The patch was produced against 0.7.11 but applies succesfully to the
latest CVS version.

Be warned that this is my first jaunt into C++ but I'm fairly sure its 
all OK. I am a little concered about using fp_PageSize::Predefined from 
the GUI code, I suspect the right approach is to move fp_PageSize (or 
something like it) from text/fmt to af/util. I think this would be best 
in a different patch. I'm happy to write that patch providing people 
agree with me!

        Cheers

        Daniel
        --xx--
-- 
Daniel Thompson (Merlin) <[EMAIL PROTECTED]>

How many dull people does it take to change a light bulb?    One.
diff -Naur abi-0.7.11/src/af/xap/unix/xap_UnixFrame.cpp 
abi/src/af/xap/unix/xap_UnixFrame.cpp
--- abi-0.7.11/src/af/xap/unix/xap_UnixFrame.cpp        Tue Aug 22 01:20:29 2000
+++ abi/src/af/xap/unix/xap_UnixFrame.cpp       Tue Nov 28 11:32:18 2000
@@ -21,6 +21,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <sys/stat.h>
+#include <string.h>
 
 #include "ut_types.h"
 #include "ut_debugmsg.h"
diff -Naur abi-0.7.11/src/af/xap/xp/xap_Prefs_SchemeIds.h 
abi/src/af/xap/xp/xap_Prefs_SchemeIds.h
--- abi-0.7.11/src/af/xap/xp/xap_Prefs_SchemeIds.h      Sat Aug  5 22:53:23 2000
+++ abi/src/af/xap/xp/xap_Prefs_SchemeIds.h     Tue Nov 28 15:43:04 2000
@@ -71,6 +71,9 @@
 /* append suffixes to saved files */
 #define XAP_PREF_DEFAULT_UseSuffix                  "1"
 
+#define XAP_PREF_KEY_DefaultPageSize                "DefaultPageSize"
+#define XAP_PREF_DEFAULT_DefaultPageSize             "Letter"
+
 #else /* XAP_PREFS_SCHEMEID_H */
 #ifdef dcl
 
@@ -84,5 +87,6 @@
 
 dcl(SmartQuotesEnable)
 dcl(UseSuffix)
+dcl(DefaultPageSize)
 #endif /* dcl */
 #endif /* XAP_PREFS_SCHEMEID_H */
diff -Naur abi-0.7.11/src/text/fmt/xp/fl_DocLayout.cpp 
abi/src/text/fmt/xp/fl_DocLayout.cpp
--- abi-0.7.11/src/text/fmt/xp/fl_DocLayout.cpp Thu Aug 31 18:52:55 2000
+++ abi/src/text/fmt/xp/fl_DocLayout.cpp        Wed Nov 29 17:27:10 2000
@@ -1034,10 +1034,15 @@
 
 fp_PageSize FL_DocLayout::_getDefaultPageSize()
 {
-       // TODO The following page dimensions should NOT be hard-coded.
-       // TODO return PageSize initialized by prefs.
+       XAP_App *pApp = XAP_App::getApp();
+       UT_ASSERT(pApp);
 
-       return fp_PageSize(fp_PageSize::Letter);
+       const XML_Char * szDefaultPageSize = NULL;
+       pApp->getPrefsValue(XAP_PREF_KEY_DefaultPageSize,
+                             &szDefaultPageSize);
+       UT_ASSERT((szDefaultPageSize) && (*szDefaultPageSize));
+       UT_ASSERT(sizeof(char) == sizeof(XML_Char));
+       return fp_PageSize((char*) szDefaultPageSize);
 }
 
 void FL_DocLayout::setPendingSmartQuote(fl_BlockLayout *bl, UT_uint32 of)
diff -Naur abi-0.7.11/src/text/fmt/xp/fp_PageSize.cpp 
abi/src/text/fmt/xp/fp_PageSize.cpp
--- abi-0.7.11/src/text/fmt/xp/fp_PageSize.cpp  Fri May 12 05:40:53 2000
+++ abi/src/text/fmt/xp/fp_PageSize.cpp Mon Dec  4 19:57:27 2000
@@ -1,7 +1,10 @@
 // fp_PageSize.cpp
+#include "string.h"
+
 #include "fp_PageSize.h"
 #include "ut_units.h"
 #include "ut_assert.h"
+#include "ut_debugmsg.h"
 
 
 // This class stores the pagesize in mm. The resoning behind
@@ -9,33 +12,36 @@
 // If anyone think it's more apropriate to express it in meters,
 // you're free to change the implementation.
 
+const int cMaxSymbolicLength = 7;
+
 struct private_pagesize_sizes
 {
        double w;
        double h;
        fp_PageSize::Unit u;
+       char name[cMaxSymbolicLength];
 };
 
 const private_pagesize_sizes
        pagesizes[fp_PageSize::_last_predefined_pagesize_dont_use_] =
 {
-       { 841.0, 1189.0, fp_PageSize::mm        },              // A0
-       { 594.0,  841.0, fp_PageSize::mm        },              // A1
-       { 420.0,  594.0, fp_PageSize::mm        },              // A2
-       { 297.0,  420.0, fp_PageSize::mm        },              // A3
-       { 210.0,  297.0, fp_PageSize::mm        },              // A4
-       { 148.0,  210.0, fp_PageSize::mm        },              // A5
-       { 105.0,  148.0, fp_PageSize::mm        },              // A6
-       {1000.0, 1414.0, fp_PageSize::mm        },              // B0
-       { 707.0, 1000.0, fp_PageSize::mm        },              // B1
-       { 500.0,  707.0, fp_PageSize::mm        },              // B2
-       { 353.0,  500.0, fp_PageSize::mm        },              // B3
-       { 250.0,  353.0, fp_PageSize::mm        },              // B4
-       { 176.0,  250.0, fp_PageSize::mm        },              // B5
-       { 125.0,  176.0, fp_PageSize::mm        },              // B6
-       {   8.5,   14.0, fp_PageSize::inch      },              // Legal
-       {   8.5,   13.0, fp_PageSize::inch      },              // Folio
-       {   8.5,   11.0, fp_PageSize::inch      }       // Letter
+       { 841.0, 1189.0, fp_PageSize::mm,       "A0"            },
+       { 594.0,  841.0, fp_PageSize::mm,       "A1"            },
+       { 420.0,  594.0, fp_PageSize::mm,       "A2"            },
+       { 297.0,  420.0, fp_PageSize::mm,       "A3"            },
+       { 210.0,  297.0, fp_PageSize::mm,       "A4"            },
+       { 148.0,  210.0, fp_PageSize::mm,       "A5"            },
+       { 105.0,  148.0, fp_PageSize::mm,       "A6"            },
+       {1000.0, 1414.0, fp_PageSize::mm,       "B0"            },
+       { 707.0, 1000.0, fp_PageSize::mm,       "B1"            },
+       { 500.0,  707.0, fp_PageSize::mm,       "B2"            },
+       { 353.0,  500.0, fp_PageSize::mm,       "B3"            },
+       { 250.0,  353.0, fp_PageSize::mm,       "B4"            },
+       { 176.0,  250.0, fp_PageSize::mm,       "B5"            },
+       { 125.0,  176.0, fp_PageSize::mm,       "B6"            },
+       {   8.5,   14.0, fp_PageSize::inch,     "Legal"         },
+       {   8.5,   13.0, fp_PageSize::inch,     "Folio"         },
+       {   8.5,   11.0, fp_PageSize::inch,     "Letter"        }
 };
 
 const double ScaleFactors[fp_PageSize::_last_predefined_unit_dont_use_] =
@@ -52,6 +58,11 @@
        Set(preDef);
 }
 
+fp_PageSize::fp_PageSize(const char *name)
+{
+       Set(name);
+}
+
 fp_PageSize::fp_PageSize(double w, double h, Unit u)
 {
        UT_ASSERT(u >= 0 && u < _last_predefined_unit_dont_use_);
@@ -67,10 +78,18 @@
 
 void fp_PageSize::Set(Predefined preDef)
 {
+       UT_ASSERT((preDef >= 0) && (preDef < _last_predefined_pagesize_dont_use_));
+
        const private_pagesize_sizes& size = pagesizes[preDef];
        Set(size.w, size.h, size.u);
 }
 
+void fp_PageSize::Set(const char *name)
+{
+       UT_DEBUGMSG(("fp_PageSize::Set(\"%s\")\n", (char*) name));
+       Set(NameToPredefined(name));
+}
+
 double fp_PageSize::Width(Unit u) const
 {
        UT_ASSERT(u >= 0 && u < _last_predefined_unit_dont_use_);
@@ -83,3 +102,30 @@
        return m_iHeight / ScaleFactors[u];
 }
 
+fp_PageSize::Predefined fp_PageSize::NameToPredefined(const char *name)
+{
+       Predefined preDef;
+       // determine the predefined layout the name represents
+       for(preDef=static_cast<Predefined>(0);
+           preDef < _last_predefined_pagesize_dont_use_;
+               static_cast<int>(preDef)++)
+       {
+               if (0 == strcmp(pagesizes[preDef].name, name)) {
+                       break;
+               }
+       }
+
+       if ((preDef >= 0) && (preDef < _last_predefined_pagesize_dont_use_)) {
+               return preDef;
+       }
+
+       UT_ASSERT(UT_SHOULD_NOT_HAPPEN);
+       return fp_PageSize::Letter;
+}
+
+const char * fp_PageSize::PredefinedToName(Predefined preDef)
+{
+       UT_ASSERT((preDef >= 0) && (preDef < _last_predefined_pagesize_dont_use_));
+
+       return pagesizes[preDef].name;
+}
diff -Naur abi-0.7.11/src/text/fmt/xp/fp_PageSize.h abi/src/text/fmt/xp/fp_PageSize.h
--- abi-0.7.11/src/text/fmt/xp/fp_PageSize.h    Wed May 10 11:01:51 2000
+++ abi/src/text/fmt/xp/fp_PageSize.h   Mon Dec  4 19:58:20 2000
@@ -28,13 +28,18 @@
        };
 
        fp_PageSize(Predefined preDef);
+       fp_PageSize(const char *name);
        fp_PageSize(double w, double h, Unit u);
 
        void Set(Predefined preDef);
+       void Set(const char *name);
        void Set(double w, double h, Unit u);
 
        double Width(Unit u) const;
        double Height(Unit u) const;
+
+       static Predefined NameToPredefined(const char *name);
+       static const char * PredefinedToName(Predefined preDef);
 
 private:
        double m_iWidth;
diff -Naur abi-0.7.11/src/wp/ap/beos/ap_BeOSDialog_Options.cpp 
abi/src/wp/ap/beos/ap_BeOSDialog_Options.cpp
--- abi-0.7.11/src/wp/ap/beos/ap_BeOSDialog_Options.cpp Thu Aug  3 18:59:45 2000
+++ abi/src/wp/ap/beos/ap_BeOSDialog_Options.cpp        Wed Dec  6 17:13:16 2000
@@ -640,6 +640,20 @@
        units->Menu()->ItemAt(n1)->SetMarked(true);//Select(n1);
 }
 
+fp_PageSize::Predefined AP_BeOSDialog_Options::_gatherDefaultPageSize(void)
+{
+       // FIXME: replace this with *real* gui code
+       return defaultPaperSize;
+}
+
+void   AP_BeOSDialog_Options::_setDefaultPageSize(fp_PageSize::Predefined pre)
+{
+       // FIXME: replace this with *real* gui code
+       defaultPageSize = pre;
+}
+
+void 
+
 int AP_BeOSDialog_Options::_gatherNotebookPageNum(void) 
 {                              
        return 0;
diff -Naur abi-0.7.11/src/wp/ap/beos/ap_BeOSDialog_Options.h 
abi/src/wp/ap/beos/ap_BeOSDialog_Options.h
--- abi-0.7.11/src/wp/ap/beos/ap_BeOSDialog_Options.h   Thu Aug  3 12:25:48 2000
+++ abi/src/wp/ap/beos/ap_BeOSDialog_Options.h  Wed Dec  6 17:10:01 2000
@@ -55,6 +55,7 @@
        SET_GATHER                      (SpellInternet,         UT_Bool );
  
        SET_GATHER                      (SmartQuotesEnable, UT_Bool );
+       SET_GATHER                      (DefaultPagesize,   fp_PageSize::Predefined);
        SET_GATHER                      (PrefsAutoSave,         UT_Bool );
  
        SET_GATHER                      (ViewShowRuler,         UT_Bool );
@@ -79,6 +80,9 @@
        
  protected:
        class OptionsWin  *newwin;
+
+       // FIXME: replace this with *real* gui code */
+       fp_PageSize::Predefined defaultPageSize;
 };
 
 #endif /* AP_BEOSDIALOG_OPTIONS_H */
diff -Naur abi-0.7.11/src/wp/ap/qnx/ap_QNXDialog_Options.cpp 
abi/src/wp/ap/qnx/ap_QNXDialog_Options.cpp
--- abi-0.7.11/src/wp/ap/qnx/ap_QNXDialog_Options.cpp   Wed Jul 26 16:51:15 2000
+++ abi/src/wp/ap/qnx/ap_QNXDialog_Options.cpp  Wed Dec  6 17:21:39 2000
@@ -909,3 +909,15 @@
        UT_DEBUGMSG(("TODO: _gatherNotebookPageNum "));
 }
 
+fp_PageSize::Predefined AP_QNXDialog_Options::_gatherDefaultPageSize(void)
+{
+       // FIXME: replace this with *real* gui code
+       return defaultPaperSize;
+}
+
+void   AP_QNXDialog_Options::_setDefaultPageSize(fp_PageSize::Predefined pre)
+{
+       // FIXME: replace this with *real* gui code
+       defaultPageSize = pre;
+}
+
diff -Naur abi-0.7.11/src/wp/ap/qnx/ap_QNXDialog_Options.h 
abi/src/wp/ap/qnx/ap_QNXDialog_Options.h
--- abi-0.7.11/src/wp/ap/qnx/ap_QNXDialog_Options.h     Wed Jul 26 16:51:15 2000
+++ abi/src/wp/ap/qnx/ap_QNXDialog_Options.h    Wed Dec  6 17:26:12 2000
@@ -60,6 +60,7 @@
        SET_GATHER                      (SpellInternet,         UT_Bool );
  
        SET_GATHER                      (SmartQuotesEnable, UT_Bool );
+       SET_GATHER                      (DefaultPageSize,       
+fp_PageSize::Predefined );
        SET_GATHER                      (PrefsAutoSave,         UT_Bool );
 
        SET_GATHER                      (ViewShowRuler,         UT_Bool );
@@ -140,6 +141,9 @@
        PtWidget_t * m_buttonCancel;
 
        int                      done;
+
+       // FIXME: replace this with *real* gui code */
+       fp_PageSize::Predefined defaultPageSize;
 };
 
 #endif /* AP_QNXDIALOG_OPTIONS_H */
diff -Naur abi-0.7.11/src/wp/ap/unix/ap_UnixDialog_Options.cpp 
abi/src/wp/ap/unix/ap_UnixDialog_Options.cpp
--- abi-0.7.11/src/wp/ap/unix/ap_UnixDialog_Options.cpp Tue Jul 25 21:10:50 2000
+++ abi/src/wp/ap/unix/ap_UnixDialog_Options.cpp        Mon Dec  4 21:12:21 2000
@@ -210,6 +210,9 @@
        GtkWidget *tableOther;
        GtkWidget *checkbuttonSmartQuotesEnable;
        GtkWidget *labelSmartQuotes;
+       GtkWidget *labelDefaultPageSize;
+       GtkWidget *listDefaultPageSize;
+       GtkWidget *listDefaultPageSize_menu;
 
        GtkWidget *tablePreferences;
        GtkWidget *checkbuttonPrefsAutoSave;
@@ -608,7 +611,7 @@
 
 
        // OTHER STUFF (including SMART QUOTES) //////////////////////////////
-       tableOther = gtk_table_new (2, 3, FALSE);
+       tableOther = gtk_table_new (4, 3, FALSE);
        gtk_widget_ref (tableOther);
        gtk_object_set_data_full (GTK_OBJECT (windowOptions), "tableOther", tableOther,
                                  (GtkDestroyNotify) gtk_widget_unref);
@@ -625,6 +628,129 @@
                          (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                          (GtkAttachOptions) (0), 0, 0);
 
+       
+       labelDefaultPageSize = gtk_label_new 
+(pSS->getValue(AP_STRING_ID_DLG_Options_Label_DefaultPageSize));
+       gtk_widget_ref (labelDefaultPageSize);
+       gtk_object_set_data_full(GTK_OBJECT(windowOptions), "labelDefaultPageSize", 
+labelDefaultPageSize, (GtkDestroyNotify) gtk_widget_unref);
+       // force left align
+       gtk_misc_set_alignment (GTK_MISC(labelDefaultPageSize), 0.0, 0.5);
+       gtk_widget_show(labelDefaultPageSize);
+       gtk_table_attach (GTK_TABLE (tableOther), labelDefaultPageSize, 0, 1, 1, 2, 
+(GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0);
+
+       listDefaultPageSize = gtk_option_menu_new ();
+       gtk_widget_ref (listDefaultPageSize);
+       gtk_object_set_data_full (GTK_OBJECT(windowOptions), "listDefaultPageSize", 
+listDefaultPageSize, (GtkDestroyNotify) gtk_widget_unref);
+       gtk_widget_show (listDefaultPageSize);
+       gtk_table_attach (GTK_TABLE (tableOther), listDefaultPageSize, 1, 2, 1, 2, 
+(GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0);
+       //gtk_table_attach (GTK_TABLE (tableOther), listDefaultPageSize, 1, 2, 1, 2, 
+(GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0);
+
+       listDefaultPageSize_menu = gtk_menu_new ();
+// TODO: decide whether page sizes are universal or whether they require translating
+       glade_menuitem = gtk_menu_item_new_with_label (_("A0"));
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_OPTION_PTR, 
+(gpointer) listDefaultPageSize);
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_VALUE_TAG, 
+(gpointer) fp_PageSize::A0);
+       CONNECT_MENU_ITEM_SIGNAL_ACTIVATE(glade_menuitem);
+       gtk_widget_show (glade_menuitem);
+       gtk_menu_append (GTK_MENU (listDefaultPageSize_menu), glade_menuitem);
+       glade_menuitem = gtk_menu_item_new_with_label (_("A1"));
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_OPTION_PTR, 
+(gpointer) listDefaultPageSize);
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_VALUE_TAG, 
+(gpointer) fp_PageSize::A1);
+       CONNECT_MENU_ITEM_SIGNAL_ACTIVATE(glade_menuitem);
+       gtk_widget_show (glade_menuitem);
+       gtk_menu_append (GTK_MENU (listDefaultPageSize_menu), glade_menuitem);
+       glade_menuitem = gtk_menu_item_new_with_label (_("A2"));
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_OPTION_PTR, 
+(gpointer) listDefaultPageSize);
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_VALUE_TAG, 
+(gpointer) fp_PageSize::A2);
+       CONNECT_MENU_ITEM_SIGNAL_ACTIVATE(glade_menuitem);
+       gtk_widget_show (glade_menuitem);
+       gtk_menu_append (GTK_MENU (listDefaultPageSize_menu), glade_menuitem);
+       glade_menuitem = gtk_menu_item_new_with_label (_("A3"));
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_OPTION_PTR, 
+(gpointer) listDefaultPageSize);
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_VALUE_TAG, 
+(gpointer) fp_PageSize::A3);
+       CONNECT_MENU_ITEM_SIGNAL_ACTIVATE(glade_menuitem);
+       gtk_widget_show (glade_menuitem);
+       gtk_menu_append (GTK_MENU (listDefaultPageSize_menu), glade_menuitem);
+       glade_menuitem = gtk_menu_item_new_with_label (_("A4"));
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_OPTION_PTR, 
+(gpointer) listDefaultPageSize);
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_VALUE_TAG, 
+(gpointer) fp_PageSize::A4);
+       CONNECT_MENU_ITEM_SIGNAL_ACTIVATE(glade_menuitem);
+       gtk_widget_show (glade_menuitem);
+       gtk_menu_append (GTK_MENU (listDefaultPageSize_menu), glade_menuitem);
+       glade_menuitem = gtk_menu_item_new_with_label (_("A5"));
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_OPTION_PTR, 
+(gpointer) listDefaultPageSize);
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_VALUE_TAG, 
+(gpointer) fp_PageSize::A5);
+       CONNECT_MENU_ITEM_SIGNAL_ACTIVATE(glade_menuitem);
+       gtk_widget_show (glade_menuitem);
+       gtk_menu_append (GTK_MENU (listDefaultPageSize_menu), glade_menuitem);
+       glade_menuitem = gtk_menu_item_new_with_label (_("A6"));
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_OPTION_PTR, 
+(gpointer) listDefaultPageSize);
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_VALUE_TAG, 
+(gpointer) fp_PageSize::A6);
+       CONNECT_MENU_ITEM_SIGNAL_ACTIVATE(glade_menuitem);
+       gtk_widget_show (glade_menuitem);
+       gtk_menu_append (GTK_MENU (listDefaultPageSize_menu), glade_menuitem);
+       glade_menuitem = gtk_menu_item_new_with_label (_("B0"));
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_OPTION_PTR, 
+(gpointer) listDefaultPageSize);
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_VALUE_TAG, 
+(gpointer) fp_PageSize::B0);
+       CONNECT_MENU_ITEM_SIGNAL_ACTIVATE(glade_menuitem);
+       gtk_widget_show (glade_menuitem);
+       gtk_menu_append (GTK_MENU (listDefaultPageSize_menu), glade_menuitem);
+       glade_menuitem = gtk_menu_item_new_with_label (_("B1"));
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_OPTION_PTR, 
+(gpointer) listDefaultPageSize);
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_VALUE_TAG, 
+(gpointer) fp_PageSize::B1);
+       CONNECT_MENU_ITEM_SIGNAL_ACTIVATE(glade_menuitem);
+       gtk_widget_show (glade_menuitem);
+       gtk_menu_append (GTK_MENU (listDefaultPageSize_menu), glade_menuitem);
+       glade_menuitem = gtk_menu_item_new_with_label (_("B2"));
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_OPTION_PTR, 
+(gpointer) listDefaultPageSize);
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_VALUE_TAG, 
+(gpointer) fp_PageSize::B2);
+       CONNECT_MENU_ITEM_SIGNAL_ACTIVATE(glade_menuitem);
+       gtk_widget_show (glade_menuitem);
+       gtk_menu_append (GTK_MENU (listDefaultPageSize_menu), glade_menuitem);
+       glade_menuitem = gtk_menu_item_new_with_label (_("B3"));
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_OPTION_PTR, 
+(gpointer) listDefaultPageSize);
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_VALUE_TAG, 
+(gpointer) fp_PageSize::B3);
+       CONNECT_MENU_ITEM_SIGNAL_ACTIVATE(glade_menuitem);
+       gtk_widget_show (glade_menuitem);
+       gtk_menu_append (GTK_MENU (listDefaultPageSize_menu), glade_menuitem);
+       glade_menuitem = gtk_menu_item_new_with_label (_("B4"));
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_OPTION_PTR, 
+(gpointer) listDefaultPageSize);
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_VALUE_TAG, 
+(gpointer) fp_PageSize::B4);
+       CONNECT_MENU_ITEM_SIGNAL_ACTIVATE(glade_menuitem);
+       gtk_widget_show (glade_menuitem);
+       gtk_menu_append (GTK_MENU (listDefaultPageSize_menu), glade_menuitem);
+       glade_menuitem = gtk_menu_item_new_with_label (_("B5"));
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_OPTION_PTR, 
+(gpointer) listDefaultPageSize);
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_VALUE_TAG, 
+(gpointer) fp_PageSize::B5);
+       CONNECT_MENU_ITEM_SIGNAL_ACTIVATE(glade_menuitem);
+       gtk_widget_show (glade_menuitem);
+       gtk_menu_append (GTK_MENU (listDefaultPageSize_menu), glade_menuitem);
+       glade_menuitem = gtk_menu_item_new_with_label (_("B6"));
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_OPTION_PTR, 
+(gpointer) listDefaultPageSize);
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_VALUE_TAG, 
+(gpointer) fp_PageSize::B6);
+       CONNECT_MENU_ITEM_SIGNAL_ACTIVATE(glade_menuitem);
+       gtk_widget_show (glade_menuitem);
+       gtk_menu_append (GTK_MENU (listDefaultPageSize_menu), glade_menuitem);
+       glade_menuitem = gtk_menu_item_new_with_label (_("Folio"));
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_OPTION_PTR, 
+(gpointer) listDefaultPageSize);
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_VALUE_TAG, 
+(gpointer) fp_PageSize::Folio);
+       CONNECT_MENU_ITEM_SIGNAL_ACTIVATE(glade_menuitem);
+       gtk_widget_show (glade_menuitem);
+       gtk_menu_append (GTK_MENU (listDefaultPageSize_menu), glade_menuitem);
+       glade_menuitem = gtk_menu_item_new_with_label (_("Legal"));
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_OPTION_PTR, 
+(gpointer) listDefaultPageSize);
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_VALUE_TAG, 
+(gpointer) fp_PageSize::Legal);
+       CONNECT_MENU_ITEM_SIGNAL_ACTIVATE(glade_menuitem);
+       gtk_widget_show (glade_menuitem);
+       gtk_menu_append (GTK_MENU (listDefaultPageSize_menu), glade_menuitem);
+       glade_menuitem = gtk_menu_item_new_with_label (_("Letter"));
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_OPTION_PTR, 
+(gpointer) listDefaultPageSize);
+       /**/ gtk_object_set_data(GTK_OBJECT(glade_menuitem), WIDGET_MENU_VALUE_TAG, 
+(gpointer) fp_PageSize::Letter);
+       CONNECT_MENU_ITEM_SIGNAL_ACTIVATE(glade_menuitem);
+       gtk_widget_show (glade_menuitem);
+       gtk_menu_append (GTK_MENU (listDefaultPageSize_menu), glade_menuitem);
+       gtk_option_menu_set_menu (GTK_OPTION_MENU (listDefaultPageSize), 
+listDefaultPageSize_menu);
+       gtk_option_menu_set_history (GTK_OPTION_MENU (listDefaultPageSize), 16);
+
        labelSmartQuotes = gtk_label_new 
(pSS->getValue(AP_STRING_ID_DLG_Options_TabLabel_Other));
        gtk_widget_ref (labelSmartQuotes);
        gtk_object_set_data_full (GTK_OBJECT (windowOptions), "labelSmartQuotes", 
labelSmartQuotes,
@@ -650,6 +776,7 @@
        m_buttonSpellIgnoreReset                = buttonSpellIgnoreReset;
 
     m_checkbuttonSmartQuotesEnable     = checkbuttonSmartQuotesEnable;
+    m_listDefaultPageSize                      = listDefaultPageSize;
 
     m_checkbuttonPrefsAutoSave         = checkbuttonPrefsAutoSave;
        m_comboPrefsScheme                              = comboPrefsSchemes;
@@ -894,11 +1021,14 @@
                break;
 
        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-       // smart quotes
+       // other
        case id_CHECK_SMART_QUOTES_ENABLE:
                return m_checkbuttonSmartQuotesEnable;
                break;
 
+       case id_LIST_DEFAULT_PAGE_SIZE:
+               return m_listDefaultPageSize;
+
        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        // prefs
        case id_CHECK_PREFS_AUTO_SAVE:
@@ -1022,6 +1152,12 @@
        return (UT_Dimension)((gint)gtk_object_get_data( 
GTK_OBJECT(m_listViewRulerUnits), WIDGET_MENU_VALUE_TAG )); 
 }                      
 
+fp_PageSize::Predefined AP_UnixDialog_Options::_gatherDefaultPageSize(void)
+{
+       UT_ASSERT(m_listDefaultPageSize && GTK_IS_OPTION_MENU(m_listDefaultPageSize));
+       return (fp_PageSize::Predefined) ((gint)gtk_object_get_data( 
+GTK_OBJECT(m_listDefaultPageSize), WIDGET_MENU_VALUE_TAG ));
+}
+
 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 // This function will lookup a option box by the value stored in the 
 //     user data under the key WIDGET_MENU_VALUE_TAG
@@ -1055,6 +1191,9 @@
 {
        UT_ASSERT( option_menu && key && GTK_IS_OPTION_MENU(option_menu));
 
+       // at least make sure the value will be restored by the _gather
+       gtk_object_set_data( GTK_OBJECT(option_menu), key, value);
+
        // lookup for the key with the value of dim
        search_data data = { -1, -1, key, value };
 
@@ -1086,6 +1225,14 @@
        UT_ASSERT( r != -1 );
 }
 
+void AP_UnixDialog_Options::_setDefaultPageSize(fp_PageSize::Predefined pre)
+{
+       UT_ASSERT(m_listDefaultPageSize && GTK_IS_OPTION_MENU(m_listDefaultPageSize));
+
+       int r = option_menu_set_by_key ( m_listDefaultPageSize, (gpointer)pre, 
+WIDGET_MENU_VALUE_TAG );
+       UT_ASSERT( r != -1 );
+}
+
 DEFINE_GET_SET_BOOL    (ViewCursorBlink);
 
 DEFINE_GET_SET_BOOL    (ViewAll);
@@ -1194,7 +1341,9 @@
 
        gtk_object_set_data( GTK_OBJECT(option_menu), WIDGET_MENU_VALUE_TAG, p );
 
-       UT_DEBUGMSG(("s_menu_item_activate [%d %s]\n", p, UT_dimensionName( 
(UT_Dimension)((UT_uint32)p)) ) );
+       //TODO: This code is now shared between RulerUnits and DefaultPaperSize
+       //so anyone who wants to resurect this msg. needs to add a conditional
+       //UT_DEBUGMSG(("s_menu_item_activate [%d %s]\n", p, UT_dimensionName( 
+(UT_Dimension)((UT_uint32)p)) ) );
 
        return TRUE;
 }
diff -Naur abi-0.7.11/src/wp/ap/unix/ap_UnixDialog_Options.h 
abi/src/wp/ap/unix/ap_UnixDialog_Options.h
--- abi-0.7.11/src/wp/ap/unix/ap_UnixDialog_Options.h   Tue Jul 25 21:10:50 2000
+++ abi/src/wp/ap/unix/ap_UnixDialog_Options.h  Mon Dec  4 19:39:28 2000
@@ -55,6 +55,7 @@
        SET_GATHER                      (SpellInternet,         UT_Bool );
  
        SET_GATHER                      (SmartQuotesEnable,     UT_Bool );
+       SET_GATHER                      (DefaultPageSize,  fp_PageSize::Predefined);
  
        SET_GATHER                      (PrefsAutoSave,         UT_Bool );
  
@@ -102,6 +103,7 @@
        GtkWidget * m_buttonSpellIgnoreReset;
 
     GtkWidget * m_checkbuttonSmartQuotesEnable;
+    GtkWidget * m_listDefaultPageSize;
 
     GtkWidget * m_checkbuttonPrefsAutoSave;
        GtkWidget * m_comboPrefsScheme;
diff -Naur abi-0.7.11/src/wp/ap/win/ap_Win32Dialog_Options.cpp 
abi/src/wp/ap/win/ap_Win32Dialog_Options.cpp
--- abi-0.7.11/src/wp/ap/win/ap_Win32Dialog_Options.cpp Wed Jul 26 13:05:31 2000
+++ abi/src/wp/ap/win/ap_Win32Dialog_Options.cpp        Wed Dec  6 17:24:27 2000
@@ -690,3 +690,16 @@
 void    AP_Win32Dialog_Options::_setNotebookPageNum(int pn) 
 {
 }
+
+void   AP_Win32Dialog_Options::_setDefaultPageSize(fp_PageSize::Predefined pre)
+{
+       // FIXME: replace this with *real* gui code
+       defaultPageSize = pre;
+}
+
+fp_PageSize::Predefined AP_Win32Dialog_Options::_gatherDefaultPageSize(void)
+{
+       // FIXME: replace this with *real* gui code
+       return defaultPaperSize;
+}
+
diff -Naur abi-0.7.11/src/wp/ap/win/ap_Win32Dialog_Options.h 
abi/src/wp/ap/win/ap_Win32Dialog_Options.h
--- abi-0.7.11/src/wp/ap/win/ap_Win32Dialog_Options.h   Wed Jul 26 13:05:31 2000
+++ abi/src/wp/ap/win/ap_Win32Dialog_Options.h  Wed Dec  6 17:27:38 2000
@@ -54,6 +54,7 @@
        SET_GATHER                      (SpellInternet,         UT_Bool );
  
        SET_GATHER                      (SmartQuotesEnable,     UT_Bool ); 
+       SET_GATHER                      (DefaultPageSize,       
+fp_PageSize::Predefined ); 
 
        SET_GATHER                      (PrefsAutoSave,         UT_Bool );
  
@@ -85,6 +86,9 @@
 
        int                                                     m_nrSubDlgs;           
 // number of tabs on tab control
        UT_Vector                                       m_vecSubDlgHWnd;        // 
hwnd to each sub-dialog
+       
+       // FIXME: replace this with *real* gui code */
+       fp_PageSize::Predefined         defaultPageSize;
        
 };
 
diff -Naur abi-0.7.11/src/wp/ap/xp/ap_Dialog_Options.cpp 
abi/src/wp/ap/xp/ap_Dialog_Options.cpp
--- abi-0.7.11/src/wp/ap/xp/ap_Dialog_Options.cpp       Tue Aug  1 04:23:36 2000
+++ abi/src/wp/ap/xp/ap_Dialog_Options.cpp      Mon Dec  4 19:45:18 2000
@@ -156,6 +156,12 @@
                               (XML_Char*)UT_dimensionName( _gatherViewRulerUnits()) );
 
        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
+       // save default paper size
+       UT_ASSERT(sizeof(XML_Char) && sizeof(char));
+       pPrefsScheme->setValue((XML_Char*)XAP_PREF_KEY_DefaultPageSize,
+                              (XML_Char*)fp_PageSize::PredefinedToName( 
+_gatherDefaultPageSize()) );
+
+       // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
        // allow XAP_Prefs to notify all the listeners of changes
 
        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
@@ -212,6 +218,11 @@
        // ------------ Smart Quotes
        if (pPrefs->getPrefsValueBool((XML_Char*)XAP_PREF_KEY_SmartQuotesEnable,&b))
                _setSmartQuotesEnable (b);
+
+       if (pPrefs->getPrefsValue((XML_Char*)XAP_PREF_KEY_DefaultPageSize, 
+&pszBuffer)) {
+               UT_ASSERT(sizeof(XML_Char) == sizeof(char));
+               _setDefaultPageSize (fp_PageSize::NameToPredefined((char*) pszBuffer));
+       }
 
        // ------------ Prefs   
        _setPrefsAutoSave( pPrefs->getAutoSavePrefs() );
diff -Naur abi-0.7.11/src/wp/ap/xp/ap_Dialog_Options.h 
abi/src/wp/ap/xp/ap_Dialog_Options.h
--- abi-0.7.11/src/wp/ap/xp/ap_Dialog_Options.h Tue Jul 25 21:10:51 2000
+++ abi/src/wp/ap/xp/ap_Dialog_Options.h        Mon Dec  4 20:08:41 2000
@@ -25,6 +25,8 @@
 #include "xav_View.h"
 #include "ut_units.h"
 
+#include "fp_PageSize.h"
+
 class XAP_Frame;
 
 class AP_Dialog_Options : public XAP_Dialog_NonPersistent
@@ -47,7 +49,7 @@
                                   id_BUTTON_DICTIONARY_EDIT, id_BUTTON_IGNORE_RESET,
                                   id_BUTTON_IGNORE_EDIT,
 
-                                  id_CHECK_SMART_QUOTES_ENABLE,
+                                  id_CHECK_SMART_QUOTES_ENABLE, 
+id_LIST_DEFAULT_PAGE_SIZE,
 
                                   id_CHECK_PREFS_AUTO_SAVE, id_COMBO_PREFS_SCHEME,
 
@@ -99,6 +101,7 @@
        SET_GATHER                      (SpellInternet,         UT_Bool);
 
        SET_GATHER                      (SmartQuotesEnable,     UT_Bool);
+       SET_GATHER                      (DefaultPageSize,       
+fp_PageSize::Predefined);
 
        SET_GATHER                      (PrefsAutoSave,         UT_Bool);
 
diff -Naur abi-0.7.11/src/wp/ap/xp/ap_String_Id.h abi/src/wp/ap/xp/ap_String_Id.h
--- abi-0.7.11/src/wp/ap/xp/ap_String_Id.h      Mon Aug 21 04:06:41 2000
+++ abi/src/wp/ap/xp/ap_String_Id.h     Mon Dec  4 20:05:29 2000
@@ -196,6 +196,7 @@
 dcl(DLG_Options_Btn_IgnoreEdit,                        "&Edit")
 
 dcl(DLG_Options_Label_SmartQuotesEnable,"Enable smart quotes")
+dcl(DLG_Options_Label_DefaultPageSize, "Default page size")
 
 dcl(DLG_Options_Label_PrefsAutoSave,   "&Automatically save this Scheme")
 dcl(DLG_Options_Label_PrefsCurrentScheme,      "Current Preferences Scheme")

Reply via email to