ChooseLevelInPrefs/fi

Kaikki alkuperäiseen OpenOffice.org-lähdekoodiin tällä sivulla esitetyt muutokset ovat:


 * '''LGPLv3-käyttöoikeuden alaisia ( ja voit jakaa ja/tai muokata lähdekoodia Free Software Foundation -säätiön jukaisemien GNU Lesser General Public License -ehtojen rajoissa)
 * Tekijänoikeudet: Eric Bachard, 1. syyskuuta 2009

Eike Rathke, Thorsten Behrens and Cédric Bosdonnat saavat kiitoksen arvokkaista neuvoistaan.

Määrittelyt

 * Muokataan asetuksia niin, niin että voidaan valita käyttäjätasot: aloittelija, keskitasoinen, erikoistunut
 * Vaakarivi valintanappeja: vain yksi nappi on aktiivinen
 * Oletuksena (ensimmäisellä OOo4Kidsin käynnistyskerralla) on Alkaja

Kuten kuvasta näkyy:



Esimerkkejä käytöstä

 * Calcissa kaikki funktiot ovat käytettävissä, mutta eivät luettelossa näkyvissä:
 * kun aloittelija-taso on valittu, funktioluettelossa näkyy vain muutamia funktioita.
 * keskitasoinen tarkoittaa, että 30...40 funktiota on näkyvissä luettelossa
 * erikoistunut: luettelossa näkyy kaikki funktiot


 * Writerissa (vasta ideana): tasosta riippuen voidaan esittää enemmän tai vähemmän tyylivaihtoehtoja


 * Writer-avustimessa voidaan tasosta riippuen esittää joitakin malleja tms.


 * (lisää oma ideasi)

Koodissa
Uuden asetuksen toteuttamiseen käytämme MiscTabPage-luokkaa ja periytämme.

Tehty :
 * lisätään uudet oliot OfaMiscTabPage-muodostimeen
 * aUserLevelFL ( yhtenäinen viiva )
 * aUserLevelBeginnerRB ( valintanappi )
 * aUserLevelAverageRB ( valintanappi )
 * aUserLevelExpertRB ( valintanappi )
 * Esitellään nämä otsikkotiedostossa (optgdlg.hxx)
 * Toteutetaan staattiset metodit (aluksi), joilla:
 * luetaan Osaamistasoksi asetuksissa nimetty arvo Common.xcu:sta, Misc-solmusta
 * tunnistetaan ajankohdan aktiivinen valintanappi
 * käsitellään valintanapin napsautus ( tapahtuu takaisinkutsulla )

Kaikki näyttää toimivan: 


 * käyttöliittymä: ok
 * .xcu näyttää toimivan ja arvo on luettavissa Common.xcu-tiedostossa, $SYSUSERCONFIG-hakemistossa
 * napin alustus: OK
 * arvon lukeminen asetuksista: OK
 * napsauta ja katso, että uuden napin aktivoituminnen (vain yksi kerrallaan) on OK
 * aloita annetulla arvolla: alustus on ok, kaikki vaihtoehdot todennettu: OK
 * arvon kirjoittaminen asetuksiin: OK
 * todenna arvon muutos: kelpuuta muutos, napsauta OK-painiketta, avaa asetukset uudestaan ja muutos on edelleen voimassa: OK

Ole ystävällinen ja raportoi kaikista löytämistäsi virheistä.

Moduuli: svx
Asetuksista miltei kaikki sijaitsevan svx:ssa (loput ovat sfx2/source/dialog:ssa) ja svx/source/cui/optgdlg.hrc:ssa on tärkeitä tietoja, kuten sarakkeiden ja rivien ulottuvuudet. svx/source/cui/optgdlg.src on paikka, jossa varmennetaan, että se toimii

Asiaan kuuluvat tiedostot:


 * svx/source/cui/optgdlg.src : sisältää valintaikkunoiden kaikki osat (painikkeet, luettelot .. jne )

Index: svx/source/cui/optgdlg.src

=
====================================================== --- svx/source/cui/optgdlg.src	(revision 275641) +++ svx/source/cui/optgdlg.src	(working copy) @@ -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 : asetusvalintaikkunan otsikkotiedosto

Index: svx/source/cui/optgdlg.hxx

=
====================================================== --- svx/source/cui/optgdlg.hxx	(revision 275641) +++ svx/source/cui/optgdlg.hxx	(working copy) @@ -38,6 +38,13 @@ +#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 );
 * 1) include 
 * 2) define FOLDERWEBVIEW_DEFAULTFILE  "folder.so"

Index: svx/source/cui/optgdlg.hrc
 * svx/source/cui/optgdlg.hrc : sisältää esimääriteltyjä vakioita

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

Index: svx/source/cui/optgdlg.cxx
 * svx/source/cui/optgdlg.cxx : valintaikkunan toteutus ja esimerkiksi meidän UserLevelSettings-luokka

=
====================================================== --- svx/source/cui/optgdlg.cxx	(revision 275641) +++ svx/source/cui/optgdlg.cxx	(working copy) @@ -106,6 +106,10 @@ +#ifdef OOo4Kids +#include "vcl/unohelp.hxx" +#endif + @@ -127,6 +131,94 @@ +#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 + // --- // ---
 * 1) include 
 * 1) include "optgdlg.hrc"
 * 2) include "optgdlg.hxx"
 * 3) include "ofaitem.hxx"
 * 1) define MAX_PROGRAM_ENTRIES		3

Näyttäisi, että meillä on kaikki napit oikeilla paikoillaan. Ensimmäinen idea (josta voidaan keskustella) on:

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

Taso   : Alkaja [X]                 Osaaja    [ ]                 Taituri   [ ]

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

Moduuli: officecfg

 * Common.xcs tulee sisältämään mallin eli arvon prototyypin

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 @@ 				 false +			 +				 +					 ericb +					 Determines the level of difficulty of the features presented to the user +				 +				 1 +			 			


 * Common.xcu tulee sisältämään aloitusarvon "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 @@     true +    +     1 +        


 * Setup.cxu tulee sisältämään polun "Misc"-solmuun, "UserLevel/Osaamistaso"-arvolle asetuksissa

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

Käyttöönoton aputekijät (vain käyttöliittymä)
Välilehden uudelleen järjestelemisessä allaolevat arvot ovat suureksi avuksi:


 * 1) define WHOLE_WIDTH				248
 * 2) define EDIT_WIDTH				30
 * 3) define UNIT_WIDTH				40


 * 1) define COLSPACE				RSC_SP_CTRL_DESC_X
 * 2) define COL0					6
 * 3) define COL1					(COL0+6)
 * 4) define COL2					(COL1+10)
 * 5) define COL3					(COL2+100)
 * 6) define COL4					(COL3+COLSPACE)
 * 7) define COL5					(COL4+EDIT_WIDTH)
 * 8) define COL6					(COL5+COLSPACE)


 * 1) define ROWSPACE				RSC_SP_CTRL_DESC_Y
 * 2) define ROW0					3
 * 3) define ROW1					(ROW0+RSC_CD_FIXEDLINE_HEIGHT+ROWSPACE)
 * 4) define ROW2					(ROW1+RSC_CD_CHECKBOX_HEIGHT+ROWSPACE)
 * 5) define ROW3					(ROW2+RSC_CD_CHECKBOX_HEIGHT+ROWSPACE)
 * 6) define ROW4					(ROW3+RSC_CD_CHECKBOX_HEIGHT+ROWSPACE)
 * 7) define ROW5                   (ROW4+RSC_CD_PUSHBUTTON_HEIGHT+ROWSPACE)
 * 8) define ROW6                   (ROW5+RSC_CD_DROPDOWN_HEIGHT+ROWSPACE)
 * 9) define ROW7					(ROW6+RSC_CD_FIXEDLINE_HEIGHT+ROWSPACE)
 * 10) define ROW8					(ROW7+RSC_CD_CHECKBOX_HEIGHT+ROWSPACE)
 * 11) define ROW9					(ROW8+RSC_CD_FIXEDLINE_HEIGHT+ROWSPACE)
 * 12) define ROW10					(ROW9+RSC_CD_CHECKBOX_HEIGHT+ROWSPACE)
 * 13) define ROW11					(ROW10+RSC_CD_FIXEDLINE_HEIGHT+ROWSPACE)