Sophie

Sophie

distrib > Mandriva > 9.1 > ppc > media > main > by-pkgid > ca81b57b553ae75608ba0fc5e7925e4e > files > 623

libgtkmm1.2-devel-1.2.10-1mdk.ppc.rpm

#include <iostream>
#include <vector>
#include <gtk--/box.h>
#include <gtk--/button.h>
#include <gtk--/ctree.h>
#include <gtk--/window.h>
#include <gtk--/main.h>
#include <cstdio>

using std::cout;
using std::endl;

using std::vector;

class AppWindow: public Gtk::Window
  {
    public:
      AppWindow();
      virtual ~AppWindow();
      virtual gint delete_event_impl (GdkEventAny*);

      Gtk::VBox m_VBox; //Box for tree and HBox.
      Gtk::CTree* tree;
      
      Gtk::HBox m_Box_Buttons; //HBox for buttons.
      Gtk::Button m_Button_SelectAll, m_Button_SelectNone, m_Button_GetSelection;

   protected:
      //Signal handlers:
      virtual void on_Button_SelectAll();
      virtual void on_Button_SelectNone();
      virtual void on_Button_GetSelection();
  };

AppWindow::AppWindow()
    : Gtk::Window(),
      m_Button_SelectAll("Select All"),
      m_Button_SelectNone("SelectNone"),
      m_Button_GetSelection("Get Selection")
  {
    // create a tree with 2 columns (you can not resize it later)
    vector<char*> titles;
    titles.push_back("Items");
    titles.push_back("Column2");
    tree=manage(new Gtk::CTree(titles));
    tree->set_selection_mode(GTK_SELECTION_EXTENDED);
    tree->column(0).set_width(100);

    // Add some items
    { using namespace Gtk::CTree_Helpers;
    RowList::iterator i;
    vector<char*> item;
    item.push_back("fruit");
    item.push_back("1");
    tree->rows().push_back(Element(item));

    i=--tree->rows().end();
    item[0]="peaches";
    i->subtree().push_back(Element(item));
    item[0]="apples";
    i->subtree().push_back(Element(item));
    item[0]="pears";
    i->subtree().push_back(Element(item));

    item[0]="animals";
    tree->rows().push_back(BranchElem(item)); // with no children

    // demonstrate traversing the list
    cout << "traverse row list (forward)"<<endl;
    for (RowList::iterator i1=tree->rows().begin(); 
         i1!=tree->rows().end(); ++i1)
       cout << (*i1)[0].get_text() <<endl; 

    cout << "traverse tree list (forward)"<<endl;
    for (TreeList::iterator i1=tree->tree().begin(); 
         i1!=tree->tree().end(); ++i1)
       cout << (*i1)[0].get_text() <<endl; 

// FIXME reverse is broken
//    cout << "traverse row list (backward)"<<endl;
//    for (RowList::reverse_iterator i2=tree->rows().rbegin(); 
//         i2!=tree->rows().rend(); ++i2)
//       cout << (*i2)[0].get_text() <<endl; 

    } /* using Gtk::CTree_Helpers */

    // set up widget layout
    tree->set_usize(300,300);

    //Put the Buttons in the HBox:
    m_Box_Buttons.pack_start(m_Button_GetSelection);
    m_Box_Buttons.pack_start(m_Button_SelectAll);
    m_Box_Buttons.pack_start(m_Button_SelectNone);

    //Connect signals:
    m_Button_GetSelection.clicked.connect(slot(this, &AppWindow::on_Button_GetSelection));
    m_Button_SelectAll.clicked.connect(slot(this, &AppWindow::on_Button_SelectAll));
    m_Button_SelectNone.clicked.connect(slot(this, &AppWindow::on_Button_SelectNone));
    
    //Put the Buttons under the CTree:
    m_VBox.pack_start(*tree);
    m_VBox.pack_start(m_Box_Buttons);
    add(m_VBox);
    
    show_all();
  }

AppWindow::~AppWindow()
  {} 

gint AppWindow::delete_event_impl (GdkEventAny*)
  {
    Gtk::Main::quit();
    return 0;
  }

void AppWindow::on_Button_SelectAll()
  {
    Gtk::CTree_Helpers::SelectionList selectionList = tree->selection();
    selectionList.all();
  }

void AppWindow::on_Button_SelectNone()
  {
    Gtk::CTree_Helpers::SelectionList selectionList = tree->selection();
    selectionList.clear();
  }

void AppWindow::on_Button_GetSelection()
  {
    Gtk::CTree_Helpers::SelectionList selectionList = tree->selection();
    printf("Selection Count: %d\n", selectionList.size());

    gint iRow = 1;
    for(Gtk::CTree_Helpers::SelectionList::iterator iter = selectionList.begin(); iter != selectionList.end(); iter++)
    {
      //Get Row:
      Gtk::CTree_Helpers::Row& row = *iter;

      printf("  Row: %d\n", iRow);
      iRow++;
      
      //Iterate through Row:
      //(This could be recursive, but let's not complicate things)
      for(Gtk::CTree_Helpers::Row::iterator iterRow = row.begin(); iterRow != row.end(); iterRow++)
      {
        Gtk::CTree_Helpers::Cell& cell = *iterRow;
        printf("    Cell: %s\n", cell.get_text().c_str());
      }
    }
    
   
  }

int main (int argc, char *argv[])
{
  Gtk::Main kit(argc, argv);
  AppWindow arrows;

  kit.run ();
  return 0;
}