của ứng dụng KH OA C NT T – Đ H KH TN Chương 3 Vấn đề phát triển ứng dụng trên Symbian 45 Chẳng hạn có CExample là tên của ứng dụng, được viết bởi lập trình viên. Các lớp CEik được cung cấp bởi Uikon Core API. CCoeControl và CCoeAppUi thuộc về UI Control Framework. CApaDocument và CApaApplication thuộc về AppArc. Trong đó: o Lớp application định nghĩa các thuộc tính của ứng dụng: UID, tiêu đề và tạo mới một document. o Lớp document trình bày mô hình dữ liệu cho ứng dụng. Trong các ứng dụng về tập tin, nó thực hiện các thao tác đọcghi dữ liệu. Nó tạo một yêu cầu của tài liệu bằng cách tạo appUI. o appUi là nơi tập trung các lớp giao diện. Nó tạo và sở hữu các control để hiển thị dữ liệu, và bắt tất cả các sự kiện từ control. o AppView có thể xem như là một control để hiện thị dữ liệu và tương tác người dùng. Một ứng dụng phức tạp có thể có nhiều cách để hiển thị dữ liệu, do đó sẽ có nhiều view. Tuy nhiên đối với kiến trúc này thì có một số điểm cần lưu ý khi lập trình : o Sự phân cách giữa xử lý dữ liệu và hiển thị dữ liệu. o Sự thống nhất giữa xử lý file và các tài liệu. o Có thể nhúng ứng dụng khác vào ứng dụng hiện thời. o Hướng sự kiện. Như vậy thì cấu trúc của một ứng dụng có thể biểu diễn như trong sơ đồ sau : KH OA C NT T – Đ H KH TN Chương 3 Vấn đề phát triển ứng dụng trên Symbian 46 Hình 35 Liên hệ giữa các thành phần trong kiến trúc của ứng dụng Trình tự thực hiện các thành phần trong ứng dụng là : Application tạo một document, rồi đến lượt document tạo App UI, AppUI tiếp tục tạo View. Khi AppUI nhận lệnh (command), AppView nhận và hiển thị dữ liệu. Document chứa mô hình được hiển thị bởi view. 3.3 Các ngôn ngữ có thể dùng phát triển ứng dụng trên HDH Symbian Phần mềm viết trên HDH Symbian, version 6.0 có thể được phát triển bằng 4 ngôn ngữ: o EPOC C++ : HDH Symbian được viết bằng C++. Do đó, dùng EPOC C++ thì rất hiệu quả và có thể truy cập đến tất cả các hàm APIs mà HDH Symbian có cung cấp. o Java: Java 2, Micro Edition, với rich profiles. PersonalJava 3.0 bao gồm trọn bộ đầy đủ hệ quản lý dữ liệu Java và các hàm APIs cho giao tiếp, đồ họa AWT. JavaPhone 1.0 cung cấp khả năng truy cập ở các KH OA C NT T – Đ H KH TN Chương 3 Vấn đề phát triển ứng dụng trên Symbian 47 thiết bị không dây, chẳng hạn như contacts, schedule, telephony, power monitoring …. o WAP: HDH Symbian version 6.0 cài đặt WAP version 1.1 communication stacks và browsers standars o HTML: trình duyệt web của Symbian version 6.0 cài đặt HTML 3.2 với đầy đủ bộ khung, HTTPS và nhúng Java applets. 3.3.1 Phát triển ứng dụng bằng C++: Mã nguồn cho 1 project viết bằng C++ bao gồm: o C++ source file( .cpp, .h) o tập tin nguồn cho resource của chương trình ( resource files, bitmap, icons) o những tập tin hệ thống của project: tập tin chứa thông tin xây dựng (bld.inf), 1 hay nhiều makefile specifications ( .mmp) SDK của cả Quartz và Crystal của Symbian cung cấp các công cụ để xây dựng chương trình bằng C++: o công cụ xây dựng các makefiles và điều khiển các tác vụ mà được điều khiển bời tiến trình xây dựng (build process). o công cụ để chuyển makefile specifications thành makefile hay workspace của Visual C++ IDE. o Trình biên dịch GNU C++, phiên bản 98r2, thiết kết riêng cho các yêu cầu của EPOC và xây dựng các chương trình cho các máy hoạt động dựa trên ARM. o Trình biên dịch và chuyển đổi các resources của chương trình (resource files, bitmap, icons) o Help compiler KH OA C NT T – Đ H KH TN Chương 3 Vấn đề phát triển ứng dụng trên Symbian 48 o Công cụ trợ giúp thường trú, để chuyển phần trợ giúp viết cho EPOC R5 thành cho Quartz và Crystal. o tập tin cài đặt từ hệ thống cài đặt của Symbian. o App wizard o GUI icon và application information file builder. o Perl, ngôn ngữ scripting được dùng bởi rất nhiều công cụ. Để xây dựng và debug chương trình bằng mày giả lập thì cần phải có Microsoft Visual C ++,version 6.0. 3.3.2 Phát triển ứng dụng bằng Java Mã nguồn cho 1 project viết bằng Java bao gồm: o Java source file( .java) o Các tập tin cần thiết cho việc xác định ứng dụng sẽ được cài đặt như thế nào ( .app, .txt) o Sử dụng JavaDoc cho việc documeting APIs và implemention. SDK của cả Quartz và Crystal của Symbian cung cấp các công cụ để xây dựng chương trình bằng Java: o batch files để xây dựng các tập tin JAR cho các máy giả lập. o GUI icon và application information file builder. o GUI icon và application information file builder, như trong C++, nhưng có hổ trợ riêng cho các yêu cầu của Java. o tập tin cài đặt từ hệ thống cài đặt của Symbian. Để xây dựng và debug chương trình bằng mày giả lập thì cần phải có môi trường lập trình Java chuẩn. Còn để phát triển và debug bằng phương pháp Java nguyên thủy cần có SDK của Quarzt hay Crystal C++: SDKs cho Java bao gồm phần bổ KH OA C NT T – Đ H KH TN Chương 3 Vấn đề phát triển ứng dụng trên Symbian 49 sung C++ SDKs chứa phần hổ trợ cho buildtime của phương phát Java nguyên thủy. Ta vẫn có thể dùng thư viện của Java mà không cần SDKs của C++. Ngoài ra, SDKs của quarzt và Crystal cung cấp hổ trợ đầy đủ cho việc xây dựng các ứng dụng. 3.3.3 Phát triển ứng dụng bằng WAP và HTML: Cũng có thể nhưng rất hiếm khi dùng 2 ngôn ngữ này để xây dựng phần mềm trên HDH Symbian.Cách làm cũng giống như C++ và Java: o viết trang HTML hay WML o sao chép những trang này đến thư mục thích hợp trong máy giả lập. o dùng ứng dụng WAP hay WEB trên mày giả lập để biên dịch các trang này. o sửa lại cho thật đúng và biên dịch những trang này trên máy giả lập. o dùng hệ thống cài đặt để cài đặt những trang này trên thiết bị thật. Thường thì người ta phát triển nội dung HTML và Wap bằng server và sau đó biên dịch trên thiết bị thật. Các thiết bị dùng HDH Symbian, và máy giả lập đều có thể nối mạng nội bộ với nhau bằng cách dùng Windows NT Remote Access Services (RAS), để giảm bớt giá thành kiểm tra và tăng tốc độ kiểm tra lên. KH OA C NT T – Đ H KH TN Chương 4 Xây dựng ứng dụng VNSmartType 50 Chương 4 Xây dựng ứng dụng VNSmartType 4.1 Giới thiệu Ý tưởng : Như đã đề cập ở chương 1, với các thiết bị cầm tay thông minh như Pocket PC, smartphone nói chung, hệ điều hành Symbian 6.0 và Nokia 9210 nói riêng dường như chưa có một ứng dụng hỗ trợ soạn thảo Tiếng Việt hoàn chỉnh. Một bộ gõ Tiếng Việt, một số chức năng sao cho gõ soạn thảo nhanh chóng tiện lợi đối với những người sử dụng dạng điện thoại Crystal3 vẫn còn là điều mơ ước. Với các phím bấm tương đối nhỏ, soạn thảo không thể nhanh, việc có các chức năng hỗ trợ quả là rất quý giá và tiện lợi vô cùng. Đó là những ý tưởng ban đầu để hình thành nên VNSmartType. Một bộ gõ Tiếng Việt hoàn chỉnh, không những thế mà còn là một công cụ hỗ trợ soạn thảo đa dụng, dường như bạn không cần phải gõ từng chữ một với nhiều dấu rườm rà phức tạp vốn là đặc thù của Tiếng Việt. 4.2 Các chức năng Trước hết VNSmartType phải là một bộ gõ tiếng việt, tương tự như Vietkey hay Unikey trên PC. Với vai trò là “một bộ gõ tiếng Việt”, VNSmartType phải hỗ trợ các kiểu gõ tiếng Việt khác nhau như chúng ta đã biết trên PC, đó là 3 kiểu gõ thông dụng nhất hiện nay4: VNI TELEX VIQR Và hỗ trợ toàn bộ bằng bảng mã Unicode (đây có thể xem là một trong những đặc tính mạnh mẽ của hệ điều hành Symbian 6.0). Với 3 kiểu gõ thông dụng này hầu 3 Dạng điện thoại có phần cứng tương tự máy tính cá nhân 4 Chi tiết về các kiểu gõ xin mời tham khảo phần phụ lục. KH OA C NT T – Đ H KH TN Chương 4 Xây dựng ứng dụng VNSmartType 51 như đã đáp ứng nhu cầu của người dùng, đặc biệt cho người dùng cảm giác gần gũi với chiếc máy tính cá nhân quen thuộc. Tuy nhiên, không phải không có những trở ngại, chúng ta hãy xem lại hình minh hoạ sau đây : Hình 41 DTDD Nokia 9210 Dễ dàng nhận thấy với Nokia 9210, sự hạn chế về các thiết bị là rất rõ ràng: bàn phím nhỏ, khó bấm, một số nút để soạn thảo nhanh trong PC bị lược bỏ, chính vì vậy dù đã hỗ trợ soạn thảo tiếng Việt khá hoàn chỉnh thì người dùng vẫn cảm thấy thật sự khó khăn khi thao tác. Chính vì vậy, một bộ gõ tiếng Việt cũng chưa thể khắc phục những hạn chế mà thiết bị đem lại cho người dùng. Vậy chúng ta cần gì ? Chúng ta cần một chức năng có khả năng tự động hoàn chỉnh từ khi chúng ta chỉ đánh một vài từ đầu tiên (AutoComplete). Ví dụ chỉ cần đánh từ “ph” sẽ cho chúng ta một loạt các từ bắt đầu bằng “ph” như “phở gà”, ”phong thuỷ”, ”phương án”, ”phi vật thể”, ”phiếu thu tiền”…, và chỉ cần nhấn một phím, ta sẽ có được từ mình mong muốn. KH OA C NT T – Đ H KH TN Chương 4 Xây dựng ứng dụng VNSmartType 52 Chúng ta cần một chức năng có thể viết ra một từ thật dài mà ta thường hay dùng khi ta chỉ đánh một từ tắt của nó(AutoCorrect), ví dụ chúng ta chỉ cần đánh “it” lập tức cụm từ “dài ngoằn nghèo” “information technology” hay “Công nghệ thông tin” sẽ xuất hiện. Nhận xét : Với 2 chức năng trên, chúng ta cảm thấy vô cùng tiện lợi và không cần phải gõ quá nhiều, việc này có ý nghĩa thật quan trọng trong thời đại công nghệ hiện nay khi công việc luôn dồn dập cấp bách và cần sự ngắn gọn, tiện lợi, nhanh chóng. Tiến xa hơn một bước, với Tiếng Việt chúng ta thường mất công bỏ các loại dấu khác nhau như huyền, sắc, ngã, hỏi, nặng… Việc ấy càng mất công khi thiết bị cầm tay vốn là quá nhỏ. Với AutoComplete và AutoCorrect chúng ta không cần đánh nhiều nhưng chúng ta cũng không thể lưu tất cả những từ của Tiếng Việt được, đó là chuyện không thể vì hạn chế về bộ nhớ xử lý…. Hai chức năng cơ bản trên chỉ hỗ trợ “những từ chúng ta thường dùng nhất”, xin nhắc lại “thường dùng nhất” mà thôi chúng ta không thể lạm dụng lưu quá nhiều từ sẽ dẫn tới xử lý chậm và tốn hao bộ nhớ. Chính vì vậy VNSmartType hỗ trợ thêm chức năng “tự động thêm dấu văn bản” (Automatic Add Accents), đây là một chức năng khá thông minh, giúp chúng ta rất nhiều đặt biệt là khi có sự kết hợp với 2 chức năng hỗ trợ trên. Thử tượng tưởng thay vì chúng ta gõ “Cộng hoà xã hội chủ nghĩa Việt Nam” chúng ta chỉ cần gõ các chữ không dấu “Cong hoa xa hoi chu nghia Viet Nam” lập tức câu ấy sẽ được thêm các dấu Tiếng Việt nhanh chóng. Có chức năng thêm dấu văn bản thì cũng phải có chức năng xoá dấu văn bản (Automatic Remove Accents), nhiều người nói rằng chức năng này vô lý quá, vì người Việt ai cũng muốn đọc văn bản có dấu chứ ai lại muốn đọc văn bản không dấu bao giờ Nhưng hãy nghĩ kỹ Với các đời điện thoại di động hiện nay, không phải máy nào cũng hỗ trợ Unicode, tức là rất nhiều máy không thể hiển thị tin nhắn Tiếng Việt, chính vì vậy nếu muốn gửi tin nhắn cho các loại máy khác nhau chúng ta nên có KH OA C NT T – Đ H KH TN Chương 4 Xây dựng ứng dụng VNSmartType 53 chức năng thêm dấu cũng như xoá dấu để các máy khác nhau đều nhận được tin nhắn đó. Càng quan trọng hơn nếu đó là một lời nhắn cấp bách Tóm lại : VNSmartType có các chức năng sau đây : Bộ gõ Tiếng Việt hoàn chỉnh “Bộ tứ” chức năng hỗ trợ thông minh : o AutoComplete o AutoCorrect o Automatic Add Accents o Automatic Remove Accents Cùng với những chức năng người dùng khác như cho phép tìm, thêm xoá, sửa các từ trong list các từ của các chức năng….. 4.3 Kỹ thuật chạy nền (Background) Trước hết, một bộ gõ tiếng Việt phải đáp ứng các yêu cầu cần thiết sau : Chạy đồng thời với các chương trình khác, để bất cứ đang ở ứng dụng soạn thảo nào có hỗ trợ Unicode đều phát huy tác dụng được. Bắt được phím bấm của các chương trình khác để từ đó tuỳ biến xử lý hiển thị tiếng Việt. Như vậy việc cần làm của chúng ta là phải tìm kiếm API hỗ trợ việc chạy đồng thời với các chương trình khác (nói ngắn gọn là chạy nền – chạy background) và tìm cách bắt tất cả các phím của các ứng dụng đồng thời với bộ gõ của chúng ta. Việc chạy nền không quá khó khăn trong Symbian 6.0 vì hệ điều hành này đã hỗ trợ các API của lớp CAcitve được cụ thể hoá cho Dialog có tên là CancelDialog đã xây dựng sẵn. Đây là dialog được xây dựng kế thừa của lớp CActive, đối tượng được KH OA C NT T – Đ H KH TN Chương 4 Xây dựng ứng dụng VNSmartType 54 đóng gói để yêu cầu những dịch vụ không đồng bộ và để bắt tất cả các sự kiện. Sử dụng CancelDialog nhằm tạo thành 1 long running task dùng để chạy nền. Đây là một hỗ trợ vô cùng ý nghĩa đối với người lập trình vì các API hỗ trợ trong Symbian đều rất khó khăn cho người lập trình vì tính phức tạp và khó thử nghiệm, vì thế việc có sẵn vài lớp và ứng dụng, nhất là những vấn đề liên quan đến tương tác người dùng là vô cùng quý giá. Như vậy, chúng ta đã giải quyết được vấn đề thứ nhất là vấn đề chạy background nhờ sử dụng dialog có sẵn là CancelDialog của Symbian cung cấp. 4.4 Kỹ thuật bắt phím Như đã nói ở trên, việc bắt các phím của các ứng dụng khác là yêu cầu bắt buộc của một bộ gõ tiếng Việt. Symbian cung cấp một tập API phục vụ cho việc xen vào bắt các phím của các ứng dụng đang chạy, sử dụng cơ chế đồng hành của các tiến trình. Sau đây là một số khái niệm cũng như tổng quan một số lớp mà chúng ta sử dụng để xử lý bắt phím . (Chi tiết hơn xin tham khảo phần phụ lục). Window Server Session Khi một ứng dụng bắt đầu thì Symbian coi như đó là một session. Sesion này được quản lý bởi Window Server, do đó Window Server Session chính là nơi lưu trữ các thông tin về cửa sổ…Để lấy thông tin về cửa sổ ta có thể dùng các lớp thành viên của Window Server Client Side (tham khảo thêm trong SDK Documentation). Trong ví dụ này, chúng ta chỉ sử dụng lớp RWsSession và RWindowGroup.5 Window Group Khi một session bắt đầu thì các cửa sổ được xem như là một Window Group. Để quản lý các thông tin này Symbian dùng lớp RWindowGroup. 5 Chi tiết hơn xin tham khảo phần Phụ lục – RwsSession , RWindowGroup KH OA C NT T – Đ H KH TN Chương 4 Xây dựng ứng dụng VNSmartType 55 CActive, CActiveScheduler Một đối tượng được quản lý trong scheduler được gọi là “active object” và lớp để biểu diễn đối tượng này là CActive. Để diễn tả cho bộ điều phối, Symbian cung cấp lớp CActiveScheduler6. Cách bắt phím Để bắt được phím đầu tiên ta phải lấy được bộ điều phối (scheduler) của Symbian. Sau đó ta thêm vào scheduler hàm xử lý để bắt tất cả sự kiện phím rồi xử lý. Việc này cũng tương tự như Hook trên Windows.Để bắt sự kiện phím ta làm những bước sau : o Kết nối Window Server Session để lấy các thông tin về các cửa sổ. o Từ Window Server Session lấy Window Group. o Từ Window Group ta sẽ “capture” các phím mà cần phải xử lý. Sau các bước này, khi có sự kiện phím xảy ra mà phím này ta đang “capture” thì thông điệp này sẽ được gửi đến hàm xử lý. Sau đây là source code minh họa: Khai báo lớp CKeyboardScheduler để lấy bộ scheduler. class CKeyboardScheduler : public CActiveScheduler { }; Khai báo “active object” để chèn đối tượng này vào bộ điều phối (scheduler). class CLongProcess : public CActive { public: …. 6 Chi tiết hơn xin tham khảo phần Phụ lục – CactiveScheduler KH OA C NT T – Đ H KH TN Chương 4 Xây dựng ứng dụng VNSmartType 56 hàm chính dùng để đăng ký và xử lý void ConstructL(); void RunL(); void CaptureASCIIiKey(); void CancelCaptureASCIIKey() ;….. private: ….. các biến window server session, window group RWsSession iWs; RWindowGroup iWg; …. } Sau đây là bản cài đặt hoàn chỉnh : Void CLongProcess::ConstructL() { con trỏ đến bộ điều phối sẽ lấy được CKeyboardScheduler runner; Kết nối tới window server User::LeaveIfError(iWs.Connect()); Lấy window group của session KH OA C NT T – Đ H KH TN Chương 4 Xây dựng ứng dụng VNSmartType 57 iWg=RWindowGroup(iWs); Tạo các thông số cần thiết cho window group User::LeaveIfError(iWg.Construct((unsigned long)this,EFalse)); “Capture” các phím cần thiết CaptureASCIIkeys(); Lấy bộ điều phối hiện thời, nếu chưa có install mới if(CActiveScheduler::Current()) { Runner=new CKeyboardScheduler(); if (Runner) CKeyboardScheduler::Install(Runner); } else Runner=(CKeyboardScheduler)CActiveScheduler::Current(); Thêm đối tượng của chúng ta vào bộ điều phối. Runner>Add(this); } void CLongProcess::CaptureASCIIKey() { int i. j; Các phím cần bắt từ FromKey>ToKey for (i=Fromkey;iLayout()); Tạo luồng cho lớp CItemArray , CItemArray là một lớp kế thừa từ Cbase được xem như linh hồn của file ,vì nó xử lý tất cả các thao tác như là lưu trữ ,thêm một item vào root ,xoá một item khỏi root….. TStreamId id=CItemArray::CreateL(store); Tạo id cho root KH OA C NT T – Đ H KH TN Chương 4 Xây dựng ứng dụng VNSmartType 66 store>SetRoo