/**************************************************************
 *
 * 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 "baside2.hrc"
#include <helpid.hrc>
#ifndef _GLOBLMN_HRC
#include <svx/globlmn.hrc>
#endif
#include "dlgresid.hrc"
#include <sfx2/sfxcommands.h>
#include <svx/svxcommands.h>

#define MASKCOLOR MaskColor = Color { Red = 0xFFFF; Green = 0x0000; Blue = 0xFFFF; } ;

String RID_STR_IDENAME
{
	Text = "BasicIDE" ;
};
String RID_STR_FILTER_ALLFILES
{
	Text [ en-US ] = "<All>" ;
};
String RID_STR_NOMODULE
{
	Text [ en-US ] = "< No Module >" ;
};
String RID_STR_WRONGPASSWORD
{
	Text [ en-US ] = "Incorrect Password" ;
};
String RID_STR_OPEN
{
	Text [ en-US ] = "Load" ;
};
String RID_STR_SAVE
{
	Text [ en-US ] = "Save" ;
};
String RID_STR_SOURCETOBIG
{
	Text [ en-US ] = "The source text is too large and can be neither compiled nor saved.\nDelete some of the comments or transfer some methods into another module." ;
};
String RID_STR_ERROROPENSTORAGE
{
	Text [ en-US ] = "Error opening file" ;
};
String RID_STR_ERROROPENLIB
{
	Text [ en-US ] = "Error loading library" ;
};
String RID_STR_NOLIBINSTORAGE
{
	Text [ en-US ] = "The file does not contain any BASIC libraries" ;
};
String RID_STR_BADSBXNAME
{
	Text [ en-US ] = "Invalid Name" ;
};
String RID_STR_LIBNAMETOLONG
{
	Text [ en-US ] = "A library name can have up to 30 characters." ;
};
String RID_STR_ERRORCHOOSEMACRO
{
	Text [ en-US ] = "Macros from other documents are not accessible." ;
};
String RID_STR_LIBISREADONLY
{
	Text [ en-US ] = "This library is read-only." ;
};
String RID_STR_REPLACELIB
{
	Text [ en-US ] = "'XX' cannot be replaced." ;
};
String RID_STR_IMPORTNOTPOSSIBLE
{
	Text [ en-US ] = "'XX' cannot be added." ;
};
String RID_STR_NOIMPORT
{
	Text [ en-US ] = "'XX' was not added." ;
};
String RID_STR_ENTERPASSWORD
{
	Text [ en-US ] = "Enter password for 'XX'" ;
};
String RID_STR_SBXNAMEALLREADYUSED
{
	Text [ en-US ] = "Name already exists" ;
};
String RID_STR_SIGNED
{
	Text [ en-US ] = "(Signed)" ;
};
String RID_STR_SBXNAMEALLREADYUSED2
{
	Text [ en-US ] = "Object with same name already exists" ;
};
String RID_STR_FILEEXISTS
{
	Text [ en-US ] = "The 'XX' file already exists" ;
};
String RID_STR_CANNOTRUNMACRO
{
	Text [ en-US ] = "For security reasons, you cannot run this macro.\n\nFor more information, check the security settings." ;
};
String RID_STR_COMPILEERROR
{
	Text [ en-US ] = "Compile Error: " ;
};
String RID_STR_RUNTIMEERROR
{
	Text [ en-US ] = "Runtime Error: #" ;
};
String RID_STR_SEARCHNOTFOUND
{
	Text [ en-US ] = "Search key not found" ;
};
String RID_STR_SEARCHFROMSTART
{
	Text [ en-US ] = "Search to last module complete. Continue at first module?" ;
};
String RID_STR_SEARCHREPLACES
{
	Text [ en-US ] = "Search key replaced XX times" ;
};
String RID_STR_COULDNTREAD
{
	Text [ en-US ] = "The file could not be read" ;
};
String RID_STR_COULDNTWRITE
{
	Text [ en-US ] = "The file could not be saved" ;
};
String RID_STR_CANNOTCHANGENAMESTDLIB
{
	Text [ en-US ] = "The name of the default library cannot be changed." ;
};
String RID_STR_CANNOTCHANGENAMEREFLIB
{
	Text [ en-US ] = "The name of a referenced library cannot be changed." ;
};
String RID_STR_CANNOTUNLOADSTDLIB
{
	Text [ en-US ] = "The default library cannot be deactivated" ;
};
String RID_STR_GENERATESOURCE
{
	Text [ en-US ] = "Generating source" ;
};
String RID_STR_FILENAME
{
	Text [ en-US ] = "File name:" ;
};
String RID_STR_APPENDLIBS
{
	Text [ en-US ] = "Import Libraries" ;
};
String RID_STR_QUERYDELMACRO
{
	Text [ en-US ] = "Do you want to delete the macro XX?" ;
};
String RID_STR_QUERYDELDIALOG
{
	Text [ en-US ] = "Do you want to delete the XX dialog?" ;
};
String RID_STR_QUERYDELLIB
{
	Text [ en-US ] = "Do you want to delete the XX library?" ;
};
String RID_STR_QUERYDELLIBREF
{
	Text [ en-US ] = "Do you want to delete the reference to the XX library?" ;
};
String RID_STR_QUERYDELMODULE
{
	Text [ en-US ] = "Do you want to delete the XX module?" ;
};
String RID_STR_OBJNOTFOUND
{
	Text [ en-US ] = "Object or method not found" ;
};
String RID_STR_BASIC
{
	Text [ en-US ] = "BASIC" ;
};
String RID_STR_LINE
{
	// Abbreviation for 'Line'
	Text [ en-US ] = "Ln" ;
};
String RID_STR_COLUMN
{
	// Abbreviation for 'Column'
	Text [ en-US ] = "Col" ;
};
String RID_STR_DOC
{
	Text [ en-US ] = "Document" ;
};
String RID_BASICIDE_OBJECTBAR
{
	Text [ en-US ] = "Macro Bar" ;
};
String RID_STR_CANNOTCLOSE
{
	Text [ en-US ] = "The window cannot be closed while BASIC is running." ;
};
String RID_STR_REPLACESTDLIB
{
	Text [ en-US ] = "The default library cannot be replaced." ;
};
String RID_STR_REFNOTPOSSIBLE
{
	Text [ en-US ] = "Reference to 'XX' not possible." ;
};
String RID_STR_WATCHNAME
{
	Text [ en-US ] = "Watch" ;
};
String RID_STR_WATCHVARIABLE
{
	Text [ en-US ] = "Variable" ;
};
String RID_STR_WATCHVALUE
{
	Text [ en-US ] = "Value" ;
};
String RID_STR_WATCHTYPE
{
	Text [ en-US ] = "Type" ;
};
String RID_STR_STACKNAME
{
	Text [ en-US ] = "Call Stack" ;
};
String RID_STR_INITIDE
{
	Text [ en-US ] = "BASIC Initialization" ;
};
String RID_STR_STDMODULENAME
{
	Text [ en-US ] = "Module" ;
};
String RID_STR_STDDIALOGNAME
{
	Text [ en-US ] = "Dialog" ;
};
String RID_STR_STDLIBNAME
{
	Text [ en-US ] = "Library" ;
};
String RID_STR_NEWLIB
{
	Text [ en-US ] = "New Library" ;
};
String RID_STR_NEWMOD
{
	Text [ en-US ] = "New Module" ;
};
String RID_STR_NEWDLG
{
	Text [ en-US ] = "New Dialog" ;
};
String RID_STR_ALL
{
	Text [ en-US ] = "All" ;
};
String RID_STR_PAGE
{
	Text [ en-US ] = "Page" ;
};
String RID_STR_MACRONAMEREQ
{
	Text [ en-US ] = "A name must be entered." ;
};
String RID_STR_WILLSTOPPRG
{
	Text [ en-US ] = "You will have to restart the program after this edit.\nContinue?" ;
};
String RID_STR_SEARCHALLMODULES
{
	Text [ en-US ] = "Do you want to replace the text in all active modules?" ;
};
Edit RID_EDT_WATCHEDIT
{
	HelpId = HID_BASICIDE_WATCHWINDOW_EDIT ;
	Border = TRUE ;
	SvLook = TRUE ;
	Size = MAP_APPFONT ( 80, 12 ) ;
};
ImageButton RID_IMGBTN_REMOVEWATCH
{
	HelpId = HID_BASICIDE_REMOVEWATCH ;
	SmallStyle = TRUE ;
	ButtonImage = Image
	{
		ImageBitmap = Bitmap {File = "baswatr.png" ;} ;
	};
	QuickHelpText [ en-US ] = "Remove Watch" ;
};
Image RID_IMG_REMOVEWATCH_HC
{
	ImageBitmap = Bitmap {File = "baswatr_h.png" ;} ;
};
ImageButton RID_IMGBTN_GOTOCALL
{
	HelpId = HID_BASICIDE_GOTOALL ;
	SmallStyle = TRUE ;
	ButtonImage = Image
	{
		ImageBitmap = Bitmap {File = "basgocl.png" ;} ;
	};
};
String RID_STR_REMOVEWATCH
{
	Text [ en-US ] = "Watch:" ;
};
String RID_STR_STACK
{
	Text [ en-US ] = "Calls: " ;
};
String RID_STR_USERMACROS
{
	Text [ en-US ] = "My Macros" ;
};
String RID_STR_USERDIALOGS
{
	Text [ en-US ] = "My Dialogs" ;
};
String RID_STR_USERMACROSDIALOGS
{
	Text [ en-US ] = "My Macros & Dialogs" ;
};
String RID_STR_SHAREMACROS
{
	Text [ en-US ] = "%PRODUCTNAME Macros" ;
};
String RID_STR_SHAREDIALOGS
{
	Text [ en-US ] = "%PRODUCTNAME Dialogs" ;
};
String RID_STR_SHAREMACROSDIALOGS
{
	Text [ en-US ] = "%PRODUCTNAME Macros & Dialogs" ;
};
Menu RID_POPUP_BRKPROPS
{
	Text [ en-US ] = "Properties" ;
	DefaultItemId = RID_BRKPROPS ;
	ItemList =
	{
		MenuItem
		{
			Identifier = RID_ACTIV ;
			HelpId = HID_BASICIDE_ACTIV ;
			Text [ en-US ] = "Active" ;
		};
		MenuItem
		{
			Separator = TRUE ;
		};
		MenuItem
		{
			Identifier = RID_BRKPROPS ;
			HelpId = HID_BASICIDE_BRKPROPS ;
			Text [ en-US ] = "Properties..." ;
		};
	};
};
Menu RID_POPUP_BRKDLG
{
	Text [ en-US ] = "Manage Breakpoints" ;
	ItemList =
	{
		MenuItem
		{
			Identifier = RID_BRKDLG ;
			HelpId = HID_BASICIDE_BRKDLG ;
			Text [ en-US ] = "Manage Breakpoints..." ;
		};
	};
};
Menu RID_POPUP_TABBAR
{
	DefaultItemId = SID_BASICIDE_HIDECURPAGE ;
	ItemList =
	{
		MenuItem
		{
			Identifier = RID_INSERT ;
			Text [ en-US ] = "Insert" ;
			Submenu = Menu
			{
				ItemList =
				{
					MenuItem
					{
						Identifier = SID_BASICIDE_NEWMODULE ;
						HelpId = CMD_SID_BASICIDE_NEWMODULE ;
						Text [ en-US ] = "BASIC Module" ;
					};
					MenuItem
					{
						Identifier = SID_BASICIDE_NEWDIALOG ;
						HelpId = CMD_SID_BASICIDE_NEWDIALOG ;
						Text [ en-US ] = "BASIC Dialog" ;
					};
				};
			};
		};
		MenuItem
		{
			Identifier = SID_BASICIDE_DELETECURRENT ;
			HelpId = CMD_SID_BASICIDE_DELETECURRENT ;
			Text [ en-US ] = "Delete" ;
		};
		MenuItem
		{
			Identifier = SID_BASICIDE_RENAMECURRENT ;
			HelpId = CMD_SID_BASICIDE_RENAMECURRENT ;
			Text [ en-US ] = "Rename" ;
		};
		MenuItem
		{
			Identifier = SID_BASICIDE_HIDECURPAGE ;
			HelpId = CMD_SID_BASICIDE_HIDECURPAGE ;
			Text [ en-US ] = "Hide" ;
		};
		MenuItem
		{
			Separator = TRUE ;
		};
		MenuItem
		{
			Identifier = SID_BASICIDE_MODULEDLG ;
			HelpId = CMD_SID_BASICIDE_MODULEDLG ;
			Text [ en-US ] = "Modules..." ;
		};
	};
};
Menu RID_POPUP_DLGED
{
	DefaultItemId = SID_SHOW_PROPERTYBROWSER ;
	ItemList =
	{
		MenuItem
		{
			Identifier = SID_SHOW_PROPERTYBROWSER ;
			HelpId = CMD_SID_SHOW_PROPERTYBROWSER ;
			Text [ en-US ] = "Properties..." ;
		};
	};
};
ImageList RID_IMGLST_LAYOUT
{
	Prefix = "im" ;
	MASKCOLOR
	IdList =
	{
		IMGID_BRKENABLED ;
		IMGID_BRKDISABLED ;
		IMGID_STEPMARKER ;
		IMGID_ERRORMARKER ;
	};
};
ImageList RID_IMGLST_LAYOUT_HC
{
	Prefix = "imh" ;
	MASKCOLOR
	IdList =
	{
		IMGID_BRKENABLED ;
		IMGID_BRKDISABLED ;
		IMGID_STEPMARKER ;
		IMGID_ERRORMARKER ;
	};
};
Image RID_IMG_LOCKED
{
	ImageBitmap = Bitmap {File = "locked.png"  ;} ;
};
Image RID_IMG_LOCKED_HC
{
	ImageBitmap = Bitmap {File = "locked_h.png"  ;} ;
};
Image RID_IMG_INSTALLATION
{
	ImageBitmap = Bitmap {File = "harddisk_16.png" ;} ;
};
Image RID_IMG_INSTALLATION_HC
{
	ImageBitmap = Bitmap {File = "harddisk_16_h.png" ;} ;
};
Image RID_IMG_DOCUMENT
{
	ImageBitmap = Bitmap {File = "im30826.png" ;} ;
};
Image RID_IMG_DOCUMENT_HC
{
	ImageBitmap = Bitmap {File = "imh30826.png" ;} ;
};
Image RID_IMG_MODLIB
{
	ImageBitmap = Bitmap {File = "im30820.png" ;} ;
};
Image RID_IMG_MODLIB_HC
{
	ImageBitmap = Bitmap {File = "imh30820.png" ;} ;
};
Image RID_IMG_MODLIBNOTLOADED
{
	ImageBitmap = Bitmap {File = "im30827.png" ;} ;
};
Image RID_IMG_MODLIBNOTLOADED_HC
{
	ImageBitmap = Bitmap {File = "imh30827.png" ;} ;
};
Image RID_IMG_MODULE
{
	ImageBitmap = Bitmap {File = "im30821.png" ;} ;
};
Image RID_IMG_MODULE_HC
{
	ImageBitmap = Bitmap {File = "imh30821.png" ;} ;
};
Image RID_IMG_MACRO
{
	ImageBitmap = Bitmap {File = "im30822.png" ;} ;
};
Image RID_IMG_MACRO_HC
{
	ImageBitmap = Bitmap {File = "imh30822.png" ;} ;
};
Image RID_IMG_DLGLIB
{
	ImageBitmap = Bitmap {File = "dialogfolder_16.png" ;} ;
};
Image RID_IMG_DLGLIB_HC
{
	ImageBitmap = Bitmap {File = "dialogfolder_16_h.png" ;} ;
};
Image RID_IMG_DLGLIBNOTLOADED
{
	ImageBitmap = Bitmap {File = "dialogfoldernot_16.png" ;} ;
};
Image RID_IMG_DLGLIBNOTLOADED_HC
{
	ImageBitmap = Bitmap {File = "dialogfoldernot_16_h.png" ;} ;
};
Image RID_IMG_DIALOG
{
	ImageBitmap = Bitmap {File = "im30823.png" ;} ;
};
Image RID_IMG_DIALOG_HC
{
	ImageBitmap = Bitmap {File = "imh30823.png" ;} ;
};
String RID_STR_QUERYREPLACEMACRO
{
	Text [ en-US ] = "Do you want to overwrite the XX macro?" ;
};
String RID_STR_TRANSLATION_NOTLOCALIZED
{
	Text [ en-US ] = "<Not localized>" ;
};
String RID_STR_TRANSLATION_DEFAULT
{
	Text [ en-US ] = "[Default Language]" ;
};
String RID_STR_DOCUMENT_OBJECTS
{
	Text [ en-US ] = "Document Objects" ;
};
String RID_STR_USERFORMS
{
	Text [ en-US ] = "Forms" ;
};
String RID_STR_NORMAL_MODULES
{
	Text [ en-US ] = "Modules" ;
};
String RID_STR_CLASS_MODULES
{
	Text [ en-US ] = "Class Modules" ;
};


String RID_STR_DLGIMP_CLASH_RENAME
{
	Text [ en-US ] = "Rename" ;
};

String RID_STR_DLGIMP_CLASH_REPLACE
{
	Text [ en-US ] = "Replace" ;
};

String RID_STR_DLGIMP_CLASH_TITLE
{
	Text [ en-US ] = "Dialog Import - Name already used" ;
};

String RID_STR_DLGIMP_CLASH_TEXT
{
	Text [ en-US ] = "The library already contains a dialog with the name:\n\n$(ARG1)\n\nRename dialog to keep current dialog or replace existing dialog.\n " ;
};

String RID_STR_DLGIMP_MISMATCH_ADD
{
	Text [ en-US ] = "Add" ;
};

String RID_STR_DLGIMP_MISMATCH_OMIT
{
	Text [ en-US ] = "Omit" ;
};

String RID_STR_DLGIMP_MISMATCH_TITLE
{
	Text [ en-US ] = "Dialog Import - Language Mismatch" ;
};

String RID_STR_DLGIMP_MISMATCH_TEXT
{
	Text [ en-US ] = "The dialog to be imported supports other languages than the target library.\n\nAdd these languages to the library to keep additional language resources provided by the dialog or omit them to stay with the current library languages.\n\nNote: For languages not supported by the dialog the resources of the dialog's default language will be used.\n " ;
};


#define MN_EDIT			20
#define MN_VIEW			21
#define MN_EXTRA		22
#define MN_WIN			30
#define MN_HELP			31
#define MN_TEMPLATES	11

#define MN_PLEDIT		20
#define MN_PLVIEW		21
#define MN_PLEXTRA		22
#define MN_PLWIN		30
#define MN_PLHELP		31
#define MN_PLTEMPLATES	11


/*
The application menu bar resource has become obsolete. You can now find the menu bar definition at:
<project>/basicide/menubar/menubar.xml.
*/

// ********************************************************************** EOF
