newLISP で GUI する。。。または、CSV Editor の作成(解説編)

(以下は、 newLISP v 2.8.16 以上、または、guisever 1.42以上での話です。)

 さて、前回紹介した CSV Editor のスクリプトは、如何だったでしょうか?
 今のところ、動作は、

  • CSV(Comma-Separated Values)ファイルの読み書き
  • カレント・テーブルの破棄(閉じる)
  • テーブルのセルの編集
  • 行と列の挿入と削除
  • カレント・テーブルのクリア

 だけです。
 gs:tabbed-panega:table を割り付けてあるのが、CSV Viewer との大きな違い(笑)。
 さて、テーブルを区別するために、タブ毎のプロパティを *tabList* に入れてあります。
 *tabList* の要素は、もちろん、リストで、

(table filename (row column) flag)

 内訳は、

table    : テーブルID
filename : ファイル名(フルパス)
row      : 0 から始まる行番号
column   : 0 から始まる列番号
flag     : true なら変更なし、nil なら変更したかも。

 としています。テーブル番号を含めていないのは、リストの位置をテーブル番号として使っているからです。
 テーブルが切り替わると、

(define (tab-changed id tabID title tabPos)
  ;(println "id=" id " tabID=" tabID " title=" (base64-dec title) " tabPos" tabPos)
  (let (fname (base64-dec title))
    (if *currentCSV* (setf (lookup *currentCSV* *tabList* -2) (list *currentRow* *currentCol*)))
    (aif (ref fname *tabList*) (setq *currentCSV* (*tabList* (it 0) 0)))
    (setq *currentRow* ((lookup *currentCSV* *tabList* -2) 0)
          *currentCol* ((lookup *currentCSV* *tabList* -2) 1))
    (gs:set-text 'Status fname)
    (setq *tabName* fname)))

 関数tab-changed が動作して、*tabList* に今までのテーブルの状況(選択されている行と列の番号)を保存し、切り替わったテーブル用にグローバル変数 *currentXXX* を再設定しています。
 引数の tabID を使っていないのは、guiserver 1.42 では、gs:table を割り付けたタブからは、"null" が返るからです。guiserver 1.43 から テーブルID が返るようになります
 また、前回紹介したスクリプトは、flag を使っていなかったので、使ったバージョンを CSV-Editor.lsp にアップしてあります。
 ついでに、1.43用に直してもよかったのですが、多分これから改良していくことになるので、その際に(笑)。

 リストから CSV文字列への変換や、行と列の挿入と削除は、もうやったし、、、解説としては、こんなところ?

 以上、如何でしょうか?

No comments yet

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。