2017-09-15 7 views
0

documentation for Fl_Tree in FLTK 1.3.4は言う場合:Fl_TreeコールバックはFL_WHEN_RELEASE

コールバック()が呼び出されたときに()

  • FL_WHEN_RELEASEの値に応じ - マウスの左ボタンが離されたときにコールバックが呼び出さ項目
  • FL_WHEN_CHANGED - コールバックは、マウスの左変化選択状態
呼び出さ3210

しかし、マウスが離され、両方の違いがわからない場合はコールバックを呼び出すことができません。何か案は?

#include <FL/Fl.H> 
#include <FL/Fl_Double_Window.H> 
#include <FL/Fl_Tree.H> 

static void cb_(Fl_Tree*, void*) 
{ 
    printf ("callback\n"); 
} 

int main() 
{ 
    Fl_Double_Window* w = new Fl_Double_Window(325, 325); 
    Fl_Tree* o = new Fl_Tree(25, 25, 255, 245); 
    o->callback((Fl_Callback*)cb_); 
    o->when(FL_WHEN_RELEASE); 
    o->add("foo/bar"); 
    o->add("foo/baz"); 
    o->end(); 
    w->show(); 
    return Fl::run(); 
} 

これは出力がFL_WHEN_RELEASEが設定されている場合でも、すべての変更の「コールバック」スニペット。

答えて

1

ダウンロードしたディストリビューションは、test/input.cxxとtest/tree.cxxを見てください。両方とも選択時に異なるテストがあります。

WHEN_CHANGEDは、ボックス、ブラウザ、および表の編集ボックスでのみ意味があります。入力時にデータを確認できます。これはWHEN_RELEASEでは発生しません。他のすべてのウィジェットでは、実質的に違いはありません。

編集

たびに発射するリリースのためには、3つのオプション

  1. の一つは、ソースFL_Tree.cxxを変更があります。 FL_Tree :: selectを探します。 alreadySelectedをfalseに変更します。
  2. あなたがソースを見れば、ライブラリが10301に設定FLTK_ABI_VERSIONで構築されている場合は、同じルーチンでは、さらに下に、それは

    #if FLTK_ABI_VERSION >= 10301 
    

    言う、それが再選択を呼び出しますが、全体もあるがこの#defineが設定されているときに実行される他の要素の負荷は、すべてのウィジェットに影響を与えるため、設定してください。

  3. #if FLTK_ABI_VERISONとFL_Tree :: selectの対応する#endifをコメントアウトしてください。

+0

私はテスト/ツリーの例も試したことがあるはずです。だからここでドキュメントが間違っていると言いますか? ** FL_WHEN_RELEASE - アイテム上でマウスの左ボタンが放されたときに呼び出されるコールバック** – Andy

+0

これらはどちらも正しい - それは単なるコンテキストです。ツリービューでは、項目を部分的に選択することはできないため、変更と解放の動作は同じです。編集ボックスでは、項目が部分的に選択され、異なる動作をすることができます。 – cup

+0

しかしFl_Treeでは、既に選択されているアイテムがクリックされた場合、実際には違いが生じます。以前に別のアイテムが選択されていた場合は、FL_WHEN_CHANGEDのコールバックが必要です(選択が変更されているため)。しかし、すでに選択されている項目が再度クリックされた場合、FL_WHEN_RELEASEのコールバックを期待します。 – Andy