fix for #146046. fix several regressions to the subscribe dialog.

1)  [search view] "Subscribe" and "Unsubscribe" buttons don't work (original bug)
2)  [search and tree views] space bar doesn't do the right thing (toggle state)
3)  [tree view] double click on a row that is a container should not toggle the subscribe state

r=hwaara, sr=bienvenu
This commit is contained in:
sspitzer%netscape.com 2002-05-28 20:55:38 +00:00
Родитель 5367483734
Коммит d1784190d5
2 изменённых файлов: 54 добавлений и 36 удалений

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

@ -28,7 +28,7 @@ function goDoCommand()
function Stop() function Stop()
{ {
//dump("Stop()\n") //dump("Stop()\n")
if (gSubscribableServer) { if (gSubscribableServer) {
gSubscribableServer.stopPopulating(msgWindow); gSubscribableServer.stopPopulating(msgWindow);
} }
@ -39,7 +39,7 @@ function SetServerTypeSpecificTextValues()
if (!gServerURI) return; if (!gServerURI) return;
var serverType = GetMsgFolderFromUri(gServerURI, true).server.type; var serverType = GetMsgFolderFromUri(gServerURI, true).server.type;
// set the server specific ui elements // set the server specific ui elements
var stringName = "foldersheaderfor-" + serverType; var stringName = "foldersheaderfor-" + serverType;
var stringval = gSubscribeBundle.getString(stringName); var stringval = gSubscribeBundle.getString(stringName);
@ -337,12 +337,16 @@ function ReverseStateFromRow(row)
gSearchView.getCellProperties(row, "subscribedCol", properties); gSearchView.getCellProperties(row, "subscribedCol", properties);
var isSubscribed = (properties.GetIndexOf(gSubscribedAtom) != -1); var isSubscribed = (properties.GetIndexOf(gSubscribedAtom) != -1);
SetStateFromRow(row, !isSubscribed);
}
function SetStateFromRow(row, state)
{
var name = gSearchView.getCellText(row,"nameCol"); var name = gSearchView.getCellText(row,"nameCol");
// we need to escape the name because // we need to escape the name because
// some news servers have newsgroups with non ASCII names // some news servers have newsgroups with non ASCII names
// we need to escape those name before calling SetState() // we need to escape those name before calling SetState()
SetState(escape(name), !isSubscribed); SetState(escape(name), state);
} }
function SetSubscribeState(state) function SetSubscribeState(state)
@ -350,22 +354,32 @@ function SetSubscribeState(state)
try { try {
// we need to iterate over the tree selection, and set the state for // we need to iterate over the tree selection, and set the state for
// all rows in the selection // all rows in the selection
var view = InSearchMode() ? gSearchView : gSubscribeTree.view; var inSearchMode = InSearchMode();
var colId = InSearchMode() ? "nameCol" : "NameColumn"; var view = inSearchMode ? gSearchView : gSubscribeTree.view;
var colId = inSearchMode ? "nameCol" : "NameColumn";
var sel = view.selection; var sel = view.selection;
for (var i = 0; i < sel.getRangeCount(); ++i) { for (var i = 0; i < sel.getRangeCount(); ++i) {
var start = {}, end = {}; var start = {}, end = {};
sel.getRangeAt(i, start, end); sel.getRangeAt(i, start, end);
for (var k = start.value; k <= end.value; ++k) { for (var k = start.value; k <= end.value; ++k) {
var rowRes = gSubscribeTree.builderView.getResourceAtIndex(k); if (inSearchMode)
var name = GetRDFProperty(rowRes, "Name"); SetStateFromRow(k, state);
SetState(name, state); else {
var rowRes = gSubscribeTree.builderView.getResourceAtIndex(k);
var name = GetRDFProperty(rowRes, "Name");
SetState(name, state);
}
} }
} }
if (inSearchMode) {
// force a repaint
InvalidateSearchTree();
}
} }
catch (ex) { catch (ex) {
//dump("SetSubscribedState failed: " + ex + "\n"); dump("SetSubscribedState failed: " + ex + "\n");
} }
} }
@ -392,32 +406,34 @@ function SubscribeOnClick(event)
var row = {}, col = {}, obj = {}; var row = {}, col = {}, obj = {};
gSubscribeTree.treeBoxObject.getCellAt(event.clientX, event.clientY, row, col, obj); gSubscribeTree.treeBoxObject.getCellAt(event.clientX, event.clientY, row, col, obj);
if (row == -1 || row.value > gSubscribeTree.view.rowCount-1) if (row.value == -1 || row.value > (gSubscribeTree.view.rowCount - 1))
return; return;
if (event.detail == 2) { if (event.detail == 2) {
// don't subscribe when double clicking a closed container to open it // only toggle subscribed state when double clicking something
if (gSubscribeTree.view.isContainer(row.value) && !gSubscribeTree.view.isContainerOpen(row.value)) // that isn't a container
ReverseStateFromNode(row.value); if (!gSubscribeTree.view.isContainer(row.value)) {
} else { ReverseStateFromNode(row.value);
if (obj.value == "twisty") { }
if (gSubscribeTree.view.isContainerOpen(row.value)) { else {
var uri = gSubscribeTree.builderView.getResourceAtIndex(row.value).Value; if (obj.value == "twisty") {
if (gSubscribeTree.view.isContainerOpen(row.value)) {
gStatusFeedback.showProgress(0); var uri = gSubscribeTree.builderView.getResourceAtIndex(row.value).Value;
gStatusFeedback.showStatusString(gSubscribeBundle.getString("pleaseWaitString"));
gStatusBar.setAttribute("mode", "undetermined");
gSubscribableServer.startPopulatingWithUri(msgWindow, true /* force to server */, uri); gStatusFeedback.showProgress(0);
} gStatusFeedback.showStatusString(gSubscribeBundle.getString("pleaseWaitString"));
} gStatusBar.setAttribute("mode", "undetermined");
else {
// if the user clicks on the subscribe check box, we handle it here gSubscribableServer.startPopulatingWithUri(msgWindow, true /* force to server */, uri);
if (col.value == "SubscribedColumn") }
ReverseStateFromNode(row.value); }
return; }
} }
} else {
// if the user single clicks on the subscribe check box, we handle it here
if (col.value == "SubscribedColumn")
ReverseStateFromNode(row.value);
}
} }
function Refresh() function Refresh()
@ -479,7 +495,7 @@ function CleanUpSearchView()
function onSearchTreeKeyPress(event) function onSearchTreeKeyPress(event)
{ {
// for now, only do something on space key // for now, only do something on space key
if (event.keyCode != KeyEvent.DOM_VK_SPACE) if (event.charCode != KeyEvent.DOM_VK_SPACE)
return; return;
var treeSelection = gSearchView.selection; var treeSelection = gSearchView.selection;
@ -497,7 +513,7 @@ function onSearchTreeKeyPress(event)
function onSubscribeTreeKeyPress(event) function onSubscribeTreeKeyPress(event)
{ {
// for now, only do something on space key // for now, only do something on space key
if (event.keyCode != KeyEvent.DOM_VK_SPACE) if (event.charCode != KeyEvent.DOM_VK_SPACE)
return; return;
var treeSelection = gSubscribeTree.view.selection; var treeSelection = gSubscribeTree.view.selection;
@ -505,7 +521,7 @@ function onSubscribeTreeKeyPress(event)
var start = {}, end = {}; var start = {}, end = {};
treeSelection.getRangeAt(i,start,end); treeSelection.getRangeAt(i,start,end);
for (var k=start.value;k<=end.value;k++) for (var k=start.value;k<=end.value;k++)
ReverseStateFromRow(k); ReverseStateFromNode(k);
} }
} }

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

@ -94,6 +94,7 @@ Rights Reserved.
seltype="multiple" seltype="multiple"
datasources="rdf:null" datasources="rdf:null"
flags="dont-build-content" flags="dont-build-content"
disableKeyNavigation="true"
onkeypress="onSubscribeTreeKeyPress(event);" onkeypress="onSubscribeTreeKeyPress(event);"
onclick="SubscribeOnClick(event);"> onclick="SubscribeOnClick(event);">
<template> <template>
@ -146,6 +147,7 @@ Rights Reserved.
</hbox> </hbox>
<hbox id="searchview"> <hbox id="searchview">
<tree id="searchTree" flex="1" <tree id="searchTree" flex="1"
disableKeyNavigation="true"
onkeypress="onSearchTreeKeyPress(event);" onkeypress="onSearchTreeKeyPress(event);"
onclick="SearchOnClick(event);"> onclick="SearchOnClick(event);">
<treecols> <treecols>