
2008年11月22日
○スクリプト呼び出しのインタフェイス
名前ベースのみにする←内部スクリプトJS, QSなどからの制御
タイプライブラリ形式は中止する。
⇒外部JS(XPCOM)からの呼び出し自由度は必須ではない。
自由度を犠牲にして実装の簡便性を優先する。

＊内部スクリプトのインタフェイスは計画通り
＊外部スクリプトはGUI構築のためのみに使用される。
＊外部スクリプトのインタフェイスは必要最低限の非拡張性のものに変更する。

外部スクリプトに提供するサービス

・XPCOM Wrapper object(xpcw)の機能
xpcwがCueMol Wraper object (qmw, XXX_wrapper)への参照を保持する
(javascriptのwrapperがqmwへの参照を保持するのと同)
メソッド名を文字列で指定して、そのobjectのメソッドを呼び出す機能(invoke)
プロパティーにアクセスする機能(getProp,setProp,hasProp,enumProps,enumPropTypes)

e.g.ファイルを開く
Reader factory objectを得る(in wrapper)
⇒Reader object xを得る(in wrapper)
xに進捗callbackを指定(イベントマネージャ参照)
xにデータソースを指定(local file/stream manager参照)
xにできるオブジェクト名/IDを指定（名前or数値ID）
xに他のオプションを指定(連想配列/JSON)
実行の指令

e.g. 分子レンダラの右クリックメニュー処理
Mol objectを得る（サービスより）
イベントマネージャを経由して、callbackを指定。
クリック時、callbackが呼ばれる（必要データが連想配列に入って渡される）
ポップアップメニューを作成・表示
メニューの実行（xpcw経由）
要検討：npruntime由来のthreadから直接XPCOM側を実行してmenuを表示したりしても大丈夫なのか。ケースによってはthread marshalingが必要だろう。

・効率的な配列と連想配列のアクセス
→配列/hash getはJSONで実装できる（範囲に限定する）、特別な配列/hashは実装しない

・Service(singleton)を呼び出すサービス
メソッド名・引数を指定→呼び出し
返却値の処理

・イベントマネージャ
XPCOMオブジェクトへの参照を保持し、指定されたメソッドをcallbackできるように。
callbackは、イベント発生側のthreadにより直接呼び出されるケースがもっとも単純
Eventをlistenしているthreadが別にあって、そのthreadがcallbackを実行する、
という実装も必要かもしれない。（XUL側がmultithreadだと必要になってくる？)
→　1.9.1系から？cycle collectorに対応していないせいでassertionに失敗する
↑cycle collectorは関係なかった。LScrCallback objとScript Listener objが正しくreleaseされて
おらず、qICallback::Release()が呼ばれていなかったせいで、最後のGCの段階でも
qICallback（ひいては全JS object）への参照が残ったままになっていた。
qICallback::Release()を正しく呼ばれるようにすれば解決した。
ついでにXPCCueMolのdtorも正しく呼ばれるようになった。（2009/8/11）

・ストリームマネージャ
CueMol側からgecko,XPCOMを隠蔽しつつ、
httpなどのURIをhandlingするために必要。
CueMol側からは単なるLStream派生オブジェクトとしてアクセス可能な
network socketなどを提供できるようにする。
(data pull型interfaceに固執するとThreadが必要になってくるかもしれない)
data push型interfaceも考慮して、Reader/Writer側を実装しなおしたほうが
簡単かもしれない。

----------
2008/11/25

・アプリの構成 --- XPCOM版
xpcqm.dll (or xpccuemol.dll)
  cuemol application (qICueMol/XPCCueMol) の起動init()→すべての初期化initialization
  cuemol application (qICueMol/XPCCueMol) の終了fini()→すべての終了化finalization
  その他のサービス
    Singletonを呼び出すサービス, getScene(), getObject()など

1. XPCCueMol::init()は必ずはじめに呼ばれる(external JSから)。
2. XUL等による、View用のplugin配置(複数・途中可)
3. pluginをMolView等にattachする(external JSから)

・XPCOMラッパ
XPCOMに対するObjWrapperでの値やりとりは基本的に
nsIVariant
経由で行わなければならない。
nsIVariantはfrozen interfaceでないらしいが、使わざるを得ない。

invokeの引数渡しにはarrayを使用したいところだが、
XPCOMのarrayは複雑（配列全体での型が決まっており、値のホモ・ヘテロにより処理を分岐させなければならない）
→invoke0, invoke2など引数の数によりメソッドを作ってある程度は対応可能（この方が処理も速いだろう）


・シーン記述のXMLについて
アトリビュートにXMLが埋め込めないので（あたりまえか）
アトリビュートには、マネージャなどで定義したIDの参照を指定する。
マネージャなどで定義しない場合は、アトリビュートでなく子エレメントの形で定義する(XMLで記述できる)
よく使う記述については、独自の記述を定義する(色、分子選択など) → Parserを作る必要性
色: rgb(n,n,n), rgba(n,n,n,n), #NNNNNN (HTMLの記法), hsb(n,n,n), hsba(n,n,n,n); nは実数, Nは16進数
分子: A.100:200.CA, name ASN and !elem H 等 (バージョン1.1と同じ)

<prop name="carbon_color">
  <object type="color">
    <prop name="ambient" value="#NNNNNN"/>
    <prop name="specular" value="#NNNNNN"/>
    <prop name="diffuse" value="#NNNNNN"/>
    <prop name="povray"/>
      <!-- CDATA/definition used in povray rendering -->
    </prop>
  </object>
</prop>

例えば、povray用の項目については、CDATAで定義した文字列が直接渡されるようにする。
（どこにどのように渡されるかは、今後の課題）
色には
・solid色
・gradient色
が考えられる。

----------
2008/11/26

mcwrapgen3に問題点
★1/8での問題点を考えると，以下の事項は間違っているかも（wrapperがinstance化すると勘違いしていた）
Objectの方でSmartPtr型だと宣言→WrapperはSmartPtrしか扱えなくなる
プロパティーでImmediate型を使用→ImmediateをwrapしたWrapperがgetterで生成される
そのWrapperを使って操作を行うとWrapperのコード中でInvalidCastが起こる（WrapperはSmartPtrにcastしようとするから）
↓
QIFファイルのプロパティ定義で記述する型は，実際のobject中で定義されている型情報を知らせるものとする．
getterが返す値の型を指定しているわけではない（getterが返す値の型は，そのobject型のQIFファイルで定義したものから変えられない）
プロパティ型とQIF型が異なる場合は，getter/setterで型変換を行うコードを生成するようにする．

実際にはQIF定義がImmediateの場合はあり得ないので、
問題は(Ptr/SPtr)<-->(Immed/Ptr/SPtr)変換のケースのみとなる。
ただし、対角（同等変換）は実装済み。
当面の問題はSPtr<-->Immed変換のみと考え、それのみ実装する。

そのうちPtr<-->Immedも必要になってくるかもしれない。
Ptr<-->SPtr(あるいはその逆)はあまり必要性がなさそう。

----------
2008/12/16
Win32の実装．
UNIX/Xの実装と同レベルまでは完了．

2009/1/6
DisplayList実装
DisplayList, View, Renderer, Object, Sceneのcleanup順序に問題があり，正常に終了できない．
DisplayList: 対応するSceneのViewが全て無くなったら無効
最後のViewがなくなる前・直前に，Sceneはcleanupするようにする．
--> unloading() というのを作って対応

2009/1/8
mcwrapgen3に問題点(←解決済み)
smartptrにしたらプロパティなど，polymorphismを扱えなくなってしまっている．
thisは常に非smartptrにしなければならない．
→typelib/XPCOM用の実装は全て破棄・wrapperはinstance化しない前提で
→pthisは常に通常ポインター型になるようにした．
（qifでのsmartptr宣言が意味がないようになってしまった？）

★引数などについても，
基本的に，qifで指定した型・ポインタタイプに変換するようなコードを生成
１．（＊何でも）→pointer変換
２．（＊何でも）→smartptr変換
を行う．LScriptable::isSmartPtr()で判断してcastするようにする．
２の場合の中で，pointer->smartptr変換が若干問題がある可能性有り．

----------
2009/2/25
Atom, Bond, Resid iterator一応完成（選択対応）
Simple, trace renderers一応完成（coloring対応）
Compatible renderersのenumeration作成（→dialog選択）

----------
2009/3/26

OSX/AGLの実装（一応完成）

ログの実装変更
イベント＋ファイル１つ形式に限定する
→GUIでのログ表示はイベントで捕捉する

★イベントの実装１
一般的なCallback object：LScrCallBackを私用した実装

Script wrapperで必要な実装
・関数オブジェクトからLScrCallBack interfaceを持つcallback object(XXCallBack)を実装する
・wrapperで引数に関数オブジェクトが渡された場合に、XXCallBackに変換するようなコードを実装
・XXCallBack::invoke()を、関数オブジェクトを呼び出すように実装する。

Scriptから使用可能なイベントの実装手順
・イベント発生源の実装（QIF、addListener/removeListenerを含む）
・Script用proxy listenerの実装（LScrCallBack*を保持し、LScrCallBack::invokeを呼び出すだけ）

Scriptイベントの削除（removeListener）を実装する・メモリ管理→IDを返し、後でそれを使ってunregister出来るようにした。

----------
2009/3/31

★イベントの予定

・SceneCreated/Loaded
シーンの生成
SceneDestroyed
シーンの破棄
↑あまり用途無し？

・SceneChanged
シーン中のobjectの変化(object自体の変化は含まない)
- ObjectCreated(Loaded?)
- ObjectDestroyed
* PropertyChanged
scene名の変更など

シーン中のrendererの変化(renderer自体の変化は含まない)
- RendererCreated(Loaded?)
- RendererDestroyed

シーン中のviewの変化(view自体の変化は含まない)
- ViewCreated
- ViewDestroyed

・ObjectChanged
* PropertyChanged(多種多様)
object名の変更など

・RendererChanged

・ViewChanged

・入力デバイス系
InDevEvent
mouseのlow level event

★イベントobject実装
Scriptのことを考えると、event objectはexception objのような派生クラスに応じた分類にしてしまうとscriptからのアクセスが困難になる。（全部のクラスに対応したscriptable objを作らなければならない、面倒）
→IDによる分類、非階層的、monolithicな実装にする。
→scriptでのイベントcallbackは、引数は可変長配列にする（event種類によって異なるように出来るように）

★プロパティーとイベントの問題点
obj.get("prop1").get("prop2").get("prop3").set("prop4", value);
という風に内部objの内部プロパティーを変更してしまうと，objに変更を通知するすべがない（あるいは困難）．

１．案
Object, Renderer等のpropertyに関しては，
obj.get("prop1.prop2.prop3.prop4", value)
というふうに，toplevelでとりまとめてアクセスするようにし，toplevelのget/setで
イベント処理を行うようにする

問題点
javascriptから，obj.prop1.prop2.prop3.prop4 = valueという形式で
アクセスできなくなる．

２．案 ←現在実装
プロパティ自体にどういうobjectの内部にあるかの情報を保持させる
（実装が困難）

----------
2009/4/4
イベントの実装（プロパティ、一部）
上記２。案を実装。（さほど困難ではないかも）

ともかくもwrapperがsetterを完了した後に（dispatch interfaceで）
LPropContainer::nodePropChgImpl(...)を呼び出すように。
（→direct interfaceからはイベントが起こらないが、使わないのでOK）

LPropContainerは、m_rootuid(root prop containerへの参照ID), m_thisname(root prop containerにおける自身のプロパティ名)を保持することにする。

LPropContainer::nodePropChgImplでroot prop containerへの参照更新と
firePropChanged(...)呼び出しを処理。

root prop containerへの参照更新は、新規に設定されたproperty値がLPropContainerであった場合に、自身のm_rootuidとm_thisname等を利用して、そのm_rootuidとm_thisnameを書き換える。

・ 弱い参照のためのUID実装
LUIDObjectインタフェイスを実装するクラスは、ObjectManagerにctorで登録・dtorで削除を行う。
→UIDでobjectを参照できる。dtorが呼ばれて削除されていた場合はNULLが返るので破棄されたpointerを参照してしまう危険がない。

・Scene, Viewのdirty flagの実装。
Renderer/ObjectはSceneに含まれると考える。

----------
2009/4/19

Eventの発生状況によっては非main threadで発生する可能性がある（特にworker thrのはくlog）
EventManagerをつくり，非main threadで発生したeventはpendingにする→main threadのpoolingによりevent発行
（main threadによる遅延delegation機構）

----------
2009/5/2

マウス周りイベントの実装・スクリプト化
Hittest(point)実装
Toolboxのprototypeを実装
windowsのみ，mouse cursorを指定できるように

★ InDevEventスクリプト化可能性の意義
マウスでの操作をxulのレベルで横取り可能になる
ToolのようなGUIをxulレベルで実装するには必要な実装

○【 TO DO 】
★ Renderer/Objectのproperty changeはSceneのdirty flagをたてる。(event handlerで??)

・完了
Selection rendererの実装と選択変化への対応
↑マウスクリックなどによる選択(一応実装09/08/30)
↑10/1/24　選択反映の機構を変更

----------
2009/5/17

・ Serialization/deserialization
Output
DATA --> LDOM --> stream
Input
stream --> LDOM --> DATA
という実装にした．LDOMは中間表現．
propertyと軽量なデータは全てこの機構で読み書きされる．
大きいデータ，Objectのcontentsはdatachunk構造を使って同じstream中に埋め込まれる．

○【 TO DO 】
★ Document baseの扱い．srcがfull pathで無い場合は，scene fileがあるフォルダからの相対になるようにする．
勝手に相対→絶対に変換しないようにする．

・完了（？）
Serialization/deserializationとchunk handlingは分離する．
SceneWriter/Readerとして，Scene特有のchunk handlingを実装する．
Serialization/deserializationはscene以外の例えばメモリでの直列化にも使えるようにする．
↑readFrom2(), writeTo2()のDATA <--> LDOM変換では
chunkは扱っていないので、メモリでの直列化に使えるはず。

・完了（？）
DATA <--> LDOMとLDOM <--> streamを分離すれば，メモリでの直列化で
streamを経由する必要がなくなる．（DATA --> LDOM --> DATA2）
↑実装した


----------
2009/8/4

・UndoManagerの実装

・ firePropChanged()では、各listenerにpropchanged eventをbroadcastする。
renderer, objectは自己propchg eventをctorでlistenするようにする．
child node eventでは，toplevel nodeにもeventが伝搬する．
必要なタイプのeventのみ受け取るためのフィルターが必要か？
（各ハンドラーでif文でチェックすれば同じことは出来るので、
この段階でフィルターするのは単にパフォーマンスの問題だけ。
実際パフォーマンスが改善するかは不明だが）
同様なことは，mouse eventでも必要か？
→当面はともかくも簡単な実装を重視してbroadcastのみにする．（たいしたパフォーマンス問題ではないだろうし）

・Propertyのedit infoの保存は，propchg event handlerで行うことにする．
→必ずsuperclassにイベントを伝搬するように
_super_t::propChanged(event);
コードを書かないと正しくedit infoが記録されない！！

XPCOM間でのunicode変換を正しく実装．

終了時処理を何とか実装．
xpcomに関しては，wrapperを全て監視する．（使用中wrapperの帳簿を維持する）
最後にcuemol2をシャットダウンするときには，
wrapperが参照しているものもどうせ消えてしまうので，
前もって全ての参照をNULLに再設定する
→終了時処理後にxpcomのGC()が起っても，もうcuemol2内部情報を参照していないので
安全にwrapper(のぬけがら)のみを削除できる．

----------
2009/8/9

・完了
text drawingの実装、thebes APIを利用してcross plathomeにする。
win, osxで動作確認。

xulrunnerをmozilla 1.9.1系に移行

解決済み：mozilla 1.9.1系にすると、cycle collector関連のメモリリーク問題が発覚

----------
2009/8/9

Scriptへのcallback関連のメモリ解放を正しく行うように修正。

2009/8/13
valgrindを使用した、メモリリークのデバッグ

●stylesheet関連のための実装計画
・default flagの実装(root objのみ?)
・getDefaultValueの実装(既定値のQIFファイルでの記述)
・serializationの修正
・Eventの実装修正と、Undoの実装修正

●stylesheet関連のための実装計画(2009/11/23実装開始)
・style sheet repositryの実装
・style sheet object自体の実装
・rendererからの参照機構の実装(loadsheet/unloadsheet)
・style sheet自体の変更時のrendererのupdate機構（←これは当分実装しない）

・mcwrapgen3におけるEnum型プロパティの実装が必要（済み）
getTypeNamesではenum型であると返される
getEnumValues(enum型名)で、どういうIDがあり得るのか調べられるように
enum型は、QIF class内に定義するようにする
enumはvariantでは文字列として保持。UIからは文字列で扱う
↑一応実装した(9/8/23)

----------
2009/8/14

matrix, vector等のクラスについて，内部用とスクリプトからアクセスできる外部用を分ける．

2009/8/15
Scriptable関連のクラス階層を変更した。
smartptr wrapperにevent処理の実装がないように、等々
property event発生処理・root object UID維持処理をwrapper codeから分離した
default valueの実装

問題点：
所有するvariantが必要。bOwnedフラグによる処理はやめた方が良い。
TransientVariantとOwnedVariantが必要。
↑基本的にOwnedにするようにした(9/8/23)


----------
2009/8/23

・Enum型の実装

・mcwgenまわりを刷新、directインタフェイスを全削除した

・LVariantの実装を変更。基本的に所有するようにした。
→ケースによってObject, Rendererが直にLVariantに渡されるようなコードが
一部に存在しているため、Object, Rendererのコピーが作られておかしくなる。
特にdeserializationのコードで、生成したobjectがおかしくなる。

○必要なこと
Object, Rendererは今はSimpleCopyだが、これはView同様NoCopyにするべき。
deserializationでObject, Rendererはdefault ctor直接呼び出しで作られるが、
特にrendererはfactory経由で作られるようにした方が良い。
↑8/30, Scene, Objectは対処済み

・重大な問題点（解決）
上記に関連して、compositeなobjectをstringからdeserializeするときに、getpropしたobjに対して
fromString()を呼び出してしまっているが、これをやると、対象がdefault値だった場合に
default objectの値が書き換わってしまうという問題がある。
↑fromStringS()というstring->object static method (ctor相当)を実装し、
createObj()に文字列引数を渡せるバージョンを作成
instance methodのfromString()は廃止する

----------
2009/8/29

・Serialization/DeserializationとLDom2Treeの再実装
LDom2TreeはLDomTreeのrefactoringバージョン
Treeを中間層に置く
object<-->treeにSer/Deserializationし、streamはtreeをXML形式に書き出す実装にした。

wrapperでの、native型とvariant型間の変換を、LWrapperImpl内に移した
特に、文字列variant型→native型変換時に、native objectがターゲットの場合に、
Type::fromStringS()が呼ばれるようになっている。（Colorで#FFFFFF等で値が設定可能になる）

○発覚した問題点・バグ
Sceneを（終了時以外に）削除して、アプリを終了すると、CycleCollectorでassertionに失敗する。
どこかでメモリ管理がおかしくなっている可能性がある。

・解決した問題点・バグ
chain _が認識されない（simpleで何もレンダリングされない）
→MolAtomRenderer::render()において、bonded/nonbondedの判断がおかしかったため。
別にchain _がおかしかったわけではなかった。

・2009/9/5完了、たださらにintensiveなtestが必要
resetProperty()（と、setProperty()）で、default flagを考慮したundo/redo実装をする

----------
2009/9/5

PDB, MolCoord関連、alternative conformationを認識されるようにした。
→もっと効率的な実装にしたほうが良いが、一応は動く

・SelCommandのtoString()を、SelNodesから構築するのではなく
compile時の文字列をそのまま返すようにした。

●完了
selectionで、around, byresの実装を復活

----------
2009/9/21

・完了
TraceRendererでhitTest()すると、固まらないように

TopoDBで、cuemol1ではあったaliasが実装

TopoDBで、cuemol1ではあったstatic residue propertyが実装

----------
2009/9/23

完了：BallStickRenderer
完了：AnIsoURenderer
完了：CPKRenderer

SplineCoeffSetなど？で、segment iteration codeがMainChainRendererと
かぶっているので、共通にしたい
（↑selectionに関係なく全体のsegmentを作る必要があるのでMainChainRendererと
共用はできない。）

↓完了
SplineCoeffでSpline補間の媒介変数tに残基番号を使用しているが、
insertion codeがある場合におかしくなるので、
残基番号とは関係がない単調増加する整数を使用する必要がある。
（ResidIndex --> tのテーブルが必要となる）

----------
2009/9/27

完了：
selectionで、altconfを指定できるように (name CG and alt B など)
selectionで、名前に関してnullの記述を導入，alt null,Aで主要なconformationを選べる．(chainは未)
selectionで，hierarchical (A,B.1:100.C,N,O,CA)形式を，andでなく独自のノードとして実装
A.123.CG:A形式は，あまり実用性がないと思われるので，保留
selectionで，aliasを定義して，使用できるように．
aliasは，システム固定のものと，各シーンで定義するものに分けられるようにする．(StyleMgrでStrDataとして実装・名前付きパレット色と同じ感じ)
→カスタム化可能な形で，proteinやhydrogenという表記が可能になる．
aliasのresolveは，selection評価時にしか行われない（compile時はidentifierとしてOKならエラーはでない）
→colorと違い，scope contextの問題は発生しない（常にapplyするobj(->scene)が分かるので）

・完了
アンダースコア_表記をやめて，chainもnullで選択できるようにすべき
→内部的には_になっているが，null ('')でも選択できるようにした．

・完了
selectionで、expand (around + それ自身も含むバージョン)を実装する

○TO DO
selectionで，neighbor (bondでtopology的に1段階で到達できる範囲)を実装する

----------
2009/10/03

Tubeの実装。（未完成）

panelOverlayにおいて、visible dataのparent indexが１大きかった
結果として getParentIndexの返す値がおかしくなって、
無限ループになりフリーズ。（なぜかLinuxのみだが）
正しい値になるように修正。以下を解決
Linuxでツリーボックスのコンテキストメニューを経由してダイアログを表示した後に、
ツリーの開閉を行うとフリーズする（結構致命的）

----------
2009/11/02

・完了
Tubeの実装、キャップ。（未完成）

getPropJSON,enumに対応

一部で、Nested propertyの変更Eventを、トップレベル（レンダラー）で拿捕してinvalidateを呼び出す実装をお粉アタ。

・【注意点】
tubeのsectionのように、固定の複合プロパティーを持つ場合は、手動でsetupParentDataをctorで呼び出してやる必要がある。

デフォルト値を持つプロパティーを含むオブジェクトは、他のオブジェクトのデフォルト値としてdefault=に記述することは出来ない。（未初期化の状態でそのオブジェクトのctorが呼ばれてしまうから）
例えば、TubeRendererのTubeSectionをデフォルト値としてqifに記述することは出来ない（そういう仕様）

・一応完了？ (問題点)
XMLへのserializationにおいて、objectの型名をtype属性で指定しているが、プロパティにtypeというのがあったら衝突が起こりプロパティを正しく指定できなくなる。
概念的には、プロパティにtypeがある場合は、objectの型は固定でよい筈（typeプロパティが型を規定していると考えられる）。
deserializizationではコードで指定された型のオブジェクトを割り当てるようにする（多分ctorで行われている筈）。
★書き出しに関しては一応実装，読み込みと更なるデバッグが必要

・一応解決済み
coloringがobject(mol)を参照する必要があるので、coloringのobjectへのattach/detach操作を実装し、
現在どのobjectに対して使用されているかわかるようにする必要がある。
→init()を実装

二次構造計算
グラジエント色
FancyColoring (sel->col list)
Tubeで試す


----------
2009/11/07

・完了
Tubeの実装、Ribbonの実装（一応完了？）
PaintColoringを作成

原子or残基(MolResidue/MolAtom)-->数値マッピングobject（coloring schemeの数値版）作成．
今のところScriptingインタフェイスはなし．

JctTableのproperty実装

・完了（？）
コンテナプロパティをreadonlyにしても，含まれているプロパティが変更されていたらシリアライズするように．
（中間ノードがreadonlyでも下位ノードにwritableがある場合は，変更をチェックする）
★書き出しに関しては一応実装，読み込みと更なるデバッグが必要

・完了(11/15)
PaintColoringのserialization/deserialization

・一応解決済み
Defaultの実装で、コンテナプロパティ内のプロパティのデフォルト値は、
そのコンテナが使われるケースバイケースで変わって然るべきであるが
(例えばTubeSectionのtuber値はTubeとRibbonで異なる)現在の実装ではそれが無理である。
↑Default styleという考え方で、場合に応じた初期値が設定できるので、それで良いのではないか？

----------
2009/11/15
・変更点
入れ子propertyは，LScrObjBaseで扱うのではなく，より外側のインタフェイスscripting interface等で処理して，
set/get propertyなどの高レベルインタフェイスでもドット表記のプロパティ名が渡されないことを保証する．
任意の部分で入れ子handlingが行えるように，NestedPropHandlerというクラスを作って再利用するようにした．
（js/spidermonkyではドット表記のプロパティ名は使われないのでjsインタフェイスはhandleNestedPropは不要）

・解決済み
Tubeで，selectionが効いていない (多分ribbonも)

----------
2009/11/23

・プロパティの現時点での実装
* Set
setProperty()
フロントエンド, main実装は LScrObject
　デフォルト値フラグの管理、フラグを非デフォルト状態にする
　プロパティ変更通知イベントの発生を実装
　setPropertyImpl()を呼び出す

setPropertyImpl()
Middle-end, 実装は 各クラス毎にマクロMC_PROP_IMPL2で、
mcwgen3により精製されたコードで行われる
　単にqlib::LWrapperImpl::setPropHelper<WRAPPER>()を呼び出す

---
↓以下は非公開interfaceと考える

qlib::LWrapperImpl::setPropHelper<_Wrapper>()
Backend
　FuncMap::setProp() Backendを呼び出すFuncMapはwrapperのスーパークラス
　this->setupParentData()を呼び出し、m_thisname, m_rootuidの維持を行う

FuncMap::setProp()
Backend、resetPropとの共用部分
　funcmapから対応するfunc tupleを検索
　LVarArgsの作成(と破棄)
　func tupleに登録されている関数の実行
　（登録されているのはmcwgen3によって生成されたsetter set_[X]）

set_[X]()
Backend
　mcwgen3によって自動生成されたstaticなsetter関数

==========
* Reset (default値に戻す操作）
resetProperty() 
フロントエンド, ユーザAPIレベルのインタフェイス、LScrObjBaseで実装
　既にデフォルト状態の場合は何もしない
　非デフォルト状態の場合は、resetPropertyImpl()を呼び出す
　イベントの発生を実装

→style sheetがある場合は、このレベルでstyle値をdefaultとして扱うようにする

resetPropertyImpl()
Middle-end, インプリレベルの内部API, MC_PROP_IMPL2()マクロで各クラスにおいて実装されている
　単にLWrapperImpl::resetProp<CLASSNAME>()を呼び出すだけ（真のデフォルト用の実装）

---
↓以下は非公開interfaceと考える

LWrapperImpl::resetProp<CLASSNAME>()
このレベルの関数は真のデフォルト値に特化した実装で、style sheetにawareである必要はない
　FuncMap::hasWProp()で無かったらfalse
　FuncMap::getDefVal()でデフォルト値取得、無かったらfalse
　FuncMap::setProp()でデフォルト値に書き戻す
　parent data周りの調整を行う

==========

・resetAllProps()の実装が、非公開interfaceを使って独自に実装されているのは良くないのでは？
↑これはctorでともかくもデフォルト値に設定するためだけの内部仕様と考えて、
このままで行くことに。
→APIで全リセットが必要な場合はenumerationとresetProp()を組み合わせればよいので。
○resetAllProps()が不必要に呼ばれないように何らかの対処が必要

・スタイルシートの実装
Leafプロパティーについてのスタイルシート実装（入れ子も含めて）は一応完了
StyleSheet classの実装(スタイルシートの実装本体)
StyleSupports interfaceの実装、いまのところRendererのみがサポートする
→applyStyles()の実装がメイン
StyleScrObjectの実装
→resetProperty()の実装がメイン

・Rendererのスタイル設定についてserialization実装、一応動作確認

・Nodeプロパティー(coloringなど)の実装
LDom2Nodeからインスタンスを作成して設定する必要がある

○Style変更についてのイベント(applyStylesで発生するだろう)がまだ

○Style設定についてのUndo/Redo(applyStylesで発生するだろう)がまだ
↑style設定GUIを作るときでよい？

○Style自体の編集変更についてのeventなどが未実装
↑style編集GUIを作るときでよい（延期）

==========

2009/12
rendering用scene書き出しの実装
POV-Ray書き出しの実装

・解決済み？？
StyleMgrにcontextの概念をもうけた．
Scene::display()の開始と終了時にcontextをそのsceneのIDに設定する
その間に行ったstyle/palette等の解決はscene ID --> globalの順で行う（scene localの定義が可能になる）

・解決済み？？
Materialの概念を導入する必要性
最低限：Renderer毎に指定可能
２段階：Colorが指定できるところはできるだけmaterialも指定可能に
material name --> material params (Table)が必要, paletteに類似
material paramsは，書き出しtarget，display contextの実装毎に異なる
↑２段階相当を一応実装．colorとmaterialの概念が別々になっている．
出力rendererによってはmaterialのみで色を指定できる場合があるので問題があるかもしれない．

・一応実装
Local色を定義する場合に，既存の定義色を加工（演算）して定義できるようにした．（透明度の増減，輝度の増減など）
Local定義を読み込み中でも，Local中で既に定義されている色は参照できるようにした．
定義はファイル中で出てくる順番に行われている。
color, material以外は一様の規則で文字列データを定義できるようにした。（selection等への応用）

・実装
Scene reader/writerを作った。StreamManagerで他と同様に扱うようにした(category ID 3,4)
Sceneのreloadを行えるようにした

・実装
分子選択でマクロを使えるようにした。定義はstyle中で行うようにした。

・実装
Styleの外部ファイル定義を可能にした．書き出し時には，ファイルへの参照として書き出される．

・実装
シーン中にStyle記述が複数ある場合，後に定義された方から遡って順に参照されるようにした．
→後方で定義したスタイルで前方のものを上書きできる．

○問題点
Style以外のstylemanagerの内容を，読み込み時の情報を失わないように
書き出すのが困難．特にColorが問題．
透明度の増減，輝度の増減などmodificationを行った色について，その情報が失われている．
全てLDOM2Nodeで保持して，呼び出し時に必要なobjectに変換するなり内容を参照するようにしなければならない．

○問題点
StyleMgr書き出し時に，保持しているLDOM2Nodeのdeepコピーを作らないと，serialize後に破棄されてしまう．

○TO DO
scene内部で定義しているstyle, palette等はsceneファイルに埋め込んで書き出せるようにしたい．

・実装済み
materialを色毎ではなくrenderer毎に一括設定できた方が良い


==========

2010/01

・MacOS X buildではデフォルトでlibtoolizeがない。
glibtoolizeというのがあるのでそれを使用するようにする。

・MacOSでのbuild要件(prerequisites)
- boost-1.39以降
date_time, filesystem, iostreams, program_options, regex, system, thread
はlibraryをbuildする必要がある。
そのままbuildすると64bit binaryのみできるので、bjamで
architecture=x86 address-model=32 link=shared,static threading=multi
を指定する。
- xulrunner-sdk（とruntime）
sourceからbuildする必要はないが、sdkのみだとlibglibなどがないので
mozillaのbuild環境は入れる必要がある。
sdkのみだと、package作成時に必要なFrameworkが入っていないのでruntimeも
installする必要がある。

【2010/01/14】
・実装
GeomLineに相当するAtomIntrRendererを実装．
前バージョンの形式だとXMLによる記述が困難（scriptingが前提となってしまっている）．
XML表記を考慮して，指定した原子（選択）間に点線を引くような実装にした．
そのため，MolCoordやSelCommand, MolAtomが前提の実装となっている．（->molvisに移動）

【2010/01/16】
frameworkをxulrunner1.9.2rc1にバージョンアップした（JITの効果か，若干起動が速い？）

・実装
ScenEventにscene loaded eventを追加した。
イベントは文字列プロパティとして保存され、イベント発生時にeval()されるようになっている。
引数（イベントターゲットのobjectなど？）を使えるようにする、などの工夫が必要か？

【2010/01/19】
xtal, DensityMap, MapMeshRenderer, CCP4MapReaderの移行と動作確認，一応OK.

●解決済み
DensityMap等、非MolCoord objにでもSelectionRendererが(例外が出つつも)attachされてしまうので
されないようにする

【2010/01/23】
SSM superposeをcoot/libssm/mmdbから実装

【2010/01/24】
XULのopenPopupの出る市がおかしかったのを修正

★ イベントモデルについて
Scene, Object, Renderer, Viewがそれぞれ独自のeventを発生しうる
（それ以外にもproperty eventが発生しうる）
Object, Renderer, Viewは全てSceneに属しており、
これらで発生したeventはSceneでrerouteされる。

Sceneとそれに関連したobjects eventを全て拿捕したい場合は、Sceneのみlistenすればよい
（わざわざsceneに追加されたかどうか監視して各objectsに対してlistenする必要はない）

個々のレベルでlistenしたい場合は、対応objectsに対してのみlistenした方が効率がよい
（SelectionRendererがMolCoordの選択変化に応じて表示を変更する等、renderer<->object
連携はこちらの方が効率的）

【2010/03/06】
・実装
object読み込みをloadObject()を廃止して，reader作成→object attach→read→破棄
の順でscriptから行うようにした．
→Readerのoptionがscriptから設定可能になった

・実装
Readerのoptionの違いによりsceneのdeserializationが変わってきてしまうので，
objectにReaderのoptionを保持させて，serialization時に
roptsというタグをもうけて，Readerのoptionを保存するようにした．
Readerのoptionは，source, srctype属性と同等の物である．

・実装
StreamManager.createHandler()にnicknameだけでなくカテゴリーIDを指定するようにした．

【2010/03/14】
・実装
surface module作成
gfx::Mesh作成
MolSurfObj, MSMSFileReader, MolSurfRenderer作成
ElePotMap, OpenDXPotReader作成

【2010/07/10】
・実装
mcwrapgen3.plを，Perl moduleで実装する．（ファイル分割が可能に）
mcwrapgen3.plで，JavaScript wrapperを自動生成するようにする（jsモードの追加）
→依存関係のトレースがややこしくなっている．wrapper jsが無くても自動的にmcwrapgen3.plが実行されないため，再度ビルドが必要になる．
→XPCOMのインターフェイスでjsapiを扱えるようなので，そちらにシフトすることも考える？

・Callback登録関数(object<LScrCallBack$>を引数とし，登録整数IDを返却するmethod)は，callback object１つのみを引数に取り，整数値を返す(invokeWithCallback1で呼び出す)，それ以外は不可
(ただ，invokeWithCallbackNで，第２引数以降は任意，というのもありかもしれないが，今のところ用途がないので実装していない)

【2010/08/25】
・実装
OpenGL関係をnspluginに依存しないように設計できるかトライ（キーボードイベントやマウスカーソルなどで不都合があった）
→一応OSX Cocoaで実装，Win, gdkともに可能っぽい
XPCOM native widget, Win初期実装完了
tabmolviewの，XBL中のコードをtabmolview.jsに移した

・メモリリーク問題：一応解決？
Sceneのscriptによるevent listener, 特にObjPanelが終了時の条件でremoveされないことが分かった．ObjPanel.fini()が呼び出された時には既にsceneがorphan状態(SceneManagerには所属しないが，何かしらによって参照されているため破棄されてない状況)になっている．→一時的な対応策として，Sceneのdtorで残ってしまったscript callback objはdeleteするようにした．

ScrEventManagerを導入することで以下の問題は解決しているはず（cuemol native objectがscriptを直接参照していることはないはず・全ての呼び出しは，event managerのslotを経由する＆slotはJSのGCの管理範疇である）：
orphan状態のobjectが誤ってeventを発生させた場合に，破棄されたscriptを参照して落ちる可能性をはらんでいる．ObjPanelによってremoveListenerを正常に呼び出すように改善すべきではある．

★DOM Inspectorを組み込んだ．CVSにはdom inspectorが入っていないので，chrome/inspector.jarを手動で配置しなければならない．

★Jetpack SDKを使用するようにした．
CVSにはjetpackが入っていないので，手動でresources以下に入れる必要がある．
resources/harness.js
resources/jetpack-core-lib/*.js
以上のファイルは，jetpack SDK distributionからそのままコピーする．それ以外のcuemol2特異的なファイルはCVSに入れた．
harness.jsは
/jetpack-sdk-X.XX/python-lib/cuddlefish/app-extension/components/harness.js
をコピーすること．他にも同名のファイルがあるが，それでは動作しない．
現在Jetpack SDKは0.7でないと動作しない．(0.8から結構大幅な変更があるためjpk_hns.js？の変更が必要)


【2010/08/28】
・実装
sidepanelとmanagerを実装．closeとcollapseを実装．

●解決済み
パネルのdrag and dropの実装が中途半端．hiddenのpanelがあるとバグる．
以前のsaved dataから新規パネルが追加された時に，
そのパネルがrestoreDefaultを実行するまで非表示かつonLoadが呼ばれない状態になる．

済：メニューからのshow/hide
済：パネル位置等のpersistency

修正済み：問題点
treeの内容がsidepanelを移動すると消えてしまう．
DOMイベントハンドラーによっては，ハンドラーの指定方法によってDOM階層をいじるとおかしくなる現象が見られたので
（特にpanelbarのbuttonで発生，修正済み）関係があるかもしれない．

いちおう実装済み：treeの実装をMVCに基づいて容易にするようなクラスが必要．

object-menulistを実装
フィルターを指定して，objectを選択するdrop-down list box，汎用的に使用可能なような物を目指す．

symm moduleを実装
symm-panelを実装
MolCoord, DensityMapについてはセル長などが表示できるが，未だ未実装な機能が多い

●完了
change/edit symm info (+dialog)
show unitcell renderer
show symm renderer

【2010/09/11】
・実装
Scriptからのevent使用方法を若干変更した．
各listenerが各々XPCOM object(qIScrCallBack)を作って，nativeから直接呼び出すようにしていたのをやめて，
大元のevent managerのみqIScrCallBackを使用して，jsのevent manager <--> qsys::ScrEventManagerが
通信(?)するようにした．script側のcallback obj (object or function)をnativeが保持するのではなく，
js event manager (jetpack moduleを使用してsingleton実装)が保持するようにした．
この方が，objectの寿命の問題などを回避しやすい．

qsys::ScrEventManagerで，event filterの機能を実装した．
指定した組み合わせのみ，該当のscript handlerが呼ばれるようになるため，
不必要にscript/nativeの境界を行き来する必要がなくなる．
実際にfilterに一致した場合のみLEventがjson文字列を返し，
それがevent manaterでobjectに変換されて，listenerに渡されるようにした．
いちおうJSONの生成と，parseは必要時のみによくせいされるはずである．

object-menulistは対応

完了：
workspace-panelを対応させる

★DOM Inspectorの組み込み
・inspector.jarをchromeに配置
・defaultsにもjsを配置
・componentsにもjsを配置
この二つを忘れると，flasherが動かない＋XBLが展開できない

【2010/09/15】
・densitymap-panelを追加
実装はまだまだ不完全

・JS wrapperを，Cu.import()を使って行うように変更した．
・getClassObj()が返すmetaclass（の名前）と，wrapper JSが対応していないと
wrapperがload出来ない（希望としてはsuperclassのwrapperを読み込んでほしい）という
不具合があったが，LScriptable::getScrClassObj()というinterfaceを追加して何とか対応した．
・上記を除いては，一応大きな問題はないように見える．

・ScrEventManagerで，event target typeの指定を，値指定でなく，ビットマスク指定にして，
object+rendererをlistenする，というような組合せ指定が可能になった．


・sidepanelの，open/close menu, session save/loadを実装

・treeviewのopen/collapsed stateの保存を実装
・workspace panelの表示非表示buttonを実装

・molstruct panelの初期実装

【2010/09/20】
jarファイル化を試みる．mozillaのmake-jars.plを使用
zip圧縮プログラムが必要．pathが通った所に，zip.exe (mozilla build toolsのinfo-zip付属)を置いて使用する．

実装
・windows QSC documentまわりの整備，installerでの関連づけ
・documentアイコン作成
・起動時のコマンドライン引数でqscファイルを指定して起動すると，読み込むように
・第2インスタンスを起動した場合に，コマンドライン引数指定があった場合も(qscなら)読み込み対応

・sceneのmodified flagを(undo/redoが正しく実装されている限りは)正しい値を返すようにした(単にundo size>0-->modified)
・sceneのsave, open, saveas, reload周りを正しく動作するように実装した

・CameraEvent周りの実装
・workspace panelでcameraを扱えるようにした（不完全）

・paint-panelの実装
・NamedColorが，様々な場面で参照されるため，NamedColor自体にScene IDを持たせるようにした．
→そうしないと(特にsceneと関連が弱い)GUI JSからcolor codeが参照された場合に，色が決められなくなる
逆に，NamedColorをsceneをまたがってコピーすることはあまりないと考えられる．（GUIで出来ないように制限する）
・NamedColorが生成する時に，SceneIDが分かっている必要がある．
・NamedColorは殆ど（全て）fromStringS()で生成している．（文字列からのproperty暗黙変換）

★重要：
色のfromStringS()変換が起こりうる場面で，全てStyleMgr::push/set ContextIDで現在シーンのIDをセットするようにする必要がある．
今のところはSceneXMLReaderが最も重要な場面であるが，
★GUI実装でも，暗黙変換が生じうる，color propertyを設定する場面では，全てpush contextをしておく必要がある．

・解決済み
以下は、
StyleMgr::push/set ContextIDを実装し、
積極的にStyleMgrにcontextを設定することで解決。
Scene::display()外でcolorやmaterialの参照解決を行うと，local定義が参照できないという問題が起りうる．
いまのところそういうコードはないので問題は起きていないように見えるが．．．
（Styleに関しては，解決時にscope IDを指定する必要があるので問題は起らない）


【2010/09/26】
・paint-panelの実装
remove entryを実装した.
changeのundo/redoを実装した.
addのundo/redoを実装した.

・PaintColoringの実装
removeのundo/redoを実装した.
changeのundo/redoを実装した.
addのundo/redoを実装した.

・その他
XML書き出して，attribute内の&等を実体参照に変換するようにした（これをやらないと選択文を書き出せない）

○TO DO:
・paint entryの順序を変更するボタン

【2010/10/13】
実装
・scene fileから読み込んだ直後に，molstruct panelに読み込んだ分子が表示されない（タブview切り替えをやると表示されるようになる）のを解決
→Deserialization中は、基本的にeventを発生しないようにした（SceneManagerから切り離された状態で構築される）
→生成後に、ONLOADED (DESERIALIZEDに変換される) eventが発生し、そのタイミングでUIを更新する
→ObjectMenuListがdeserialized eventを拿捕し、（実際はすでに選択されている項目ではあるが）DOM select eventを発生させる
→ObjectMenuListの変更によりコンテンツを再構築するUIはこれで自動的に更新される。
他のUIでは、deserializedを拿捕して各自再構築する必要がある

実装
・Deserialization中に、styleがsetされたときに、StyleSheet::applySetが呼ばれていたが、
その時点ではまだrendererがsceneに関連付けられていないため、正しくstyleが解決できないという問題があったが、
Deserialization中はstyle namesのみを設定して(setStyleNames())、
onLoaded eventにおいて、全てのstyleを一度にapply (applyStyles())するように変更した。

●解決：バグ?
MacOSXで，jsbr::init()が正常に呼ばれるようにした。
原因は、異なるdylibに対して、static libraryであるjsbrが別々にリンクされていて、
見かけ上同じでも、異なるコードのインスタンスに対して呼び出しが行われていた。
→jsbrをdylibにすることで解決

●実装
・colpickerをXBLにした。（全てのcolpicker要素にpanelがあるようになるが、実際使われるのは１つだけなので、無駄が多い実装である）
・colpickerでnamed color listを実装した
・colpickerでcolor paletteを実装した
・paint-panelで、CPKColoringの時はpropertyを変更できるようなUIにした。
textboxが変わった時と、popup-panelが閉じたときにproperty変更が起こるようにした。
（slider等に連動して変化させるとUNDO情報が膨大になりすぎるので）

●実装
・tabmolviewで、active tabの左側にあるnon-activeなtabがclose buttonで閉じられたときに、
molviewの方が正しく表示されなかったのを修正した。
・RendererがstyleApplyをするためにonLoaded eventを受けるようにしたが、sceneが手動で通常作られた場合は
onLoadedが発生しないため、removeListenerをしそこなっていたので、dtorでremoveListenerするようにした。
実際はこれ以外に用途がないため手動作成の場合はそもそもlistenする必要はないので、
本来なら、deserialization時のみaddListenerするような実装にしたほうがよい。

●実装
・font listを作成するinterfaceを実装したものが、
chrome://mozapps/content/preferences/fontbuilder.js
にあることが分かった。これを再利用して予備的なconfig dialogを作成して、既定のラベルfont等を設定できるようにした。
defaultは、styleとして扱うようにした。
styleset中のstyleにidをつけて参照できるようにし、特定のstyleのみ参照・書き換えできるようにした。
styleの実態はLDom2Nodeであるため、値の取得・設定はすべて文字列である。
（applyStyleが、fromString()などを使って、apply targetに依存した型に変換される）

→global styleset (ctxt==0)中の、style id="user"のもののみ、
起動時にuser profile(の中のuser_styles.xml)から読み込み、終了時に同じファイルに書き出すようにした。

一方で、style id="system"のものはapplication/data directoryのdefault_styles.xmlから読まれ、
これは変更はできない。（permissionがないためふつうは書き込めないから）

○TO DO:
labelのdefault font選択以外にも、よりちゃんとしたdefaultを設定するpreference dialogを作る
firefoxのようにprefdialogなどが使用できるはず。

2010/10/22
●実装
event casterまわりで、remove()などがunlockされずにreturnする場合があり、
終了時に（再現性が悪いが）assertion failedになっていたので、
きちんとlock/unlockされるように修正した。
（今のところ直ったように見えるが、様子見が必要）

●実装
povray rendering dialogを作成。
windowsではmegapovを使用して即座renderingができるようにした。

●実装
File open時のrenderer作成dialogと、New renderer時のrenderer作成dialogが
別々の実装のコピーになってたので、統一。

2010/10/31
●実装
Object save as dialogと、objectの書き出しを実装。

一応config-dialogで、言語を切り替えられるようにした。
config-dialogで、文字のitalic, boldも設定できるようにした。

2010/11/3
●実装
styleの実装をcascadingになるようにした。
下流では、必要部分だけoverwriteして定義できるはず。
<style>中の定義も見つつ、上流の定義までさかのぼって定義を探すようなコードに。
→config editorでのstylesheet accessと、applyStyle()でのアクセスを統合。
stylesheet関連はgfx/StyleMgrStyleImpl.cppに移した。

●実装
selectionの、around, expandを実装。
selection cache managerを実装。
cache ID以外に、selectionの文字列表現からcacheを検索できるようにした。

●実装
rendererでは、resetAllProps()はObject::createRenderer()で行うようにした。
これは、ctorより後に呼ばれるため、ctorで初期値の変更ができない。
（というか、今までの実相が、変更したとしても、初期値でない値で初期化しているという、
おかしな状況になっていた。）
インスタンスや派生クラスで初期値を変えたい場合は、
スタイルを利用するようにすればよい。（styleはdefault値を変えていることに相当するため）

●実装
・paint-panelで、targetが無くなった時に無効なcoloringに対するpanelに切り替えるように

○TO DO:
SelCacheMgrで、molが変更されたときに、関連するcache dataを無効化する必要があるが実装されていない

●実装
BfacColoring
paint-panelでcoloringを切り替えられるようにした。

2010/11/24
●実装(MacOS X)
XPCNativeWidgetCocoa/NSOglMolViewの実装で，mouse eventがXUL windowに転送されないためDOMEventが
発生しなかった．一方，転送すると，XULのnsChildViewの実装のせいでmouseMovedに限り無限再帰に
陥ってしまうという問題があった．
mouseMovedを何もしないmethodで実装しないと，defaultのviewの実装（nextResponderにeventを伝搬）が
呼ばれて，同様の症状がおこり，フリーズやbus errorを引き起こしていたものこれが原因．
今回，NSView::hitTest() methodをうまく実装してやることで無限再帰が回避できる事がわかった．
ただし，これはnsChildView::mouseMovedの実装に大きく依存しているため，
将来のXULの変更によって正しく動かなくなることが十分考えられる他め，要注意．
それ以外のmouse eventについては，単にnextResponderに伝搬してやる（あるいはdefaultの実装がその
ようなばあいは，superのメソッドに伝搬でも良い）だけでよいようだ．

2010/12/24
××廃止済み：実装
Serialization関連
NamedColorに関して、文字可換型以外（構造型式；タグを使用して、material, mod_hなどを指定）も、
指定可能にした。ただし、要デバッグ。
→　LDOM2Nodeについて、一部規定外の動作を行わせるようにせざるを得なくなっている。
（規定：value属性がある場合は、文字可換型でchild nodesはない。構造型式の場合は、
type属性でobjectの型を指定して、構築するobjectを指定する）
色については、構造型式でもvalue属性があれば、構築するべき型はvalueからわかり、
それによって構築されるので、typeを指定してはいけない。

●実装
Rendererに、material, alphaを指定して、materialと透明値のデフォルトを指定できるようにした。
ただ、alphaに関しては、内包する色情報にすべて、alphaが
乗算されるようになっているので、default値というわけではない。

2010/12/25
●実装
Colorに関して、（特にNamedColor）値の上書き変更が必要な場合が多いので
修正式を導入して対応するようにした。色の後ろに、CSSのような括弧式で色のpropertyを指定できるようにした。
ついでに、rgb()などの表現もparserによって解析するようにした。
（★上記のcolorタグの構造式化は廃止、色については、isStrConv()は常にtrueを返し、
toString()/fromString()でserializationできる状態を保った）

●Debug
PaintPropDialogのMolSelListで、現在の選択(mOrigSel)が正しく渡されていなかったので修正。

2010/12/26
●実装
mcwrapgenで、array型を実装した。arrayは、intrinsic型として扱う。
script wrapperでは、それぞれのinterpreterでのintrinsicなarrayへと変換する。
（qlibのarray(LVarArray)型へのインターフェイスを与えるわけではない）

●実装
XPCObjWrapperでの、LVar2NSVarで、array変換を実装した。

●実装
xulrunnerをlinkしている場合は、独自のjs code (1.7相当)を使わないで、
xulrunner側のjs codeを使うようにする。(1.9.2では、1.8.1相当かつnanojit使用）
（→UNIX CLI版では、内部のjsを使うようにする？）
＊↑こうしないと、UNIXタイプのOSでは内部jsと外部jsのシンボルがぶつかってしまい、
どうも内部jsがちゃんと起動できないっぽい。

●実装
Internal JS用の、script callbackを作成したが、
保持しているfunction objやcontextのメモリ管理がまったくなされていないので、
今のままでは使い物にならない（落ちる）

2010/12/30
●実装
JSCallBackObjのcontext, funcobjのメモリ管理
contextに関しては、weak reference的なものにする
メインのcontextが破壊されていたら、呼び出しは失敗するようにする（falseを返す）
funcobjに関しては、GC対象にならないように、runtimeに知らせるようにする

●実装
Application updateを実装した。(cuemol2.js)
起動後、ある程度放置するとアップデートチェックが作動(idleAutoUpdateCheck())（メニューから手動でも可能）
www.cuemol.org (実体はsourceforge.jp)にあるphp scriptにrequestを送り、
対応するOS用の最新版があれば、download siteに誘導するようにしている。
セキュリティーの問題などがあるので、勝手にダウンロードはしない。

2011/1/3
●実装
Native code用のEventに関して。
基本的に、View, Scene, Renderer, Objectは直接Eventを発生しないようにする。
ScrEventManagerにNative eventに対するサポートを実装し、ScrEventManagerを経由して
Eventが伝搬するようにする。

●実装
MapMeshRendererのauto updateがちゃんと動くようにした。

●実装
・Cameraのproperty dialogはgeneric prop editorで実装済み
・Camera作成時に名前を指定できるように(prompt serviceを使用した簡易なもの)


●実装
symm palette UIの実装
UnitCellRendererの実装

○TO DO:
全てのrendererのinterfaceとして、getCenter / center propertyがあるのはおかしいのではないか。

○TO DO:
molsel paletteで，!演算子が使えないので使えた方が便利

2011/1/23
●実装
context menuで選択の反転を実装
context menuで，水素というのを実装

2011/1/27
●実装
selectionの，byres演算子を高速化。
単に、１回目の評価の時に、mol中全residueを調べて、cacheを構築
⇒二回目以降はキャッシュを用いる。
簡単なチェックでは、正しく動いてそうに見える。速度も改善。

mol selection commandで、byresid以外に、bymainch, bysidechを作成
→残基の種類に応じて、（見た目から）正しい側鎖のみ選択されるように。特にProlineの例外処理。
（xxx & !name C,N,Oでは、Proがリング状に表示されないので）
実装は、byresidと同様に。

2011/2/3
●実装
toolbaのicon追加
toolbarに、undo/redoを追加、popupmenuで、複数段階一挙にundo/redoできるようにした

●実装
rectangle selectionでのhittest parsingの結果の返し方を改めた。
特にRectSelなどのために、sel (選択文字列)を直接返すようにした。
→選択の最適化などがC++側で可能になる
複数選択されているときaidの配列を返すのをやめた
→高速化（もともと使用用途が無いうえに、データを膨大にするだけだったので。）

2011/2/4
●実装
核酸などの、sidech, mainch定義 for bymainch, bysidech演算子

●実装
Asterなど特殊文字やキーワードを記述したい場合は、singleあるいはdouble quotationで囲むようにした。

分子の選択文でで，resname *やresid  *等のワイルドカードが効かないが、
こういう式が記述できたとしても意味がないので実装しないことにした。（→asteriskはエラーになる）

●selection中の参照項の解決：
一次参照はコンパイル時に定義があるかどうかのみ確認
（さらに深い検証は、parserがreentrantでないため今の実装では無理）
→参照が見つからないと、コンパイルエラーになるようにした。

●解決済み
QSCファイル中のパス名のパス区切り文字問題。
絶対パスを使った場合は、どっちみち非互換になってしまうので\で書き出す
相対パスの場合は、すべてのプラットフォームで読める可能性を維持するために、Winでも/を使うようにする(Utils.cppのmakeRelativePath()で相対化しているのでそこでついでに書き換え)。

●実装
選択文法：aroundを拡張し、他の分子を[]表記で名前指定して、その周囲を選択できるようにした。
ただし、[]内でも.や:は使えないので、名前に制御文字が含まれる場合は""で囲む必要がある。

●実装
config dialogをprefpaneを使うようにした。
shortcut managetを実装。
key bindingの設定機能を追加した。

○TO DO:
使いそうなshortcut methodsをすべて実装する。
shortcut methodsへの引数をとれるようにする→移動量を変化など。（ただし、idをどうするかという問題が厄介）

●修正済み
MacOSXで、prefpaneのOK/Cancelボタンが表示されない。
MiscConfigのFontMenu等が構築されない(初期化がちゃんと行われていない)。
Dialogのサイズなども若干問題。

●修正済み
・QSCファイルで、他ファイルへの参照が現実装ではすべて相対パス指定になるようになっているが、
これが直観に反する場面もある。絶対パスの方が分かりやすいケースもある。
→altsrcというattrを実装・両者とも記録しておき、見つからない場合はもう一方を参照するように．
現在の実装：
scene XMLファイル保存時に，source pathを，base URL (qsc fileがあるディレクトリ）相対にするように変換。
一方で，altsrcに絶対パスも保存．srcがリンク切れになった場合は，altsrcから読むことを試みる．

○TO DO(問題点):
・リンク切れが検出された場合、現実装では読み込みに失敗するが、
リンク切れエラーハンドラー（スクリプト）を指定できるようにして、
ユーザにリンクを再設定させてエラーを回避するようなUIを実装したい。

○問題点/TODO:
副ストリームのパス名はどうなっているのか→UIから読み込んだものは，すべて絶対パスで格納されている(UIが絶対パスで扱うため)．
src attr同様，相対・絶対の問題も同様に起こる．
srcは相対化し，altsrcに絶対パスを保存するように実装しなければならない．

○TO DO
selectionで、insertion codeを指定できるようにすべき (A.123B.CA, resid 123B など)
現実装では、数値部分しか見ていないので123と指定すると、A, B, C, ...すべて選択される。
逆に、residue 123Aのみ選択する術がない。
→Range classを順序のある型なら何でも使用できるcontainerにしたとしても、
123Zと124を融合していいのかどうか判断ができない、という問題がある（Zで終わっている保証がない）
一応、123<123Aらしい（123と123Aは別物として判断しなければならない）

2011/2/10
●実装
sidepanelの実装で、パネルのshow/hide/moveのときに対応するevent methodが呼ばれるようにした。
PaintPanelのcolorpickerがpanel show/hide/move後に正常に動作しなくなる問題点を修正
（→onPanelShow, onPanelMoveで再初期化を行うことで対処）

sidepanelの実装、panel (_data側)にhidden, paldef (_defs側)にshown、２つの類似したフラグがある。
_defs側はJavaScriptコード側から直接アクセスできるのでshownフラグを設けた。
hiddenとshownは値が微妙に違うケースがある。
hiddenは指定した値を格納しているが、shownは実際のwidgetの状態を表した状況値である。
(→初期化時など、hidden=falseであっても、shown=falseとなっている場合がある)

sidepanelの実装で、1つめのパネルが表示されるときに、不要なsplitterが追加され、
後々まで残ってしまうのを修正した。

collapse/expand buttonの属性stateが、drag insertion markerのstateとかぶっていて、
予期せぬ現象が起こっていたため、前者の方をpanelstateに変更して、panelstate=collapsedの場合に
expand buttonを表示するようにした。

●修正済み
sidepanelに、依然、movePanelを行うとdataとwidgetの不整合が起きるバグがある。

●実装
（個々はまだないが）一応prefpane iconをすべて歯車に設定した

11/2/14
●修正済み
SymmRendererのhittestが新実装に対応していなかったのを修正

●実装
objmenulistで、内容が長くなると...が表示されて省略されてしまい
何が実際にあるのかよくわからなくなってしまう問題があったが、
（特にpaint, density mapのrenderer選択listで）
tooltiptextで省略なしの名前が表示されるようにした。

11/2/19
●実装
molsellistで、all(*)のタイプのitemを選択しても、
menupopupの方に記憶されない（次回popupを表示したときに無選択に戻ってしまう）のを修正。
（menuitemとtexteditで文字列が一致していなかったため。menulistにdisableautoselect="true"を入れると解決）

workspace panelのcontextmenuのpaintに色が出るようにした。
paint coloringでないときに、paint menuを隠すようにした。

selectionのhistoryを実装し、molsellistに表示されるようにした。
historyはすべてjs/xul側で実装されており、app globalなリストで、
jetpack simple-storgageを使用してserialize/deserializeされている。


●修正済み
POVray書き出しで，FogがOGL表示と結構違ってしまっているのを改善できないか．

●実装
HW stereo検出機構がちゃんと動かなかったので、動くように変更。
NativeWidget reloading (reload())でwindow sizeがおかしくなっていたのを修正。

POVray renderingで、ortho/perspec, clipping plane(不正確なので使い物にならないが)を指定できるように。

POVray renderingで、close, 再rendering時などにtmp image fileがちゃんと消されず残ってしまうバグがあったので修正。

●修正済
シーンを保存した後に，scene panelのscene nameの後の括弧内が空になる（型が正しく検出できていないっぽい）
Generic prop editorでSelection型の値の変更ができない．
ball&stick, thicknessを変更しても描画が更新されない（propchange handlerの未実装？）

●実装
Scene panelのtree背景を縞に

●修正済
全パネルを閉じて，サイドパネルがcollapseになっている状態で，
restore default panelsを実行してもサイドパネルが戻らない．

●修正済
IleのCD原子がちゃんとつながって表示されない場合がある．
(小文字のcdという原子名はなんなのか？)
↑PDBFileReader中のhard codingのatom name変換コードに"cd"という記述があったため．修正．

○バグ
distpickerのmarkが出なくなることがある

○問題点
ラベル(NameLabelなど)に対して，depth queuing(Fog)が効かない．
ATI Radeon特有の問題らしい．(GeForceでは起こらない)
CueMol1やCootでも同様にFogが効かない．原因は不明，OpenGLの実装に問題があるのか？

●実装
AAなしの文字表示optionを実装した，

○問題点
しかし1bit depth bitmapのメモリ管理実装がおかしい（destructorで落ちる）

●修正済
SSM/LSQ superposeで失敗したときに（コンソールにエラーは出るが）エラーメッセージボックスが出ない
→一応出るようにしたが，message boxの内容だけからはどういうエラーかはわからないという問題がある．
→cuemol.getErrMsg()でC++で投げたexceptionのmessageが取れるようにした．一応エラーの原因が表示されるように．

【2011/3/10】
●実装
C++のexceptionのエラーメッセージがjs側に伝達されないという問題があった．
XPCOMでエラーメッセージをjs exceptionに格納する方法が分からなかったので，
ともかくもerrno的にXPCCueMolにgetErrMsgを実装した．
→一応alert dialogにエラー内容を表示できるようになった．

●実装
clearAllData()で初期化しても何もeventが発生しないため，UIが更新されなかった．
SEM_CHANGEDが発生するようにし，XUL UI側でも対応して更新するようにした．
SEM_DESERIALIZEDは廃止し，SEM_CHANGEDに統合した（args.method名で判別できるようにした）

----------
●一部完了：TopoDBの実装改良
TopoDBの位置づけ
・基本的に変更（特に削除）は起こらないものとする
・残基トポロジの追加は起こりうる（リガンドの自動生成）
・Qscファイルにはbondなどの一部の情報は保存しない．(今の実装はPDB)
・読み込み時に再度applyTopoDBを行う→topoDBの影響には再読み込みが必要に．
・bond, linkageはapplyTopoDBにより決定
・basepair, secondary: qscに残るが，applyにより上書きできる
○現在の実装ではqscに残すことができない．なんとかする必要がある．
・applyする範囲（残基名？）を限定できる→更新した残基のみにapply
・vdwradius, chargeはMolAtomには属さない．ParamDBの方に値があって，
必要時にMolAtom/Residueの情報を用いて解決するようにする(XYZRFileWriterなど)

●完了
基本DB：独自XML表記
protein, nucleicacid, sugar, ligandを別々のXMLふぁいるで定義
parameterも別のXMLファイルで定義
coot/ccp4のmmcif dataから，aminoacid, nucleicacid, sugarなどmacromoleculeに重要な
componentsのみを持ってくる→XML表記に変換
cuemol2独自のpropertyを手動追加(ringなど表示に特化したもの)
→VdW radius, partial chargeが定義できる(ener_lib.cif, H付もあり)
partial chargeは，Hがない場合はheavy atomに足し合わせるコードが必要
→synonym (alias)の定義，残基名だけでなく原子名も(PDBFileReaderでのhard codingを減らす)
linkage REFMAC形式に適したようにTopoDB実装も変更する
[comp(=resid name), mod, group(=polymer type)による選択形式]

○予定:TopoDB追加（１）
XML形式の(主にcuemol2独自property)定義を読み込めるようにする．
→ringやresidue linkageに影響する

・シーンに対して読み込まれているtopodata
→他のシーンには干渉しないように名前空間を設定する必要があるが，，，
・ユーザ設定に対して読み込まれているtopodata
→簡便のため実装しない

ener_lib.cifに対応するマスターデーターはランタイムでは変更できない
XMLの各エントリーにenerを参照する記法と，直接指定する記法が可能→chargeなど上書き指定

○予定:TopoDB追加（２）
mmCIFで追加できるようにする．MMDBを使って実装．
→prodrgやphenixで作ったものを読み込めるように
（ただし，表示に関してのみならmmCIFを読み込むまでもないので，実装優先度は最低）

○XML/refmac cifともに読み込んだときに，全体に対してapplyするか，
関連残基のみに対してapplyするかを指定できるようにする必要がある．


○問題点
secondary structureがqscに保存されていない
（二次構造を再計算することで見かけ上問題ないようになっている）
→二次構造を編集する機能を実装するうえでも問題．

○関連TODO
SS結合を自動生成できるようにする

○関連TODO
塩基対を自動生成できるようにする

----------

●実装
ImgSceneExporter, OglFBOViewを実装．
platform independentなglextのFBOを使用（実装されていないと使えないが，いまどきほぼ実装されている？）
libpngを使用したPNG形式書き出しを実装．
CueMol1と異なりantialiasingは使えないが，一方でDPI, alpha channelを使えるようにした．
XUL UIを実装．

●実装
PDBFileWriterで，symmetryの情報がcryst1 recordに書き出されるようにした．

●解決すみ
Distance pickingで，1st atomがpickされたことがわかりにくい．
白色マークが表示される以外にも，Status barにどの原子がpickされたか表示するのと，
2nd atomがpickされたあとも，(Logwindow以外にも)距離などが表示されるようにしたい．

●解決すみ
Measure toolについて，現在では，molecule中の先頭のatomintr rendererが選ばれて
それに距離定義が追加されるようになっているが，追加するrenderer名を指定できるようにする．

●実装
Atomintr rendererの設定について，generic dialogによる設定しか実装されていないが，
distance definition等を編集するためのUIを作成する必要がある
ダイアログにする．
Atomintr一つだけを対象にするのではなく，同じ分子に接続しているすべてのatomintrを対象にする
→階層的にtree viewで表示し，編集する，主に削除

●実装
Angle, torsion pickingでLogwindowに詳細な情報が表示されるように
pickに関しても，distance同様にstatus barにも情報を表示

●解決すみ
intr editorで削除できない項目ができてしまう

●実装
nucleic acidのxml ffを作成，tRNAPheで確認

●実装
出現頻度が高いsugarのxml ffを作成，直鎖に関してはglycosidic bondができることを確認．

●実装
nucleic acidのprimeとasterの変換問題
PDBの標準に合わせる（prime使用，OP1, OP2使用）
XML topparでも，(もとのrefmacのcifから変更して)asterをすべてprimeにした
synonymでasterも認識できるようにする
synonymでO1P,O2Pも認識できるようにする

●実装
PDB形式のSSBONDレコードを解釈するようにする
PDB形式のSSBONDレコードを書き出すようにする

●実装ずみ
AtomIntrList edit dialog
→Tree view中でのdrag dropでatomintr間のitem移動を可能にする

●解決済み：array propertyは廃止（現在必要性がないため）
mcwrapgen3で，array型propertyを返すようなjs wrapperが適切にarray objをwrapping出来ていない．
→JS Array objを作成し，各要素すべてにwrapperを生成して格納する
コピーコードを実装しなければならない（効率が悪い，非現実的か？）

●解決済み：2.0以降では動作
MacOS Xでxulrunnerを1.9.2.16 (1.9.2.13以降?)にすると動作しない．
xptファイルがあるだけで動かなくなるので，xpcom関連でおかしくなっている可能性がある．
→1.9.2.13でも問題はないので，対処は先送りにする

●実装ずみ：PDBのLINK/SSBONDレコードとして保持
QSCファイルで共有結合情報の追加表記を可能にする
→追加bond情報は，object dataとして保存する．PDB形式ならLINK/SSBONDレコードで表現可能．
共有結合情報の手動追加・削除のUIを考える．→実装

●実装
糖たんぱくのGlycosidic bond,直鎖に関しては自動生成可能になった

2011/4/1

●実装
QSC-embedded object用のQdfAbsWriter/Readerの実装

●実装
QdfSurfWriter/Readerの実装
→生成したsurfaceのqscへの埋め込みが可能になる

●実装
MSMSを使ったsurface calculation UIの実装

●解決すみ(?)
QSC用chunk delimiter filter streamの実装で，バイナリデータが化ける問題があった．
boost::circular_bufferを用いて実装しなおす(ChunkDelimFilter.hpp)
今のところ問題なく動いているが，今後さらなるテストが必要．

2011/4/2
●実装
paint-panelにelectrostatic potential用のUIを実装した

MolSurfRendererのターゲットの仕様を変更．targetはMolCoord専用で，
elepotというpotentialmap専用のターゲットを別に作成した．
→UIでmol->elepot->molという変更をしても元のターゲット情報を維持できる

APBSのマニュアルに基づき，SAS上のelectrostatic potentialでSESに着色するoptionを実装した

●実装
PDB形式のLINKレコードを解釈するようにする
PDB形式のLINKレコードを書き出すようにする

○TODO
POVRay書き出し・clipping plane
coneで非ユニタリ変換matrixつきのは困難(anisouで使用；主軸方向に拡大縮小がある)

●実装
POVRay書き出しなどで，clipping plane (最低限，手前slab）
line, sphere, cylinder, coneのclipping実装．(matrixなしの場合のみ)

●実装
POVRay書き出しなどで，clipping plane (最低限，手前slab）
meshのclipping実装

2011/4/9

●実装
CutByPlaneの移植
CutByPlaneのGUIの移植（作成）

●実装
apbsのGUIで，pdb2pqr.pyを使ってpqrを生成できるようにした．

●中止
以下，作業の手間の割にはメリットがないので実装しないことにした．
Undo/Redoについては，個別に実装した方が早い．
Eventについてはすでに実装済みなので，今更変更するメリットがない．
・Cameraもname unique制でなくID unique制にしたほうが良いのではないか？
→CameraをObjectのsubclassとして扱えば、objectのevent, undo/redo等の仕組みが再利用できる。

●一応完了
megapovではmesh2のtexture補間が正しく働かず，黒くなってしまう．
→povray3.6のconsole版をMinGWでompileできた．依存dllはmsvcrt.dllのみにできる(--disable-shared)．

●一応完了
↓Unitarityの判定を甘くした（誤差で想定よりずれる）
POVRay, clipping planeの実装がおかしいせいか，cylinderが正しく表示されない場合がある．
全ての場合ではないが．あと，cylinderにmatrixがついてしまう(Unitaryなら端点に座標変換を
かけてしまって，なるべくつかないようにしたい)．

●完了
QSCファイルに正しくatomintr rendererのlistが書き出されない場合がある．
⇒現在AIDで書き出しているが，AIDはセッションを超えてpersistentではないため
再度読み込んだ時に同じ原子を指しているかどうか保証がない(UIDと同様)
⇒chain name.resid index.atom name(:conf id)の形式で書き出すようにしなければならない

2011/4/16

●一応完了
insertion codeがあるタンパクで，ribbonがinsertionのところで切れてしまう．
（simpleでも切れているので，connectivityの問題）
⇒123と123Aどちらが先かという問題．
PDBでは順番は字句的に決まっているのではなく，出てきた順になっているっぽい．
tRNAなどでは123<123Aだが，trypsinでは123A<123となっている．
⇒Iterationの順番は，ファイル中出てきた順に行う・indexの大小は関係ない→connectivityは解決
⇒Selectionの順番は，indexのnumericな大小で行う→直観に反しない仕様
（たとえファイル中で2>1となっていたとしても，1:999と指定して2が選択されないのは直観に反する）

●完了
選択文;100Aがある場合に，resi 100とすると，100だけでなく100Aも選択されてしまう
範囲選択の場合はinscodeを無視するので良いが(99:100 or 100:101⇒100Aも選択)
単一選択の場合はinscodeも考慮するべき

2011/4/17

●修正済み
LDOM2Stream書き出しで，typeという名前のpropertyがあっても必ず無視されていた．
typeはobjectの型名を格納するのにシステムが使っているからそういう実装になっていた．
⇒embeddedタイプの入れ子プロパティーでは型が固定なのでtypeは使用されていない
⇒embeddedタイプ入れ子の場合のみtypeを書き出せるようにした
（読み込みの方はもともと対応している）

●一応完了
styleが変化した場合にイベントが発生するようにした
変化したstyleに応じて（uid, style名），対応するlistenerにeventを送信
今のところはrendererのみEventをListenしている
⇒該当する情報のinvalidateを行う実装と，applyStyleを再実行する実装

●一応修正済み
applyStyleで，入れ子プロパティーの扱いに問題がある．
現在の値とstyleの値で型が同じの場合は上書きを行っていなかった．
（型が違う場合はstyleの値ですべて上書きしていた）
⇒異なるPaintColoringの場合styleが適用できくなる
 (違いはpropertyではなく，それ以外の内部データにあるため)
⇒解決策：型にかかわらずすべて上書きするように変更．
Coloring等の非埋め込みタイプの中の子プロパティに，
非デフォルト値があった場合でも，style値に上書きされてしまうという問題がある．
ただし，TubeSectionのような埋め込みタイプでは，ノード自体がreadonlyになっているため
そもそも上書きができないため，こういう問題は起きない．
⇒そういう仕様にしてしまって問題ないのではないか？

●変更点
Povray書き出しで，TexBlendを使うようにした．
スピード的な問題があるかもしれんが，一応これで様子見．
それに応じて，styleのmaterial定義に@COLOR@というdirectiveを導入し，
@COLOR@の部分が色ベクターに置き換わるようにした．

●修正済み(?)
↓問題あるようには見えない
render pov dialogで，confirmation dialogの挙動がおかしい．
cancelを押してもdialogが終了してしまう．(Noと同じ動作になっている）

2011/4/30
●実装
LSQ fitでRMSD file書き出しを実装．

2011/5/1
●実装
atom intr rendererのpropertyを実装
Rendererの共通property dialog pageを作成
Reset all to defaultを実装

●修正済み
paint panelでCPKColoringで正常に色の変更がpanelに適用されないバグがあった．

●実装
styleのundo/redoを実装．
(styles値レベルを戻すだけ・ただし変更後のevent関連はちゃんと発生させる必要がある)

●修正済み
StyleSheetのdefault value resolution routineで，stylesheet値が見つからなかった場合に
特に何もしていなかったが，それだと以前styleが適用されていてその値がpropとして
格納されていた場合に，その値が残ってしまうという問題があった．
⇒stylesheet値が見つからなかった場合は，qifファイルで定義されているdefault値に
強制的に戻すように変更した．(多分これで問題ないはず)

●修正済み
Deserializeから作られたrendererがstyle eventをlistenしていなかったのを修正．
ctorですべてlistenするように．

●修正済み
NameLabelRendererのlabelがserialize/deserializeされない

○問題点
Rendererについて．
factoryのtemplate objectが無駄にeventをlistenしてしまっている．
不必要なobject allocationが行われている．(型情報取得のためだけに作られているので，
最低限の初期化だけで良いはず)
⇒init()を別に設けて，通常使用の場合のinitializationをctor以外で行うようにしたい．

○問題点
XUL UIの方で，現在の実装では単原子選択についてaidを多用しているが，
selectionについてはpersistentになることを前提として，
hierarchy selectionに変換して使用しなければならない．例えばA.100A.CA:Aなど．

●ある程度は済み
↓mouse captureを利用したfake dialを実装した
Gecko2では，mouse captureができるようになっている⇒fake dialの実装が可能になる．
その他にpanelのresizeが正常にできるようになっているなど，upgradeする利点が大きいので
できるだけ対応したい．

○問題点
NameLabelRenderer.addLabel()がundo/redoをサポートしていない．

○問題点
resetAllPropsの実装が，styleを考慮していない．
直接LWrapperImpl::resetPropを呼び出して，QIF定義値に戻してしまっている．
（StyleSupports classでは，styleを参照して該当がなかったときのみQIF定義値に戻すべき．）
（現在resetAllPropsが呼び出されるのはctor直後のstyleが適用されていない状態だけなので問題は発生していない．）
⇒今のresetAllPropsはresetAllPropsImplとして，
別の表向きinterfaceとしてresetAllPropsを位置づける．（他のset/get propertyと同じ実装に）
デフォルトの実装はresetAllPropsImplを呼び出す．

○注意点
Gecko2では，app/resourcesの下のjs scriptがprofileにキャッシュされるらしい．
変更した場合profileの削除が必要．

2011/5/26
●解決済み
XUL, common prop dialogで，molsellist変更後いきなりOKを押した場合に変更が反映されない．
一度他のwidgetにfocusを移した後OKを押せば反映されている．
molsellistで，focusが失われたときにchange eventが発生していない？

●解決済み(2.0.1のみ)
問題点・バグ
PovDisplayContext: texblendにしてはいるが，gradient colorで適切にtextureがblendされていないように見える
↑ColorTableでGradientColorの場合にmaterialを適切に処理していなかった(1側のmaterialのみ使用するようになっていた）

2011/5/27
●実装
POV-Rayでのblendpngの実装．
Rendererレベルで設定されているalpha値については，alpha<1.0について，
・当該rendererすべて非表示
・各renderer各々表示（他当該はすべて非表示）
という組み合わせを個別にpovray renderingし，
最後にblendpng.exe(utilsにある)にて，指定alpha値で足し合わせるようにした．
以上をGUIで自動的に行うようにした．
⇒単なる重ね合わせによる半透明の実現
optionでray tracing levelでの半透明と切り替えられるようにしている．

2011/5/28
●実装
ViewInputConfig
Singletonにした→すべてのviewで共通の設定を使う
（viewごとにmouse割り当てを変更するような変態的なケースは考慮しない）
hitprec, tbradもViewInputConfigに入れた
・個別の値のoverrideはuser styleに保存する
・mouse operation presetをどのstyleにするか(default, coot, pymol等)は，
mozilla pref serviceに保存する．

●実装
config-mouse.xul, jsの実装

○2.0.1 問題点・バグ
pov-render dialogで，post blendをoff->onにすると動作がおかしくなる．
ただし，いったんdialogを閉じると正常に戻るので，一応何とかはなる．

●実装
CGALを使用したCutByPlane2の実装完了．
ほぼどのような断面でも，エラーなく生成できるようになった．

●実装
実数値の文字列への変換時に，小数部にゼロが続く場合削除するようにした．

●実装
libPNGを統合

●実装
改変版libzを統合，gzファイルを読めるようにした．（バグは出きってないかもしれないが）

○2.0.1 重要メモ
gecko2でなぜか起動しなくなってしまった場合：
chrome URLが変換できない→cuemol2.xulが読み込めない→固まる，ということらしい．
変換できない原因としては，
・jar.mnがおかしい→cuemol2.jarが正しくできていない→エラー
・chrome.manifestがおかしい
特に，jar.mnに書かれているファイルが存在しなかった場合，エラーにならずに固まってしまう．

○2.0.1(Gecko2) メモ
javascript moduleが何かしらcacheされてしまい，
コードの編集が反映されない．
ただし，jetpackのmoduleは影響を受けずちゃんと反映される．
QIFのwrapperが影響を受ける．
profile dirのcompatibility.iniを削除すると，
cacheは読まれずに，変更が反映される．
データ自体がどこにcacheされているかはよく分からない．

●実装済み
↓materialが異なる場合だけtexture blendを使うようなmesh定義を吐くようにして対処．
↓大きなrainbow ribbonでも許容範囲時間でrendering可能になっている
rainbowでpovray renderingを行うと異常に時間がかかる．
常にtexture blendがONになっているせい．
（角残基ごとに色が違う→textureが同じなのに残基数分だけblendが生じる）
・texblend on/offができるようにする
・materialが異なる場合だけtexture blendを使うようなmesh定義を吐くようにするのがベスト

●実装すみ
PaintColoringのstyleで二次構造ごとに色付けのバリエーションとして，
代表的なHue値例えば６０度毎の色を用意したい．

○addon-api-1.0についてのメモ
components/harness.jsは，python-lib/cuddlefish/app-extension/components/harness.jsである．
bootstrap.jsは，python-lib/cuddlefish/app-extension/bootstrap.jsである．
bootstrap.jsはFireFox addon API用なので，アプリで使用するには難がある．
⇒myboots.jsというのを作り，起動時にaddonがenableされたように見せかけて動かす．
（jetpack0.7を使っていた時のjpk_hns.jsに相当）

○全バージョン 重大な問題点
LDOM2Stream.cpp, LDOM2Node書き出しで
readonly, composite propertyのchild nodeにnondefault valueがあっても
正しく書き出されないようになっている．
⇒特にTubeのwidthだけを変更する, etcを行ってもQSCに反映されない
★2.0.1では修正済み

○問題点
scene panelでpaint coloringに追加した場合，
default flagが適切に処理されない⇒qscに正しく追加が書き出されない
（paint panelでの実装では適切に処理されているので，それを持ってくれば良いだけ）
★2.0.1では修正済み

●実装
Rendererのcopy&pasteを実装

●解決済み
XPCObjWrapperでbinary arrayが渡せない問題がある．
Stringとして渡すと，WSTRINGとして認識されている．
GetAsWStringWithSizeでPRUnichar配列に変換され，
さらにcuemol側でUCS16->UTF8変換が起こり，結果としてデータが化ける．
ASCIIとして認識させて，変換なしで渡せればよい？
⇒ByteArrayというインタフェイスを作った．バイナリデータを隠ぺい化
xpcomインタフェイス側にnsIStream->ByteArray, CString->ByteArray変換コードを実装
※他の言語インタフェイスの場合も同様の変換機構を作れば実装可能のはず

●修正
整数数値のPropertyをscriptから設定するとき，
文字列からの自動変換は行われるが，
real値からの変換は行われないため，
PNG export dialogで画像サイズが適切に設定されないという問題がある．
(Gecko1.9では問題になってなかったため，2.0 specificな問題か？)
⇒LWrapperImpl::convTo***()で変換するように実装

●修正
・PovRender dialogでPNG画像が保存できない
・POVRenderで，density meshの半透明が効いていない
⇒XXXDisplayContext::startSection()が呼ばれる順番がおかしかったのが原因
・density map centerのautoupdate機能が効いていない
・Ribbon Renderer property dialogの，共通設定項目UIで，値変更後いきなりOKを押すと値が更新されない
（どっかにfocusを移すなりしてからOKすると更新される）

●実装
LWrapperで，文字列⇒object変換を行うとき，classによってはfromStringS()が定義されてないことがあって
コンパイルエラーが起こるという問題があった．（このmethodはstaticなためsuperclassでNULLを返すものを定義するようなまねはできない）
type traitsを用いる
⇒superclassで，has_fromStringSをboost::false_typeとtypedef定義しておく．
fromStringS()があるclassでは，has_fromStringSをboost::true_typeとtypedef定義し直す
⇒templateのspecializationを用いて，fromStringS()がある時のみそれを使用する実装がインスタンス化されるように

2011/7/13
●修正
LScrObjects::readFrom2()で，child nodeがあるreadonly property (sectionなど)が
読み込まれないというバグがあったので修正．

2011/7/15
●実装
Copy&pasteの実装で，StreamManagerにXMLを与えてpNodeさらには
scriptable object (Object, Renderer, Coloringなど)を作り，
それによりobjectを作成して，js側でSceneやObjectに追加するようにする．
（専用の実装をObject, Rendererごとに作ると大変なので）
Copyでも同様．scriptable objectを与えるとXML（あるいはQSCファイル
の内容を文字列にしたもの）が返されるmethodを実装

2011/7/30
●修正
POV-Ray rendering windowで，ターゲットとなるsceneをcloseしてしまうと，その後Save imageができなくなる（シーン名が取得できないから）
⇒window側でシーン名は保持しておくべき

●問題なし
colorの{}表記内に複数のプロパティーが指定できない？←セミコロン区切り指定

●修正
↓color定義でnameが参照された場合には，常に値コピーが作られるようにした
styleのcolor定義でXML attributeでmaterial=指定を行った場合に，意図しないmaterialが指定される

●実装
Base64In/OutStreamを実装．テキストPDB，バイナリ(qdfsurf)で動作確認．

●実装（重要）
QDF1形式を定義．以降のバージョンでは書き出しはQDF1による．
後続２文字により，エンコーディングと圧縮形式の記述を指定
→データ自身のみで読み込み方法を決定できる仕様．拡張子や他オプションに依存しない

●修正
↓QDF1形式でBase64 encodingすることで文字列化可能に→一応解決
MolSurfがコピペできない
原因：setTransferDataにsupports-stringとして渡してしまっているが，
データ中にnullがあるとそこで文字列が終わってしまっていると判断されてしまっている．
バイナリーデータとして渡す方法が必要．

●修正
Renderer paste時の，Objectに対するcompatibility checkがないので
対応していないobjectにも貼り付けられてしまう

●実装
QSC形式保存時に，オプションダイアログを指定可能にした．
embed all, compression, text encodinを指定できるようにした．

2011/8/2

●修正
QSCファイルをダブルクリックしてCueMolを起動しても，正しく表示されない
（molviewが読み込めていない）

●修正
ThebesTextRenderで文字のサイズ（ピクセル実寸，実数値）を切り捨てて
ピクセル数にしていたが，それだと文字の上下が切れることがあったので切り上げに変更
文字の起点を0,-hに固定
⇒切れなくなった

●実装
instanceが起動しているときにshell open (double click)した場合，
新規windowを作成するのではなく，新規タブを作成してファイルを読み込むようにした．

●実装
MRU (Most Recently Used) file listを実装。

●実装
MacOSXで，emulate R buttonをon/off出来るようにした

●実装
trackpad, emulate R buttonのon/offを動作中のviewに対しても動的に適用できるようにした．

●修正
View panelの値がupdateされない(Mac trackpadのみ)

●解決？
↓条件によってはfile openの前で中断するようなコードになっていたからか。一応修正済み。
drag and dropができなくなっている．2.0.1にしたことでエンバグか？

●実装
Cameraに対するコピペ
Cameraのrename

以上2.0.1.145
----------

○問題点
Copy&pasteでorphan objectを作る⇒それをscene/objectにattachという実装にしたら
やたらメモリリークが起きやすくなった（XPCCueMolがfinalizeされない）．
再現性が不確実で，原因はよくわからない．
（少なくとも，コピーしたobjectのdtorは呼ばれている）

○問題点
・GUI，molstruct panel選択時に，残基番号が昇順に並ばないケース（そういうPDBファイルがありうる）
→selection出来ない(i; 2:1のような選択文が生じ，空選択になる）
⇒2:1は1:2のように扱えば解決するのでは？

○問題点
・PDB読み込み，ORIGXnレコードをちゃんと解釈しないと，
sym分子表示がおかしくなるPDBエントリが存在する

以上、2.0.1.145のリリース
----------
2011/8/18

●修正
PNGファイルでのシーン書き出しがちゃんと動かなかったので修正
(PNGをバンドルした変更に伴い、HAVE_PNG_Hが定義されていなかった→すべての関数が空定義に）

2011/8/21

●修正
StreamManager::fromXMLで，src(相対パス)を解釈しても元のシーンとbase_pathが同じかどうか
保証はないので，常にalt_src(絶対パス)から読み込むようにした．

●修正
PaintPanel-->ColoringPanelに変更した（名前と機能の不一致）
ColoringPanel中のdeck内容をoverlayにして別ソースに分離した（xulのみ）

●実装
PaintColoringの複数選択と，コンテキストメニューを有効に

●実装
PaintColoringのentryのコピペを実装した

●修正
pdb.gzを読み込んで，qscに埋め込むとgzip圧縮がかかったまま書き出される→次回に読み込めない
datachunk書き出し用PDBFileWriterにroptを設定していたため．
設定しないように修正．
→QSC datachunkは常にroptなしで読み込めるようにすべきである

2011/8/24

●修正
何かの拍子にzoom値が負になることがあったので、zoom, slabdepthに関してはより厳密に値の範囲を制限するコードを入れた。
（privateにしてsetterで制限）

●実装
xulrunnerを6.0にした．MacOSXでも6で動作．

2011/8/25

●修正
電子密度の表示範囲が指定通りにならない．→read only propertyであるmaxExtent値が正しくなかった．
さらに，bufsize変更が実際のbuffer sizeに適用されていなかったので修正．

以上、2.0.1.148のリリース
----------

●修正
Thebes周りのコードのせいで，文字が表示されると落ちるという重大なバグ（Win,Macともに）があったので修正．
原因は，FontGroupのlanguage atom(nsIAtom)を取得するタイミングが早すぎると，atomが初期化されていなくてnullになっているケースが
場合によっておこり，その後atomにアクセスすると落ちるという現象だった．

以上、2.0.1.149のリリース
----------

●実装
selection panelで，command panelを優先表示させるようにした．
command panelにhistory機能を実装した

●修正
molstruct panelで選択を行ったときにhistoryに追加されるようにした

●実装
bondのmake, removeをundo/redoとともに実装した．
bond edit dialogを作成した．（未完成）

●実装
bond edit dialogで，bondの追加をするUIを作成した．（atom picking操作のhookによる）

●修正
MTZ読み込みで，missing reflectionがあると0で上書きしていたが，この実装だと，
有効な反射→missing反射の順でファイル中に現れた場合，元の有効な反射が0で上書きされる
→FFTするとおかしなdensityになる
(phenix.refine 1.7以降の出力するmtzファイルで起こる現象・uniqueifyされたmtzファイルでは起こらない)
というバグがあったので修正．

以上、2.0.1.153のリリース
----------

●実装
symm-edit-dialogの実装

●修正(?)
QSCファイル保存時に，別フォルダに保存し直す（basedirが変更される）と，external sourceが読めなくなる．
（QSC保存時にパスの変換が適切に行われていないバグがある）
（rel->abs変換を行っているため，basedirが変わったら正常に動作しない）
→object serialize時に，abs path-->rel path変換を行うようにした．
この実装では，srcかalt_srcどちらかは必ずabs pathを保持していなければならない．（一応満たされている）
・GUIからの読み込み→srcは常にabs pathになる
・scriptからの読み込み→？？
・xmlからのdeserialization→alt_srcは常にabs pathになるように実装変更

○問題点
scriptからの読み込みで，上記要件が満たされない可能性がある．
現時点ではscriptingを有効化していないので問題ないが将来的に対応が必要となる．
ObjReader::read()でsetSource()しているのでそこで何らかの対策が必要？

●実装
CrystalInfo変更のundo/redo

2011/10/08
●修正(?)
CrystalInfo変更によりメモリリークが起こっている？
CrystalInfoとは関係なく起こる．
fileopen.js周りのコードをGCがかかりやすいように修正(なるべくletを使う等)→若干改善．
xpcom-shutdownで残っているwrapperを表示させるようにした．（CrystalInfo変更でもリークが起こってないことを確認した）
リークが起こるのはGCのタイミングに大きく依存し，再現性がない．

●実装
ObjWrapperが作成される場面のjsのstack frame情報を保存できるようにした．
→解放されなかったwrapperが作成された場所が追跡できるはず．

2011/10/16
●実装
CrystalInfo編集結果，symm paletteが更新されるように
CrystalInfo新規作成を可能に

●実装
Protein secondary structure assignmentの改善
secondary2というプロパティーを新設した（二次構造の1文字記号H/G/I/H/T/Bが設定される）
helix(H/G/I)の開始と終了記号(s/e)が設定されるようにした
→ribbon rendererで連続するヘリックスを別々のhelixとして描画可能になった

2011/10/17
●修正
RibbonRendererで，表示がribbon/helixの途中で切れると断面がおかしくなっていたのを修正
（常にflat capが作成されるようにした）

2011/10/23
●実装
ribbon2 (cartoon?)のsmoothing splineを用いた実装を続行．
まだ未完成のためopenにはしていない．

●実装
ミニウェブブラウザーのようなものを利用可能にした．(mybrowser.xul/mybrowser.js)

以上、2.0.1.161のリリース
----------

2011/10/28
●修正
near-slabがdistanceとちょうど同じ大きさになると，perspec投影で表示がおかしくなるため，
near-slab<distance-0.1までしか行かないようにした→表示は正常になった

●修正
そもそもView.setSlabDepth()で，distanceより大きい値を設定できないようにした

●修正
povray出力にdistanceが反映されていなかったのを修正．

●実装
Viewメニューからortho/perspecと，centerMark変更を可能にした

●実装
ribbon2 をcartoonとした

●実装
MQO書き出しを移植，一応ＯＫ

●実装
Wbp書き出しを実装．スタイルで塗と線幅を指定可能にした．

2011/10/30
●実装
workspace panelにstyleという項目を設けた．
現在シーンに読み込まれているスタイルセットが表示される．

●修正
スタイルセットのid値は一意でなければならないというポリシーに変更
（以前は単にリストでidはユニークでなくてもよかった）
→同じidのスタイルは同じセットに統合される

●実装
スタイルセットの削除を実装
シーンの更新が行われることは確認した

●修正
density map rendererの中心がqscファイルに保存されない場合があった．
centerをautoupdateで(C++コードから)変更した場合に，default flag=falseに設定されていなかったのを修正

2011/11/12
●実装
ActiveX controlを実装．一応最低限使用できるレベルには到達した．

2011/11/15
●修正
Cartoonで，sheetのうちの1残基のみを表示しようとするとクラッシュする．（helixでも同様の可能性がある）
⇒ 一応落ちたりはしなくなったが，表示は変になる．やはりsplineは全体で計算したうえで，部分を表示する必要がある．

●修正
CartoonのcoilＣ末端側がCalphaを通るようにした

●修正
GUIからobjectなどをlockしてqscに書き出し，次回読み込むとlockされているにもかかわらず，lockアイコンが表示されない．
（⇒意図せずクリックが効かなくなってしまい，結構問題あり）
⇒Scene::getObjTreeJSON()がlockedを返すようになってなかったので修正．

●修正
styleのファイル参照タグの読み込みと書き出しの順序が逆→ファイルを保存するたびに順序が入れ替わる

●修正：【重要なstyleに関する規則の変更】
（styleファイルとセットの対応が１対１になるように→style編集UIの簡素化が目的の変更）
・埋め込みstyleはid付き，無名(anonymous)styleどちらにも入れられるが，id付きの場合は分割定義できないようにした．
（無名の場合はファイル中に分散して記述できるが，書き出すとpreamble部分にまとめられる仕様にした）
・外部ファイルスタイルは必ずファイル中か参照側か，どちらかでid定義しなければならない．
⇒そうなってない場合は読み込み失敗
・同じidのstyleが定義されようとした場合，エラーになる（外部，内部どちらに関しても）
・外部ファイルスタイルのidは，読み込み側でoverride指定できる．(書き出し時もoverrideしているとid attributeがつく)
⇒ファイル側のidがだぶっていても読み込み側で変えてやれば読み込める．

●修正
XXXPaintのstyleをGUIから適用すると，元にあったXXXPaintが削除されずに
どんどん追加されて適用されるようになっていたので，修正．

2011/11/16
●実装
Cartoonで，coil, sheetについて任意の残基にwgt=10を設定できるようにした（他はdefaultで1）
⇒ある程度ならCalphaを通るように強制できる．

●修正済み
Export sceneで，デフォルトのファイル名を"scene name"+[extension]にした．

2011/11/19
●修正済み
Cartoonでsheet headの法線がおかしかったので修正．
（Ribbonでも同じ問題点がある可能性がある）

●修正済み
Cartoonでproperty変更時にcacheがinvalidateされなかったのを修正

●実装
Cartoonでsheet-coil接続性を改善した
（補完ノードの重複⇒見かけ上coil端点の微分を指定したのと近い効果が得られた・coeffの書換えはやめる）

●修正済み
ActiveX controlでのsource propertyを，コンテナ側のパスに相対で指定されるようにした．

以上、2.0.1.172のリリース
----------

●実装
qsys/sysdepの内容を，sysdepに移した．
sysdep::init/finiというシステム依存関連の初期化終了ルーチンを設けた（今は空実装）

●修正済み
ssm superposeで，選択がemptyになると落ちる

●修正済み
molstr::AtomPosMapで，指定するboundary分子が小さいと（例えばPro 1残基）生成に失敗する場合がある．
（⇒全てboundaryから遠いとみなされる）
⇒小さいとサイズが0になっていたので最低でも1になるようにした
⇒小さい系(defaultで100原子以下)ではbrute-force searchを使うようにした

●実装
selectionによる範囲限定表示時に，範囲外をゼロにするのではなく，線自体を描画しないようにした．
（線の頂点の両方あるいは片方が範囲から出ているときは等高面がgrid間を横切っていないと見做す）

2011/12/7
●実装
SSM superposeで，回転行列から計算した回転角度を表示するようにした
●実装
SSM superposeで，alignmentを表示するようにした．

2011/12/17
●実装
MolSurf rendererの簡易プロパティー設定GUI

●実装
DensityMap rendererの簡易プロパティー設定GUI

●実装
Momentum scroll(mouse)の実装

●修正
quaternionの乗算にバグがあったので修正

2011/12/22
●修正
Viewのquaternion値がnanになってしまう場合がある．
trackballを修正した際にエンバグしていた．(phi=0の場合に0除算していた)
⇒修正
かつ，finiteでない場合は強制的に単位quaternionに設定

●修正
xulrunner 9.0betaで(8.0でもすでに)マウスのwheelが使えないという問題があることが解った．
nsWidgetの実装が変わったためか．
DOMの方でeventは拿捕できるのでjsで処理
(WM_MOUSEWHEELではdeltaZ=120
win32, DOMMouseSecrollではdeltaZ=3
macosx DOMMouseSecrollではdeltaZ=1~15くらいまで可変
cocoaでは0.1~20くらいまで可変)

●一応解決？
Text renderingにfirefoxの半非公開機能であるthebesを使用しているが，
・それが原因で落ちる（？）
・最新のfirefoxでbuildできない
等の問題が起こっている．他の方法でtext renderingすることを考えなければならない．
⇒canvasを使えばできるかも
canvasはtext metricxがwidthしか得られないが，ピクセル値を調べたりすることで高さを調べられないでもない
大きめのsurfaceを作って置いて一応実装可能なことを確認．
⇒Canvas2DTextRenderを実装，動作確認

●実装
MacOS Xでも9.0.1で動作することを確認。
XUL runtimeのFAT binaryを使用した場合、openコマンドを使用すればInfo.plistが参照されるらしく
指定通り32bit版が動いた。
コマンドラインからは、arch -i386 CueMol2.app/Contents/MacOS/xulrunnerとすればよい。

●解決
aroundの距離引数に小数値を指定できない．なぜか「.」文字が数値(sel_number)として認識されていない．
->lexerのほうでaround tokenが認識された時点でsetstateするようにした

●メモ
MacOSXでnsIFilePickerでfile typeを選んでもファイル一覧に反映されなかったが、
これはどうも32bit versionの問題で64bit versionを使うと反映されることが判明。
ただし、clangとSDK 10.6を用いてbuildした32bit版9.0.1では正しく反映されている。
（mozillaのコードの問題というより、linkされているSDKのせいの可能性が大きい）

●修正済み
StreamManager::fromXML()で，loadObjFromSrcにてaltsrcしか使っていないが，
altsrc="", src="abs path"の場合がある（serializeされていないシーン等）
→正常のコピペができない！！

●修正済み
gzip圧縮したファイルから読み込んだmolがコピペできない

2011/12/25

●修正済み
file open/saveに個別QDF型が出てこないようにする

●実装
LWObject/Rendererの実装等(Lines, Mesh, Sphere, Cylinder)

●実装
MacOS XでもGLewを使ってVBOを使うようにした

以上、2.0.1.183のリリース
----------

2011/12/30

●実装
LWObject/Rendererの実装(Hittest)

●実装/修正
View, Sceneのcamera関係のAPIが分かりにくい・使いにくいものだったため，
get/setベースのインタフェイスに変更した．（getはコピーを返す・setは参照を保持する）

●実装
qscファイルの書き込みの際，writer options (QDF version, compression, base64など)をqsc_optsタグで書き出すようにした．
かつ，Sceneにset/getQscOpts methodを設けた．
⇒次回（＋読み込み）上書き保存したときに，defaultで前回使用したのと同じoptionで保存されるようにした．
（注：QscOptsはget/setはあるが，scriptから操作できるpropertyではない）

●実装
Mobile device等向けのLight weight sceneファイル形式（基本的にはqscと同じ）の拡張子をqslにした．

●修正
MacOSでobjectのcopy&paste (memoryを介したQSC形式の読み書き)を行うと日本語などの文字が化ける
→object srcに日本語が含まれるとコピペできない
という問題があったので修正した．

2012/1/19
●実装
主にiOS要の実装を行った

●実装
主にQSL形式の書き出し・読み込み実装を行った
主にlwviewの実装を行った


以上、2.0.1.188のリリース

-----
2012/1/26
●実装
QSL形式のファイルタイプ登録(win/osx)

●実装
QSL形式のicon

●実装
自動detail一括設定のプロトタイプ実装

●実装
qsl書き出し時のoption dialogとoption設定を実装．自動detail一括設定を含む．

●修正
FileDisplayContextでcolor()が呼び出される前にvertex()が呼ばれると落ちるバグを修正
色はデフォルト色灰色になるようにした．

●修正
Ribbonでsheetの末端がN末端の場合，かつaxialdetailが奇数の時に，
端のtube部分が正しく表示されないバグがあったので修正．
同様の問題はTube/Cartoonでも起こりえたので，同様に修正．

●実装
EDTSurfによるmolecular surface renderer (直接rendering)の初期実装

●修正
Prot2ndryの二次構造割り当てで，N末端がいきなりhelixで始まるような構造だとそのhelixの開始終了が正しく認識されないバグがあったので修正．

●修正
qsys::isFileReadable()boost::fsを使っていたが，
win32での実装がwchar版を呼び出す仕様になってないためか非アスキー文字が入ると異常動作していた
⇒直接_wstatを呼び出すようにした
（他のOSではlibc自体がutf8パスを扱っているため問題ない？）

●修正
symm分子の出す範囲計算を，orthogonal座標系にて距離計算するように修正
⇒球を描画して正常動作を検証した．
見た感じ，一見範囲が正しくないように見える場合もあるが，これは重心を判定基準に使っているため．

●実装
dsurface (EDTSurf)を実装．大体のpropertyの実装を完了．

●実装
dsurfaceのprop dialogを実装．

●実装
CPKのprop dialogを実装（半径の変更UI）

2012/2/7

●実装
QSL書き出し（LWRendDisplayContext）でのVBOの分割(unsigned shortに収まるように)を実装した．

●実装
QSL書き出し時のdetail上書きオプションを使用しない選択肢を可能にした．

2012/2/8

●実装
QSLにpixel objectを書き出せるようにした．（文字ラベルの再現）
pixel objectはtextureとは異なり拡大縮小が起こらないような1 pixel<==>1 device pixelに対応しているような表示と定義
※必要に応じて，拡大縮小されるtextureというobjectを別に実装するようにする（予定）

以上、2.0.1.192のリリース

-----

●修正
OpenGL quadbufferに切り替わる時にnative widgetの位置がおかしくなるバグを修正

●実装
Viewにstereo eyeをswapするフラグを追加

●実装
mdtools moduleを追加
NAMD psf/coor読み込みの初期実装

2012/2/19
●実装
電子密度マップのQDF形式（byte map）
1QIOで書き込み・読み込みを確認

●実装
iOS版：ラベル表示を実装（textureとして表示）

●修正
PDBFileWriterでsel propertyがあるものとしてAPBS/PDB2PQR toolが作られていたが，
実際は実装されてなかったので選択部分だけ静電ポテンシャルマップが作られるようになっていなかったので修正．

●修正
qscからMapMeshRendererを読み込んだ場合，かつ，読み込みに失敗した場合，直後にクラッシュするバグを修正．

●実装
qif propertyにnopersistという属性を設定可能にした
⇒writeTo2/readFrom2で常に無視される
あと，prop attr(FuncMap::m_propdb)で@<propname>_XXXという形式でpropertyの属性を格納することにした．
⇒property enumerationで，@で始まるentryは無視するようにした．（@で始まるプロパティー名は定義できないという前提で．）

★メモ
QSCにcameraが書き出されるとき，全ての属性が（変更有り無しに関わらず）書き出される
cameraにdefault値があるが，serialize時にすべてコピーしているためdefaultフラグがクリアされてしまう．
カメラ値に限っては，値が変更されているかどうかを，値自身により判断するようにしなければならないが，
現実装ではそれができない仕様になっている（デフォルト値を取得する仕組みがない）
⇒常にカメラ属性が全て書き出されるようになっている
（ただ現実問題としては，変更された属性だけ書き出されるように実装するメリットがあまりないので，このままで放置している）

2012/03/08
●修正
cartoon (Ribbon2Renderer)のシート生成で，bnorm計算に失敗して
getBnormVecが(0,0,0)を返すために無効なmeshが生成され，
povファイルなどでrenderingが失敗する場合があった．
⇒一応(1,0,0)を返すようにして無効なmesh生成を避ける

●実装
molcolの実装
分子で共通の着色が必要な場面が多い
いちいちすべてのrendererに共通着色を設定するのは煩雑＋一括変更ができない
⇒MolCoordにもcoloringを持たせて，colorの特殊キーワード($molcol)で分子側で定義された色を参照できるように

●実装
molcolでもmodifierが使えるようにした．

●修正
povray.exeがfドライブをアクセスしてしまう問題
⇒MinGWをFにインストールしていたのが原因．C:にインストールしてビルドした．
（ただし，C:にアクセスしてしまうため根本的な解決にはなっていない）

2012/03/11
●修正
blendpngを３枚以上の画像を合成する場合も正常に動作するようにした．
ただし，近いalpha値の画像が複数ある場合に乗算で画像が薄くなる．
（0.5が２つあると１つのレイヤーにまとめられるが，0.51と0.5があると別のレイヤーにされてしまい，
後方のレイヤーが実質混合値0.25になってしまう．）

●実装
MolCoordにもcoloringを認識し設定できるUIが必要
color uiにmolcolを設定する選択肢をメニューとして入れる

●修正
molsurfのcoloring関係のUIがバグっている（$molcol実装の副作用）

●実装
相互作用の自動抽出UIを作成．
all or hydrogen bond (!elem C)
distance (min/max)
対象：selection原子が含まれる相互作用に対して
→指定したatomintr renderer（あるいはdefaultを作成）にaintrが追加される

●修正
molsellistのinputfieldでの選択eventがmenulistの選択イベントハンドラーにも渡されていたため，
テキスト選択により意図しない挙動が起こっていた．
inputfieldでの選択eventが上層にpropagateしないようにすることで解決．

●実装
file-linked cameraのUIを実装した．
・fileからの読み込み/update
・fileへの書き出し(link化)
・linked cameraがあるシーンを保存した場合，
変更のあるなしにかかわらず，external link先にcameraの内容が書き出される仕様にした．
⇔自動的に書き出さないと，書き出し忘れが起こりうる．
⇔勝手に書き出しても，意図しないファイル変更が起こりうる．
⇒どちらが良いのかは難しい．

●修正（変更？）
QSC読み込みの時にエラー（特にリンクファイル・埋め込みストリーム読み込み）が起こった場合でも
できるだけエラー回復して読み込みを最後まで続行するようにした．
（⇒リンク破損を，読み込み後に手動で修正するようなUIを将来的に実装できる？）

2.0.1.207リリース

●修正
Interaction toolがMacでちゃんと動かない（ver 2.0.1）
(ContactMap.cppをMakefileに入れ忘れている)

以上2.0.1.208 リリース

●修正
SSM superposeのalignment生成コードにバグがあり，(rlistのindexが負になる場合がある, 例：2R4R, 2RH1）
ともかくもat()を使用して例外処理をするようにしてクラッシュは避けた．
(2.1も修正)

●修正
POVRay renderingの2.1でのorthographicで影ができないようにする修正を適用

●修正
RibbonRendererでHelix-end/Helix-startが隣接している部分で選択によりribbonを切断すると
落ちるバグを修正．（ただし不要なpolygonが生成されてしまう）

以上2.0.1.211 リリース

●修正済
・Object::propChangedの修正
・PaintColoringのedit infoを生成する部分で，parentがRendererだと仮定したコードだったが，これを修正する必要あり

以上2.0.1.212 リリース

2012/5/16
●修正済
molsellist-bindings.xmlのproperty selectedSelのgetterで定義されていないメソッドonSelBoxChangedが
呼ばれて落ちることがあった．結果，新規renderer作成時に例外が起こって何も表示されないという現象が起きる．
（MacOSXではOKが押されたときにtextboxにchange eventが来ない
→getterがtextboxからデータを取得するようにしていた
→onSelBoxChangedを呼ぶようにしていた）
implementation側にgetSelectedSel()というmethodを作り，textbox, listbox, this.mSelectedSelの順番に
調べて適切なものを返す処理を実装

--------------------------------------------------
--------------------------------------------------

以下 2.1.0開発版(trunc)での変更点

●実装
アニメーション関連の初期実装，AnimMgr, AnimObjの実装

2012/3/3
●実装
Animation再生関連UIの実装(tool ribbonとして)

Animation objectのinterfaceを追加
- start時にonStartが呼ばれる（厳密にはstart時間の直近の次のonTimerで呼ばれる）
- 同様に，end時にonEndが呼ばれる（厳密には直後）

Animation指定時間にジャンプする機能の実装
- onStart/onEndを呼び出すために，効率が悪い実装になっている
 （n^2のコストがかかるのでAnimObjが増えると非常に時間がかかる可能性がある）
- ジャンプ後はpause状態になる

●実装
ProcessManagerを実装した．
標準出力を保存できるようにした．
並列してプロセスを実行できる，プロセス間の依存関係を指定できるキューを実装した．
OSごとにプロセスとパイプ関連の実装が必要．

●実装
animationをpovrayでrenderingする機能をAnimMgr等に実装した

2012/3/20
●実装
POSIX版のprocess managerを実装(fork/execではなくspawnの使用)

●実装
PovDisplayContext/GUIで、shadowのon/offを可能にした

●Debug
PovDisplayContextで、アスペクト比が正方形でない場合もちゃんとレンダリングできるように。
光源の設定を変更・orthographicでも正面光の影が出来ないようにした

●Debug
povray rendering toolのが正常動作するように修正（要バグだし）
povrayの結果がlog windowに出されるようにした
現在走っているjobのうち最後のものの画像がpreviewに出るようにした

2012/3/21
●実装
animation rendering UIの実装, blendpngへの対応

●実装
APBS dialogのProcessManager対応化を実装．
（pdb2pqr/apbsの非同期実行＋stdin/errのlogwindowへのredirect）

●Debug
Interaction toolのundo/redo対応

2012/4/1
●実装
ocxにanimation start/stop/pause UI（rbtn-click menu）を追加
⇒iOS版にも入れる？

●実装
要望があったocxのad-hoc animation（１０秒で１周スピン）を実装した．
⇒iOS版にも入れる？

●修正
PropAnim superclassを設けた．
UID x propname中で，最も早く値を設定するanimobjを決定（initiator）
⇒そのobjに対して，開始時にonPropInit()が呼ばれるようにした
⇒onPropInit()では，開始時propertyの設定を行う

●修正
blendpngで，複数透明rendererがある場合に，それらrendererどうしの重なりがない場合は
正しくrenderingされるように修正した．
各レイヤーごとにalpha flag (0/1 bitmap)を設けて，
RGB各チャネル値が一つでも違うようならalpha=1とflagを立てる．
最終的に，各レイヤーごとに今までと同様のblend式でalpha=1のピクセルに対してのみblendingを行う．
（※alphaフラグをchannelでなくpixel毎にする点が重要．
channelごとにまで分けると色が変になる（前の実装））
レイヤーで，alpha channelに重なりが全くない場合はこれで見かけは変にはならない（OpenGLでのalpha
blendingに近い計算法になっているはず）
重なりが出てくると，重なった部分のdepth値が解らないため，入力の順序にblending処理を行ってしまうため，
予期した濃淡が得られないケースが出てきてしまう．（⇒これはdepth値を使用しない方法上の限界）
★入力の順序はalphaが小さい順にsortするようにしているが，
animationをすると時間に依存して順序が逆転しanimationが不連続に見える可能性があり問題？
★antialiasingにjitter=onをつけると，jitterのせいでドットノイズが現れるようになってしまう．
⇒jitterを入れることによる改善がもともとあまりないようなのでoffにした．

●実装
RendXformAnimの初期実装．
移動方向，回転方向は，model座標系ではなく
animationが開始するときのcamera座標系で定義できるようにした．
onStart()で，getWorkCamを用いてrotQuatから逆model matrixを計算
→(camera座標系での)移動ベクトルに乗じてmodel座標系での移動ベクトルに変換
※アニメーション中にカメラの変化が起こると予期せぬ結果になる可能性がある

●修正
SceneExporter関連を，renderingというmoduleにしてqsysから出した

2012/4/22

●実装
anim-panelの追加

●実装
timeedit widgetの追加

●実装
camera選択 widgetの追加

●実装
generic property edit dialogでvector値を編集できるようにした

●実装
generic property edit dialogでtimevalue値を編集できるようにした

2012/4/30

●実装
Animation (objectの実装関連)をanimというmoduleにしてqsysから出した

●実装
AnimObj add/removeのeventを実装
AnimObj add/removeのundo/redoを実装
AnimObj propeditのeventを実装
AnimObj propeditのundo/redoを実装

2012/5/2
●修正
Objectのcoloringに対する操作がundo出来なかったので修正

●実装
SimpleSpinのUI実装
CamMotionのUI実装
AnimPanel up/downの実装

●修正
camerasel XBLの不具合修正，初期化時にmenuitemのpropertyがundefinedになる
⇒valueのsetterでmenuの選択を変更するコードをsetTimeoutで遅延させて呼び出すことで解決

2012/5/4
●実装
geometry shaderを利用したMapMeshのrendering
gpu_mapmeshの初期実装

●修正
jsbrにjsを取り込んだ(今のところWinのみ)
※基本的に，jsbrは付属js(現在JS_170相当)を用いることにする
※付属jsを実行速度最適化/O2でコンパイルすると実行時にnullをアクセスするコードが生成されてしまう（msvcのバグ？）
⇒最大限の最適化だと大丈夫だった

●修正
gpu_mapmeshをAMD(Radeon)でも動くようにした

2012/5/10
●実装
shaderが使える場合は，fixed functionではなくdefault_vert/fragというshaderを使うようにした
⇒fragmentレベルでalpha変更できるため，alphaのanimationが高速に行える

●修正
上記変更に伴い，lightihg のon/offはdisplay list中に含められなくなってしまった
⇒全てのrendererでpre/postRender()で設定を行うように．
（但しdefaultはlighting ONで，lightihg offの場合は個別設定に）

●修正
OglDisplayContextのmaterial設定を，光源設定にて行うようにした（見かけ上PovRayのmaterial設定に近いふるまいになる）
ただし，金属光沢を出すのができない（Oglでは平行光源しか当ててない為テカりのハイライトが出ないせいか？）

2012/5/21
●実装
複数target (renderer)に対してpropanimをできるようにした．
animation: rendererの指定時に，object/rendererという表記を使えるように
propanimに対し，サンプルでinitiatorが正しく選択されることを確認

●修正
readFrom2()で生成したAnimObjのpropEventをanimMgrが正しくlistenしていなかった
→qsys event/undoが正常に発生しないという問題を修正

●修正
camerasel widgetが，qscからのdeserialize時に正しくcameraを読み込めない問題を修正

●修正
cuemol付属zlibのAPI関数が，OS付属のzlibのものとかぶってしまいOS付属側が呼ばれる問題があった
（linux；OS付属側はcallback付openをサポートしていないので，当たり前だがgzread()等が機能しない）
→全てqm_というprefixをつけてそちらを呼び出すようにした．

●実装
Linux/X-Window systemでwheelが動くようにした

2012/5/27
●実装
PDBFileReaderでHELIX/SHEET recordを読み込むコードを復活させた
Prot2ndryでの二次構造割り当てで，secondary2値で，sheetもs/e postfixをつけるようにした

●修正
Exception objectでvisibilityを設定するようにした．

●実装
PDBFileReaderで(calcしない場合は)HELIX/SHEET recordを読み込むようにした．
PDBFileWriterでHELIX/SHEET recordを書き出すようにした．

●実装
GUIから2ndry strを再計算できるようにした
GUIから2ndry strを編集できるようにした
2ndry str編集のundoを実装

●実装
QSCの読み書きで使用される型を，（フォーマット的にはPDBであるが）srctypeをpdbではなく別の何かしらにする
⇒PDBの場合と違ったdefaultに変更出来るように（Defaultで，calc 2ndry strはoff）
ただし，compressionは出来ない

●実装
anim/MorphMolを実装．(cuemol1のMolAnim相当)
MolAnimを実装（objectのpropertyを変化させるanimation用）

2012/6/1
●実装
Scripting interfaceの継承関係をscriptから知る必要が出てきたので，
instanceOf ( 内部ではLScriptable::implements() ）methodを実装．
regfunc()で，<qifname>のLWrapperのm_propdbに，@implement_<qifname>という値を入れる
⇒ 逆に，@implement_<qifname>がm_propdbにあったら，<qifname>を実装していると判断できる
ただし，これはinstanceがある場合にしか判断ができない．
クラス名だけから判断する必要があるケースの方が多かったので，
js wrapperを用いた方法を実装した（上記同様にwrapperに@implement_<qifname>というpropを定義する）

●実装
sub stream/pathが正しくqscファイルに書き出されるようになっていなかったので，
ropts内にsubsrcというelementを設けてその中に（stream名ごとに）src, alt_srcを書き出せるようにした．
qsys::Objectクラスで，basepathを用いた相対化にも対応させるようにした．

●修正
MSMSFileReaderのvertファイルを，substreamを使って読み込むように変更した．
（ただし古いvert_fileプロパティーを用いた指定方法も残した）

●実装
ShowHideAnim, SlideInOutAnim（表示非表示系のアニメーション）を実装

ShowHideAnim, SlideInOutAnimのGUIを実装

2012/6/11
●実装
animation rendering dialogでffmpegを使ってmovieまで作成するようにした．
（ただし，movie optionをいじっただけで全部再レンダリングしてしまうのであまり実用的でない）

●修正
shaderを使ったalpha blendingで，部分透明色を使うと表示がおかしくなるバグを修正．
（OglDisplayContext::color()の実装で正しくalphaが設定されていなかった．）

●修正 (重大！！)
visibilityのせいか，MacOS版でdynamic_castがちゃんと動かないケースがある(継承しているのにNULLが返る)
→gcc visibilityをoffにするautoconf optionをつけた．
(gcc visibilityは基本使わないことに)

●修正すみ？
animation: 複数propをtargetとするアニメーションを可能にする．
initiatorの決定方法に特別な実装が必要
（animobjに対象とするuid/propのうちどの組み合わせに対して
initiatorとしてふるまうべきか，分かる形でonPropInitを呼び出す必要が有る）

●修正すみ？
StreamManager::fromXML()/toXML()と，SceneXMLReader/Writerで
一部コード共通化した．（ただし部分的には無理なところもありそのままである）

●実装
blendpngにDPIを設定する機能も付けて，blendしないときもDPI設定用appとして用いる

●修正
xul/jsファイルの整理．toolsにツール的なものを移動．ribbon関連をtopbarに移す

●実装
qslにanimationを書き出せるようにする

●実装
renderer property editorでapply (or preview) buttonをつける
applyするごとに，prop change txnが作られる

●実装
Log window contentsをclearするjs methodとGUI menuを実装

2012/7/28
●修正
nvidiaのdriverでshaderが有効な状態でdrawPixelsをやると正常に表示されない場合がある（なぜかclippingで非表示になると，それ以降まったく表示されなくなる）
⇒Renderer::displayLabels()というmethodを設け，drawPixelsだけshaderを使用しない固定pipelineでrenderingするようにした
●修正
drawPixelsでalpha testを使用するようにした
●修正
MacOSX版を64bit build出来るようにした．
※１つめのnative widget表示時にサイズがおかしい状態でShow()を呼び出すとnative widgetが表示されない症状があったので，
Hide()にしておいて，Resize()が来た直後のShow()で初めて画面に表示するようにしたらうまくいった．

2012/7/29
●修正
anim-panel.jsで，パネル非表示にanimationありscene load⇒panel showをやると内容が読み込まれていなかった．
panel.onPanelShow()でtargetSceneChanged()を呼び出して，現在シーンにアタッチするようにすることで解決．
●修正
LWRendererもdrawPixelを呼び出すlabel類(VA_PIXELのDrawElem)をdisplayLabels()に移した．
※将来的にはtextureで実装すべきだが，そうした場合でも視行列変換が普通の3D objとは異なる（texture 1pix⇔view 1pix対応）ので
別methodによるrenderingは必要であろう．
●修正
QSCを読み込んだ場合，場合により（多分file open dialogのfileをdouble clickした場合）__currentが読み込まれない症状がみられた．
⇒Winの場合file open dialogのfileをdouble clickした場合,dialog close直後にwParamがLBUTTONDOWNになったWM_MOUSEMOVEが単発で送られてくる．
それによりMouseEventHandlerが誤動作して，最終的にmouseDragMoved eventが発生し，不必要に画面が回転したりしておかしなことになっていた．
⇒在り得ないstate(NONE)で，MouseEventHandler::move()が呼ばれた場合にfalseを返すように実装．

以上2.1.0.241 リリース

2012/8/6
●修正
Slide out animationの実行後のxform propertyがout状態で保たれてしまい，
次回animationが実行されるとき，対象rendererが遠くに行ってしまっている（xformはIにリセットされるべき）
→Hide時のonEndで，visible=falseにするだけでなく，xformをIにリセットするようにした
SlideInOutはvisibleのみ変更し，xformは効果の為に一時的に変更しているだけ，というスタンスをとる

●修正
FadeInがあるシーンで対象レンダラーを一度も表示することなくアニメーションを実行すると，
shadingがおかしくなる（半透明の金属光沢風）．
一旦表示してから，アニメーションを実行すると異常は起こらない．
→DisplayListにUseShaderAlphaフラグが継承されていなかった
→結果，color alphaとshader alpha両方が乗算され，不透明でも半透明になっていた．
OglDisplayListにUseShaderAlphaフラグを継承するように修正

●修正
secondary str toolのGUI(radio buttonによるwidgetのenable/disable)を修正した．

●修正
create symm objectを実行するときに，二次構造の再計算も行うようにした．

以上2.1.0.243 リリース


8/18

●実装
iOS版など，qslでのanimationのサポート(ES1にて・alpha対応無し)

●実装
STL形式書き出しを実装．

●修正
Mqo書き出しで，writCylを，RendIntDataのconvCylへ統合

●修正
Mqo書き出しでcameraNameが正常に設定されないために失敗するバグを修正

●修正
iOS版で、DisplayPopoverが残るバグを修正

●修正
iOS版で、Safariなどから開いたファイルは基本的にDocuments/Inboxに入るが、
Inboxの中身は起動時にscanしないような仕様になっていた。
それではウェブなどで開いたqslファイルはアプリを終了すると
(Inboxに残っているにもかかわらず)再度読み込めなくなってしまう。
→Inboxもスキャンするように仕様を変更した。

●修正
EditモードでDeleteしても、memory上のfile listからは削除されるものの
ファイルの実態は残っていた。そのため、次回起動すると、消したはずのファイルも出てきてしまう。
→Deleteすると(systemではない)ファイルも削除するようにした。

(iOS版 2.1.0.243 リリース)

○実装(未完成)
style追加のGUI

○実装(未完成)
style編集・色定義のGUI

2012/9/29
●実装
OpenGL shaderを強制的に使用しないようにするオプションを実装した．
⇒Gecko prefの cuemol2.ui.view.use-gl-shaderでqINativeWidget.useGlShader設定
  ⇒OglViewでOglViewCapのshader関連をを強制off

●修正
Material設定のたびにLOGが大量に出るのを修正

●実装
MolSurfCutter (CutByPlane2)でcross-sectionのみを生成するoptionを実装した
簡易UIも実装

2012/9/30
●修正
Object等の表示・非表示を切り替えるとクラッシュする場合がある

原因：
Rendererのdestroy(detachObjが呼ばれていない)⇒Scene保存⇒Undo情報削除⇒Rendererの実質delete
⇒Object listener listにrendへのptrが残る
（⇒メモリの再割り当て等の操作）
⇒表示・非表示切り替え⇒fire event⇒crash
という現象が起きていた．
(リリース版ではdeleteしたptrにアクセスしても即crashにはならないので，
crash再現にはdelete後にcopy/paste等の特定の操作が必要だった模様．
debug版ではdeleteしたptrにアクセスすると即crashになるので再現は容易だった)

修正：
⇒Object::destroyRenderer()で，detachObjを呼ぶように
（もともと呼ぶようになっていたが，なぜか2012/5/20にcomment outしている．原因は不明）
さらに，setSceneID(invalid_uid)も呼ぶようにした（Scene's listener listから削除するにはこの呼び出しが必要）


2012/11/17

●修正
BSPTreeのremoveNodesの後に削除nodeをnullに設定するのを忘れていたためdeleteしたnode参照が残るバグがあったので修正．
（⇒density map boundaryの設定でクラッシュするバグが修正された）

●実装
MacOSX版で，64bit版buildが正常に動くようにした．

以上2.1.0.250 リリース

2012/12/30
●修正
shell openがqscファイルしか対応していなかったのを改善．drag&drapと同じコードを用いるようにし，pdb等も開けるようにした（基本，拡張子で判断）

●修正
起動時コマンドライン引数に指定されたファイルも，上記同様drag&drapと同じコードを用いるようにし，pdb等も開けるようにした（基本，拡張子で判断）

●実装
workspace panel style context menuを表示させるようにした（実装はまだ）

●実装
style_editor，colorの実装，color(NamedColor定義)の追加・変更・削除を反映させるようにした．
●実装
color style変更のevent発生・再描画
NamedColorの解決キャッシュが各objectごとに分散していたので，appli globalにNameResolverの中にcache tableを作成した
⇒NamedColor定義変更の場合は，">color"という(UIでは作成できない)dummy style nameが変更されたというeventを発生
⇒NamedColor定義変更(">color")の場合は，再描画だけではなく，invalidateCache()で全cache entryを削除する
（効率は悪いが確実な方法）
⇒さらに，(style sheetの内容にかかわらず)styleChangedも呼び出す

2013/1/2

●実装
style_editor，selectionの実装，sel定義の追加・変更・削除を反映させるようにした．
内部styleがscene file内にserializeされるようにした (但し，読み込み可能なすべてのnodeが正しく書き出されるかは未チェック)
外部styleの(linkとしての)取り込み，書き出し(とlink化)を実装した．

●実装
pythonからの呼び出し(pybr)を実装した(unixのみ)．referenceとGCなどメモリ周りが正しく動くかは未チェック，要デバッグ
Gecko内在のadd-onの機能が正しく動くことを確認．Add-on managerのページを表示できるようにした．

●実装
Cartoon renderer property dialogの実装．ほぼ完了．

●実装
workspace_panelで，objectの表示順序変更を可能にした．(ui_order propertyとup/down buttonの実装)

2013/1/11
●実装
style_editor, color, selectionのadd/remove 時の挙動を使いやすいように変更

●変更
renderer作成時あるいは他の場面でも，coloringになるべく$molcolを使用するようにして，積極的にmol側のcoloringが使われるようにした．

●修正
workspace_panelのpaintメニューが正常に動かなかったのを修正

●修正
Mol surface generationでaltconfがあり，かつ原子の位置が微妙な場合にcrashする（PDB: 4HVC）

以上2.1.0.261 リリース

●修正
Animationのfade in/outでdestinationのalpha値を1以外に設定可能にした
●修正
Animation rendering dialogで，ffmpegのencodingにrawvideo encodingを追加した．また，command line optionのtextboxを編集可能にし任意のoptionを指定できるようにした．
●修正
サイクル再生用の動画作成を考慮し，最後のフレーム（＝最初のフレームと同じになる）をrenderingしないようにした．

以上2.1.0.262 リリース

2013/2/13
●実装
ObjWriterで書き出したときに，sceneからのlink先も，書き出した先のpathに書き換えられるようにした(writer.convToLink=trueにする)

●実装
create symm objectでsecondary strを再計算するのではなく，
originalからコピーしてくるように実装
mol coloringはdefaultになるように実装

2013/3/7
●修正
StyleMgrの変更でStyleMgr::getConfigの１，２引数の意味がひっくり返ってしまっていた．
実質使用していたのはPovDisplayContextからのみだったのでそこで影響が出た（pov出力のpreambleを使用したシーンが正しくレンダリングできない）
⇒ひっくり返して対応

●実装
cartoon rendererで，helix width modeというpropを設ける→太さを指定値で一定を可能にした
helix_waverというpropは残すが，helix_width_modeで保存されるため，非persistentにした．

2013/3/13
●修正
AtomIntrRendererでshow labelを変更しても則時に反映されないというバグを修正した

●実装
NameLabelRendererを削除できるAPIを実装した
すでにlabelが出ているatomをクリックするとラベルが消えるようにした

●実装
Anim modeでも，atom click/ctxt menuを使えるようにした

●実装
MouseEventHandler/XPCNativeWidgetレベルでのdouble clickを実装（要バグ出し）
DoubleClick時に，residue selectionをtoggleするようにした（pymol風の動作）

●修正
POV renderingで，line width scaleの計算方法がおかしかったので修正．
（zoomはheight方向のangstromなのに，widthとして計算していた．
出力イメージのサイズが分かっている場合は，現在viewのサイズではなく，そちらを使用して計算するように変更）

以上2.1.0.270 リリース

2013/3/17
●実装
ResidRangeSetを実装，double click時のresid sel toggleをchainにまたがっても可能に
Double clickによる残基レベル選択の方法を強化した．

2013/6/19
●修正
PDB2PQR/APBS dialogで実行が失敗した時のエラー処理を強化
●修正
mol superposition dialogで，重ね合わせに失敗してもdialogが閉じられないようにした

2013/6/28
●修正
MolMorphのframeに対して，alt_srcが正しく書き出されるようにした
MolMorphのframe読み込み時にエラー（ファイル無, atom no mismatchなど）が起きた場合，defaultの値（<this>と同値）が設定されるようにしてcrashを回避した

2013/6/30
●修正
LDOM2Nodeにdata sourceを保持できるようにした

2013/7/17
●修正
MolMorphのframeのcontentの読み込み方式を再考．
readerDetached()の仕組みは一応残した（全く使用されないことになったが）
object src以外から付随のデータを読み書き出来る枠組みを作った．
★node deserializeの時
nodeにsrc, srctype, data containerを保持するようにし，
node deserが完了したら，nodeをtraverseすることでdata load requestを収集し，
一挙にext/datachunkの読み込みを行うように実装．
★node serializeの時
同様にnodeにdata containerを保持するようにした．
nodeの構築が終わったら，nodeをtraverseすることでdata embed requestを収集し，
一挙にdatachunkの書き込みを行うように実装．（extについては，書き込み時は何も行う必要はない）
srctypeはdata containerが知っているので保持する必要がなかった．
srcはtraverseした時点では決まっていないので保持することができない
→datachunk割り当て時にsrcを再設定するmethodを新設した

●修正
style fileが外部リンクになっている場合に，qscを書き出した時にstyleが外部ファイルも書き出すようにした．
(cameraの場合は書き出されるようになっているので，同じ動作にした)

2013/7/22
●実装
MacのRetina display用に，View/native widgetのHiDPI display対応を行った．
(OpenGLに渡すpixel単位のパラメータと，API levelのdimension parameterの間にscale値を設定できるようにした．
→POV-Rayでのpixel値からworld座標系寸法への変換にも一応このメカニズム，特にdisplay contextのpixel scale値の使用が再利用できるはず．
現時点では，個別にPovDisplayContextが特有のscale値を持つようになっている．)

●修正
MacOS Xで，dockから出したときにnative widgetが隠れてしまって表示されない問題を解消．
restore (minimizedからのactivate)時に，hide/showを行うと解決 (なぜかshowのみでは×)

●修正
StyleSetをScriptable/SmartPtrにした．
create/destroy StyleSetをundo/redo可能にした
StyleSet add/removeのSceneEventを発生するようにした

StyleSetのmodification flagをScene.isModifiedで検査するようにした．
→

※Linked Object(Mol)の修正はembeddingを引き起こす(linkではなくなる)が，
StyleやCameraの修正はembeddingを起こすのではなく，保存時にlink先に書き出すようにする．
実用性を考えると，このように動作を変える方が現実的
（saveするたびにlinked styleがembeddedに戻るのは非常に不便）

●修正
style fileの外部リンク化あるいは埋め込み化がtransactionとして認識されるようにした．
→sourceプロパティのみのEditInfoを作成，undo/redo出来るようにした

●実装
Camera関連操作（create, destroy, modify）のUndo/Redoを実装した．
Cameraのfile-linked化のUndo/Redoを実装した．

-----
○TO DO
UIによるmol selectionの方法の改善
(一部実装中)

○TO DO
Link panelというのを作り，object, camera, styleなどのexternal linkを一元的に管理できるようにする．
（objectのリンク先変更書き出しと，Export的書き出しを別に扱えるようにするUIを考える）

○TO DO
workspace_panelで，複数選択できるようにする．→複数同時コピペ
※ただし，適切な組で複数選択されているときだけ，適切な操作が可能になる，で良い．
例えば，コピペできないものと出来るものが同時に選ばれている場合は，コピペの操作自体をできなくする．
複数選んだ場合プロパティー編集はできない．追加もできない．削除はすべて削除できる場合は可能，等々．

workspace_panelで，object/rendererはdrag&drop出来るようにする（⇒上下ボタンの廃止）
選ばれているものが同一階層でない場合は，drag&dropは無効化
treechildrenにdraggable=trueとondragstart=xxxを実装すればdrag開始はOK

object内にfolder(1階層のみ可)を作れるようにして，その中にrendererを入れたりできるようにする．
folderに対して行ったprop変更は，folder内のrenderer全てに反映されるように（可視不可視化くらいか？）


○問題点【かなり問題あり】
AtomIntrRendererのserializationのコードに問題がある．
（落ちる可能性＋正しく読み書きができていない）

○問題点
triangleからなるgeometryをlighting offで描画しても何も表示されない
ただし，現状ではそのような状況はないため，実際上は問題はない．
（本来ならべた塗が表示されるはずだが．．．）

○問題点
AnimObjのonEndがたまに呼ばれないことがある（特に最後のanimobjで）
最後のtimer eventがlostしているようだが，原因は不明（最後にNoopを入れることで回避は可能？）

○TO DO
iOS版・GLES2にしてshaderを使うように改造する必要あり

○問題点
Cartoonで，renderer毎にsplineを別々に計算しているので，2つのレンダラーを接続しているっぽく表示させることができない．
（Ribbonだとselectionに関わらず全体のsplineを計算しているため可能）

○TO DO
GUIからrenderer定義styleを編集できるようにする

○TO DO
warabi用のstyle setを作る

-----

○TO DO
読み込み：１つのQDFだけにして内部でファイルを見て何のQDFか判定して読み込むようにする
書き込み：もしあればQDF形式を選択可能にする

○TO DO
VBOのLINESは多くの場合，同じ属性の頂点が無駄に多く含まれる結果となっている．
軽量化にはindex arrayにして，同じ属性の頂点は１つにまとめる実装が必要．

○問題点
Streamのclose()がstreamのタイプによって挙動が異なる．→バグの原因になる
※できればすべてのstreamでclose()はstream実装に関するcleanupのみを行う実装にしたほうがよい．
（今の実装では，FormatIn/OutStreamの場合はimplのclose()を呼んでしまっている.
→formatingのsubclassではclose()を安易に呼び出すとバグのもとになる）

○問題点
qlib::InStream関連，ready()の位置づけが良くない．
ready()==trueは，少なくともread()>=0となる事を保証しているが，
そのために，PosixFileの実装でungetc()を使っている．
→ready()が呼び出される毎に，getc()/ungetc()が呼び出されて非効率的．
stdio的の!feof()的な位置づけにした方が良い．
→前回のread()がEOFを返したことを記憶しているだけ．
feof()==falseでも，fpの先はどうなっているか不明なので，
次回read()==EOFが返される可能性がある．

○問題点
paint entryのコピペ，移動のundo/redoが正常に動作しない
余計なエントリーが，最後尾に重複して追加される場合がある

○問題点
objectのvisible=trueはdefaultのはずなのに，qscに書き出されるとvisible="true"というのが付いてしまう

○問題点
Wbp/Mqo書き出しで，mesh (molsurf)にgradientがあると，ログにエラーが出て，
出来上がるmqoがgradientになっていない（色が急に変わる境界に．
ただしmqoはvertex毎の着色ができなかったかもしれないのでこれは仕方ないのかもしれない．
cuemol1での実装では，べた塗としても各頂点の色を混色していたのでその実装を正しく動くようにする必要がある．）

○TODO
ColoringPanel中のjavascriptも個々のdeckに関するものは別ソースに分離した方がメンテ・拡張性が高い．

○問題点【かなり問題あり】
ScrEventManager::fireNativeViewEventで落ちる．
イベントは，mouse dragによる回転，スラブなど様々．
symm分子を出しているときに落ちることが顕著なような気がするが，
再現性はとれていない．

○問題点
force field, IleのCD/CD1
qtlではCDに統一していた．PDB的にはCD1が正式らしい．
xml(cif)ではCD1で変換する必要がないが，PDBFileReaderから変換コードを除くと
移行期の対策としてのxmlとqtlの共存ができなくなる．
→非常に無駄ではあるが，synonymを用いて一時的にxmlでCD->CD1変換を行うようにする

○TODO
コピペをcontext menuからだけではなく，メインメニューやショートカットからもできるようにしたい．

○TODO
molviewのcontext menuをworkspaceのcontext menuに近づける．
クリックされているrendererに応じたメニューを出すようにすればよい．

○TODO
Module Managerを復活させて，bin moduleを作れるようにする．
（機能拡張を可能にするうえで必要？）

○TODO
SSM superposeのalignment生成コードバグfix(rlistのindexが負になる場合がある, 例：2R4R, 2RH1）

○問題点 【かなり問題あり】
RibbonRendererでHelix-end/Helix-startが隣接している部分で選択によりribbonを切断すると
開始部分（N端）に不要なflat capが生成されてしまう．

