Pigtail Softwareアプリケーションの紹介です。
[ptsNotes S60文書管理プログラム] [ptsEijiro 英辞郎ビューワー]

Top / Prog / CarbideC

Carbide.c++ のメモ

ここではCarbide.c++固有のメモを扱います。 Symbian C++に関連することがらはProg/Symbianにあります。


S60関連

UI Designerのメモ

UI DesignerはCrabide.c++の有料版で使用することが出来るGUIベースのS60画面デザインツールです。 便利ではあるのですが、色々と使いこなすためのワザも必要です。 詳しくはページ Prog/CarbideC/UIDesigner を参照ください。

Audio関連のコードを書いてコンパイルするとmmfcontroller.h内でundefined identifierが多数発生する

SDK S60_3rd_FP1では発生しない。 SDK S60_3rd_MRなどで発生。

mmpファイルに以下の行を追加する。

SYSTEMINCLUDE \epoc32\include\mmf\plugin

この情報はForum Nokia Developer Discussion Boardのスレッドを参考にしました。

注) プロジェクトをインポートすると再発するかも。その場合はmmpファイルを変更してCompileし直すと良いかも。

リンク時にundefined symbolが発生する

コンパイルは成功しているがリンクでエラーしている。 コンソールを見るとmwldsym2.exeがエラーを吐いている。

冷静に考えると何のことは無く、リンカーにリンクすべきライブラリーの情報が与えられていないだけのことです。

undefined symbolだと言われたクラスをSDKのドキュメントで調べると一番上にlib名が出ているので、それをmmpファイルに追加する。

ローカライズ

Carbide.c++ v1.2でS60 3rdのアプリケーション開発において複数言語をサポートする手順です。

大体のところは Forum Nokia Wiki の 'How to define localization messages' に載っているが、少々足りないことも。

  • プロジェクトのProperty/InfoにてText file encodingをOther: UTF-8にする。
  • プログラムを完成もしくは完成近くまで作成する。無論、すべての画面に表示する文字列はリソースを参照するようにプログラムしておく。
  • mmpファイルの変更。編集画面のSourceタブのResourceにてLanguageを編集し必要な言語を追加するNon-Localizedは取り除く。これによりmmpファイルが以下のように変更される。
    LANG SC
    LANG 01 32
    などとなります。 言語と2ケタの番号の対応は e32const.h か mmp ファイルの編集画面で確認できる。 ちなみに日本語は 32 です。
  • pkgファイルの変更。
    • 最初の方のLanguageの指定を
      &EN,JA
      のようにする。これで英語、日本語になります。言語を表す2文字の英字はSDK HelpのLanguage code tableのページにあります。
    • standard SIS file header, Localized Vendor name, Support Series 60 v 3.0の{}で囲まれた部分を言語の数だけ指定します。
      ; standard SIS file header
      #{"Simon","サイモン"},(0xE0009999),1,0,0
      
      ;Localised Vendor name
      %{"Kozak","コザック"}
      
      ;Supports Series 60 v 3.0
      [0x101F7961], 0, 0, 0,  {"Series60ProductID","Series60ProductID"}
      みたいな感じです。
    • Files to installのリソース関連ファイルを変更します。
      "$(EPOCROOT)Epoc32\data\z\resource\apps\Simon_0xE0009999.rsc"	-"!:\resource\apps\Simon_0xE0009999.rsc"
      "$(EPOCROOT)Epoc32\data\z\private\10003a3f\apps\Simon_0xE0009999_reg.rsc"	-"!:\private\10003a3f\import\apps\Simon_0xE0009999_reg.rsc"
      {
      "$(EPOCROOT)Epoc32\data\z\resource\apps\Simon_0xE0009999.r01"		
      "$(EPOCROOT)Epoc32\data\z\resource\apps\Simon_0xE0009999.r32"		
      }-"!:\resource\apps\Simon_0xE0009999.rsc"
      {
      "$(EPOCROOT)Epoc32\data\z\private\10003a3f\apps\Simon_0xE0009999_reg.r01"	
      "$(EPOCROOT)Epoc32\data\z\private\10003a3f\apps\Simon_0xE0009999_reg.r32"	
      }-"!:\private\10003a3f\import\apps\Simon_0xE0009999_reg.rsc"
      のような感じにします。
  • rlsファイルを各言語別のファイルにコピーします。例えば MyApp.rls を英語と日本語別にするには MyApp.l01 と MyApp.l32 にコピーします(拡張子の最初の1文字は小文字のLです)。それぞれの言語に応じ中身のテキストを翻訳します。
  • rlsファイルの中身を以下のようにします。
    CHARACTER_SET UTF8
    
    #ifdef LANGUAGE_01
    #include "Simon.l01"
    #endif
    
    #ifdef LANGUAGE_32
    #include "Simon.l32"
    #endif
    わたしは最初のCHARACTER_SET UTF8を忘れてハマりました。コンパイルエラーもせず、ただ文字化けしてしまいます。

アプリケーション・アイコン (Application Icon)

アイコンはSVGというスケーラブルな図形フォーマットで記述します。 これが中々に難物でツールの入手からアイコンがデバイスに出るまで丸一日を要してしまいました。

[ ツール ]

  • inkscape

SVG形式の図形を編集するフリーソフトです。 SVGはXMLでもあるので簡単な画像ならテキストエディタでも作れますが美しいアイコンを作るのは難しいでしょう。 Inkscapeは窓の杜などを探せば見つかります。 Adobe Illustratorを持っていればSVGが作れるそうです。

  • SVG2SVGT

Inkscapeなどで出力されるSVG形式をそのままでは使うことが出来ません。 SVG2SVGTでSVGT形式に変更する必要があります。 このツールはSDKに含まれています。 ${EPOCROOT}S60Tools\svg2svgt にインストーラーが入っている。

[ 手順 ]

  • inkscape等でアイコンを作成する。スケーラブルなので大きさはあまり気にしなくても良いと思う。Cardbide.c++のディフォルトのファイルを目安にすると良い(下に追記あり)。図形により使えない物があるので注意(後述)。
  • 文字列を書き込んだ場合は文字列に対して「オブジェクトをパスへ」を実行しないとアイコンに反映されないようです。
  • SVG2SVGTで変換。出力先を指定しないとC:\svgtool\svgfilesに出来上がります。
  • プロジェクトのgfxフォルダーにあるsvgファイルと置き換える。
  • rssファイルのRESOURCE LOCALIZABLE_APP_INFOの中のnumber_of_iconsが0に成っている場合、以下追加する。
    number_of_icons = 1;
    icon_file = "¥¥resource¥¥apps¥¥appName_aif.mif";
    実際のmifファイル名はコンパイル時のコンソール出力で確認できます。Carvide.c++ v1.3では表示されないかも、その時は"Epoc32¥release¥winscw¥udeb¥z¥resource¥apps¥"を探します。
  • エミュレータで確認。何も表示されなくなってしまった場合はSVGの作りに問題が有るかも。
  • 実機で確認。すでにプログラムがインストールされたデバイスにアイコンだけ入れ替えたSISXを持ち込んで導入し直してもアイコンが古い物のままになります。その場合、デバイスの電源オフ、オンが必要です。

[ SDK の選択 ]

ま〜さんのM-FEP関連のフォーラムで知りました。 SDK S60_3rd_FP1で作成したSISをFP無しの初期のS60 3rdデバイス(例えばE61)にインストールした場合アイコンが表示されないようです。 Forum NokiaのDeveloper Discussion Boardによると、原因はSDK_S60_3rd_FP1のmifconv.exeにあるようです。 逆のケース、S60_3rd_MRで作成したSISをFP1デバイスにインストールした場合は大丈夫かも(もうじき確認できるはず、、、)。

[ SVG の形式 ]

細かいことは分かりませんが、SVGファイルの中身によりアイコンとして使用できない物があります。 Forum NokiaのDeveloper Discussion Boardsにいくらか情報がありますが、書き物としてまとまっているような物はまだ見つかりません。

とりあえず中身をのぞいてpathの記述がある場合は要注意です。 ただし全てのpathがだめな訳では無いです。

問題はInkscapeで円とか楕円を書くと必ずpathで記述されるのですが、これがほとんど全滅です。 曲線が必要な場合はcircleを基本として加工していくのが良いようですがInkscapeでは作れません。 添付した filecircle.zip に入っているcircle.svgを雛形として使用すると良いです。 このファイルはSVGT形式なので、そのままプロジェクトに取り込んでアイコンの変更だけの練習にも使えます。 これを加工して楕円や扇形を作ってみたところ、うまくアイコンとして使用できる物が出来ました。 円と矩形を重ねて差分を取ったり結合させたりと色々と工夫するとかなり複雑な図柄も表現出来ます。

グラデーションが簡単に表現できるのもSVGの特徴なのですが、グラデーションをかけたらアイコンが見えなくなる場面もありました。 細かくカット・トライを行ってアイコンを作っていくしかないです。

[ サイズについて ]

サイズについて以下の情報がブログ「書くことないです。」にて紹介されていました。

  • サイズが調整されない場合は、SVGTファイル内の
    width="*" height="*"
    width="100%" height="100%" viewBox="0 0 * *"
    のように変更する。
  • また目安としては44x44で作成すると良い。

余談ですがSVGは元々webのために考えられた物てW3Cで規格化されました。 よって本来はWebブラウザーで見ることが出来るようになってほしいのですがIEでは残念ながらプラグインを入れないと見れません。 Firefoxなら見ることが出来ますのでSVGビューアーとしても使えます。

添付ファイル: filecircle.zip 590件 [詳細]