diff --git a/mozilla/cmd/xfe/src/BrowserView.cpp b/mozilla/cmd/xfe/src/BrowserView.cpp index 963c9bcc823..5d47c67c3e9 100644 --- a/mozilla/cmd/xfe/src/BrowserView.cpp +++ b/mozilla/cmd/xfe/src/BrowserView.cpp @@ -113,6 +113,8 @@ XFE_BrowserView::showNavCenter() // Add _navCenterView to the sub-view list of browser view addView(_navCenterView); + + _navCenterView->show(); } // Show the nav center diff --git a/mozilla/cmd/xfe/src/Makefile b/mozilla/cmd/xfe/src/Makefile index 9239bb47f4f..ce56f29cdff 100644 --- a/mozilla/cmd/xfe/src/Makefile +++ b/mozilla/cmd/xfe/src/Makefile @@ -124,6 +124,7 @@ CPPSRCS = \ PrefsLang.cpp \ PrefsProxiesView.cpp \ RDFView.cpp \ + RDFTreeView.cpp \ RadioGroup.cpp \ Splash.cpp \ Toolbar.cpp \ diff --git a/mozilla/cmd/xfe/src/NavCenterView.cpp b/mozilla/cmd/xfe/src/NavCenterView.cpp index 15f63248c98..e936c3e0e8c 100644 --- a/mozilla/cmd/xfe/src/NavCenterView.cpp +++ b/mozilla/cmd/xfe/src/NavCenterView.cpp @@ -88,15 +88,17 @@ XFE_NavCenterView::XFE_NavCenterView(XFE_Component *toplevel_component, // Set the view type. m_viewType = VIEW_NAVCENTER; - Widget nav_form = XtVaCreateManagedWidget("nav_form", - xmFormWidgetClass, - parent, - NULL); - setBaseWidget(nav_form); + Widget navCenterMainForm = + XtVaCreateManagedWidget("navCenterMainForm", + xmFormWidgetClass, + parent, + NULL); + + setBaseWidget(navCenterMainForm); m_selector = XtVaCreateManagedWidget("selector", xfeToolScrollWidgetClass, - nav_form, + navCenterMainForm, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, @@ -115,32 +117,41 @@ XFE_NavCenterView::XFE_NavCenterView(XFE_Component *toplevel_component, XmNshadowThickness, 0, NULL); - rdf_parent = XtVaCreateManagedWidget("rdf_form", - xmFormWidgetClass, - nav_form, - XmNtopAttachment, XmATTACH_FORM, + m_htview = NULL; + m_pane = NULL; + + m_rdfview = new XFE_RDFView(this, m_widget, this, context); + + XtVaSetValues(m_rdfview->getBaseWidget(), + XmNtopAttachment, XmATTACH_FORM, #ifdef HTML_PANE - XmNbottomAttachment, XmATTACH_NONE, + XmNbottomAttachment, XmATTACH_NONE, #else - XmNbottomAttachment, XmATTACH_FORM, + XmNbottomAttachment, XmATTACH_FORM, #endif - XmNleftAttachment, XmATTACH_WIDGET, - XmNleftWidget, m_selector, - XmNrightAttachment, XmATTACH_FORM, - XmNtopOffset, 0, - XmNbottomOffset, 1, - XmNleftOffset, 0, - XmNrightOffset, 0, - XmNshadowThickness, 2, - XmNshadowType, XmSHADOW_IN, - NULL); + XmNleftAttachment, XmATTACH_WIDGET, + XmNleftWidget, m_selector, + XmNrightAttachment, XmATTACH_FORM, + + +// Put this stuff in the resource file +// XmNtopOffset, 0, +// XmNbottomOffset, 1, +// XmNleftOffset, 0, +// XmNrightOffset, 0, +// XmNshadowThickness, 2, +// XmNshadowType, XmSHADOW_IN, + NULL); + + m_rdfview->setStandAloneState(m_isStandalone); + #ifdef HTML_PANE - m_htmlview = new XFE_HTMLView(this, nav_form, NULL, context); + m_htmlview = new XFE_HTMLView(this, navCenterMainForm, NULL, context); Widget html_base = m_htmlview->getBaseWidget(); XtVaSetValues(html_base, XmNtopAttachment, XmATTACH_WIDGET, - XmNtopWidget, rdf_parent, + XmNtopWidget, m_rdfview->getBaseWidget(), XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, m_selector, @@ -148,12 +159,7 @@ XFE_NavCenterView::XFE_NavCenterView(XFE_Component *toplevel_component, NULL); #endif - m_htview = NULL; - m_pane = NULL; - m_rdfview = new XFE_RDFView(this, rdf_parent, this, context); - - m_rdfview->setStandAloneState(m_isStandalone); HT_Notification ns = new HT_NotificationStruct; ns->notifyProc = &XFE_NavCenterView::notify_cb; @@ -176,7 +182,6 @@ XFE_NavCenterView::XFE_NavCenterView(XFE_Component *toplevel_component, m_htmlview->getURL(NET_CreateURLStruct("http://dunk/",NET_DONT_RELOAD)); #endif - XtManageChild(nav_form); } @@ -403,7 +408,9 @@ XFE_NavCenterView::handleDisplayPixmap(Widget w, IL_Pixmap * image, IL_Pixmap * { XFE_RDFImage * rdfImage; +#ifdef DEBUG_radha printf("In NavCenterView:handleDisplayPixmap\n"); +#endif // Get handle to the RDFImage object from the cache for (int i = 0; i < m_numRDFImagesLoaded; i ++) @@ -423,7 +430,9 @@ XFE_NavCenterView::handleNewPixmap(Widget w, IL_Pixmap * image, Boolean mask) { XFE_RDFImage * rdfImage; +#ifdef DEBUG_radha printf("In NavCenterView:handlenewPixmap\n"); +#endif // Get handle to the RDFImage object from the cache for (int i = 0; i < m_numRDFImagesLoaded; i ++) @@ -444,7 +453,10 @@ XFE_NavCenterView::handleImageComplete(Widget w, IL_Pixmap * image) XFE_RDFImage * rdfImage; + +#ifdef DEBUG_radha printf("In NavCenterView:handleImageComplete\n"); +#endif // Get handle to the RDFImage object from the cache for (int i = 0; i < m_numRDFImagesLoaded; i ++) @@ -465,16 +477,18 @@ void ImageCompleteCallback(XtPointer client_data) Widget button = (Widget )cb->widget; Dimension b_width=0, b_height=0; +#ifdef DEBUG_radha printf("Inside ImageCompleteCallback\n"); +#endif XtUnmanageChild(button); XtVaGetValues(button, XmNwidth, &b_width, XmNheight, &b_height, NULL); XtVaSetValues(button, XmNheight,(cb->height + b_height), - XmNpixmap, cb->image, - XmNpixmapMask, cb->mask, - XmNbuttonLayout, XmBUTTON_LABEL_ON_BOTTOM, - XmNlabelAlignment, XmALIGNMENT_CENTER, + XmNpixmap, cb->image, + XmNpixmapMask, cb->mask, + XmNbuttonLayout, XmBUTTON_PIXMAP_ONLY, + XmNlabelAlignment, XmALIGNMENT_CENTER, NULL); XtManageChild(button); XP_FREE(cb); diff --git a/mozilla/cmd/xfe/src/RDFTreeView.cpp b/mozilla/cmd/xfe/src/RDFTreeView.cpp new file mode 100644 index 00000000000..a62a8096d9b --- /dev/null +++ b/mozilla/cmd/xfe/src/RDFTreeView.cpp @@ -0,0 +1,975 @@ +/* -*- 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. + */ + +/*----------------------------------------------------------------------*/ +/* */ +/* Name: RDFTreeView.cpp */ +/* Description: XFE_RDFTreeView component header file - A class to */ +/* encapsulate and rdf tree widget. */ +/* Author: Ramiro Estrugo */ +/* */ +/*----------------------------------------------------------------------*/ + +#include "RDFTreeView.h" +#include "Command.h" +#include "xfe2_extern.h" +#include "xpgetstr.h" + +#include +#include + +#define TREE_NAME "RdfTree" + +#ifdef DEBUG_slamm +#define D(x) x +#else +#define D(x) +#endif + +// pixmaps for use in the bookmark window. +fe_icon XFE_RDFTreeView::bookmark = { 0 }; +fe_icon XFE_RDFTreeView::closedFolder = { 0 }; +fe_icon XFE_RDFTreeView::openedFolder = { 0 }; + +#define SECONDS_PER_DAY 86400L + +extern int XP_BKMKS_HOURS_AGO; +extern int XP_BKMKS_DAYS_AGO; +extern int XP_BKMKS_LESS_THAN_ONE_HOUR_AGO; + +struct RDFColumnData +{ + RDFColumnData(void) : token(NULL), token_type(0) {} + RDFColumnData(void *t, uint32 tt) : token(t), token_type(tt) {} + + void* token; + uint32 token_type; +}; + + +void HTFE_MakePrettyDate(char* buffer, time_t lastVisited) +{ + buffer[0] = 0; + time_t today = XP_TIME(); + int elapsed = today - lastVisited; + + if (elapsed < SECONDS_PER_DAY) + { + int32 hours = (elapsed + 1800L) / 3600L; + if (hours < 1) + { + XP_STRCPY(buffer, XP_GetString(XP_BKMKS_LESS_THAN_ONE_HOUR_AGO)); + } + sprintf(buffer, XP_GetString(XP_BKMKS_HOURS_AGO), hours); + } + else if (elapsed < (SECONDS_PER_DAY * 31)) + { + sprintf(buffer, XP_GetString(XP_BKMKS_DAYS_AGO), + (elapsed + (SECONDS_PER_DAY / 2)) / SECONDS_PER_DAY); + } + else + { + struct tm* tmp; + tmp = localtime(&lastVisited); + + sprintf(buffer, asctime(tmp)); + } +} + + +// +// Command Handling +// + +// +// This acts as an encapsulator for the doCommand() method. +// Sub-classes impliment a reallyDoCommand(), and leave the +// boring maintainence work to this class. This approach +// saves every sub-class from calling super::doCommand(), +// which would really be a drag, now wouldn't it. +// +class XFE_RDFTreeViewCommand : public XFE_ViewCommand +{ +public: + XFE_RDFTreeViewCommand(char* name) : XFE_ViewCommand(name) {}; + + virtual void reallyDoCommand(XFE_RDFTreeView*, XFE_CommandInfo*) = 0; + virtual XP_Bool requiresChromeUpdate() { + return TRUE; + }; + void doCommand(XFE_View* v_view, XFE_CommandInfo* info) { + XFE_RDFTreeView* view = (XFE_RDFTreeView*)v_view; + reallyDoCommand(view, info); + if (requiresChromeUpdate()) { + //XXX view->updateChrome(); + } + }; +}; + +class XFE_RDFTreeViewAlwaysEnabledCommand : public XFE_RDFTreeViewCommand +{ +public: + XFE_RDFTreeViewAlwaysEnabledCommand(char* name) : XFE_RDFTreeViewCommand(name) {}; + + XP_Bool isEnabled(XFE_View*, XFE_CommandInfo*) { + return True; + }; +}; + +class RdfPopupCommand : public XFE_RDFTreeViewAlwaysEnabledCommand +{ +public: + RdfPopupCommand() : XFE_RDFTreeViewAlwaysEnabledCommand(xfeCmdShowPopup) {}; + + virtual XP_Bool isSlow() { + return FALSE; + }; + + void reallyDoCommand(XFE_RDFTreeView* view, XFE_CommandInfo* info) { + view->doPopup(info->event); + }; +}; + +// END OF COMMAND DEFINES + +static XFE_CommandList* my_commands = 0; + +XFE_RDFTreeView::XFE_RDFTreeView(XFE_Component * toplevel, + Widget parent, + XFE_View * parent_view, + MWContext * context) : + XFE_View(toplevel, parent_view, context), + _ht_rdfView(NULL), + _popup(NULL), + _standAloneState(False) +{ + if (!my_commands) + { + registerCommand(my_commands, new RdfPopupCommand); + } + + + // Create the tree widget + Widget tree = + XtVaCreateWidget(TREE_NAME, + xmlTreeWidgetClass, + parent, + XmNshadowThickness, 0, + XmNhorizontalSizePolicy, XmRESIZE_IF_POSSIBLE, + XmNallowColumnResize, True, + XmNselectionPolicy, XmSELECT_MULTIPLE_ROW, + XmNheadingRows, 1, + XmNvisibleRows, 14, + XmNhideUnhideButtons, True, + NULL); + + setBaseWidget(tree); + + XtVaSetValues(m_widget, XmNcellAlignment, XmALIGNMENT_LEFT, NULL); + + XtVaSetValues(m_widget, + XmNcellDefaults, True, + XmNcellAlignment, XmALIGNMENT_LEFT, + NULL); + + init_pixmaps(); + + XtAddCallback(m_widget, XmNexpandCallback, expand_row_cb, this); + XtAddCallback(m_widget, XmNcollapseCallback, collapse_row_cb, this); + XtAddCallback(m_widget, XmNdeleteCallback, delete_cb, NULL); + XtAddCallback(m_widget, XmNactivateCallback, activate_cb, this); + XtAddCallback(m_widget, XmNresizeCallback, resize_cb, this); + XtAddCallback(m_widget, XmNeditCallback, edit_cell_cb, this); + XtAddCallback(m_widget, XmNselectCallback, select_cb, this); + XtAddCallback(m_widget, XmNdeselectCallback, deselect_cb, this); + XtAddCallback(m_widget, XmNpopupCallback, popup_cb, this); + + //fe_AddTipStringCallback(outline, XFE_Outliner::tip_cb, this); +} +////////////////////////////////////////////////////////////////////////// +XFE_RDFTreeView::~XFE_RDFTreeView() +{ + if (_popup) + { + delete _popup; + } +} +////////////////////////////////////////////////////////////////////////// +void +XFE_RDFTreeView::init_pixmaps(void) +{ + Pixel bg_pixel; + + XtVaGetValues(m_widget, XmNbackground, &bg_pixel, 0); + + Widget shell = XfeAncestorFindByClass(getToplevel()->getBaseWidget(), + shellWidgetClass, + XfeFIND_ANY); + if (!bookmark.pixmap) + fe_NewMakeIcon(shell, + BlackPixelOfScreen(XtScreen(m_widget)), + bg_pixel, + &bookmark, + NULL, + BM_Bookmark.width, BM_Bookmark.height, + BM_Bookmark.mono_bits, BM_Bookmark.color_bits, + BM_Bookmark.mask_bits, FALSE); + if (!closedFolder.pixmap) + fe_NewMakeIcon(shell, + BlackPixelOfScreen(XtScreen(m_widget)), + bg_pixel, + &closedFolder, + NULL, + BM_Folder.width, BM_Folder.height, + BM_Folder.mono_bits, BM_Folder.color_bits, + BM_Folder.mask_bits, FALSE); + + if (!openedFolder.pixmap) + fe_NewMakeIcon(shell, + BlackPixelOfScreen(XtScreen(m_widget)), + bg_pixel, + &openedFolder, + NULL, + BM_FolderO.width, BM_FolderO.height, + BM_FolderO.mono_bits, BM_FolderO.color_bits, + BM_FolderO.mask_bits, FALSE); +} +////////////////////////////////////////////////////////////////////////// +void +XFE_RDFTreeView::activate_row(int row) +{ + HT_Resource node = HT_GetNthItem(_ht_rdfView, row); + + if (!node) return; + +#if 0 + if (data->ctrl) + { + HT_ToggleSelection(node); + m_outliner->toggleSelected(data->row); + } + else if (data->shift) + { + HT_SetSelectionRange(node, m_node); + m_outliner->trimOrExpandSelection(data->row); + } + else + { + HT_SetSelection(node); + m_outliner->selectItemExclusive(data->row); + + } + getToplevel()->notifyInterested(XFE_View::chromeNeedsUpdating); +#endif /*0*/ + + if (!HT_IsContainer(node)) { + // Dispatch in new window + char *s = HT_GetNodeURL (node); + URL_Struct *url = NET_CreateURLStruct (s, NET_DONT_RELOAD); + //url->window_target = XP_STRDUP("_rdf_target"); + fe_reuseBrowser (m_contextData, url); + } +} +////////////////////////////////////////////////////////////////////////// +void +XFE_RDFTreeView::resize_cb(Widget, + XtPointer clientData, + XtPointer callData) +{ + XFE_RDFTreeView *obj = (XFE_RDFTreeView*)clientData; + + obj->resize(callData); +} + +void +XFE_RDFTreeView::resize(XtPointer callData) +{ + XmLGridCallbackStruct *cbs = (XmLGridCallbackStruct*)callData; + + XP_ASSERT(m_widget); + if(!m_widget) + return; + + if (cbs->reason == XmCR_RESIZE_COLUMN) + { + D( printf("Inside XFE_RDFTreeView::resize(COLUMN, %d)\n", cbs->column);); + } +} + + +void +XFE_RDFTreeView::refresh(HT_Resource node) +{ + if (!_ht_rdfView) return; + + XP_ASSERT(HT_IsContainer(node)); + if (!HT_IsContainer(node)) return; + + if (HT_IsContainerOpen(node)) + { + HT_Resource child; + + HT_Cursor child_cursor = HT_NewCursor(node); + + while (child = HT_GetNextItem(child_cursor)) + { + add_row(child); + + if (HT_IsContainer(child) && HT_IsContainerOpen(child)) + refresh(child); + } + HT_DeleteCursor(child_cursor); + } + else + { + int row = HT_GetNodeIndex(_ht_rdfView, node); + + XmLTreeDeleteChildren(m_widget, row); + } +} + +void +XFE_RDFTreeView::edit_cell_cb(Widget, + XtPointer clientData, + XtPointer callData) +{ + XFE_RDFTreeView *obj = (XFE_RDFTreeView*)clientData; + + obj->edit_cell(callData); +} + +void +XFE_RDFTreeView::edit_cell(XtPointer callData) +{ + XP_ASSERT(m_widget); + if(!m_widget) + return; + + XmLGridCallbackStruct *cbs = (XmLGridCallbackStruct*)callData; + HT_Resource node = HT_GetNthItem (_ht_rdfView, cbs->row); + + if (node && cbs->reason == XmCR_EDIT_COMPLETE) + { + XmLGridColumn column = XmLGridGetColumn(m_widget, XmCONTENT, + cbs->column); + RDFColumnData *column_data = NULL; + + XtVaGetValues(m_widget, + XmNcolumnPtr, column, + XmNcolumnUserData, &column_data, + NULL); + + XmLGridRow row = XmLGridGetRow(m_widget, XmCONTENT, cbs->row); + XmString cell_string; + + XtVaGetValues(m_widget, + XmNcolumnPtr, column, + XmNrowPtr, row, + XmNcellString, &cell_string, + NULL); + char *text; + XmStringGetLtoR(cell_string, XmSTRING_DEFAULT_CHARSET, &text); + HT_SetNodeData (node, column_data->token, column_data->token_type, + text); + } +} + +void +XFE_RDFTreeView::select_cb(Widget, + XtPointer clientData, + XtPointer callData) +{ + XFE_RDFTreeView *obj = (XFE_RDFTreeView*)clientData; + XmLGridCallbackStruct *cbs = (XmLGridCallbackStruct *)callData; + + D(fprintf(stderr,"select_cb(%d)\n",cbs->row);); + + obj->select_row(cbs->row); +} + +void +XFE_RDFTreeView::select_row(int row) +{ + HT_Resource node = HT_GetNthItem(_ht_rdfView, row); + + if (!node) return; + + HT_SetSelection(node); +} + +void +XFE_RDFTreeView::deselect_cb(Widget, + XtPointer clientData, + XtPointer callData) +{ + XFE_RDFTreeView *obj = (XFE_RDFTreeView*)clientData; + XmLGridCallbackStruct *cbs = (XmLGridCallbackStruct *)callData; + + D(fprintf(stderr,"deselect_cb(%d)\n",cbs->row);); + + obj->deselect_row(cbs->row); +} + +void +XFE_RDFTreeView::deselect_row(int row) +{ + HT_Resource node = HT_GetNthItem(_ht_rdfView, row); + + if (!node) return; + + HT_SetSelectedState(node,False); +} +////////////////////////////////////////////////////////////////////////// +void +XFE_RDFTreeView::notify(HT_Notification /* ns */, HT_Resource n, + HT_Event whatHappened) +{ + switch (whatHappened) { + case HT_EVENT_NODE_ADDED: + D(printf("RDFView::HT_Event: %s on %s\n","HT_EVENT_NODE_ADDED", + HT_GetNodeName(n));); + add_row(n); + break; + case HT_EVENT_NODE_DELETED_DATA: + D(printf("RDFView::HT_Event: %s on %s\n","HT_EVENT_NODE_DELETED_DATA", + HT_GetNodeName(n));); + break; + case HT_EVENT_NODE_DELETED_NODATA: + { + D(printf("RDFView::HT_Event: %s on %s\n","HT_EVENT_NODE_DELETED_NODATA", + HT_GetNodeName(n));); +#ifdef UNDEF + // Is this a container node? + Boolean expands = HT_IsContainer(n); + PRBool isExpanded = False; + + // Is the node expanded? + if (expands) { + HT_GetOpenState(n, &isExpanded); + } + + int row = HT_GetNodeIndex(_ht_rdfView, n); + delete_row(row); +#endif /* UNDEF */ + break; + } + case HT_EVENT_NODE_VPROP_CHANGED: + D(printf("RDFView::HT_Event: %s on %s\n","HT_EVENT_NODE_VPROP_CHANGED", + HT_GetNodeName(n));); + break; + case HT_EVENT_NODE_SELECTION_CHANGED: + D(printf("RDFView::HT_Event: %s on %s\n","HT_EVENT_NODE_SELECTION_CHANGED", + HT_GetNodeName(n));); + break; + case HT_EVENT_NODE_OPENCLOSE_CHANGED: + { + D(printf("RDFView::HT_Event: %s on %s\n","HT_EVENT_NODE_OPENCLOSE_CHANGED", + HT_GetNodeName(n));); + refresh(n); + Boolean expands = HT_IsContainer(n); + + + if (expands) + { + PRBool isExpanded = False; + + HT_GetOpenState(n, &isExpanded); + int row = HT_GetNodeIndex(_ht_rdfView, n); + + if (isExpanded) // The node has been opened + { + // Expand the row + XtVaSetValues(m_widget, XmNrow, row, + XmNrowIsExpanded, True, NULL); + } + else + { + // collapse the row + XtVaSetValues(m_widget, XmNrow, row, + XmNrowIsExpanded, False, NULL); + } + } + + + break; + } + case HT_EVENT_VIEW_CLOSED: + D(printf("RDFView::HT_Event: %s on %s\n","HT_EVENT_VIEW_CLOSED", + HT_GetNodeName(n));); + break; + case HT_EVENT_VIEW_SELECTED: + { + XP_ASSERT( 0 ); + +// +// Handled in XFE_RDFView +// + +// D(printf("RDFView::HT_Event: %s on %s\n","HT_EVENT_VIEW_SELECTED", +// HT_GetNodeName(n));); + +// HT_View view = HT_GetView(n); +// char * label = HT_GetViewName(view); + + +// if (_ht_rdfView != view) { +// XtVaSetValues (viewName, +// XmNlabelString, XmStringCreateLocalized(label), +// NULL); +// } + +// if (_ht_rdfView != view) +// setHTView(view); + } + break; + case HT_EVENT_NODE_OPENCLOSE_CHANGING: + { + D(printf("RDFView::HT_Event: %s on %s\n","HT_EVENT_NODE_OPENCLOSE_CHANGING", + HT_GetNodeName(n));); + break; + } + case HT_EVENT_VIEW_REFRESH: + { + int row = HT_GetNodeIndex(_ht_rdfView, n); + PRBool expands = HT_IsContainer(n); + PRBool isExpanded = False; + if (expands) + HT_GetOpenState(n, &isExpanded); + if (expands && isExpanded) + XmLTreeDeleteChildren(m_widget, row); + + refresh(n); + + break; + } + default: + D(printf("RDFView::HT_Event: Unknown type on %s\n",HT_GetNodeName(n));); + break; + } +} +////////////////////////////////////////////////////////////////////// +void +XFE_RDFTreeView::setHTView(HT_View htview) +{ + if (htview == _ht_rdfView) + { + return; + } + + _ht_rdfView = htview; + + if (!_ht_rdfView) + { + return; + } + + fill_tree(); +} +////////////////////////////////////////////////////////////////////// +HT_View +XFE_RDFTreeView::getHTView() +{ + return _ht_rdfView; +} +////////////////////////////////////////////////////////////////////// +void +XFE_RDFTreeView::fill_tree() +{ + XP_ASSERT(m_widget); + if (!_ht_rdfView || !m_widget) + return; + + int +item_count = HT_GetItemListCount(_ht_rdfView); + + XtVaSetValues(m_widget, + XmNlayoutFrozen, True, + XmNcolumns, 1, + NULL); + + XmLGridDeleteAllRows(m_widget, XmCONTENT); + + // Set default values for column headings + // (Should make so that the grid widget has separate defaults + // for headings and content cells) + XtVaSetValues(m_widget, + XmNcellDefaults, True, + XmNcellLeftBorderType, XmBORDER_LINE, + XmNcellRightBorderType, XmBORDER_LINE, + XmNcellTopBorderType, XmBORDER_LINE, + XmNcellBottomBorderType, XmBORDER_LINE, + NULL); + + // add columns + char *column_name; + uint32 column_width; + void *token; + uint32 token_type; + int ii = 0; + HT_Cursor column_cursor = HT_NewColumnCursor (_ht_rdfView); + while (HT_GetNextColumn(column_cursor, &column_name, &column_width, + &token, &token_type)) { + add_column(ii, column_name, column_width, token, token_type); + ii++; + } + HT_DeleteColumnCursor(column_cursor); + + // Set default values for new content cells + XtVaSetValues(m_widget, + XmNcellDefaults, True, + XmNcellMarginLeft, 1, + XmNcellMarginRight, 1, + XmNcellLeftBorderType, XmBORDER_NONE, + XmNcellRightBorderType, XmBORDER_NONE, + XmNcellTopBorderType, XmBORDER_NONE, + XmNcellBottomBorderType, XmBORDER_NONE, + NULL); + + + // add rows + for (ii=0; ii < item_count; ii++) { + add_row(ii); + } + + XtVaSetValues(m_widget, + XmNlayoutFrozen, False, + NULL); +} + +void +XFE_RDFTreeView::destroy_tree() +{ +} + +void +XFE_RDFTreeView::add_row(int row) +{ + HT_Resource node = HT_GetNthItem (_ht_rdfView, row); + add_row(node); +} + +void +XFE_RDFTreeView::add_row +(HT_Resource node) +{ + //HT_Resource node = GetNthItem (_ht_rdfView, row); + int row = HT_GetNodeIndex(_ht_rdfView, node); + char *name = HT_GetNodeName(node); + int depth = HT_GetItemIndentation(node); + Boolean expands = HT_IsContainer(node); + Boolean isExpanded = HT_IsContainerOpen(node); + + /*D( fprintf(stderr,"XFE_RDFTreeView::add_row(0x%x %d) name(%s) depth(%d)\n", + node,row, name, depth);)*/ + + Pixmap pixmap, mask; + + //pixmap = XmUNSPECIFIED_PIXMAP; + //pixmask = XmUNSPECIFIED_PIXMAP; + if (expands && isExpanded) { + pixmap = openedFolder.pixmap; + mask = openedFolder.mask; + } else if (expands && !isExpanded) { + pixmap = closedFolder.pixmap; + mask = closedFolder.mask; + } else { + pixmap = bookmark.pixmap; + mask = bookmark.mask; + } + + XmString xmstr = XmStringCreateSimple(name); + + XmLTreeAddRow(m_widget, + depth, + expands, + isExpanded, + row, + pixmap, + mask, + xmstr); + + XmStringFree(xmstr); + + int column_count; + // Should only need to do this for visible columns + XtVaGetValues(m_widget, XmNcolumns, &column_count, NULL); + RDFColumnData *column_data; + void *data; + for (int ii = 0; ii < column_count; ii++) + { + XmLGridColumn column = XmLGridGetColumn(m_widget, XmCONTENT, ii); + XtVaGetValues(m_widget, + XmNcolumnPtr, column, + XmNcolumnUserData, &column_data, + NULL); + + Boolean is_editable = HT_IsNodeDataEditable(node, + column_data->token, + column_data->token_type); + XtVaSetValues(m_widget, + XmNrow, row, + XmNcolumn, ii, + XmNcellEditable, is_editable, + NULL); + + if (HT_GetNodeData (node, column_data->token, + column_data->token_type, &data) + && data) + { + time_t dateVal; + struct tm* time; + char buffer[200]; + + switch (column_data->token_type) + { + case HT_COLUMN_DATE_STRING: + if ((dateVal = (time_t)atol((char *)data)) == 0) break; + if ((time = localtime(&dateVal)) == NULL) break; + HTFE_MakePrettyDate(buffer, dateVal); + break; + case HT_COLUMN_DATE_INT: + if ((time = localtime((time_t *) &data)) == NULL) break; + HTFE_MakePrettyDate(buffer, (time_t)data); + break; + case HT_COLUMN_INT: + sprintf(buffer,"%d",(int)data); + break; + case HT_COLUMN_STRING: + strcpy(buffer, (char*)data); + break; + } + /*D(fprintf(stderr,"Node data (%d, %d) = '%s'\n",row,ii,buffer););*/ + XmLGridSetStringsPos(m_widget, + XmCONTENT, row, + XmCONTENT, ii, + buffer); + } + else + { + /*D(fprintf(stderr,"No column data r(%d) c(%d) type(%d)\n",row,ii, + column_data->token_type););*/ + } + } +} + +void +XFE_RDFTreeView::delete_row(int row) +{ + + XmLGridDeleteRows(m_widget, XmCONTENT, row, 1); + +} + +void +XFE_RDFTreeView::add_column(int index, char *name, uint32 width, + void *token, uint32 token_type) +{ + D( fprintf(stderr,"XFE_RDFTreeView::add_column index(%d) name(%s) width(%d)\n", + index, name,width);); + + if (index > 0) { + XmLGridAddColumns(m_widget, XmCONTENT, index, 1); + } + + RDFColumnData *column_data = new RDFColumnData(token, token_type); + XtVaSetValues(m_widget, + XmNcolumn, index, + XmNcolumnSizePolicy, XmCONSTANT, + XmNcolumnWidth, width, + XmNcolumnUserData, column_data, + NULL); + + XmLGridSetStringsPos(m_widget, + XmHEADING, 0, + XmCONTENT, index, + name); +} + +void +XFE_RDFTreeView::delete_column(HT_Resource /* cursor */) +{ + +} + +void +XFE_RDFTreeView::expand_row_cb(Widget, + XtPointer clientData, + XtPointer callData) +{ + XFE_RDFTreeView *obj = (XFE_RDFTreeView*)clientData; + XmLGridCallbackStruct *cbs = (XmLGridCallbackStruct *)callData; + + D(fprintf(stderr,"expand_row_cb(%d)\n",cbs->row);); + + obj->expand_row(cbs->row); +} + +void +XFE_RDFTreeView::expand_row(int row) +{ + HT_Resource node = HT_GetNthItem (_ht_rdfView, row); + + HT_SetOpenState (node, (PRBool)TRUE); +} + +void +XFE_RDFTreeView::collapse_row_cb(Widget, + XtPointer clientData, + XtPointer callData) +{ + XFE_RDFTreeView *obj = (XFE_RDFTreeView*)clientData; + XmLGridCallbackStruct *cbs = (XmLGridCallbackStruct *)callData; + + D(fprintf(stderr,"collapse_row_cb(%d)\n",cbs->row);); + + obj->collapse_row(cbs->row); +} + +void +XFE_RDFTreeView::collapse_row(int row) +{ + HT_Resource node = HT_GetNthItem (_ht_rdfView, row); + + HT_SetOpenState (node, (PRBool)FALSE); +} + +void +XFE_RDFTreeView::delete_cb(Widget w, + XtPointer /*clientData*/, + XtPointer callData) +{ + XmLGridCallbackStruct *cbs = (XmLGridCallbackStruct *)callData; + + XmLGridColumn column; + RDFColumnData *column_data = NULL; + + cbs = (XmLGridCallbackStruct *)callData; + + if (cbs->reason != XmCR_DELETE_COLUMN) + return; + + column = XmLGridGetColumn(w, XmCONTENT, cbs->column); + + XtVaGetValues(w, + XmNcolumnPtr, column, + XmNcolumnUserData, &column_data, + NULL); + + delete column_data; +} + +void +XFE_RDFTreeView::activate_cb(Widget, + XtPointer clientData, + XtPointer callData) +{ + XFE_RDFTreeView *obj = (XFE_RDFTreeView*)clientData; + XmLGridCallbackStruct *cbs = (XmLGridCallbackStruct *)callData; + + if (cbs->rowType != XmCONTENT) + return; + + obj->activate_row(cbs->row); +} + +// +// Popup menu stuff +// +void +XFE_RDFTreeView::popup_cb(Widget, + XtPointer clientData, + XtPointer callData) +{ + XFE_RDFTreeView *obj = (XFE_RDFTreeView*)clientData; + XmLGridCallbackStruct *cbs = (XmLGridCallbackStruct *)callData; + + if (cbs->rowType != XmCONTENT) + return; + + obj->doPopup(cbs->event); +} + +////////////////////////////////////////////////////////////////////////// +void +XFE_RDFTreeView::doPopup(XEvent * event) +{ + if (_popup) + { + delete _popup; //destroy the old one first + } + _popup = new XFE_RDFPopupMenu("popup", + //getFrame(), + FE_GetToplevelWidget(), + _ht_rdfView, + FALSE, // not isWorkspace + FALSE); // no background commands for now + + _popup->position(event); + _popup->show(); +} +////////////////////////////////////////////////////////////////////////// +XFE_RDFPopupMenu::XFE_RDFPopupMenu(String name, Widget parent, + HT_View view, + Boolean isWorkspace, Boolean isBackground) + : XFE_SimplePopupMenu(name, parent) +{ + m_pane = HT_GetPane(view); + + HT_Cursor cursor = HT_NewContextualMenuCursor(view, isWorkspace, isBackground); + HT_MenuCmd command; + while(HT_NextContextMenuItem(cursor, &command)) + { + if (command == HT_CMD_SEPARATOR) + addSeparator(); + else + addPushButton(HT_GetMenuCmdName(command), (XtPointer)command, + HT_IsMenuCmdEnabled(m_pane, command)); + } +} + +void +XFE_RDFPopupMenu::PushButtonActivate(Widget /* w */, XtPointer userData) +{ + HT_DoMenuCmd(m_pane, (HT_MenuCmd)(int)userData); +} +////////////////////////////////////////////////////////////////////////// +// +// Toggle the stand alone state +// +////////////////////////////////////////////////////////////////////////// +void +XFE_RDFTreeView::setStandAloneState(XP_Bool state) +{ + XP_ASSERT( XfeIsAlive(m_widget) ); + + _standAloneState = state; + + int visibleColumns = (_standAloneState ? 0 : 1); + + XtVaSetValues(m_widget, + XmNvisibleColumns, visibleColumns, + NULL); +} +////////////////////////////////////////////////////////////////////////// +XP_Bool +XFE_RDFTreeView::getStandAloneState() +{ + return _standAloneState; +} +////////////////////////////////////////////////////////////////////////// + diff --git a/mozilla/cmd/xfe/src/RDFTreeView.h b/mozilla/cmd/xfe/src/RDFTreeView.h new file mode 100644 index 00000000000..8202a54127c --- /dev/null +++ b/mozilla/cmd/xfe/src/RDFTreeView.h @@ -0,0 +1,153 @@ +/* -*- 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. + */ + +/*----------------------------------------------------------------------*/ +/* */ +/* Name: RDFTreeView.h */ +/* Description: XFE_RDFTreeView component header file - A class to */ +/* encapsulate and rdf tree widget. */ +/* Author: Ramiro Estrugo */ +/* */ +/*----------------------------------------------------------------------*/ + +#ifndef _xfe_rdf_tree_view_h_ +#define _xfe_rdf_tree_view_h_ + +#include "View.h" +#include "IconGroup.h" +#include "htrdf.h" +#include "NavCenterView.h" +#include "PopupMenu.h" + +class XFE_RDFPopupMenu : public XFE_SimplePopupMenu +{ +public: + XFE_RDFPopupMenu(String name, Widget parent, + HT_View view, + Boolean isWorkspace, Boolean isBackground); + + void PushButtonActivate(Widget w, XtPointer userData); + +protected: + HT_Pane m_pane; +}; + +class XFE_RDFTreeView : public XFE_View +{ +public: + XFE_RDFTreeView(XFE_Component *toplevel, Widget parent, + XFE_View *parent_view, MWContext *context); + + ~XFE_RDFTreeView(); + + // 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 */) {return NULL;} + virtual char *getCellDocString(int /* row */, int /* column */) {return NULL;} + + // Refresh the outliner + void refresh(HT_Resource node); + + // Open properties dialog + //void openPropertiesWindow(); + //void closePropertiesWindow(); + + // RDF Specific calls + void notify(HT_Notification ns, HT_Resource n, HT_Event whatHappened); + + + void doPopup(XEvent *event); + + // HT view set/get methods + void setHTView(HT_View view); + HT_View getHTView(); + + // Stand alone set/get methods + void setStandAloneState(XP_Bool state); + XP_Bool getStandAloneState(); + +private: + + // The view as registered in the hypertree + HT_View _ht_rdfView; + + // The popup menu + XFE_RDFPopupMenu * _popup; + + // Is this a stand alone view ? + XP_Bool _standAloneState; + + // icons for use in the bookmark window. + static fe_icon bookmark; + static fe_icon openedFolder; + static fe_icon closedFolder; + + void init_pixmaps(); + + void fill_tree(); + void destroy_tree(); + + void add_row(HT_Resource node); + void add_row(int node); + void delete_row(int row); + void add_column(int index, char *name, uint32 width, + void *token, uint32 token_type); + + void expand_row(int row); + void collapse_row(int row); + void delete_column(HT_Resource cursor); + void activate_row(int row); + void resize(XtPointer); + void edit_cell(XtPointer); + void select_row(int row); + void deselect_row(int row); + + static void expand_row_cb(Widget, XtPointer, XtPointer); + static void collapse_row_cb(Widget, XtPointer, XtPointer); + static void delete_cb(Widget, XtPointer, XtPointer); + static void activate_cb(Widget, XtPointer, XtPointer); + static void resize_cb(Widget, XtPointer, XtPointer); + static void edit_cell_cb(Widget, XtPointer, XtPointer); + static void deselect_cb(Widget, XtPointer, XtPointer); + static void select_cb(Widget, XtPointer, XtPointer); + static void popup_cb(Widget, XtPointer, XtPointer); + +#ifdef NOTYET + void dropfunc(Widget dropw, fe_dnd_Event type, fe_dnd_Source *source, XEvent *event); + static void drop_func(Widget dropw, void *closure, fe_dnd_Event type, + fe_dnd_Source *source, XEvent* event); + + static fe_icon mailBookmark; + static fe_icon newsBookmark; + static fe_icon changedBookmark; + // static fe_icon unknownBookmark; + static fe_icon closedPersonalFolder; + static fe_icon openedPersonalFolder; + static fe_icon closedFolderDest; + static fe_icon openedFolderDest; + static fe_icon closedFolderMenu; + static fe_icon openedFolderMenu; + static fe_icon closedFolderMenuDest; + static fe_icon openedFolderMenuDest; +#endif /*NOTYET*/ +}; + +#endif // _xfe_rdf_tree_view_h_ diff --git a/mozilla/cmd/xfe/src/RDFView.cpp b/mozilla/cmd/xfe/src/RDFView.cpp index c7d72c474a8..b4c08afdd19 100644 --- a/mozilla/cmd/xfe/src/RDFView.cpp +++ b/mozilla/cmd/xfe/src/RDFView.cpp @@ -26,9 +26,11 @@ #include "Command.h" #include "xfe2_extern.h" #include "xpgetstr.h" -#include + #include -#include +#include +#include +#include #define TREE_NAME "RdfTree" @@ -38,11 +40,6 @@ #define D(x) #endif -// pixmaps for use in the bookmark window. -fe_icon XFE_RDFView::bookmark = { 0 }; -fe_icon XFE_RDFView::closedFolder = { 0 }; -fe_icon XFE_RDFView::openedFolder = { 0 }; - #define SECONDS_PER_DAY 86400L typedef struct _closeRdfViewCBStruct { @@ -51,942 +48,152 @@ typedef struct _closeRdfViewCBStruct { XFE_NavCenterView * ncview; } closeRdfViewCBStruct; - -extern int XP_BKMKS_HOURS_AGO; -extern int XP_BKMKS_DAYS_AGO; -extern int XP_BKMKS_LESS_THAN_ONE_HOUR_AGO; - -struct RDFColumnData -{ - RDFColumnData(void) : token(NULL), token_type(0) {} - RDFColumnData(void *t, uint32 tt) : token(t), token_type(tt) {} - - void* token; - uint32 token_type; -}; - - -void HTFE_MakePrettyDate(char* buffer, time_t lastVisited) -{ - buffer[0] = 0; - time_t today = XP_TIME(); - int elapsed = today - lastVisited; - - if (elapsed < SECONDS_PER_DAY) - { - int32 hours = (elapsed + 1800L) / 3600L; - if (hours < 1) - { - XP_STRCPY(buffer, XP_GetString(XP_BKMKS_LESS_THAN_ONE_HOUR_AGO)); - } - sprintf(buffer, XP_GetString(XP_BKMKS_HOURS_AGO), hours); - } - else if (elapsed < (SECONDS_PER_DAY * 31)) - { - sprintf(buffer, XP_GetString(XP_BKMKS_DAYS_AGO), - (elapsed + (SECONDS_PER_DAY / 2)) / SECONDS_PER_DAY); - } - else - { - struct tm* tmp; - tmp = localtime(&lastVisited); - - sprintf(buffer, asctime(tmp)); - } -} - - -// -// Command Handling -// - -// -// This acts as an encapsulator for the doCommand() method. -// Sub-classes impliment a reallyDoCommand(), and leave the -// boring maintainence work to this class. This approach -// saves every sub-class from calling super::doCommand(), -// which would really be a drag, now wouldn't it. -// -class XFE_RDFViewCommand : public XFE_ViewCommand -{ -public: - XFE_RDFViewCommand(char* name) : XFE_ViewCommand(name) {}; - - virtual void reallyDoCommand(XFE_RDFView*, XFE_CommandInfo*) = 0; - virtual XP_Bool requiresChromeUpdate() { - return TRUE; - }; - void doCommand(XFE_View* v_view, XFE_CommandInfo* info) { - XFE_RDFView* view = (XFE_RDFView*)v_view; - reallyDoCommand(view, info); - if (requiresChromeUpdate()) { - //XXX view->updateChrome(); - } - }; -}; - -class XFE_RDFViewAlwaysEnabledCommand : public XFE_RDFViewCommand -{ -public: - XFE_RDFViewAlwaysEnabledCommand(char* name) : XFE_RDFViewCommand(name) {}; - - XP_Bool isEnabled(XFE_View*, XFE_CommandInfo*) { - return True; - }; -}; - -class RdfPopupCommand : public XFE_RDFViewAlwaysEnabledCommand -{ -public: - RdfPopupCommand() : XFE_RDFViewAlwaysEnabledCommand(xfeCmdShowPopup) {}; - - virtual XP_Bool isSlow() { - return FALSE; - }; - - void reallyDoCommand(XFE_RDFView* view, XFE_CommandInfo* info) { - view->doPopup(info->event); - }; -}; - -// END OF COMMAND DEFINES - -static XFE_CommandList* my_commands = 0; - +////////////////////////////////////////////////////////////////////////// XFE_RDFView::XFE_RDFView(XFE_Component * toplevel, Widget parent, XFE_View * parent_view, MWContext * context) : XFE_View(toplevel, parent_view, context), + _ht_rdfView(NULL), + _viewLabel(NULL), + _controlToolBar(NULL), + _addBookmarkControl(NULL), + _closeControl(NULL), + _modeControl(NULL), + _rdfTreeView(NULL), _standAloneState(False) { - m_rdfview = NULL; - m_popup = NULL; - + // Main form + Widget rdfMainForm = XtVaCreateWidget("rdfMainForm", + xmFormWidgetClass, + parent, + XmNshadowThickness, 0, + NULL); - if (!my_commands) - registerCommand(my_commands, new RdfPopupCommand); + setBaseWidget(rdfMainForm); - rdfControlsParent = XtVaCreateManagedWidget("rdfViewParent", - xmFormWidgetClass, - parent, - XmNtopAttachment, XmATTACH_FORM, - XmNrightAttachment, XmATTACH_FORM, - XmNleftAttachment, XmATTACH_FORM, - XmNbottomAttachment, XmATTACH_NONE, - NULL); + // Control Tool Bar + _controlToolBar = + XtVaCreateManagedWidget("controlToolBar", + xfeToolBarWidgetClass, + rdfMainForm, + XmNtopAttachment, XmATTACH_FORM, + XmNrightAttachment, XmATTACH_FORM, + XmNleftAttachment, XmATTACH_NONE, + XmNbottomAttachment, XmATTACH_NONE, + XmNorientation, XmHORIZONTAL, + XmNusePreferredWidth, True, + XmNusePreferredHeight, True, + XmNchildForceWidth, False, + XmNchildForceHeight, True, + XmNchildUsePreferredWidth, True, + XmNchildUsePreferredHeight, False, + NULL); - viewName = XtVaCreateManagedWidget("Name", - xmLabelGadgetClass, - rdfControlsParent, - XmNtopAttachment, XmATTACH_FORM, - XmNrightAttachment, XmATTACH_NONE, - XmNleftAttachment, XmATTACH_FORM, - XmNbottomAttachment, XmATTACH_FORM, - NULL); + // View label + _viewLabel = + XtVaCreateManagedWidget("viewLabel", + xmLabelWidgetClass, + rdfMainForm, + XmNtopAttachment, XmATTACH_WIDGET, + XmNtopWidget, _controlToolBar, + XmNrightAttachment, XmATTACH_FORM, + XmNleftAttachment, XmATTACH_FORM, + XmNbottomAttachment, XmATTACH_NONE, + XmNalignment, XmALIGNMENT_BEGINNING, + NULL); - /* Widget closeRDFView = */XtVaCreateManagedWidget("X", - xmPushButtonWidgetClass, - rdfControlsParent, - XmNtopAttachment, XmATTACH_FORM, - XmNrightAttachment, XmATTACH_FORM, - XmNleftAttachment, XmATTACH_NONE, - XmNbottomAttachment, XmATTACH_FORM, - XmNpushButtonEnabled, True, - NULL); - - closeRdfViewCBStruct * cb_str = new closeRdfViewCBStruct; - - cb_str->rdfview = this; - cb_str->ncview = (XFE_NavCenterView *)parent_view; + // Add Bookmark + _addBookmarkControl = XtVaCreateManagedWidget("addBookmark", + xfeButtonWidgetClass, + _controlToolBar, + NULL); + // Close + _closeControl = XtVaCreateManagedWidget("close", + xfeButtonWidgetClass, + _controlToolBar, + NULL); +#if 0 + // Mode + _modeControl = XtVaCreateManagedWidget("mode", + xfeButtonWidgetClass, + _controlToolBar, + NULL); +#endif + closeRdfViewCBStruct * cb_str = new closeRdfViewCBStruct; + + cb_str->rdfview = this; + cb_str->ncview = (XFE_NavCenterView *)parent_view; + #ifdef NOT_YET - XtAddCallback(closeRDFView, XmNactivateCallback, (XtCallbackProc)closeRdfView_cb , (void *)cb_str); + XtAddCallback(closeRDFView, XmNactivateCallback, (XtCallbackProc)closeRdfView_cb , (void *)cb_str); #endif /* NOT_YET */ + + // Create the rdf tree view + _rdfTreeView = new XFE_RDFTreeView(toplevel, + rdfMainForm, + this, + context); - m_tree = - XtVaCreateManagedWidget(TREE_NAME, - xmlTreeWidgetClass, - parent, - XmNshadowThickness, 0, - XmNhorizontalSizePolicy, XmRESIZE_IF_POSSIBLE, - XmNallowColumnResize, True, - XmNselectionPolicy, XmSELECT_MULTIPLE_ROW, - XmNheadingRows, 1, - XmNvisibleRows, 14, - XmNhideUnhideButtons, True, - //XmNdebugLevel, 1, - /* Form resources */ - XmNtopAttachment, XmATTACH_WIDGET, - XmNtopWidget, rdfControlsParent, - XmNbottomAttachment, XmATTACH_FORM, - XmNleftAttachment, XmATTACH_FORM, - XmNrightAttachment, XmATTACH_FORM, - XmNtopOffset, 2, - XmNbottomOffset, 2, - XmNleftOffset, 2, - XmNrightOffset, 2, - NULL); - - /* - * i don't think this is right. Shall check with slamm change it soon. - * - Radha - */ - setBaseWidget(m_tree); - - XtVaSetValues(m_widget, XmNcellAlignment, XmALIGNMENT_LEFT, NULL); - XtVaSetValues(m_widget, - XmNcellDefaults, True, - XmNcellAlignment, XmALIGNMENT_LEFT, - NULL); - - init_pixmaps(); - - XtAddCallback(m_widget, XmNexpandCallback, expand_row_cb, this); - XtAddCallback(m_widget, XmNcollapseCallback, collapse_row_cb, this); - XtAddCallback(m_widget, XmNdeleteCallback, delete_cb, NULL); - XtAddCallback(m_widget, XmNactivateCallback, activate_cb, this); - XtAddCallback(m_widget, XmNresizeCallback, resize_cb, this); - XtAddCallback(m_widget, XmNeditCallback, edit_cell_cb, this); - XtAddCallback(m_widget, XmNselectCallback, select_cb, this); - XtAddCallback(m_widget, XmNdeselectCallback, deselect_cb, this); - //XtInsertEventHandler(m_widget, ButtonPressMask, False, button_eh, this, XtListTail); - XtAddCallback(m_widget, XmNpopupCallback, popup_cb, this); - - //fe_AddTipStringCallback(outline, XFE_Outliner::tip_cb, this); + // Place the tree underneath the view label + XtVaSetValues(_rdfTreeView->getBaseWidget(), + XmNtopAttachment, XmATTACH_WIDGET, + XmNtopWidget, _viewLabel, + XmNrightAttachment, XmATTACH_FORM, + XmNleftAttachment, XmATTACH_FORM, + XmNbottomAttachment, XmATTACH_FORM, + NULL); + // Show the tree + _rdfTreeView->show(); } - +////////////////////////////////////////////////////////////////////////// XFE_RDFView::~XFE_RDFView() { - if (m_popup) - delete m_popup; -} - - -void -XFE_RDFView::init_pixmaps(void) -{ - Pixel bg_pixel; - - XtVaGetValues(m_widget, XmNbackground, &bg_pixel, 0); - - Widget shell = XfeAncestorFindByClass(getToplevel()->getBaseWidget(), - shellWidgetClass, - XfeFIND_ANY); - if (!bookmark.pixmap) - fe_NewMakeIcon(shell, - BlackPixelOfScreen(XtScreen(m_widget)), - bg_pixel, - &bookmark, - NULL, - BM_Bookmark.width, BM_Bookmark.height, - BM_Bookmark.mono_bits, BM_Bookmark.color_bits, - BM_Bookmark.mask_bits, FALSE); - if (!closedFolder.pixmap) - fe_NewMakeIcon(shell, - BlackPixelOfScreen(XtScreen(m_widget)), - bg_pixel, - &closedFolder, - NULL, - BM_Folder.width, BM_Folder.height, - BM_Folder.mono_bits, BM_Folder.color_bits, - BM_Folder.mask_bits, FALSE); - - if (!openedFolder.pixmap) - fe_NewMakeIcon(shell, - BlackPixelOfScreen(XtScreen(m_widget)), - bg_pixel, - &openedFolder, - NULL, - BM_FolderO.width, BM_FolderO.height, - BM_FolderO.mono_bits, BM_FolderO.color_bits, - BM_FolderO.mask_bits, FALSE); -} - -void -XFE_RDFView::activate_row(int row) -{ - HT_Resource node = HT_GetNthItem(m_rdfview, row); - - if (!node) return; - -#if 0 - if (data->ctrl) - { - HT_ToggleSelection(node); - m_outliner->toggleSelected(data->row); - } - else if (data->shift) - { - HT_SetSelectionRange(node, m_node); - m_outliner->trimOrExpandSelection(data->row); - } - else - { - HT_SetSelection(node); - m_outliner->selectItemExclusive(data->row); - - } - getToplevel()->notifyInterested(XFE_View::chromeNeedsUpdating); -#endif /*0*/ - - if (!HT_IsContainer(node)) { - // Dispatch in new window - char *s = HT_GetNodeURL (node); - URL_Struct *url = NET_CreateURLStruct (s, NET_DONT_RELOAD); - //url->window_target = XP_STRDUP("_rdf_target"); - fe_reuseBrowser (m_contextData, url); - } -} - -void -XFE_RDFView::resize_cb(Widget, - XtPointer clientData, - XtPointer callData) -{ - XFE_RDFView *obj = (XFE_RDFView*)clientData; - - obj->resize(callData); -} - -void -XFE_RDFView::resize(XtPointer callData) -{ - XmLGridCallbackStruct *cbs = (XmLGridCallbackStruct*)callData; - - XP_ASSERT(m_widget); - if(!m_widget) - return; - - if (cbs->reason == XmCR_RESIZE_COLUMN) - { - D( printf("Inside XFE_RDFView::resize(COLUMN, %d)\n", cbs->column);); - } -} - - -void -XFE_RDFView::refresh(HT_Resource node) -{ - if (!m_rdfview) return; - - XP_ASSERT(HT_IsContainer(node)); - if (!HT_IsContainer(node)) return; - - if (HT_IsContainerOpen(node)) - { - HT_Resource child; - - HT_Cursor child_cursor = HT_NewCursor(node); - - while (child = HT_GetNextItem(child_cursor)) - { - add_row(child); - - if (HT_IsContainer(child) && HT_IsContainerOpen(child)) - refresh(child); - } - HT_DeleteCursor(child_cursor); - } - else - { - int row = HT_GetNodeIndex(m_rdfview, node); - - XmLTreeDeleteChildren(m_widget, row); - } -} - -void -XFE_RDFView::edit_cell_cb(Widget, - XtPointer clientData, - XtPointer callData) -{ - XFE_RDFView *obj = (XFE_RDFView*)clientData; - - obj->edit_cell(callData); -} - -void -XFE_RDFView::edit_cell(XtPointer callData) -{ - XP_ASSERT(m_widget); - if(!m_widget) - return; - - XmLGridCallbackStruct *cbs = (XmLGridCallbackStruct*)callData; - HT_Resource node = HT_GetNthItem (m_rdfview, cbs->row); - - if (node && cbs->reason == XmCR_EDIT_COMPLETE) - { - XmLGridColumn column = XmLGridGetColumn(m_widget, XmCONTENT, - cbs->column); - RDFColumnData *column_data = NULL; - - XtVaGetValues(m_widget, - XmNcolumnPtr, column, - XmNcolumnUserData, &column_data, - NULL); - - XmLGridRow row = XmLGridGetRow(m_widget, XmCONTENT, cbs->row); - XmString cell_string; - - XtVaGetValues(m_widget, - XmNcolumnPtr, column, - XmNrowPtr, row, - XmNcellString, &cell_string, - NULL); - char *text; - XmStringGetLtoR(cell_string, XmSTRING_DEFAULT_CHARSET, &text); - HT_SetNodeData (node, column_data->token, column_data->token_type, - text); - } -} - -void -XFE_RDFView::select_cb(Widget, - XtPointer clientData, - XtPointer callData) -{ - XFE_RDFView *obj = (XFE_RDFView*)clientData; - XmLGridCallbackStruct *cbs = (XmLGridCallbackStruct *)callData; - - D(fprintf(stderr,"select_cb(%d)\n",cbs->row);); - - obj->select_row(cbs->row); -} - -void -XFE_RDFView::select_row(int row) -{ - HT_Resource node = HT_GetNthItem(m_rdfview, row); - - if (!node) return; - - HT_SetSelection(node); -} - -void -XFE_RDFView::deselect_cb(Widget, - XtPointer clientData, - XtPointer callData) -{ - XFE_RDFView *obj = (XFE_RDFView*)clientData; - XmLGridCallbackStruct *cbs = (XmLGridCallbackStruct *)callData; - - D(fprintf(stderr,"deselect_cb(%d)\n",cbs->row);); - - obj->deselect_row(cbs->row); -} - -void -XFE_RDFView::deselect_row(int row) -{ - HT_Resource node = HT_GetNthItem(m_rdfview, row); - - if (!node) return; - - HT_SetSelectedState(node,False); } ////////////////////////////////////////////////////////////////////////// void -XFE_RDFView::notify(HT_Notification /* ns */, HT_Resource n, - HT_Event whatHappened) +XFE_RDFView::notify(HT_Notification ns, + HT_Resource n, + HT_Event whatHappened) { - switch (whatHappened) { - case HT_EVENT_NODE_ADDED: - D(printf("RDFView::HT_Event: %s on %s\n","HT_EVENT_NODE_ADDED", - HT_GetNodeName(n));); - add_row(n); - break; - case HT_EVENT_NODE_DELETED_DATA: - D(printf("RDFView::HT_Event: %s on %s\n","HT_EVENT_NODE_DELETED_DATA", - HT_GetNodeName(n));); - break; - case HT_EVENT_NODE_DELETED_NODATA: - { - D(printf("RDFView::HT_Event: %s on %s\n","HT_EVENT_NODE_DELETED_NODATA", - HT_GetNodeName(n));); -#ifdef UNDEF - // Is this a container node? - Boolean expands = HT_IsContainer(n); - PRBool isExpanded = False; - - // Is the node expanded? - if (expands) { - HT_GetOpenState(n, &isExpanded); - } - - int row = HT_GetNodeIndex(m_rdfview, n); - delete_row(row); -#endif /* UNDEF */ - break; - } - case HT_EVENT_NODE_VPROP_CHANGED: - D(printf("RDFView::HT_Event: %s on %s\n","HT_EVENT_NODE_VPROP_CHANGED", - HT_GetNodeName(n));); - break; - case HT_EVENT_NODE_SELECTION_CHANGED: - D(printf("RDFView::HT_Event: %s on %s\n","HT_EVENT_NODE_SELECTION_CHANGED", - HT_GetNodeName(n));); - break; - case HT_EVENT_NODE_OPENCLOSE_CHANGED: - { - D(printf("RDFView::HT_Event: %s on %s\n","HT_EVENT_NODE_OPENCLOSE_CHANGED", - HT_GetNodeName(n));); - refresh(n); - Boolean expands = HT_IsContainer(n); - - - if (expands) - { - PRBool isExpanded = False; - - HT_GetOpenState(n, &isExpanded); - int row = HT_GetNodeIndex(m_rdfview, n); - - if (isExpanded) // The node has been opened - { - // Expand the row - XtVaSetValues(m_widget, XmNrow, row, - XmNrowIsExpanded, True, NULL); - } - else - { - // collapse the row - XtVaSetValues(m_widget, XmNrow, row, - XmNrowIsExpanded, False, NULL); - } - } - - - break; - } - case HT_EVENT_VIEW_CLOSED: - D(printf("RDFView::HT_Event: %s on %s\n","HT_EVENT_VIEW_CLOSED", - HT_GetNodeName(n));); - break; - case HT_EVENT_VIEW_SELECTED: - { - D(printf("RDFView::HT_Event: %s on %s\n","HT_EVENT_VIEW_SELECTED", - HT_GetNodeName(n));); - - HT_View view = HT_GetView(n); - char * label = HT_GetViewName(view); - - - if (m_rdfview != view) { - XtVaSetValues (viewName, - XmNlabelString, XmStringCreateLocalized(label), - NULL); - } - - if (m_rdfview != view) - setRDFView(view); - } - break; - case HT_EVENT_NODE_OPENCLOSE_CHANGING: - { - D(printf("RDFView::HT_Event: %s on %s\n","HT_EVENT_NODE_OPENCLOSE_CHANGING", - HT_GetNodeName(n));); - break; - } - case HT_EVENT_VIEW_REFRESH: - { - int row = HT_GetNodeIndex(m_rdfview, n); - PRBool expands = HT_IsContainer(n); - PRBool isExpanded = False; - if (expands) - HT_GetOpenState(n, &isExpanded); - if (expands && isExpanded) - XmLTreeDeleteChildren(m_widget, row); - - refresh(n); - - break; - } - default: - D(printf("RDFView::HT_Event: Unknown type on %s\n",HT_GetNodeName(n));); - break; - } -} -////////////////////////////////////////////////////////////////////// -void -XFE_RDFView::setRDFView(HT_View htview) -{ - if (htview == m_rdfview) return; - - m_rdfview = htview; - - if (!m_rdfview) return; - - fill_tree(); -} -////////////////////////////////////////////////////////////////////// -void -XFE_RDFView::fill_tree() -{ - XP_ASSERT(m_widget); - if (!m_rdfview || !m_widget) - return; - - int -item_count = HT_GetItemListCount(m_rdfview); - - XtVaSetValues(m_widget, - XmNlayoutFrozen, True, - XmNcolumns, 1, - NULL); - - XmLGridDeleteAllRows(m_widget, XmCONTENT); - - // Set default values for column headings - // (Should make so that the grid widget has separate defaults - // for headings and content cells) - XtVaSetValues(m_widget, - XmNcellDefaults, True, - XmNcellLeftBorderType, XmBORDER_LINE, - XmNcellRightBorderType, XmBORDER_LINE, - XmNcellTopBorderType, XmBORDER_LINE, - XmNcellBottomBorderType, XmBORDER_LINE, - NULL); - - // add columns - char *column_name; - uint32 column_width; - void *token; - uint32 token_type; - int ii = 0; - HT_Cursor column_cursor = HT_NewColumnCursor (m_rdfview); - while (HT_GetNextColumn(column_cursor, &column_name, &column_width, - &token, &token_type)) { - add_column(ii, column_name, column_width, token, token_type); - ii++; - } - HT_DeleteColumnCursor(column_cursor); - - // Set default values for new content cells - XtVaSetValues(m_widget, - XmNcellDefaults, True, - XmNcellMarginLeft, 1, - XmNcellMarginRight, 1, - XmNcellLeftBorderType, XmBORDER_NONE, - XmNcellRightBorderType, XmBORDER_NONE, - XmNcellTopBorderType, XmBORDER_NONE, - XmNcellBottomBorderType, XmBORDER_NONE, - NULL); - - - // add rows - for (ii=0; ii < item_count; ii++) { - add_row(ii); - } - - XtVaSetValues(m_widget, - XmNlayoutFrozen, False, - NULL); -} - -void -XFE_RDFView::destroy_tree() -{ -} - -void -XFE_RDFView::add_row(int row) -{ - HT_Resource node = HT_GetNthItem (m_rdfview, row); - add_row(node); -} - -void -XFE_RDFView::add_row -(HT_Resource node) -{ - //HT_Resource node = GetNthItem (m_rdfview, row); - int row = HT_GetNodeIndex(m_rdfview, node); - char *name = HT_GetNodeName(node); - int depth = HT_GetItemIndentation(node); - Boolean expands = HT_IsContainer(node); - Boolean isExpanded = HT_IsContainerOpen(node); - - /*D( fprintf(stderr,"XFE_RDFView::add_row(0x%x %d) name(%s) depth(%d)\n", - node,row, name, depth);)*/ - - Pixmap pixmap, mask; - - //pixmap = XmUNSPECIFIED_PIXMAP; - //pixmask = XmUNSPECIFIED_PIXMAP; - if (expands && isExpanded) { - pixmap = openedFolder.pixmap; - mask = openedFolder.mask; - } else if (expands && !isExpanded) { - pixmap = closedFolder.pixmap; - mask = closedFolder.mask; - } else { - pixmap = bookmark.pixmap; - mask = bookmark.mask; - } - - XmString xmstr = XmStringCreateSimple(name); - - XmLTreeAddRow(m_widget, - depth, - expands, - isExpanded, - row, - pixmap, - mask, - xmstr); - - XmStringFree(xmstr); - - int column_count; - // Should only need to do this for visible columns - XtVaGetValues(m_widget, XmNcolumns, &column_count, NULL); - RDFColumnData *column_data; - void *data; - for (int ii = 0; ii < column_count; ii++) - { - XmLGridColumn column = XmLGridGetColumn(m_widget, XmCONTENT, ii); - XtVaGetValues(m_widget, - XmNcolumnPtr, column, - XmNcolumnUserData, &column_data, - NULL); - - Boolean is_editable = HT_IsNodeDataEditable(node, - column_data->token, - column_data->token_type); - XtVaSetValues(m_widget, - XmNrow, row, - XmNcolumn, ii, - XmNcellEditable, is_editable, - NULL); - - if (HT_GetNodeData (node, column_data->token, - column_data->token_type, &data) - && data) - { - time_t dateVal; - struct tm* time; - char buffer[200]; - - switch (column_data->token_type) - { - case HT_COLUMN_DATE_STRING: - if ((dateVal = (time_t)atol((char *)data)) == 0) break; - if ((time = localtime(&dateVal)) == NULL) break; - HTFE_MakePrettyDate(buffer, dateVal); - break; - case HT_COLUMN_DATE_INT: - if ((time = localtime((time_t *) &data)) == NULL) break; - HTFE_MakePrettyDate(buffer, (time_t)data); - break; - case HT_COLUMN_INT: - sprintf(buffer,"%d",(int)data); - break; - case HT_COLUMN_STRING: - strcpy(buffer, (char*)data); - break; - } - /*D(fprintf(stderr,"Node data (%d, %d) = '%s'\n",row,ii,buffer););*/ - XmLGridSetStringsPos(m_widget, - XmCONTENT, row, - XmCONTENT, ii, - buffer); - } - else - { - /*D(fprintf(stderr,"No column data r(%d) c(%d) type(%d)\n",row,ii, - column_data->token_type););*/ - } - } -} - -void -XFE_RDFView::delete_row(int row) -{ - - XmLGridDeleteRows(m_widget, XmCONTENT, row, 1); - -} - -void -XFE_RDFView::add_column(int index, char *name, uint32 width, - void *token, uint32 token_type) -{ - D( fprintf(stderr,"XFE_RDFView::add_column index(%d) name(%s) width(%d)\n", - index, name,width);); - - if (index > 0) { - XmLGridAddColumns(m_widget, XmCONTENT, index, 1); - } - - RDFColumnData *column_data = new RDFColumnData(token, token_type); - XtVaSetValues(m_widget, - XmNcolumn, index, - XmNcolumnSizePolicy, XmCONSTANT, - XmNcolumnWidth, width, - XmNcolumnUserData, column_data, - NULL); - - XmLGridSetStringsPos(m_widget, - XmHEADING, 0, - XmCONTENT, index, - name); -} - -void -XFE_RDFView::delete_column(HT_Resource /* cursor */) -{ - -} - -void -XFE_RDFView::expand_row_cb(Widget, - XtPointer clientData, - XtPointer callData) -{ - XFE_RDFView *obj = (XFE_RDFView*)clientData; - XmLGridCallbackStruct *cbs = (XmLGridCallbackStruct *)callData; - - D(fprintf(stderr,"expand_row_cb(%d)\n",cbs->row);); - - obj->expand_row(cbs->row); -} - -void -XFE_RDFView::expand_row(int row) -{ - HT_Resource node = HT_GetNthItem (m_rdfview, row); - - HT_SetOpenState (node, (PRBool)TRUE); -} - -void -XFE_RDFView::collapse_row_cb(Widget, - XtPointer clientData, - XtPointer callData) -{ - XFE_RDFView *obj = (XFE_RDFView*)clientData; - XmLGridCallbackStruct *cbs = (XmLGridCallbackStruct *)callData; - - D(fprintf(stderr,"collapse_row_cb(%d)\n",cbs->row);); - - obj->collapse_row(cbs->row); -} - -void -XFE_RDFView::collapse_row(int row) -{ - HT_Resource node = HT_GetNthItem (m_rdfview, row); - - HT_SetOpenState (node, (PRBool)FALSE); -} - -void -XFE_RDFView::delete_cb(Widget w, - XtPointer /*clientData*/, - XtPointer callData) -{ - XmLGridCallbackStruct *cbs = (XmLGridCallbackStruct *)callData; - - XmLGridColumn column; - RDFColumnData *column_data = NULL; - - cbs = (XmLGridCallbackStruct *)callData; - - if (cbs->reason != XmCR_DELETE_COLUMN) - return; - - column = XmLGridGetColumn(w, XmCONTENT, cbs->column); - - XtVaGetValues(w, - XmNcolumnPtr, column, - XmNcolumnUserData, &column_data, - NULL); - - delete column_data; -} - -void -XFE_RDFView::activate_cb(Widget, - XtPointer clientData, - XtPointer callData) -{ - XFE_RDFView *obj = (XFE_RDFView*)clientData; - XmLGridCallbackStruct *cbs = (XmLGridCallbackStruct *)callData; - - if (cbs->rowType != XmCONTENT) - return; - - obj->activate_row(cbs->row); -} - -// -// Popup menu stuff -// -void -XFE_RDFView::popup_cb(Widget, - XtPointer clientData, - XtPointer callData) -{ - XFE_RDFView *obj = (XFE_RDFView*)clientData; - XmLGridCallbackStruct *cbs = (XmLGridCallbackStruct *)callData; - - if (cbs->rowType != XmCONTENT) - return; - - obj->doPopup(cbs->event); -} - -////////////////////////////////////////////////////////////////////////// -void -XFE_RDFView::doPopup(XEvent * event) -{ - if (m_popup) + // HT_EVENT_VIEW_SELECTED + if (whatHappened == HT_EVENT_VIEW_SELECTED) { - delete m_popup; //destroy the old one first - } - m_popup = new XFE_RDFPopupMenu("popup", - //getFrame(), - FE_GetToplevelWidget(), - m_rdfview, - FALSE, // not isWorkspace - FALSE); // no background commands for now - - m_popup->position(event); - m_popup->show(); + HT_View htView = HT_GetView(n); + char * label = HT_GetViewName(htView); + + XP_ASSERT( _rdfTreeView != NULL ); + + if (_rdfTreeView->getHTView() != htView) + { + _rdfTreeView->setHTView(htView); + + // XXX Aurora NEED TO LOCALIZE XXX + XmString xmstr = XmStringCreateLocalized(label); + + XtVaSetValues(_viewLabel,XmNlabelString,xmstr,NULL); + + XmStringFree(xmstr); + } + } + else + { + XP_ASSERT( _rdfTreeView != NULL ); + + _rdfTreeView->notify(ns,n,whatHappened); + } } - - -////////////////////////////////////////////////////////////////////////// - -XFE_RDFPopupMenu::XFE_RDFPopupMenu(String name, Widget parent, - HT_View view, - Boolean isWorkspace, Boolean isBackground) - : XFE_SimplePopupMenu(name, parent) -{ - m_pane = HT_GetPane(view); - - HT_Cursor cursor = HT_NewContextualMenuCursor(view, isWorkspace, isBackground); - HT_MenuCmd command; - while(HT_NextContextMenuItem(cursor, &command)) - { - if (command == HT_CMD_SEPARATOR) - addSeparator(); - else - addPushButton(HT_GetMenuCmdName(command), (XtPointer)command, - HT_IsMenuCmdEnabled(m_pane, command)); - } -} - +////////////////////////////////////////////////////////////////////// void -XFE_RDFPopupMenu::PushButtonActivate(Widget /* w */, XtPointer userData) +XFE_RDFView::setHTView(HT_View htview) { - HT_DoMenuCmd(m_pane, (HT_MenuCmd)(int)userData); -} + XP_ASSERT( _rdfTreeView != NULL ); + _rdfTreeView->setHTView(htview); +} +////////////////////////////////////////////////////////////////////// void XFE_RDFView::closeRdfView_cb(Widget /* w */, XtPointer clientData, XtPointer /* callData */) { @@ -997,7 +204,7 @@ XFE_RDFView::closeRdfView_cb(Widget /* w */, XtPointer clientData, XtPointer /* Widget selector = (Widget )ncview->getSelector(); // Widget nc_base_widget = ncview->getBaseWidget(); - Widget parent = XtParent(obj->rdfview->rdfControlsParent); + Widget parent = XtParent(obj->rdfview->_controlToolBar); /* XtVaSetValues(nc_base_widget, XmNresizable, True, NULL); */ @@ -1019,15 +226,9 @@ XFE_RDFView::closeRdfView_cb(Widget /* w */, XtPointer clientData, XtPointer /* void XFE_RDFView::setStandAloneState(XP_Bool state) { - XP_ASSERT( XfeIsAlive(m_tree) ); + XP_ASSERT( _rdfTreeView != NULL ); - _standAloneState = state; - - int visibleColumns = (_standAloneState ? 0 : 1); - - XtVaSetValues(m_tree, - XmNvisibleColumns, visibleColumns, - NULL); + _rdfTreeView->setStandAloneState(state); } ////////////////////////////////////////////////////////////////////////// XP_Bool diff --git a/mozilla/cmd/xfe/src/RDFView.h b/mozilla/cmd/xfe/src/RDFView.h index e037bb90954..a0c18acbb45 100644 --- a/mozilla/cmd/xfe/src/RDFView.h +++ b/mozilla/cmd/xfe/src/RDFView.h @@ -29,24 +29,12 @@ #include "IconGroup.h" #include "htrdf.h" #include "NavCenterView.h" -#include "PopupMenu.h" - -class XFE_RDFPopupMenu : public XFE_SimplePopupMenu -{ -public: - XFE_RDFPopupMenu(String name, Widget parent, - HT_View view, - Boolean isWorkspace, Boolean isBackground); - - void PushButtonActivate(Widget w, XtPointer userData); - -protected: - HT_Pane m_pane; -}; +#include "RDFTreeView.h" class XFE_RDFView : public XFE_View { public: + XFE_RDFView(XFE_Component *toplevel, Widget parent, XFE_View *parent_view, MWContext *context); @@ -70,78 +58,40 @@ public: // RDF Specific calls void notify(HT_Notification ns, HT_Resource n, HT_Event whatHappened); - void setRDFView(HT_View view); - - void doPopup(XEvent *event); + // HT view set/get methods + void setHTView(HT_View view); + // Stand alone set/get methods void setStandAloneState(XP_Bool state); XP_Bool getStandAloneState(); private: - //HT_Pane m_Pane; // The pane that owns this view - HT_View m_rdfview; // The view as registered in the hypertree - Widget viewName; // The label that displays the currently open pane - Widget rdfControlsParent; // Parent of the label and the button on top - Widget m_tree; // The tree widget - XFE_RDFPopupMenu *m_popup; + + // The view as registered in the hypertree + HT_View _ht_rdfView; + + // The label that displays the currently open pane + Widget _viewLabel; + + // Parent of the label and the button on top + Widget _controlToolBar; + + // Toggle tree operating mode + Widget _addBookmarkControl; + + // Close the view + Widget _closeControl; + + // Toggle tree operating mode + Widget _modeControl; + + // The rdf tree view component + XFE_RDFTreeView * _rdfTreeView; // Is this a stand alone view ? - XP_Bool _standAloneState; + XP_Bool _standAloneState; - // icons for use in the bookmark window. - static fe_icon bookmark; - static fe_icon openedFolder; - static fe_icon closedFolder; - - void init_pixmaps(); - - void fill_tree(); - void destroy_tree(); - - void add_row(HT_Resource node); - void add_row(int node); - void delete_row(int row); - void add_column(int index, char *name, uint32 width, - void *token, uint32 token_type); - - void expand_row(int row); - void collapse_row(int row); - void delete_column(HT_Resource cursor); - void activate_row(int row); - void resize(XtPointer); - void edit_cell(XtPointer); - void select_row(int row); - void deselect_row(int row); - - static void expand_row_cb(Widget, XtPointer, XtPointer); - static void collapse_row_cb(Widget, XtPointer, XtPointer); - static void delete_cb(Widget, XtPointer, XtPointer); - static void activate_cb(Widget, XtPointer, XtPointer); - static void resize_cb(Widget, XtPointer, XtPointer); - static void edit_cell_cb(Widget, XtPointer, XtPointer); - static void deselect_cb(Widget, XtPointer, XtPointer); - static void select_cb(Widget, XtPointer, XtPointer); - static void popup_cb(Widget, XtPointer, XtPointer); - static void closeRdfView_cb(Widget, XtPointer, XtPointer); - -#ifdef NOTYET - void dropfunc(Widget dropw, fe_dnd_Event type, fe_dnd_Source *source, XEvent *event); - static void drop_func(Widget dropw, void *closure, fe_dnd_Event type, - fe_dnd_Source *source, XEvent* event); - - static fe_icon mailBookmark; - static fe_icon newsBookmark; - static fe_icon changedBookmark; - // static fe_icon unknownBookmark; - static fe_icon closedPersonalFolder; - static fe_icon openedPersonalFolder; - static fe_icon closedFolderDest; - static fe_icon openedFolderDest; - static fe_icon closedFolderMenu; - static fe_icon openedFolderMenu; - static fe_icon closedFolderMenuDest; - static fe_icon openedFolderMenuDest; -#endif /*NOTYET*/ + static void closeRdfView_cb(Widget, XtPointer, XtPointer); }; #endif /* _xfe_rdfview_h */