Superseded by RDFTreeView.(cpp|h).

This commit is contained in:
slamm%netscape.com 1998-08-26 18:35:23 +00:00
Родитель e00a1221cf
Коммит e389b04c1f
2 изменённых файлов: 0 добавлений и 634 удалений

Просмотреть файл

@ -1,514 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
/*
TreeView.cpp -- class definition for XFE_TreeView
Created: spence murray <spence@netscape.com>, 3-Nov-97.
*/
#include "TreeView.h"
#include "Outlinable.h"
#include "BookmarkView.h"
#include "AddrBookView.h"
#include "HistoryView.h"
#include "ViewGlue.h"
#include "Frame.h"
#include "mozilla.h"
#define TREE_OUTLINER_GEOMETRY_PREF "tree.outliner_geometry"
extern "C" MWContext *fe_WidgetToMWContext (Widget);
// Sanity check on the context. Throughout the progress stuff below,
// the context (and fe_data) needs to be checked for validity before
// dereferencing the members.
#define CHECK_CONTEXT_AND_DATA(c) \
((c) && CONTEXT_DATA(c) && !CONTEXT_DATA(context)->being_destroyed)
static XFE_Frame *
fe_frameFromMWContext(MWContext *context)
{
XFE_Frame * frame = NULL;
// Sanity check for possible invocation of this function from a frame
// that was just destroyed (or is being destroyed)
if (!CHECK_CONTEXT_AND_DATA(context))
{
return NULL;
}
// Try to use context's frame
frame = ViewGlue_getFrame(XP_GetNonGridContext(context));
// Try to use the active frame
// if (!frame)
// {
// frame = XFE_Frame::getActiveFrame();
// }
// Make sure the frame is alive
if (frame && !frame->isAlive())
{
frame = NULL;
}
return frame;
}
XFE_TreeView::XFE_TreeView (const char *name,
Widget parent,
int tree_type,
int width,
int height)
{
#ifdef DEBUG_spence
printf ("XFE_TreeView: %s\n", name);
#endif
// get the toplevel
MWContext *context = fe_WidgetToMWContext (parent);
XFE_Component *toplevel = fe_frameFromMWContext (context);
/* empty tree */
if (tree_type == 0)
{
int i, n, size;
XmLTreeRowDefinition *rows;
static struct
{
Boolean expands;
int level;
char *string;
} data[] =
{
{ True, 0, "Root" },
{ True, 1, "Level 1 Parent" },
{ False, 2, "1st Child of Level 1 Parent" },
{ False, 2, "2nd Child of Level 1 Parent" },
{ True, 2, "Level 2 Parent" },
{ False, 3, "Child of Level 2 Parent" },
{ True, 1, "Level 1 Parent" },
{ False, 2, "Child of Level 1 Parent" },
};
#ifdef DEBUG_spence
printf ("empty tree\n");
#endif
// create the tree
m_tree = XtVaCreateManagedWidget("tree",
xmlTreeWidgetClass, parent,
XmNvisibleRows, 10,
NULL);
XtVaSetValues(m_tree,
XmNcellDefaults, True,
NULL);
/* Create a TreeRowDefinition array from the data array */
/* and add rows to the Tree */
n = 8;
size = sizeof(XmLTreeRowDefinition) * n;
rows = (XmLTreeRowDefinition *)malloc(size);
for (i = 0; i < n; i++)
{
rows[i].level = data[i].level;
rows[i].expands = data[i].expands;
rows[i].isExpanded = True;
rows[i].pixmap = XmUNSPECIFIED_PIXMAP;
rows[i].pixmask = XmUNSPECIFIED_PIXMAP;
rows[i].string = XmStringCreateSimple(data[i].string);
}
XmLTreeAddRows(m_tree, rows, n, -1);
/* Free the TreeRowDefintion array (and XmStrings) we created above */
for (i = 0; i < n; i++)
XmStringFree(rows[i].string);
free((char *)rows);
#if 0
// Save vertical scroller for keyboard accelerators
CONTEXT_DATA(context)->vscroll = m_outliner->getScroller();
m_outliner->show();
#endif
#ifdef DEBUG_spence
printf ("width = %d, height = %d\n", width, height);
#endif
XtVaSetValues (m_tree, XmNwidth, width, XmNheight, height, NULL);
// load rdf database
getRDFDB();
} else if (tree_type == 1) {
#ifdef DEBUG_spence
printf ("bookmark tree\n");
#endif
// bookmark tree
// create the bookmark view
XFE_BookmarkView *view = new XFE_BookmarkView(toplevel,
parent,
NULL,
context);
XtVaSetValues(view->getBaseWidget(),
XmNleftAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_FORM,
XmNrightAttachment, XmATTACH_FORM,
XmNbottomAttachment, XmATTACH_FORM,
NULL);
view->show ();
m_outliner = view->getOutliner ();
} else if (tree_type == 2) {
#ifdef DEBUG_spence
printf ("addressbook tree\n");
#endif
// create the addressbook view;
// import from XFE_BookmarkFrame::XFE_BookmarkFrame
XFE_AddrBookView *view = new XFE_AddrBookView(toplevel,
parent,
NULL,
context);
} else if (tree_type == 3) {
#ifdef DEBUG_spence
printf ("history tree\n");
#endif
// create the History view
XFE_HistoryView *view = new XFE_HistoryView(toplevel, parent, NULL, context);
}
if (m_tree == NULL && m_outliner == NULL)
{
#ifdef DEBUG_spence
printf ("XFE_TreeView: outliner create failed!\n");
#endif
return;
}
}
XFE_TreeView::~XFE_TreeView()
{
/* nothing to do here */
}
void
XFE_TreeView::getRDFDB()
{
HT_Notification ns;
RDF_Resources std;
#ifdef DEBUG_spence
printf ("getRDFDB:\n");
#endif
#if 0
ns = (HT_Notification) XP_ALLOC (sizeof (HT_NotificationStruct));
if (ns == NULL)
{
printf ("couldn't allocate NotificationStruct\n");
return;
}
#endif
ns = new HT_NotificationStruct;
ns->notifyProc = (HT_NotificationProc) xfe_handleRDFNotify;
ns->data = this;
#if 0
std = RDF_StdVocab();
#endif
// now create the HT_View - the backend representation of our tree
m_htPane = HT_NewPane (ns);
m_htView = HT_GetNthView (m_htPane, 0);
// m_htView = HT_NewView (std->RDF_Top, m_htPane);
// now populate the tree
drawTree ();
}
void
XFE_TreeView::handleRDFNotify (HT_Notification ns,
HT_Resource node,
HT_Event event)
{
#ifdef DEBUG_spence
printf ("handleRDFNotify\n");
#endif
}
void
XFE_TreeView::drawTree ()
{
HT_Pane pane;
// fe_Data *feData = (fe_Data *) HT_GetViewFEData (m_htView);
int count = HT_GetItemListCount (m_htView);
int n = 0;
#ifdef DEBUG_spence
printf ("drawTree\n");
#endif
while (n < count) {
HT_Resource node = HT_GetNthItem (m_htView, n);
// add element to tree widget
drawNode (node);
++n;
}
}
void
XFE_TreeView::drawNode (HT_Resource node)
{
HT_Cursor cursor;
PRBool isContainer, isOpen, isSelected;
uint16 colNum, depth;
uint32 colWidth, colTokenType;
void *data, *colToken;
struct tm *time;
time_t dateVal;
char buffer [128];
if (isContainer = HT_IsContainer(node))
{
isOpen = HT_IsContainerOpen(node);
// draw the node
#ifdef DEBUG_spence
printf ("node draw\n");
#endif
}
if ((cursor = HT_NewColumnCursor(HT_GetView(node))) == NULL) {
return;
}
isSelected = HT_IsSelected(node);
colNum = 0;
while (HT_GetNextColumn(cursor, NULL, &colWidth, &colToken, &colTokenType) == TRUE)
{
if (HT_GetNodeData(node, colToken, colTokenType, &data) == TRUE)
{
switch(colTokenType)
{
case HT_COLUMN_DATE_STRING:
if (data == NULL) break;
if ((dateVal = (time_t)atol((char *)data)) == 0) break;
if ((time = localtime(&dateVal)) == NULL) break;
strftime(buffer,sizeof(buffer),"%#m/%#d/%Y %#I:%M %p",time);
#ifdef DEBUG_spence
printf ("node: %s\n", buffer);
#endif
break;
case HT_COLUMN_DATE_INT:
if (data == 0L) break;
if ((time = localtime((time_t *) &data)) == NULL) break;
strftime(buffer,sizeof(buffer),"%#m/%#d/%Y %#I:%M %p",time);
#ifdef DEBUG_spence
printf ("node: %s\n", buffer);
#endif
break;
case HT_COLUMN_INT:
sprintf(buffer,"%d",(int)data);
#ifdef DEBUG_spence
printf ("node: %s\n", buffer);
#endif
break;
case HT_COLUMN_STRING:
if (data == NULL) break;
if (colNum==0)
{
depth = HT_GetItemIndentation(node) - 1;
#ifdef DEBUG_spence
printf ("node: %s\n", (char *)data);
#endif
}
else
{
#ifdef DEBUG_spence
printf ("node: %s\n", (char *)data);
#endif
}
break;
}
}
if (isContainer) break;
}
HT_DeleteColumnCursor(cursor);
}
// Outlinable interface methods
void *
XFE_TreeView::ConvFromIndex (int /* index */)
{
return NULL;
}
int
XFE_TreeView::ConvToIndex (void * /* item */)
{
return 0;
}
char *
XFE_TreeView::getColumnName (int /* column */)
{
return NULL;
}
char *
XFE_TreeView::getColumnHeaderText (int /* column */)
{
return NULL;
}
fe_icon *
XFE_TreeView::getColumnHeaderIcon (int /* column */)
{
return NULL;
}
EOutlinerTextStyle
XFE_TreeView::getColumnHeaderStyle (int /* column */)
{
return (EOutlinerTextStyle) NULL;
}
void *
XFE_TreeView::acquireLineData (int /* line */)
{
return NULL;
}
void
XFE_TreeView::getTreeInfo (XP_Bool * /* expandable */, XP_Bool * /* is_expanded */,
int * /* depth */, OutlinerAncestorInfo ** /* ancestor */)
{
}
EOutlinerTextStyle
XFE_TreeView::getColumnStyle (int /* column */)
{
return (EOutlinerTextStyle) NULL;
}
char *
XFE_TreeView::getColumnText (int /* column */)
{
return NULL;
}
fe_icon *
XFE_TreeView::getColumnIcon (int /* column */)
{
return NULL;
}
void
XFE_TreeView::releaseLineData()
{
}
void
XFE_TreeView::Buttonfunc (const OutlineButtonFuncData * /* data */)
{
}
void
XFE_TreeView::Flippyfunc (const OutlineFlippyFuncData * /* data */)
{
}
XFE_Outliner *
XFE_TreeView::getOutliner()
{
return m_outliner;
}
char *
XFE_TreeView::getCellTipString (int /* row */, int /* column */)
{
return NULL;
}
char *
XFE_TreeView::getCellDocString (int /* row */, int /* column */)
{
return NULL;
}
extern "C" void
fe_showTreeView (Widget parent, int tree_type, int width, int height)
{
static XP_Bool been_here = FALSE;
#ifdef DEBUG_spence
printf ("XFE_TreeView: showTreeView()\n");
#endif
if (!been_here) {
#ifdef DEBUG_spence
printf ("RDF_Init()\n");
#endif
RDF_Init("file://./"); // assume it hasn't been initialized yet
been_here = TRUE;
}
XFE_TreeView *tree = new XFE_TreeView ("tree",
parent,
tree_type,
width,
height);
XtRealizeWidget (parent);
#ifdef DEBUG_spence
if (tree == NULL)
{
printf ("fe_showTreeView: create failed!\n");
return;
}
#endif
}
extern "C" void
xfe_handleRDFNotify (HT_Notification ns,
HT_Resource node,
HT_Event event,
void *token,
uint32 tokenType)
{
#ifdef DEBUG_spence
printf ("handleRDFNotify\n");
#endif
XFE_TreeView *tree = (XFE_TreeView *) ns->data;
tree->handleRDFNotify (ns, node, event);
}

Просмотреть файл

@ -1,120 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
/*
TreeView.h -- class definition for XFE_TreeView
Created: spence murray <spence@netscape.com>, 3-Nov-97.
*/
#ifndef _xfe_treeview_h
#define _xfe_treeview_h
#include "NotificationCenter.h"
#include "Outlinable.h"
#include "XmL/Tree.h"
extern "C"
{
#include "gridpopup.h"
#include "htrdf.h"
#include "rdf.h"
}
class XFE_TreeView : public XFE_Outlinable
{
public:
XFE_TreeView(const char *name,
Widget parent,
int tree_type,
int width,
int height);
XFE_TreeView();
virtual ~XFE_TreeView();
// The Outlinable interface.
void *ConvFromIndex(int index);
virtual int ConvToIndex(void *item);
virtual char *getColumnName(int column);
virtual char *getColumnHeaderText(int column);
virtual fe_icon *getColumnHeaderIcon(int column);
virtual EOutlinerTextStyle getColumnHeaderStyle(int column);
virtual void *acquireLineData(int line);
virtual void getTreeInfo(XP_Bool *expandable, XP_Bool *is_expanded, int *depth,
OutlinerAncestorInfo **ancestor);
virtual EOutlinerTextStyle getColumnStyle(int column);
virtual char *getColumnText(int column);
virtual fe_icon *getColumnIcon(int column);
// Tells the Outlinable object that the line data is no
// longer needed, and it can free any storage associated with
// it.
virtual void releaseLineData();
virtual void Buttonfunc(const OutlineButtonFuncData *data);
virtual void Flippyfunc(const OutlineFlippyFuncData *data);
// return the outliner associated with this outlinable.
virtual XFE_Outliner *getOutliner();
// Get tooltipString & docString;
// returned string shall be freed by the callee
// row < 0 indicates heading row; otherwise it is a content row
// (starting from 0)
//
virtual char *getCellTipString(int row, int column);
virtual char *getCellDocString(int row, int column);
// the notifyProc
void handleRDFNotify (HT_Notification ns,
HT_Resource node,
HT_Event event);
private:
// load the RDF database
void getRDFDB ();
// fill the tree with the current RDF database
void drawTree ();
// draw a node
void drawNode (HT_Resource node);
protected:
XFE_Outliner *m_outliner;
Widget m_tree;
// rdf handles
RDF_Resources m_rdfResources;
HT_Pane m_htPane;
HT_View m_htView;
};
extern "C" void
fe_showTreeView (Widget parent, int tree_type, int width, int height);
// the notifyProc
extern "C" void
xfe_handleRDFNotify (HT_Notification ns,
HT_Resource node,
HT_Event event,
void *token,
uint32 tokenType);
#endif /* _xfe_treeview_h */