зеркало из https://github.com/mozilla/gecko-dev.git
Superseded by RDFTreeView.(cpp|h).
This commit is contained in:
Родитель
e00a1221cf
Коммит
e389b04c1f
|
@ -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 */
|
||||
|
Загрузка…
Ссылка в новой задаче