他のプロジェクトが片付いてないのにプログラムを作り始める

ファイラーである WinFM2000 (数年前に2008が出たみたいだが) は素晴らしいソフトであり手放せない。9割型問題はないが、気に入らない部分がファイルビューアに蓄積されていて最新版でも直ってない*1ので自分で作ることにした。表題に書いてあるとおりの状態だが...

コンセプト

  • wxWidgets でつくって Linux + X でも動くようにする
  • キーボード操作に特化する
  • マウス操作はファイルコピーのドラッグのみに対応する
  • ファイルビューアはタブ表示にする
  • ファイルを見るときに既に開いてたらそこのタブを更新する
  • 見ているファイルが更新されてるか調べる機能を付ける
  • エロ画像モードを付けるかもしれない
  • 文字入力フォームは等幅フォントにする (プロポーショナルで . をはさむとわかりにくいよね)

書いてみた

ファイル表示の部分は見る感じ、bitmap をごりごり描いてしまって、OS が提供している部品は使わないほうがよいみたい。各コマンドダイアログでなんとかさせる。

ここらへんの処理を wxWidgets のサンプルからとってきて書いてみる。が、ここ2月 C プログラムを書いてないので忘れている。困ったもんだ。つまりどころが Makefile のリンカのオプションを書き間違えるとか、 class の {} の最後に ; を入れ忘れるとか。C++ はあまり書かないからであろうか。 struct で入れ忘れることは最近はあまりない。(関係ないけど別件で久しぶりに union を使った)

class myframe : public mainframe
{
private:
public:
	myframe(wxWindow *parent) 
		:mainframe(parent)
	{
		wxBitmap t(400, 300);
		wxMemoryDC dc;
		const int fontsize = 9;
		const int fontnext = fontsize + 3;
		
		dc.SelectObject(t);
		dc.SetBackground(wxBrush(wxColour(0, 0, 64)));
		dc.SetBrush(wxBrush(wxT("YELLOW")));
		dc.Clear();
		dc.SetFont(wxFont(fontsize, wxFONTFAMILY_MODERN, 
			wxNORMAL, wxNORMAL, false, wxT("kmaru")));
		dc.SetTextForeground(wxT("YELLOW"));
		
		dc.DrawText( _T("This is anti-aliased Text."), 20, 5);
		dc.DrawText( _T("こんにちわ"), 20, 5 + fontnext);
		dc.SetBrush(wxBrush(wxBrush(wxColour(0, 64, 64))));
		dc.DrawRoundedRectangle(10, 5 + fontnext * 2, 200, 
			fontnext, 10 );
		dc.DrawText( _T("西武, 日ハム"), 20, 5 + fontnext * 2);
		
		fileinfo->SetBitmap(t);
	}
	virtual ~myframe(void)
	{
	}
};

結果はこんな感じで、Monospace の処理が怪しそうだがなんとかいけそうだ。ファイル一覧はわりと早く作れそうなんて考えてると大変なことになるかもね。

wxFormBuilder の各パーツの boarder の規定値が5ってどうにかならないかな。有用なのは 0 か 1 だと思うんだけど。

*1:jpegデコーダが変で赤が滲んでる, 色覚正常者には分からないのかな?