From c9b3665a9346a381b35fe0a01fbed10ab39877b8 Mon Sep 17 00:00:00 2001 From: glasseyes Date: Tue, 15 Jan 2019 17:12:28 +0700 Subject: [PATCH 01/16] appdata file for km-config --- .../debian/com.keyman.config.appdata.xml | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 linux/keyman-config/debian/com.keyman.config.appdata.xml diff --git a/linux/keyman-config/debian/com.keyman.config.appdata.xml b/linux/keyman-config/debian/com.keyman.config.appdata.xml new file mode 100644 index 0000000000..d236d39eef --- /dev/null +++ b/linux/keyman-config/debian/com.keyman.config.appdata.xml @@ -0,0 +1,35 @@ + + + + com.keyman.config + FSFAP + MIT + Keyman + Keyman Keyboards + Configure keyboards for Keyman for Linux + + +

+ Originally created in 1993 to type Lao on Windows, Keyman is now a free and +open source keyboarding platform which allows anyone to write a keyboard layout +for their language. Keyman is available for many platforms, including Windows, +macOS, iOS, Android, Linux and the web. +

+

+ Keyboard layouts are defined with a clear and easy to understand keyboard +grammar. Keyman's contextual input model means keyboard layouts can be +intelligent and make it simple to type even the most complex languages. +Keyboard layouts are distributed through an open catalog to all major desktop +and mobile platforms. +

+

+ Install, uninstall and view information about Keyman keyboard packages. +

+
+ + km-config.desktop + + https://keyman.com/linux/ + https://github.com/keymanapp/keyman/issues + https://community.software.sil.org/c/keyman +
From 2ef4e86f8b4a80f90085fb99bea78c0fd2ca8b6f Mon Sep 17 00:00:00 2001 From: glasseyes Date: Tue, 15 Jan 2019 17:14:51 +0700 Subject: [PATCH 02/16] install appdata file --- linux/keyman-config/debian/keyman.install | 1 + 1 file changed, 1 insertion(+) diff --git a/linux/keyman-config/debian/keyman.install b/linux/keyman-config/debian/keyman.install index c79ac94f7f..de47157e0b 100644 --- a/linux/keyman-config/debian/keyman.install +++ b/linux/keyman-config/debian/keyman.install @@ -1,5 +1,6 @@ ./keyman_config/icons/* /usr/share/keyman/icons/ debian/km-config.desktop /usr/share/applications +debian/com.keyman.config.appdata.xml /usr/share/metainfo ./icons/24/km-config.png /usr/share/icons/hicolor/24x24/apps/ ./icons/32/km-config.png /usr/share/icons/hicolor/32x32/apps/ ./icons/48/km-config.png /usr/share/icons/hicolor/48x48/apps/ From 4bdeb22e4721e0abe17bef8d204e16653b081964 Mon Sep 17 00:00:00 2001 From: glasseyes Date: Thu, 7 Feb 2019 16:33:36 -0600 Subject: [PATCH 03/16] add appstream metadata for ibus-keyman and ibus-kmfl --- .../com.github.ibus.ibus-keyman.metainfo.xml | 31 +++++++++++++++++++ linux/ibus-keyman/debian/install | 1 + .../com.github.ibus.ibus-kmfl.metainfo.xml | 31 +++++++++++++++++++ linux/ibus-kmfl/debian/install | 1 + 4 files changed, 64 insertions(+) create mode 100644 linux/ibus-keyman/debian/com.github.ibus.ibus-keyman.metainfo.xml create mode 100644 linux/ibus-keyman/debian/install create mode 100644 linux/ibus-kmfl/debian/com.github.ibus.ibus-kmfl.metainfo.xml create mode 100644 linux/ibus-kmfl/debian/install diff --git a/linux/ibus-keyman/debian/com.github.ibus.ibus-keyman.metainfo.xml b/linux/ibus-keyman/debian/com.github.ibus.ibus-keyman.metainfo.xml new file mode 100644 index 0000000000..b356586db8 --- /dev/null +++ b/linux/ibus-keyman/debian/com.github.ibus.ibus-keyman.metainfo.xml @@ -0,0 +1,31 @@ +​ +​ +​ com.github.ibus.ibus-keyman +​ FSFAP +​ ibus-keyman +​ Keyman input method for IBus +​ +​

+ This input method provides the Keyman IM engine for IBus. With this module, you can + use keyboard layouts designed for Keyman version 11 or earlier under the IBus + platform. +

+

+ Originally created in 1993 to type Lao on Windows, Keyman is now a free and + open source keyboarding platform which allows anyone to write a keyboard layout + for their language. Keyman is available for many platforms, including Windows, + macOS, iOS, Android, Linux and the web. +

+

+ Keyboard layouts are defined with a clear and easy to understand keyboard + grammar. Keyman's contextual input model means keyboard layouts can be + intelligent and make it simple to type even the most complex languages. + Keyboard layouts are distributed through an open catalog to all major desktop + and mobile platforms. +

+

+​ Input methods are typing systems allowing users to input complex languages. +​

+​
+​ https://www.keyman.com/linux +​
diff --git a/linux/ibus-keyman/debian/install b/linux/ibus-keyman/debian/install new file mode 100644 index 0000000000..8848fcfd87 --- /dev/null +++ b/linux/ibus-keyman/debian/install @@ -0,0 +1 @@ +debian/com.github.ibus.ibus-keyman.metainfo.xml /usr/share/metainfo diff --git a/linux/ibus-kmfl/debian/com.github.ibus.ibus-kmfl.metainfo.xml b/linux/ibus-kmfl/debian/com.github.ibus.ibus-kmfl.metainfo.xml new file mode 100644 index 0000000000..16200db00a --- /dev/null +++ b/linux/ibus-kmfl/debian/com.github.ibus.ibus-kmfl.metainfo.xml @@ -0,0 +1,31 @@ +​ +​ +​ com.github.ibus.ibus-kmfl +​ FSFAP +​ ibus-kmfl +​ KMFL input method for IBus +​ +​

+ This package provides the KMFL (Keyboard Mapping for Linux) input method + engine for IBus. With this module, you can use keyboard layouts designed + for Keyman for Windows 6.0 under the IBus platform. +

+

+ Originally created in 1993 to type Lao on Windows, Keyman is now a free and + open source keyboarding platform which allows anyone to write a keyboard layout + for their language. Keyman is available for many platforms, including Windows, + macOS, iOS, Android, Linux and the web. +

+

+ Keyboard layouts are defined with a clear and easy to understand keyboard + grammar. Keyman's contextual input model means keyboard layouts can be + intelligent and make it simple to type even the most complex languages. + Keyboard layouts are distributed through an open catalog to all major desktop + and mobile platforms. +

+

+​ Input methods are typing systems allowing users to input complex languages. +​

+​
+​ https://www.keyman.com/linux +​
diff --git a/linux/ibus-kmfl/debian/install b/linux/ibus-kmfl/debian/install new file mode 100644 index 0000000000..2d4ec4eb14 --- /dev/null +++ b/linux/ibus-kmfl/debian/install @@ -0,0 +1 @@ +debian/com.github.ibus.ibus-kmfl.metainfo.xml /usr/share/metainfo From e3fb5a33cc255d952227c8d7d1551043836ef449 Mon Sep 17 00:00:00 2001 From: glasseyes Date: Thu, 7 Feb 2019 16:39:58 -0600 Subject: [PATCH 04/16] add screenshot to keyman-config appstream metadata --- linux/keyman-config/debian/com.keyman.config.appdata.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/linux/keyman-config/debian/com.keyman.config.appdata.xml b/linux/keyman-config/debian/com.keyman.config.appdata.xml index d236d39eef..b5df67ae5f 100644 --- a/linux/keyman-config/debian/com.keyman.config.appdata.xml +++ b/linux/keyman-config/debian/com.keyman.config.appdata.xml @@ -29,6 +29,13 @@ and mobile platforms. km-config.desktop + + + The Keyman Keyboards main window with a keyboard welcome window. + https://keyman.com/cdn/deploy/img/linux-configuration.e6fee253e7bf355e0e8ce07a9fad634a.png + + + https://keyman.com/linux/ https://github.com/keymanapp/keyman/issues https://community.software.sil.org/c/keyman From fa0bd74c83181463da3b481fc7a4f36b45601655 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Tue, 12 Feb 2019 13:13:45 +0700 Subject: [PATCH 05/16] Update readme for launchpad information --- linux/README.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/linux/README.md b/linux/README.md index 6ab8258e34..8be4da4dd1 100644 --- a/linux/README.md +++ b/linux/README.md @@ -15,7 +15,7 @@ - It is helpful to be using the [packages.sil.org](http://packages.sil.org) repo - Install packages required for building and developing KMFL and Keyman for Linux -`sudo apt install cdbs debhelper libx11-dev autotools-dev build-essential dh-autoreconf flex bison libibus-1.0-dev python3-setuptools meson libjson-glib-dev libgtk-3-dev help2man python3-lxml python3-magic python3-numpy python3-pil python3-pip python3-requests python3-requests-cache python3 python3-gi gir1.2-webkit-3.0 dconf-cli` +`sudo apt install cdbs debhelper libx11-dev autotools-dev build-essential devtools dh-autoreconf flex bison libibus-1.0-dev python3-setuptools meson libjson-glib-dev libgtk-3-dev libxml2-utils help2man python3-lxml python3-magic python3-numpy python3-pil python3-pip python3-requests python3-requests-cache python3 python3-gi gir1.2-webkit-3.0 dconf-cli` ### Compiling from Command Line @@ -83,6 +83,17 @@ Nightly builds upload the most recent new master build to https://downloads.keym Jenkins now continuously builds Debian packages on every commit to master Periodically test packages will be uploaded to https://launchpad.net/~keymanapp/+archive/ubuntu/keyman-daily +#### Launchpad +To upload the packages to launchpad, run the following script from the `linux` directory: +``` +./scripts/launchpad.sh [UPLOAD="yes"] [TIER=""] [PROJECT=""] [DIST="] [PACKAGEVERSION=""] +``` +**Parameters** +UPLOAD="yes" do the dput for real +TIER=" alpha, beta, or stable, default beta +PROJECT="\" only upload this project +DIST="\" only upload for this distribution + ### Testing Tests to be created as there are no current tests From 6560225dcd4a1666450bdebd3bd70ab98f7fbd21 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Tue, 12 Feb 2019 21:03:24 +0700 Subject: [PATCH 06/16] Add more details for setting up launchpad --- linux/README.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/linux/README.md b/linux/README.md index 8be4da4dd1..4186c4fb72 100644 --- a/linux/README.md +++ b/linux/README.md @@ -84,9 +84,18 @@ Jenkins now continuously builds Debian packages on every commit to master Periodically test packages will be uploaded to https://launchpad.net/~keymanapp/+archive/ubuntu/keyman-daily #### Launchpad -To upload the packages to launchpad, run the following script from the `linux` directory: +1. If you don't have one, create an account at https://launchpad.net +2. Request to join the ["Keyman for Linux"](https://launchpad.net/~keymanapp) team. +3. Create a [GPG](https://help.ubuntu.com/community/GnuPrivacyGuardHowto) key and associate it to your launchpad account +4. Set the following environment variables + `export GPGKEY=[key_id]` using the `key_id` of your GPG key + `DEBEMAIL="your.email.address@example.org"` + `DEBFULLNAME="Firstname Lastname"` + `export DEBEMAIL DEBFULLNAME` + +To upload the packages to launchpad, run the following script from the `linux/` directory: ``` -./scripts/launchpad.sh [UPLOAD="yes"] [TIER=""] [PROJECT=""] [DIST="] [PACKAGEVERSION=""] +./scripts/launchpad.sh [UPLOAD="yes"] [TIER=""] [PROJECT=""] [DIST=""] [PACKAGEVERSION=""] ``` **Parameters** UPLOAD="yes" do the dput for real From 5f506387126a2c27da968fe921e168f1aa353d82 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Tue, 12 Feb 2019 22:15:52 +0700 Subject: [PATCH 07/16] Add more updates for review comments --- linux/README.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/linux/README.md b/linux/README.md index 4186c4fb72..28d9c18b90 100644 --- a/linux/README.md +++ b/linux/README.md @@ -83,11 +83,13 @@ Nightly builds upload the most recent new master build to https://downloads.keym Jenkins now continuously builds Debian packages on every commit to master Periodically test packages will be uploaded to https://launchpad.net/~keymanapp/+archive/ubuntu/keyman-daily -#### Launchpad +### Launchpad +This section is primarily for "Keyman for Linux" team members, and not needed for general building. + 1. If you don't have one, create an account at https://launchpad.net 2. Request to join the ["Keyman for Linux"](https://launchpad.net/~keymanapp) team. 3. Create a [GPG](https://help.ubuntu.com/community/GnuPrivacyGuardHowto) key and associate it to your launchpad account -4. Set the following environment variables +4. Set the following environment variables in your ~/.profile or ~/.bashrc (so you don't have to set them every time) `export GPGKEY=[key_id]` using the `key_id` of your GPG key `DEBEMAIL="your.email.address@example.org"` `DEBFULLNAME="Firstname Lastname"` @@ -99,9 +101,12 @@ To upload the packages to launchpad, run the following script from the `linux/` ``` **Parameters** UPLOAD="yes" do the dput for real -TIER=" alpha, beta, or stable, default beta +TIER="\" alpha, beta, or stable, default beta PROJECT="\" only upload this project DIST="\" only upload for this distribution +PACKAGEVERSION="\" normally use the default so don't specify it. But if you change packaging and run another upload you need to increment the number at the end of `PACKAGEVERSION`. e.g. next one is `1~sil2` then `1~sil3`... + +Refer to https://help.launchpad.net/Packaging/PPA/Uploading for troubleshooting and setting up for dput upload. ### Testing Tests to be created as there are no current tests From f7eb1f6862f6c4fdb20c1e4ece6e717b6805f667 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Fri, 15 Feb 2019 06:18:49 +0700 Subject: [PATCH 08/16] Update screenshot to permanent URL --- linux/keyman-config/debian/com.keyman.config.appdata.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux/keyman-config/debian/com.keyman.config.appdata.xml b/linux/keyman-config/debian/com.keyman.config.appdata.xml index b5df67ae5f..72760d64c0 100644 --- a/linux/keyman-config/debian/com.keyman.config.appdata.xml +++ b/linux/keyman-config/debian/com.keyman.config.appdata.xml @@ -32,7 +32,7 @@ and mobile platforms. The Keyman Keyboards main window with a keyboard welcome window. - https://keyman.com/cdn/deploy/img/linux-configuration.e6fee253e7bf355e0e8ce07a9fad634a.png + https://keyman.com/go/linux/11.0/linux-configuration.png From 3f139a9e125ca7c3c4b432ed10551aae1077f3ee Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Mon, 18 Feb 2019 11:16:24 +0700 Subject: [PATCH 09/16] Update history.md --- linux/history.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/linux/history.md b/linux/history.md index db4c44a28e..edc3a9b2e1 100644 --- a/linux/history.md +++ b/linux/history.md @@ -1,5 +1,8 @@ # Keyman for Linux Version History +## 2019-02-18 11.0.109 beta +* create appstream appdata for keyman-config (#1543) + ## 2019-02-15 11.0.108 beta * handle keyboard package install/uninstall when languages aren't defined (#1585) From e000df21b2c8ddcb22989e16e819a8701eb00e3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E0=B2=AE=E0=B2=AF=E0=B3=82=E0=B2=B0=20=E0=B2=B5=E0=B2=B0?= =?UTF-8?q?=E0=B3=8D=E0=B2=AE?= Date: Mon, 18 Feb 2019 01:42:04 -0600 Subject: [PATCH 10/16] Add files via upload changed to Kannada font and also short the text to fit in the buttons --- .../kmshell/locale/kan-Knda-IN/locale.xml | 614 +++++++++--------- 1 file changed, 307 insertions(+), 307 deletions(-) diff --git a/windows/src/desktop/kmshell/locale/kan-Knda-IN/locale.xml b/windows/src/desktop/kmshell/locale/kan-Knda-IN/locale.xml index f3e28e5879..4e5ac5a337 100644 --- a/windows/src/desktop/kmshell/locale/kan-Knda-IN/locale.xml +++ b/windows/src/desktop/kmshell/locale/kan-Knda-IN/locale.xml @@ -1,307 +1,307 @@ - - - - www.ಸಿರಿಗನ್ನಡ.com (www.sirigannada.com) - Tahoma - 10 - &Name_CNV; - ಹೌದು - ಇಲ್ಲ - &ಹೌದು - &ಇಲ್ಲ - ಸರಿ - ರದ್ದುಮಾಡು - ಮುಚ್ಚು - ಅನ್ವಯಿಸು - ನಂತರ ನನಗೆ ನೆನಪಿಸು - ಸರಿ - ರದ್ದುಮಾಡಿ - ಕೀಲಿಮಣೆಯನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಈ ಚಿತ್ರ(ಐಕಾನ್) ಅನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ - &Name; ಇನ್ನೂ ಚಾಲನೆಯಲ್ಲಿದೆ. ನಿಮ್ಮ ಭಾಷೆ ಕೀಲಿಮಣೆಯನ್ನು ಯಾವುದೇ ಸಮಯದಲ್ಲಿ ಬಳಸಲು ಈ ಚಿತ್ರ(ಐಕಾನ್) ಅನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ - &Name; ಸಂರಚನೆ (ಕಾನ್ಫಿಗರೇಷನ್) - ಶುರುವಾಗುತ್ತಿದೆ - ಸಹಾಯ - ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು - - ಆಯ್ಕೆಗಳು - - ನೇರ ಕೀಲಿಗಳು (ಹಾಟ್‌ಕೀ/ಶಾರ್ಟ್‌ಕಟ್‌ಕೀ) - - ಸಹಾಯ - - ನಮ್ಮ ಸಂಪರ್ಕ - - ಕಡತದ ಹೆಸರು: - ಪ್ಯಾಕೇಜ್ ಆವೃತ್ತಿ: - ಕೀಲಿಮಣೆ ಆವೃತ್ತಿ: - ಲೇಖಕ: - ವೆಬ್‌ಸೈಟ್: - ಪ್ಯಾಕೇಜ್: - ಅಕ್ಷರ ಶೈಲಿಗಳು(ಫಾಂಟ್): - ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು: - ಎನ್ಕೋಡಿಂಗ್: - ವಿನ್ಯಾಸ ಪ್ರಕಾರ: - ಸ್ಥಿರ (ಸ್ಥಾನಿಕ) - ವಿಂಡೋಸ್ ಆವೃತ್ತಿಗೆ ಮ್ಯಾಪ್ ಮಾಡಲಾಗಿದೆ - ವಿವರಣೆ: - ಇದಕ್ಕಾಗಿ ಸ್ಥಾಪಿಸಲಾಗಿದೆ: - ಎಲ್ಲಾ ಬಳಕೆದಾರರು - ಪ್ರಸ್ತುತ ಬಳಕೆದಾರ - ಈ ಕೀಲಿಮಣೆ ಬಳಕೆಯ ಭಾಷೆಗಳು: - X - ಬೇರೆ ಭಾಷೆಯನ್ನು ಈ ಕೀಲಿಮಣೆಗೆ ಸೇರಿಸು - ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ: - ಕಸ್ಟಮ್ - ಸ್ಥಾಪಿಸಲಾಗಿದೆ - ಸ್ಥಾಪಿಸಲಾಗಿಲ್ಲ - ದಾಖಲೆ: - ಸ್ಥಾಪಿಸಲಾಗಿದೆ - ಸ್ಥಾಪಿಸಲಾಗಿಲ್ಲ - ಸಂದೇಶ: - ಕೃತಿಸ್ವಾಮ್ಯ: - ಪ್ಯಾಕೇಜ್ ಆಯ್ಕೆಗಳು - ಆಯ್ಕೆಗಳು - ಕೀಲಿಮಣೆಯನ್ನು ಅನುಸ್ಥಾಪಿಸು - ಕೀಲಿಮಣೆ ಡೌನ್ಲೋಡ್ ಮಾಡಿ - ಕೀಲಿಯನ್ನು ಆಯ್ಕೆಗಳು - ಅಸ್ಥಾಪಿಸು - ಪ್ಯಾಕೇಜ್‌ಅನ್ನು ಅಸ್ಥಾಪಿಸು - ಪರಿಚಯಾತ್ಮಕ ಸಹಾಯವನ್ನು ತೋರಿಸು - ನೇರ ಕೀಲಿಯನ್ನು ಬದಲಾಯಿಸು - ನೇರ ಕೀಲಿಗಳು ಹೊಂದಿಸು - ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆಯನ್ನು ಅಸ್ಥಾಪಿಸು - ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ ಅನುಸ್ಥಾಪಿಸು - ನೀವು ಯಾವುದೇ ಕೀಲಿಮಣೆಯನ್ನು ಸ್ಥಾಪಿಸಿಲ್ಲ. ಕೀಮ್ಯಾನ್ ವೆಬ್‌ಸೈಟ್‌ನಿಂದ ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸವನ್ನು ಸ್ಥಾಪಿಸಲು ಡೌನ್ಲೋಡ್ ಕೀಲಿಮಣೆ ಗುಂಡಿಯನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ. - ನಿರ್ವಾಹಕರಾಗಿದ್ದರೆ(ಅಡ್ಮಿನಿಸ್ಟ್ರೇಟರ್) ಮಾತ್ರ ಕೀಲಿಮಣೆ '%0:s' ಅನ್ನು ಅಸ್ಥಾಪಿಸಬಹುದು - ಸಾಮಾನ್ಯ - ಆರಂಭಿಕ - ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ - ಸುಧಾರಿತ(ಅಡ್ವಾನ್ಸ್ಡ್) - ನೇರಕೀಲಿಗಳು (ಹಾಟ್‌ಕೀ/ಶಾರ್ಟ್‌ಕಟ್‌ಕೀ), ಕೀಲಿಮಣೆ ಕ್ರಿಯಾತ್ಮಕತೆಯನ್ನು ಟಾಗಲ್ ಮಾಡಲಿ - AltGr ಅನ್ನು Ctrl+Alt ಆಗಿ ಅನುಕರಿಸು - ಹಾರ್ಡ್‌ವೇರ್ ಕೀಲಿಗಳನ್ನು ಸರಳ ಕೀಲಿಗಳಾಗಿ ಪರಿಗಣಿಸು - ಸುಳಿವುಗಳನ್ನು ತೋರಿಸು - ಕೀಮ್ಯಾನ್ ಚಲನೆಯನ್ನು ವಿಂಡೋಸ್ ಪ್ರಾರಂಭವಾದಾಗ ಪ್ರಾರಂಭಿಸು - ಸ್ಪ್ಲಾಶ್ ಪರದೆಯನ್ನು ತೋರಿಸು - ಸ್ವಾಗತ ಪರದೆಯನ್ನು ತೋರಿಸು - ನವೀಕರಣಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ www.keyman.com ನಲ್ಲಿ ಸಾಪ್ತಾಹಿಕವಾಗಿ ಪರಿಶೀಲಿಸು - &Name; ಪ್ರಾರಂಭವಾದಾಗ ವೈಫಲ್ಯದ ಅನ್ವಯಗಳನ್ನು ಪರೀಕ್ಷಿಸು - "ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ"ಯಲ್ಲಿ ಯಾವುದೆ ಕೀಲಿಯನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿದ ನಂತರ Shift/Ctrl/Alt ಅನ್ನು ಬಿಡುಗಡೆ ಮಾಡು - ಹೊಸ ಕೀಮ್ಯಾನ್ ಕೀಲಿಮಣೆಯನ್ನು ಆಯ್ಕೆ ಮಾಡಿದಾಗ ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆಯನ್ನು ತೋರಿಸು - ಬೇರೆ ಕೀಲಿಮಣೆಯನ್ನು ಆಯ್ಕೆ ಮಾಡಿದಾಗ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸಹಾಯ ಅಥವಾ ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆಯನ್ನು ಬದಲಿಸು - ಯುನಿಕೋಡ್ ಪೂರಕ ಅಕ್ಷರ ಪ್ರದರ್ಶನವನ್ನು ಆನ್ ಮಾಡಿ (ರೀಸ್ಟಾರ್ಟ್ ಅಗತ್ಯವಿದೆ) - 'ಅಜ್ಞಾತ' ಭಾಷೆಯನ್ನು ಆನ್ ಮಾಡಿ - ಡೀಬಗ್ ಮಾಡುವುದು - ಕೀಮ್ಯಾನ್ ಕೀಲಿಮಣೆ ಆಯ್ಕೆಮಾಡಿದಾಗ ವಿಂಡೋಸ್ ಭಾಷೆಯನ್ನು ಬದಲಿಸು - ಕೀಮ್ಯಾನ್‌ನಲ್ಲಿ ಅಥವಾ ಸಿಸ್ಟಮ್ ಟ್ರೇನಲ್ಲಿ ಆಯ್ಕೆ ಮಾಡಿದ ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸ, ಎಲ್ಲಾ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಗೂ ಅನ್ವಯಿಸುವಂತೆ ಮಾಡು - ವಿಂಡೋಸ್ ವಿಸ್ಟಾದಲ್ಲಿ ಚಾಲನೆ ಮಾಡುವಾಗ ಯಾವಾಗಲೂ ಬಳಕೆದಾರರ ಅನುಮತಿಗಳನ್ನು ಎತ್ತಿ ಹಿಡಿಯಿರಿ - ಬಳಕೆದಾರ ಇಂಟರ್ಫೇಸ್ ಭಾಷೆ... - ಮೂಲ(ಬೇಸ್) ಕೀಲಿಮಣೆ... - (ಯಾವುದೂ ಇಲ್ಲ) - &Name; ಸ್ಥಗಿತಗೊಳಿಸಲು - ಕೀಲಿಮಣೆ ಆಯ್ಕೆ ಪಟ್ಟಿಯನ್ನು ತೆರೆಯಲು - ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ ಫಲಕ ತೋರಿಸಲು - ಸಂರಚನೆ(ಕಾನ್ಫಿಗರೇಷನ್) ತೆರೆಯಲು - ಕೀಲಿಮಣೆ ಬಳಕೆ ಫಲಕವನ್ನು ತೋರಿಸಲು - ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್) ಸಹಾಯಕ ಫಲಕವನ್ನು ತೋರಿಸಲು - ಅಕ್ಷರ ನಕ್ಷೆ ಫಲಕವನ್ನು ತೋರಿಸಲು - ಪಠ್ಯ ಸಂಪಾದಕವನ್ನು ತೆರೆಯಲು - ಭಾಷಾ ಬದಲಾವಣೆ ಫಲಕವನ್ನು ತೋರಿಸಲು - ಸಾಮಾನ್ಯ ನೇರ ಕೀಲಿಗಳು (ಹಾಟ್‌ಕೀ/ಶಾರ್ಟ್‌ಕಟ್‌ಕೀ) - ಕೀಲಿಮಣೆಗಳು - ಸ್ಥಾಪಿಸಲಾಗಿರುವ ಭಾಷೆಗಳು - ವಿಂಡೋಸ್ ಲೇಔಟ್ - ಕೀಮ್ಯಾನ್ ಕೀಲಿಮಣೆ - (ವಿಂಡೋಸ್ ಲೇಔಟ್ ಬಳಸಿ) - ಈಗ ಹೊಸ ಆವೃತ್ತಿಯನ್ನು(ಅಪ್‌ಗ್ರೇಡ್) ಅನುಸ್ಥಾಪಿಸು! - ಸಹಾಯ ವಿನಂತಿ ಕಳುಹಿಸು - ಕೀಮ್ಯಾನ್ ಬೆಂಬಲವನ್ನು ಸಂಪರ್ಕಿಸು - ಕೀಮ್ಯಾನ್‌ ಅನ್ನು ಬಳಸುವಾಗ ನಿಮಗೆ ಯಾವುದೇ ಸಮಸ್ಯೆಗಳು ಕಂಡು ಬಂದರೆ, ಕೀಮ್ಯಾನ್ ಸಮುದಾಯ ವೇದಿಕೆಯಲ್ಲಿ (Keyman Community Forum) ಪ್ರಶ್ನೆಯನ್ನು ಕೇಳಿ. - ಕೀಮ್ಯಾನ್ ಸಮುದಾಯ ವೇದಿಕೆ ತೆರೆಯಿರಿ - ಕೃತಿಸ್ವಾಮ್ಯ © ಎಸ್‌ಐಎಲ್‌ ಇಂಟರ್‌ನ್ಯಾಷನಲ್. ಎಲ್ಲ ಹಕ್ಕುಗಳನ್ನು ಕಾಯ್ದಿರಿಸಲಾಗಿದೆ. - ಆವೃತ್ತಿ - ಇಂಗ್ಲೀಷ್ ಆವೃತ್ತಿ - ಉಪಯುಕ್ತ ಕೊಂಡಿಗಳು - ಆನ್‌ಲೈನ್ ಸಹಾಯ - ಡಯಗ್ನೊಸ್ಟಿಕ್ - ನವೀಕರಣಗಳಿಗಾಗಿ ಪರಿಶೀಲಿಸಿ - ಪ್ರಾಕ್ಸಿ ಸೆಟ್ಟಿಂಗ್ಗಳು... - ಡಯಗ್ನೊಸ್ಟಿಕ್ - ಭಾಷಾ ಸಂಯೋಜನೆಗಳನ್ನು (ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು) ಪರಿಶೀಲಿಸು - ಮೈಕ್ರೋಸಾಫ್ಟ್ ವಿಂಡೋಸ್ ನಿಮ್ಮ ಭಾಷೆ(ಗಳು) ಗಾಗಿ ಸರಿಯಾಗಿ ಸಂಯೋಜನೆ ಮಾಡಲ್ಪಟ್ಟಿದೆ. - keyman.com ಯಿಂದ ಕೀಲಿಮಣೆ ಡೌನ್ಲೋಡ್ ಮಾಡಿ - ಸ್ಥಾಪಿಸಬೇಡಿ, ಡೌನ್ಲೋಡ್ ಮಾಡಿ - ಕೀಲಿಮಣೆ/ಪ್ಯಾಕೇಜ್ ಅನುಸ್ಥಾಪಿಸು - ವಿವರಗಳು - ಸಂದೇಶವನ್ನು ಓದಿ - ಅನುಸ್ಥಾಪಿಸು - ಎಲ್ಲಾ ಬಳಕೆದಾರರಿಗೆ ಅನುಸ್ಥಾಪಿಸು - ಪ್ರಾಕ್ಸಿ ಸರ್ವರ್ ಸಂರಚನೆ(ಕಾನ್ಫಿಗರೇಷನ್) - ಸರ್ವರ್(server): - ಪೊರ್ಟ್(port): - ಬಳಕೆದಾರರ ಹೆಸರು(username): - ಪ್ರವೇಶಪದ(password): - ಮೂಲ(ಬೇಸ್) ಕೀಲಿಮಣೆ ಹೊಂದಿಸಿ - ನೀವು ವಿಂಡೋಸ್‌ನಲ್ಲಿ ಬಳಸುವ ಮೂಲ(ಬೇಸ್) ಲ್ಯಾಟಿನ್(ಇಂಗೀಷ್) ಸ್ಕ್ರಿಪ್ಟ್ ಕೀಲಿಮಣೆ ಆಯ್ಕೆಮಾಡಿ. ಕೀಮ್ಯಾನ್ ಕೀಲಿಮಣೆಯು ನಿಮ್ಮ ಆದ್ಯತೆಯ ವಿನ್ಯಾಸಕ್ಕೆ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಹೊಂದಿಕೊಳ್ಳುತ್ತದೆ. - ನೇರ ಕೀಲಿ ಬದಲಾಯಿಸು - &ನೇರ ಕೀಲಿ ತೆರವುಗೊಳಿಸು - ಭಾಷೆ %0:s ಗಾಗಿ ಪ್ರಮಾಣಿತ ನೇರ ಕೀಲಿಯನ್ನು ಆಯ್ಕೆಮಾಡಿ ಅಥವಾ 'ಕಸ್ಟಮ್' ಆಯ್ಕೆಮಾಡಿ ಮತ್ತು Ctrl, Shift ಮತ್ತು/ಅಥವಾ Alt ಅನ್ನು ಒತ್ತಿ ಮತ್ತು ನೀವು ಬಯಸಿದ ನೇರ ಕೀಲಿಯನ್ನು ಟೈಪ್ ಮಾಡಿ: - ಭಾಷೆ %0:s ಗಾಗಿ ಪ್ರಮಾಣಿತ ಹಾಟ್ಕೀ ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ ಅಥವಾ 'ಕಸ್ಟಮ್' ಆಯ್ಕೆಮಾಡಿ ಮತ್ತು Ctrl, Shift ಮತ್ತು/ಅಥವಾ Alt ಅನ್ನು ಒತ್ತಿ ಮತ್ತು ನಿಮ್ಮ ಬಯಸಿದ ಹಾಟ್ ಕೀಲಿಯನ್ನು ಟೈಪ್ ಮಾಡಿ: - ಪ್ರಮಾಣಿತ ನೇರ ಕೀಲಿಯನ್ನು ಆಯ್ಕೆಮಾಡಿ ಅಥವಾ 'ಕಸ್ಟಮ್' ಆಯ್ಕೆಮಾಡಿ ಮತ್ತು Ctrl, Shift ಮತ್ತು/ಅಥವಾ Alt ಅನ್ನು ಒತ್ತಿ ಮತ್ತು ನೀವು ಬಯಸಿದ ನೇರ ಕೀಲಿಯನ್ನು ಟೈಪ್ ಮಾಡಿ: - ನೇರ ಕೀಲಿ %0:s ಸಾಮಾನ್ಯ ಕೀಲಿಮಣೆ ಬಳಕೆಗೆ ತೊಂದರೆ ಮಾಡುತ್ತದೆ. ನೀವು ಕನಿಷ್ಠ Ctrl ಅಥವಾ Alt ಅನ್ನು ಬಳಸಬೇಕು. ಈಗ ನೀವು ಇದನ್ನು ಬದಲಾಯಿಸಲು ಬಯಸುವಿರಾ? - ನೇರ ಕೀಲಿ %0:s ಕೀಲಿಮಣೆ %1:s ಗಾಗಿ ಆಯ್ಕೆ ಮಾಡಲಾಗಿದೆ. ನೀವು ಮುಂದುವರಿಸಿದರೆ, ಕೀಲಿಮಣೆ %1:s ಗಾಗಿ ನೇರ ಕೀಲಿಯನ್ನು ತೆರವುಗೊಳಿಸಲಾಗುತ್ತದೆ. ಮುಂದುವರಿಸಬೇಕೆ? - ಅನುಸ್ಥಾಪಿಸಲು ಕೀಲಿಮಣೆಯನ್ನು ಆಯ್ಕೆಮಾಡಿ - ಈ ಪ್ಯಾಕೇಜ್‌ನಲ್ಲಿ ಎಲ್ಲಾ ಕೀಲಿಮಣೆಗಳನ್ನು ಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಗರಿಷ್ಟ %0:d ಹೆಚ್ಚುವರಿ ಕೀಲಿಮಣೆಗಳನ್ನು ಸ್ಥಾಪಿಸಬಹುದು. ದಯವಿಟ್ಟು ನೀವು ಈ ಪ್ಯಾಕೇಜ್‌ನಿಂದ ಸ್ಥಾಪಿಸಲು ಬಯಸುವ ಕೀಲಿಮಣೆಯನ್ನು ಮಾತ್ರ ಆಯ್ಕೆ ಮಾಡಿ. - ನವೀಕರಿಸಲಾದ &Name; ಘಟಕಗಳು ಲಭ್ಯವಿದೆ - &Name_CN; ಇದಕ್ಕಾಗಿ ಅಪ್‌ಡೇಟ್‌ಗಳು ಲಭ್ಯವಿದೆ - ದಯವಿಟ್ಟು ನೀವು ಸ್ಥಾಪಿಸಲು ಬಯಸುವ ನವೀಕರಣಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡಿ: - ಈ ಪ್ಯಾಚ್ ಅನ್ನು ಇದೀಗ ನೀವು ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಮತ್ತು ಸ್ಥಾಪಿಸಲು ಬಯಸುವಿರಾ? - ನೀವು ಈ ಹೊಸ ಆವೃತ್ತಿಯನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಬಹುದು: - ನೀವು ಈಗ ವೆಬ್‌ಸೈಟ್‌ಗೆ ಭೇಟಿ ನೀಡಲು ಬಯಸುವಿರಾ? - ಈಗ ಅನುಸ್ಥಾಪಿಸಿ - ರದ್ದುಮಾಡಿ - ಹಳೆಯ ಆವೃತ್ತಿ - ಅಪ್‌ಡೇಟ್‌ ಮಾಡಲಾದ ಘಟಕಗಳು - ಗಾತ್ರ - &Name; %0:s - ಕೀಲಿಮಣೆ %0:s %1:s - keyman.com ವೆಬ್‌ಸೈಟ್‌ ಅನ್ನು ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ - ದಯವಿಟ್ಟು ನೀವು ಸಕ್ರಿಯ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವನ್ನು ಹೊಂದಿದ್ದೀರ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಂಡು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ. - keyman.com ವೆಬ್‌ಸೈಟ್‌ ಅನ್ನು ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ - ದಯವಿಟ್ಟು ನೀವು ಸಕ್ರಿಯ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವನ್ನು ಹೊಂದಿರುವಿರಿ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ ಮತ್ತು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ. ದೋಷ ಸ್ವೀಕರಿಸಲಾಗಿದೆ: %0:s - &Name; ನವೀಕರಣಗಳು ಲಭ್ಯವಿದೆ - ನವೀಕರಣಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಮತ್ತು ಅನುಸ್ಥಾಪಿಸಲು ಈ ಐಕಾನ್ ಕ್ಲಿಕ್ ಮಾಡಿ - ವೀಕ್ಷಿಸಿ ಮತ್ತು ಅನುಸ್ಥಾಪನೆ &Name; ನವೀಕರಣಗಳು - ಆನ್‌ಲೈನ್ ಅಪ್‌ಡೇಟ್ ಪರಿಶೀಲನೆಗೆ ನಿರ್ಗಮನ - &Name_CNV; - &Name; - &Version; - ಕೀಮ್ಯಾನ್ ಪ್ರಾರಂಭಿಸು - ನಿರ್ಗಮನ - ಇತರೆ ಕಾರ್ಯಗಳು - ಸಂರಚನೆ - ಆರಂಭದಲ್ಲಿ ಈ ಪರದೆಯನ್ನು ತೋರಿಸು - ಆರಂಭದಲ್ಲಿ ಈ ಪರದೆಯನ್ನು ತೋರಿಸಬೇಡ - ಪ್ರದರ್ಶನ ಭಾಷೆ - ಇತರ ಪ್ರದರ್ಶನ ಭಾಷೆಗಳನ್ನು ಆನ್‌ಲೈನ್‌ನಲ್ಲಿ ಹುಡುಕಿ... - ಪ್ರದರ್ಶನ ಭಾಷೆ ಭಾಷಾಂತರಿಸಲು ಸಹಾಯ ಮಾಡಿ - ಕನ್ನಡ - ಕನ್ನಡ (Kannada) - kan - en - &Name; - ಪ್ರದರ್ಶನ ಭಾಷೆಯನ್ನು ಆಯ್ಕೆಮಾಡಿ - ನೀವು ಬಯಸುವ ಪ್ರದರ್ಶನ ಭಾಷೆಯನ್ನು &Name; ಫಲಕದಲ್ಲಿ ಆಯ್ಕೆಮಾಡಿ. - &ಆನ್‌ಲೈನ್‌ನಲ್ಲಿ ಇನ್ನಷ್ಟು ಭಾಷೆಗಳು... - ಹೊಸ ಪ್ರದರ್ಶನ ಭಾಷೆಯನ್ನು ಆನ್‌ಲೈನ್‌ನಲ್ಲಿ ಭಾಷಾಂತರ ಮಾಡಿ - ಭಾಷಾ ಸಂರಚನೆ(ಕಾನ್ಫಿಗರೇಷನ್) ಕಾರ್ಯಗಳು - ಕೊನೆಯಲ್ಲಿ ಸೂಚಿಸಲಾದ ಭಾಷೆಯ ಜೊತೆಯಲ್ಲಿ ಕೆಲಸ ಮಾಡಲು, ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ಸಂರಚನೆ(ಕಾನ್ಫಿಗರ್) ಮಾಡಿ: - ಕೆಳಗಿನ ಸಂರಚನಾ ಕಾರ್ಯಗಳ ಸಲುವಾಗಿ ಪೂರ್ಣಗೊಳಿಸಬೇಕು &Name; ಎಂದು ಪತ್ತೆಹಚ್ಚಿದೆ - ಲಿಪಿ(ಗಳು), ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿ ಸರಿಯಾಗಿ ಕೆಲಸ ಮಾಡಲು: - ಮೈಕ್ರೋಸಾಫ್ಟ್ ಆಫೀಸ್ ಭಾಷಾ ಬೆಂಬಲ - ಹೆಚ್ಚಿನ ಮಾಹಿತಿ... - ಈ ಕಾರ್ಯಗಳನ್ನು &Name; ಈಗ ಪೂರ್ಣಗೊಳಿಸಲು ಬಯಸುತ್ತೀರಾ? - ಇದನ್ನು ಮತ್ತೊಮ್ಮೆ ಕೇಳಬೇಡ - ಸುಳಿವುಗಳನ್ನು ಮರುಹೊಂದಿಸು - ಎಲ್ಲಾ ಸುಳಿವು ಸಂದೇಶಗಳನ್ನು ಮರುಹೊಂದಿಸಲಾಗಿದೆ ಮತ್ತು ಮತ್ತೆ ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತದೆ. - ನಿರ್ಗಮನ &Name;? - ನೀವು &Name; ನಿರ್ಗಮಸಲು ಬಯಸುತ್ತೀರಾ? ವಿಂಡೋಸ್ ಕೀಲಿಮಣೆಗಳ ಪಟ್ಟಿಯಲ್ಲಿ ಕೀಮ್ಯಾನ್ ಕೀಲಿಮಣೆಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ. ಆದರೆ ನೀವು &Name; ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸುವವರೆಗೆ ಕೀಮ್ಯಾನ್ ಕೀಲಿಮಣೆಗಳು ಕ್ರಿಯಾತ್ಮಕವಾಗಿರುವುದಿಲ್ಲ. - ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ ಮುಚ್ಚಲಾಗಿದೆ - ನೀವು "ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ"ಅನ್ನು ಮುಚ್ಚಿದ್ದೀರಿ. &Name; ಇನ್ನೂ ಚಾಲನೆಯಲ್ಲಿದೆ. &Name; ಚಿತ್ರ(ಐಕಾನ್) ಮೇಲೆ ನೀವು ಯಾವುದೇ ಸಮಯದಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ ಮತ್ತು "ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ" ಆಯ್ಕೆಮಾಡುವ ಮೂಲಕ; "ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ"ಅನ್ನು ತೆರೆಯಬಹುದು. - ಈ ಸುಳಿವನ್ನು ಮತ್ತೆ ತೋರಿಸಬೇಡ - &Name; ಸಹಾಯ - ಪ್ರಾರಂಭಿಸಿ - ಸಹಾಯ ಪರಿವಿಡಿ - " - " ಕೀಲಿಮಣೆಗೆ ಸಹಾಯ - "ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ" ತೆರೆ - ಕೀಲಿಮಣೆ ಬಳಕೆ ಫಲಕವನ್ನು ತೆರೆ - ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್) ಸಹಾಯಕ ಫಲಕವನ್ನು ತೆರೆ - ಅಕ್ಷರ ನಕ್ಷೆ ಫಲಕವನ್ನು ತೆರೆ - &Name; ಬೆಳಕನ್ನು ಮುಚ್ಚಿ - &Name; ಸಂರಚನೆ(ಕಾನ್ಫಿಗರೇಷನ್) ತೆರೆ - ಸಹಾಯ ತೆರೆ - "ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ" ಮುಚ್ಷು - &ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ - &ಸಹಾಯ... - &ನಿರ್ಗಮನ - ನೀವು ಯಾವುದೇ ಕೀಲಿಮಣೆಯನ್ನು ಅನುಸ್ಥಾಪಿಸಿಲ್ಲ. ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸವನ್ನು ಸ್ಥಾಪಿಸಲು "ಸಂರಚನೆ"(ಕಾನ್ಫಿಗರೇಷನ್)ನಲ್ಲಿ "ಡೌನ್ಲೋಡ್ ಕೀಲಿಮಣೆ" ಗುಂಡಿಯನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ. - ನಿಷ್ಕ್ರಿಯವಾಗಿದ್ದಾಗ ಫೇಡ್ ಮಾಡಿ - ಉಪಕರಣ ಪಟ್ಟಿ(ಟೂಲ್‌ಬಾರ್) ತೋರಿಸು - ವೆಬ್ ಪುಟದಂತೆ ಉಳಿಸು... - ಪ್ರಿಂಟ್... - ಕೀಲಿಮಣೆ ಸಹಾಯ - ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ - ಪ್ರಾರಂಭಿಸು - &Name; ಸಹಾಯ - &Name; ಸಂರಚನೆ (ಕಾನ್ಫಿಗರೇಷನ್) - ಈ ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸವು ಪ್ರಾರಂಭಿಸುವಿಕೆ ಅಥವಾ ಬಳಕೆ ದಸ್ತಾವೇಜನ್ನು ಹೊಂದಿಲ್ಲ. ಈ ಕೀಲಿಮಣೆ ಲೇಔಟ್ ಅನ್ನು ಹೇಗೆ ಬಳಸುವುದು ಎಂಬುದರ ಕುರಿತು ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ ಸ್ಟಾರ್ಟ್ ಮೆನುವನ್ನು ಪರಿಶೀಲಿಸಿ ಅಥವಾ ಕೀಲಿಮಣೆ ಅಭಿವೃದ್ಧಿಪಡಿಸಿದವರನ್ನು ಸಂಪರ್ಕಿಸಿ. - ಹೆಚ್ಚುವರಿ ದಸ್ತಾವೇಜನ್ನು ಮತ್ತು/ಅಥವಾ "ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ" ವೀಕ್ಷಿಸಲು ಕೆಳಗಿನ ಗುಂಡಿಗಳನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ. - ಪ್ರಸ್ತುತ &Name; ರಲ್ಲಿ ಯಾವುದೇ ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸವನ್ನು ಆಯ್ಕೆ ಮಾಡಲಾಗಿಲ್ಲ. ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸವನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಮೇಲಿನ ಉಪಕರಣ ಪಟ್ಟಿ(ಟೂಲ್‌ಬಾರ್)ನಲ್ಲಿನ ಯಾವುದೇ ಕೀಲಿಮಣೆ ಚಿತ್ರ(ಐಕಾನ್)ಗಳನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ. - ಯಾವುದೇ ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳನ್ನು ಪ್ರಸ್ತುತ ಸ್ಥಾಪಿಸಿಲ್ಲ ಅಥವಾ ಲೋಡ್ ಮಾಡಲಾಗಿಲ್ಲ. ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸವನ್ನು ಅನುಸ್ಥಾಪಿಸಲು &Name; ಸಂರಚನೆಯನ್ನು(ಕಾನ್ಫಿಗರೇಷನ್) ಬಳಸಿ. - &Name_CN; - ಆವೃತ್ತಿ %0:s - ಸಹಾಯ - &ಮುದ್ರಿಸು.... - &ಡೌನ್ಲೋಡ್... - %0:s ಹೆಸರಿನ ಪ್ಯಾಕೇಜ್‌ಅನ್ನು ಈಗಾಗಲೇ ಸ್ಥಾಪಿಸಲಾಗಿದೆ. ನೀವು ಅದನ್ನು ಅಸ್ಥಾಪಿಸಲು ಹಾಗು ಹೊಸದನ್ನು ಅನುಸ್ಥಾಪಿಸಲು ಬಯಸುವಿರಾ? - %0:s ಹೆಸರಿನ ಕೀಲಿಮಣೆ ಈಗಾಗಲೇ ಅನುಸ್ಥಾಪಿಸಲಾಗಿದೆ. ನೀವು ಅದನ್ನು ಅಸ್ಥಾಪಿಸಬೇಕಾಗುತ್ತದೆ ಹಾಗು ಹೊಸ ಕೀಲಿಮಣೆಯನ್ನು ಸ್ಥಾಪಿಸಲಾಗುವುದು. ಮುಂದುವರಿಸಬೇಕೆ? - '%0:s' ಕೀಲಿಮಣೆ '%1:s' ಪ್ಯಾಕೇಜಿನ ಭಾಗವಾಗಿದೆ. ನೀವು ಸಂಪೂರ್ಣ ಪ್ಯಾಕೇಜ್ ಅನ್ನು ಅಸ್ಥಾಪಿಸಬೇಕಾಗುತ್ತದೆ. ಮುಂದುವರಿಸಬೇಕೇ? - ನಿರ್ವಾಹಕರಾಗಿದ್ದರೆ(ಅಡ್ಮಿನಿಸ್ಟ್ರೇಟರ್) ಮಾತ್ರ ಕೀಲಿಮಣೆಗಳನ್ನು ಅನುಸ್ಥಾಪಿಸಿ ಅಥವಾ ಅಸ್ಥಾಪಿಸಬಹುದು. ಸಾಮಾನ್ಯ ಬಳಕೆದಾರನಾಗಿ ಬಳಸಲು ಭಾಷೆಯನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ನಿಯಂತ್ರಣ ಫಲಕವನ್ನು (control panel) ಬಳಸಿ. - ಪರ್ಯಾಯ ಸಂಯೋಜನೆಗಳನ್ನು (ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು) ಬದಲಾಯಿಸಲು ವಿಂಡೋಸ್ ಅನ್ನು ಪುನರಾರಂಭಿಸಬೇಕಾಗಿದೆ. ನೀವು ಈಗ ವಿಂಡೋಸ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಲು ಬಯಸುವಿರಾ? - ಈ '%0:s' ಪ್ಯಾಕೇಜ್ ಅಥವಾ ಕೀಲಿಮಣೆ ಯಾವುದೇ ಪರಿಚಯಾತ್ಮಕ ಸಹಾಯವನ್ನು ಒಳಗೊಂಡಿಲ್ಲ. - ಈ ಆಪರೇಟಿಂಗ್ ಸಿಸ್ಟಮ್‌ನಲ್ಲಿ ನಮ್ಮ ತಂತ್ರಾಂಶ ಕೆಲಸ ಮಾಡುವುದಿಲ್ಲ. - ನಿಮ್ಮ ಪರವಾನಗಿ ಯಶಸ್ವಿಯಾಗಿ ಸಕ್ರಿಯಗೊಂಡಿದೆ. - KeymanDesktop.chm - ಸಹಾಯ ಕಡತ $(SKOnlineHelpFile) ಕಂಡುಬಂದಿಲ್ಲ. - <ಹಾನಿಗೊಳಗಾದ ಕೀಲಿಮಣೆ> - ಕೋಡ್‌ಪುಟ - ಯೂನಿಕೋಡ್ - ಡೌನ್ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ - %0:s ಕೀಲಿಮಣೆಯ "ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ ಫಲಕ" ಅಸ್ಥಾಪಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ? - %0:s ಕೀಲಿಮಣೆಯನ್ನು ಅಸ್ಥಾಪಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ? - %0:s ಪ್ಯಾಕೇಜ್‌ಅನ್ನು ಹಾಗು %1:s ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳನ್ನು ಅಸ್ಥಾಪಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ? - ಕೆಳಗಿನ ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳನ್ನು ಸಹ ಅಸ್ಥಾಪಿಸಲ್ಪಡುತ್ತವೆ: %0:s. - ಪರವಾನಗಿ ಸಂಖ್ಯೆ %0:s ಯೊಂದಿಗೆ ಈಗ ನೀವು ಆನ್‌ಲೈನ್‌ನಲ್ಲಿ ಸಕ್ರಿಯಗೊಳಿಸಲು $(SKShortApplicationTitle) ಬಯಸುತ್ತೀರಾ? ನೀವು "ಇಲ್ಲ" ಅಥವಾ "ರದ್ದುಮಾಡಿ" ಗುಂಡಿಯನ್ನು ಕ್ಲಿಕ್ ಮಾಡದಿದ್ದರೆ, ಪರ್ಯಾಯ ಸಕ್ರಿಯಗೊಳಿಸುವ ವಿಧಾನಗಳಿಂದ ನೀವು ಆಯ್ಕೆ ಮಾಡಬಹುದು. - ಕ್ಯಾರೆಕ್ಟರ್ ಮ್ಯಾಪ್ ಅನ್ನು ಬಳಸಬಹುದಾದ ಮೊದಲು ನಿರ್ಮಿಸಬೇಕಾದ ಪಾತ್ರಗಳ ದತ್ತಾಂಶ ಹೊಂದಿದೆ. ಈಗ ನಿರ್ಮಿಸಲು ಬಯಸುವಿರಾ? - ಪುನರ್ನಿರ್ಮಾಣಕ್ಕಾಗಿ ಯೂನಿಕೋಡ್ ಕ್ಯಾರೆಕ್ಟರ್ ಡೇಟಾಬೇಸ್ ಅನ್ನು ಅಳಿಸಲಾಗಲಿಲ್ಲ. ದೋಷ ವಿವರಗಳು: %0:s - ಯುನಿಕೋಡ್ ಕ್ಯಾರೆಕ್ಟರ್ ಡೇಟಾಬೇಸ್ ಅನ್ನು ರಚಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ ಮತ್ತು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ. ದೋಷ ವಿವರಗಳು: %0:s - ಯುನಿಕೋಡ್ ಪಾತ್ರ ಡೇಟಾಬೇಸ್ ಯಶಸ್ವಿಯಾಗಿ ಲೋಡ್ ಮಾಡಲಿಲ್ಲ (%0:s). ಇದೀಗ ಅದನ್ನು ಮರುನಿರ್ಮಾಣ ಮಾಡುವುದೇ? - ಬ್ರೌಸರ್ ಅನ್ನು ಅಥವಾ ಈ URL ಗಾಗಿ ಇಮೇಲ್ ಪ್ರೋಗ್ರಾಂ ಸಕ್ರಿಯಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. - ಕೀಲಿಮಣೆ ಯಶಸ್ವಿಯಾಗಿ ಮುದ್ರಿಸಲಾಗಲಿಲ್ಲ. ವೆಬ್ ಪುಟಕ್ಕೆ ಉಳಿಸಲು ಮತ್ತು ಮುದ್ರಿಸಲು ದಯವಿಟ್ಟು ಬೇರೆ ಪ್ರಯತ್ನಿಸಿ. - &Name; ಪ್ರಾರಂಭಿಸಲು ವಿಫಲವಾಗಿದೆ. ಮುಂದುವರೆಯುವ ಮೊದಲು keyman.exe ಅನ್ನು ಆರಂಭಿಸಲು ಅನುಮತಿಸಲಾಗಿದೆಯೇ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ದಯವಿಟ್ಟು ನಿಮ್ಮ ಭದ್ರತೆ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು(security settings) ಪರಿಶೀಲಿಸಿ. ಹಿಂದಿರುಗಿದ ದೋಷವೆಂದರೆ: "%0:s". ಈಗ ನೀವು ಪ್ರಯತ್ನಿಸಿ ಹಾಗೂ ಮತ್ತೆ &Name; ಪ್ರಾರಂಭಿಸಲು ಬಯಸುವಿರಾ? - &Name; ಡೀಬಗ್ ಮಾಹಿತಿಯನ್ನು ನಿಮ್ಮ ಡೆಸ್ಕ್‌ಟಾಪ್‌ನಲ್ಲಿ keymanlog\system.log ಕರೆಯಲಾಗುವ ಪಠ್ಯ ಫೈಲ್‌ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ. ಈ ಫೈಲ್ ಅನ್ನು ಓದುವ ಅಥವಾ ಅಳಿಸುವ ಮೊದಲು ನೀವು &Name; ನಿರ್ಗಮಿಸಬೇಕು. ಎಚ್ಚರಿಕೆ: ಈ ಫೈಲ್ ಬಹಳ ವೇಗವಾಗಿ ಬೆಳೆಯುತ್ತದೆ. ಡೀಬಗ್ ಮಾಡುವುದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುವುದರಿಂದ ನಿಮ್ಮ ಸಿಸ್ಟಮ್ ಅನ್ನು ನಿಧಾನಗೊಳಿಸುತ್ತದೆ ಮತ್ತು ತಾಂತ್ರಿಕ ಬೆಂಬಲದಿಂದ ಸಲಹೆ ನೀಡಿದರೆ ಮಾತ್ರ ಮಾಡಬೇಕು. ಖಾಸಗಿ ಎಚ್ಚರಿಕೆ: ನೀವು ಟೈಪ್ ಮಾಡುವ ಎಲ್ಲಾ ಕೀಸ್ಟ್ರೋಕ್‌ಗಳನ್ನು ಡೀಬಗ್ ಲಾಗ್‌ಫೈಲ್ ದಾಖಲಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಡೀಬಗ್ ಮಾಡುವಿಕೆ ಅಥವಾ ಡಯಗ್ನೊಸ್ಟಿಕ್ ಆಗುವ ಅವಧಿಯನ್ನು ನೀವು ಮಾತ್ರ ಡೀಬಗ್ ಲಾಗ್ಆನ್ ಮಾಡಬೇಕು, ಮತ್ತು ಸಾಧ್ಯವಾದಷ್ಟು ಬೇಗ [desktop]\keymanlog\system.log ಫೈಲ್ ಅಳಿಸಿ. - %1:s ಗೆ %0:s ಸಂಪಾದನೆ ಬೆಂಬಲವನ್ನು ಸೇರಿಸಿ - ಮೈಕ್ರೋಸಾಫ್ಟ್ ಆಫೀಸ್ ೨೦೦೦ - ಮೈಕ್ರೋಸಾಫ್ಟ್ ಆಫೀಸ್ ಎಕ್ಸ್ ಪಿ - ಮೈಕ್ರೋಸಾಫ್ಟ್ ಆಫೀಸ್ ೨೦೦೩ - ಮೈಕ್ರೋಸಾಫ್ಟ್ ಆಫೀಸ್ ೨೦೦೭ - ಮೈಕ್ರೋಸಾಫ್ಟ್ ಆಫೀಸ್ ೨೦೧೦ - ಭಾಷೆ %0:s ಅನ್ನು ಕೀಮನ್ ಕೀಲಿಮಣೆ %1:s ಗೆ ಸೇರಿಸು - ಭಾಷೆ %0:s ಅನ್ನು ಸ್ಥಾಪಿಸಿ ಮತ್ತು ಕೀಮನ್ ಕೀಲಿಮಣೆ %1:s ಗೆ ಸೇರಿಸು - ದಯವಿಟ್ಟು ನಿರೀಕ್ಷಿಸಿ, ನಿಮ್ಮ - ಕೀಲಿಮಣೆ ಜೊತೆ ಕೆಲಸ ಕಾರ್ಯನಿರ್ವಹಿಸುವ ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳುನ್ನು &Name; ಹುಡುಕುತ್ತಿದೆ. - ಯುನಿಕೋಡ್ ಕೀಲಿಮಣೆ ಅಲ್ಲ. ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸ್ಥಾಪಿಸಲಾಗುವುದಿಲ್ಲ. ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳ ಮಾಹಿತಿಗಾಗಿ ದಯವಿಟ್ಟು ಕೀಲಿಮಣೆ ದಸ್ತಾವೇಜನ್ನು(documentation) ಪರಿಶೀಲಿಸಿ. - ಕೆಳಗಿನ ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳು ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ - ಕೀಲಿಮಣೆ: - ಕೆಳಗಿನ ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳು ಸಹ ಕೆಲಸ ಮಾಡಬಹುದು: - ಕೆಳಗಿನ ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳು - ಕೀಲಿಮಣೆಯ ಜೊತೆ ಮಾಡಬಹುದು - ನಿಮ್ಮ ಸಿಸ್ಟಂನಲ್ಲಿ ಯಾವುದೇ ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳು - ಕೀಲಿಮಣೆಯ ಜೊತೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆಯೆಂದು ಕಂಡುಬಂದಿಲ್ಲ. ಈ ಕೀಲಿಮಣೆಗಾಗಿ ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳುನ್ನು ಹುಡುಕಲು, ದಯವಿಟ್ಟು ದಾಖಲೆಯನ್ನು ಪರಿಶೀಲಿಸಿ. - ನೀವು ಯಾವುದೇ ಕೀಲಿಮಣೆಯನ್ನು ಅನುಸ್ಥಾಪಿಸಿಲ್ಲ ಅಥವಾ ಲೋಡ್ ಮಾಡಲಾಗಿಲ್ಲ. ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸವನ್ನು ಅನುಸ್ಥಾಪಿಸಲು &Name; "ಸಂರಚನೆ"(ಕಾನ್ಫಿಗರೇಷನ್)ನಲ್ಲಿ "ಡೌನ್ಲೋಡ್ ಕೀಲಿಮಣೆ" ಗುಂಡಿಯನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ. - ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳನ್ನು ಹುಡುಕಲು, ದಯವಿಟ್ಟು ಒಂದು &Name; ಕೀಲಿಮಣೆ ಆಯ್ಕೆಮಾಡಿ ಆಯ್ಕೆಮಾಡಿ. - ಸುಳಿವು: - ವಿಂಡೋ ಅಂಚಿನಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ ಮತ್ತು ಎಳೆಯುವುದರ ಮೂಲಕ "ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ" ಗಾತ್ರ ಬದಲಾಯಿಸಿ - "&Name;" ಶೀರ್ಷಿಕೆ ಮೇಲೆ ಕ್ಲಿಕ್ ಮಾಡಿ ಮತ್ತು ಎಳೆಯುವ ಮೂಲಕ "ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ" ಅನ್ನು ಸರಿಸಿ. - ನಿಮ್ಮ ದಾಖಲೆಯಲ್ಲಿ ಯಾವುದೇ ಯೂನಿಕೋಡ್ ಅಕ್ಷರವನ್ನು ಸೇರಿಸಿ - ಅಕ್ಷರ ನಕ್ಷೆ ಉಪಕರಣ - ನಿಮ್ಮ ಭಾಷೆಗೆ ಯಾವ ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳು ಕಾರ್ಯ ನಿರ್ವಹಿಸುವೆಂಬುದನ್ನು ಕಂಡುಹಿಡಿಯಲು - ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್) ಸಹಾಯಕ ಉಪಕರಣ - ಕೀಲಿಮಣೆಯ ಇನ್ನಷ್ಟು ಸಹಾಯ ಪಡೆಯಲು, ಇಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ - ಕೀಲಿಮಣೆ ಬಳಕೆ ಗುಂಡಿ - ಕೀಲಿ&ಮಣೆ ಬಳಕೆ - ಅಕ್ಷ&ರ ಶೈಲಿ (ಫಾಂಟ್) ಸಹಾಯಕ - &ಅಕ್ಷರ ನಕ್ಷೆ - &ಪಠ್ಯ ಸಂಪಾದಕ - ಸಂರಚನೆ (&ಕಾನ್ಫಿಗರೇಷನ್) - ಪಠ್ಯ ಸಂಪಾದಕ - &Name; - + + + + www.ಸಿರಿಗನ್ನಡ.com (www.sirigannada.com) + Noto Sans Kannada + 10 + &Name_CNV; + ಹೌದು + ಇಲ್ಲ + &ಹೌದು + &ಇಲ್ಲ + ಸರಿ + ರದ್ದುಮಾಡು + ಮುಚ್ಚು + ಅನ್ವಯಿಸು + ನಂತರ ನನಗೆ ನೆನಪಿಸು + ಸರಿ + ರದ್ದುಮಾಡಿ + ಕೀಲಿಮಣೆಯನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಈ ಚಿತ್ರ(ಐಕಾನ್) ಅನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ + &Name; ಇನ್ನೂ ಚಾಲನೆಯಲ್ಲಿದೆ. ನಿಮ್ಮ ಭಾಷೆ ಕೀಲಿಮಣೆಯನ್ನು ಯಾವುದೇ ಸಮಯದಲ್ಲಿ ಬಳಸಲು ಈ ಚಿತ್ರ(ಐಕಾನ್) ಅನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ + &Name; ಸಂರಚನೆ (ಕಾನ್ಫಿಗರೇಷನ್) + ಶುರುವಾಗುತ್ತಿದೆ + ಸಹಾಯ + ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು + + ಆಯ್ಕೆಗಳು + + ನೇರ ಕೀಲಿಗಳು (ಹಾಟ್‌ಕೀ/ಶಾರ್ಟ್‌ಕಟ್‌ಕೀ) + + ಸಹಾಯ + + ನಮ್ಮ ಸಂಪರ್ಕ + + ಕಡತದ ಹೆಸರು: + ಪ್ಯಾಕೇಜ್ ಆವೃತ್ತಿ: + ಕೀಲಿಮಣೆ ಆವೃತ್ತಿ: + ಲೇಖಕ: + ವೆಬ್‌ಸೈಟ್: + ಪ್ಯಾಕೇಜ್: + ಅಕ್ಷರ ಶೈಲಿಗಳು(ಫಾಂಟ್): + ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು: + ಎನ್ಕೋಡಿಂಗ್: + ವಿನ್ಯಾಸ ಪ್ರಕಾರ: + ಸ್ಥಿರ (ಸ್ಥಾನಿಕ) + ವಿಂಡೋಸ್ ಆವೃತ್ತಿಗೆ ಮ್ಯಾಪ್ ಮಾಡಲಾಗಿದೆ + ವಿವರಣೆ: + ಇದಕ್ಕಾಗಿ ಸ್ಥಾಪಿಸಲಾಗಿದೆ: + ಎಲ್ಲಾ ಬಳಕೆದಾರರು + ಪ್ರಸ್ತುತ ಬಳಕೆದಾರ + ಈ ಕೀಲಿಮಣೆ ಬಳಕೆಯ ಭಾಷೆಗಳು: + X + ಬೇರೆ ಭಾಷೆಯನ್ನು ಈ ಕೀಲಿಮಣೆಗೆ ಸೇರಿಸು + ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ: + ಕಸ್ಟಮ್ + ಸ್ಥಾಪಿಸಲಾಗಿದೆ + ಸ್ಥಾಪಿಸಲಾಗಿಲ್ಲ + ದಾಖಲೆ: + ಸ್ಥಾಪಿಸಲಾಗಿದೆ + ಸ್ಥಾಪಿಸಲಾಗಿಲ್ಲ + ಸಂದೇಶ: + ಕೃತಿಸ್ವಾಮ್ಯ: + ಪ್ಯಾಕೇಜ್ ಆಯ್ಕೆಗಳು + ಆಯ್ಕೆಗಳು + ಕೀಲಿಮಣೆಯನ್ನು ಅನುಸ್ಥಾಪಿಸು + ಕೀಲಿಮಣೆ ಡೌನ್ಲೋಡ್ ಮಾಡಿ + ಕೀಲಿಯನ್ನು ಆಯ್ಕೆಗಳು + ಅಸ್ಥಾಪಿಸು + ಪ್ಯಾಕೇಜ್‌ಅನ್ನು ಅಸ್ಥಾಪಿಸು + ಪರಿಚಯಾತ್ಮಕ ಸಹಾಯವನ್ನು ತೋರಿಸು + ನೇರ ಕೀಲಿಯನ್ನು ಬದಲಾಯಿಸು + ನೇರ ಕೀಲಿಗಳು ಹೊಂದಿಸು + ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆಯನ್ನು ಅಸ್ಥಾಪಿಸು + ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ ಅನುಸ್ಥಾಪಿಸು + ನೀವು ಯಾವುದೇ ಕೀಲಿಮಣೆಯನ್ನು ಸ್ಥಾಪಿಸಿಲ್ಲ. ಕೀಮ್ಯಾನ್ ವೆಬ್‌ಸೈಟ್‌ನಿಂದ ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸವನ್ನು ಸ್ಥಾಪಿಸಲು ಡೌನ್ಲೋಡ್ ಕೀಲಿಮಣೆ ಗುಂಡಿಯನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ. + ನಿರ್ವಾಹಕರಾಗಿದ್ದರೆ(ಅಡ್ಮಿನಿಸ್ಟ್ರೇಟರ್) ಮಾತ್ರ ಕೀಲಿಮಣೆ '%0:s' ಅನ್ನು ಅಸ್ಥಾಪಿಸಬಹುದು + ಸಾಮಾನ್ಯ + ಆರಂಭಿಕ + ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ + ಸುಧಾರಿತ(ಅಡ್ವಾನ್ಸ್ಡ್) + ನೇರಕೀಲಿಗಳು (ಹಾಟ್‌ಕೀ/ಶಾರ್ಟ್‌ಕಟ್‌ಕೀ), ಕೀಲಿಮಣೆ ಕ್ರಿಯಾತ್ಮಕತೆಯನ್ನು ಟಾಗಲ್ ಮಾಡಲಿ + AltGr ಅನ್ನು Ctrl+Alt ಆಗಿ ಅನುಕರಿಸು + ಹಾರ್ಡ್‌ವೇರ್ ಕೀಲಿಗಳನ್ನು ಸರಳ ಕೀಲಿಗಳಾಗಿ ಪರಿಗಣಿಸು + ಸುಳಿವುಗಳನ್ನು ತೋರಿಸು + ಕೀಮ್ಯಾನ್ ಚಲನೆಯನ್ನು ವಿಂಡೋಸ್ ಪ್ರಾರಂಭವಾದಾಗ ಪ್ರಾರಂಭಿಸು + ಸ್ಪ್ಲಾಶ್ ಪರದೆಯನ್ನು ತೋರಿಸು + ಸ್ವಾಗತ ಪರದೆಯನ್ನು ತೋರಿಸು + ನವೀಕರಣಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ www.keyman.com ನಲ್ಲಿ ಸಾಪ್ತಾಹಿಕವಾಗಿ ಪರಿಶೀಲಿಸು + &Name; ಪ್ರಾರಂಭವಾದಾಗ ವೈಫಲ್ಯದ ಅನ್ವಯಗಳನ್ನು ಪರೀಕ್ಷಿಸು + "ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ"ಯಲ್ಲಿ ಯಾವುದೆ ಕೀಲಿಯನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿದ ನಂತರ Shift/Ctrl/Alt ಅನ್ನು ಬಿಡುಗಡೆ ಮಾಡು + ಹೊಸ ಕೀಮ್ಯಾನ್ ಕೀಲಿಮಣೆಯನ್ನು ಆಯ್ಕೆ ಮಾಡಿದಾಗ ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆಯನ್ನು ತೋರಿಸು + ಬೇರೆ ಕೀಲಿಮಣೆಯನ್ನು ಆಯ್ಕೆ ಮಾಡಿದಾಗ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸಹಾಯ ಅಥವಾ ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆಯನ್ನು ಬದಲಿಸು + ಯುನಿಕೋಡ್ ಪೂರಕ ಅಕ್ಷರ ಪ್ರದರ್ಶನವನ್ನು ಆನ್ ಮಾಡಿ (ರೀಸ್ಟಾರ್ಟ್ ಅಗತ್ಯವಿದೆ) + 'ಅಜ್ಞಾತ' ಭಾಷೆಯನ್ನು ಆನ್ ಮಾಡಿ + ಡೀಬಗ್ ಮಾಡುವುದು + ಕೀಮ್ಯಾನ್ ಕೀಲಿಮಣೆ ಆಯ್ಕೆಮಾಡಿದಾಗ ವಿಂಡೋಸ್ ಭಾಷೆಯನ್ನು ಬದಲಿಸು + ಕೀಮ್ಯಾನ್‌ನಲ್ಲಿ ಅಥವಾ ಸಿಸ್ಟಮ್ ಟ್ರೇನಲ್ಲಿ ಆಯ್ಕೆ ಮಾಡಿದ ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸ, ಎಲ್ಲಾ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಗೂ ಅನ್ವಯಿಸುವಂತೆ ಮಾಡು + ವಿಂಡೋಸ್ ವಿಸ್ಟಾದಲ್ಲಿ ಚಾಲನೆ ಮಾಡುವಾಗ ಯಾವಾಗಲೂ ಬಳಕೆದಾರರ ಅನುಮತಿಗಳನ್ನು ಎತ್ತಿ ಹಿಡಿಯಿರಿ + ಬಳಕೆದಾರ ಇಂಟರ್ಫೇಸ್ ಭಾಷೆ... + ಮೂಲ(ಬೇಸ್) ಕೀಲಿಮಣೆ... + (ಯಾವುದೂ ಇಲ್ಲ) + &Name; ಸ್ಥಗಿತಗೊಳಿಸಲು + ಕೀಲಿಮಣೆ ಆಯ್ಕೆ ಪಟ್ಟಿಯನ್ನು ತೆರೆಯಲು + ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ ಫಲಕ ತೋರಿಸಲು + ಸಂರಚನೆ(ಕಾನ್ಫಿಗರೇಷನ್) ತೆರೆಯಲು + ಕೀಲಿಮಣೆ ಬಳಕೆ ಫಲಕವನ್ನು ತೋರಿಸಲು + ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್) ಸಹಾಯಕ ಫಲಕವನ್ನು ತೋರಿಸಲು + ಅಕ್ಷರ ನಕ್ಷೆ ಫಲಕವನ್ನು ತೋರಿಸಲು + ಪಠ್ಯ ಸಂಪಾದಕವನ್ನು ತೆರೆಯಲು + ಭಾಷಾ ಬದಲಾವಣೆ ಫಲಕವನ್ನು ತೋರಿಸಲು + ಸಾಮಾನ್ಯ ನೇರ ಕೀಲಿಗಳು (ಹಾಟ್‌ಕೀ/ಶಾರ್ಟ್‌ಕಟ್‌ಕೀ) + ಕೀಲಿಮಣೆಗಳು + ಸ್ಥಾಪಿಸಲಾಗಿರುವ ಭಾಷೆಗಳು + ವಿಂಡೋಸ್ ಲೇಔಟ್ + ಕೀಮ್ಯಾನ್ ಕೀಲಿಮಣೆ + (ವಿಂಡೋಸ್ ಲೇಔಟ್ ಬಳಸಿ) + ಈಗ ಹೊಸ ಆವೃತ್ತಿಯನ್ನು(ಅಪ್‌ಗ್ರೇಡ್) ಅನುಸ್ಥಾಪಿಸು! + ಸಹಾಯ ವಿನಂತಿ ಕಳುಹಿಸು + ಕೀಮ್ಯಾನ್ ಬೆಂಬಲವನ್ನು ಸಂಪರ್ಕಿಸು + ಕೀಮ್ಯಾನ್‌ ಅನ್ನು ಬಳಸುವಾಗ ನಿಮಗೆ ಯಾವುದೇ ಸಮಸ್ಯೆಗಳು ಕಂಡು ಬಂದರೆ, ಕೀಮ್ಯಾನ್ ಸಮುದಾಯ ವೇದಿಕೆಯಲ್ಲಿ (Keyman Community Forum) ಪ್ರಶ್ನೆಯನ್ನು ಕೇಳಿ. + ಕೀಮ್ಯಾನ್ ಸಮುದಾಯ ವೇದಿಕೆ ತೆರೆಯಿರಿ + ಕೃತಿಸ್ವಾಮ್ಯ © ಎಸ್‌ಐಎಲ್‌ ಇಂಟರ್‌ನ್ಯಾಷನಲ್. ಎಲ್ಲ ಹಕ್ಕುಗಳನ್ನು ಕಾಯ್ದಿರಿಸಲಾಗಿದೆ. + ಆವೃತ್ತಿ + ಇಂಗ್ಲೀಷ್ ಆವೃತ್ತಿ + ಉಪಯುಕ್ತ ಕೊಂಡಿಗಳು + ಆನ್‌ಲೈನ್ ಸಹಾಯ + ಡಯಗ್ನೊಸ್ಟಿಕ್ + ನವೀಕರಣಗಳಿಗಾಗಿ ಪರಿಶೀಲಿಸಿ + ಪ್ರಾಕ್ಸಿ ಸೆಟ್ಟಿಂಗ್ಗಳು... + ಡಯಗ್ನೊಸ್ಟಿಕ್ + ಭಾಷಾ ಸಂಯೋಜನೆಗಳನ್ನು (ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು) ಪರಿಶೀಲಿಸು + ಮೈಕ್ರೋಸಾಫ್ಟ್ ವಿಂಡೋಸ್ ನಿಮ್ಮ ಭಾಷೆ(ಗಳು) ಗಾಗಿ ಸರಿಯಾಗಿ ಸಂಯೋಜನೆ ಮಾಡಲ್ಪಟ್ಟಿದೆ. + keyman.com ಯಿಂದ ಕೀಲಿಮಣೆ ಡೌನ್ಲೋಡ್ ಮಾಡಿ + ಸ್ಥಾಪಿಸಬೇಡಿ, ಡೌನ್ಲೋಡ್ ಮಾಡಿ + ಕೀಲಿಮಣೆ/ಪ್ಯಾಕೇಜ್ ಅನುಸ್ಥಾಪಿಸು + ವಿವರಗಳು + ಸಂದೇಶವನ್ನು ಓದಿ + ಅನುಸ್ಥಾಪಿಸು + ಎಲ್ಲಾ ಬಳಕೆದಾರರಿಗೆ ಅನುಸ್ಥಾಪಿಸು + ಪ್ರಾಕ್ಸಿ ಸರ್ವರ್ ಸಂರಚನೆ(ಕಾನ್ಫಿಗರೇಷನ್) + ಸರ್ವರ್(server): + ಪೊರ್ಟ್(port): + ಬಳಕೆದಾರರ ಹೆಸರು(username): + ಪ್ರವೇಶಪದ(password): + ಮೂಲ(ಬೇಸ್) ಕೀಲಿಮಣೆ ಹೊಂದಿಸಿ + ನೀವು ವಿಂಡೋಸ್‌ನಲ್ಲಿ ಬಳಸುವ ಮೂಲ(ಬೇಸ್) ಲ್ಯಾಟಿನ್(ಇಂಗೀಷ್) ಸ್ಕ್ರಿಪ್ಟ್ ಕೀಲಿಮಣೆ ಆಯ್ಕೆಮಾಡಿ. ಕೀಮ್ಯಾನ್ ಕೀಲಿಮಣೆಯು ನಿಮ್ಮ ಆದ್ಯತೆಯ ವಿನ್ಯಾಸಕ್ಕೆ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಹೊಂದಿಕೊಳ್ಳುತ್ತದೆ. + ನೇರ ಕೀಲಿ ಬದಲಾಯಿಸು + &ನೇರ ಕೀಲಿ ತೆರವುಗೊಳಿಸು + ಭಾಷೆ %0:s ಗಾಗಿ ಪ್ರಮಾಣಿತ ನೇರ ಕೀಲಿಯನ್ನು ಆಯ್ಕೆಮಾಡಿ ಅಥವಾ 'ಕಸ್ಟಮ್' ಆಯ್ಕೆಮಾಡಿ ಮತ್ತು Ctrl, Shift ಮತ್ತು/ಅಥವಾ Alt ಅನ್ನು ಒತ್ತಿ ಮತ್ತು ನೀವು ಬಯಸಿದ ನೇರ ಕೀಲಿಯನ್ನು ಟೈಪ್ ಮಾಡಿ: + ಭಾಷೆ %0:s ಗಾಗಿ ಪ್ರಮಾಣಿತ ಹಾಟ್ಕೀ ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ ಅಥವಾ 'ಕಸ್ಟಮ್' ಆಯ್ಕೆಮಾಡಿ ಮತ್ತು Ctrl, Shift ಮತ್ತು/ಅಥವಾ Alt ಅನ್ನು ಒತ್ತಿ ಮತ್ತು ನಿಮ್ಮ ಬಯಸಿದ ಹಾಟ್ ಕೀಲಿಯನ್ನು ಟೈಪ್ ಮಾಡಿ: + ಪ್ರಮಾಣಿತ ನೇರ ಕೀಲಿಯನ್ನು ಆಯ್ಕೆಮಾಡಿ ಅಥವಾ 'ಕಸ್ಟಮ್' ಆಯ್ಕೆಮಾಡಿ ಮತ್ತು Ctrl, Shift ಮತ್ತು/ಅಥವಾ Alt ಅನ್ನು ಒತ್ತಿ ಮತ್ತು ನೀವು ಬಯಸಿದ ನೇರ ಕೀಲಿಯನ್ನು ಟೈಪ್ ಮಾಡಿ: + ನೇರ ಕೀಲಿ %0:s ಸಾಮಾನ್ಯ ಕೀಲಿಮಣೆ ಬಳಕೆಗೆ ತೊಂದರೆ ಮಾಡುತ್ತದೆ. ನೀವು ಕನಿಷ್ಠ Ctrl ಅಥವಾ Alt ಅನ್ನು ಬಳಸಬೇಕು. ಈಗ ನೀವು ಇದನ್ನು ಬದಲಾಯಿಸಲು ಬಯಸುವಿರಾ? + ನೇರ ಕೀಲಿ %0:s ಕೀಲಿಮಣೆ %1:s ಗಾಗಿ ಆಯ್ಕೆ ಮಾಡಲಾಗಿದೆ. ನೀವು ಮುಂದುವರಿಸಿದರೆ, ಕೀಲಿಮಣೆ %1:s ಗಾಗಿ ನೇರ ಕೀಲಿಯನ್ನು ತೆರವುಗೊಳಿಸಲಾಗುತ್ತದೆ. ಮುಂದುವರಿಸಬೇಕೆ? + ಅನುಸ್ಥಾಪಿಸಲು ಕೀಲಿಮಣೆಯನ್ನು ಆಯ್ಕೆಮಾಡಿ + ಈ ಪ್ಯಾಕೇಜ್‌ನಲ್ಲಿ ಎಲ್ಲಾ ಕೀಲಿಮಣೆಗಳನ್ನು ಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಗರಿಷ್ಟ %0:d ಹೆಚ್ಚುವರಿ ಕೀಲಿಮಣೆಗಳನ್ನು ಸ್ಥಾಪಿಸಬಹುದು. ದಯವಿಟ್ಟು ನೀವು ಈ ಪ್ಯಾಕೇಜ್‌ನಿಂದ ಸ್ಥಾಪಿಸಲು ಬಯಸುವ ಕೀಲಿಮಣೆಯನ್ನು ಮಾತ್ರ ಆಯ್ಕೆ ಮಾಡಿ. + ನವೀಕರಿಸಲಾದ &Name; ಘಟಕಗಳು ಲಭ್ಯವಿದೆ + &Name_CN; ಇದಕ್ಕಾಗಿ ಅಪ್‌ಡೇಟ್‌ಗಳು ಲಭ್ಯವಿದೆ + ದಯವಿಟ್ಟು ನೀವು ಸ್ಥಾಪಿಸಲು ಬಯಸುವ ನವೀಕರಣಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡಿ: + ಈ ಪ್ಯಾಚ್ ಅನ್ನು ಇದೀಗ ನೀವು ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಮತ್ತು ಸ್ಥಾಪಿಸಲು ಬಯಸುವಿರಾ? + ನೀವು ಈ ಹೊಸ ಆವೃತ್ತಿಯನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಬಹುದು: + ನೀವು ಈಗ ವೆಬ್‌ಸೈಟ್‌ಗೆ ಭೇಟಿ ನೀಡಲು ಬಯಸುವಿರಾ? + ಈಗ ಅನುಸ್ಥಾಪಿಸಿ + ರದ್ದುಮಾಡಿ + ಹಳೆಯ ಆವೃತ್ತಿ + ಅಪ್‌ಡೇಟ್‌ ಮಾಡಲಾದ ಘಟಕಗಳು + ಗಾತ್ರ + &Name; %0:s + ಕೀಲಿಮಣೆ %0:s %1:s + keyman.com ವೆಬ್‌ಸೈಟ್‌ ಅನ್ನು ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ - ದಯವಿಟ್ಟು ನೀವು ಸಕ್ರಿಯ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವನ್ನು ಹೊಂದಿದ್ದೀರ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಂಡು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ. + keyman.com ವೆಬ್‌ಸೈಟ್‌ ಅನ್ನು ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ - ದಯವಿಟ್ಟು ನೀವು ಸಕ್ರಿಯ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವನ್ನು ಹೊಂದಿರುವಿರಿ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ ಮತ್ತು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ. ದೋಷ ಸ್ವೀಕರಿಸಲಾಗಿದೆ: %0:s + &Name; ನವೀಕರಣಗಳು ಲಭ್ಯವಿದೆ + ನವೀಕರಣಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಮತ್ತು ಅನುಸ್ಥಾಪಿಸಲು ಈ ಐಕಾನ್ ಕ್ಲಿಕ್ ಮಾಡಿ + ವೀಕ್ಷಿಸಿ ಮತ್ತು ಅನುಸ್ಥಾಪನೆ &Name; ನವೀಕರಣಗಳು + ಆನ್‌ಲೈನ್ ಅಪ್‌ಡೇಟ್ ಪರಿಶೀಲನೆಗೆ ನಿರ್ಗಮನ + &Name_CNV; + &Name; + &Version; + ಪ್ರಾರಂಭಿಸು + ನಿರ್ಗಮಿಸು + ಇತರೆ ಕಾರ್ಯಗಳು + ಸಂರಚನೆ + ಆರಂಭದಲ್ಲಿ ಈ ಪರದೆಯನ್ನು ತೋರಿಸು + ಆರಂಭದಲ್ಲಿ ಈ ಪರದೆಯನ್ನು ತೋರಿಸಬೇಡ + ಪ್ರದರ್ಶನ ಭಾಷೆ + ಇತರ ಪ್ರದರ್ಶನ ಭಾಷೆಗಳನ್ನು ಆನ್‌ಲೈನ್‌ನಲ್ಲಿ ಹುಡುಕಿ... + ಪ್ರದರ್ಶನ ಭಾಷೆ ಭಾಷಾಂತರಿಸಲು ಸಹಾಯ ಮಾಡಿ + ಕನ್ನಡ + ಕನ್ನಡ (Kannada) + kan + en + &Name; + ಪ್ರದರ್ಶನ ಭಾಷೆಯನ್ನು ಆಯ್ಕೆಮಾಡಿ + ನೀವು ಬಯಸುವ ಪ್ರದರ್ಶನ ಭಾಷೆಯನ್ನು &Name; ಫಲಕದಲ್ಲಿ ಆಯ್ಕೆಮಾಡಿ. + &ಆನ್‌ಲೈನ್‌ನಲ್ಲಿ ಇನ್ನಷ್ಟು ಭಾಷೆಗಳು... + ಹೊಸ ಪ್ರದರ್ಶನ ಭಾಷೆಯನ್ನು ಆನ್‌ಲೈನ್‌ನಲ್ಲಿ ಭಾಷಾಂತರ ಮಾಡಿ + ಭಾಷಾ ಸಂರಚನೆ(ಕಾನ್ಫಿಗರೇಷನ್) ಕಾರ್ಯಗಳು + ಕೊನೆಯಲ್ಲಿ ಸೂಚಿಸಲಾದ ಭಾಷೆಯ ಜೊತೆಯಲ್ಲಿ ಕೆಲಸ ಮಾಡಲು, ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ಸಂರಚನೆ(ಕಾನ್ಫಿಗರ್) ಮಾಡಿ: + ಕೆಳಗಿನ ಸಂರಚನಾ ಕಾರ್ಯಗಳ ಸಲುವಾಗಿ ಪೂರ್ಣಗೊಳಿಸಬೇಕು &Name; ಎಂದು ಪತ್ತೆಹಚ್ಚಿದೆ + ಲಿಪಿ(ಗಳು), ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿ ಸರಿಯಾಗಿ ಕೆಲಸ ಮಾಡಲು: + ಮೈಕ್ರೋಸಾಫ್ಟ್ ಆಫೀಸ್ ಭಾಷಾ ಬೆಂಬಲ + ಹೆಚ್ಚಿನ ಮಾಹಿತಿ... + ಈ ಕಾರ್ಯಗಳನ್ನು &Name; ಈಗ ಪೂರ್ಣಗೊಳಿಸಲು ಬಯಸುತ್ತೀರಾ? + ಇದನ್ನು ಮತ್ತೊಮ್ಮೆ ಕೇಳಬೇಡ + ಸುಳಿವುಗಳನ್ನು ಮರುಹೊಂದಿಸು + ಎಲ್ಲಾ ಸುಳಿವು ಸಂದೇಶಗಳನ್ನು ಮರುಹೊಂದಿಸಲಾಗಿದೆ ಮತ್ತು ಮತ್ತೆ ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತದೆ. + ನಿರ್ಗಮನ &Name;? + ನೀವು &Name; ನಿರ್ಗಮಸಲು ಬಯಸುತ್ತೀರಾ? ವಿಂಡೋಸ್ ಕೀಲಿಮಣೆಗಳ ಪಟ್ಟಿಯಲ್ಲಿ ಕೀಮ್ಯಾನ್ ಕೀಲಿಮಣೆಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ. ಆದರೆ ನೀವು &Name; ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸುವವರೆಗೆ ಕೀಮ್ಯಾನ್ ಕೀಲಿಮಣೆಗಳು ಕ್ರಿಯಾತ್ಮಕವಾಗಿರುವುದಿಲ್ಲ. + ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ ಮುಚ್ಚಲಾಗಿದೆ + ನೀವು "ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ"ಅನ್ನು ಮುಚ್ಚಿದ್ದೀರಿ. &Name; ಇನ್ನೂ ಚಾಲನೆಯಲ್ಲಿದೆ. &Name; ಚಿತ್ರ(ಐಕಾನ್) ಮೇಲೆ ನೀವು ಯಾವುದೇ ಸಮಯದಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ ಮತ್ತು "ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ" ಆಯ್ಕೆಮಾಡುವ ಮೂಲಕ; "ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ"ಅನ್ನು ತೆರೆಯಬಹುದು. + ಈ ಸುಳಿವನ್ನು ಮತ್ತೆ ತೋರಿಸಬೇಡ + &Name; ಸಹಾಯ + ಪ್ರಾರಂಭಿಸಿ + ಸಹಾಯ ಪರಿವಿಡಿ + " + " ಕೀಲಿಮಣೆಗೆ ಸಹಾಯ + "ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ" ತೆರೆ + ಕೀಲಿಮಣೆ ಬಳಕೆ ಫಲಕವನ್ನು ತೆರೆ + ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್) ಸಹಾಯಕ ಫಲಕವನ್ನು ತೆರೆ + ಅಕ್ಷರ ನಕ್ಷೆ ಫಲಕವನ್ನು ತೆರೆ + &Name; ಬೆಳಕನ್ನು ಮುಚ್ಚಿ + &Name; ಸಂರಚನೆ(ಕಾನ್ಫಿಗರೇಷನ್) ತೆರೆ + ಸಹಾಯ ತೆರೆ + "ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ" ಮುಚ್ಷು + &ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ + &ಸಹಾಯ... + &ನಿರ್ಗಮನ + ನೀವು ಯಾವುದೇ ಕೀಲಿಮಣೆಯನ್ನು ಅನುಸ್ಥಾಪಿಸಿಲ್ಲ. ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸವನ್ನು ಸ್ಥಾಪಿಸಲು "ಸಂರಚನೆ"(ಕಾನ್ಫಿಗರೇಷನ್)ನಲ್ಲಿ "ಡೌನ್ಲೋಡ್ ಕೀಲಿಮಣೆ" ಗುಂಡಿಯನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ. + ನಿಷ್ಕ್ರಿಯವಾಗಿದ್ದಾಗ ಫೇಡ್ ಮಾಡಿ + ಉಪಕರಣ ಪಟ್ಟಿ(ಟೂಲ್‌ಬಾರ್) ತೋರಿಸು + ವೆಬ್ ಪುಟದಂತೆ ಉಳಿಸು... + ಪ್ರಿಂಟ್... + ಕೀಲಿಮಣೆ ಸಹಾಯ + ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ + ಪ್ರಾರಂಭಿಸು + &Name; ಸಹಾಯ + &Name; ಸಂರಚನೆ (ಕಾನ್ಫಿಗರೇಷನ್) + ಈ ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸವು ಪ್ರಾರಂಭಿಸುವಿಕೆ ಅಥವಾ ಬಳಕೆ ದಸ್ತಾವೇಜನ್ನು ಹೊಂದಿಲ್ಲ. ಈ ಕೀಲಿಮಣೆ ಲೇಔಟ್ ಅನ್ನು ಹೇಗೆ ಬಳಸುವುದು ಎಂಬುದರ ಕುರಿತು ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ ಸ್ಟಾರ್ಟ್ ಮೆನುವನ್ನು ಪರಿಶೀಲಿಸಿ ಅಥವಾ ಕೀಲಿಮಣೆ ಅಭಿವೃದ್ಧಿಪಡಿಸಿದವರನ್ನು ಸಂಪರ್ಕಿಸಿ. + ಹೆಚ್ಚುವರಿ ದಸ್ತಾವೇಜನ್ನು ಮತ್ತು/ಅಥವಾ "ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ" ವೀಕ್ಷಿಸಲು ಕೆಳಗಿನ ಗುಂಡಿಗಳನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ. + ಪ್ರಸ್ತುತ &Name; ರಲ್ಲಿ ಯಾವುದೇ ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸವನ್ನು ಆಯ್ಕೆ ಮಾಡಲಾಗಿಲ್ಲ. ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸವನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಮೇಲಿನ ಉಪಕರಣ ಪಟ್ಟಿ(ಟೂಲ್‌ಬಾರ್)ನಲ್ಲಿನ ಯಾವುದೇ ಕೀಲಿಮಣೆ ಚಿತ್ರ(ಐಕಾನ್)ಗಳನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ. + ಯಾವುದೇ ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳನ್ನು ಪ್ರಸ್ತುತ ಸ್ಥಾಪಿಸಿಲ್ಲ ಅಥವಾ ಲೋಡ್ ಮಾಡಲಾಗಿಲ್ಲ. ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸವನ್ನು ಅನುಸ್ಥಾಪಿಸಲು &Name; ಸಂರಚನೆಯನ್ನು(ಕಾನ್ಫಿಗರೇಷನ್) ಬಳಸಿ. + &Name_CN; + ಆವೃತ್ತಿ %0:s + ಸಹಾಯ + &ಮುದ್ರಿಸು.... + &ಡೌನ್ಲೋಡ್... + %0:s ಹೆಸರಿನ ಪ್ಯಾಕೇಜ್‌ಅನ್ನು ಈಗಾಗಲೇ ಸ್ಥಾಪಿಸಲಾಗಿದೆ. ನೀವು ಅದನ್ನು ಅಸ್ಥಾಪಿಸಲು ಹಾಗು ಹೊಸದನ್ನು ಅನುಸ್ಥಾಪಿಸಲು ಬಯಸುವಿರಾ? + %0:s ಹೆಸರಿನ ಕೀಲಿಮಣೆ ಈಗಾಗಲೇ ಅನುಸ್ಥಾಪಿಸಲಾಗಿದೆ. ನೀವು ಅದನ್ನು ಅಸ್ಥಾಪಿಸಬೇಕಾಗುತ್ತದೆ ಹಾಗು ಹೊಸ ಕೀಲಿಮಣೆಯನ್ನು ಸ್ಥಾಪಿಸಲಾಗುವುದು. ಮುಂದುವರಿಸಬೇಕೆ? + '%0:s' ಕೀಲಿಮಣೆ '%1:s' ಪ್ಯಾಕೇಜಿನ ಭಾಗವಾಗಿದೆ. ನೀವು ಸಂಪೂರ್ಣ ಪ್ಯಾಕೇಜ್ ಅನ್ನು ಅಸ್ಥಾಪಿಸಬೇಕಾಗುತ್ತದೆ. ಮುಂದುವರಿಸಬೇಕೇ? + ನಿರ್ವಾಹಕರಾಗಿದ್ದರೆ(ಅಡ್ಮಿನಿಸ್ಟ್ರೇಟರ್) ಮಾತ್ರ ಕೀಲಿಮಣೆಗಳನ್ನು ಅನುಸ್ಥಾಪಿಸಿ ಅಥವಾ ಅಸ್ಥಾಪಿಸಬಹುದು. ಸಾಮಾನ್ಯ ಬಳಕೆದಾರನಾಗಿ ಬಳಸಲು ಭಾಷೆಯನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ನಿಯಂತ್ರಣ ಫಲಕವನ್ನು (control panel) ಬಳಸಿ. + ಪರ್ಯಾಯ ಸಂಯೋಜನೆಗಳನ್ನು (ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು) ಬದಲಾಯಿಸಲು ವಿಂಡೋಸ್ ಅನ್ನು ಪುನರಾರಂಭಿಸಬೇಕಾಗಿದೆ. ನೀವು ಈಗ ವಿಂಡೋಸ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಲು ಬಯಸುವಿರಾ? + ಈ '%0:s' ಪ್ಯಾಕೇಜ್ ಅಥವಾ ಕೀಲಿಮಣೆ ಯಾವುದೇ ಪರಿಚಯಾತ್ಮಕ ಸಹಾಯವನ್ನು ಒಳಗೊಂಡಿಲ್ಲ. + ಈ ಆಪರೇಟಿಂಗ್ ಸಿಸ್ಟಮ್‌ನಲ್ಲಿ ನಮ್ಮ ತಂತ್ರಾಂಶ ಕೆಲಸ ಮಾಡುವುದಿಲ್ಲ. + ನಿಮ್ಮ ಪರವಾನಗಿ ಯಶಸ್ವಿಯಾಗಿ ಸಕ್ರಿಯಗೊಂಡಿದೆ. + KeymanDesktop.chm + ಸಹಾಯ ಕಡತ $(SKOnlineHelpFile) ಕಂಡುಬಂದಿಲ್ಲ. + <ಹಾನಿಗೊಳಗಾದ ಕೀಲಿಮಣೆ> + ಕೋಡ್‌ಪುಟ + ಯೂನಿಕೋಡ್ + ಡೌನ್ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ + %0:s ಕೀಲಿಮಣೆಯ "ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ ಫಲಕ" ಅಸ್ಥಾಪಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ? + %0:s ಕೀಲಿಮಣೆಯನ್ನು ಅಸ್ಥಾಪಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ? + %0:s ಪ್ಯಾಕೇಜ್‌ಅನ್ನು ಹಾಗು %1:s ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳನ್ನು ಅಸ್ಥಾಪಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ? + ಕೆಳಗಿನ ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳನ್ನು ಸಹ ಅಸ್ಥಾಪಿಸಲ್ಪಡುತ್ತವೆ: %0:s. + ಪರವಾನಗಿ ಸಂಖ್ಯೆ %0:s ಯೊಂದಿಗೆ ಈಗ ನೀವು ಆನ್‌ಲೈನ್‌ನಲ್ಲಿ ಸಕ್ರಿಯಗೊಳಿಸಲು $(SKShortApplicationTitle) ಬಯಸುತ್ತೀರಾ? ನೀವು "ಇಲ್ಲ" ಅಥವಾ "ರದ್ದುಮಾಡಿ" ಗುಂಡಿಯನ್ನು ಕ್ಲಿಕ್ ಮಾಡದಿದ್ದರೆ, ಪರ್ಯಾಯ ಸಕ್ರಿಯಗೊಳಿಸುವ ವಿಧಾನಗಳಿಂದ ನೀವು ಆಯ್ಕೆ ಮಾಡಬಹುದು. + ಕ್ಯಾರೆಕ್ಟರ್ ಮ್ಯಾಪ್ ಅನ್ನು ಬಳಸಬಹುದಾದ ಮೊದಲು ನಿರ್ಮಿಸಬೇಕಾದ ಪಾತ್ರಗಳ ದತ್ತಾಂಶ ಹೊಂದಿದೆ. ಈಗ ನಿರ್ಮಿಸಲು ಬಯಸುವಿರಾ? + ಪುನರ್ನಿರ್ಮಾಣಕ್ಕಾಗಿ ಯೂನಿಕೋಡ್ ಕ್ಯಾರೆಕ್ಟರ್ ಡೇಟಾಬೇಸ್ ಅನ್ನು ಅಳಿಸಲಾಗಲಿಲ್ಲ. ದೋಷ ವಿವರಗಳು: %0:s + ಯುನಿಕೋಡ್ ಕ್ಯಾರೆಕ್ಟರ್ ಡೇಟಾಬೇಸ್ ಅನ್ನು ರಚಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ ಮತ್ತು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ. ದೋಷ ವಿವರಗಳು: %0:s + ಯುನಿಕೋಡ್ ಪಾತ್ರ ಡೇಟಾಬೇಸ್ ಯಶಸ್ವಿಯಾಗಿ ಲೋಡ್ ಮಾಡಲಿಲ್ಲ (%0:s). ಇದೀಗ ಅದನ್ನು ಮರುನಿರ್ಮಾಣ ಮಾಡುವುದೇ? + ಬ್ರೌಸರ್ ಅನ್ನು ಅಥವಾ ಈ URL ಗಾಗಿ ಇಮೇಲ್ ಪ್ರೋಗ್ರಾಂ ಸಕ್ರಿಯಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. + ಕೀಲಿಮಣೆ ಯಶಸ್ವಿಯಾಗಿ ಮುದ್ರಿಸಲಾಗಲಿಲ್ಲ. ವೆಬ್ ಪುಟಕ್ಕೆ ಉಳಿಸಲು ಮತ್ತು ಮುದ್ರಿಸಲು ದಯವಿಟ್ಟು ಬೇರೆ ಪ್ರಯತ್ನಿಸಿ. + &Name; ಪ್ರಾರಂಭಿಸಲು ವಿಫಲವಾಗಿದೆ. ಮುಂದುವರೆಯುವ ಮೊದಲು keyman.exe ಅನ್ನು ಆರಂಭಿಸಲು ಅನುಮತಿಸಲಾಗಿದೆಯೇ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ದಯವಿಟ್ಟು ನಿಮ್ಮ ಭದ್ರತೆ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು(security settings) ಪರಿಶೀಲಿಸಿ. ಹಿಂದಿರುಗಿದ ದೋಷವೆಂದರೆ: "%0:s". ಈಗ ನೀವು ಪ್ರಯತ್ನಿಸಿ ಹಾಗೂ ಮತ್ತೆ &Name; ಪ್ರಾರಂಭಿಸಲು ಬಯಸುವಿರಾ? + &Name; ಡೀಬಗ್ ಮಾಹಿತಿಯನ್ನು ನಿಮ್ಮ ಡೆಸ್ಕ್‌ಟಾಪ್‌ನಲ್ಲಿ keymanlog\system.log ಕರೆಯಲಾಗುವ ಪಠ್ಯ ಫೈಲ್‌ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ. ಈ ಫೈಲ್ ಅನ್ನು ಓದುವ ಅಥವಾ ಅಳಿಸುವ ಮೊದಲು ನೀವು &Name; ನಿರ್ಗಮಿಸಬೇಕು. ಎಚ್ಚರಿಕೆ: ಈ ಫೈಲ್ ಬಹಳ ವೇಗವಾಗಿ ಬೆಳೆಯುತ್ತದೆ. ಡೀಬಗ್ ಮಾಡುವುದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುವುದರಿಂದ ನಿಮ್ಮ ಸಿಸ್ಟಮ್ ಅನ್ನು ನಿಧಾನಗೊಳಿಸುತ್ತದೆ ಮತ್ತು ತಾಂತ್ರಿಕ ಬೆಂಬಲದಿಂದ ಸಲಹೆ ನೀಡಿದರೆ ಮಾತ್ರ ಮಾಡಬೇಕು. ಖಾಸಗಿ ಎಚ್ಚರಿಕೆ: ನೀವು ಟೈಪ್ ಮಾಡುವ ಎಲ್ಲಾ ಕೀಸ್ಟ್ರೋಕ್‌ಗಳನ್ನು ಡೀಬಗ್ ಲಾಗ್‌ಫೈಲ್ ದಾಖಲಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಡೀಬಗ್ ಮಾಡುವಿಕೆ ಅಥವಾ ಡಯಗ್ನೊಸ್ಟಿಕ್ ಆಗುವ ಅವಧಿಯನ್ನು ನೀವು ಮಾತ್ರ ಡೀಬಗ್ ಲಾಗ್ಆನ್ ಮಾಡಬೇಕು, ಮತ್ತು ಸಾಧ್ಯವಾದಷ್ಟು ಬೇಗ [desktop]\keymanlog\system.log ಫೈಲ್ ಅಳಿಸಿ. + %1:s ಗೆ %0:s ಸಂಪಾದನೆ ಬೆಂಬಲವನ್ನು ಸೇರಿಸಿ + ಮೈಕ್ರೋಸಾಫ್ಟ್ ಆಫೀಸ್ ೨೦೦೦ + ಮೈಕ್ರೋಸಾಫ್ಟ್ ಆಫೀಸ್ ಎಕ್ಸ್ ಪಿ + ಮೈಕ್ರೋಸಾಫ್ಟ್ ಆಫೀಸ್ ೨೦೦೩ + ಮೈಕ್ರೋಸಾಫ್ಟ್ ಆಫೀಸ್ ೨೦೦೭ + ಮೈಕ್ರೋಸಾಫ್ಟ್ ಆಫೀಸ್ ೨೦೧೦ + ಭಾಷೆ %0:s ಅನ್ನು ಕೀಮನ್ ಕೀಲಿಮಣೆ %1:s ಗೆ ಸೇರಿಸು + ಭಾಷೆ %0:s ಅನ್ನು ಸ್ಥಾಪಿಸಿ ಮತ್ತು ಕೀಮನ್ ಕೀಲಿಮಣೆ %1:s ಗೆ ಸೇರಿಸು + ದಯವಿಟ್ಟು ನಿರೀಕ್ಷಿಸಿ, ನಿಮ್ಮ + ಕೀಲಿಮಣೆ ಜೊತೆ ಕೆಲಸ ಕಾರ್ಯನಿರ್ವಹಿಸುವ ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳುನ್ನು &Name; ಹುಡುಕುತ್ತಿದೆ. + ಯುನಿಕೋಡ್ ಕೀಲಿಮಣೆ ಅಲ್ಲ. ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸ್ಥಾಪಿಸಲಾಗುವುದಿಲ್ಲ. ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳ ಮಾಹಿತಿಗಾಗಿ ದಯವಿಟ್ಟು ಕೀಲಿಮಣೆ ದಸ್ತಾವೇಜನ್ನು(documentation) ಪರಿಶೀಲಿಸಿ. + ಕೆಳಗಿನ ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳು ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ + ಕೀಲಿಮಣೆ: + ಕೆಳಗಿನ ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳು ಸಹ ಕೆಲಸ ಮಾಡಬಹುದು: + ಕೆಳಗಿನ ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳು + ಕೀಲಿಮಣೆಯ ಜೊತೆ ಮಾಡಬಹುದು + ನಿಮ್ಮ ಸಿಸ್ಟಂನಲ್ಲಿ ಯಾವುದೇ ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳು + ಕೀಲಿಮಣೆಯ ಜೊತೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆಯೆಂದು ಕಂಡುಬಂದಿಲ್ಲ. ಈ ಕೀಲಿಮಣೆಗಾಗಿ ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳುನ್ನು ಹುಡುಕಲು, ದಯವಿಟ್ಟು ದಾಖಲೆಯನ್ನು ಪರಿಶೀಲಿಸಿ. + ನೀವು ಯಾವುದೇ ಕೀಲಿಮಣೆಯನ್ನು ಅನುಸ್ಥಾಪಿಸಿಲ್ಲ ಅಥವಾ ಲೋಡ್ ಮಾಡಲಾಗಿಲ್ಲ. ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸವನ್ನು ಅನುಸ್ಥಾಪಿಸಲು &Name; "ಸಂರಚನೆ"(ಕಾನ್ಫಿಗರೇಷನ್)ನಲ್ಲಿ "ಡೌನ್ಲೋಡ್ ಕೀಲಿಮಣೆ" ಗುಂಡಿಯನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ. + ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳನ್ನು ಹುಡುಕಲು, ದಯವಿಟ್ಟು ಒಂದು &Name; ಕೀಲಿಮಣೆ ಆಯ್ಕೆಮಾಡಿ ಆಯ್ಕೆಮಾಡಿ. + ಸುಳಿವು: + ವಿಂಡೋ ಅಂಚಿನಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ ಮತ್ತು ಎಳೆಯುವುದರ ಮೂಲಕ "ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ" ಗಾತ್ರ ಬದಲಾಯಿಸಿ + "&Name;" ಶೀರ್ಷಿಕೆ ಮೇಲೆ ಕ್ಲಿಕ್ ಮಾಡಿ ಮತ್ತು ಎಳೆಯುವ ಮೂಲಕ "ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ" ಅನ್ನು ಸರಿಸಿ. + ನಿಮ್ಮ ದಾಖಲೆಯಲ್ಲಿ ಯಾವುದೇ ಯೂನಿಕೋಡ್ ಅಕ್ಷರವನ್ನು ಸೇರಿಸಿ + ಅಕ್ಷರ ನಕ್ಷೆ ಉಪಕರಣ + ನಿಮ್ಮ ಭಾಷೆಗೆ ಯಾವ ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳು ಕಾರ್ಯ ನಿರ್ವಹಿಸುವೆಂಬುದನ್ನು ಕಂಡುಹಿಡಿಯಲು + ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್) ಸಹಾಯಕ ಉಪಕರಣ + ಕೀಲಿಮಣೆಯ ಇನ್ನಷ್ಟು ಸಹಾಯ ಪಡೆಯಲು, ಇಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ + ಕೀಲಿಮಣೆ ಬಳಕೆ ಗುಂಡಿ + ಕೀಲಿ&ಮಣೆ ಬಳಕೆ + ಅಕ್ಷ&ರ ಶೈಲಿ (ಫಾಂಟ್) ಸಹಾಯಕ + &ಅಕ್ಷರ ನಕ್ಷೆ + &ಪಠ್ಯ ಸಂಪಾದಕ + ಸಂರಚನೆ (&ಕಾನ್ಫಿಗರೇಷನ್) + ಪಠ್ಯ ಸಂಪಾದಕ - &Name; + From 2698706fe6e830513011d25413149df12316a08f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E0=B2=AE=E0=B2=AF=E0=B3=82=E0=B2=B0=20=E0=B2=B5=E0=B2=B0?= =?UTF-8?q?=E0=B3=8D=E0=B2=AE?= Date: Mon, 18 Feb 2019 01:44:50 -0600 Subject: [PATCH 11/16] Update locale.xml --- windows/src/desktop/kmshell/locale/kan-Knda-IN/locale.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/windows/src/desktop/kmshell/locale/kan-Knda-IN/locale.xml b/windows/src/desktop/kmshell/locale/kan-Knda-IN/locale.xml index 4e5ac5a337..845de8f5bf 100644 --- a/windows/src/desktop/kmshell/locale/kan-Knda-IN/locale.xml +++ b/windows/src/desktop/kmshell/locale/kan-Knda-IN/locale.xml @@ -1,5 +1,5 @@ - + www.ಸಿರಿಗನ್ನಡ.com (www.sirigannada.com) Noto Sans Kannada From 046d1fdd6c570d20e7c5f63481d728c454a0f8d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E0=B2=AE=E0=B2=AF=E0=B3=82=E0=B2=B0=20=E0=B2=B5=E0=B2=B0?= =?UTF-8?q?=E0=B3=8D=E0=B2=AE?= Date: Mon, 18 Feb 2019 01:46:30 -0600 Subject: [PATCH 12/16] Update locale.xml --- windows/src/desktop/kmshell/locale/kan-Knda-IN/locale.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/windows/src/desktop/kmshell/locale/kan-Knda-IN/locale.xml b/windows/src/desktop/kmshell/locale/kan-Knda-IN/locale.xml index 845de8f5bf..813314d1e2 100644 --- a/windows/src/desktop/kmshell/locale/kan-Knda-IN/locale.xml +++ b/windows/src/desktop/kmshell/locale/kan-Knda-IN/locale.xml @@ -1,5 +1,5 @@ - + www.ಸಿರಿಗನ್ನಡ.com (www.sirigannada.com) Noto Sans Kannada From ffebb60a921c2992d616d11908bfa2f2e0b8acd7 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Tue, 19 Feb 2019 15:29:09 +1100 Subject: [PATCH 13/16] [Windows] Fixes #1600. Keyman now handles backspace correctly again for SMP characters in TSF-aware apps --- windows/src/engine/keyman32/kmprocess.cpp | 7 +++++++ .../src/engine/keyman32/message-analyzer/README.md | 12 ++++++++++++ 2 files changed, 19 insertions(+) diff --git a/windows/src/engine/keyman32/kmprocess.cpp b/windows/src/engine/keyman32/kmprocess.cpp index 2b8253bdf0..2e15475548 100644 --- a/windows/src/engine/keyman32/kmprocess.cpp +++ b/windows/src/engine/keyman32/kmprocess.cpp @@ -281,6 +281,13 @@ BOOL ProcessGroup(LPGROUP gp) fOutputKeystroke = TRUE; // I4933 return FALSE; // I4933 } + if (Uni_IsSurrogate1(*pdeletecontext) && Uni_IsSurrogate2(*(pdeletecontext+1))) { + // 2 backspaces to delete both parts of surrogate pair + // This only needs to be done for non-legacy apps as legacy apps + // will receive a BKSP WM_KEYDOWN event which results in deleting + // both parts in one action + _td->app->QueueAction(QIT_BACK, BK_BACKSPACE); + } } _td->app->QueueAction(QIT_BACK, BK_BACKSPACE); // I4933 } diff --git a/windows/src/engine/keyman32/message-analyzer/README.md b/windows/src/engine/keyman32/message-analyzer/README.md index b7a41da2e2..3bdbaa9915 100644 --- a/windows/src/engine/keyman32/message-analyzer/README.md +++ b/windows/src/engine/keyman32/message-analyzer/README.md @@ -4,4 +4,16 @@ keyman-debug-etw.man will be installed with Keyman Engine so that debug log file Microsoft Message Analyzer. You can import the layout file keyman-debug-etw.asset into Microsoft Message Analyzer to provide a good default layout for Keyman log files. +To manually install the provider, run: + + wevtutil im keyman-debug-etw.man + +To uninstall it (a good idea often before installing): + + wevtutil um keyman-debug-etw.man + +You may need to manually edit the file to add the paths for keyman32.dll, e.g.: + + + Debug log files are written to %LOCAL_APP_DATA%\Keyman\Diag. From 94440cab75020e5bf3ef9a601d2f1a61848242b5 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Tue, 19 Feb 2019 16:15:11 +1100 Subject: [PATCH 14/16] [Developer] Fixes sillsdev/keyman-issues#5835. Crash when creating new touch layout in certain circumstances. --- .../developer/TIKE/oskbuilder/UframeTouchLayoutBuilder.pas | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/windows/src/developer/TIKE/oskbuilder/UframeTouchLayoutBuilder.pas b/windows/src/developer/TIKE/oskbuilder/UframeTouchLayoutBuilder.pas index 01a3841d2d..8d93a2564b 100644 --- a/windows/src/developer/TIKE/oskbuilder/UframeTouchLayoutBuilder.pas +++ b/windows/src/developer/TIKE/oskbuilder/UframeTouchLayoutBuilder.pas @@ -464,9 +464,15 @@ procedure TframeTouchLayoutBuilder.Save(const AFilename: string); var s: string; begin + if (FFilename = '') and (AFilename <> '') then + begin + Load(AFilename, not FileExists(AFilename), False); + end; + if not IsModified and FileExists(AFilename) then // I4047 // I4147 Exit; s := GetLayoutJS; + if s = '' then Exit; FSavedLayoutJS := s; From ef9cac3a4dd62e99d7b5246cefb124292c40e23f Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Tue, 19 Feb 2019 17:23:45 +1100 Subject: [PATCH 15/16] [Developer] Fixes #1589. Buttons in Distribution tab now work. --- .../src/developer/TIKE/child/UfrmEditor.pas | 12 +- windows/src/developer/TIKE/main/UfrmMain.pas | 2952 ++++++++--------- ...eyman.Developer.UI.Project.UfrmProject.pas | 2 - 3 files changed, 1480 insertions(+), 1486 deletions(-) diff --git a/windows/src/developer/TIKE/child/UfrmEditor.pas b/windows/src/developer/TIKE/child/UfrmEditor.pas index cff811b950..d212ea7ccd 100644 --- a/windows/src/developer/TIKE/child/UfrmEditor.pas +++ b/windows/src/developer/TIKE/child/UfrmEditor.pas @@ -232,15 +232,11 @@ function TfrmEditor.DoOpenFile: Boolean; begin RefreshOptions; - if FileExists(FileName) then + FEditorFrame.LoadFromFile(FileName); + UpdateEditorFormat; + + if not FileExists(FileName) then begin - FEditorFrame.LoadFromFile(FileName); - UpdateEditorFormat; - end - else - begin - TextFileFormat := tffUTF8; - UpdateEditorFormat; case EditorFormat of // I1423 - default template efXML: SetEditorText(GetXMLTemplate); efHTML: SetEditorText(GetHTMLTemplate); diff --git a/windows/src/developer/TIKE/main/UfrmMain.pas b/windows/src/developer/TIKE/main/UfrmMain.pas index a117c60370..88742a7196 100644 --- a/windows/src/developer/TIKE/main/UfrmMain.pas +++ b/windows/src/developer/TIKE/main/UfrmMain.pas @@ -1,910 +1,910 @@ -(* - Name: UfrmMain - Copyright: Copyright (C) SIL International. - Documentation: - Description: - Create Date: 20 Jun 2006 - - Modified Date: 24 Aug 2015 - Authors: mcdurdin - Related Files: - Dependencies: - - Bugs: - Todo: - Notes: - History: 20 Jun 2006 - mcdurdin - Initial version - 01 Aug 2006 - mcdurdin - Rework ui using sp-TBX - 02 Aug 2006 - mcdurdin - Remove old menu - 23 Aug 2006 - mcdurdin - Remove Window menu - 23 Aug 2006 - mcdurdin - Refactor menus as actions - 23 Aug 2006 - mcdurdin - Implement encoding combobox - 23 Aug 2006 - mcdurdin - Support WM_InputLangChange for visual keyboard dynamic refresh - 23 Aug 2006 - mcdurdin - Add help form - 23 Aug 2006 - mcdurdin - Force tab orders to active child or active docked form only (not through all forms) - 30 Aug 2006 - mcdurdin - Add reformat XML edit menu item - 14 Sep 2006 - mcdurdin - Add debug toolbar - 14 Sep 2006 - mcdurdin - Add CRM links - 14 Sep 2006 - mcdurdin - Add UnicodeData build callbacks - 14 Sep 2006 - mcdurdin - Add new Character Map events - 28 Sep 2006 - mcdurdin - Add check for updates, debug manager - 28 Sep 2006 - mcdurdin - Remove file association check (now done only by installer) - 04 Dec 2006 - mcdurdin - Add CRM button - 04 Dec 2006 - mcdurdin - Add file to project MRU when opened - 04 Dec 2006 - mcdurdin - Support standalone OSK editor for KVK files - 12 Dec 2006 - mcdurdin - Remove Project Settings menu item - 04 Jan 2007 - mcdurdin - Add help support - 04 Jan 2007 - mcdurdin - Add proxy support - 04 Jan 2007 - mcdurdin - Fix scroll bug for page control - 04 Jan 2007 - mcdurdin - Check if branding pack is installed - 15 Jan 2007 - mcdurdin - Disable KPP editor if no branding pack installed - 25 Jan 2007 - mcdurdin - Remove ActiveChild.Setfocus in WMActivate (resets focus to wrong control) - 16 May 2007 - mcdurdin - I806 - File/Close menu item - 30 May 2007 - mcdurdin - I825 - Added proxy username and password - 23 Aug 2007 - mcdurdin - I1010 - Persist untitled project - 23 Aug 2007 - mcdurdin - I1004 - Fix crash when starting up on Vista with Matrox driver? - 12 Oct 2007 - mcdurdin - I944 - Fix crash when FChildWindows is nil when closing Keyman Developer - 19 Nov 2007 - mcdurdin - I1157 - const string parameters - 16 Jan 2009 - mcdurdin - Add font helper menu item - 25 May 2010 - mcdurdin - I2392 - Activation Client integration - 26 Jul 2010 - mcdurdin - I2467 - 8.0 renumber - 17 Dec 2010 - mcdurdin - U2595 - Remove gnugettext - 31 Jan 2011 - mcdurdin - I2655 - No prompt for unsaved untitled project on exit - 03 May 2011 - mcdurdin - I2890 - Record diagnostic data when encountering registry errors - 18 May 2012 - mcdurdin - I3306 - V9.0 - Remove TntControls + Win9x support - 08 Jun 2012 - mcdurdin - I3350 - V9.0 - Register control classes for Keyman Developer to start - 17 Aug 2012 - mcdurdin - I3377 - KM9 - Update code references from 8.0 to 9.0 - 08 Oct 2012 - mcdurdin - I3463 - V9.0 - Look up charmap root path from registry when starting Developer - 24 Oct 2012 - mcdurdin - I3484 - V9.0 - Tidy up look and feel of Keyman Developer skins - 24 Jan 2012 - mcdurdin - I3184 - Missing manifest for tike.exe - 02 Feb 2012 - mcdurdin - I2975 - VistaAltFixUnit causes exception on shutdown - 06 Feb 2012 - mcdurdin - I3082 - Reload text file with specific encoding support - 03 Nov 2012 - mcdurdin - I3502 - V9.0 - Merge of I3082 - Reload text file with specific encoding support - 03 Nov 2012 - mcdurdin - I3501 - V9.0 - Merge of I3184 - Missing manifest for tike.exe - 11 Aug 2013 - mcdurdin - I3887 - V9.0 - Use strict most standard compliant edge compatibility for embedded IE in TIKE - 13 Feb 2014 - mcdurdin - I4045 - V9.0 - Developer should use a TIKE user agent for the layout editor - 27 Feb 2014 - mcdurdin - I4081 - V9.0 - Trace compile errors in subfiles in Keyman Developer - 10 Jun 2014 - mcdurdin - I4257 - V9.0 - Add ethnologue language codes to unicodedata.mdb - 10 Jun 2014 - mcdurdin - I3733 - V9.0 - File format dropdown should be disabled in project view - 10 Oct 2014 - mcdurdin - I4436 - V9.0 - browser emulation control for kmshell breaks downlevel versions of Keyman - 04 Nov 2014 - mcdurdin - I4507 - V9.0 - Move tab close button onto tabs - 30 Apr 2015 - mcdurdin - I4677 - V9.0 - Move Developer help to online only - 04 May 2015 - mcdurdin - I4687 - V9.0 - Split project UI actions into separate classes - 04 May 2015 - mcdurdin - I4691 - V9.0 - Always save project automatically - 27 May 2015 - mcdurdin - I4352 - Developer crashes on exit occasionally [CrashID:tike.exe_9.0.453.0_0058805F_EInvalidOperation] - 27 May 2015 - mcdurdin - I4404 - Developer crashes on exit occasionally [CrashID:tike.exe_9.0.466.0_0058805F_EInvalidOperation] - 27 May 2015 - mcdurdin - I4485 - Developer crashes on exit occasionally [CrashID:tike.exe_9.0.473.0_005880FB_EInvalidOperation] - 23 Jun 2015 - mcdurdin - I4749 - Opening a keyboard externally can open it multiple times - 24 Jul 2015 - mcdurdin - I4796 - Refresh Keyman Developer look and feel for release - 03 Aug 2015 - mcdurdin - I4807 - Add Character Identifier to Keyman Developer - 09 Aug 2015 - mcdurdin - I4841 - Restructure version 9 developer help - 09 Aug 2015 - mcdurdin - I4847 - Code editor does not get focus automatically when file is loaded - 09 Aug 2015 - mcdurdin - I2986 - Ctrl+N, Ctrl+O not working in Developer Project view - 24 Aug 2015 - mcdurdin - I4874 - Keyman Configuration test windows do not always display correctly -*) -unit UfrmMain; // I3306 // I3502 // I3501 // I4796 - -interface - -uses - System.UITypes, - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, - ComCtrls, ImgList, Menus, StdCtrls, ExtCtrls, ToolWin, Buttons, - KeymanDeveloperUtils, UfrmMDIChild, UfrmMDIEditor, - MenuImgList, - Keyman.Developer.System.Project.Project, - Keyman.Developer.UI.Project.UfrmProject, CharacterMapSettings, - mrulist, - UfrmUnicodeDataStatus, - CharacterDragObject, - dmActionsMain, UnicodeData, UserMessages, webhelp, - dmActionsKeyboardEditor, Dialogs, UfrmTike, AppEvnts, - DropTarget, - System.ImageList, Winapi.ActiveX, CloseButtonPageControl, JvComponentBase, - JvDockControlForm, JvDockTree, JvDockVIDStyle, JvDockVSNetStyle, - JvAppRegistryStorage, Vcl.ActnMan, Vcl.ActnCtrls; - -type - TfrmKeymanDeveloper = class(TTikeForm, IUnicodeDataUIManager, IDragDrop) - barStatus: TStatusBar; - ilPages: TImageList; - lstImages: TMenuImgList; - ApplicationEvents1: TApplicationEvents; - pages: TCloseButtonPageControl; - dockServer: TJvDockServer; - JvDockVSNetStyle1: TJvDockVSNetStyle; - mnuReloadAsFormat: TPopupMenu; - ANSI1: TMenuItem; - UTF81: TMenuItem; - UTF161: TMenuItem; - MainMenu1: TMainMenu; - barTools: TControlBar; - panDebugToolbar: TPanel; - cbDebugSystemKeyboard: TComboBox; - ToolBar2: TToolBar; - ToolButton20: TToolButton; - ToolButton21: TToolButton; - ToolButton23: TToolButton; - ToolButton22: TToolButton; - ToolButton24: TToolButton; - ToolButton25: TToolButton; - ToolButton26: TToolButton; - ToolButton27: TToolButton; - ToolButton28: TToolButton; - ToolButton29: TToolButton; - panToolbar: TPanel; - ToolBar1: TToolBar; - ToolButton1: TToolButton; - ToolButton2: TToolButton; - ToolButton3: TToolButton; - ToolButton4: TToolButton; - ToolButton5: TToolButton; - ToolButton6: TToolButton; - ToolButton7: TToolButton; - ToolButton8: TToolButton; - ToolButton9: TToolButton; - ToolButton10: TToolButton; - ToolButton11: TToolButton; - ToolButton12: TToolButton; - ToolButton19: TToolButton; - ToolButton14: TToolButton; - ToolButton15: TToolButton; - cbTextFileFormat: TComboBox; - SpeedButton1: TSpeedButton; - SpeedButton2: TSpeedButton; - File1: TMenuItem; - Edit1: TMenuItem; - View1: TMenuItem; - Project1: TMenuItem; - Keyboards1: TMenuItem; - Debug2: TMenuItem; - ools1: TMenuItem; - Help1: TMenuItem; - New1: TMenuItem; - Open1: TMenuItem; - Save1: TMenuItem; - SaveAs1: TMenuItem; - Savecopyas1: TMenuItem; - Revert1: TMenuItem; - N5: TMenuItem; - Close1: TMenuItem; - N6: TMenuItem; - PageSetup1: TMenuItem; - PrintPreview1: TMenuItem; - Print1: TMenuItem; - N8: TMenuItem; - Exit1: TMenuItem; - N9: TMenuItem; - mnuFileRecent: TMenuItem; - Undo1: TMenuItem; - Redo1: TMenuItem; - N10: TMenuItem; - Cut1: TMenuItem; - Copy1: TMenuItem; - Paste1: TMenuItem; - N18: TMenuItem; - Delete1: TMenuItem; - N19: TMenuItem; - SelectAll1: TMenuItem; - N20: TMenuItem; - Find1: TMenuItem; - FindNext1: TMenuItem; - Replace1: TMenuItem; - N21: TMenuItem; - ReformatXMLDocument1: TMenuItem; - Project2: TMenuItem; - N22: TMenuItem; - CharacterIdentifier1: TMenuItem; - CharacterMap1: TMenuItem; - Messages1: TMenuItem; - ContextHelp1: TMenuItem; - oolbar1: TMenuItem; - StatusBar1: TMenuItem; - N23: TMenuItem; - ExpandEditor1: TMenuItem; - N24: TMenuItem; - CharacterFont1: TMenuItem; - CodeFont1: TMenuItem; - NewProject1: TMenuItem; - OpenProject1: TMenuItem; - SaveProjectAs1: TMenuItem; - N25: TMenuItem; - mnuProjectsRecent: TMenuItem; - N26: TMenuItem; - N27: TMenuItem; - Addtoproject1: TMenuItem; - CurrentEditorFile1: TMenuItem; - OtherFiles1: TMenuItem; - ProjectSettings1: TMenuItem; - CompileKeyboard1: TMenuItem; - N28: TMenuItem; - N29: TMenuItem; - N30: TMenuItem; - IncludeDebugInformation1: TMenuItem; - estKeyboard1: TMenuItem; - PackageforDistribution1: TMenuItem; - Install1: TMenuItem; - Uninstall1: TMenuItem; - N31: TMenuItem; - Fonts1: TMenuItem; - FontHelper1: TMenuItem; - SetBreakpoint1: TMenuItem; - N32: TMenuItem; - N33: TMenuItem; - N34: TMenuItem; - N35: TMenuItem; - N36: TMenuItem; - StartDebugging1: TMenuItem; - StopDebugger1: TMenuItem; - ANSITestMode1: TMenuItem; - SingleStepMode1: TMenuItem; - StepForward1: TMenuItem; - Run1: TMenuItem; - Pause1: TMenuItem; - View2: TMenuItem; - N37: TMenuItem; - SelectSystemKeyboard1: TMenuItem; - State1: TMenuItem; - Elements1: TMenuItem; - CallStack1: TMenuItem; - Deadkeys1: TMenuItem; - RegressionTesting1: TMenuItem; - N38: TMenuItem; - Font1: TMenuItem; - UseEditorCharacterFont1: TMenuItem; - VirtualKeyIdentifier1: TMenuItem; - N39: TMenuItem; - Customise1: TMenuItem; - Options1: TMenuItem; - Contents1: TMenuItem; - N40: TMenuItem; - CheckforUpdates1: TMenuItem; - N41: TMenuItem; - About1: TMenuItem; - N1: TMenuItem; - Reloadwithencoding1: TMenuItem; - ReloadasANSI1: TMenuItem; - ReloadasUTF81: TMenuItem; - ReloadasUTF161: TMenuItem; - DebugTests1: TMenuItem; - CrashTest1: TMenuItem; - procedure FormCreate(Sender: TObject); - procedure FormShow(Sender: TObject); - procedure mnuFileClick(Sender: TObject); - procedure FormDestroy(Sender: TObject); - procedure FormClose(Sender: TObject; var Action: TCloseAction); - procedure mnuProjectClick(Sender: TObject); - procedure crash1Click(Sender: TObject); - procedure cmdCrashTestClick(Sender: TObject); - procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); - procedure cbTextFileFormatItemClick(Sender: TObject); - procedure cbDebugSystemKeyboard_DropDown(Sender: TObject); - procedure cbDebugSystemKeyboardItemClick(Sender: TObject); - procedure mnuDebugI374Click(Sender: TObject); - function ApplicationEvents1Help(Command: Word; Data: NativeInt; - var CallHelp: Boolean): Boolean; - procedure mnuDebugSetWindowSizeForScreenshotsClick(Sender: TObject); - procedure pagesChange(Sender: TObject); - procedure pagesCloseTab(Sender: TObject; Index: Integer); - procedure ools1Click(Sender: TObject); - - private - AppStorage: TJvAppRegistryStorage; - - FCharMapSettings: TCharMapSettings; - FDropTarget: TDropTarget; - FChildWindows: TChildWindowList; - - FProjectMRU: TMRUList; - hInputLangChangeHook: Cardinal; - FUnicodeDataStatusForm: TfrmUnicodeDataStatus; - FInOnHelp: Boolean; - mHHelp: TWebHookHelpSystem; // I4677 - FFirstShow: Boolean; - FIsClosing: Boolean; - FCanClose: Boolean; - - //procedure ChildWindowsChange(Sender: TObject); - procedure WMUserFormShown(var Message: TMessage); message WM_USER_FORMSHOWN; - procedure WMUserLoadRegFiles(var Message: TMessage); message WM_USER_LOADREGFILES; - procedure WMUserInputLangChange(var Message: TMessage); message WM_USER_INPUTLANGCHANGE; - - procedure UpdateFileMRU; - - procedure AppOnActivate(Sender: TObject); - function GetActiveEditor: TfrmTikeEditor; - - function OpenKMNEditor(FFileName: string): TfrmTikeEditor; - function OpenKPSEditor(FFileName: string): TfrmTikeEditor; - procedure SetActiveChild(const Value: TfrmTikeChild); - function OpenKVKEditor(FFileName: string): TfrmTikeEditor; - - procedure ShowChild(Window: TfrmTikeChild); - function GetActiveChild: TfrmTikeChild; - function GetActiveChildIndex: Integer; - procedure SetActiveChildIndex(const Value: Integer); - procedure WMActivate(var Message: TWMActivate); message WM_ACTIVATE; - procedure mnuProjectRecentFileClick(Sender: TObject); - procedure mnuFileRecentFileClick(Sender: TObject); - - function GetDropTargetIntf: IDropTarget; - - { IDropTarget } - - procedure Drop(const FileNames: array of string); - function DropAllowed(const FileNames: array of string): Boolean; - procedure InitDock; - procedure LoadDockLayout; - procedure SaveDockLayout; - procedure CEFShutdownComplete(Sender: TObject); - procedure ActivateActiveChild; - - protected - procedure WndProc(var Message: TMessage); override; - procedure CreateWnd; override; - procedure DestroyWnd; override; - - public - procedure AddMRU(FileName: string); - procedure GetTabOrderList(List: TList); override; - - procedure CharMapCancelFocus(Sender: TObject); - procedure CharMapCanInsertCode(Sender: TObject; Control: TWinControl; - var Result: Boolean); - procedure CharMapInsertCode(Sender: TObject; Control: TWinControl; - DragObject: TCharacterDragObject); - - procedure UpdateCaption; - - procedure DefaultDockLayout; - - procedure UDUI_Error(Sender: TUnicodeData; Error: TUnicodeDataError; const Details: WideString); - function UDUI_ShouldStartRebuildOnError(const Msg: WideString): Boolean; - function UDUI_StartRebuild(Callback: TNotifyEvent; AskFirst: Boolean): Boolean; - procedure UDUI_UpdateStatus(const Msg: WideString; Pos: Integer; Max: Integer); - - property ActiveChildIndex: Integer read GetActiveChildIndex write SetActiveChildIndex; - - function BeforeOpenProject: Boolean; - procedure ShowProject; - function ProjectForm: TfrmProject; - procedure ToggleProject; - - procedure ShowDebug(AShow: Boolean); - - property ActiveChild: TfrmTikeChild read GetActiveChild write SetActiveChild; - property ActiveEditor: TfrmTikeEditor read GetActiveEditor; - procedure FocusActiveChild; - - procedure NotifyChildWindowChange(Window: TfrmTikeChild; Action: TListNotification); - procedure UpdateChildCaption(Window: TfrmTikeChild); - - function FindEditorByFileName(AFileName: string): TfrmTikeEditor; - - procedure RefreshOptions; - - function OpenEditor(FFileName: string; frmClass: TfrmTikeEditorClass): TfrmTikeEditor; - function OpenFile(FFileName: string; FCloseNewFile: Boolean): TfrmTikeChild; - - procedure HelpTopic(s: string); overload; - procedure HelpTopic(Sender: TTIKEForm); overload; - - property ChildWindows: TChildWindowList read FChildWindows; - property CharMapSettings: TCharMapSettings read FCharMapSettings; - - property ProjectMRU: TMRUList read FProjectMRU; - - property DropTargetIntf: IDropTarget read GetDropTargetIntf; - end; - -var - frmKeymanDeveloper: TfrmKeymanDeveloper; - -procedure InitClasses; - -implementation - -uses - System.Math, - Winapi.WinInet, - Winapi.Urlmon, - Winapi.UxTheme, - System.Win.ComObj, - Vcl.Themes, - - Keyman.Developer.System.CEFManager, - - CharMapDropTool, - HTMLHelpViewer, - KLog, - keymanapi_TLB, - KeymanVersion, - OnlineConstants, - OnlineUpdateCheck, - GlobalProxySettings, - Keyman.Developer.UI.Project.ProjectFileUI, - Keyman.Developer.UI.Project.ProjectUI, - TextFileFormat, - RedistFiles, - ErrorControlledRegistry, - RegistryKeys, - TikeUnicodeData, - UfrmCharacterMapDock, - UfrmMessages, - UfrmNew, - UfrmAboutTike, - UfrmOSKEditor, - UfrmSelectSystemKeyboard, - UfrmStartup, UfrmOptions, - UfrmKeyTest, UfrmKeymanWizard, - UfrmPackageEditor, UfrmEditor, UfrmBitmapEditor, Keyman.Developer.System.Project.ProjectFile, Keyman.Developer.System.Project.ProjectFileType, - UfrmDebug, KeymanDeveloperOptions, utilfiletypes, - UfrmHelp, dmActionsTextEditor, UfrmDebugStatus, - UfrmCharacterIdentifier, UfrmCharacterMapNew; - -{$R *.DFM} - -{------------------------------------------------------------------------------- - - Form events and messages - - -------------------------------------------------------------------------------} - -function CallWndProc_InputLangChange(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; -begin - if nCode >= 0 then - with PCWPSTRUCT(lParam)^ do - if message = WM_INPUTLANGCHANGE then - PostMessage(frmKeymanDeveloper.Handle, WM_USER_INPUTLANGCHANGE, wParam, lParam); - Result := CallNextHookEx(frmKeymanDeveloper.hInputLangChangeHook, nCode, wParam, lParam); -end; - - -procedure TfrmKeymanDeveloper.FormCreate(Sender: TObject); -var - FActiveProject: string; -begin - inherited; - - FFirstShow := True; - - hInputLangChangeHook := SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc_InputLangChange, 0, GetCurrentThreadId); - - modActionsTextEditor := TmodActionsTextEditor.Create(Self); - modActionsKeyboardEditor := TmodActionsKeyboardEditor.Create(Self); - modActionsMain := TmodActionsMain.Create(Self); - - FProjectMRU := TMRUList.Create('Project'); - FChildWindows := TChildWindowList.Create; - - ShowDebug(False); - - CreateTikeUnicodeData(Self); // I4257 - - //CreateKeymanDeveloperOptions; - FCharMapSettings := TCharMapSettings.Create; - - Application.HelpFile := GetHelpURL; // I4677 // I4841 - mHHelp := TWebHookHelpSystem.Create(Application.HelpFile); // I4677 // I4841 - - FActiveProject := ''; - - with TRegistryErrorControlled.Create do // I2890 - try - RootKey := HKEY_CURRENT_USER; - if OpenKeyReadOnly(SRegKey_IDEOptions_CU) then - begin - if ValueExists(SRegValue_IDEOptToolbarVisible) and (ReadString(SRegValue_IDEOptToolbarVisible) = '0') then - barTools.Visible := False; - if ValueExists(SRegValue_ActiveProject) then FActiveProject := ReadString(SRegValue_ActiveProject); - end; - finally - Free; - end; - - try - kmcom := CoKeyman.Create; - except - on E:Exception do - begin - ShowMessage('Unable to instanatiate Keyman COM object. Keyman Developer tools will run, but will have limited functionality. '+ - 'To resolve this problem, reinstall Keyman.'#13#10#13#10'The error returned was: '+E.Message); - kmcom := nil; - end; - end; - - RemoveOldestTikeEditFonts(False); - RemoveOldestTikeTestFonts(False); - - if (FActiveProject <> '') and not FileExists(FActiveProject) then - FActiveProject := ''; - - LoadGlobalProjectUI(FActiveProject, True); - - InitDock; - - frmMessages := TfrmMessages.Create(Self); - - frmCharacterMapDock := TfrmCharacterMapDock.Create(Self); - - frmCharacterIdentifier := TfrmCharacterIdentifier.Create(Self); // I4807 - frmCharacterIdentifier.OnCancelFocus := CharMapCancelFocus; - - frmHelp := TfrmHelp.Create(Application); - - Application.OnActivate := AppOnActivate; - - LoadDockLayout; - Invalidate; - - UpdateCaption; -end; - -procedure TfrmKeymanDeveloper.CreateWnd; -begin - inherited; - FDropTarget := TDropTarget.Create(WindowHandle, Self); -end; - -procedure TfrmKeymanDeveloper.DestroyWnd; -begin - FreeAndNil(FDropTarget); - inherited; -end; - -procedure TfrmKeymanDeveloper.CharMapInsertCode(Sender: TObject; Control: TWinControl; DragObject: TCharacterDragObject); -begin - GetCharMapDropTool.InsertToControl(Control, DragObject); -end; - -procedure TfrmKeymanDeveloper.CharMapCanInsertCode(Sender: TObject; Control: TWinControl; var Result: Boolean); -begin - Result := Assigned(Control) and (GetCharMapDropTool.Controls.IndexOfControl(Control) >= 0); -end; - -procedure TfrmKeymanDeveloper.CharMapCancelFocus(Sender: TObject); -begin - if Assigned(ActiveChild) then ActiveChild.SetFocus; -end; - -procedure TfrmKeymanDeveloper.FormClose(Sender: TObject; var Action: TCloseAction); -var - i: Integer; -begin - for i := FChildWindows.Count - 1 downto 0 do - begin - FChildWindows[i].Visible := False; - FChildWindows[i].Parent := nil; - FChildWindows[i].Release; // I2595, probably not necessary - end; - - if Assigned(FGlobalProject) then - with TRegistryErrorControlled.Create do // I2890 - try - if FGlobalProject.Untitled - then FGlobalProject.PersistUntitledProject // I1010: Persist untitled project - else FGlobalProject.Save; // I4691 - - RootKey := HKEY_CURRENT_USER; - if OpenKey(SRegKey_IDEOptions_CU, True) then - begin - WriteString(SRegValue_ActiveProject, FGlobalProject.FileName); - end; - finally - Free; - end; - - Action := caFree; - - FreeAndNil(frmCharacterMapDock); - FreeAndNil(frmCharacterIdentifier); // I4807 - FreeAndNil(frmMessages); - FreeAndNil(frmHelp); -// FreeAndNil(frmDebugStatus); -end; - -procedure TfrmKeymanDeveloper.FormCloseQuery(Sender: TObject; - var CanClose: Boolean); -var - i: Integer; -begin -// OutputDebugString(PChar('TfrmKeymanDeveloper.FormCloseQuery: FIsClosing='+BoolToStr(FIsClosing)+' FCanClose='+BoolToStr(FCanClose))); - if not FIsClosing then - begin - // I944 - Fix crash when FChildWindows is nil on closing Keyman Developer - if Assigned(FChildWindows) then - begin - for i := 0 to FChildWindows.Count - 1 do - if not FChildWindows[i].CloseQuery then - begin - CanClose := False; - Exit; - end; - end; - - FIsClosing := True; - SaveDockLayout; - - CanClose := FInitializeCEF.StartShutdown(CEFShutdownComplete); - // TODO: complete exit after StartClose is successful - end - else - CanClose := FCanClose; -end; - -procedure TfrmKeymanDeveloper.CEFShutdownComplete(Sender: TObject); -begin -// OutputDebugString(PChar('TfrmKeymanDeveloper.CEFShutdownComplete')); - FCanClose := True; - Close; -end; - -procedure TfrmKeymanDeveloper.FormDestroy(Sender: TObject); -begin -// OutputDebugString(PChar('TfrmKeymanDeveloper.FormDestroy')); - UnhookWindowsHookEx(hInputLangChangeHook); - - FreeAndNil(FCharMapSettings); - Application.OnActivate := nil; - - FreeGlobalProjectUI; - FreeAndNil(FChildWindows); - FreeAndNil(FProjectMRU); - - ClearSystemKeyboardList(cbDebugSystemKeyboard.Items); - - FreeAndNil(mHHelp); // I4677 - - FreeUnicodeData; - - FreeAndNil(AppStorage); - - kmcom := nil; -end; - -procedure TfrmKeymanDeveloper.FormShow(Sender: TObject); -begin - if FFirstShow then PostMessage(Handle, WM_USER_FORMSHOWN, 0, 0); - FFirstShow := False; -end; - -procedure TfrmKeymanDeveloper.WMActivate(var Message: TWMActivate); -begin - try // I4352 // I4404 // I4485 - inherited; - except - on E:EInvalidOperation do - ; // This happens on shutdown sometimes due to - // annoying sequence of operations in Delphi's focus management. - // It's easier to do this, and relatively side-effect-free, so - // happy to live with this... I4352, I4404, I4485 - end; -end; - -procedure TfrmKeymanDeveloper.WMUserFormShown(var Message: TMessage); -var - i: Integer; -begin - try - if ParamCount = 0 then - begin - ShowProject; - ShowStartupModal(Self); - end - else - begin - for i := 1 to ParamCount do - if FileExists(ParamStr(i)) then - OpenFile(ParamStr(i), False); - ShowStartupModal(Self); - end; - except - CloseStartup; - raise; - end; - - if True then //FKeymanDeveloperOptions.AutoCheckForUpdates then - begin - with TOnlineUpdateCheck.Create(SRegKey_KeymanDeveloper_CU, OnlineProductID_KeymanDeveloper_100, False, True, True, GetProxySettings.Server, GetProxySettings.Port, GetProxySettings.Username, GetProxySettings.Password) do // I3377 - Run; - end; -end; - -procedure TfrmKeymanDeveloper.WMUserInputLangChange(var Message: TMessage); -var - i: Integer; -begin - for i := 0 to FChildWindows.Count - 1 do - PostMessage(FChildWindows[i].Handle, WM_USER_INPUTLANGCHANGE, Message.wParam, Message.LParam); -end; - -procedure TfrmKeymanDeveloper.WMUserLoadRegFiles(var Message: TMessage); -var - i: Integer; - s: TStringList; - t: string; -begin - s := TStringList.Create; - with TRegistryErrorControlled.Create do // I2890 - try - RootKey := HKEY_CURRENT_USER; - if not OpenKey(SRegKey_IDEFiles_CU, True) then // I2890 - RaiseLastRegistryError; - - GetValueNames(s); - for i := 0 to s.Count - 1 do - begin - t := ReadString(s[i]); - DeleteValue(s[i]); - OpenFile(t, False); - end; - finally - Free; - end; -end; - -const - SPI_GETKEYBOARDCUES = $100A; -var - FAlwaysDrawUnderline: Boolean = False; - FWndProcInit: Boolean = False; - -procedure TfrmKeymanDeveloper.WndProc(var Message: TMessage); -begin - case Message.Msg of - WM_DRAWITEM: - begin - if not FWndProcInit then - begin - SystemParametersInfo(SPI_GETKEYBOARDCUES, 0, @FAlwaysDrawUnderline, 0); - FWndProcInit := True; - end; - - if FAlwaysDrawUnderline then - with PDrawItemStruct(Message.lParam)^ do - if (CtlType = ODT_MENU) and Assigned(Menu) then - itemState := itemState and $FEFF; - end; - end; - inherited; -end; - -function TfrmKeymanDeveloper.ApplicationEvents1Help(Command: Word; - Data: NativeInt; var CallHelp: Boolean): Boolean; // I4677 -var - s: string; - frm: TCustomForm; -begin - CallHelp := False; - if Command = HELP_COMMAND then // I4677 - begin - if not FInOnHelp then - begin - FInOnHelp := True; - try - s := PChar(Data); - if s = '' then - begin - frm := GetParentForm(Screen.ActiveControl, False); - if frm is TTikeForm then - s := (frm as TTikeForm).HelpTopic; - end; - if s <> '' then - mHHelp.HelpTopic(s); - finally - FInOnHelp := False; - end; - end - else - mHHelp.HelpTopic(s); - end; - Result := True; -end; - -procedure TfrmKeymanDeveloper.AppOnActivate(Sender: TObject); -var - i: Integer; -begin - FWndProcInit := False; - for i := 0 to FChildWindows.Count - 1 do - if FChildWindows[i] is TfrmTikeEditor then - with FChildWindows[i] as TfrmTikeEditor do - CheckForReload; - - try - FocusActiveChild; // I4847 // I2986 - except - on E:EInvalidOperation do ; // We don't want to crash if focus fails, e.g. on shutdown - end; -end; - -{------------------------------------------------------------------------------- - - File menu - - -------------------------------------------------------------------------------} - -procedure TfrmKeymanDeveloper.mnuDebugI374Click(Sender: TObject); -begin - if Assigned(ActiveEditor) - then frmMessages.Add(ActiveEditor.FileName, '1: bug with multi-line messages'#13#10'Double-click on the second line of this message') - else frmMessages.Add('test.txt', '1: bug with multi-line messages'#13#10'Double-click on the second line of this message'); -end; - -procedure TfrmKeymanDeveloper.mnuDebugSetWindowSizeForScreenshotsClick(Sender: TObject); -begin - Width := 960; - Height := 600; -end; - -procedure TfrmKeymanDeveloper.mnuFileClick(Sender: TObject); -begin - UpdateFileMRU; - mnuFileRecent.Enabled := mnuFileRecent.Count > 0; -end; - -{------------------------------------------------------------------------------- - - View menu - - -------------------------------------------------------------------------------} - -procedure TfrmKeymanDeveloper.ShowChild(Window: TfrmTikeChild); -var - i, j: Integer; -begin - for i := 0 to FChildWindows.Count - 1 do - if FChildWindows[i] = Window then - begin - //Window.SetFocus; - for j := 0 to pages.PageCount - 1 do - if pages.Pages[j].Tag = Integer(Window) then - begin - pages.ActivePageIndex := j; - Break; - end; - end; - //else - //FChildWindows[i].Visible := False; -end; - -procedure TfrmKeymanDeveloper.ShowDebug(AShow: Boolean); -begin - if ActiveEditor is TfrmKeymanWizard then - begin - (ActiveEditor as TfrmKeymanWizard).panDebugHost.Visible := AShow; - if AShow then - // Move the form below the splitter - (ActiveEditor as TfrmKeymanWizard).panDebugHost.Top := ActiveEditor.ClientHeight; - end; -// if Assigned(frmDebugStatus) then frmDebugStatus.Visible := AShow; - panDebugToolbar.Visible := AShow; -end; - -procedure TfrmKeymanDeveloper.ShowProject; -begin - if ProjectForm = nil - then ShowChild(TfrmProject.Create(Self)) - else ShowChild(ProjectForm); - ProjectForm.SetGlobalProject; -end; - -procedure TfrmKeymanDeveloper.ToggleProject; -var - frmProject: TfrmProject; -begin - frmProject := ProjectForm; - if Assigned(frmProject) and (ActiveChild = frmProject) - then PostMessage(frmProject.Handle, WM_CLOSE, 0, 0) - else ShowProject; -end; - -procedure TfrmKeymanDeveloper.InitDock; -begin - AppStorage := TJvAppRegistryStorage.Create(self); +(* + Name: UfrmMain + Copyright: Copyright (C) SIL International. + Documentation: + Description: + Create Date: 20 Jun 2006 + + Modified Date: 24 Aug 2015 + Authors: mcdurdin + Related Files: + Dependencies: + + Bugs: + Todo: + Notes: + History: 20 Jun 2006 - mcdurdin - Initial version + 01 Aug 2006 - mcdurdin - Rework ui using sp-TBX + 02 Aug 2006 - mcdurdin - Remove old menu + 23 Aug 2006 - mcdurdin - Remove Window menu + 23 Aug 2006 - mcdurdin - Refactor menus as actions + 23 Aug 2006 - mcdurdin - Implement encoding combobox + 23 Aug 2006 - mcdurdin - Support WM_InputLangChange for visual keyboard dynamic refresh + 23 Aug 2006 - mcdurdin - Add help form + 23 Aug 2006 - mcdurdin - Force tab orders to active child or active docked form only (not through all forms) + 30 Aug 2006 - mcdurdin - Add reformat XML edit menu item + 14 Sep 2006 - mcdurdin - Add debug toolbar + 14 Sep 2006 - mcdurdin - Add CRM links + 14 Sep 2006 - mcdurdin - Add UnicodeData build callbacks + 14 Sep 2006 - mcdurdin - Add new Character Map events + 28 Sep 2006 - mcdurdin - Add check for updates, debug manager + 28 Sep 2006 - mcdurdin - Remove file association check (now done only by installer) + 04 Dec 2006 - mcdurdin - Add CRM button + 04 Dec 2006 - mcdurdin - Add file to project MRU when opened + 04 Dec 2006 - mcdurdin - Support standalone OSK editor for KVK files + 12 Dec 2006 - mcdurdin - Remove Project Settings menu item + 04 Jan 2007 - mcdurdin - Add help support + 04 Jan 2007 - mcdurdin - Add proxy support + 04 Jan 2007 - mcdurdin - Fix scroll bug for page control + 04 Jan 2007 - mcdurdin - Check if branding pack is installed + 15 Jan 2007 - mcdurdin - Disable KPP editor if no branding pack installed + 25 Jan 2007 - mcdurdin - Remove ActiveChild.Setfocus in WMActivate (resets focus to wrong control) + 16 May 2007 - mcdurdin - I806 - File/Close menu item + 30 May 2007 - mcdurdin - I825 - Added proxy username and password + 23 Aug 2007 - mcdurdin - I1010 - Persist untitled project + 23 Aug 2007 - mcdurdin - I1004 - Fix crash when starting up on Vista with Matrox driver? + 12 Oct 2007 - mcdurdin - I944 - Fix crash when FChildWindows is nil when closing Keyman Developer + 19 Nov 2007 - mcdurdin - I1157 - const string parameters + 16 Jan 2009 - mcdurdin - Add font helper menu item + 25 May 2010 - mcdurdin - I2392 - Activation Client integration + 26 Jul 2010 - mcdurdin - I2467 - 8.0 renumber + 17 Dec 2010 - mcdurdin - U2595 - Remove gnugettext + 31 Jan 2011 - mcdurdin - I2655 - No prompt for unsaved untitled project on exit + 03 May 2011 - mcdurdin - I2890 - Record diagnostic data when encountering registry errors + 18 May 2012 - mcdurdin - I3306 - V9.0 - Remove TntControls + Win9x support + 08 Jun 2012 - mcdurdin - I3350 - V9.0 - Register control classes for Keyman Developer to start + 17 Aug 2012 - mcdurdin - I3377 - KM9 - Update code references from 8.0 to 9.0 + 08 Oct 2012 - mcdurdin - I3463 - V9.0 - Look up charmap root path from registry when starting Developer + 24 Oct 2012 - mcdurdin - I3484 - V9.0 - Tidy up look and feel of Keyman Developer skins + 24 Jan 2012 - mcdurdin - I3184 - Missing manifest for tike.exe + 02 Feb 2012 - mcdurdin - I2975 - VistaAltFixUnit causes exception on shutdown + 06 Feb 2012 - mcdurdin - I3082 - Reload text file with specific encoding support + 03 Nov 2012 - mcdurdin - I3502 - V9.0 - Merge of I3082 - Reload text file with specific encoding support + 03 Nov 2012 - mcdurdin - I3501 - V9.0 - Merge of I3184 - Missing manifest for tike.exe + 11 Aug 2013 - mcdurdin - I3887 - V9.0 - Use strict most standard compliant edge compatibility for embedded IE in TIKE + 13 Feb 2014 - mcdurdin - I4045 - V9.0 - Developer should use a TIKE user agent for the layout editor + 27 Feb 2014 - mcdurdin - I4081 - V9.0 - Trace compile errors in subfiles in Keyman Developer + 10 Jun 2014 - mcdurdin - I4257 - V9.0 - Add ethnologue language codes to unicodedata.mdb + 10 Jun 2014 - mcdurdin - I3733 - V9.0 - File format dropdown should be disabled in project view + 10 Oct 2014 - mcdurdin - I4436 - V9.0 - browser emulation control for kmshell breaks downlevel versions of Keyman + 04 Nov 2014 - mcdurdin - I4507 - V9.0 - Move tab close button onto tabs + 30 Apr 2015 - mcdurdin - I4677 - V9.0 - Move Developer help to online only + 04 May 2015 - mcdurdin - I4687 - V9.0 - Split project UI actions into separate classes + 04 May 2015 - mcdurdin - I4691 - V9.0 - Always save project automatically + 27 May 2015 - mcdurdin - I4352 - Developer crashes on exit occasionally [CrashID:tike.exe_9.0.453.0_0058805F_EInvalidOperation] + 27 May 2015 - mcdurdin - I4404 - Developer crashes on exit occasionally [CrashID:tike.exe_9.0.466.0_0058805F_EInvalidOperation] + 27 May 2015 - mcdurdin - I4485 - Developer crashes on exit occasionally [CrashID:tike.exe_9.0.473.0_005880FB_EInvalidOperation] + 23 Jun 2015 - mcdurdin - I4749 - Opening a keyboard externally can open it multiple times + 24 Jul 2015 - mcdurdin - I4796 - Refresh Keyman Developer look and feel for release + 03 Aug 2015 - mcdurdin - I4807 - Add Character Identifier to Keyman Developer + 09 Aug 2015 - mcdurdin - I4841 - Restructure version 9 developer help + 09 Aug 2015 - mcdurdin - I4847 - Code editor does not get focus automatically when file is loaded + 09 Aug 2015 - mcdurdin - I2986 - Ctrl+N, Ctrl+O not working in Developer Project view + 24 Aug 2015 - mcdurdin - I4874 - Keyman Configuration test windows do not always display correctly +*) +unit UfrmMain; // I3306 // I3502 // I3501 // I4796 + +interface + +uses + System.UITypes, + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + ComCtrls, ImgList, Menus, StdCtrls, ExtCtrls, ToolWin, Buttons, + KeymanDeveloperUtils, UfrmMDIChild, UfrmMDIEditor, + MenuImgList, + Keyman.Developer.System.Project.Project, + Keyman.Developer.UI.Project.UfrmProject, CharacterMapSettings, + mrulist, + UfrmUnicodeDataStatus, + CharacterDragObject, + dmActionsMain, UnicodeData, UserMessages, webhelp, + dmActionsKeyboardEditor, Dialogs, UfrmTike, AppEvnts, + DropTarget, + System.ImageList, Winapi.ActiveX, CloseButtonPageControl, JvComponentBase, + JvDockControlForm, JvDockTree, JvDockVIDStyle, JvDockVSNetStyle, + JvAppRegistryStorage, Vcl.ActnMan, Vcl.ActnCtrls; + +type + TfrmKeymanDeveloper = class(TTikeForm, IUnicodeDataUIManager, IDragDrop) + barStatus: TStatusBar; + ilPages: TImageList; + lstImages: TMenuImgList; + ApplicationEvents1: TApplicationEvents; + pages: TCloseButtonPageControl; + dockServer: TJvDockServer; + JvDockVSNetStyle1: TJvDockVSNetStyle; + mnuReloadAsFormat: TPopupMenu; + ANSI1: TMenuItem; + UTF81: TMenuItem; + UTF161: TMenuItem; + MainMenu1: TMainMenu; + barTools: TControlBar; + panDebugToolbar: TPanel; + cbDebugSystemKeyboard: TComboBox; + ToolBar2: TToolBar; + ToolButton20: TToolButton; + ToolButton21: TToolButton; + ToolButton23: TToolButton; + ToolButton22: TToolButton; + ToolButton24: TToolButton; + ToolButton25: TToolButton; + ToolButton26: TToolButton; + ToolButton27: TToolButton; + ToolButton28: TToolButton; + ToolButton29: TToolButton; + panToolbar: TPanel; + ToolBar1: TToolBar; + ToolButton1: TToolButton; + ToolButton2: TToolButton; + ToolButton3: TToolButton; + ToolButton4: TToolButton; + ToolButton5: TToolButton; + ToolButton6: TToolButton; + ToolButton7: TToolButton; + ToolButton8: TToolButton; + ToolButton9: TToolButton; + ToolButton10: TToolButton; + ToolButton11: TToolButton; + ToolButton12: TToolButton; + ToolButton19: TToolButton; + ToolButton14: TToolButton; + ToolButton15: TToolButton; + cbTextFileFormat: TComboBox; + SpeedButton1: TSpeedButton; + SpeedButton2: TSpeedButton; + File1: TMenuItem; + Edit1: TMenuItem; + View1: TMenuItem; + Project1: TMenuItem; + Keyboards1: TMenuItem; + Debug2: TMenuItem; + ools1: TMenuItem; + Help1: TMenuItem; + New1: TMenuItem; + Open1: TMenuItem; + Save1: TMenuItem; + SaveAs1: TMenuItem; + Savecopyas1: TMenuItem; + Revert1: TMenuItem; + N5: TMenuItem; + Close1: TMenuItem; + N6: TMenuItem; + PageSetup1: TMenuItem; + PrintPreview1: TMenuItem; + Print1: TMenuItem; + N8: TMenuItem; + Exit1: TMenuItem; + N9: TMenuItem; + mnuFileRecent: TMenuItem; + Undo1: TMenuItem; + Redo1: TMenuItem; + N10: TMenuItem; + Cut1: TMenuItem; + Copy1: TMenuItem; + Paste1: TMenuItem; + N18: TMenuItem; + Delete1: TMenuItem; + N19: TMenuItem; + SelectAll1: TMenuItem; + N20: TMenuItem; + Find1: TMenuItem; + FindNext1: TMenuItem; + Replace1: TMenuItem; + N21: TMenuItem; + ReformatXMLDocument1: TMenuItem; + Project2: TMenuItem; + N22: TMenuItem; + CharacterIdentifier1: TMenuItem; + CharacterMap1: TMenuItem; + Messages1: TMenuItem; + ContextHelp1: TMenuItem; + oolbar1: TMenuItem; + StatusBar1: TMenuItem; + N23: TMenuItem; + ExpandEditor1: TMenuItem; + N24: TMenuItem; + CharacterFont1: TMenuItem; + CodeFont1: TMenuItem; + NewProject1: TMenuItem; + OpenProject1: TMenuItem; + SaveProjectAs1: TMenuItem; + N25: TMenuItem; + mnuProjectsRecent: TMenuItem; + N26: TMenuItem; + N27: TMenuItem; + Addtoproject1: TMenuItem; + CurrentEditorFile1: TMenuItem; + OtherFiles1: TMenuItem; + ProjectSettings1: TMenuItem; + CompileKeyboard1: TMenuItem; + N28: TMenuItem; + N29: TMenuItem; + N30: TMenuItem; + IncludeDebugInformation1: TMenuItem; + estKeyboard1: TMenuItem; + PackageforDistribution1: TMenuItem; + Install1: TMenuItem; + Uninstall1: TMenuItem; + N31: TMenuItem; + Fonts1: TMenuItem; + FontHelper1: TMenuItem; + SetBreakpoint1: TMenuItem; + N32: TMenuItem; + N33: TMenuItem; + N34: TMenuItem; + N35: TMenuItem; + N36: TMenuItem; + StartDebugging1: TMenuItem; + StopDebugger1: TMenuItem; + ANSITestMode1: TMenuItem; + SingleStepMode1: TMenuItem; + StepForward1: TMenuItem; + Run1: TMenuItem; + Pause1: TMenuItem; + View2: TMenuItem; + N37: TMenuItem; + SelectSystemKeyboard1: TMenuItem; + State1: TMenuItem; + Elements1: TMenuItem; + CallStack1: TMenuItem; + Deadkeys1: TMenuItem; + RegressionTesting1: TMenuItem; + N38: TMenuItem; + Font1: TMenuItem; + UseEditorCharacterFont1: TMenuItem; + VirtualKeyIdentifier1: TMenuItem; + N39: TMenuItem; + Customise1: TMenuItem; + Options1: TMenuItem; + Contents1: TMenuItem; + N40: TMenuItem; + CheckforUpdates1: TMenuItem; + N41: TMenuItem; + About1: TMenuItem; + N1: TMenuItem; + Reloadwithencoding1: TMenuItem; + ReloadasANSI1: TMenuItem; + ReloadasUTF81: TMenuItem; + ReloadasUTF161: TMenuItem; + DebugTests1: TMenuItem; + CrashTest1: TMenuItem; + procedure FormCreate(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure mnuFileClick(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure mnuProjectClick(Sender: TObject); + procedure crash1Click(Sender: TObject); + procedure cmdCrashTestClick(Sender: TObject); + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + procedure cbTextFileFormatItemClick(Sender: TObject); + procedure cbDebugSystemKeyboard_DropDown(Sender: TObject); + procedure cbDebugSystemKeyboardItemClick(Sender: TObject); + procedure mnuDebugI374Click(Sender: TObject); + function ApplicationEvents1Help(Command: Word; Data: NativeInt; + var CallHelp: Boolean): Boolean; + procedure mnuDebugSetWindowSizeForScreenshotsClick(Sender: TObject); + procedure pagesChange(Sender: TObject); + procedure pagesCloseTab(Sender: TObject; Index: Integer); + procedure ools1Click(Sender: TObject); + + private + AppStorage: TJvAppRegistryStorage; + + FCharMapSettings: TCharMapSettings; + FDropTarget: TDropTarget; + FChildWindows: TChildWindowList; + + FProjectMRU: TMRUList; + hInputLangChangeHook: Cardinal; + FUnicodeDataStatusForm: TfrmUnicodeDataStatus; + FInOnHelp: Boolean; + mHHelp: TWebHookHelpSystem; // I4677 + FFirstShow: Boolean; + FIsClosing: Boolean; + FCanClose: Boolean; + + //procedure ChildWindowsChange(Sender: TObject); + procedure WMUserFormShown(var Message: TMessage); message WM_USER_FORMSHOWN; + procedure WMUserLoadRegFiles(var Message: TMessage); message WM_USER_LOADREGFILES; + procedure WMUserInputLangChange(var Message: TMessage); message WM_USER_INPUTLANGCHANGE; + + procedure UpdateFileMRU; + + procedure AppOnActivate(Sender: TObject); + function GetActiveEditor: TfrmTikeEditor; + + function OpenKMNEditor(FFileName: string): TfrmTikeEditor; + function OpenKPSEditor(FFileName: string): TfrmTikeEditor; + procedure SetActiveChild(const Value: TfrmTikeChild); + function OpenKVKEditor(FFileName: string): TfrmTikeEditor; + + procedure ShowChild(Window: TfrmTikeChild); + function GetActiveChild: TfrmTikeChild; + function GetActiveChildIndex: Integer; + procedure SetActiveChildIndex(const Value: Integer); + procedure WMActivate(var Message: TWMActivate); message WM_ACTIVATE; + procedure mnuProjectRecentFileClick(Sender: TObject); + procedure mnuFileRecentFileClick(Sender: TObject); + + function GetDropTargetIntf: IDropTarget; + + { IDropTarget } + + procedure Drop(const FileNames: array of string); + function DropAllowed(const FileNames: array of string): Boolean; + procedure InitDock; + procedure LoadDockLayout; + procedure SaveDockLayout; + procedure CEFShutdownComplete(Sender: TObject); + procedure ActivateActiveChild; + + protected + procedure WndProc(var Message: TMessage); override; + procedure CreateWnd; override; + procedure DestroyWnd; override; + + public + procedure AddMRU(FileName: string); + procedure GetTabOrderList(List: TList); override; + + procedure CharMapCancelFocus(Sender: TObject); + procedure CharMapCanInsertCode(Sender: TObject; Control: TWinControl; + var Result: Boolean); + procedure CharMapInsertCode(Sender: TObject; Control: TWinControl; + DragObject: TCharacterDragObject); + + procedure UpdateCaption; + + procedure DefaultDockLayout; + + procedure UDUI_Error(Sender: TUnicodeData; Error: TUnicodeDataError; const Details: WideString); + function UDUI_ShouldStartRebuildOnError(const Msg: WideString): Boolean; + function UDUI_StartRebuild(Callback: TNotifyEvent; AskFirst: Boolean): Boolean; + procedure UDUI_UpdateStatus(const Msg: WideString; Pos: Integer; Max: Integer); + + property ActiveChildIndex: Integer read GetActiveChildIndex write SetActiveChildIndex; + + function BeforeOpenProject: Boolean; + procedure ShowProject; + function ProjectForm: TfrmProject; + procedure ToggleProject; + + procedure ShowDebug(AShow: Boolean); + + property ActiveChild: TfrmTikeChild read GetActiveChild write SetActiveChild; + property ActiveEditor: TfrmTikeEditor read GetActiveEditor; + procedure FocusActiveChild; + + procedure NotifyChildWindowChange(Window: TfrmTikeChild; Action: TListNotification); + procedure UpdateChildCaption(Window: TfrmTikeChild); + + function FindEditorByFileName(AFileName: string): TfrmTikeEditor; + + procedure RefreshOptions; + + function OpenEditor(FFileName: string; frmClass: TfrmTikeEditorClass): TfrmTikeEditor; + function OpenFile(FFileName: string; FCloseNewFile: Boolean): TfrmTikeChild; + + procedure HelpTopic(s: string); overload; + procedure HelpTopic(Sender: TTIKEForm); overload; + + property ChildWindows: TChildWindowList read FChildWindows; + property CharMapSettings: TCharMapSettings read FCharMapSettings; + + property ProjectMRU: TMRUList read FProjectMRU; + + property DropTargetIntf: IDropTarget read GetDropTargetIntf; + end; + +var + frmKeymanDeveloper: TfrmKeymanDeveloper; + +procedure InitClasses; + +implementation + +uses + System.Math, + Winapi.WinInet, + Winapi.Urlmon, + Winapi.UxTheme, + System.Win.ComObj, + Vcl.Themes, + + Keyman.Developer.System.CEFManager, + + CharMapDropTool, + HTMLHelpViewer, + KLog, + keymanapi_TLB, + KeymanVersion, + OnlineConstants, + OnlineUpdateCheck, + GlobalProxySettings, + Keyman.Developer.UI.Project.ProjectFileUI, + Keyman.Developer.UI.Project.ProjectUI, + TextFileFormat, + RedistFiles, + ErrorControlledRegistry, + RegistryKeys, + TikeUnicodeData, + UfrmCharacterMapDock, + UfrmMessages, + UfrmNew, + UfrmAboutTike, + UfrmOSKEditor, + UfrmSelectSystemKeyboard, + UfrmStartup, UfrmOptions, + UfrmKeyTest, UfrmKeymanWizard, + UfrmPackageEditor, UfrmEditor, UfrmBitmapEditor, Keyman.Developer.System.Project.ProjectFile, Keyman.Developer.System.Project.ProjectFileType, + UfrmDebug, KeymanDeveloperOptions, utilfiletypes, + UfrmHelp, dmActionsTextEditor, UfrmDebugStatus, + UfrmCharacterIdentifier, UfrmCharacterMapNew; + +{$R *.DFM} + +{------------------------------------------------------------------------------- + - Form events and messages - + -------------------------------------------------------------------------------} + +function CallWndProc_InputLangChange(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; +begin + if nCode >= 0 then + with PCWPSTRUCT(lParam)^ do + if message = WM_INPUTLANGCHANGE then + PostMessage(frmKeymanDeveloper.Handle, WM_USER_INPUTLANGCHANGE, wParam, lParam); + Result := CallNextHookEx(frmKeymanDeveloper.hInputLangChangeHook, nCode, wParam, lParam); +end; + + +procedure TfrmKeymanDeveloper.FormCreate(Sender: TObject); +var + FActiveProject: string; +begin + inherited; + + FFirstShow := True; + + hInputLangChangeHook := SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc_InputLangChange, 0, GetCurrentThreadId); + + modActionsTextEditor := TmodActionsTextEditor.Create(Self); + modActionsKeyboardEditor := TmodActionsKeyboardEditor.Create(Self); + modActionsMain := TmodActionsMain.Create(Self); + + FProjectMRU := TMRUList.Create('Project'); + FChildWindows := TChildWindowList.Create; + + ShowDebug(False); + + CreateTikeUnicodeData(Self); // I4257 + + //CreateKeymanDeveloperOptions; + FCharMapSettings := TCharMapSettings.Create; + + Application.HelpFile := GetHelpURL; // I4677 // I4841 + mHHelp := TWebHookHelpSystem.Create(Application.HelpFile); // I4677 // I4841 + + FActiveProject := ''; + + with TRegistryErrorControlled.Create do // I2890 + try + RootKey := HKEY_CURRENT_USER; + if OpenKeyReadOnly(SRegKey_IDEOptions_CU) then + begin + if ValueExists(SRegValue_IDEOptToolbarVisible) and (ReadString(SRegValue_IDEOptToolbarVisible) = '0') then + barTools.Visible := False; + if ValueExists(SRegValue_ActiveProject) then FActiveProject := ReadString(SRegValue_ActiveProject); + end; + finally + Free; + end; + + try + kmcom := CoKeyman.Create; + except + on E:Exception do + begin + ShowMessage('Unable to instanatiate Keyman COM object. Keyman Developer tools will run, but will have limited functionality. '+ + 'To resolve this problem, reinstall Keyman.'#13#10#13#10'The error returned was: '+E.Message); + kmcom := nil; + end; + end; + + RemoveOldestTikeEditFonts(False); + RemoveOldestTikeTestFonts(False); + + if (FActiveProject <> '') and not FileExists(FActiveProject) then + FActiveProject := ''; + + LoadGlobalProjectUI(FActiveProject, True); + + InitDock; + + frmMessages := TfrmMessages.Create(Self); + + frmCharacterMapDock := TfrmCharacterMapDock.Create(Self); + + frmCharacterIdentifier := TfrmCharacterIdentifier.Create(Self); // I4807 + frmCharacterIdentifier.OnCancelFocus := CharMapCancelFocus; + + frmHelp := TfrmHelp.Create(Application); + + Application.OnActivate := AppOnActivate; + + LoadDockLayout; + Invalidate; + + UpdateCaption; +end; + +procedure TfrmKeymanDeveloper.CreateWnd; +begin + inherited; + FDropTarget := TDropTarget.Create(WindowHandle, Self); +end; + +procedure TfrmKeymanDeveloper.DestroyWnd; +begin + FreeAndNil(FDropTarget); + inherited; +end; + +procedure TfrmKeymanDeveloper.CharMapInsertCode(Sender: TObject; Control: TWinControl; DragObject: TCharacterDragObject); +begin + GetCharMapDropTool.InsertToControl(Control, DragObject); +end; + +procedure TfrmKeymanDeveloper.CharMapCanInsertCode(Sender: TObject; Control: TWinControl; var Result: Boolean); +begin + Result := Assigned(Control) and (GetCharMapDropTool.Controls.IndexOfControl(Control) >= 0); +end; + +procedure TfrmKeymanDeveloper.CharMapCancelFocus(Sender: TObject); +begin + if Assigned(ActiveChild) then ActiveChild.SetFocus; +end; + +procedure TfrmKeymanDeveloper.FormClose(Sender: TObject; var Action: TCloseAction); +var + i: Integer; +begin + for i := FChildWindows.Count - 1 downto 0 do + begin + FChildWindows[i].Visible := False; + FChildWindows[i].Parent := nil; + FChildWindows[i].Release; // I2595, probably not necessary + end; + + if Assigned(FGlobalProject) then + with TRegistryErrorControlled.Create do // I2890 + try + if FGlobalProject.Untitled + then FGlobalProject.PersistUntitledProject // I1010: Persist untitled project + else FGlobalProject.Save; // I4691 + + RootKey := HKEY_CURRENT_USER; + if OpenKey(SRegKey_IDEOptions_CU, True) then + begin + WriteString(SRegValue_ActiveProject, FGlobalProject.FileName); + end; + finally + Free; + end; + + Action := caFree; + + FreeAndNil(frmCharacterMapDock); + FreeAndNil(frmCharacterIdentifier); // I4807 + FreeAndNil(frmMessages); + FreeAndNil(frmHelp); +// FreeAndNil(frmDebugStatus); +end; + +procedure TfrmKeymanDeveloper.FormCloseQuery(Sender: TObject; + var CanClose: Boolean); +var + i: Integer; +begin +// OutputDebugString(PChar('TfrmKeymanDeveloper.FormCloseQuery: FIsClosing='+BoolToStr(FIsClosing)+' FCanClose='+BoolToStr(FCanClose))); + if not FIsClosing then + begin + // I944 - Fix crash when FChildWindows is nil on closing Keyman Developer + if Assigned(FChildWindows) then + begin + for i := 0 to FChildWindows.Count - 1 do + if not FChildWindows[i].CloseQuery then + begin + CanClose := False; + Exit; + end; + end; + + FIsClosing := True; + SaveDockLayout; + + CanClose := FInitializeCEF.StartShutdown(CEFShutdownComplete); + // TODO: complete exit after StartClose is successful + end + else + CanClose := FCanClose; +end; + +procedure TfrmKeymanDeveloper.CEFShutdownComplete(Sender: TObject); +begin +// OutputDebugString(PChar('TfrmKeymanDeveloper.CEFShutdownComplete')); + FCanClose := True; + Close; +end; + +procedure TfrmKeymanDeveloper.FormDestroy(Sender: TObject); +begin +// OutputDebugString(PChar('TfrmKeymanDeveloper.FormDestroy')); + UnhookWindowsHookEx(hInputLangChangeHook); + + FreeAndNil(FCharMapSettings); + Application.OnActivate := nil; + + FreeGlobalProjectUI; + FreeAndNil(FChildWindows); + FreeAndNil(FProjectMRU); + + ClearSystemKeyboardList(cbDebugSystemKeyboard.Items); + + FreeAndNil(mHHelp); // I4677 + + FreeUnicodeData; + + FreeAndNil(AppStorage); + + kmcom := nil; +end; + +procedure TfrmKeymanDeveloper.FormShow(Sender: TObject); +begin + if FFirstShow then PostMessage(Handle, WM_USER_FORMSHOWN, 0, 0); + FFirstShow := False; +end; + +procedure TfrmKeymanDeveloper.WMActivate(var Message: TWMActivate); +begin + try // I4352 // I4404 // I4485 + inherited; + except + on E:EInvalidOperation do + ; // This happens on shutdown sometimes due to + // annoying sequence of operations in Delphi's focus management. + // It's easier to do this, and relatively side-effect-free, so + // happy to live with this... I4352, I4404, I4485 + end; +end; + +procedure TfrmKeymanDeveloper.WMUserFormShown(var Message: TMessage); +var + i: Integer; +begin + try + if ParamCount = 0 then + begin + ShowProject; + ShowStartupModal(Self); + end + else + begin + for i := 1 to ParamCount do + if FileExists(ParamStr(i)) then + OpenFile(ParamStr(i), False); + ShowStartupModal(Self); + end; + except + CloseStartup; + raise; + end; + + if True then //FKeymanDeveloperOptions.AutoCheckForUpdates then + begin + with TOnlineUpdateCheck.Create(SRegKey_KeymanDeveloper_CU, OnlineProductID_KeymanDeveloper_100, False, True, True, GetProxySettings.Server, GetProxySettings.Port, GetProxySettings.Username, GetProxySettings.Password) do // I3377 + Run; + end; +end; + +procedure TfrmKeymanDeveloper.WMUserInputLangChange(var Message: TMessage); +var + i: Integer; +begin + for i := 0 to FChildWindows.Count - 1 do + PostMessage(FChildWindows[i].Handle, WM_USER_INPUTLANGCHANGE, Message.wParam, Message.LParam); +end; + +procedure TfrmKeymanDeveloper.WMUserLoadRegFiles(var Message: TMessage); +var + i: Integer; + s: TStringList; + t: string; +begin + s := TStringList.Create; + with TRegistryErrorControlled.Create do // I2890 + try + RootKey := HKEY_CURRENT_USER; + if not OpenKey(SRegKey_IDEFiles_CU, True) then // I2890 + RaiseLastRegistryError; + + GetValueNames(s); + for i := 0 to s.Count - 1 do + begin + t := ReadString(s[i]); + DeleteValue(s[i]); + OpenFile(t, False); + end; + finally + Free; + end; +end; + +const + SPI_GETKEYBOARDCUES = $100A; +var + FAlwaysDrawUnderline: Boolean = False; + FWndProcInit: Boolean = False; + +procedure TfrmKeymanDeveloper.WndProc(var Message: TMessage); +begin + case Message.Msg of + WM_DRAWITEM: + begin + if not FWndProcInit then + begin + SystemParametersInfo(SPI_GETKEYBOARDCUES, 0, @FAlwaysDrawUnderline, 0); + FWndProcInit := True; + end; + + if FAlwaysDrawUnderline then + with PDrawItemStruct(Message.lParam)^ do + if (CtlType = ODT_MENU) and Assigned(Menu) then + itemState := itemState and $FEFF; + end; + end; + inherited; +end; + +function TfrmKeymanDeveloper.ApplicationEvents1Help(Command: Word; + Data: NativeInt; var CallHelp: Boolean): Boolean; // I4677 +var + s: string; + frm: TCustomForm; +begin + CallHelp := False; + if Command = HELP_COMMAND then // I4677 + begin + if not FInOnHelp then + begin + FInOnHelp := True; + try + s := PChar(Data); + if s = '' then + begin + frm := GetParentForm(Screen.ActiveControl, False); + if frm is TTikeForm then + s := (frm as TTikeForm).HelpTopic; + end; + if s <> '' then + mHHelp.HelpTopic(s); + finally + FInOnHelp := False; + end; + end + else + mHHelp.HelpTopic(s); + end; + Result := True; +end; + +procedure TfrmKeymanDeveloper.AppOnActivate(Sender: TObject); +var + i: Integer; +begin + FWndProcInit := False; + for i := 0 to FChildWindows.Count - 1 do + if FChildWindows[i] is TfrmTikeEditor then + with FChildWindows[i] as TfrmTikeEditor do + CheckForReload; + + try + FocusActiveChild; // I4847 // I2986 + except + on E:EInvalidOperation do ; // We don't want to crash if focus fails, e.g. on shutdown + end; +end; + +{------------------------------------------------------------------------------- + - File menu - + -------------------------------------------------------------------------------} + +procedure TfrmKeymanDeveloper.mnuDebugI374Click(Sender: TObject); +begin + if Assigned(ActiveEditor) + then frmMessages.Add(ActiveEditor.FileName, '1: bug with multi-line messages'#13#10'Double-click on the second line of this message') + else frmMessages.Add('test.txt', '1: bug with multi-line messages'#13#10'Double-click on the second line of this message'); +end; + +procedure TfrmKeymanDeveloper.mnuDebugSetWindowSizeForScreenshotsClick(Sender: TObject); +begin + Width := 960; + Height := 600; +end; + +procedure TfrmKeymanDeveloper.mnuFileClick(Sender: TObject); +begin + UpdateFileMRU; + mnuFileRecent.Enabled := mnuFileRecent.Count > 0; +end; + +{------------------------------------------------------------------------------- + - View menu - + -------------------------------------------------------------------------------} + +procedure TfrmKeymanDeveloper.ShowChild(Window: TfrmTikeChild); +var + i, j: Integer; +begin + for i := 0 to FChildWindows.Count - 1 do + if FChildWindows[i] = Window then + begin + //Window.SetFocus; + for j := 0 to pages.PageCount - 1 do + if pages.Pages[j].Tag = Integer(Window) then + begin + pages.ActivePageIndex := j; + Break; + end; + end; + //else + //FChildWindows[i].Visible := False; +end; + +procedure TfrmKeymanDeveloper.ShowDebug(AShow: Boolean); +begin + if ActiveEditor is TfrmKeymanWizard then + begin + (ActiveEditor as TfrmKeymanWizard).panDebugHost.Visible := AShow; + if AShow then + // Move the form below the splitter + (ActiveEditor as TfrmKeymanWizard).panDebugHost.Top := ActiveEditor.ClientHeight; + end; +// if Assigned(frmDebugStatus) then frmDebugStatus.Visible := AShow; + panDebugToolbar.Visible := AShow; +end; + +procedure TfrmKeymanDeveloper.ShowProject; +begin + if ProjectForm = nil + then ShowChild(TfrmProject.Create(Self)) + else ShowChild(ProjectForm); + ProjectForm.SetGlobalProject; +end; + +procedure TfrmKeymanDeveloper.ToggleProject; +var + frmProject: TfrmProject; +begin + frmProject := ProjectForm; + if Assigned(frmProject) and (ActiveChild = frmProject) + then PostMessage(frmProject.Handle, WM_CLOSE, 0, 0) + else ShowProject; +end; + +procedure TfrmKeymanDeveloper.InitDock; +begin + AppStorage := TJvAppRegistryStorage.Create(self); AppStorage.Path := SRegKey_IDEDock_CU; AppStorage.AutoFlush := True; AppStorage.AutoReload := True; end; - -procedure TfrmKeymanDeveloper.SaveDockLayout; -begin - //save - AppStorage.BeginUpdate; + +procedure TfrmKeymanDeveloper.SaveDockLayout; +begin + //save + AppStorage.BeginUpdate; try SaveDockTreeToAppStorage(AppStorage); { SaveDockTreeToAppStorage clears the storage, so we save the forms after the @@ -912,58 +912,58 @@ begin finally AppStorage.EndUpdate; end; -end; - -procedure TfrmKeymanDeveloper.DefaultDockLayout; -begin - // Undock the forms first - frmCharacterMapDock.ManualFloat(Rect(0, 0, Screen.Width div 6, Screen.Height div 2)); - frmCharacterIdentifier.ManualFloat(Rect(0, 0, Screen.Width div 7, Screen.Height div 3)); - frmHelp.ManualFloat(Rect(0, 0, Screen.Width div 6, Screen.Height div 6)); - frmMessages.ManualFloat(Rect(0, 0, Screen.Width * 2 div 3, Screen.Height div 6)); - - // Character Map on Right, Top half - frmCharacterMapDock.ManualDock(dockServer.RightDockPanel); - - // Character Identifier on Left - frmCharacterIdentifier.ManualDock(dockServer.LeftDockPanel); - - // Help on Right, Bottom half - frmHelp.ManualDock(dockServer.RightDockPanel, dockServer.RightDockPanel.Controls[0], alBottom); - - // Messages across bottom - frmMessages.ManualDock(dockServer.BottomDockPanel); - - frmCharacterMapDock.Show; - frmCharacterIdentifier.Show; - frmHelp.Show; - frmMessages.Show; - - frmHelp.Height := frmHelp.TBDockHeight; - - dockServer.RightDockPanel.ShowDockPanel(True, frmCharacterMapDock); - dockServer.RightDockPanel.Width := Screen.Width div 6; - - dockServer.LeftDockPanel.ShowDockPanel(True, frmCharacterIdentifier); - dockServer.LeftDockPanel.Width := Screen.Width div 7; - - dockServer.BottomDockPanel.ShowDockPanel(True, frmMessages); - dockServer.BottomDockPanel.Height := Screen.Height div 6; - - // In future, we could consider resizing the Help window down, but - // this appears non-trivial to accomplish with JvDocking. Not important - // enough to chase right now. -end; - -procedure TfrmKeymanDeveloper.LoadDockLayout; -begin - DefaultDockLayout; - - with TRegistryErrorControlled.Create do - try - if OpenKeyReadOnly(SRegKey_IDEDock_CU) then - begin - BeginDockLoading; +end; + +procedure TfrmKeymanDeveloper.DefaultDockLayout; +begin + // Undock the forms first + frmCharacterMapDock.ManualFloat(Rect(0, 0, Screen.Width div 6, Screen.Height div 2)); + frmCharacterIdentifier.ManualFloat(Rect(0, 0, Screen.Width div 7, Screen.Height div 3)); + frmHelp.ManualFloat(Rect(0, 0, Screen.Width div 6, Screen.Height div 6)); + frmMessages.ManualFloat(Rect(0, 0, Screen.Width * 2 div 3, Screen.Height div 6)); + + // Character Map on Right, Top half + frmCharacterMapDock.ManualDock(dockServer.RightDockPanel); + + // Character Identifier on Left + frmCharacterIdentifier.ManualDock(dockServer.LeftDockPanel); + + // Help on Right, Bottom half + frmHelp.ManualDock(dockServer.RightDockPanel, dockServer.RightDockPanel.Controls[0], alBottom); + + // Messages across bottom + frmMessages.ManualDock(dockServer.BottomDockPanel); + + frmCharacterMapDock.Show; + frmCharacterIdentifier.Show; + frmHelp.Show; + frmMessages.Show; + + frmHelp.Height := frmHelp.TBDockHeight; + + dockServer.RightDockPanel.ShowDockPanel(True, frmCharacterMapDock); + dockServer.RightDockPanel.Width := Screen.Width div 6; + + dockServer.LeftDockPanel.ShowDockPanel(True, frmCharacterIdentifier); + dockServer.LeftDockPanel.Width := Screen.Width div 7; + + dockServer.BottomDockPanel.ShowDockPanel(True, frmMessages); + dockServer.BottomDockPanel.Height := Screen.Height div 6; + + // In future, we could consider resizing the Help window down, but + // this appears non-trivial to accomplish with JvDocking. Not important + // enough to chase right now. +end; + +procedure TfrmKeymanDeveloper.LoadDockLayout; +begin + DefaultDockLayout; + + with TRegistryErrorControlled.Create do + try + if OpenKeyReadOnly(SRegKey_IDEDock_CU) then + begin + BeginDockLoading; try AppStorage.BeginUpdate; try @@ -974,525 +974,525 @@ begin finally EndDockLoading; end; - end; - finally - Free; - end; -end; + end; + finally + Free; + end; +end; + +procedure TfrmKeymanDeveloper.cbDebugSystemKeyboardItemClick(Sender: TObject); +begin + if cbDebugSystemKeyboard.ItemIndex < 0 then + cbDebugSystemKeyboard.ItemIndex := 0; + modActionsKeyboardEditor.SelectDebugSystemKeyboard(cbDebugSystemKeyboard.Items.Objects[cbDebugSystemKeyboard.ItemIndex] as TSystemKeyboardItem); + //actDebugSystemKeyboard +end; + +procedure TfrmKeymanDeveloper.cbDebugSystemKeyboard_DropDown(Sender: TObject); +begin +{ if SelectSystemKeyboard(frmKeymanDeveloper, FLoadedSystemKeyboard, FSystemKeyboardName) then + UpdateSystemKeyboardCaption; + if FDebugVisible then + memo.SetFocus; +} + if cbDebugSystemKeyboard.Items.Count < 2 then + begin + //modActionsKeyboardEditor.SelectedSystemKeyboard; + FillSystemKeyboardList(cbDebugSystemKeyboard.Items); + end; + //modActionsKeyboardEditor.SetupDebugSystemKeyboard(cbDebugSystemKeyboard.Strings); +end; + +procedure TfrmKeymanDeveloper.cmdCrashTestClick(Sender: TObject); +var + p: PChar; + c: Char; +begin + p := nil; + c := p^; + if c <> #0 then ShowMessage('Why didn''t it crash?'); +end; + +{------------------------------------------------------------------------------- + - Utility functions - + -------------------------------------------------------------------------------} + +function TfrmKeymanDeveloper.GetActiveChild: TfrmTikeChild; +var + i: Integer; +begin + i := ActiveChildIndex; + if (i < 0) or not Assigned(FChildWindows) then Result := nil + else Result := FChildWindows[i]; +end; + +function TfrmKeymanDeveloper.GetActiveChildIndex: Integer; +begin + if Assigned(pages) // I1004: Crash when starting up on Vista with Matrox.PowerDesk.Hooks.dll (assumed) + then Result := pages.ActivePageIndex + else Result := -1; +end; + +function TfrmKeymanDeveloper.GetActiveEditor: TfrmTikeEditor; +begin + if Assigned(ActiveChild) and (ActiveChild is TfrmTikeEditor) + then Result := ActiveChild as TfrmTikeEditor + else Result := nil; +end; + +function TfrmKeymanDeveloper.GetDropTargetIntf: IDropTarget; +begin + if Assigned(FDropTarget) + then Result := FDropTarget as IDropTarget + else Result := nil; +end; + +procedure TfrmKeymanDeveloper.GetTabOrderList(List: TList); + function DoForm(Form: TForm): Boolean; + begin + if Assigned(Form) and Form.ContainsControl(Screen.ActiveControl) then + begin + Form.GetTabOrderList(List); + Result := True; + end + else + Result := False; + end; +begin + if not DoForm(ActiveChild) and + not DoForm(frmMessages) and + not DoForm(frmHelp) and + not DoForm(frmCharacterMapDock) then + DoForm(frmCharacterIdentifier); // I4807 +end; + +procedure TfrmKeymanDeveloper.HelpTopic(Sender: TTIKEForm); +begin + HelpTopic(Sender.HelpTopic); +end; + +procedure TfrmKeymanDeveloper.ActivateActiveChild; +begin + if Assigned(ActiveChild) then + SendMessage(ActiveChild.Handle, CM_ACTIVATE, 0, 0); +end; + +procedure TfrmKeymanDeveloper.pagesChange(Sender: TObject); +begin + inherited; + //CharacterMapFormChanged(ActiveChild); + ActivateActiveChild; + + cbTextFileFormat.Enabled := Assigned(ActiveChild) and (ActiveChild is TfrmTikeEditor); // I3733 + FocusActiveChild; +end; + +procedure TfrmKeymanDeveloper.pagesCloseTab(Sender: TObject; Index: Integer); +begin + PostMessage(TfrmTikeChild(pages.Pages[Index].Tag).Handle, WM_CLOSE, 0, 0); +end; + +function TfrmKeymanDeveloper.OpenFile(FFileName: string; FCloseNewFile: Boolean): TfrmTikeChild; +var + ext: string; +begin + Result := nil; + Screen.Cursor := crHourglass; + try + try + ext := LowerCase(ExtractFileExt(FFileName)); + + if ext = Ext_ProjectSource then + begin + if BeforeOpenProject then + modActionsMain.OpenProject(FFileName); + end + else + begin + if FCloseNewFile then + if Assigned(ActiveEditor) then + if not ActiveEditor.Modified and ActiveEditor.Untitled then + ActiveEditor.Free; + + if ext = '.kmn' then Result := OpenKMNEditor(FFileName) + else if ext = '.kps' then Result := OpenKPSEditor(FFileName) + else if ext = '.kvk' then Result := OpenKVKEditor(FFileName) + else if ext = '.bmp' then Result := OpenEditor(FFileName, TfrmBitmapEditor) + else Result := OpenEditor(FFileName, TfrmEditor); + end; + + if Assigned(Result) then + AddMRU(FFileName); + + except + on E:EFOpenError do + ShowMessage('Unable to open the file '''+FFileName+'''.'); + end; + + pagesChange(pages); + finally + Screen.Cursor := crDefault; + end; +end; + +function TfrmKeymanDeveloper.OpenKMNEditor(FFileName: string): TfrmTikeEditor; +begin + Result := OpenEditor(FFileName, TfrmKeymanWizard); + //else Result := OpenEditor(FFileName, TfrmEditor); +end; + +function TfrmKeymanDeveloper.OpenKPSEditor(FFileName: string): TfrmTikeEditor; +begin + Result := OpenEditor(FFileName, TfrmPackageEditor); +end; + +function TfrmKeymanDeveloper.OpenKVKEditor(FFileName: string): TfrmTikeEditor; +begin + Result := OpenEditor(FFileName, TfrmOSKEditor); +end; + +function TfrmKeymanDeveloper.BeforeOpenProject: Boolean; +var + i: Integer; +begin + for i := 0 to FChildWindows.Count - 1 do + if not FChildWindows[i].CloseQuery then + Exit(False); + + Result := True; +end; + +function TfrmKeymanDeveloper.OpenEditor(FFileName: string; frmClass: TfrmTikeEditorClass): TfrmTikeEditor; +var + i, n: Integer; +begin + for i := 0 to FChildWindows.Count - 1 do + if FChildWindows[i] is TfrmTikeEditor then + with FChildWindows[i] as TfrmTikeEditor do + if SameFileName(FileName, FFileName) then // I4749 + begin + Result := Self.FChildWindows[i] as TfrmTikeEditor; + ShowChild(Result); + Exit; + end; + + LockWindowUpdate(pages.Handle); + Result := frmClass.Create(Self); + + n := FGlobalProject.Files.IndexOfFileName(FFileName); + if n >= 0 then + Result.ProjectFile := FGlobalProject.Files[n]; + + (Result as frmClass).OpenFile(FFileName); + LockWindowUpdate(0); +end; + +procedure TfrmKeymanDeveloper.HelpTopic(s: string); +begin + Application.HelpJump(s); +end; + +{------------------------------------------------------------------------------- + - Some functions - + -------------------------------------------------------------------------------} + +function TfrmKeymanDeveloper.FindEditorByFileName(AFileName: string): TfrmTikeEditor; +var + i: Integer; +begin + for i := 0 to FChildWindows.Count - 1 do + begin + if (FChildWindows[i] is TfrmTikeEditor) then // I4081 + begin + if ((FChildWindows[i] as TfrmTikeEditor).FileName = AFileName) or + (FChildWindows[i] as TfrmTikeEditor).HasSubFilename(AFilename) then + begin + Result := FChildWindows[i] as TfrmTikeEditor; + Exit; + end; + end; + end; + + Result := nil; +end; + +{------------------------------------------------------------------------------- + - MRU File List - + -------------------------------------------------------------------------------} + +procedure TfrmKeymanDeveloper.AddMRU(FileName: string); +begin + // Add the filename to the top of the MRU. + + if FileName = '' then Exit; + + if LowerCase(ExtractFileExt(FileName)) <> '.kpj' then + // Don't add project files to project MRU + FGlobalProject.MRU.Add(FileName); +end; + +procedure TfrmKeymanDeveloper.UpdateFileMRU; +var + i: Integer; + m: TMenuItem; +begin + for i := 0 to mnuFileRecent.Count - 1 do + mnuFileRecent.Items[0].Free; + + for i := 0 to FGlobalProject.MRU.FileCount - 1 do + begin + m := TMenuItem.Create(Self); + m.Caption := '&'+IntToStr(i+1)+' '+FGlobalProject.MRU.EllipsisFile(i); + m.Hint := FGlobalProject.MRU.Files[i]; + m.OnClick := mnuFileRecentFileClick; + mnuFileRecent.Add(m); + end; +end; + +procedure TfrmKeymanDeveloper.mnuFileRecentFileClick(Sender: TObject); +begin + with Sender as TMenuItem do + OpenFile(Hint, True); +end; + +{------------------------------------------------------------------------------- + - Drag and Drop functionality - + -------------------------------------------------------------------------------} + +procedure TfrmKeymanDeveloper.Drop(const FileNames: array of string); +var + i: Integer; +begin + for i := Low(Filenames) to High(Filenames) do + OpenFile(Filenames[i], False); +end; + +function TfrmKeymanDeveloper.DropAllowed( + const FileNames: array of string): Boolean; +begin + Result := True; +end; + +{------------------------------------------------------------------------------- + - TIKE projects - + -------------------------------------------------------------------------------} + +procedure TfrmKeymanDeveloper.NotifyChildWindowChange(Window: TfrmTikeChild; Action: TListNotification); +var + item: TTabSheet; + i: Integer; +begin + case Action of + lnAdded: + begin + item := TTabSheet.Create(Self); + item.Caption := Window.Caption+' '; //enough space for [x] close button + if Window is TfrmTikeEditor then + begin + item.Hint := (Window as TfrmTikeEditor).FileName; + end; + item.Tag := Integer(Window); + item.PageControl := pages; + Window.Parent := item; + end; + lnDeleted,lnExtracted: + begin + for i := 0 to pages.PageCount - 1 do + if pages.Pages[i].Tag = Integer(Window) then + begin + //CharacterMapFormChanged(nil); + Window.Parent := nil; + pages.Pages[i].Free; + ActivateActiveChild; + FocusActiveChild; + + if FIsClosing then + if pages.PageCount = 0 then + begin + Close; + end; + Exit; + end; + end; + end; +end; + +procedure TfrmKeymanDeveloper.ools1Click(Sender: TObject); +begin + inherited; + DebugTests1.Visible := GetKeyState(VK_SHIFT) < 0; +end; + +procedure TfrmKeymanDeveloper.mnuProjectClick(Sender: TObject); +var + i: Integer; + m: TMenuItem; +begin + for i := 0 to mnuProjectsRecent.Count - 1 do + mnuProjectsRecent.Items[0].Free; + + for i := 0 to FProjectMRU.FileCount - 1 do + begin + m := TMenuItem.Create(Self); + m.Caption := '&'+IntToStr(i+1)+' '+FProjectMRU.EllipsisFile(i); + m.Hint := FProjectMRU.Files[i]; + m.OnClick := mnuProjectRecentFileClick; + mnuProjectsRecent.Add(m); + end; + + mnuProjectsRecent.Enabled := FProjectMRU.FileCount > 0; +end; + +procedure TfrmKeymanDeveloper.mnuProjectRecentFileClick(Sender: TObject); +begin + with Sender as TMenuItem do + begin + if BeforeOpenProject then + modActionsMain.OpenProject(Hint); + end; +end; + +procedure TfrmKeymanDeveloper.cbTextFileFormatItemClick(Sender: TObject); +begin + modActionsMain.actToolsFileFormat.Execute; +end; + +procedure TfrmKeymanDeveloper.crash1Click(Sender: TObject); +var + p: PChar; +begin + p := nil; + p^ := #0; +end; + +procedure TfrmKeymanDeveloper.SetActiveChild(const Value: TfrmTikeChild); +begin + ShowChild(Value); +end; + +procedure TfrmKeymanDeveloper.SetActiveChildIndex(const Value: Integer); +begin + ShowChild(ChildWindows[Value]); +end; + +procedure TfrmKeymanDeveloper.FocusActiveChild; +var + PrevFocus: TfrmTikeChild; +begin + PrevFocus := ActiveChild; + if Assigned(PrevFocus) then + begin + ShowChild(PrevFocus); + if PrevFocus.Visible then + PrevFocus.SetFocus; + end; +end; + +procedure TfrmKeymanDeveloper.UDUI_Error(Sender: TUnicodeData; + Error: TUnicodeDataError; const Details: WideString); +begin + case Error of + udeCouldNotDeleteDatabaseForRebuild: ShowMessage('Could not delete the character map database prior to rebuild. The error was: '+Details); + udeCouldNotCreateDatabase: ShowMessage('Could not create the character map database. The error was: '+Details); + end; +end; + +function TfrmKeymanDeveloper.UDUI_ShouldStartRebuildOnError( + const Msg: WideString): Boolean; +begin + Result := MessageDlg('The Unicode character database did not load successfully ('+Msg+'). Rebuild it now?', mtConfirmation, mbOkCancel, 0) = mrOk; +end; + +function TfrmKeymanDeveloper.UDUI_StartRebuild(Callback: TNotifyEvent; AskFirst: Boolean): Boolean; +begin + Result := False; + + if AskFirst and (MessageDlg('The Character Map has a database of characters that needs to be built before it can be used. Build it now?', + mtConfirmation, mbOkCancel, 0) = mrCancel) then Exit; + FUnicodeDataStatusForm := TfrmUnicodeDataStatus.Create(Self); + try + FUnicodeDataStatusForm.Callback := Callback; + Result := FUnicodeDataStatusForm.ShowModal = mrOk; + finally + FreeAndNil(FUnicodeDataStatusForm); + end; +end; + +procedure TfrmKeymanDeveloper.UDUI_UpdateStatus(const Msg: WideString; Pos, + Max: Integer); +begin + if Assigned(FUnicodeDataStatusForm) then + FUnicodeDataStatusForm.UpdateStatus(Msg, Pos, Max); +end; + +procedure TfrmKeymanDeveloper.UpdateCaption; +begin + if FGlobalProject.Untitled + then Caption := '(Untitled project) - Keyman Developer' + else Caption := ChangeFileExt(ExtractFileName(FGlobalProject.FileName), '') + ' - Keyman Developer'; + + Application.Title := Caption; +end; + +procedure TfrmKeymanDeveloper.UpdateChildCaption(Window: TfrmTikeChild); +var + i: Integer; +begin + for i := 0 to pages.PageCount - 1 do + if pages.Pages[i].Tag = Integer(Window) then + with pages.Pages[i] do + begin + Caption := Window.Caption+' '; //enough space for [x] close button; + Hint := Window.Hint; + Exit; + end; +end; + +procedure TfrmKeymanDeveloper.RefreshOptions; +var + i: Integer; +begin + Screen.Cursor := crHourglass; + try + FUnicodeData.RefreshOptions; + for i := 0 to Self.FChildWindows.Count - 1 do + if Self.FChildWindows[i] is TfrmEditor then (Self.FChildWindows[i] as TfrmEditor).RefreshOptions; + if ProjectForm <> nil then ProjectForm.RefreshOptions; + if Assigned(frmMessages) then frmMessages.RefreshOptions; + if Assigned(frmCharacterMapDock) then frmCharacterMapDock.RefreshOptions; // Recalculates grid after unicode data refresh + finally + Screen.Cursor := crDefault; + end; +end; + +function TfrmKeymanDeveloper.ProjectForm: TfrmProject; +var + i: Integer; +begin + for i := 0 to FChildWindows.Count - 1 do + if (FChildWindows[i] is TfrmProject) then + begin + Result := FChildWindows[i] as TfrmProject; + Exit; + end; + + Result := nil; +end; + +procedure InitClasses; // I3350 +const + CUserAgent: AnsiString = 'Mozilla/5.0 (compatible; MSIE 11.0; Windows NT 6.1; WOW64; Trident/5.0; TIKE/'+SKeymanVersion+')'; // I4045 +begin + with TRegistryErrorControlled.Create do // I3887 + try + if OpenKey(SRegKey_InternetExplorerFeatureBrowserEmulation_CU, True) then // I4436 + WriteInteger('tike.exe', 9000); // I4874 + finally + Free; + end; + + OleCheck(UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, PAnsiChar(CUserAgent), Length(CUserAgent), 0)); // I4045 +end; + +end. -procedure TfrmKeymanDeveloper.cbDebugSystemKeyboardItemClick(Sender: TObject); -begin - if cbDebugSystemKeyboard.ItemIndex < 0 then - cbDebugSystemKeyboard.ItemIndex := 0; - modActionsKeyboardEditor.SelectDebugSystemKeyboard(cbDebugSystemKeyboard.Items.Objects[cbDebugSystemKeyboard.ItemIndex] as TSystemKeyboardItem); - //actDebugSystemKeyboard -end; - -procedure TfrmKeymanDeveloper.cbDebugSystemKeyboard_DropDown(Sender: TObject); -begin -{ if SelectSystemKeyboard(frmKeymanDeveloper, FLoadedSystemKeyboard, FSystemKeyboardName) then - UpdateSystemKeyboardCaption; - if FDebugVisible then - memo.SetFocus; -} - if cbDebugSystemKeyboard.Items.Count < 2 then - begin - //modActionsKeyboardEditor.SelectedSystemKeyboard; - FillSystemKeyboardList(cbDebugSystemKeyboard.Items); - end; - //modActionsKeyboardEditor.SetupDebugSystemKeyboard(cbDebugSystemKeyboard.Strings); -end; - -procedure TfrmKeymanDeveloper.cmdCrashTestClick(Sender: TObject); -var - p: PChar; - c: Char; -begin - p := nil; - c := p^; - if c <> #0 then ShowMessage('Why didn''t it crash?'); -end; - -{------------------------------------------------------------------------------- - - Utility functions - - -------------------------------------------------------------------------------} - -function TfrmKeymanDeveloper.GetActiveChild: TfrmTikeChild; -var - i: Integer; -begin - i := ActiveChildIndex; - if (i < 0) or not Assigned(FChildWindows) then Result := nil - else Result := FChildWindows[i]; -end; - -function TfrmKeymanDeveloper.GetActiveChildIndex: Integer; -begin - if Assigned(pages) // I1004: Crash when starting up on Vista with Matrox.PowerDesk.Hooks.dll (assumed) - then Result := pages.ActivePageIndex - else Result := -1; -end; - -function TfrmKeymanDeveloper.GetActiveEditor: TfrmTikeEditor; -begin - if Assigned(ActiveChild) and (ActiveChild is TfrmTikeEditor) - then Result := ActiveChild as TfrmTikeEditor - else Result := nil; -end; - -function TfrmKeymanDeveloper.GetDropTargetIntf: IDropTarget; -begin - if Assigned(FDropTarget) - then Result := FDropTarget as IDropTarget - else Result := nil; -end; - -procedure TfrmKeymanDeveloper.GetTabOrderList(List: TList); - function DoForm(Form: TForm): Boolean; - begin - if Assigned(Form) and Form.ContainsControl(Screen.ActiveControl) then - begin - Form.GetTabOrderList(List); - Result := True; - end - else - Result := False; - end; -begin - if not DoForm(ActiveChild) and - not DoForm(frmMessages) and - not DoForm(frmHelp) and - not DoForm(frmCharacterMapDock) then - DoForm(frmCharacterIdentifier); // I4807 -end; - -procedure TfrmKeymanDeveloper.HelpTopic(Sender: TTIKEForm); -begin - HelpTopic(Sender.HelpTopic); -end; - -procedure TfrmKeymanDeveloper.ActivateActiveChild; -begin - if Assigned(ActiveChild) then - SendMessage(ActiveChild.Handle, CM_ACTIVATE, 0, 0); -end; - -procedure TfrmKeymanDeveloper.pagesChange(Sender: TObject); -begin - inherited; - //CharacterMapFormChanged(ActiveChild); - ActivateActiveChild; - - cbTextFileFormat.Enabled := Assigned(ActiveChild) and (ActiveChild is TfrmTikeEditor); // I3733 - FocusActiveChild; -end; - -procedure TfrmKeymanDeveloper.pagesCloseTab(Sender: TObject; Index: Integer); -begin - PostMessage(TfrmTikeChild(pages.Pages[Index].Tag).Handle, WM_CLOSE, 0, 0); -end; - -function TfrmKeymanDeveloper.OpenFile(FFileName: string; FCloseNewFile: Boolean): TfrmTikeChild; -var - ext: string; -begin - Result := nil; - Screen.Cursor := crHourglass; - try - try - ext := LowerCase(ExtractFileExt(FFileName)); - - if ext = Ext_ProjectSource then - begin - if BeforeOpenProject then - modActionsMain.OpenProject(FFileName); - end - else - begin - if FCloseNewFile then - if Assigned(ActiveEditor) then - if not ActiveEditor.Modified and ActiveEditor.Untitled then - ActiveEditor.Free; - - if ext = '.kmn' then Result := OpenKMNEditor(FFileName) - else if ext = '.kps' then Result := OpenKPSEditor(FFileName) - else if ext = '.kvk' then Result := OpenKVKEditor(FFileName) - else if ext = '.bmp' then Result := OpenEditor(FFileName, TfrmBitmapEditor) - else Result := OpenEditor(FFileName, TfrmEditor); - end; - - if Assigned(Result) then - AddMRU(FFileName); - - except - on E:EFOpenError do - ShowMessage('Unable to open the file '''+FFileName+'''.'); - end; - - pagesChange(pages); - finally - Screen.Cursor := crDefault; - end; -end; - -function TfrmKeymanDeveloper.OpenKMNEditor(FFileName: string): TfrmTikeEditor; -begin - Result := OpenEditor(FFileName, TfrmKeymanWizard); - //else Result := OpenEditor(FFileName, TfrmEditor); -end; - -function TfrmKeymanDeveloper.OpenKPSEditor(FFileName: string): TfrmTikeEditor; -begin - Result := OpenEditor(FFileName, TfrmPackageEditor); -end; - -function TfrmKeymanDeveloper.OpenKVKEditor(FFileName: string): TfrmTikeEditor; -begin - Result := OpenEditor(FFileName, TfrmOSKEditor); -end; - -function TfrmKeymanDeveloper.BeforeOpenProject: Boolean; -var - i: Integer; -begin - for i := 0 to FChildWindows.Count - 1 do - if not FChildWindows[i].CloseQuery then - Exit(False); - - Result := True; -end; - -function TfrmKeymanDeveloper.OpenEditor(FFileName: string; frmClass: TfrmTikeEditorClass): TfrmTikeEditor; -var - i, n: Integer; -begin - for i := 0 to FChildWindows.Count - 1 do - if FChildWindows[i] is TfrmTikeEditor then - with FChildWindows[i] as TfrmTikeEditor do - if SameFileName(FileName, FFileName) then // I4749 - begin - Result := Self.FChildWindows[i] as TfrmTikeEditor; - ShowChild(Result); - Exit; - end; - - LockWindowUpdate(pages.Handle); - Result := frmClass.Create(Self); - - n := FGlobalProject.Files.IndexOfFileName(FFileName); - if n >= 0 then - Result.ProjectFile := FGlobalProject.Files[n]; - - (Result as frmClass).OpenFile(FFileName); - LockWindowUpdate(0); -end; - -procedure TfrmKeymanDeveloper.HelpTopic(s: string); -begin - Application.HelpJump(s); -end; - -{------------------------------------------------------------------------------- - - Some functions - - -------------------------------------------------------------------------------} - -function TfrmKeymanDeveloper.FindEditorByFileName(AFileName: string): TfrmTikeEditor; -var - i: Integer; -begin - for i := 0 to FChildWindows.Count - 1 do - begin - if (FChildWindows[i] is TfrmTikeEditor) then // I4081 - begin - if ((FChildWindows[i] as TfrmTikeEditor).FileName = AFileName) or - (FChildWindows[i] as TfrmTikeEditor).HasSubFilename(AFilename) then - begin - Result := FChildWindows[i] as TfrmTikeEditor; - Exit; - end; - end; - end; - - Result := nil; -end; - -{------------------------------------------------------------------------------- - - MRU File List - - -------------------------------------------------------------------------------} - -procedure TfrmKeymanDeveloper.AddMRU(FileName: string); -begin - // Add the filename to the top of the MRU. - - if FileName = '' then Exit; - - if LowerCase(ExtractFileExt(FileName)) <> '.kpj' then - // Don't add project files to project MRU - FGlobalProject.MRU.Add(FileName); -end; - -procedure TfrmKeymanDeveloper.UpdateFileMRU; -var - i: Integer; - m: TMenuItem; -begin - for i := 0 to mnuFileRecent.Count - 1 do - mnuFileRecent.Items[0].Free; - - for i := 0 to FGlobalProject.MRU.FileCount - 1 do - begin - m := TMenuItem.Create(Self); - m.Caption := '&'+IntToStr(i+1)+' '+FGlobalProject.MRU.EllipsisFile(i); - m.Hint := FGlobalProject.MRU.Files[i]; - m.OnClick := mnuFileRecentFileClick; - mnuFileRecent.Add(m); - end; -end; - -procedure TfrmKeymanDeveloper.mnuFileRecentFileClick(Sender: TObject); -begin - with Sender as TMenuItem do - OpenFile(Hint, True); -end; - -{------------------------------------------------------------------------------- - - Drag and Drop functionality - - -------------------------------------------------------------------------------} - -procedure TfrmKeymanDeveloper.Drop(const FileNames: array of string); -var - i: Integer; -begin - for i := Low(Filenames) to High(Filenames) do - OpenFile(Filenames[i], False); -end; - -function TfrmKeymanDeveloper.DropAllowed( - const FileNames: array of string): Boolean; -begin - Result := True; -end; - -{------------------------------------------------------------------------------- - - TIKE projects - - -------------------------------------------------------------------------------} - -procedure TfrmKeymanDeveloper.NotifyChildWindowChange(Window: TfrmTikeChild; Action: TListNotification); -var - item: TTabSheet; - i: Integer; -begin - case Action of - lnAdded: - begin - item := TTabSheet.Create(Self); - item.Caption := Window.Caption+' '; //enough space for [x] close button - if Window is TfrmTikeEditor then - begin - item.Hint := (Window as TfrmTikeEditor).FileName; - end; - item.Tag := Integer(Window); - item.PageControl := pages; - Window.Parent := item; - end; - lnDeleted,lnExtracted: - begin - for i := 0 to pages.PageCount - 1 do - if pages.Pages[i].Tag = Integer(Window) then - begin - //CharacterMapFormChanged(nil); - Window.Parent := nil; - pages.Pages[i].Free; - ActivateActiveChild; - FocusActiveChild; - - if FIsClosing then - if pages.PageCount = 0 then - begin - Close; - end; - Exit; - end; - end; - end; -end; - -procedure TfrmKeymanDeveloper.ools1Click(Sender: TObject); -begin - inherited; - DebugTests1.Visible := GetKeyState(VK_SHIFT) < 0; -end; - -procedure TfrmKeymanDeveloper.mnuProjectClick(Sender: TObject); -var - i: Integer; - m: TMenuItem; -begin - for i := 0 to mnuProjectsRecent.Count - 1 do - mnuProjectsRecent.Items[0].Free; - - for i := 0 to FProjectMRU.FileCount - 1 do - begin - m := TMenuItem.Create(Self); - m.Caption := '&'+IntToStr(i+1)+' '+FProjectMRU.EllipsisFile(i); - m.Hint := FProjectMRU.Files[i]; - m.OnClick := mnuProjectRecentFileClick; - mnuProjectsRecent.Add(m); - end; - - mnuProjectsRecent.Enabled := FProjectMRU.FileCount > 0; -end; - -procedure TfrmKeymanDeveloper.mnuProjectRecentFileClick(Sender: TObject); -begin - with Sender as TMenuItem do - begin - if BeforeOpenProject then - modActionsMain.OpenProject(Hint); - end; -end; - -procedure TfrmKeymanDeveloper.cbTextFileFormatItemClick(Sender: TObject); -begin - modActionsMain.actToolsFileFormat.Execute; -end; - -procedure TfrmKeymanDeveloper.crash1Click(Sender: TObject); -var - p: PChar; -begin - p := nil; - p^ := #0; -end; - -procedure TfrmKeymanDeveloper.SetActiveChild(const Value: TfrmTikeChild); -begin - ShowChild(Value); -end; - -procedure TfrmKeymanDeveloper.SetActiveChildIndex(const Value: Integer); -begin - ShowChild(ChildWindows[Value]); -end; - -procedure TfrmKeymanDeveloper.FocusActiveChild; -var - PrevFocus: TfrmTikeChild; -begin - PrevFocus := ActiveChild; - if Assigned(PrevFocus) then - begin - ShowChild(PrevFocus); - if PrevFocus.Visible then - PrevFocus.SetFocus; - end; -end; - -procedure TfrmKeymanDeveloper.UDUI_Error(Sender: TUnicodeData; - Error: TUnicodeDataError; const Details: WideString); -begin - case Error of - udeCouldNotDeleteDatabaseForRebuild: ShowMessage('Could not delete the character map database prior to rebuild. The error was: '+Details); - udeCouldNotCreateDatabase: ShowMessage('Could not create the character map database. The error was: '+Details); - end; -end; - -function TfrmKeymanDeveloper.UDUI_ShouldStartRebuildOnError( - const Msg: WideString): Boolean; -begin - Result := MessageDlg('The Unicode character database did not load successfully ('+Msg+'). Rebuild it now?', mtConfirmation, mbOkCancel, 0) = mrOk; -end; - -function TfrmKeymanDeveloper.UDUI_StartRebuild(Callback: TNotifyEvent; AskFirst: Boolean): Boolean; -begin - Result := False; - - if AskFirst and (MessageDlg('The Character Map has a database of characters that needs to be built before it can be used. Build it now?', - mtConfirmation, mbOkCancel, 0) = mrCancel) then Exit; - FUnicodeDataStatusForm := TfrmUnicodeDataStatus.Create(Self); - try - FUnicodeDataStatusForm.Callback := Callback; - Result := FUnicodeDataStatusForm.ShowModal = mrOk; - finally - FreeAndNil(FUnicodeDataStatusForm); - end; -end; - -procedure TfrmKeymanDeveloper.UDUI_UpdateStatus(const Msg: WideString; Pos, - Max: Integer); -begin - if Assigned(FUnicodeDataStatusForm) then - FUnicodeDataStatusForm.UpdateStatus(Msg, Pos, Max); -end; - -procedure TfrmKeymanDeveloper.UpdateCaption; -begin - if FGlobalProject.Untitled - then Caption := '(Untitled project) - Keyman Developer' - else Caption := ChangeFileExt(ExtractFileName(FGlobalProject.FileName), '') + ' - Keyman Developer'; - - Application.Title := Caption; -end; - -procedure TfrmKeymanDeveloper.UpdateChildCaption(Window: TfrmTikeChild); -var - i: Integer; -begin - for i := 0 to pages.PageCount - 1 do - if pages.Pages[i].Tag = Integer(Window) then - with pages.Pages[i] do - begin - Caption := Window.Caption+' '; //enough space for [x] close button; - Hint := Window.Hint; - Exit; - end; -end; - -procedure TfrmKeymanDeveloper.RefreshOptions; -var - i: Integer; -begin - Screen.Cursor := crHourglass; - try - FUnicodeData.RefreshOptions; - for i := 0 to Self.FChildWindows.Count - 1 do - if Self.FChildWindows[i] is TfrmEditor then (Self.FChildWindows[i] as TfrmEditor).RefreshOptions; - if ProjectForm <> nil then ProjectForm.RefreshOptions; - if Assigned(frmMessages) then frmMessages.RefreshOptions; - if Assigned(frmCharacterMapDock) then frmCharacterMapDock.RefreshOptions; // Recalculates grid after unicode data refresh - finally - Screen.Cursor := crDefault; - end; -end; - -function TfrmKeymanDeveloper.ProjectForm: TfrmProject; -var - i: Integer; -begin - for i := 0 to FChildWindows.Count - 1 do - if (FChildWindows[i] is TfrmProject) then - begin - Result := FChildWindows[i] as TfrmProject; - Exit; - end; - - Result := nil; -end; - -procedure InitClasses; // I3350 -const - CUserAgent: AnsiString = 'Mozilla/5.0 (compatible; MSIE 11.0; Windows NT 6.1; WOW64; Trident/5.0; TIKE/'+SKeymanVersion+')'; // I4045 -begin - with TRegistryErrorControlled.Create do // I3887 - try - if OpenKey(SRegKey_InternetExplorerFeatureBrowserEmulation_CU, True) then // I4436 - WriteInteger('tike.exe', 9000); // I4874 - finally - Free; - end; - - OleCheck(UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, PAnsiChar(CUserAgent), Length(CUserAgent), 0)); // I4045 -end; - -end. - diff --git a/windows/src/developer/TIKE/project/Keyman.Developer.UI.Project.UfrmProject.pas b/windows/src/developer/TIKE/project/Keyman.Developer.UI.Project.UfrmProject.pas index 0a57c0aab7..a8d7a365c6 100644 --- a/windows/src/developer/TIKE/project/Keyman.Developer.UI.Project.UfrmProject.pas +++ b/windows/src/developer/TIKE/project/Keyman.Developer.UI.Project.UfrmProject.pas @@ -370,7 +370,6 @@ begin try BaseFileName := FGlobalProject.FileName; FileType := FileTypeFromParamType; - if FileType = ftOther then Exit; if ShowModal = mrOk then begin @@ -385,7 +384,6 @@ begin begin { locate an existing file, add it to the project } FFileType := FileTypeFromParamType; - if FFileType = ftOther then Exit; dlgOpenFile.Filter := GetFileTypeFilter(FFileType, FDefaultExtension); dlgOpenFile.DefaultExt := FDefaultExtension; From d099bbf1897ff7d025ab4cbefb42c70154472dc8 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Tue, 19 Feb 2019 17:42:35 +1100 Subject: [PATCH 16/16] [Developer] Fixes #1599. Ensure text editor resizes when window does --- windows/src/developer/TIKE/xml/app/editor/editor.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/windows/src/developer/TIKE/xml/app/editor/editor.js b/windows/src/developer/TIKE/xml/app/editor/editor.js index 03ebb64e08..b525d9c5be 100644 --- a/windows/src/developer/TIKE/xml/app/editor/editor.js +++ b/windows/src/developer/TIKE/xml/app/editor/editor.js @@ -86,6 +86,10 @@ async function loadSettings() { // Setup callbacks // + window.addEventListener('resize', function() { + editor.layout(); + }); + const model = editor.getModel(); context.reloadSettings();