ChooseLevelInPrefs/it

From Wiki.ooo4kids.org

Jump to: navigation, search

DRF Back alt.png OOo4Kids

Scegliere il livello nelle preferenze



Tutte le varianti aggiunte al codice sorgente originale di OpenOffice.org contenute in questa pagina sono le seguenti:

Grazie a Eike Rathke, Thorsten Behrens e Cédric Bosdonnat per queste importanti precisazioni.


Obiettivo

Specifiche

Come si vede sotto :

UserLevel UI 3.png



Esempi per l'uso

Nel codice

Useremo le classi e le derivazioni nella MiscTabPage, per implementare le nuove opzioni.

Done :

Tutto sembra funzionare :  :

Perfavore riportateci ogni issue che incontrate.

Modulo : svx

Per le preferenze, praticcamente tutto è dislocato nel modulo svx (altre sono in sfx2/source/dialog), il file svx/source/cui/optgdlg.hrc contiene una grande quantità di informazioni utili, come ad esempio il numero di linne, colonne e dimensioni. Il file svx/source/cui/optgdlg.src è invece il contenitore dove verificare che le modifiche abbiano avuto effetto

File inerenti:


Index: svx/source/cui/optgdlg.src
===================================================================
--- svx/source/cui/optgdlg.src	(revision 275641)
+++ svx/source/cui/optgdlg.src	(copia di lavoro)
@@ -41,49 +41,49 @@
 
 TabPage OFA_TP_MISC
 {
-	HelpID = HID_OFA_TP_MISC ;
-	SVLook = TRUE ;
-	Size = MAP_APPFONT ( 260 , 185 ) ;
-	Hide = TRUE ;
+    HelpID = HID_OFA_TP_MISC ;
+    SVLook = TRUE ;
+    Size = MAP_APPFONT ( 260, 185 ) ;
+    Hide = TRUE ;
     FixedLine FL_HELP
     {
-		Pos = MAP_APPFONT( COL0, ROW0 );
-		Size = MAP_APPFONT( WHOLE_WIDTH, RSC_CD_FIXEDLINE_HEIGHT );
-		Text [ en-US ] = "Help";
-	};
-	CheckBox CB_TOOLTIP
-	{
-		Pos = MAP_APPFONT( COL1, ROW1 );
-		Size = MAP_APPFONT( WHOLE_WIDTH - COL1, RSC_CD_CHECKBOX_HEIGHT );
-		Text [ en-US ] = "~Tips";
-	};
-	CheckBox CB_EXTHELP
-	{
-		Pos = MAP_APPFONT( COL2, ROW2 );
-		Size = MAP_APPFONT( WHOLE_WIDTH - COL2, RSC_CD_CHECKBOX_HEIGHT );
-		Text [ en-US ] = "~Extended tips";
-	};
-	CheckBox CB_HELPAGENT
-	{
-		Pos = MAP_APPFONT( COL1, ROW3 );
-		Size = MAP_APPFONT( WHOLE_WIDTH - COL1, RSC_CD_CHECKBOX_HEIGHT );
-		Text [ en-US ] = "~Help Agent";
-	};
+	Pos = MAP_APPFONT( COL0, ROW0 );
+	Size = MAP_APPFONT( WHOLE_WIDTH, 10 );
+	Text [ en-US ] = "Help";
+    };
+    CheckBox CB_TOOLTIP
+    {
+        Pos = MAP_APPFONT ( COL1, ROW1 ) ;
+		Size = MAP_APPFONT ( 60, 10 ) ;
+	Text [ en-US ] = "~Tips";
+    };
+    CheckBox CB_EXTHELP
+    {
+        Pos = MAP_APPFONT ( COL1 + 60, ROW1 ) ;
+		Size = MAP_APPFONT ( 60, 10 ) ;
+	Text [ en-US ] = "~Extended tips";
+    };
+    CheckBox CB_HELPAGENT
+    {
+	Pos = MAP_APPFONT( COL1 + 120, ROW1 );
+		Size = MAP_APPFONT ( 60, 10 ) ;
+	Text [ en-US ] = "~Help Agent";
+    };
     PushButton PB_HELPAGENT_RESET
     {
-		Pos = MAP_APPFONT( COL2, ROW4 );
-		Size = MAP_APPFONT( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT );
-		Text [ en-US ] = "~Reset Help Agent";
-	};
+	Pos = MAP_APPFONT( COL1 + 180, ROW1 );
+	Size = MAP_APPFONT( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT );
+	Text [ en-US ] = "~Reset Help Agent";
+    };
     FixedText FT_HELPFORMAT
     {
-        Pos = MAP_APPFONT( COL1, OFFS_TEXTBOX_FIXEDTEXT(ROW5) );
+        Pos = MAP_APPFONT( COL1, ROW3 );
         Size = MAP_APPFONT( DIFF( COL1, COL3 ), RSC_CD_FIXEDTEXT_HEIGHT );
         Text [ en-US ] = "Help ~formatting";
 	};
     ListBox LB_HELPFORMAT
     {
-        Pos = MAP_APPFONT( COL4, ROW5 );
+        Pos = MAP_APPFONT( COL4, ROW3 );
         Size = MAP_APPFONT( WHOLE_WIDTH - COL4, 50 );
         DropDown = TRUE ;
 		Border = TRUE ;
@@ -97,6 +97,38 @@
             < "High Contrast White" ; > ;
         };
 	};
+    FixedLine FL_USERLEVEL
+    {
+	Pos = MAP_APPFONT( COL0, ROW4 );
+	Size = MAP_APPFONT( WHOLE_WIDTH, 10 );
+	Text [ en-US ] = "User Level";
+	Text [ fr ] = "Niveau";
+    };
+    RadioButton RB_USERLEVEL_BEGINNER
+    {
+        TabStop = TRUE;
+        Pos = MAP_APPFONT ( COL1, ROW5 ) ;
+		Size = MAP_APPFONT ( 60, 10 ) ;
+        Text [ en-US ] = "Beginner";
+        Text [ fr ] = "Débutant";
+    };
+    RadioButton RB_USERLEVEL_AVERAGE
+    {
+		TabStop = TRUE;
+        Pos = MAP_APPFONT ( COL1 + 60, ROW5 ) ;
+		Size = MAP_APPFONT ( 60, 10 ) ;
+        Text [ en-US ] = "Average";
+        Text [ fr ] = "Moyen";
+    };
+    RadioButton RB_USERLEVEL_EXPERT
+    {
+		TabStop = TRUE;
+        Pos = MAP_APPFONT( COL1 + 120, ROW5 );
+		Size = MAP_APPFONT ( 60, 10 ) ;
+        Text [ en-US ] = "Expert";
+        Text [ fr ] = "Expert";
+    };
+
     FixedLine FL_FILEDLG
     {
         Pos = MAP_APPFONT( COL0, ROW6 );
@@ -177,16 +209,17 @@
 
 TabPage OFA_TP_VIEW
 {
-	HelpID = HID_OFA_TP_VIEW ;
-	SVLook = TRUE ;
-	Size = MAP_APPFONT ( 260 , 185 ) ;
-	Hide = TRUE ;
+    HelpID = HID_OFA_TP_VIEW ;
+    SVLook = TRUE ;
+    Size = MAP_APPFONT ( 260 , 185 ) ;
+    Hide = TRUE ;
     FixedLine FL_USERINTERFACE
-	{
-		Pos = MAP_APPFONT ( 6 , ROW0 ) ;
-        Size = MAP_APPFONT ( 120 , 8 ) ;
-        Text [ en-US ] = "User Interface" ;
+    {
+	Pos = MAP_APPFONT ( 6 , ROW0 ) ;
+	Size = MAP_APPFONT ( 120 , 8 ) ;
+	Text [ en-US ] = "User Interface" ;
     };
+
     FixedText FT_WINDOWSIZE
 	{
         Pos = MAP_APPFONT ( 12 , OFFS_TEXTBOX_FIXEDTEXT( ROW_MF_SCALING ) ) ;


Index: svx/source/cui/optgdlg.hxx
===================================================================
--- svx/source/cui/optgdlg.hxx	(revision 275641)
+++ svx/source/cui/optgdlg.hxx	(copia di lavoro)
@@ -38,6 +38,13 @@
 #include <readonlyimage.hxx>
 #define FOLDERWEBVIEW_DEFAULTFILE   "folder.so"
 
+#if defined( OOo4Kids )
+#define USER_LEVEL_BEGINNER 1
+#define USER_LEVEL_AVERAGE  2
+#define USER_LEVEL_EXPERT   3
+#endif
+
+
 // predeclarations
 class CanvasSettings;
 class SvtOptionsDrawinglayer;
@@ -55,7 +62,12 @@
 	PushButton          aHelpAgentResetBtn;
     FixedText           aHelpFormatFT;
     ListBox             aHelpFormatLB;
-
+#ifdef OOo4Kids
+	FixedLine	aUserLevelFL;
+	RadioButton	aUserLevelBeginnerRB;
+	RadioButton	aUserLevelAverageRB;
+	RadioButton	aUserLevelExpertRB;
+#endif
     FixedLine           aFileDlgFL;
     ReadOnlyImage       aFileDlgROImage;
 	CheckBox            aFileDlgCB;
@@ -77,6 +89,9 @@
 	DECL_LINK( TwoFigureConfigHdl, NumericField* );
 	DECL_LINK( HelpCheckHdl_Impl, CheckBox* );
 	DECL_LINK( HelpAgentResetHdl_Impl, PushButton* );
+#ifdef OOo4Kids
+	DECL_LINK( UserLevelCheckHdl_Impl, RadioButton* pButton );
+#endif
 protected:
 	virtual int         DeactivatePage( SfxItemSet* pSet = NULL );
 

Index: svx/source/cui/optgdlg.hrc
===================================================================
--- svx/source/cui/optgdlg.hrc	(revision 275641)
+++ svx/source/cui/optgdlg.hrc	(copia lavoro)
@@ -202,6 +202,12 @@
 #define FT_HELPAGENT_TIME_UNIT      59
 #define FL_DOCSTATUS                60
 #define CB_DOCSTATUS                61
+
+#define FL_USERLEVEL                62
+#define RB_USERLEVEL_BEGINNER		63
+#define RB_USERLEVEL_AVERAGE		64
+#define RB_USERLEVEL_EXPERT         65
+
 #endif // #ifndef _SVX_OPTGDLG_HRC
 
 // ******************************************************************* EOF

Index: svx/source/cui/optgdlg.cxx
===================================================================
--- svx/source/cui/optgdlg.cxx	(revision 275641)
+++ svx/source/cui/optgdlg.cxx	(working copy)
@@ -106,6 +106,10 @@
 
 #include <vcl/svapp.hxx>
 
+#ifdef OOo4Kids
+#include "vcl/unohelp.hxx"
+#endif
+
 #include "optgdlg.hrc"
 #include "optgdlg.hxx"
 #include "ofaitem.hxx"
@@ -127,6 +131,94 @@
 
 #define MAX_PROGRAM_ENTRIES		3
 
+#ifdef OOo4Kids
+static const OUString sULConfigSrvc( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationProvider" ) );
+static const OUString sULAccessSrvc( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationUpdateAccess" ) );
+
+static short getUserLevel()
+{
+    short dUserLevel = 1; // default is beginner 
+    try
+    {
+	// get service provider
+        Reference< XMultiServiceFactory > xSMgr( vcl::unohelper::GetMultiServiceFactory() );
+        // create configuration hierachical access name
+        if( xSMgr.is() )
+	{
+	    try
+            {
+                Reference< XMultiServiceFactory > xConfigProvider(
+                    Reference< XMultiServiceFactory >(
+                        xSMgr->createInstance( sULConfigSrvc ),
+                        UNO_QUERY )
+                    );
+                if( xConfigProvider.is() )
+                {
+                    Sequence< Any > aArgs(1);
+                    PropertyValue aVal;
+                    aVal.Name = OUString( RTL_CONSTASCII_USTRINGPARAM( "nodepath" ) );
+                    aVal.Value <<= OUString( RTL_CONSTASCII_USTRINGPARAM( "/org.openoffice.Office.Common/Misc" ) );
+                    aArgs.getArray()[0] <<= aVal;
+                    Reference< XNameAccess > xConfigAccess(
+                        Reference< XNameAccess >(
+                            xConfigProvider->createInstanceWithArguments( sULAccessSrvc, aArgs ), UNO_QUERY )
+                        );
+                    if( xConfigAccess.is() )
+                    {
+                        try
+                        {
+                            short bValue = 1;
+                            Any aAny = xConfigAccess->getByName( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "UserLevel" ) ) );
+                            if( aAny >>= bValue )
+                                dUserLevel = bValue;
+                        }
+                        catch( NoSuchElementException& )
+                        {
+                        }
+                        catch( WrappedTargetException& )
+                        {
+                        }
+                    }
+                }
+            }
+            catch( Exception& )
+            {
+            }
+        }
+    }
+    catch( WrappedTargetException& )
+    {
+    }
+    return dUserLevel;
+}
+
+static void setUserLevel( short nLevel )
+{
+    try
+    {
+        Reference < XMultiServiceFactory > xFactory = ::comphelper::getProcessServiceFactory();
+        // get configuration provider
+        Reference< XMultiServiceFactory > theConfigProvider = Reference< XMultiServiceFactory >(
+        xFactory->createInstance(sULConfigSrvc), UNO_QUERY_THROW);
+        Sequence< Any > theArgs(1);
+        NamedValue v(OUString::createFromAscii("NodePath"),
+            makeAny(OUString::createFromAscii("org.openoffice.Office.Common/Misc")));
+        theArgs[0] <<= v;
+        Reference< XPropertySet > pset = Reference< XPropertySet >(
+            theConfigProvider->createInstanceWithArguments(sULAccessSrvc, theArgs), UNO_QUERY_THROW);
+
+        Any result = pset->getPropertyValue(OUString::createFromAscii("UserLevel"));
+
+        pset->setPropertyValue(OUString::createFromAscii("UserLevel"), makeAny(nLevel));
+        Reference< XChangesBatch >(pset, UNO_QUERY_THROW)->commitChanges();
+    }
+    catch( Exception& )
+    {
+    }
+}
+#endif // OOo4Kids
+
 // class OfaMiscTabPage --------------------------------------------------
 
 int OfaMiscTabPage::DeactivatePage( SfxItemSet* pSet_ )
@@ -212,6 +304,12 @@
 	aHelpAgentResetBtn	( this, SVX_RES( PB_HELPAGENT_RESET ) ),
 	aHelpFormatFT		( this, SVX_RES( FT_HELPFORMAT ) ),
 	aHelpFormatLB		( this, SVX_RES( LB_HELPFORMAT ) ),
+#ifdef OOo4Kids
+	aUserLevelFL        ( this, SVX_RES( FL_USERLEVEL ) ),
+	aUserLevelBeginnerRB  ( this, SVX_RES( RB_USERLEVEL_BEGINNER ) ),
+	aUserLevelAverageRB   ( this, SVX_RES( RB_USERLEVEL_AVERAGE ) ),
+	aUserLevelExpertRB    ( this, SVX_RES( RB_USERLEVEL_EXPERT ) ),
+#endif
 	aFileDlgFL			( this, SVX_RES( FL_FILEDLG ) ),
     aFileDlgROImage     ( this, SVX_RES( FI_FILEDLG_RO ) ),
 	aFileDlgCB			( this, SVX_RES( CB_FILEDLG ) ),
@@ -227,11 +325,20 @@
 {
 	FreeResource();
 
+    //system fileopen only available in Windows and with gtk vclplug based
+    //picker and on MacOSX (aqua version)
+#if !defined( WNT ) && !defined( ENABLE_GTK ) && !( defined(MACOSX) && defined(QUARTZ) )
+    aFileDlgFL.Hide();
+    aFileDlgCB.Hide();
+#else
+#	ifdef ENABLE_GTK
 	if (!lcl_HasSystemFilePicker())
 	{
         aFileDlgFL.Hide();
         aFileDlgCB.Hide();
 	}
+#	endif
+#endif
 
     #if ! defined(QUARTZ)
     aPrintDlgFL.Hide();
@@ -310,6 +417,28 @@
 	aHelpAgentCB.SetClickHdl( aLink );
 	aHelpAgentResetBtn.SetClickHdl( LINK( this, OfaMiscTabPage, HelpAgentResetHdl_Impl ) );
 
+#ifdef OOo4Kids
+    aUserLevelBeginnerRB.SetClickHdl( LINK( this, OfaMiscTabPage, UserLevelCheckHdl_Impl ));
+    aUserLevelAverageRB.SetClickHdl( LINK( this, OfaMiscTabPage, UserLevelCheckHdl_Impl ));
+    aUserLevelExpertRB.SetClickHdl( LINK( this, OfaMiscTabPage, UserLevelCheckHdl_Impl ));
+
+    // initialize the Radio button (User Level)
+    switch ( getUserLevel() )
+    {
+        case USER_LEVEL_BEGINNER:
+            aUserLevelBeginnerRB.SetState( TRUE );
+            break;
+        case USER_LEVEL_AVERAGE:
+            aUserLevelAverageRB.SetState( TRUE );
+            break;    
+        case USER_LEVEL_EXPERT:
+            aUserLevelExpertRB.SetState( TRUE );
+            break;
+        default:
+            break;
+    }
+#endif // OOo4Kids
+
     //fill default names as user data
     static const char* aHelpFormatNames[] =
 	{
@@ -502,6 +631,30 @@
 	return 0;
 }
 
+#ifdef OOo4Kids
+IMPL_LINK( OfaMiscTabPage, UserLevelCheckHdl_Impl, RadioButton*, pButton )
+{
+	(void) pButton;
+    if ( aUserLevelExpertRB.IsChecked() )
+        setUserLevel( USER_LEVEL_EXPERT );
+    else if ( aUserLevelAverageRB.IsChecked() )
+        setUserLevel( USER_LEVEL_AVERAGE );
+   else
+        setUserLevel( USER_LEVEL_BEGINNER );
+
+
+	return 0;
+}
+#endif // OOo4Kids
+
 // -----------------------------------------------------------------------
 
 // -------------------------------------------------------------------

For the look, we'll have to place the right position of every button. The first (to be debated) idea is :

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

Level  :

Beginner [X] Average [ ] Expert [ ]


""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""


Module : officecfg

Index: officecfg/registry/schema/org/openoffice/Office/Common.xcs
===================================================================
--- officecfg/registry/schema/org/openoffice/Office/Common.xcs	(revision 275641)
+++ officecfg/registry/schema/org/openoffice/Office/Common.xcs	(working copy)
@@ -5697,6 +5697,13 @@
 				</info>
 				<value>false</value>
 			</prop>
+			<prop oor:name="UserLevel" oor:type="xs:short">
+				<info>
+					<author>ericb</author>
+					<desc> Determines the level of difficulty of the features presented to the user</desc>
+				</info>
+				<value>1</value>
+			</prop>
 			<prop oor:name="SymbolSet" oor:type="xs:short">
 				<!-- UIHints: Tools  Options General View -->
 				<info>

Index: officecfg/registry/data/org/openoffice/Office/Common.xcu
===================================================================
--- officecfg/registry/data/org/openoffice/Office/Common.xcu	(revision 275641)
+++ officecfg/registry/data/org/openoffice/Office/Common.xcu	(working copy)
@@ -547,6 +547,9 @@
     <prop oor:name="UseSystemPrintDialog"  install:module="macosx">
       <value>true</value>
     </prop>
+    <prop oor:name="UserLevel" oor:type="xs:short">
+      <value>1</value>
+    </prop>
   </node>
   <node oor:name="Save">
     <node oor:name="Document">
Index: officecfg/registry/data/org/openoffice/Setup.xcu
===================================================================
--- officecfg/registry/data/org/openoffice/Setup.xcu	(revision 275641)
+++ officecfg/registry/data/org/openoffice/Setup.xcu	(working copy)
@@ -838,6 +838,7 @@
             org.openoffice.Office.Common/Misc/SymbolSet
             org.openoffice.Office.Common/Misc/UseSystemFileDialog
             org.openoffice.Office.Common/Misc/UseSystemPrintDialog
+            org.openoffice.Office.Common/Misc/UserLevel
             org.openoffice.Office.Common/Misc/SymbolStyle
             org.openoffice.Office.Common/Passwords
             org.openoffice.Office.Common/Print/PrintingModifiesDocument


Helpers for the implementation (UI only)

To reorganize the tab, the values below will be very helpfull:

#define WHOLE_WIDTH				248
#define EDIT_WIDTH				30
#define UNIT_WIDTH				40

#define COLSPACE				RSC_SP_CTRL_DESC_X
#define COL0					6
#define COL1					(COL0+6)
#define COL2					(COL1+10)
#define COL3					(COL2+100)
#define COL4					(COL3+COLSPACE)
#define COL5					(COL4+EDIT_WIDTH)
#define COL6					(COL5+COLSPACE)

#define ROWSPACE				RSC_SP_CTRL_DESC_Y
#define ROW0					3
#define ROW1					(ROW0+RSC_CD_FIXEDLINE_HEIGHT+ROWSPACE)
#define ROW2					(ROW1+RSC_CD_CHECKBOX_HEIGHT+ROWSPACE)
#define ROW3					(ROW2+RSC_CD_CHECKBOX_HEIGHT+ROWSPACE)
#define ROW4					(ROW3+RSC_CD_CHECKBOX_HEIGHT+ROWSPACE)
#define ROW5                    (ROW4+RSC_CD_PUSHBUTTON_HEIGHT+ROWSPACE)
#define ROW6                    (ROW5+RSC_CD_DROPDOWN_HEIGHT+ROWSPACE)
#define ROW7					(ROW6+RSC_CD_FIXEDLINE_HEIGHT+ROWSPACE)
#define ROW8					(ROW7+RSC_CD_CHECKBOX_HEIGHT+ROWSPACE)
#define ROW9					(ROW8+RSC_CD_FIXEDLINE_HEIGHT+ROWSPACE)
#define ROW10					(ROW9+RSC_CD_CHECKBOX_HEIGHT+ROWSPACE)
#define ROW11					(ROW10+RSC_CD_FIXEDLINE_HEIGHT+ROWSPACE)

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox