3.3.4 TreeView

 On Motif++ 1.0.1, you can write a TreeView application based on xmTreeWidgetClass (Open Motif 2.2 and later) as shown below.
The following MainView class is an example to display a tree of some subnodes of PushButtons or Labels.
Note:
1. Define your own top level application view class(MainView) to be a subclass of OZ::ApplicationView class.
2. Define a member vairlable for Tree class.
3. Define a constructor to create the instances of Tree, and add nodes (PushButtons or Labels) to the tree instance.
4. Define calllback method(pushed) for the PushButtons on the nodes.
5. In main function, create an instance of your OZ::Application class, and an instance of your own application view class(MainView).
6. Call realize method of the instance of the application view.
7. Call run method of the instance of Application to enter an event loop.





//
//Tree.cpp
//Copyright (c) 2015 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED.

#include <oz++/Locale.h>
#include <oz++/DirectoryScanner.h>

#include <oz++/motif/ApplicationView.h>
#include <oz++/motif/ScrolledTree.h>
#include <oz++/motif/Label.h>
#include <oz++/motif/PushButton.h>
#include <oz++/motif/CompoundString.h>
#include <oz++/motif/Color.h>

namespace OZ {

class MainView :public ApplicationView {
private:
  SmartPtr<Tree> tree;

  void   pushed(Action& action)
  {
    View* sender = (View*)action.getSender();
    XmString xms;
    sender -> get(XmNlabelString, &xms);
    CompoundString cs(xms); 
    char* name = cs.unparse();
    printf("Pushed node=%s\n", name);
    XtFree(name);
  }

 
public:
  MainView(Application& applet, const char* name, Args& args)
  :ApplicationView(applet, name, args)
  {
    Color color(this);
    Args ar;
    ar.set(XmNbackground, color.allocNamedColor("white")); 
    tree = new Tree(this, "", ar);
    
    ar.reset();
    ar.set(XmNbackground, color.allocNamedColor("pink")); 
    View* root = tree -> addLabel(NULL, "CommonObject", ar);

    ar.reset();
    ar.set(XmNbackground, color.allocNamedColor("lightgreen")); 
    View* primitive = tree -> addLabel(root, "Primitive", ar);

    ar.reset();
    ar.set(XmNbackground, color.allocNamedColor("lightblue")); 
    View* composite = tree -> addLabel(root, "Composite", ar);

    ar.reset();
    View* label     = tree -> addPushButton(primitive, "Label", ar);

    ar.reset();
    View* combob    = tree -> addPushButton(primitive, "ComboBox", ar);

    ar.reset();
    View* pushb     = tree -> addPushButton(label, "PushButton", ar, 
                           this, (Callback)&MainView::pushed);

    ar.reset();
    View* scrollb   = tree -> addPushButton(primitive, "ScrollBar", ar,
                           this, (Callback)&MainView::pushed);
    ar.reset();
    View* text      = tree -> addPushButton(primitive, "Text", ar,
                           this, (Callback)&MainView::pushed);

    ar.reset();
    View* textf      = tree -> addPushButton(primitive, "TextField", ar,
                           this, (Callback)&MainView::pushed);

    ar.reset();
    View* drawnb      = tree -> addPushButton(primitive, "DrawnButton", ar,
                           this, (Callback)&MainView::pushed);

    ar.reset();
    View* manager   = tree -> addLabel(composite, "Manager", ar);

    ar.reset();
    View* mainw     = tree -> addLabel(manager, "MainWindow", ar);

    ar.reset();
    View* rowColumn = tree -> addLabel(manager, "RowColumn", ar);

    ar.reset();
    View* scrolledw = tree -> addLabel(manager, "ScrolledWindow", ar);

    ar.reset();
    View* hierarchy = tree -> addLabel(manager, "Hierarchy", ar);

    ar.reset();
    View* treev =  tree -> addLabel(hierarchy, "Tree", ar);
  }

  ~MainView()
  {
  }
};

}

//
int main(int argc, char** argv)
{
  try {
    Locale locale;
    const char*  appclass = argv[0];
    Application applet(appclass, argc, argv);

    Args args;
    args.set(XmNgeometry, "550x300");
    MainView view(applet, argv[0], args);
    view.realize();

    applet.run();
  } catch (Exception& ex) {
    ex.display();
  }
  return 0;
}



Last modified: 1 Jan 2017

 Last modified: 1 Jan 2017

Copyright (c) 2000-2017 Antillia.com ALL RIGHTS RESERVED.