オープンソースなアウトラインプロセッサを一から作る日記
テーブル構造をちょっと弄って、サンプルのINSERT文も更新(rev.54)。行数としては数行だけど、頭の中の整理ができてきたので気持的にはだいぶ進みました。以前からアウトラインプロセッサにありがちな「ノード=タイトル+本文」という構造はおかしいので…
久しぶりに更新。pysqliteで動的にDBを作成したりする場合、新規につくられたものか既存のものかをどうやって判定しようかと考えて、以前は以下のコードにしていました。 self.con = sqlite.connect(path) cur = self.con.cursor() cur.execute("SELECT coun…
ドッカブルウインドウってwxでできるんだろうか? と調べていて、wxAUIほにゃららというやつを使えばできることを知りました。早速wxPythonでやってみる。test1.py #!/usr/bin/python # -*- coding: UTF-8 -*- import wx import wx.aui class MyFrame(wx.Fra…
半年ぶりの更新になります。・・・うーんと、何やってたんだっけ? と、自分のブログを読み返しながら思い出しました。Gtkからwxに変更したのは覚えてる。で、wxで行けそうってことになったので脱線してバックエンドをSQLにするテストをやってる最中に、突然…
listまでやってみた。ここまでやって感じることは、チュートリアル自体の題材や説明の仕方は、Djangoのチュートリアルの方がわかりやすいな、ということ。QuickWikiは確かにエッセンスが凝縮されてるのでその後の応用の際に参考になりそうなんですが、最初の…
引き続きQuickWikiチュートリアルをやっています。 もともとの趣旨からはかなり離れたところにいるわけですが、最終的には戻ってきますよ。QuickWikiに関しては、すべてのコードを理解しながらやろうと思ったんですが、ちょっと時間がかかりすぎそうなのでざ…
またまた久々の更新です。 前回の日記に書いた通り(最終的にどうなるか未定ですが)、Webベースのソースも書いてみようということで、その辺の調査をやっています。当初はフレームワークにDjangoを使おうかと思っていたんですが、どうもRuby on Railsと同じ…
しばらくぶりの更新です。が、ソースは書いてませんw新しいサブプロジェクトIWAISOMEを構想中です。ここまで書いてきてAOISORAとして公開しているものは、いわゆる従来のツリー型アウトラインプロセッサで、巷にいくらでもあふれているものです。これは誤解…
rev.51でSQL文とかコミットしました。・・・と言っても実はコミットし忘れてた分なので、2週間くらい前のソースです。今漠然と考えていること。 テキストオンリーじゃダメだ。マニュアルやまとまった文章を書くには図や表も扱わざるをえない。そう。最低でも…
先日タイムスタンプのためのAFTER INSERTトリガを書いたのですが、更新時のタイムスタンプ更新はどうするんだろう? と思い、今回ためしにAFTER UPDATEトリガで書いてみました。なお、pythonソース内で読みやすいようにSQLは大文字で統一することにしました…
Rev.48で一旦AOISOMEをリセットしました。現在AOISOME=AOISORA=0.1.0です。 AOISOMEはこれから新境地へ向かいます。これからやることは正直自分自身にもよくわかっていませんw。これまでのアウトラインプロセッサにはなかった新しいアイデアを試してみるつも…
しばらくAOISORAは停滞しますので、TODOを書いておきます。 * エディタ本文の折り返し * ショートカット * 全機能のメニューからのアクセス * Aboutダイアログ * ノードのコピー/ペースト最小限のアウトラインプロセッサとして必要なのはこんなところでしょ…
ちょこっといじって現在Rev.46。これをAOISORA-0.1.0としてリリースしました。今回はダイアログがついて基本機能はそろった(!?)ので、マイナーバージョンをはじめて上げました。
import sqlite3 はPython2.5しか受け付けないハズなので、2.4でも動作するように以下のようにしました(ただし動作確認してません)。2.4ではpysqlite2が必要です。 try: import sqlite3 as sqlite except: import pysqlite2 as sqlite それからSQLiteにトリ…
AOISOMEに追加する新機能はバックエンドにRDBを使用します。最終的にどうするかはともかく、当面はSQLite直叩きでやることにします。ORマッパーにSQLAlchemyを使おうかとも思ったんですが、もともとORマッパーが好きではないのと、普段からSQLを書きなれてい…
思いのほか完成っぽい匂いがしだして来たので、ちょっとどうしようか迷っています。ダイアログをつけたので、クリップボードやショートカットなどへの対応をすませればとりあえずシンプルなアウトラインプロセッサとしては使える形になります。しかし、もと…
今日からはwx版がGtk版を追い越します。開くダイアログと保存ダイアログをつけてみました。ダイアログをつけると完成したっぽく見えてしまうし実際使えてしまうのであまり早い段階でつけたくなかったんですが、やはりいろんなファイルを作ってみてテストする…
* テストしている最中にないと不便なので、ノードの削除機能を追加しました。 * ときどきAOISOME←→AOISORA間でソースの移動をやる関係で、ファイル名やファイル内にaoisora,aoisomeという文字列を入れるのをやめ、aoisoに統一しました。 * メニューを徐々に…
さて、次は何をやろうか・・・。と思っていたところに重大なバグ発見。 * 自分の子供にドラッグするとノードが消える。そうですね。仕様からして親を子供にドロップするのは違反ですね。例のごとく定石があるのかどうか知らないまま自前で処理を書いてみます…
Windowsバイナリでも問題なく動作させるために、GUIを全面的に書き直したバージョンです。 見た目や機能的には0.0.4とは全然変わってませんが、中身はほとんど書き直しています。ダウンロードはこちらから http://sourceforge.jp/projects/aoiso/
さて、これでGtk版に追いついたな?ちょっとバグ直したり、py2exe用のスクリプトを追加したりして現在Rev.42。これを0.0.5としてリリースします。Windows版バイナリもwx版で。
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…
まずは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…
覚えているうちにメモ。ちょっと前に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)のメソッドにも互換性を…
AOISOMEのソースをマージしました。これからは 起動スクリプトを統合しオプション指定でwxWidgetsでもGtkでも起動できるようにする。 python aoisora.py -gtk見たいな感じで。 Gtk版でしか実装されていない機能を実装し追いつく。 こんな感じで。今日中にで…