ChooseLevelInPrefs/it
From Wiki.ooo4kids.org
|
Scegliere il livello nelle preferenze |
Tutte le varianti aggiunte al codice sorgente originale di OpenOffice.org contenute in questa pagina sono le seguenti:
- Sotto licenza LGPL V3 ( ...è possibile ridistribuirlo e/o modificarlo sotto i termini della GNU General Public License come pubblicato dalla Free Software Foundation)
- Copyright Eric Bachard 1 Settembre 2009
Grazie a Eike Rathke, Thorsten Behrens e Cédric Bosdonnat per queste importanti precisazioni.
Obiettivo
Specifiche
- Modificare le preferenze, per poter scegliere il livello utente, tra : iniziale, medio, esperto
- Pulsanti orizzontali : è attivo solo un pulsante
- L'impostazione di livello standard (al primo lancio di OOo4Kids) sarà iniziale
Come si vede sotto :
Esempi per l'uso
- In Calc, sono presenti tutte le funzioni ma non sono tutte elencate :
- livello iniziale: appariranno solo poche funzioni.
- livello medio: appariranno dalle 30 alle 40 funzioni.
- livello esperto: appariranno tutte le funzioni.
- In Writer (solo un'idea) : in base al livello si potranno mostrare più o meno le possibilità degli stili.
- Nella wizard di Writer, in base al livello potremmo mostare solo alcuni modelli oppure solo qualcos'altro.
- (aggiungi la tua idea )
Nel codice
Useremo le classi e le derivazioni nella MiscTabPage, per implementare le nuove opzioni.
Done :
- add the new objects in the OfaMiscTabPage contructor
- aUserLevelFL ( Fixed Line )
- aUserLevelBeginnerRB ( Radio Button )
- aUserLevelAverageRB ( Radio Button )
- aUserLevelExpertRB ( Radio Button )
- Declare them in the header file (optgdlg.hxx)
- Implement static methods (at the beginning) to:
- read the value, named UserLevel in the prefs, means in Common.xcu, in the Misc Node
- know the current active RadioButton
- Handle a Radio Button click ( will be a callback )
Tutto sembra funzionare : :
- la UI è ok
- il gruppo file .xcu sembra che lavori, i valori sono leggibili nel file Common.xcu, nella directory $SYSUSERCONFIG
- l'inizializzazione dei pulsanti è OK
- la lettura dei valori di configurazione è OK
- click, e il nuovo pulsante si attiva (soltanto uno alla volta) è OK
- partenza con un valore dato: inizializzazione ok, con tutte le scelte OK
- scrittura del valore nelle preferenze OK
- verifica del valore modificato: convalida della modificae, click OK, riapertura delle preferenze e controllo permanenza modifica: OK
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:
- svx/source/cui/optgdlg.src : contiene la finestra di dialogo che distribuisce il tutto (pulsanti, liste .. e così via)
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 ) ) ;
- svx/source/cui/optgdlg.hxx : inizializzatore della finestra di dialogo opzioni
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 );
- svx/source/cui/optgdlg.hrc : contiene le costanti predefinite
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
- svx/source/cui/optgdlg.cxx : implementation od the dialog box, and, for instance of our UserLevelSettings class
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
- Common.xcs will contain the schema i.e. prototype of the value
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>
- Common.xcu will contain the initial value "beginner"
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">
- Setup.cxu will contain the path in "Misc" node, for the value "UserLevel" in the prefs
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)
