オープンソースなアウトラインプロセッサを一から作る日記

今日もDDLを

テーブル構造をちょっと弄って、サンプルのINSERT文も更新(rev.54)。行数としては数行だけど、頭の中の整理ができてきたので気持的にはだいぶ進みました。以前からアウトラインプロセッサにありがちな「ノード=タイトル+本文」という構造はおかしいので…

空のDBかどうかの判定

久しぶりに更新。pysqliteで動的にDBを作成したりする場合、新規につくられたものか既存のものかをどうやって判定しようかと考えて、以前は以下のコードにしていました。 self.con = sqlite.connect(path) cur = self.con.cursor() cur.execute("SELECT coun…

wxPythonとXRCとAUIの関係

ドッカブルウインドウってwxでできるんだろうか? と調べていて、wxAUIほにゃららというやつを使えばできることを知りました。早速wxPythonでやってみる。test1.py #!/usr/bin/python # -*- coding: UTF-8 -*- import wx import wx.aui class MyFrame(wx.Fra…

これからの予定

半年ぶりの更新になります。・・・うーんと、何やってたんだっけ? と、自分のブログを読み返しながら思い出しました。Gtkからwxに変更したのは覚えてる。で、wxで行けそうってことになったので脱線してバックエンドをSQLにするテストをやってる最中に、突然…

QuickWikiまだやってる

listまでやってみた。ここまでやって感じることは、チュートリアル自体の題材や説明の仕方は、Djangoのチュートリアルの方がわかりやすいな、ということ。QuickWikiは確かにエッセンスが凝縮されてるのでその後の応用の際に参考になりそうなんですが、最初の…

QuickWikiやってる途中

引き続きQuickWikiチュートリアルをやっています。 もともとの趣旨からはかなり離れたところにいるわけですが、最終的には戻ってきますよ。QuickWikiに関しては、すべてのコードを理解しながらやろうと思ったんですが、ちょっと時間がかかりすぎそうなのでざ…

Pylonsでいこう

またまた久々の更新です。 前回の日記に書いた通り(最終的にどうなるか未定ですが)、Webベースのソースも書いてみようということで、その辺の調査をやっています。当初はフレームワークにDjangoを使おうかと思っていたんですが、どうもRuby on Railsと同じ…

サブプロジェクトIWAISOME

しばらくぶりの更新です。が、ソースは書いてませんw新しいサブプロジェクトIWAISOMEを構想中です。ここまで書いてきてAOISORAとして公開しているものは、いわゆる従来のツリー型アウトラインプロセッサで、巷にいくらでもあふれているものです。これは誤解…

久々コミットと近況

rev.51でSQL文とかコミットしました。・・・と言っても実はコミットし忘れてた分なので、2週間くらい前のソースです。今漠然と考えていること。 テキストオンリーじゃダメだ。マニュアルやまとまった文章を書くには図や表も扱わざるをえない。そう。最低でも…

続・SQLiteのトリガとか

先日タイムスタンプのためのAFTER INSERTトリガを書いたのですが、更新時のタイムスタンプ更新はどうするんだろう? と思い、今回ためしにAFTER UPDATEトリガで書いてみました。なお、pythonソース内で読みやすいようにSQLは大文字で統一することにしました…

今後のAOISOME

Rev.48で一旦AOISOMEをリセットしました。現在AOISOME=AOISORA=0.1.0です。 AOISOMEはこれから新境地へ向かいます。これからやることは正直自分自身にもよくわかっていませんw。これまでのアウトラインプロセッサにはなかった新しいアイデアを試してみるつも…

AOISORAのTODOまとめ

しばらくAOISORAは停滞しますので、TODOを書いておきます。 * エディタ本文の折り返し * ショートカット * 全機能のメニューからのアクセス * Aboutダイアログ * ノードのコピー/ペースト最小限のアウトラインプロセッサとして必要なのはこんなところでしょ…

AOISORA-0.1.0リリースしました。

ちょこっといじって現在Rev.46。これをAOISORA-0.1.0としてリリースしました。今回はダイアログがついて基本機能はそろった(!?)ので、マイナーバージョンをはじめて上げました。

SQLiteのトリガとか

import sqlite3 はPython2.5しか受け付けないハズなので、2.4でも動作するように以下のようにしました(ただし動作確認してません)。2.4ではpysqlite2が必要です。 try: import sqlite3 as sqlite except: import pysqlite2 as sqlite それからSQLiteにトリ…

SQLite

AOISOMEに追加する新機能はバックエンドにRDBを使用します。最終的にどうするかはともかく、当面はSQLite直叩きでやることにします。ORマッパーにSQLAlchemyを使おうかとも思ったんですが、もともとORマッパーが好きではないのと、普段からSQLを書きなれてい…

これからの計画

思いのほか完成っぽい匂いがしだして来たので、ちょっとどうしようか迷っています。ダイアログをつけたので、クリップボードやショートカットなどへの対応をすませればとりあえずシンプルなアウトラインプロセッサとしては使える形になります。しかし、もと…

ダイアログをつけてみた

今日からはwx版がGtk版を追い越します。開くダイアログと保存ダイアログをつけてみました。ダイアログをつけると完成したっぽく見えてしまうし実際使えてしまうのであまり早い段階でつけたくなかったんですが、やはりいろんなファイルを作ってみてテストする…

ノードの削除とかファイル名の整理とかゴニョゴニョ

* テストしている最中にないと不便なので、ノードの削除機能を追加しました。 * ときどきAOISOME←→AOISORA間でソースの移動をやる関係で、ファイル名やファイル内にaoisora,aoisomeという文字列を入れるのをやめ、aoisoに統一しました。 * メニューを徐々に…

親を子にドロップしたらダメですよw

さて、次は何をやろうか・・・。と思っていたところに重大なバグ発見。 * 自分の子供にドラッグするとノードが消える。そうですね。仕様からして親を子供にドロップするのは違反ですね。例のごとく定石があるのかどうか知らないまま自前で処理を書いてみます…

0.0.5リリースしました。

Windowsバイナリでも問題なく動作させるために、GUIを全面的に書き直したバージョンです。 見た目や機能的には0.0.4とは全然変わってませんが、中身はほとんど書き直しています。ダウンロードはこちらから http://sourceforge.jp/projects/aoiso/

追いついた!?

さて、これでGtk版に追いついたな?ちょっとバグ直したり、py2exe用のスクリプトを追加したりして現在Rev.42。これを0.0.5としてリリースします。Windows版バイナリもwx版で。

GtkのデフォルトTreeView風

TreeCtrlのデザインをGtkのデフォルトと同じように選択ノードを行ごとハイライトするようにしてみました。あとwx.TR_TWIST_BUTTONSというのもやってみました。style = wx.TR_HIDE_ROOT + wx.TR_TWIST_BUTTONS + wx.TR_NO_LINES + wx.TR_FULL_ROW_HIGHLIGHT +…

続・ドロップ先の情報

こんな感じにしてみました。 def __dropPointStatus(self, flag): if flag & wx.TREE_HITTEST_ONITEMBUTTON == wx.TREE_HITTEST_ONITEMBUTTON: return 0 elif flag & wx.TREE_HITTEST_ONITEMICON == wx.TREE_HITTEST_ONITEMICON: return 2 elif flag & wx.TR…

ドロップ先の情報

HitTest()の返す値はドキュメントにありました。http://wxwindowsjp.sourceforge.jp/docs/html/wx/wx399.htm#wxtreectrlhittest 与えられた点の下に、何か項目があれば、ツリー項目の id と特別な flags 情報を返す。 Calculates which (if any) item is und…

Tree内でのドラッグアンドドロップ

まずはTreeStore内に汎用的なノードの移動メソッドを作ってみました。 def moveNodeToChild(self, src_item, dest_item): print "moveNodeToChild" node = self.get_value(src_item,c.COL_OBJECT) new_item = self.append(dest_item) self.set_value(new_ite…

TreeCtrlについて

覚えているうちにメモ。ちょっと前にWindows版のXRCedを開いてみて気づいたのですが、Windows版XRCedにはTreeListCtrlというウィジェットがありました。なぜLinux版XRCedに無いのかは不明ですが、これはGtkTreeViewと同じくColumnを持っているTreeCtrlのよう…

ノードのドラッグアンドドロップ

wxのドキュメントを読んでみたところ、EVT_TREE_BEGIN_DRAGとEVT_TREE_END_DRAGというのを使えばできそうです。 self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.onTreeBeginDrag) self.Bind(wx.EVT_TREE_END_DRAG, self.onTreeEndDrag) これの中身と、実際の移動用…

ファイル保存のバグ

昨日のバージョンでは既知の問題として、保存すると一階層深くなる問題がありました。 この原因はだいたい予測できていたのですぐに対応できました。原因はこれです。 #rootのiterを返す def get_iter_root(self): return self.treeCtrl.GetRootItem() これ…

ノードの追加

wx版にノードの追加機能を実装しました。正味は10行ほどなんですが、Gtk版とwx版をできるだけ対称型にしたいのと、それぞれのモジュールができるだけ疎結合になるようにということであちこち書き換えました。一時はTreeView(TreeCtrl)のメソッドにも互換性を…

AOISORAにwxWidgets版

AOISOMEのソースをマージしました。これからは 起動スクリプトを統合しオプション指定でwxWidgetsでもGtkでも起動できるようにする。 python aoisora.py -gtk見たいな感じで。 Gtk版でしか実装されていない機能を実装し追いつく。 こんな感じで。今日中にで…