國際語言環境指南

XmTextXmTextField 資源

Xm CTL 在 Motif 2.0 CSText 視窗元件之後擴充了 XmTextXmTextField,其方法是增加可經由視覺化圖案來操作之移動和刪除動作的平行集。標準 Motif 2.1 TextTextField 的邏輯順序和實際順序並無不同:nextforward 表示 “到右邊”,previousbackward 表示 “到左邊”。然而,CSText 會做出適當區別,並以完全實體名稱 (例如,left-character ()delete-right-word() 等) 來定義新的動作集。這些動作的常式都被定義成可對視窗元件的 XmNlayoutDirection 產生回應,且會呼叫正確的 next-previous- 動作。

Xm CTL 延伸較 CSText 延伸略為複雜。Xm CTL 延伸不會對視窗元件的整體方向有所回應,但是會對虛擬 XOC (包括中性穩定) 所指定游標周圍的實際字元特定方向產生回應。

新的資源名稱可讓您控制選取策略、提供產生標籤和控制對齊。

新的 Xm CTL 動作集大致上是 {Character,Word}{Left,Right}{Move,Delete,Kill} 的交叉作用產物。下表將列出動作集。

表 6–2 Xm CTL 中的新資源

名稱 

類別/類型 

存取 

預設值 

XmNrenditionTag

XmCRenditionTag/XmRString

CSG 

XmFONTLIST_DEFAULT_TAG

XmNalignment

XmCAlignment/XmRAlignment

CSG 

XmALIGNMENT_BEGINNING

XmNeditPolicy

XmCEditPolicy/XmREditPolicy

CSG 

XmEDIT_LOGICAL

XmNrenditionTag

指定 XmNrenderTable 資源中 XmRendition 的產生標記供視窗元件使用。

XmNalignment

指定視窗元件中使用的文字對齊方向。僅支援 XmALIGNMENT_ENDXmALIGNMENT_CENTER

XmNeditPolicy

指定供視窗元件使用的編輯策略,XmEDIT_LOGICALXmEDIT_VISUAL。在 XmEDIT_VISUAL 的情況下,選取、游標移動和刪除都是以視覺化的樣式呈現。設定此資源也會將一般的鍵盤移動和刪除事件解譯成新的「視覺」動作清單或現有的邏輯動作。

字元方向動作常式

forward-cell()backward-cell() 動作查詢指定方向的字元方向。如果方向是從左至右,這些動作會呼叫對應的 next-/forward-previous-/ backward- 變數。

字元方向的其他行為

動作會使用巢狀層的「版面配置服務」變換 OutToInpProperty 緩衝區來決定字元方向。因此視窗元件的行為取決於每個語言環境的特定轉換。如果 OutToInp 中的資訊,特別是 Property 緩衝區中的資訊不正確,視窗元件可能不會正常運作。尤其當特定語言環境的模組落在此規格之外的範圍時,同樣文字、應用程式、資源值和 LayoutObject 配置的雙向編輯行為在每個平台上會有所不同。

視覺模式動作會導致以顯示格為基礎的行為顯示出來。邏輯模式動作會導致以邏輯字元為基礎的行為。例如,delete-right-character() 作業會刪除與顯示顯示格對應的輸入緩衝區字元。也就是說,輸入緩衝區字元的整個 LayoutObject 變換 “property” 位元組「new cell indicator」是 1,而所有隨後字元的「new cell indicator」是 0。

如需 Property 緩衝區的詳細資訊,請參閱「CAE Specification」中的 m_transform_layout() 規格。

同樣的,就 backward-character() 而言,插入點會在輸入緩衝區中往後移動一個字元,而游標會重現在對應相關輸出緩衝區字元的可視位置。因此,有好幾個按鍵必須移過複合顯示格。當插入點移過像是分音符或連音符片段 (其「new cell indicator」是 0) 的輸入緩衝區字元時,實際上並未變更游標的顯示位置。

此行為表示刪除動作會從邏輯/輸入緩衝區端執行或是從實體/輸出緩衝區端的顯示格層執行。嚴格、實際的字元對應刪除並沒有任何模式,因為輸入緩衝區和輸出緩衝區之間並沒有一對一的對應關係。例如,已知的實體字元只能代表邏輯字元的一部份。

XmText 動作常式

下列清單說明 XmText 動作常式。

left-character(extend)

如果 XmNeditPolicyXmEDIT_LOGICAL,且呼叫它時沒有使用引數,則插入游標會邏輯式地往後移動一個字元。如果插入游標是在行頭,插入游標就會移到前一行的最後一個字元 (如果有的話)。否則,插入游標位置就不會變更。

如果 XmNeditPolicyXmEDIT_VISUAL,那麼游標就會移到游標位置的左側。如果插入游標是在行頭,那它會移到前一行的最後一個字元 (如果有的話)。

如果使用了 extend 引數來呼叫 left-character(),則插入游標會移動,延伸目前的選取範圍,就像沒有使用引數時一樣。

left-character() 動作以合理的 XmCR_MOVING_INSERT_CURSOR 值產生對 XmNmotionVerifyCallback 程序的呼叫。如果使用 extend 引數來呼叫的話,這個動作就會產生對 XmNgainPrimaryCallback 程序的呼叫。如需詳細資訊,請參閱「Motif Programmer's Reference」中的回呼說明。

right-character(extend)

如果 XmNeditPolicyXmEDIT_LOGICAL,且呼叫它時沒有使用任何引數,則插入游標會邏輯式地往前移動一個字元。如果插入游標是在行尾,此動作會將插入游標移到下一行的開頭 (如果有的話)。

如果 XmNeditPolicyXmEDIT_VISUAL,那麼游標就會移到游標位置的右側。如果插入游標是在行尾,那插入游標會移到下一行的開頭 (如果有的話)。

如果使用 extend 引數來呼叫,XmNeditPolicy 會移動插入游標,延伸目前的選取範圍,就像沒有使用引數時一樣。

right-character() 動作以合理的 XmCR_MOVING_INSERT_CURSOR 值產生對 XmNmotionVerifyCallback 程序的呼叫。如果使用 extend 引數來呼叫的話,這個動作就會產生對 XmNgainPrimaryCallback 程序的呼叫。如需詳細資訊,請參閱「Motif Programmer's Reference」中的回呼說明。

right-word(extend)

如果 XmNeditPolicyXmEDIT_LOGICAL,且呼叫它時沒有使用任何引數,則插入游標會移到接續文字的起始字元 (如果有的話)。否則,游標會移到目前文字的結尾。如果插入游標位於行尾或是一行的最後一個字,游標就會移到下一行的第一個字 (如果有的話)。否則,游標會移到目前文字的結尾。

如果 XmNeditPolicyXmEDIT_VISUAL,且未使用引數呼叫,插入游標會移到行尾右側或之後第一個空白字元之後的非空白字元。

如果使用 extend 引數來呼叫,引數會移動插入游標,延伸目前的選取範圍,就像沒有使用引數時一樣。

left-word() 動作以合理的 XmCR_MOVING_INSERT_CURSOR 值產生對 XmNmotionVerifyCallback 程序的呼叫。如果使用 extend 引數來呼叫的話,這個動作就會產生對 XmNgainPrimaryCallback 程序的呼叫。如需詳細資訊,請參閱「Motif Programmer's Reference」中的回呼說明。

delete-left-character()

如果 XmNeditPolicyXmEDIT_LOGICAL,它就相當於 delete-previous-char()。如果 XmNeditPolicyXmEDIT_VISUAL,那麼在一般模式中,如果選取範圍是非 null,便會刪除此選取範圍。否則,此動作會刪除插入游標左邊的字元。在增加模式中,如果選取範圍是非 null,而游標和選取範圍並未切斷連接,且 XmNpendingDelete 已設為 True,則此動作會刪除選取範圍。否則,此動作會刪除插入游標左邊,對選取範圍產生影響的字元。

delete-left-character() 動作以合理的 XmCR_MODIFYING_TEXT_VALUE 值產生對 XmNmodifyVerifyCallback 程序的呼叫,並以合理的 XmCR_VALUE_CHANGED 值產生對 XmNvalueChangedCallback 程序的呼叫。

delete-right-character()

如果 XmNeditPolicyXmEDIT_VISUAL,它就相當於 delete-next-character()。如果 XmNeditPolicyXmEDIT_VISUAL,那麼在一般模式中,如果選取範圍是非 null,它就會刪除選取範圍。否則,它會刪除插入游標右邊的字元。在增加模式中,如果出現非 null 的選取範圍,且游標和選取範圍並未切斷連接,則 XmNpendingDelete 會設為 True,選取範圍也會被刪除。否則,它會刪除插入游標右邊的字元。這個動作會對選取範圍產生影響。

delete-right-character() 動作以合理的 XmCR_MODIFYING_TEXT_VALUE 值產生對 XmNmodifyVerify-Callback 程序的呼叫,並以合理的 XmCR_VALUE_CHANGED 值產生對 XmNvalue-ChangedCallback 程序的呼叫。

某些以顯示格為基礎的常式是為支援字元的複合、連音和分音片段而執行。換句話說,兩個或兩個以上的字元可以用佔用了一個顯示格的單一文字影像來代表。

下列清單說明 XmText 顯示格動作常式。

backward-cell(extend)

將插入游標往回移一個顯示格。如果 XmNeditPolicy XmEDIT_LOGICAL,則插入游標就會移到目前顯示格的前一個顯示格開頭 (如果有的話)。否則,游標會移到目前顯示格的開頭。

如果 XmNeditPolicyXmEDIT_VISUAL,那麼游標就會移到左側顯示格的開頭 (如果有的話)。prev-cell() 動作以合理的 XmCR_MOVING_INSERT_CURSOR 值產生對 XmNmotionVerifyCallback 程序的呼叫。如果使用 extend 引數來呼叫的話,這個動作就會產生對 XmNgainPrimaryCallback 程序的呼叫。如需詳細資訊,請參閱「Motif Programmer's Reference」中的回呼說明。

forward-cell(extend)

將插入游標移到下一個顯示格的開頭 (如果有的話)。否則,此動作會將游標移到顯示格結尾。如果 XmNeditPolicyXmEDIT_LOGICAL,那麼游標會往前移一個顯示格。

如果 XmNeditPolicyXmEDIT_VISUAL,則游標會移到游標位置右邊顯示格的開頭 (如果有的話);否則,它會移到目前顯示格結尾。forward-cell() 動作以合理的 XmCR_MOVING_INSERT_CURSOR 值產生對 XmNmotionVerifyCallback 程序的呼叫。如果使用 extend 引數來呼叫的話,這個動作就會產生對 XmNgainPrimaryCallback 程序的呼叫。如需詳細資訊,請參閱「Motif Programmer's Reference」中的回呼說明。