2fbf67cb29
* NEW: Update FSF address in every source file. git-svn-id: svn://localhost/gambas/trunk@3870 867c0c6c-44f3-4631-809d-bfa615b0a4ec
195 lines
4.4 KiB
C++
195 lines
4.4 KiB
C++
/***************************************************************************
|
|
|
|
gtree.h
|
|
|
|
(c) 2004-2006 - Daniel Campos Fernández <dcamposf@gmail.com>
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2, or (at your option)
|
|
any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
|
MA 02110-1301, USA.
|
|
|
|
***************************************************************************/
|
|
|
|
#ifndef __GTREE_H
|
|
#define __GTREE_H
|
|
|
|
#include <gtk/gtk.h>
|
|
|
|
class gTree;
|
|
class gTreeView;
|
|
class gIconView;
|
|
|
|
class gTreeCell
|
|
{
|
|
public:
|
|
gTreeCell();
|
|
~gTreeCell();
|
|
|
|
char *text() { return _text; }
|
|
gPicture *picture() { return _picture; }
|
|
|
|
void setText(const char *vl);
|
|
void setPicture(gPicture *vl);
|
|
|
|
private:
|
|
char *_text;
|
|
gPicture *_picture;
|
|
};
|
|
|
|
class gTreeRow
|
|
{
|
|
public:
|
|
GList *data;
|
|
GtkTreeIter *dataiter;
|
|
gTree *tree;
|
|
|
|
gTreeRow(gTree *tr, char *key, GtkTreeIter *iter);
|
|
~gTreeRow();
|
|
|
|
void add();
|
|
void remove();
|
|
void update();
|
|
int children();
|
|
char *key() { return _key; }
|
|
|
|
void setExpanded();
|
|
void setExpanded(bool ex);
|
|
bool isExpanded();
|
|
void ensureVisible();
|
|
|
|
gTreeCell* get(int ind);
|
|
|
|
char *next();
|
|
char *prev();
|
|
char *child();
|
|
char *last();
|
|
char *parent();
|
|
char *above();
|
|
char *below();
|
|
|
|
void moveFirst();
|
|
void moveLast();
|
|
void moveAfter(char *key);
|
|
void moveBefore(char *key);
|
|
|
|
void rect(int *x, int *y, int *w, int *h);
|
|
void updateExpanded(bool ex);
|
|
|
|
bool isEditable() { return _editable; }
|
|
void setEditable(bool vl) { _editable = vl; }
|
|
|
|
void startRename();
|
|
|
|
private:
|
|
char *_key;
|
|
char *_parent;
|
|
bool _expanded;
|
|
bool _editable;
|
|
};
|
|
|
|
class gTree
|
|
{
|
|
public:
|
|
GtkWidget *widget;
|
|
GtkTreeStore *store;
|
|
GtkCellRenderer *rtext;
|
|
GtkCellRenderer *rgraph;
|
|
GHashTable *datakey;
|
|
gTreeView *view;
|
|
void (*onRemove)(gTree *tree, char *key);
|
|
char *_edited_row;
|
|
unsigned _editable : 1;
|
|
unsigned _resizable : 1;
|
|
unsigned _auto_resize : 1;
|
|
unsigned _expander : 1;
|
|
unsigned _sorted : 1;
|
|
unsigned _ascending : 1;
|
|
unsigned _init_sort : 1;
|
|
unsigned _sort_dirty : 1;
|
|
int _sort_column;
|
|
|
|
gTree(gTreeView *v);
|
|
~gTree();
|
|
|
|
//General
|
|
int visibleWidth();
|
|
int visibleHeight();
|
|
char* cursor();
|
|
void setCursor(char *vl);
|
|
void selectAll();
|
|
void unselectAll();
|
|
bool isEditable() { return _editable; }
|
|
void setEditable(bool vl) { _editable = vl; }
|
|
bool isRenaming() const { return _edited_row != NULL; }
|
|
|
|
// Rows
|
|
gTreeRow* addRow(char *key, char *parent = NULL, char *after = NULL, bool before = false);
|
|
gTreeRow* getRow(char *key) const;
|
|
gTreeRow* operator[](char *key) const { return getRow(key); }
|
|
|
|
bool removeRow(char *key);
|
|
int rowCount();
|
|
bool rowExists(char *key);
|
|
bool rowSelected(char *key);
|
|
void setRowSelected(char *key,bool vl);
|
|
bool isRowEditable(char *key);
|
|
void setRowEditable(char *key, bool vl);
|
|
char *firstRow();
|
|
char *lastRow();
|
|
|
|
void clear();
|
|
void clear(char *parent);
|
|
|
|
// Columns
|
|
bool headers();
|
|
void setHeaders(bool vl);
|
|
bool isResizable() { return _resizable; }
|
|
void setResizable(bool vl);
|
|
bool isAutoResize() { return _auto_resize; }
|
|
void setAutoResize(bool vl);
|
|
void addColumn();
|
|
void removeColumn();
|
|
int columnCount();
|
|
char *columnName(int ind);
|
|
void setColumnName(int ind,char *vl);
|
|
bool columnVisible(int ind);
|
|
void setColumnVisible(int ind, bool vl);
|
|
bool columnResizable(int ind);
|
|
void setColumnResizable(int ind, bool vl);
|
|
int columnAlignment(int ind);
|
|
void setColumnAlignment(int ind, int a);
|
|
int columnWidth(int col);
|
|
void setColumnWidth(int col, int w);
|
|
|
|
bool isSorted() { return _sorted; }
|
|
void setSorted(bool v);
|
|
int getSortColumn() { return _sort_column; }
|
|
void setSortColumn(int v);
|
|
bool isSortAscending() { return _ascending; }
|
|
void setSortAscending(bool v);
|
|
|
|
char *pathToKey(GtkTreePath *path, bool free = true);
|
|
char *iterToKey(GtkTreeIter *iter);
|
|
|
|
void showExpanders();
|
|
bool hasExpanders() { return _expander; }
|
|
void sortLater();
|
|
void sort();
|
|
void updateSort();
|
|
|
|
void lock();
|
|
void unlock();
|
|
};
|
|
|
|
#endif
|