/**************************************************************
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 *
 *************************************************************/



// include --------------------------------------------------------------

#include "optimprove.hrc"
#include <cuires.hrc>
#include "helpid.hrc"
#include <svx/dialogs.hrc>

TabPage RID_SVXPAGE_IMPROVEMENT
{
        HelpId = "cui:TabPage:RID_SVXPAGE_IMPROVEMENT" ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Hide = TRUE ;
	Size = MAP_APPFONT ( 260 , 185 ) ;
    Text [ en-US ] = "%PRODUCTNAME Improvement Program" ;
    FixedLine FL_IMPROVE
    {
        Pos = MAP_APPFONT ( 6 , 3 ) ;
        Size = MAP_APPFONT ( 248 , 8 ) ;
        Text [ en-US ] = "Improvement Program" ;
    };
    FixedText FT_INVITATION
	{
		Pos = MAP_APPFONT ( 12 , 14 ) ;
        Size = MAP_APPFONT ( 242 , 72 ) ;
        WordBreak = TRUE ;
        Text [ en-US ] = "We invite you to join our %PRODUCTNAME Improvement Program to help optimize the quality of %PRODUCTNAME.\n\nIf you are willing to participate, we will collect anonymous statistics about how you use %PRODUCTNAME. The data is used to identify usage patterns.\n\nThe %PRODUCTNAME Improvement Program will not collect any personal data, or document content." ;
	};
    RadioButton RB_YES
    {
        HelpID = "cui:RadioButton:RID_SVXPAGE_IMPROVEMENT:RB_YES";
        Pos = MAP_APPFONT ( 12 , 92 ) ;
        Size = MAP_APPFONT ( 215 , 10 ) ;
        Check = TRUE ;
        Text [ en-US ] = "~Yes, I am willing to participate in the %PRODUCTNAME Improvement Program" ;
    };
    RadioButton RB_NO
    {
        HelpID = "cui:RadioButton:RID_SVXPAGE_IMPROVEMENT:RB_NO";
        Pos = MAP_APPFONT ( 12 , 105 ) ;
        Size = MAP_APPFONT ( 215 , 10 ) ;
        Text [ en-US ] = "~No, I do not wish to participate" ;
    };
    FixedImage FI_INFO
    {
        Pos = MAP_APPFONT ( 230 , 91 ) ;
        Size = MAP_APPFONT ( 24 , 24 ) ;
        Fixed = Image
        {
            ImageBitmap = Bitmap { File = "info.png"; };
		};
    };
    FixedLine FL_DATA
    {
        Pos = MAP_APPFONT ( 6 , 121 ) ;
        Size = MAP_APPFONT ( 248 , 8 ) ;
        Text [ en-US ] = "Tracked Data" ;
    };
    FixedText FT_NR_REPORTS
    {
        Pos = MAP_APPFONT ( 12 , 132 ) ;
        Size = MAP_APPFONT ( 96 , 8 ) ;
        Text [ en-US ] = "Number of reports sent:" ;
    };
    FixedText FT_NR_REPORTS_VALUE
    {
        Pos = MAP_APPFONT ( 111 , 132 ) ;
        Size = MAP_APPFONT ( 100 , 10 ) ;
    };
    FixedText FT_NR_ACTIONS
    {
        Pos = MAP_APPFONT ( 12 , 145 ) ;
        Size = MAP_APPFONT ( 96 , 8 ) ;
        Text [ en-US ] = "Number of tracked actions:" ;
    };
    FixedText FT_NR_ACTIONS_VALUE
    {
        Pos = MAP_APPFONT ( 111 , 145 ) ;
        Size = MAP_APPFONT ( 100 , 10 ) ;
    };
    PushButton PB_SHOWDATA
	{
        HelpID = "cui:PushButton:RID_SVXPAGE_IMPROVEMENT:PB_SHOWDATA";
        Pos = MAP_APPFONT ( 12 , 161 ) ;
        Size = MAP_APPFONT ( 60 , 14 ) ;
        Text [ en-US ] = "~Show Data" ;
	};
    String STR_INFO
    {
        Text [ en-US ] = "Help Optimize the Quality of %PRODUCTNAME" ;
    };
    String STR_MOREINFO
    {
        Text [ en-US ] = "More Information" ;
    };
};
