/**************************************************************
 * 
 * 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 "protectiondlg.hrc"

ModalDialog RID_SCDLG_TABPROTECTION
{
    HelpID = "sc:ModalDialog:RID_SCDLG_TABPROTECTION";
    Text [ en-US ] = "Protect Sheet" ;
    Size = MAP_APPFONT ( 220 , 135 ) ;
    Moveable = TRUE ;
    Closeable = TRUE ;

    OKButton BTN_OK
    {
        Pos = MAP_APPFONT ( 164 , 6 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
        DefButton = TRUE ;
    };
    CancelButton BTN_CANCEL
    {
        Pos = MAP_APPFONT ( 164 , 23 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
    };
    HelpButton BTN_HELP
    {
        Pos = MAP_APPFONT ( 164 , 43 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
    };

    CheckBox BTN_PROTECT
    {
        HelpID = "sc:CheckBox:RID_SCDLG_TABPROTECTION:BTN_PROTECT";
        Pos = MAP_APPFONT ( 6 , 6 ) ;
        Size = MAP_APPFONT ( 150 , 10 );

        Text [ en-US ] = "P~rotect this sheet and the contents of locked cells" ;
    };

    FixedText FT_PASSWORD1
    {
        Pos = MAP_APPFONT ( 11, 23 );
        Size = MAP_APPFONT ( 42, 10 );

        Text [ en-US ] = "~Password" ;
    };

    Edit ED_PASSWORD1
    {
        HelpID = "sc:Edit:RID_SCDLG_TABPROTECTION:ED_PASSWORD1";
        Border = TRUE;
        PassWord = TRUE;
        Pos = MAP_APPFONT ( 56, 22 );
        Size = MAP_APPFONT ( 75, 12 );
    };

    FixedText FT_PASSWORD2
    {
        Pos = MAP_APPFONT ( 11, 40 );
        Size = MAP_APPFONT ( 42, 10 );

        Text [ en-US ] = "~Confirm" ;
    };

    Edit ED_PASSWORD2
    {
        HelpID = "sc:Edit:RID_SCDLG_TABPROTECTION:ED_PASSWORD2";
        Border = TRUE;
        PassWord = TRUE;
        Pos = MAP_APPFONT ( 56, 39 );
        Size = MAP_APPFONT ( 75, 12 );
    };

    FixedLine FL_OPTIONS
    {
        Pos = MAP_APPFONT ( 6, 60 );
        Size = MAP_APPFONT ( 150, 8 );

        Text [ en-US ] = "Options";
    };

    FixedText FT_OPTIONS
    {
        Pos = MAP_APPFONT ( 11, 74 );
        Size = MAP_APPFONT ( 140, 8 );

        Text [ en-US ] = "Allow all users of this sheet to:";
    };

    Control CLB_OPTIONS
    {
        Pos = MAP_APPFONT ( 11, 85 );
        Size = MAP_APPFONT ( 140, 40 );
        Border = TRUE ;
        TabStop = TRUE ;
    };

    String ST_SELECT_LOCKED_CELLS
    {
        Text [ en-US ] = "Select locked cells";
    };

    String ST_SELECT_UNLOCKED_CELLS
    {
        Text [ en-US ] = "Select unlocked cells";
    };
};
