‘JavaScript’ カテゴリーのアーカイブ

qx.ui.table.Tableのデータ変更とチェックボックス

qooxdoo 0.6.2でサンプルに入ってたtableをちょっと変更してチェックボックスの変更ができるようにしてみた。

基本的には qx.ui.table.SimpleTableModel を作成して、 setColumnEditable で目的の列を true に設定すれば、変更可能になる。
チェックボックス表示にしたい場合は、列の値にbool値を入れて、レンダラをセットすればOK。

setDataCellRenderer(2, new qx.ui.table.BooleanDataCellRenderer());

この状態で値を変更しようとセルをダブルクリックすると、セルにtrue/falseの文字列が出てきてしまうので、CheckBox 用の CellEditorFactory をセットしてやる必要がある。

setCellEditorFactory(2, new qx.ui.table.CheckBoxCellEditorFactory());

そんな感じでまとめたのが以下。
マウス操作だけでテーブル内のチェックボックスを編集可能。

// table model
var tableModel = new qx.ui.table.SimpleTableModel();
tableModel.setColumns([ "ID", "テキスト", "チェック" ]);
var rowData = [];
tableModel.setData(rowData);
tableModel.setColumnEditable(2, true);

// table
var table = new qx.ui.table.Table(tableModel);
with (table) {
  set({ width: '100%', height: '100%', border:qx.renderer.border.BorderPresets.getInstance().thinInset });
  setMetaColumnCounts([1, -1]);
  getSelectionModel().setSelectionMode(qx.ui.table.SelectionModel.SINGLE_SELECTION);
  getTableColumnModel().setDataCellRenderer(2, new qx.ui.table.BooleanDataCellRenderer());
  // CheckBox 用の CellEditorFactory をセット
  getTableColumnModel().setCellEditorFactory(2, new qx.ui.table.CheckBoxCellEditorFactory());
  setColumnWidth(0, 80);
  setColumnWidth(1, 200);
  setColumnWidth(2, 100);
};
HorizontalBoxLayout_1.add(table);

これで解決…と行きたかったのだが、どうにも、
セルをダブルクリックして編集可能状態に→シングルクリックでオン/オフ切り替え→確定
という手順を踏まないといけない…めんどい。
何とかならんものか。

あとついでにセルのデータが変更されたときに何かする方法。

table.get("tableModel").addEventListener("dataChanged", function(e) {
  var col = e.get("data")['firstColumn'];
  var row = e.get("data")['firstRow'];
  var value = e.get("target").getValue(col, row);
  …
});

範囲が必要な場合は lastRow と lastColumn も使える。


qooxdoo 0.6.2に入れ替えてみた

0.6.1のqx.jsを単純に0.6.2に入れ替えてみた。
問題なく動いている模様。よしよし。

APIドキュメントがじわじわ充実してきた。


aptanaを入れてみた。

使い方がよくわからん…
とりあえずqooxdooのqx.jsを読み込ませてみたらかなり時間がかかった。
使いこなせれば開発効率上げられるかなー。
要検証。


qooxdoo 0.6.2 リリース

キタ━(゚∀゚)━!

WebKitとSafari 3.0をサポートに含むとのコト。
つまり、現在最新のWebKitに対応しているから、Safari 3.0で(多分)動くってコトですな。

あとはバグフィックスとちょっとした追加がぼちぼち。

Release 0.6.2 (2006-11-22)

※超意訳

追加

  • 最新バージョンのWebKitに対応したのでSafari 3.0も恐らく対応
  • 分割ペインのツマミをサポート
  • 拡張ComboBoxEx(実験的)
  • ユーザがサイズ変更できるResizerウィジェットの追加
  • イベントが中断されないようにIframeManagerの追加

…翻訳途中で飽きた。
あと機械翻訳。

変更

  • qooxdooをXHTML完全に互換性があるようにしました。 すべての大文字しているタグ名をそれらの小文字の異形に取り替えました。 それに従って、ソーススクリプト荷物を積む人を変更しました。
  • 負荷状態の質問をサポートするためにNativeWindowを改良しました。 「負荷」と「閉鎖」のための加えられたイベント。
  • マイクロソフトから最新の提案を尊敬するためにXmlHttpRequestを変更して、APIを関係づけました。
  • "focusHandler"へのParentの"focusManager"の特性に改名されます。
  • Function.prototype.closureを取り外しました。(Function.prototype.closureはフレームワークに一度も使用されたことがありません)。

修正

  • ComboBoxは、現在正しく無能にするのを支持します。
  • ドムスタイルシートAPIのダイナミックな木(項目のランタイム添加と削除)の主要なクリーンアップと改良のサポートを機能アップしました。
  • StringBuilderのクラスへの小さい方のひねり。
  • 押されたボタンの検出(マウス出来事)への小さい方の増進。
  • MenuManagerのわずかに改良された性能。
  • ComboBoxウィジェットを使用するアプリケーションにおける大いに改良された焦点取り扱い。
  • ComboBoxポップアップの位置の計算を改良しました。
  • ウィンドウのクラスは、内部の状態をよりよく経営するために改良されました。
  • innerTextに関するいくつかの問題対textContentは修理されました。(incl。 Webkitサポート)
  • 未成年者はデフォルト(<TAB>)取り扱いのpreventationで修理します。
  • 欠けている焦点に関するバグのための主要なフィックスは捜します。
  • 現在の子供であるときに、掘り出し物のa「焦点を合わせ-可能」親での主要な増進は障害があります。
  • () 失敗されるところでリモートな呼び出しがそれ以上要求するアボートがありません。
  • 未成年者はテキストにLabelウィジェットの取り扱いをひねります。
  • Imageを使用するとき、現れるように壊れているイメージを省略する小さい方の改良。
  • 表示する小さい方のひねりは、いくつかのまれなケースにおけるJavaScript誤りを省略するために列を作ります。
  • Fontへの固定TextFieldの依存は属します。
  • Windowのクラスでイベント伝播問題を修理しました。
  • リリース/ブロックが作成されたブロッカーウィジェットなしで実行されるなら、ClientDocumentを修理しました。

デモ

  • 小さい方の追加と調整をしました。
  • Commandのクラスの特徴を示すために例を加えました。
  • どのように(一時)複雑なアプリケーションにおけるコマンドを無効にする内蔵の特徴を使用するかを示すために例を加えました。

ツール

  • 両方をサポートする新しいコンパイラ、きれいな印刷、および圧縮を加えました。
  • 取り除かれた老木とトークンコンパイラ(新しい議論のために骸骨をきれいにする)はジェネレータスクリプトに移行サポートを動かしました。
  • 木の加えられたサポートは移行を基礎づけました。 ソースコードにそれを再コンパイルする前に、これは構文木の上で複雑な操作を許します。
  • ツールディレクトリのディレクトリ構造を再編成しました。
  • フレームワークと骸骨のMakefilesに「フィックス」と「きれいな」目標を加えました。 警告、これらの目標は直接クラスファイルを変更します!
  • 交差しているプラットホームサポートに関するいくつかのMakefilesへの小さい方の増進(いくつかの式を見つけコマンドに取り替えます)

API

  • 織物サポートをAPI javadocドキュメンテーションに追加しました。
  • 新しい窓の中で開くために自動的にAPIドキュメンテーションの外部のリンクを修理してください。
  • 加えられたイベントはqooxdooのクラスでAPIドキュメンテーションに発火しました。
  • APIビューアーの左の枠の形式に関する小さい方のひねり。
  • メソッド記述のintial視点のための最初の文の抽出を改良しました。
  • 倍数のサポートは、paramsのためにタイプして、戻ります。 JavaDocでは、「{Type1| Type2?DefaultValue}」という以下のフォームでDeclaratedしました。
  • 未成年者は原始のタイプに検出をひねります。
  • 多くのコアのクラスとメソッドのドキュメンテーションを高めました。

とりあえず今作ってるヤツのqx.jsを0.6.2に入れ替えてみよう。
結果は次回。


qooxdooのデバッグログウィンドウを出さないようにする

qx.dev.log.Logger.ROOT_LOGGER.removeAllAppenders();

イェァ!


qooxdooとprototype.jsのコンフリクト問題

qooxdoo 0.6.1とprototype.js 1.4.0を同時に読み込んだ場合、読み込んだだけで、終了時にエラーが発生する。

とりあえず qx.js の最初の方を見てみると

$=["","appearance","enableDebug",

で、$がprototype.jsとモロかぶり。
今回使わなかったから遭遇しなかったけど、多分 $() が動かないハズ。

めんどいので、さっくりと全部置換してしまいましょう。
qooxdooいじって壊すとワケがわからないことになりそうなので、prototype.jsの方を置換することに。

$( を $ELE( とかに全置換。

解決。
$ELE() はダサいとか言うな。


PivotのWYSIWYGエディタにスタイルセレクタを。(後編)

前回見当違いなプラグインを追いかけてしまったので、今回は別のアプローチで。

tiny_mce_gzip.phpが返すjsを調べると

                var defVals = {
//                theme_advanced_buttons1 : “bold,italic,underline,strikethrough,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,styleselect,formatselect”,
//                theme_advanced_buttons2 : “bullist,numlist,separator,outdent,indent,separator,undo,redo,separator,link,unlink,anchor,image,cleanup,help,code”,
//                theme_advanced_buttons3 : “hr,removeformat,visualaid,separator,sub,sup,separator,charmap”

theme_advanced_buttons1 : “undo,redo,cut,copy,paste,pastetext,pasteword,search,replace,separator,bold,italic,underline,strikethrough,sub,sup,link,anchor,unlink,pivot_image,pivot_popup,pivot_download,separator,bullist,numlist,outdent,indent,separator,forecolor,backcolor”,
                theme_advanced_buttons2 : “justifyleft,justifycenter,justifyright,separator,formatselect,separator,tablecontrols,separator,hr,removeformat,charmap,cleanup,code”

                };

こんなデフォルト値が。
…元のやつコメントアウトされてますな。
styleselectというのが、目的の物だったらしい。

\extensions\hooks\pre_editor_wysi.php を編集して、

theme_advanced_buttons2 : “justifyleft,justifycenter,justifyright,separator,styleselect,formatselect,separator,tablecontrols,separator,hr,removeformat,charmap,cleanup,code”

theme_advanced_buttons2_add : “separator,styleselect”,

を追加。汎用性を考えると下の方が良さげ。
あと、

theme_advanced_styles : “Code=code;Link=link”,

も追加。「表示名=クラス名」で列挙できます。

このPHPが読んでるファイルはどうやら \extensions\hooks\editor_wysi\themes\advanced\editor_template.js らしい。
こっちを編集しても良いかと。
どっちを書き換えるのがベターでしょうね…テーマだから、editor_template.js かなぁ…

解決。超便利。

あと、改めて2.0.5.1のファイルを落としてきたらstyleプラグイン同梱してなかったわ…

追記。
editor_template.js に書いたらstyleselect自体は表示されたけど、theme_advanced_stylesが反映されなかった…
分散するのもアレなので pre_editor_wysi.php の方に記述でFA。


PivotのWYSIWYGエディタにスタイルセレクタを。(前編)

Pivotのエントリ編集画面の拡張ビューで、ソースコードやリンクを簡単に編集したい。
いちいちHTML表示にしてp要素にclass=”code”とか追記するのはさすがに面倒になってきたので。

Pivotで使われているTinyMCEは、TinyMCE本家のデモを見る限りスタイルというリストボックスがあって、そこで選択した値がclass属性として指定される。
Pivot添付のTinyMCEでは、スタイルが設定できないのでこれを何とかしてみようというのが今回の試み。

スタイルを適用すると、ソースはこうなる。

<span class=”header1″>Test header 1</span><br />
<span class=”header2″>Test header 2</span><br />
<span class=”header3″>Test header 3</span><br />

うむ。便利だ。
で、どうもstyleプラグインというものを読み込めばいいらしい。

※注意:実際にはstyleプラグインではなかったので、やり方を知りたい人は後編を参照してください。

Pivot付属のTinyMCEでは入ってなかったので、本家から落としてくることにする。
付属はバージョン2.0.5.1だけど、とりあえず現時点最新の2.0.8を取得。

解凍した tinymce_2_0_8\tinymce\jscripts\tiny_mce\plugins\style をまるっと \extensions\hooks\editor_wysi\plugins にコピー。

で、Pivotの管理画面の方を編集。
\extensions\hooks\pre_editor_wysi.php を開いて、プラグインマニュアルを参考に、

plugins : “table,searchreplace,contextmenu”,

を、

plugins : “table,searchreplace,contextmenu,style“,
theme_advanced_buttons1_add : “styleprops”,

に変更。

エラー。

どうもimportPluginLanguagePack関数に第二引数を渡していないのが問題のようなので、\extensions\hooks\editor_wysi\plugins\style\editor_plugin.js を開いて

tinyMCE.importPluginLanguagePack(‘style’,’en’);

,’en’を追加

さぁどうだ!よし、エラーなし!

欲しかったのはこれじゃなーい!!
_| ̄|○..

続きは次回


WSHでファイルダイアログを使ってExcelファイルを開く

前回の自動化について。
vbsファイルにドラッグアンドドロップでExcelファイルを指定させるようにすると、まぁ、一般ユーザにわかりにくいかなと思ったので、ファイル選択ダイアログを出す形式にした。
CommonDialogで検索すると、MSComDlg.CommonDialogを使った方法が多く出てくるけど、これはライセンスの問題でVBをインストールしていないと使えないようです。

で、OSがXP以降ならMSComDlg以外のCommonDialogが使える模様。

とりあえず、ダイアログを出して、Excelファイルを開くところまで。

' ファイル選択ダイアログ
Set objComDlg = WScript.CreateObject("UserAccounts.CommonDialog")

Dim BaseDir
BaseDir = objShell.CurrentDirectory

Set objExcel = WScript.CreateObject("Excel.Application")
objExcel.Visible = False

' Excelファイルを開くためのダイアログを出す
objComDlg.Filter = "Excel File|*.xls"
objComDlg.InitialDir = BaseDir & "\"

If objComDlg.ShowOpen Then
   
    Set objWorkbook = objExcel.Workbooks.Open(objComDlg.FileName)
   
    …


qooxdooのIFrameにnameを設定する

qx.ui.embed.IframeでIFrameを作ると、divの下にIFrameが作られる。
やりたい事としては、IFrameにnameを設定して、フォームの飛び先にしようとしているのですが。

で、調べてみたらqx.ui.embed.IframeにframeNameというプロパティがあるので、それを設定すればいいという事が判明。

var Iframe_1 = new qx.ui.embed.Iframe();
Iframe_1.set({ frameName: "IFrameUploadImage", visibility: false });

これで画面遷移なしでファイルアップロードができる。