94653  - can't right align text in outliner cell
95730  - White block displays/artifacts in the highlight area after Move/Drag mail to folder.
112238 - [RFE] Outliner widget should support line-through
116855 - Modify outliner builder syntax to match outliner content model
118093 - Make -moz-image-region work in the outliner
118113 - Too little space between pref category tree and pref page
118154 - Category now has a column picker
118647 - Memory leak of 52 bytes from 1 block allocated in nsOutlinerBodyFrame::CheckVerticalOverflow
118660 - left arrow no longer moves to parent category
119751 - Branches are open by default and then closed after launch.

- outermost <outlinerchildren> has "-moz-box-flex: 1" by default
  and it actaully replaced <outlinerbody>
- all event handlers moved on <outliner>
- content builder, outliner builder and content view use <outliner> as root
  element
- nsIBoxObject has a new attribute "element"
- all CSS rules outlinerbody:foo replaced with outlinerchildren:foo
- drop feedback is now skinable

r=waterson for the changes in mozilla/content
r=sspitzer on the mailnews parts
r=blake on the bookmarks/history
r=bryner on the OutlinerBodyFrame and OutlinerContentView changes

sr=hyatt,hewitt
This commit is contained in:
varga%utcru.sk 2002-01-16 03:01:28 +00:00
Родитель 97bbd37458
Коммит bbc83df106
112 изменённых файлов: 2170 добавлений и 3286 удалений

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

@ -96,7 +96,6 @@ XUL_ATOM(closed, "closed")
XUL_ATOM(focus, "focus")
XUL_ATOM(outliner, "outliner")
XUL_ATOM(outlinerbody, "outlinerbody")
XUL_ATOM(outlinercols, "outlinercols")
XUL_ATOM(outlinercol, "outlinercol")
XUL_ATOM(outlinerchildren, "outlinerchildren")
@ -109,6 +108,10 @@ XUL_ATOM(cycler, "cycler")
XUL_ATOM(primary, "primary")
XUL_ATOM(current, "current")
XUL_ATOM(seltype, "seltype")
XUL_ATOM(sorted, "sorted")
XUL_ATOM(drop, "drop")
XUL_ATOM(dropBefore, "dropBefore")
XUL_ATOM(dropAfter, "dropAfter")
XUL_ATOM(mozoutlinerrow, ":-moz-outliner-row")
XUL_ATOM(mozoutlinercell, ":-moz-outliner-cell")
XUL_ATOM(mozoutlinercolumn, ":-moz-outliner-column")

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

@ -6382,7 +6382,7 @@ nsXULDocument::CheckTemplateBuilder(nsIContent* aElement)
// Flag "dont-build-content" is used to identify that we shouldn't build
// content and just attach the outliner builder view.
if ((nameSpaceID == kNameSpaceID_XUL) &&
(baseTag.get() == nsXULAtoms::outlinerbody)) {
(baseTag.get() == nsXULAtoms::outliner)) {
nsAutoString flags;
aElement->GetAttr(kNameSpaceID_None, nsXULAtoms::flags, flags);
if (flags.Find(NS_LITERAL_STRING("dont-build-content").get()) >= 0) {
@ -6400,6 +6400,19 @@ nsXULDocument::CheckTemplateBuilder(nsIContent* aElement)
if (xuldoc)
xuldoc->SetTemplateBuilderFor(aElement, builder);
nsCOMPtr<nsIContent> bodyContent;
nsXULContentUtils::FindChildByTag(aElement, kNameSpaceID_XUL, nsXULAtoms::outlinerchildren, getter_AddRefs(bodyContent));
if (!bodyContent) {
nsCOMPtr<nsIDOMDocument> domdoc = do_QueryInterface(doc);
if (domdoc) {
nsCOMPtr<nsIDOMElement> bodyElement;
domdoc->CreateElement(NS_LITERAL_STRING("outlinerchildren"),
getter_AddRefs(bodyElement));
bodyContent = do_QueryInterface(bodyElement);
aElement->AppendChildTo(bodyContent, PR_FALSE, PR_TRUE);
}
}
return NS_OK;
}
}

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

@ -43,6 +43,7 @@
#include "nsIContent.h"
#include "nsIDOMElement.h"
#include "nsILocalStore.h"
#include "nsIBoxObject.h"
#include "nsIOutlinerBoxObject.h"
#include "nsIOutlinerSelection.h"
#include "nsIOutlinerView.h"
@ -107,10 +108,10 @@ protected:
Init();
/**
* Collect sort variables from the <outlinercol>s
* Get sort variables from the active <outlinercol>
*/
nsresult
GetSortVariables(VariableSet& aVariables);
EnsureSortVariables();
virtual nsresult
InitializeRuleNetworkForSimpleRules(InnerNode** aChildNode);
@ -644,10 +645,11 @@ nsXULOutlinerBuilder::SetOutliner(nsIOutlinerBoxObject* outliner)
if (! mRoot) {
// Get our root element
nsCOMPtr<nsIDOMElement> body;
mBoxObject->GetOutlinerBody(getter_AddRefs(body));
nsCOMPtr<nsIBoxObject> boxObject = do_QueryInterface(mBoxObject);
nsCOMPtr<nsIDOMElement> element;
boxObject->GetElement(getter_AddRefs(element));
mRoot = do_QueryInterface(body);
mRoot = do_QueryInterface(element);
LoadDataSources();
@ -699,6 +701,10 @@ nsXULOutlinerBuilder::SetOutliner(nsIOutlinerBoxObject* outliner)
return NS_ERROR_FAILURE;
Rebuild();
EnsureSortVariables();
if (mSortVariable)
SortSubtree(mRows.GetRoot());
}
return NS_OK;
@ -1189,56 +1195,44 @@ nsXULOutlinerBuilder::SynchronizeMatch(nsTemplateMatch* aMatch, const VariableSe
//----------------------------------------------------------------------
nsresult
nsXULOutlinerBuilder::GetSortVariables(VariableSet& aVariables)
nsXULOutlinerBuilder::EnsureSortVariables()
{
// The <outlinercol>'s are siblings of the <outlinerbody>, which
// is what our mRoot is. Walk up one level to find the <outliner>,
// then grovel through *its* kids to find the <outlinercol>'s...
nsCOMPtr<nsIContent> outliner;
mRoot->GetParent(*getter_AddRefs(outliner));
// Grovel through <outlinercols> kids to find the <outlinercol>
// with the sort attributes.
nsCOMPtr<nsIContent> outlinercols;
nsXULContentUtils::FindChildByTag(mRoot, kNameSpaceID_XUL, nsXULAtoms::outlinercols, getter_AddRefs(outlinercols));
if (! outliner)
return NS_ERROR_FAILURE;
if (!outlinercols)
return NS_OK;
PRInt32 count;
outliner->ChildCount(count);
for (PRInt32 i = count - 1; i >= 0; --i) {
outlinercols->ChildCount(count);
for (PRInt32 i = 0; i < count; i++) {
nsCOMPtr<nsIContent> child;
outliner->ChildAt(i, *getter_AddRefs(child));
if (! child)
continue;
// XXX probably need to get base tag here
outlinercols->ChildAt(i, *getter_AddRefs(child));
nsCOMPtr<nsIAtom> tag;
child->GetTag(*getter_AddRefs(tag));
if (tag == nsXULAtoms::outlinercol) {
nsAutoString sortActive;
child->GetAttr(kNameSpaceID_None, nsXULAtoms::sortActive, sortActive);
if (sortActive == NS_LITERAL_STRING("true")) {
nsAutoString sort;
child->GetAttr(kNameSpaceID_None, nsXULAtoms::sort, sort);
if (sort.Length()) {
mSortVariable = mRules.LookupSymbol(sort.get(), PR_TRUE);
if (tag != nsXULAtoms::outlinercol)
continue;
nsAutoString sort;
child->GetAttr(kNameSpaceID_None, nsXULAtoms::sort, sort);
if (! sort.Length())
continue;
PRInt32 var = mRules.LookupSymbol(sort.get(), PR_TRUE);
aVariables.Add(var);
nsAutoString active;
child->GetAttr(kNameSpaceID_None, nsXULAtoms::sortActive, active);
if (active == NS_LITERAL_STRING("true")) {
nsAutoString dir;
child->GetAttr(kNameSpaceID_None, nsXULAtoms::sortDirection, dir);
if (dir == NS_LITERAL_STRING("none"))
mSortDirection = eDirection_Natural;
else if (dir == NS_LITERAL_STRING("descending"))
mSortDirection = eDirection_Descending;
else
mSortDirection = eDirection_Ascending;
mSortVariable = var;
nsAutoString sortDirection;
child->GetAttr(kNameSpaceID_None, nsXULAtoms::sortDirection, sortDirection);
if (sortDirection == NS_LITERAL_STRING("ascending"))
mSortDirection = eDirection_Ascending;
else if (sortDirection == NS_LITERAL_STRING("descending"))
mSortDirection = eDirection_Descending;
else
mSortDirection = eDirection_Natural;
}
break;
}
}
}

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

@ -43,6 +43,7 @@
#include "nsIContent.h"
#include "nsIDOMElement.h"
#include "nsILocalStore.h"
#include "nsIBoxObject.h"
#include "nsIOutlinerBoxObject.h"
#include "nsIOutlinerSelection.h"
#include "nsIOutlinerView.h"
@ -107,10 +108,10 @@ protected:
Init();
/**
* Collect sort variables from the <outlinercol>s
* Get sort variables from the active <outlinercol>
*/
nsresult
GetSortVariables(VariableSet& aVariables);
EnsureSortVariables();
virtual nsresult
InitializeRuleNetworkForSimpleRules(InnerNode** aChildNode);
@ -644,10 +645,11 @@ nsXULOutlinerBuilder::SetOutliner(nsIOutlinerBoxObject* outliner)
if (! mRoot) {
// Get our root element
nsCOMPtr<nsIDOMElement> body;
mBoxObject->GetOutlinerBody(getter_AddRefs(body));
nsCOMPtr<nsIBoxObject> boxObject = do_QueryInterface(mBoxObject);
nsCOMPtr<nsIDOMElement> element;
boxObject->GetElement(getter_AddRefs(element));
mRoot = do_QueryInterface(body);
mRoot = do_QueryInterface(element);
LoadDataSources();
@ -699,6 +701,10 @@ nsXULOutlinerBuilder::SetOutliner(nsIOutlinerBoxObject* outliner)
return NS_ERROR_FAILURE;
Rebuild();
EnsureSortVariables();
if (mSortVariable)
SortSubtree(mRows.GetRoot());
}
return NS_OK;
@ -1189,56 +1195,44 @@ nsXULOutlinerBuilder::SynchronizeMatch(nsTemplateMatch* aMatch, const VariableSe
//----------------------------------------------------------------------
nsresult
nsXULOutlinerBuilder::GetSortVariables(VariableSet& aVariables)
nsXULOutlinerBuilder::EnsureSortVariables()
{
// The <outlinercol>'s are siblings of the <outlinerbody>, which
// is what our mRoot is. Walk up one level to find the <outliner>,
// then grovel through *its* kids to find the <outlinercol>'s...
nsCOMPtr<nsIContent> outliner;
mRoot->GetParent(*getter_AddRefs(outliner));
// Grovel through <outlinercols> kids to find the <outlinercol>
// with the sort attributes.
nsCOMPtr<nsIContent> outlinercols;
nsXULContentUtils::FindChildByTag(mRoot, kNameSpaceID_XUL, nsXULAtoms::outlinercols, getter_AddRefs(outlinercols));
if (! outliner)
return NS_ERROR_FAILURE;
if (!outlinercols)
return NS_OK;
PRInt32 count;
outliner->ChildCount(count);
for (PRInt32 i = count - 1; i >= 0; --i) {
outlinercols->ChildCount(count);
for (PRInt32 i = 0; i < count; i++) {
nsCOMPtr<nsIContent> child;
outliner->ChildAt(i, *getter_AddRefs(child));
if (! child)
continue;
// XXX probably need to get base tag here
outlinercols->ChildAt(i, *getter_AddRefs(child));
nsCOMPtr<nsIAtom> tag;
child->GetTag(*getter_AddRefs(tag));
if (tag == nsXULAtoms::outlinercol) {
nsAutoString sortActive;
child->GetAttr(kNameSpaceID_None, nsXULAtoms::sortActive, sortActive);
if (sortActive == NS_LITERAL_STRING("true")) {
nsAutoString sort;
child->GetAttr(kNameSpaceID_None, nsXULAtoms::sort, sort);
if (sort.Length()) {
mSortVariable = mRules.LookupSymbol(sort.get(), PR_TRUE);
if (tag != nsXULAtoms::outlinercol)
continue;
nsAutoString sort;
child->GetAttr(kNameSpaceID_None, nsXULAtoms::sort, sort);
if (! sort.Length())
continue;
PRInt32 var = mRules.LookupSymbol(sort.get(), PR_TRUE);
aVariables.Add(var);
nsAutoString active;
child->GetAttr(kNameSpaceID_None, nsXULAtoms::sortActive, active);
if (active == NS_LITERAL_STRING("true")) {
nsAutoString dir;
child->GetAttr(kNameSpaceID_None, nsXULAtoms::sortDirection, dir);
if (dir == NS_LITERAL_STRING("none"))
mSortDirection = eDirection_Natural;
else if (dir == NS_LITERAL_STRING("descending"))
mSortDirection = eDirection_Descending;
else
mSortDirection = eDirection_Ascending;
mSortVariable = var;
nsAutoString sortDirection;
child->GetAttr(kNameSpaceID_None, nsXULAtoms::sortDirection, sortDirection);
if (sortDirection == NS_LITERAL_STRING("ascending"))
mSortDirection = eDirection_Ascending;
else if (sortDirection == NS_LITERAL_STRING("descending"))
mSortDirection = eDirection_Descending;
else
mSortDirection = eDirection_Natural;
}
break;
}
}
}

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

@ -3,7 +3,12 @@
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
orient="vertical">
<outliner flex="1">
<outliner id="tree"
flex="1"
datasources="rdf:ldap"
ref="ldap://alpha.dante.org.uk:389/dc=dante,dc=org,dc=uk??one?(objectclass=*)"
containment="http://home.netscape.com/NC-rdf#recursiveChild"
flags="dont-build-content">
<outlinercols>
<outlinercol id="description"
class="sortDirectionIndicator"
@ -23,25 +28,17 @@
sort="rdf:http://www.mozilla.org/LDAPATTR-rdf#cn"
persist="width sortActive sortDirection" />
</outlinercols>
<outlinerbody id="tree"
datasources="rdf:ldap"
ref="ldap://alpha.dante.org.uk:389/dc=dante,dc=org,dc=uk??one?(objectclass=*)"
flex="1"
containment="http://home.netscape.com/NC-rdf#recursiveChild"
flags="dont-build-content">
<template>
<outlinerchildren>
<outlineritem uri="rdf:http://home.netscape.com/NC-rdf#recursiveChild">
<outlinerrow>
<outlinercell ref="description"
label="rdf:http://www.mozilla.org/LDAPATTR-rdf#description" />
<outlinercell ref="cn"
label="rdf:http://www.mozilla.org/LDAPATTR-rdf#cn" />
</outlinerrow>
</outlineritem>
</outlinerchildren>
</template>
</outlinerbody>
<template>
<outlinerchildren>
<outlineritem uri="rdf:http://home.netscape.com/NC-rdf#recursiveChild">
<outlinerrow>
<outlinercell ref="description"
label="rdf:http://www.mozilla.org/LDAPATTR-rdf#description" />
<outlinercell ref="cn"
label="rdf:http://www.mozilla.org/LDAPATTR-rdf#cn" />
</outlinerrow>
</outlineritem>
</outlinerchildren>
</template>
</outliner>
</window>

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

@ -34,7 +34,7 @@
<!-- category tree entries for editor -->
<outlinerchildren id="panelChildren">
<outlineritem container="true" open="true" id="editor" position="3">
<outlineritem container="true" id="editor" position="3">
<outlinerrow>
<outlinercell url="chrome://editor/content/pref-composer.xul" label="&compose.label;" />
</outlinerrow>

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

@ -136,7 +136,7 @@
<outlinercol id="cmp-number" flex="1" label="Number"
persist="hidden width"/>
</outlinercols>
<outlinerbody id="project-body" flex="1"/>
<outlinerchildren id="project-body"/>
</outliner>
</vbox>
@ -160,7 +160,7 @@
<outlinercol id="ifc-number" flex="1" label="Number"
persist="hidden width"/>
</outlinercols>
<outlinerbody id="project-body" flex="1"/>
<outlinerchildren id="project-body"/>
</outliner>
</vbox>

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

@ -27,18 +27,18 @@
font-family: monospace;
}
outlinerbody:-moz-outliner-image(cmp-name,component) {
outlinerchildren:-moz-outliner-image(cmp-name,component) {
list-style-image: url("chrome://cview/skin/images/component.gif");
}
outlinerbody:-moz-outliner-image(cmp-name,interface) {
outlinerchildren:-moz-outliner-image(cmp-name,interface) {
list-style-image: url("chrome://cview/skin/images/interface.gif");
}
outlinerbody:-moz-outliner-image(cmp-name,method) {
outlinerchildren:-moz-outliner-image(cmp-name,method) {
list-style-image: url("chrome://cview/skin/images/method.gif");
}
outlinerbody:-moz-outliner-image(ifc-name) {
outlinerchildren:-moz-outliner-image(ifc-name) {
list-style-image: url("chrome://cview/skin/images/interface.gif");
}

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

@ -201,7 +201,7 @@ function goHome() {
function selectItem() {
var outliner = document.getElementById("help-toc-outliner");
if (!gBuilder)
gBuilder = outliner.outlinerBoxObject.outlinerBody.builder.QueryInterface(Components.interfaces.nsIXULOutlinerBuilder);
gBuilder = outliner.builder.QueryInterface(Components.interfaces.nsIXULOutlinerBuilder);
var source = gBuilder.getResourceAtIndex(outliner.outlinerBoxObject.selection.currentIndex);
if (!gRDF)
@ -209,7 +209,7 @@ function selectItem() {
var property = gRDF.GetResource("http://home.netscape.com/NC-rdf#link");
var target = outliner.outlinerBoxObject.outlinerBody.database.GetTarget(source, property, true);
var target = outliner.database.GetTarget(source, property, true);
if (target)
target = target.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
loadURI(target);

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

@ -124,38 +124,37 @@
</tabs>
<tabpanels flex="1">
<hbox id="help-toc">
<outliner id="help-toc-outliner" flex="1" >
<outlinerbody datasources="chrome://help/locale/help-toc.rdf"
flex="1" ref="urn:root" flags="dont-build-content"
containment="http://home.netscape.com/NC-rdf#subheadings"
onselect="selectItem();">
<outliner id="help-toc-outliner" flex="1"
datasources="chrome://help/locale/help-toc.rdf"
ref="urn:root" flags="dont-build-content"
containment="http://home.netscape.com/NC-rdf#subheadings"
onselect="selectItem();">
<template>
<rule>
<conditions>
<outlineritem uri="?uri"/>
<triple subject="?uri"
predicate="http://home.netscape.com/NC-rdf#subheadings"
object="?subheadings" />
<member container="?subheadings" child="?subheading"/>
</conditions>
<bindings>
<binding subject="?subheading"
predicate="http://home.netscape.com/NC-rdf#name"
object="?name" />
</bindings>
<action>
<outlinerchildren>
<outlineritem uri="?subheading">
<outlinerrow>
<outlinercell ref="Column" label="?name"/>
</outlinerrow>
</outlineritem>
</outlinerchildren>
</action>
</rule>
</template>
</outlinerbody>
<template>
<rule>
<conditions>
<outlineritem uri="?uri"/>
<triple subject="?uri"
predicate="http://home.netscape.com/NC-rdf#subheadings"
object="?subheadings" />
<member container="?subheadings" child="?subheading"/>
</conditions>
<bindings>
<binding subject="?subheading"
predicate="http://home.netscape.com/NC-rdf#name"
object="?name" />
</bindings>
<action>
<outlinerchildren>
<outlineritem uri="?subheading">
<outlinerrow>
<outlinercell ref="Column" label="?name"/>
</outlinerrow>
</outlineritem>
</outlinerchildren>
</action>
</rule>
</template>
<outlinercols>
<outlinercol flex="1" id="Column" primary="true"/>
</outlinercols>

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

@ -1,90 +0,0 @@
/* ***** BEGIN LICENSE BLOCK *****
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Netscape Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 2001
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Joe Hewitt <hewitt@netscape.com> (original author)
*
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the NPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the NPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
/***************************************************************
* inBaseOutlinerView -------------------------------------------------
* Simple outliner view object meant to be extended.
*
* Usage example: MyView.prototype = new inBaseOutlinerView();
****************************************************************/
function inBaseOutlinerView() { }
inBaseOutlinerView.prototype =
{
mRowCount: 0,
mOutliner: null,
get rowCount() { return this.mRowCount; },
setOutliner: function(aOutliner) { this.mOutliner = aOutliner; },
getCellText: function(aRow, aColId) { return ""; },
getRowProperties: function(aIndex, aProperties) {},
getCellProperties: function(aIndex, aColId, aProperties) {},
getColumnProperties: function(aColId, aColElt, aProperties) {},
getParentIndex: function(aRowIndex) { },
hasNextSibling: function(aRowIndex, aAfterIndex) { },
getLevel: function(aIndex) {},
isContainer: function(aIndex) {},
isContainerOpen: function(aIndex) {},
isContainerEmpty: function(aIndex) {},
toggleOpenState: function(aIndex) {},
selectionChanged: function() {},
cycleHeader: function(aColId, aElt) {},
cycleCell: function(aRow, aColId) {},
isEditable: function(aRow, aColId) {},
setCellText: function(aRow, aColId, aValue) {},
performAction: function(aAction) {},
performActionOnRow: function(aAction, aRow) {},
performActionOnCell: function(aAction, aRow, aColId) {},
isSeparator: function(aIndex) {},
// extra utility stuff
createAtom: function(aVal)
{
try {
var i = Components.interfaces.nsIAtomService;
var svc = Components.classes["@mozilla.org/atom-service;1"].getService(i);
return svc.getAtom(aVal);
} catch(ex) {
return null;
}
}
};

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

@ -62,6 +62,8 @@ inBaseOutlinerView.prototype =
isContainer: function(aIndex) {},
isContainerOpen: function(aIndex) {},
isContainerEmpty: function(aIndex) {},
isSeparator: function(aIndex) {},
isSorted: function() {},
toggleOpenState: function(aIndex) {},
selectionChanged: function() {},
cycleHeader: function(aColId, aElt) {},
@ -71,7 +73,6 @@ inBaseOutlinerView.prototype =
performAction: function(aAction) {},
performActionOnRow: function(aAction, aRow) {},
performActionOnCell: function(aAction, aRow, aColId) {},
isSeparator: function(aIndex) {},
// extra utility stuff

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

@ -1,672 +0,0 @@
/* ***** BEGIN LICENSE BLOCK *****
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Netscape Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 2001
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Joe Hewitt <hewitt@netscape.com> (original author)
*
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the NPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the NPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
/***************************************************************
* inOutlinerBuilder -------------------------------------------------
* Automatically builds up an outliner so that it will display a tabular
* set of data with titled columns and optionally an icon for each row.
* The outliner that is supplied must have an outlinerbody with an
* empty template inside of it.
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* REQUIRED IMPORTS:
* chrome://inspector/content/jsutil/xul/DNDUtils.js
****************************************************************/
//////////// global variables /////////////////////
var inOutlinerBuilderPartCount = 0;
//////////// global constants ////////////////////
////////////////////////////////////////////////////////////////////////////
//// class inOutlinerBuilder
function inOutlinerBuilder(aOutliner, aNameSpace, aArcName)
{
this.outliner = aOutliner;
this.nameSpace = aNameSpace;
this.arcName = aArcName;
this.mColumns = [];
this.mExtras = [];
}
inOutlinerBuilder.prototype =
{
mOutliner: null,
mOutlinerBody: null,
// datasource stuff
mNameSpace: null,
mArcName: null,
mIsRefContainer: false,
mIsContainer: true,
// table structure stuff
mIsIconic: false,
mColumns: null,
mSplitters: true,
mRowFields: null,
mRowAttrs: null,
mAllowDND: false,
mLastDragCol: null,
mLastDragColWhere: null,
////////////////////////////////////////////////////////////////////////////
//// properties
// the xul tree node we will construct
get outliner() { return this.mOutliner },
set outliner(aVal)
{
this.mOutliner = aVal;
if (aVal)
this.mOutlinerBody = aVal.getElementsByTagName("outlinerbody")[0];
aVal._outlinerBuilder = this
},
// the namespace to use for all fields
get nameSpace() { return this.mNameSpace },
set nameSpace(aVal) { this.mNameSpace = aVal },
// the name of the arc to the container
get arcName() { return this.mArcName },
set arcName(aVal) { this.mArcName = aVal },
// is the datasource ref an arc to a container, or a container itself
get isRefContainer() { return this.mIsRefContainer },
set isRefContainer(aVal) { this.mIsRefContainer = aVal },
// is each row a potential container?
get isContainer() { return this.mIsContainer },
set isContainer(aVal) { this.mIsContainer = aVal },
// place an icon before the first column of each row
get isIconic() { return this.mIsIconic },
set isIconic(aVal) { this.mIsIconic = aVal },
// put splitters between the columns?
get useSplitters() { return this.mSplitters },
set useSplitters(aVal) { this.mSplitters = aVal },
// extra attributes to set on the treeitem
get rowAttributes() { return this.mRowAttrs },
set rowAttributes(aVal) { this.mRowAttrs = aVal },
// extra data fields to set on the treeitem
get rowFields() { return this.mRowFields },
set rowFields(aVal) { this.mRowFields = aVal },
// extra data fields to set on the treeitem
get allowDragColumns() { return this.mAllowDND },
set allowDragColumns(aVal) { this.mAllowDND = aVal },
////////////////////////////////////////////////////////////////////////////
//// event handlers
get onColumnAdd() { return this.mOnColumnAdd },
set onColumnAdd(aFn) { this.mOnColumnAdd = aFn },
get onColumnRemove() { return this.mOnColumnRemove },
set onColumnRemove(aFn) { this.mOnColumnRemove = aFn },
////////////////////////////////////////////////////////////////////////////
//// initialization
initialize: function()
{
this.initColumns();
this.initTemplate();
},
initColumns: function()
{
this.initDND();
},
initTemplate: function()
{
var template = this.mOutliner.getElementsByTagNameNS(kXULNSURI, "template")[0];
this.mTemplate = template;
this.clearChildren(template);
var rule = document.createElementNS(kXULNSURI, "rule");
template.appendChild(rule);
this.mRule = rule;
this.createDefaultConditions();
var bindings = document.createElementNS(kXULNSURI, "bindings");
rule.appendChild(bindings);
this.mBindings = bindings;
this.createDefaultAction();
},
createDefaultConditions: function()
{
var conditions = document.createElementNS(kXULNSURI, "conditions");
this.mRule.appendChild(conditions);
var content = document.createElementNS(kXULNSURI, "outlinerrow");
content.setAttribute("uri", "?uri");
conditions.appendChild(content);
var triple = this.createTriple("?uri", this.mNameSpace+this.mArcName,
this.mIsRefContainer ? "?table" : "?row");
conditions.appendChild(triple);
if (this.mIsRefContainer) {
var member = this.createMember("?table", "?row");
conditions.appendChild(member);
}
},
createDefaultAction: function()
{
var action = document.createElementNS(kXULNSURI, "action");
this.mRule.appendChild(action);
var orow = this.createTemplatePart("outlinerrow");
orow.setAttribute("uri", "?row");
action.appendChild(orow);
this.mOutlinerRow = orow;
// assign the item attributes
if (this.mRowAttrs)
for (key in this.mRowAttrs)
orow.setAttribute(key, this.mRowAttrs[key]);
},
createDefaultBindings: function()
{
// assign the item fields
var binding;
if (this.mRowFields) {
var props = "";
for (key in this.mRowFields) {
binding = this.createBinding(this.mRowFields[key]);
this.mBindings.appendChild(binding);
props += key+"-?"+this.mRowFields[key]+" ";
}
this.mOutlinerRow.setAttribute("properties", props);
}
},
createTriple: function(aSubject, aPredicate, aObject)
{
var triple = document.createElementNS(kXULNSURI, "triple");
triple.setAttribute("subject", aSubject);
triple.setAttribute("predicate", aPredicate);
triple.setAttribute("object", aObject);
return triple;
},
createMember: function(aContainer, aChild)
{
var member = document.createElementNS(kXULNSURI, "member");
member.setAttribute("container", aContainer);
member.setAttribute("child", aChild);
return member;
},
reset: function()
{
this.mColumns = [];
this.mIsIconic = false;
this.resetOutliner();
},
resetOutliner: function()
{
var kids = this.mOutliner.childNodes;
for (var i = 0 ; i < kids.length; ++i)
if (kids[i].localName != "outlinerbody")
this.mOutliner.removeChild(kids[i]);
this.clearChildren(this.mBindings);
this.clearChildren(this.mOutlinerRow);
this.createDefaultBindings();
},
clearChildren: function(aEl)
{
while (aEl.childNodes.length)
aEl.removeChild(aEl.lastChild);
},
////////////////////////////////////////////////////////////////////////////
//// column drag and drop
initDND: function()
{
if (this.mAllowDND) {
// addEventListener doesn't work for dnd events, apparently... so we use the attributes
this.addDNDListener(this.mOutliner, "ondragenter");
this.addDNDListener(this.mOutliner, "ondragover");
this.addDNDListener(this.mOutliner, "ondragexit");
this.addDNDListener(this.mOutliner, "ondraggesture");
this.addDNDListener(this.mOutliner, "ondragdrop");
}
},
onDragEnter: function(aEvent)
{
},
onDragOver: function(aEvent)
{
if (!DNDUtils.checkCanDrop("OutlinerBuilder/column-add"))
return;
var idx = this.getColumnIndexFromX(aEvent.clientX, 0.5);
this.mColumnInsertIndex = idx;
var col = this.getColumnAt(idx);
if (idx == -1)
this.markColumnInsert(col, "after");
else
this.markColumnInsert(col, "before");
},
onDragExit: function(aEvent)
{
},
onDragDrop: function(aEvent)
{
this.markColumnInsert(null);
var dragService = XPCU.getService("@mozilla.org/widget/dragservice;1", "nsIDragService");
var dragSession = dragService.getCurrentSession();
if (!dragSession.isDataFlavorSupported("OutlinerBuilder/column-add"))
return false;
var trans = XPCU.createInstance("@mozilla.org/widget/transferable;1", "nsITransferable");
trans.addDataFlavor("OutlinerBuilder/column-add");
dragSession.getData(trans, 0);
var data = {};
trans.getAnyTransferData ({}, data, {});
var string = XPCU.QI(data.value, "nsISupportsWString");
this.insertColumn(this.mColumnInsertIndex,
{
name: string.data,
title: string.data,
flex: 1
});
// if we rebuildContent during this thread, it will crash in the dnd service
setTimeout(function(me) { me.build(); me.buildContent() }, 1, this);
// bug 56270 - dragSession.sourceDocument is null --
// causes me to code this very temporary, very nasty hack
// to tell columnsDialog.js about the drop
if (this.mOutliner.onClientDrop) {
this.mOutliner.onClientDrop();
}
},
markColumnInsert: function (aColumn, aWhere)
{
var col = this.mLastDragCol;
var lastWhere = this.mLastDragColWhere;
if (col)
col.setAttribute("properties", "");
if (aWhere != "before" && aWhere != "after") {
this.mLastDragCol = null;
this.mLastDragColWhere = null;
return;
}
col = aColumn;
if (col) {
this.mLastDragCol = col;
this.mLastDragColWhere = aWhere;
col.setAttribute("properties", "dnd-insert-"+aWhere);
}
var bx = this.mOutliner.boxObject.QueryInterface(Components.interfaces.nsIOutlinerBoxObject);
bx.invalidate();
},
getColumnIndexFromX: function(aX, aThresh)
{
var width = 0;
var col, cw;
for (var i = 0; i < this.columnCount; ++i) {
col = this.getColumnAt(i);
cw = col.boxObject.width;
width += cw;
if (width-(cw*aThresh) > aX)
return i;
}
return -1;
},
getColumnIndexFromHeader: function(aHeader)
{
var headers = this.mOutliner.getElementsByTagName("outlinercol");
for (var i = 0; i < headers.length; ++i) {
if (headers[i] == aHeader)
return i;
}
return -1;
},
//// for drag-n-drop removal/arrangement of columns
onDragGesture: function(aEvent)
{
var target = aEvent.target;
if (target.parentNode == this.mOutliner) {
var column = target.getAttribute("label");
var idx = this.getColumnIndexFromHeader(target);
if (idx == -1) return;
this.mColumnDragging = idx;
DNDUtils.invokeSession(target, ["OutlinerBuilder/column-remove"], [column]);
}
},
addColumnDropTarget: function(aBox)
{
aBox._outlinerBuilderDropTarget = this;
this.addDNDListener(aBox, "ondragover", "Target");
this.addDNDListener(aBox, "ondragdrop", "Target");
},
removeColumnDropTarget: function(aBox)
{
aBox._outlinerBuilderDropTarget = this;
this.removeDNDListener(aBox, "ondragover", "Target");
this.removeDNDListener(aBox, "ondragdrop", "Target");
},
onDragOverTarget: function(aBox, aEvent)
{
DNDUtils.checkCanDrop("OutlinerBuilder/column-remove");
},
onDragDropTarget: function(aBox, aEvent)
{
this.removeColumn(this.mColumnDragging);
this.build();
// if we rebuildContent during this thread, it will crash in the dnd service
setTimeout(function(aTreeBuilder) { aTreeBuilder.buildContent() }, 1, this);
},
// these are horrible hacks to compensate for the lack of true multiple
// listener support for the DND events
addDNDListener: function(aBox, aType, aModifier)
{
var js = "inOutlinerBuilder_"+aType+(aModifier?"_"+aModifier:"")+"(this, event);";
var attr = aBox.getAttribute(aType);
attr = attr ? attr : "";
aBox.setAttribute(aType, attr + js);
},
removeDNDListener: function(aBox, aType, aModifier)
{
var js = "inOutlinerBuilder_"+aType+(aModifier?"_"+aModifier:"")+"(this, event);";
var attr = aBox.getAttribute(aType);
var idx = attr.indexOf(js);
if (idx != -1)
attr = attr.substr(0,idx) + attr.substr(idx+1);
aBox.setAttribute(aType, attr);
},
////////////////////////////////////////////////////////////////////////////
//// column properties
addColumn: function(aData)
{
this.mColumns.push(aData);
if (this.mOnColumnAdd)
this.mOnColumnAdd(this.mColumns.length-1)
},
insertColumn: function(aIndex, aData)
{
var idx;
if (aIndex == -1) {
this.mColumns.push(aData);
idx = this.mColumns.length-1;
} else {
this.mColumns.splice(aIndex, 0, aData);
idx = aIndex;
}
if (this.mOnColumnAdd)
this.mOnColumnAdd(idx);
},
removeColumn: function(aIndex)
{
this.mColumns.splice(aIndex, 1);
if (this.mOnColumnRemove)
this.mOnColumnRemove(aIndex);
},
getColumnAt: function(aIndex)
{
var kids = this.mOutliner.getElementsByTagName("outlinercol");
return aIndex < 0 || aIndex >= kids.length ? kids[kids.length-1] : kids[aIndex];
},
get columnCount() { return this.mColumns.length },
getColumnName: function(aIndex) { return this.mColumns[aIndex].name },
setColumnName: function(aIndex, aValue) { this.mColumns[aIndex].name = aValue },
getColumnTitle: function(aIndex) { return this.mColumns[aIndex].title },
setColumnTitle: function(aIndex, aValue) { this.mColumns[aIndex].title = aValue },
getColumnClassName: function(aIndex) { return this.mColumns[aIndex].className },
setColumnClassName: function(aIndex, aValue) { this.mColumns[aIndex].className = aValue },
getColumnFlex: function(aIndex) { return this.mColumns[aIndex].flex },
setColumnFlex: function(aIndex, aValue) { this.mColumns[aIndex].flex = aValue },
getExtras: function(aIndex) { return this.mColumns[aIndex].extras },
setExtras: function(aIndex, aValue) { this.mColumns[aIndex].extras = aExtras },
getAttrs: function(aIndex) { return this.mColumns[aIndex].attrs },
setAttrs: function(aIndex, aValue) { this.mColumns[aIndex].attrs = aExtras },
////////////////////////////////////////////////////////////////////////////
//// template building
build: function(aBuildContent)
{
try {
this.resetOutliner();
this.buildColumns();
this.buildTemplate();
if (aBuildContent)
this.buildContent();
} catch (ex) {
debug("### ERROR - inOutlinerBuilder::build failed.\n" + ex);
}
//dumpDOM2(this.mOutliner);
},
buildContent: function()
{
this.mOutlinerBody.builder.rebuild();
var bx = this.mOutliner.boxObject.QueryInterface(Components.interfaces.nsIOutlinerBoxObject);
setTimeout(function(a) { a.invalidate() }, 1, bx);
},
buildColumns: function()
{
var cols = document.createElementNS(kXULNSURI, "outlinercols");
var col, val, split;
for (var i = 0; i < this.mColumns.length; i++) {
col = document.createElementNS(kXULNSURI, "outlinercol");
col.setAttribute("id", "outlinercol-"+this.mColumns[i].name);
col.setAttribute("persist", "width");
col.setAttribute("label", this.mColumns[i].title);
// mark first node as primary, if necessary
if (i == 0 && this.mIsContainer)
col.setAttribute("primary", "true");
val = cols[i].className;
if (val)
col.setAttribute("class", val);
val = cols[i].flex;
if (val)
col.setAttribute("flex", val);
cols.appendChild(col);
if (this.mSplitters && i < this.mColumns.length-1) {
split = document.createElementNS(kXULNSURI, "splitter");
split.setAttribute("class", "tree-splitter");
cols.appendChild(split);
}
}
this.mOutliner.appendChild(cols);
},
buildTemplate: function()
{
var cols = this.mColumns;
var bindings = this.mBindings;
var row = this.mOutlinerRow;
var cell, binding, val, extras, attrs, key, className;
if (this.mIsIconic) {
binding = this.createBinding("_icon");
bindings.appendChild(binding);
}
for (var i = 0; i < cols.length; ++i) {
val = cols[i].name;
if (!val)
throw "Column data is incomplete - missing name at index " + i + ".";
cell = this.createTemplatePart("outlinercell");
className = "";
// build the default value data field
binding = this.createBinding(val);
bindings.appendChild(binding);
cell.setAttribute("label", "?" + val);
cell.setAttribute("ref", "outlinercol-"+cols[i].name);
cell.setAttribute("class", className);
var props = "";
for (key in this.mRowFields)
props += key+"-?"+this.mRowFields[key]+" ";
cell.setAttribute("properties", props);
row.appendChild(cell);
}
},
createBinding: function(aName)
{
var binding = document.createElementNS(kXULNSURI, "binding");
binding.setAttribute("subject", "?row");
binding.setAttribute("predicate", this.mNameSpace+aName);
binding.setAttribute("object", "?" + aName);
return binding;
},
createTemplatePart: function(aTagName)
{
var el = document.createElementNS(kXULNSURI, aTagName);
el.setAttribute("id", "templatePart"+inOutlinerBuilderPartCount);
inOutlinerBuilderPartCount++;
return el;
}
};
function inOutlinerBuilder_ondraggesture(aOutliner, aEvent)
{
return aOutliner._outlinerBuilder.onDragGesture(aEvent);
}
function inOutlinerBuilder_ondragenter(aOutliner, aEvent)
{
return aOutliner._outlinerBuilder.onDragEnter(aEvent);
}
function inOutlinerBuilder_ondragover(aOutliner, aEvent)
{
return aOutliner._outlinerBuilder.onDragOver(aEvent);
}
function inOutlinerBuilder_ondragexit(aOutliner, aEvent)
{
return aOutliner._outlinerBuilder.onDragExit(aEvent);
}
function inOutlinerBuilder_ondragdrop(aOutliner, aEvent)
{
return aOutliner._outlinerBuilder.onDragDrop(aEvent);
}
function inOutlinerBuilder_ondragover_Target(aBox, aEvent)
{
return aBox._outlinerBuilderDropTarget.onDragOverTarget(aBox, aEvent);
}
function inOutlinerBuilder_ondragdrop_Target(aBox, aEvent)
{
return aBox._outlinerBuilderDropTarget.onDragDropTarget(aBox, aEvent);
}

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

@ -40,7 +40,7 @@
* inOutlinerBuilder -------------------------------------------------
* Automatically builds up an outliner so that it will display a tabular
* set of data with titled columns and optionally an icon for each row.
* The outliner that is supplied must have an outlinerbody with an
* The outliner that is supplied must have an outlinerchildren with an
* empty template inside of it.
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* REQUIRED IMPORTS:
@ -95,7 +95,7 @@ inOutlinerBuilder.prototype =
{
this.mOutliner = aVal;
if (aVal)
this.mOutlinerBody = aVal.getElementsByTagName("outlinerbody")[0];
this.mOutlinerBody = aVal.getElementsByTagName("outlinerchildren")[0];
aVal._outlinerBuilder = this
},
@ -258,7 +258,7 @@ inOutlinerBuilder.prototype =
{
var kids = this.mOutliner.childNodes;
for (var i = 0 ; i < kids.length; ++i)
if (kids[i].localName != "outlinerbody")
if (kids[i].localName != "outlinerchildren")
this.mOutliner.removeChild(kids[i]);
this.clearChildren(this.mBindings);

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

@ -24,6 +24,6 @@
<splitter class="tree-splitter"/>
<outlinercol id="olcStyleValue" label="Value" flex="1"/>
</outlinercols>
<outlinerbody id="olbStyles" flex="1"/>
<outlinerchildren id="olbStyles"/>
</outliner>
</page>

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

@ -89,6 +89,6 @@
<splitter class="tree-splitter"/>
<outlinercol id="col@class" label="class" persist="width,hidden,ordinal" flex="1"/>
</outlinercols>
<outlinerbody id="trDOMOutlinerBody" flex="1" context="ppDOMContext"/>
<outlinerchildren id="trDOMOutlinerBody" context="ppDOMContext"/>
</outliner>
</page>

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

@ -72,7 +72,7 @@
<splitter class="tree-splitter"/>
<outlinercol id="colNodeValue" label="nodeValue" persist="width,hidden,ordinal" flex="1"/>
</outlinercols>
<outlinerbody id="olAttrBody" flex="1" context="ppAttrContext"/>
<outlinerchildren id="olAttrBody" context="ppAttrContext"/>
</outliner>
</vbox>

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

@ -110,6 +110,11 @@ JSObjectView.prototype =
{
},
isSorted: function()
{
return false;
},
getParentIndex: function(aRowIndex)
{
return 1;

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

@ -54,7 +54,7 @@
<splitter class="tree-splitter"/>
<outlinercol id="olcLine" label="Line"/>
</outlinercols>
<outlinerbody id="olbStyleRules" flex="1"/>
<outlinerchildren id="olbStyleRules"/>
</outliner>
<splitter id="splOutliners" collapse="after" persist="state">
@ -70,7 +70,7 @@
<splitter class="tree-splitter"/>
<outlinercol id="olcPropValue" label="Value" flex="1"/>
</outlinercols>
<outlinerbody id="olbStyleProps" flex="1"/>
<outlinerchildren id="olbStyleProps"/>
</outliner>
</page>

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

@ -22,6 +22,6 @@
<splitter class="tree-splitter"/>
<outlinercol id="olcRules" label="Rules" persist="width,hidden,ordinal" style="width: 4em"/>
</outlinercols>
<outlinerbody id="olbStyleSheets" flex="1"/>
<outlinerchildren id="olbStyleSheets"/>
</outliner>
</page>

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

@ -30,7 +30,7 @@
<splitter class="tree-splitter"/>
<outlinercol id="colNodeValue" label="nodeValue" flex="1"/>
</outlinercols>
<outlinerbody id="olbContent" flex="1"/>
<outlinerchildren id="olbContent"/>
</outliner>
</multipanel>
@ -40,7 +40,7 @@
<outlinercols>
<outlinercol id="olcMethodName" flex="1"/>
</outlinercols>
<outlinerbody id="olbMethods" flex="1" context="ppDOMContext"/>
<outlinerchildren id="olbMethods" context="ppDOMContext"/>
</outliner>
</multipanel>
@ -55,7 +55,7 @@
<outlinercols>
<outlinercol id="olcPropName" label="Property" flex="1"/>
</outlinercols>
<outlinerbody id="olbProps" flex="1" context="ppDOMContext"/>
<outlinerchildren id="olbProps" context="ppDOMContext"/>
</outliner>
</vbox>
</multipanel>
@ -67,7 +67,7 @@
<outlinercol id="olcHandlerEvent" flex="1"/>
<outlinercol id="olcHandlerPhase"/>
</outlinercols>
<outlinerbody id="olbHandlers" flex="1" context="ppDOMContext"/>
<outlinerchildren id="olbHandlers" context="ppDOMContext"/>
</outliner>
</multipanel>
@ -77,7 +77,7 @@
<outlinercol id="olcResourceType" flex="1"/>
<outlinercol id="olcResourceSrc" flex="2"/>
</outlinercols>
<outlinerbody id="olbResources" flex="1" context="ppDOMContext"/>
<outlinerchildren id="olbResources" context="ppDOMContext"/>
</outliner>
</multipanel>

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

@ -40,37 +40,37 @@
/* :::::::: node type color coding :::::::: */
outlinerbody:-moz-outliner-cell-text(ELEMENT_NODE) {
outlinerchildren:-moz-outliner-cell-text(ELEMENT_NODE) {
color: #000000;
}
outlinerbody:-moz-outliner-cell-text(ATTRIBUTE_NODE) {
outlinerchildren:-moz-outliner-cell-text(ATTRIBUTE_NODE) {
color: #556b2f;
}
outlinerbody:-moz-outliner-cell-text(CDATA_SECTION_NODE),
outlinerbody:-moz-outliner-cell-text(TEXT_NODE) {
outlinerchildren:-moz-outliner-cell-text(CDATA_SECTION_NODE),
outlinerchildren:-moz-outliner-cell-text(TEXT_NODE) {
color: #0000AA;
}
outlinerbody:-moz-outliner-cell-text(COMMENT_NODE) {
outlinerchildren:-moz-outliner-cell-text(COMMENT_NODE) {
color: #228b22;
}
outlinerbody:-moz-outliner-cell-text(anonymous) {
outlinerchildren:-moz-outliner-cell-text(anonymous) {
color: #ff0000;
}
outlinerbody:-moz-outliner-cell-text(selected, focus) {
outlinerchildren:-moz-outliner-cell-text(selected, focus) {
color: #FFFFFF;
}
/* :::::::: drag and drop insertion indicators :::::::: */
outlinerbody:-moz-outliner-column(dnd-insert-before) {
outlinerchildren:-moz-outliner-column(dnd-insert-before) {
border-left: 2px solid #000000;
}
outlinerbody:-moz-outliner-column(dnd-insert-after) {
outlinerchildren:-moz-outliner-column(dnd-insert-after) {
border-right: 2px solid #000000;
}

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

@ -40,39 +40,39 @@
/* :::::::: node type color coding :::::::: */
outlinerbody:-moz-outliner-cell-text(ELEMENT_NODE) {
outlinerchildren:-moz-outliner-cell-text(ELEMENT_NODE) {
color: #000000;
}
outlinerbody:-moz-outliner-cell-text(ATTRIBUTE_NODE) {
outlinerchildren:-moz-outliner-cell-text(ATTRIBUTE_NODE) {
color: #556b2f;
}
outlinerbody:-moz-outliner-cell-text(CDATA_SECTION_NODE),
outlinerbody:-moz-outliner-cell-text(TEXT_NODE) {
outlinerchildren:-moz-outliner-cell-text(CDATA_SECTION_NODE),
outlinerchildren:-moz-outliner-cell-text(TEXT_NODE) {
color: #0000AA;
}
outlinerbody:-moz-outliner-cell-text(COMMENT_NODE) {
outlinerchildren:-moz-outliner-cell-text(COMMENT_NODE) {
color: #228b22;
}
outlinerbody:-moz-outliner-cell-text(anonymous) {
outlinerchildren:-moz-outliner-cell-text(anonymous) {
color: #ff0000;
}
outlinerbody:-moz-outliner-cell-text(selected, focus) {
outlinerchildren:-moz-outliner-cell-text(selected, focus) {
color: #FFFFFF;
}
/* :::::::: drag and drop insertion indicators :::::::: */
outlinerbody:-moz-outliner-column(dnd-insert-before) {
outlinerchildren:-moz-outliner-column(dnd-insert-before) {
border-left: 2px solid #000000;
}
outlinerbody:-moz-outliner-column(dnd-insert-after) {
outlinerchildren:-moz-outliner-column(dnd-insert-after) {
border-right: 2px solid #000000;
}

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

@ -73,13 +73,13 @@
</groupbox>
<spacer flex="1" /></hbox>
<outliner id="out" flex="1">
<outliner id="out" flex="1" onselect="sel_change()">
<outlinercols>
<outlinercol id="name" label="Name" flex="1"/>
<outlinercol id="purp" label="Purpose" flex="2"/>
<outlinercol id="comm" label="Comment" flex="1"/>
</outlinercols>
<outlinerbody flex="1" onselect="sel_change()"/>
<outlinerchildren/>
</outliner>
</window>

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

@ -26,23 +26,23 @@ text.head {
font-weight: bold;
}
outlinerbody:-moz-outliner-row(success)
outlinerchildren:-moz-outliner-row(success)
{
background-color: green;
}
outlinerbody:-moz-outliner-row(fail)
outlinerchildren:-moz-outliner-row(fail)
{
background-color: red;
}
outlinerbody:-moz-outliner-row(selected)
outlinerchildren:-moz-outliner-row(selected)
{
border: 1px solid blue;
background-color: white ;
}
outlinerbody:-moz-outliner-cell-text(selected)
outlinerchildren:-moz-outliner-cell-text(selected)
{
color: black;
}

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

@ -31,7 +31,7 @@
<outlinercol flex="1" id="sample-gender" label="Gender"
class="outlinercol-header outlinercol-inset-header"/>
</outlinercols>
<outlinerbody id="sample-body" flex="1"/>
<outlinerchildren id="sample-body"/>
</outliner>
<button onclick="document.location.href=document.location.href" label="reload"/>

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

@ -901,7 +901,7 @@ function con_sourceclick (e)
{
var target = e.originalTarget;
if (target.localName == "outlinerbody")
if (target.localName == "outlinerchildren")
{
var row = new Object();
var colID = new Object();

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

@ -79,7 +79,7 @@
persist="hidden width"/>
</outlinercols>
<outlinerbody id="project-body" flex="1"/>
<outlinerchildren id="project-body"/>
</outliner>
<splitter collapse="before"><grippy/></splitter>
@ -100,7 +100,7 @@
<outlinercol flex="1" id="script-line-extent"
label="&ScriptCol2.header;" persist="hidden width" hidden="true"/>
</outlinercols>
<outlinerbody id="script-list-body" flex="1"/>
<outlinerchildren id="script-list-body"/>
</outliner>
</vbox>
@ -120,7 +120,7 @@
<splitter class="tree-splitter"/>
<outlinercol id="source-line-text" flex="90" persist="hidden width"/>
</outlinercols>
<outlinerbody id="source-outliner-body" flex="1"/>
<outlinerchildren id="source-outliner-body"/>
</outliner>
</hbox>
@ -151,7 +151,7 @@
label="&StackCol3.header;" hidden="true"/>
</outlinercols>
<outlinerbody id="stack-body" flex="1"/>
<outlinerchildren id="stack-body"/>
</outliner>
<splitter collapse="after" persist="left"><grippy/></splitter>

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

@ -147,171 +147,171 @@
list-style-image: url("chrome://venkman/skin/images/step-out-act.png");
}
outlinerbody:-moz-outliner-cell(breakpoint-col) {
outlinerchildren:-moz-outliner-cell(breakpoint-col) {
background: #CCCCCC;
border-right: 1px grey solid;
}
outlinerbody:-moz-outliner-cell(source-line-number) {
outlinerchildren:-moz-outliner-cell(source-line-number) {
border-right: 2px #CCCCCC solid;
text-align: right;
background: #EEEEEE;
}
outlinerbody:-moz-outliner-row(current-line, selected) {
outlinerchildren:-moz-outliner-row(current-line, selected) {
background: green !important;
}
outlinerbody:-moz-outliner-cell(source-line-number, highlight-start),
outlinerbody:-moz-outliner-cell(source-line-number, highlight-range),
outlinerbody:-moz-outliner-cell(source-line-number, highlight-end) {
outlinerchildren:-moz-outliner-cell(source-line-number, highlight-start),
outlinerchildren:-moz-outliner-cell(source-line-number, highlight-range),
outlinerchildren:-moz-outliner-cell(source-line-number, highlight-end) {
border-right: 2px #919bd6 solid;
background: #d5d5e0;
}
outlinerbody:-moz-outliner-cell(source-line-text, highlight-start),
outlinerbody:-moz-outliner-cell(source-line-text, highlight-range),
outlinerbody:-moz-outliner-cell(source-line-text, highlight-end) {
outlinerchildren:-moz-outliner-cell(source-line-text, highlight-start),
outlinerchildren:-moz-outliner-cell(source-line-text, highlight-range),
outlinerchildren:-moz-outliner-cell(source-line-text, highlight-end) {
border-left: 1px black solid;
background: #EEEEEE;
}
outlinerbody:-moz-outliner-cell(source-line-text, selected),
outlinerbody:-moz-outliner-cell(source-line-number, selected) {
outlinerchildren:-moz-outliner-cell(source-line-text, selected),
outlinerchildren:-moz-outliner-cell(source-line-number, selected) {
border-left: inherit !important;
background: inherit !important;
}
outlinerbody:-moz-outliner-row {
outlinerchildren:-moz-outliner-row {
border: 0px;
}
outlinerbody:-moz-outliner-cell(source-line-number, current-line),
outlinerbody:-moz-outliner-cell(source-line-text, current-line) {
outlinerchildren:-moz-outliner-cell(source-line-number, current-line),
outlinerchildren:-moz-outliner-cell(source-line-text, current-line) {
background: #ecef34;
}
outlinerbody:-moz-outliner-image(breakpoint-col, code) {
outlinerchildren:-moz-outliner-image(breakpoint-col, code) {
list-style-image: url("chrome://venkman/skin/images/code-line.gif");
}
outlinerbody:-moz-outliner-image(breakpoint-col, code, prettyprint) {
outlinerchildren:-moz-outliner-image(breakpoint-col, code, prettyprint) {
list-style-image: url("chrome://venkman/skin/images/code-line-dis.gif");
}
outlinerbody:-moz-outliner-image(breakpoint-col, breakpoint) {
outlinerchildren:-moz-outliner-image(breakpoint-col, breakpoint) {
list-style-image: url("chrome://venkman/skin/images/breakpoint-line.gif");
}
outlinerbody:-moz-outliner-image(current-frame-flag){
outlinerchildren:-moz-outliner-image(current-frame-flag){
list-style-image: url("chrome://venkman/skin/images/current-frame.gif");
}
outlinerbody:-moz-outliner-cell(script-name,fn-guessed) {
outlinerchildren:-moz-outliner-cell(script-name,fn-guessed) {
color: red;
font-style: italic;
}
outlinerbody:-moz-outliner-image(project-col-0,pj-blacklist){
outlinerchildren:-moz-outliner-image(project-col-0,pj-blacklist){
list-style-image: url("chrome://venkman/skin/images/proj-blacklist.png");
}
outlinerbody:-moz-outliner-image(project-col-0,pj-bl-item){
outlinerchildren:-moz-outliner-image(project-col-0,pj-bl-item){
list-style-image: url("chrome://venkman/skin/images/proj-bl-item.png");
}
outlinerbody:-moz-outliner-image(project-col-0,pj-breakpoints){
outlinerchildren:-moz-outliner-image(project-col-0,pj-breakpoints){
list-style-image: url("chrome://venkman/skin/images/proj-breakpoints.png");
}
outlinerbody:-moz-outliner-image(project-col-0,pj-breakpoint){
outlinerchildren:-moz-outliner-image(project-col-0,pj-breakpoint){
list-style-image: url("chrome://venkman/skin/images/proj-breakpoint.png");
}
outlinerbody:-moz-outliner-image(script-name){
outlinerchildren:-moz-outliner-image(script-name){
list-style-image: url("chrome://venkman/skin/images/file-function.png");
}
outlinerbody:-moz-outliner-image(script-name,has-bp){
outlinerchildren:-moz-outliner-image(script-name,has-bp){
list-style-image: url("chrome://venkman/skin/images/file-function-bp.png");
}
outlinerbody:-moz-outliner-image(script-name,ft-unk){
outlinerchildren:-moz-outliner-image(script-name,ft-unk){
list-style-image: url("chrome://venkman/skin/images/file-unknown.png");
}
outlinerbody:-moz-outliner-image(script-name,ft-js){
outlinerchildren:-moz-outliner-image(script-name,ft-js){
list-style-image: url("chrome://venkman/skin/images/file-js.png");
}
outlinerbody:-moz-outliner-image(script-name,ft-html){
outlinerchildren:-moz-outliner-image(script-name,ft-html){
list-style-image: url("chrome://venkman/skin/images/file-html.png");
}
outlinerbody:-moz-outliner-image(script-name,ft-xul){
outlinerchildren:-moz-outliner-image(script-name,ft-xul){
list-style-image: url("chrome://venkman/skin/images/file-xul.png");
}
outlinerbody:-moz-outliner-image(script-name,ft-xml){
outlinerchildren:-moz-outliner-image(script-name,ft-xml){
list-style-image: url("chrome://venkman/skin/images/file-xml.png");
}
outlinerbody:-moz-outliner-image(script-name,ft-unk,has-bp){
outlinerchildren:-moz-outliner-image(script-name,ft-unk,has-bp){
list-style-image: url("chrome://venkman/skin/images/file-unknown-bp.png");
}
outlinerbody:-moz-outliner-image(script-name,ft-js,has-bp){
outlinerchildren:-moz-outliner-image(script-name,ft-js,has-bp){
list-style-image: url("chrome://venkman/skin/images/file-js-bp.png");
}
outlinerbody:-moz-outliner-image(script-name,ft-html,has-bp){
outlinerchildren:-moz-outliner-image(script-name,ft-html,has-bp){
list-style-image: url("chrome://venkman/skin/images/file-html-bp.png");
}
outlinerbody:-moz-outliner-image(script-name,ft-xul,has-bp){
outlinerchildren:-moz-outliner-image(script-name,ft-xul,has-bp){
list-style-image: url("chrome://venkman/skin/images/file-xul-bp.png");
}
outlinerbody:-moz-outliner-image(script-name,ft-xml,has-bp){
outlinerchildren:-moz-outliner-image(script-name,ft-xml,has-bp){
list-style-image: url("chrome://venkman/skin/images/file-xml-bp.png");
}
outlinerbody:-moz-outliner-image(stack-col-0,w-stack){
outlinerchildren:-moz-outliner-image(stack-col-0,w-stack){
list-style-image: url("chrome://venkman/skin/images/watch-stack.png");
}
outlinerbody:-moz-outliner-image(stack-col-0,w-frame){
outlinerchildren:-moz-outliner-image(stack-col-0,w-frame){
list-style-image: url("chrome://venkman/skin/images/watch-frame.png");
}
outlinerbody:-moz-outliner-image(stack-col-0,w-void){
outlinerchildren:-moz-outliner-image(stack-col-0,w-void){
list-style-image: url("chrome://venkman/skin/images/watch-void.png");
}
outlinerbody:-moz-outliner-image(stack-col-0,w-null){
outlinerchildren:-moz-outliner-image(stack-col-0,w-null){
list-style-image: url("chrome://venkman/skin/images/watch-null.png");
}
outlinerbody:-moz-outliner-image(stack-col-0,w-bool){
outlinerchildren:-moz-outliner-image(stack-col-0,w-bool){
list-style-image: url("chrome://venkman/skin/images/watch-bool.png");
}
outlinerbody:-moz-outliner-image(stack-col-0,w-int){
outlinerchildren:-moz-outliner-image(stack-col-0,w-int){
list-style-image: url("chrome://venkman/skin/images/watch-int.png");
}
outlinerbody:-moz-outliner-image(stack-col-0,w-double){
outlinerchildren:-moz-outliner-image(stack-col-0,w-double){
list-style-image: url("chrome://venkman/skin/images/watch-double.png");
}
outlinerbody:-moz-outliner-image(stack-col-0,w-string){
outlinerchildren:-moz-outliner-image(stack-col-0,w-string){
list-style-image: url("chrome://venkman/skin/images/watch-string.png");
}
outlinerbody:-moz-outliner-image(stack-col-0,w-function){
outlinerchildren:-moz-outliner-image(stack-col-0,w-function){
list-style-image: url("chrome://venkman/skin/images/watch-function.png");
}
outlinerbody:-moz-outliner-image(stack-col-0,w-object){
outlinerchildren:-moz-outliner-image(stack-col-0,w-object){
list-style-image: url("chrome://venkman/skin/images/watch-object.png");
}

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

@ -53,7 +53,8 @@
<label value="&div.cookiesonsystem.label;"/>
<separator class="thin"/>
<outliner id="cookiesOutliner" flex="1" style="height: 10em;" multiple="true"
onkeypress="HandleCookieKeyPress(event)">
onkeypress="HandleCookieKeyPress(event)"
onselect="CookieSelected();">
<outlinercols>
<outlinercol id="domainCol" label="&treehead.cookiedomain.label;" flex="3"
onclick="CookieColumnSort('rawHost');"/>
@ -61,7 +62,7 @@
<outlinercol id="nameCol" label="&treehead.cookiename.label;" flex="7"
onclick="CookieColumnSort('name');"/>
</outlinercols>
<outlinerbody flex="1" onselect="CookieSelected();"/>
<outlinerchildren/>
</outliner>
<groupbox>
<caption label="&treehead.infoselected.label;"/>
@ -118,7 +119,8 @@
<description id="permissionsText" value="&div.bannedservers.label;"/>
<separator class="thin"/>
<outliner id="permissionsOutliner" flex="1" style="height: 10em;" multiple="true"
onkeypress="HandlePermissionKeyPress(event)">
onkeypress="HandlePermissionKeyPress(event)"
onselect="PermissionSelected();">
<outlinercols>
<outlinercol id="siteCol" label="&treehead.sitename.label;" flex="5"
onclick="PermissionColumnSort('rawHost');"/>
@ -126,7 +128,7 @@
<outlinercol id="statusCol" label="&treehead.status.label;" flex="5"
onclick="PermissionColumnSort('capability');"/>
</outlinercols>
<outlinerbody flex="1" onselect="PermissionSelected();"/>
<outlinerchildren/>
</outliner>
<hbox>
<button id="removePermission" disabled="true"

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

@ -56,8 +56,9 @@
<vbox id="savedsignons" flex="1">
<description>&spiel.signonsstored.label;</description>
<separator class="thin"/>
<outliner id="signonsOutliner" flex="1" style="height: 10em;" multiple="true"
onkeypress="HandleSignonKeyPress(event)">
<outliner id="signonsOutliner" flex="1" style="height: 10em;"
onkeypress="HandleSignonKeyPress(event)"
onselect="SignonSelected();">
<outlinercols>
<outlinercol id="siteCol" label="&treehead.site.label;" flex="5"
onclick="SignonColumnSort('host');"/>
@ -65,7 +66,7 @@
<outlinercol id="userCol" label="&treehead.username.label;" flex="5"
onclick="SignonColumnSort('user');"/>
</outlinercols>
<outlinerbody flex="1" onselect="SignonSelected();"/>
<outlinerchildren/>
</outliner>
<separator class="thin"/>
<hbox>
@ -80,13 +81,14 @@
<vbox id="rejectedsites" flex="1">
<description>&spiel.signonsnotstored.label;</description>
<separator class="thin"/>
<outliner id="rejectsOutliner" flex="1" style="height: 10em;" multiple="true"
onkeypress="HandleRejectKeyPress(event)">
<outliner id="rejectsOutliner" flex="1" style="height: 10em;"
onkeypress="HandleRejectKeyPress(event)"
onselect="RejectSelected();">
<outlinercols>
<outlinercol id="rejectCol" label="&treehead.site.label;" flex="5"
onclick="RejectColumnSort('host');"/>
</outlinercols>
<outlinerbody flex="1" onselect="RejectSelected();"/>
<outlinerchildren/>
</outliner>
<separator class="thin"/>
<hbox>
@ -102,12 +104,13 @@
<description>&spiel.nopreview.label;</description>
<separator class="thin"/>
<outliner id="nopreviewsOutliner" flex="1" style="height: 10em;" multiple="true"
onkeypress="HandleNopreviewKeyPress(event)">
onkeypress="HandleNopreviewKeyPress(event)"
onselect="NopreviewSelected();">
<outlinercols>
<outlinercol id="nopreviewCol" label="&treehead.site.label;" flex="5"
onclick="NopreviewColumnSort('host');"/>
</outlinercols>
<outlinerbody flex="1" onselect="NopreviewSelected();"/>
<outlinerchildren/>
</outliner>
<separator class="thin"/>
<hbox>
@ -123,12 +126,13 @@
<description>&spiel.nocapture.label;</description>
<separator class="thin"/>
<outliner id="nocapturesOutliner" flex="1" style="height: 10em;" multiple="true"
onkeypress="HandleNocaptureKeyPress(event)">
onkeypress="HandleNocaptureKeyPress(event)"
onselect="NocaptureSelected();">
<outlinercols>
<outlinercol id="nocaptureCol" label="&treehead.site.label;" flex="5"
onclick="NocaptureColumnSort('host');"/>
</outlinercols>
<outlinerbody flex="1" onselect="NocaptureSelected();"/>
<outlinerchildren/>
</outliner>
<separator class="thin"/>
<hbox>

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

@ -5069,7 +5069,7 @@ nsCSSFrameConstructor::ConstructXULFrame(nsIPresShell* aPresShell,
isReplaced = PR_TRUE;
rv = NS_NewSpringFrame(aPresShell, &newFrame);
}
else if (aTag == nsXULAtoms::outlinerbody) {
else if (aTag == nsXULAtoms::outlinerchildren) {
isReplaced = PR_TRUE;
rv = NS_NewOutlinerBodyFrame(aPresShell, &newFrame);
}
@ -5579,7 +5579,7 @@ nsCSSFrameConstructor::ConstructXULFrame(nsIPresShell* aPresShell,
// register tooltip support if needed
nsAutoString value;
if (aTag == nsXULAtoms::outlinerbody || // outliners always need titletips
if (aTag == nsXULAtoms::outlinerchildren || // outliners always need titletips
aContent->GetAttr(kNameSpaceID_None, nsXULAtoms::tooltiptext, value) !=
NS_CONTENT_ATTR_NOT_THERE ||
aContent->GetAttr(kNameSpaceID_None, nsXULAtoms::tooltip, value) !=
@ -7756,12 +7756,10 @@ nsCSSFrameConstructor::ContentAppended(nsIPresContext* aPresContext,
bindingManager->ResolveTag(aContainer, &namespaceID, getter_AddRefs(tag));
// Just ignore outliner tags, anyway we don't create any frames for them.
if (tag == nsXULAtoms::outlineritem ||
tag == nsXULAtoms::outlinerseparator ||
tag == nsXULAtoms::outlinerchildren ||
if (tag == nsXULAtoms::outlinerchildren ||
tag == nsXULAtoms::outlineritem ||
tag == nsXULAtoms::outlinerrow ||
tag == nsXULAtoms::outlinercell ||
(UseXBLForms() && tag == nsHTMLAtoms::option))
(UseXBLForms() && tag == nsHTMLAtoms::select))
return NS_OK;
PRBool treeChildren = tag.get() == nsXULAtoms::treechildren;
@ -8368,12 +8366,10 @@ nsCSSFrameConstructor::ContentInserted(nsIPresContext* aPresContext,
bindingManager->ResolveTag(aContainer, &namespaceID, getter_AddRefs(tag));
// Just ignore outliner tags, anyway we don't create any frames for them.
if (tag == nsXULAtoms::outlineritem ||
tag == nsXULAtoms::outlinerseparator ||
tag == nsXULAtoms::outlinerchildren ||
if (tag == nsXULAtoms::outlinerchildren ||
tag == nsXULAtoms::outlineritem ||
tag == nsXULAtoms::outlinerrow ||
tag == nsXULAtoms::outlinercell ||
(UseXBLForms() && tag == nsHTMLAtoms::option))
(UseXBLForms() && tag == nsHTMLAtoms::select))
return NS_OK;
PRBool treeChildren = tag && tag.get() == nsXULAtoms::treechildren;
@ -9287,12 +9283,10 @@ nsCSSFrameConstructor::ContentRemoved(nsIPresContext* aPresContext,
bindingManager->ResolveTag(aContainer, &namespaceID, getter_AddRefs(tag));
// Just ignore outliner tags, anyway we don't create any frames for them.
if (tag == nsXULAtoms::outlineritem ||
tag == nsXULAtoms::outlinerseparator ||
tag == nsXULAtoms::outlinerchildren ||
if (tag == nsXULAtoms::outlinerchildren ||
tag == nsXULAtoms::outlineritem ||
tag == nsXULAtoms::outlinerrow ||
tag == nsXULAtoms::outlinercell ||
(UseXBLForms() && tag == nsHTMLAtoms::option))
(UseXBLForms() && tag == nsHTMLAtoms::select))
return NS_OK;
PRBool treeChildren = tag && tag.get() == nsXULAtoms::treechildren;

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

@ -124,11 +124,9 @@
</xul:outlinercols>
<xul:outlinerrows class="select-outlinerrows outliner-rows" flex="1">
<xul:hbox flex="1" class="outliner-bodybox">
<xul:outlinerbody flex="1" class="select-outlinerbody">
<xul:outlinerchildren>
<children/>
</xul:outlinerchildren>
</xul:outlinerbody>
<xul:outlinerchildren class="select-outlinerbody">
<children/>
</xul:outlinerchildren>
</xul:hbox>
<xul:scrollbar orient="vertical" class="outliner-scrollbar"/>
</xul:outlinerrows>

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

@ -124,11 +124,9 @@
</xul:outlinercols>
<xul:outlinerrows class="select-outlinerrows outliner-rows" flex="1">
<xul:hbox flex="1" class="outliner-bodybox">
<xul:outlinerbody flex="1" class="select-outlinerbody">
<xul:outlinerchildren>
<children/>
</xul:outlinerchildren>
</xul:outlinerbody>
<xul:outlinerchildren class="select-outlinerbody">
<children/>
</xul:outlinerchildren>
</xul:hbox>
<xul:scrollbar orient="vertical" class="outliner-scrollbar"/>
</xul:outlinerrows>

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

@ -5069,7 +5069,7 @@ nsCSSFrameConstructor::ConstructXULFrame(nsIPresShell* aPresShell,
isReplaced = PR_TRUE;
rv = NS_NewSpringFrame(aPresShell, &newFrame);
}
else if (aTag == nsXULAtoms::outlinerbody) {
else if (aTag == nsXULAtoms::outlinerchildren) {
isReplaced = PR_TRUE;
rv = NS_NewOutlinerBodyFrame(aPresShell, &newFrame);
}
@ -5579,7 +5579,7 @@ nsCSSFrameConstructor::ConstructXULFrame(nsIPresShell* aPresShell,
// register tooltip support if needed
nsAutoString value;
if (aTag == nsXULAtoms::outlinerbody || // outliners always need titletips
if (aTag == nsXULAtoms::outlinerchildren || // outliners always need titletips
aContent->GetAttr(kNameSpaceID_None, nsXULAtoms::tooltiptext, value) !=
NS_CONTENT_ATTR_NOT_THERE ||
aContent->GetAttr(kNameSpaceID_None, nsXULAtoms::tooltip, value) !=
@ -7756,12 +7756,10 @@ nsCSSFrameConstructor::ContentAppended(nsIPresContext* aPresContext,
bindingManager->ResolveTag(aContainer, &namespaceID, getter_AddRefs(tag));
// Just ignore outliner tags, anyway we don't create any frames for them.
if (tag == nsXULAtoms::outlineritem ||
tag == nsXULAtoms::outlinerseparator ||
tag == nsXULAtoms::outlinerchildren ||
if (tag == nsXULAtoms::outlinerchildren ||
tag == nsXULAtoms::outlineritem ||
tag == nsXULAtoms::outlinerrow ||
tag == nsXULAtoms::outlinercell ||
(UseXBLForms() && tag == nsHTMLAtoms::option))
(UseXBLForms() && tag == nsHTMLAtoms::select))
return NS_OK;
PRBool treeChildren = tag.get() == nsXULAtoms::treechildren;
@ -8368,12 +8366,10 @@ nsCSSFrameConstructor::ContentInserted(nsIPresContext* aPresContext,
bindingManager->ResolveTag(aContainer, &namespaceID, getter_AddRefs(tag));
// Just ignore outliner tags, anyway we don't create any frames for them.
if (tag == nsXULAtoms::outlineritem ||
tag == nsXULAtoms::outlinerseparator ||
tag == nsXULAtoms::outlinerchildren ||
if (tag == nsXULAtoms::outlinerchildren ||
tag == nsXULAtoms::outlineritem ||
tag == nsXULAtoms::outlinerrow ||
tag == nsXULAtoms::outlinercell ||
(UseXBLForms() && tag == nsHTMLAtoms::option))
(UseXBLForms() && tag == nsHTMLAtoms::select))
return NS_OK;
PRBool treeChildren = tag && tag.get() == nsXULAtoms::treechildren;
@ -9287,12 +9283,10 @@ nsCSSFrameConstructor::ContentRemoved(nsIPresContext* aPresContext,
bindingManager->ResolveTag(aContainer, &namespaceID, getter_AddRefs(tag));
// Just ignore outliner tags, anyway we don't create any frames for them.
if (tag == nsXULAtoms::outlineritem ||
tag == nsXULAtoms::outlinerseparator ||
tag == nsXULAtoms::outlinerchildren ||
if (tag == nsXULAtoms::outlinerchildren ||
tag == nsXULAtoms::outlineritem ||
tag == nsXULAtoms::outlinerrow ||
tag == nsXULAtoms::outlinercell ||
(UseXBLForms() && tag == nsHTMLAtoms::option))
(UseXBLForms() && tag == nsHTMLAtoms::select))
return NS_OK;
PRBool treeChildren = tag && tag.get() == nsXULAtoms::treechildren;

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

@ -45,6 +45,8 @@ interface nsIDOMElement;
[scriptable, uuid(CAABF76F-9D35-401f-BEAC-3955817C645C)]
interface nsIBoxObject : nsISupports
{
readonly attribute nsIDOMElement element;
attribute nsIBoxLayoutManager layoutManager;
attribute nsIBoxPaintManager paintManager;

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

@ -88,6 +88,16 @@ nsBoxObject::~nsBoxObject(void)
{
}
NS_IMETHODIMP
nsBoxObject::GetElement(nsIDOMElement** aResult)
{
if (mContent)
mContent->QueryInterface(NS_GET_IID(nsIDOMElement), (void**)aResult);
else
*aResult = nsnull;
return NS_OK;
}
NS_IMETHODIMP
nsBoxObject::GetLayoutManager(nsIBoxLayoutManager** aResult)
{

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

@ -252,11 +252,11 @@ nsXULTooltipListener::Init(nsIContent* aSourceNode, nsIRootBox* aRootBox)
mSourceNode = aSourceNode;
AddTooltipSupport(aSourceNode);
// if the target is an outlinerbody, we may have some special
// if the target is an outlinerchildren, we may have some special
// case handling to do
nsCOMPtr<nsIAtom> tag;
mSourceNode->GetTag(*getter_AddRefs(tag));
mIsTargetOutliner = tag == nsXULAtoms::outlinerbody;
mIsTargetOutliner = tag == nsXULAtoms::outlinerchildren;
static PRBool prefChangeRegistered = PR_FALSE;

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

@ -1,33 +0,0 @@
outlinerbody {
background-color: white;
color: black;
-moz-user-select: none;
}
:-moz-outliner-column
{
}
:-moz-outliner-row(current)
{
border: 1px black dotted;
}
:-moz-outliner-row(selected)
{
background-color: blue;
}
:-moz-outliner-cell(selected)
{
}
:-moz-outliner-cell-text
{
}
:-moz-outliner-cell-text(selected)
{
color: white;
}

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

@ -1,51 +0,0 @@
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://communicator/skin/"?>
<?xml-stylesheet href="outliner.css"?>
<window id="insaneInsertion"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
orient="vertical">
<script>
var view = ({
rowCount : 5000000,
getRowProperties : function(index, prop) {},
getCellProperties : function(index, col, prop) {},
getColumnProperties : function(col, elt, prop) {},
isSeparator : function(index) {
if (index % 10 == 0)
return true;
return false;
},
outlinerbox : null,
setOutliner : function(out) { this.outlinerbox = out; },
getCellText : function(i, col) { return "Text at row #" + i + " in col " + col; }
});
function setView(outliner, v) {
dump('Outliner is ' + outliner + '\n');
outliner.outlinerBoxObject.view = v;
}
</script>
<html>
This outliner contains 5,000,000 rows. Can you believe it?
</html>
<spacer style="height: 16px"/>
<outliner id="out" flex="1">
<outlinercols>
<outlinercol id="Col1" label="Col1" flex="1"/>
<outlinercol id="Col2" label="Col2" flex="1"/>
<outlinercol id="Col3" label="Col3" flex="1"/>
<outlinercol id="Col4" label="Col4" flex="1"/>
</outlinercols>
<outlinerbody flex="1" onselect="dump('selection changed!\n')"/>
</outliner>
<hbox>
<button label="Attach View" oncommand="setView(document.getElementById('out'), view)"/>
<button label="Clear View" oncommand="setView(document.getElementById('out'), null)"/>
</hbox>
</window>

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

@ -126,6 +126,7 @@ interface nsIOutlinerBoxObject : nsISupports
void invalidateColumn(in wstring colID);
void invalidateRow(in long index);
void invalidateCell(in long row, in wstring colID);
void invalidatePrimaryCell(in long row);
void invalidateRange(in long startIndex, in long endIndex);
void invalidateScrollbar();

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

@ -45,7 +45,7 @@ interface nsIOutlinerContentView : nsISupports
/**
* The element in the DOM which this view uses as root content.
*/
attribute nsIDOMElement root;
readonly attribute nsIDOMElement root;
/**
* Retrieve the content item associated with the specified index.

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

@ -1,203 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Netscape Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Original Author: David W. Hyatt (hyatt@netscape.com)
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the NPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the NPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#include "nsIOutlinerBoxObject.idl"
#include "nsISupportsArray.idl"
#include "domstubs.idl"
interface nsIOutlinerSelection;
[scriptable, uuid(7660811D-3CB8-441f-8E58-466DE4F3FA9A)]
interface nsIOutlinerView : nsISupports
{
/**
* The total number of rows in the outliner (including the offscreen rows).
*/
readonly attribute long rowCount;
/**
* The selection for this view.
*/
attribute nsIOutlinerSelection selection;
/**
* An atomized list of properties for a given row. Each property, x, that
* the view gives back will cause the pseudoclass :moz-outliner-row-x
* to be matched on the pseudoelement ::moz-outliner-row.
*/
void getRowProperties(in long index, in nsISupportsArray properties);
/**
* An atomized list of properties for a given cell. Each property, x, that
* the view gives back will cause the pseudoclass :moz-outliner-cell-x
* to be matched on the ::moz-outliner-cell pseudoelement.
*/
void getCellProperties(in long row, in wstring colID, in nsISupportsArray properties);
/**
* Called to get properties to paint a column background. For shading the sort
* column, etc.
*/
void getColumnProperties(in wstring colID, in nsIDOMElement colElt, in nsISupportsArray properties);
/**
* Methods that can be used to test whether or not a twisty should be drawn,
* and if so, whether an open or closed twisty should be used.
*/
boolean isContainer(in long index);
boolean isContainerOpen(in long index);
boolean isContainerEmpty(in long index);
/**
* isSeparator is used to determine if the row at index is a separator.
* A value of true will result in the outliner drawing a horizontal line.
* The outliner uses the border properties on the ::moz-outliner-separator
* pseudoclass to draw the separator.
*/
boolean isSeparator(in long index);
/**
* Specifies if there is currently a sort on any column. Used mostly by dragdrop
* to affect drop feedback.
*/
boolean isSorted ( ) ;
/**
* Methods used by the drag feedback code to determine if a drag is allowable at
* the current location. To get the behavior where drops are only allowed on
* items, such as the mailNews folder pane, always return false from |canDropBeforeAfter()|.
*/
boolean canDropOn ( in long index );
boolean canDropBeforeAfter ( in long index, in boolean before );
/**
* Called when the user drops something on this view. The |orientation| param
* specifies before/on/after the given |row|.
*/
const long inDropBefore = 1;
const long inDropOn = 2;
const long inDropAfter = 3;
void drop ( in long row, in long orientation ) ;
/**
* Methods used by the outliner to draw vertical lines in the tree.
* GetParentIndex is used to obtain the index of a parent row.
*/
long getParentIndex(in long rowIndex);
/**
* HasNextSibling is used to determine if the row at rowIndex has a nextSibling
* that occurs *after* the index specified by afterIndex. Code that is forced
* to march down the view looking at levels can optimize the march by starting
* at afterIndex+1.
*/
boolean hasNextSibling(in long rowIndex, in long afterIndex);
/**
* The level is an integer value that represents
* the level of indentation. It is multiplied by the width specified in the
* :moz-outliner-indentation pseudoelement to compute the exact indendation.
*/
long getLevel(in long index);
/**
* The text for a given cell. If a column consists only of an image, then
* the empty string is returned.
*/
AString getCellText(in long row, in wstring colID);
/**
* Called during initialization to link the view to the front end box object.
*/
void setOutliner(in nsIOutlinerBoxObject outliner);
/**
* Called on the view when an item is opened or closed.
*/
void toggleOpenState(in long index);
/**
* Called on the view when a header is clicked.
*/
void cycleHeader(in wstring colID, in nsIDOMElement elt);
/**
* Should be called from a XUL onselect handler whenever the selection changes.
* XXX Should this be done automatically?
*/
void selectionChanged();
/**
* Called on the view when a cell in a non-selectable cycling column (e.g., unread/flag/etc.) is clicked.
*/
void cycleCell(in long row, in wstring colID);
/**
* isEditable is called to ask the view if the cell contents are editable.
* A value of true will result in the outliner popping up a text field when
* the user tries to inline edit the cell.
*/
boolean isEditable(in long row, in wstring colID);
/**
* setCellText is called when the contents of the cell have been edited by the user.
*/
void setCellText(in long row, in wstring colID, in wstring value);
/**
* A command API that can be used to invoke commands on the selection. The outliner
* will automatically invoke this method when certain keys are pressed. For example,
* when the DEL key is pressed, performAction will be called with the "delete" string.
*/
void performAction(in wstring action);
/**
* A command API that can be used to invoke commands on a specific row.
*/
void performActionOnRow(in wstring action, in long row);
/**
* A command API that can be used to invoke commands on a specific cell.
*/
void performActionOnCell(in wstring action, in long row, in wstring colID);
};
%{C++
// Initializer,
%}

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

@ -189,6 +189,9 @@ nsOutlinerColumn::nsOutlinerColumn(nsIContent* aColElement, nsIFrame* aFrame)
nsCOMPtr<nsIStyleContext> styleContext;
aFrame->GetStyleContext(getter_AddRefs(styleContext));
const nsStyleVisibility* vis =
(const nsStyleVisibility*)styleContext->GetStyleData(eStyleStruct_Visibility);
// Fetch the crop style.
mCropStyle = 0;
nsAutoString crop;
@ -199,8 +202,6 @@ nsOutlinerColumn::nsOutlinerColumn(nsIContent* aColElement, nsIFrame* aFrame)
mCropStyle = 2;
if (mCropStyle == 0 || mCropStyle == 2) { // Left or Right
const nsStyleVisibility* vis =
(const nsStyleVisibility*)styleContext->GetStyleData(eStyleStruct_Visibility);
if (vis->mDirection == NS_STYLE_DIRECTION_RTL)
mCropStyle = 2 - mCropStyle; // Right becomes left, left becomes right.
}
@ -210,6 +211,10 @@ nsOutlinerColumn::nsOutlinerColumn(nsIContent* aColElement, nsIFrame* aFrame)
(const nsStyleText*)styleContext->GetStyleData(eStyleStruct_Text);
mTextAlignment = textStyle->mTextAlign;
if (mTextAlignment == 0 || mTextAlignment == 2) { // Left or Right
if (vis->mDirection == NS_STYLE_DIRECTION_RTL)
mTextAlignment = 2 - mTextAlignment; // Right becomes left, left becomes right.
}
// Figure out if we're the primary column (that has to have indentation
// and twisties drawn.
@ -297,9 +302,8 @@ NS_INTERFACE_MAP_END_INHERITING(nsLeafFrame)
nsOutlinerBodyFrame::nsOutlinerBodyFrame(nsIPresShell* aPresShell)
:nsLeafBoxFrame(aPresShell), mPresContext(nsnull), mOutlinerBoxObject(nsnull), mImageCache(nsnull),
mColumns(nsnull), mScrollbar(nsnull), mTopRowIndex(0), mRowHeight(0), mIndentation(0), mStringWidth(-1),
mDropRow(kIllegalRow), mDropOrient(kNoOrientation), mFocused(PR_FALSE), mColumnsDirty(PR_TRUE), mDropAllowed(PR_FALSE),
mAlreadyUndrewDueToScroll(PR_FALSE), mHasFixedRowCount(PR_FALSE), mVerticalOverflow(PR_FALSE),
mOpenTimer(nsnull), mOpenTimerRow(-1)
mFocused(PR_FALSE), mColumnsDirty(PR_TRUE), mDropAllowed(PR_FALSE), mHasFixedRowCount(PR_FALSE),
mVerticalOverflow(PR_FALSE), mDropRow(-1), mDropOrient(-1), mOpenTimer(nsnull), mOpenTimerRow(-1)
{
NS_NewISupportsArray(getter_AddRefs(mScratchArray));
}
@ -540,25 +544,25 @@ NS_IMETHODIMP nsOutlinerBodyFrame::Reflow(nsIPresContext* aPresContext,
// A content model view is always created and hooked up,
// unless there is a XULOutlinerBuilder view.
nsCOMPtr<nsIDOMXULElement> xulele = do_QueryInterface(mContent);
nsCOMPtr<nsIContent> parent;
mContent->GetParent(*getter_AddRefs(parent));
nsCOMPtr<nsIDOMXULElement> xulele = do_QueryInterface(parent);
if (xulele) {
nsCOMPtr<nsIOutlinerView> view;
// First, see if there is a XUL outliner builder
// associated with the element.
// associated with the parent element.
nsCOMPtr<nsIXULTemplateBuilder> builder;
xulele->GetBuilder(getter_AddRefs(builder));
if (builder)
view = do_QueryInterface(builder);
if (!view) {
// No outliner builder, create a outliner content view.
// No outliner builder, create an outliner content view.
nsCOMPtr<nsIOutlinerContentView> contentView;
NS_NewOutlinerContentView(getter_AddRefs(contentView));
if (contentView) {
contentView->SetRoot(xulele);
if (contentView)
view = do_QueryInterface(contentView);
}
}
// Hook up the view.
@ -639,7 +643,7 @@ NS_IMETHODIMP nsOutlinerBodyFrame::SetView(nsIOutlinerView * aView)
nsCOMPtr<nsIOutlinerSelection> sel;
mView->GetSelection(getter_AddRefs(sel));
if (!sel) {
NS_NewOutlinerSelection(this, getter_AddRefs(sel));
NS_NewOutlinerSelection(mOutlinerBoxObject, getter_AddRefs(sel));
mView->SetSelection(sel);
}
@ -742,7 +746,7 @@ NS_IMETHODIMP nsOutlinerBodyFrame::GetPageCount(PRInt32 *_retval)
NS_IMETHODIMP nsOutlinerBodyFrame::Invalidate()
{
if (!mRect.IsEmpty()) {
nsLeafBoxFrame::Invalidate(mPresContext, mRect, PR_FALSE);
nsLeafBoxFrame::Invalidate(mPresContext, mRect, mDragSession ? PR_TRUE : PR_FALSE);
}
return NS_OK;
}
@ -754,7 +758,7 @@ NS_IMETHODIMP nsOutlinerBodyFrame::InvalidateColumn(const PRUnichar *aColID)
currCol = currCol->GetNext()) {
if (currCol->GetID().Equals(aColID)) {
nsRect columnRect(currX, mInnerBox.y, currCol->GetWidth(), mInnerBox.height);
nsLeafBoxFrame::Invalidate(mPresContext, columnRect, PR_FALSE);
nsLeafBoxFrame::Invalidate(mPresContext, columnRect, mDragSession ? PR_TRUE : PR_FALSE);
break;
}
currX += currCol->GetWidth();
@ -769,9 +773,8 @@ NS_IMETHODIMP nsOutlinerBodyFrame::InvalidateRow(PRInt32 aIndex)
return NS_OK;
nsRect rowRect(mInnerBox.x, mInnerBox.y+mRowHeight*(aIndex-mTopRowIndex), mInnerBox.width, mRowHeight);
if (!rowRect.IsEmpty()) {
nsLeafBoxFrame::Invalidate(mPresContext, rowRect, PR_FALSE);
}
if (!rowRect.IsEmpty())
nsLeafBoxFrame::Invalidate(mPresContext, rowRect, mDragSession ? PR_TRUE : PR_FALSE);
return NS_OK;
}
@ -787,7 +790,27 @@ NS_IMETHODIMP nsOutlinerBodyFrame::InvalidateCell(PRInt32 aIndex, const PRUnicha
if (currCol->GetID().Equals(aColID)) {
nsRect cellRect(currX, yPos, currCol->GetWidth(), mRowHeight);
nsLeafBoxFrame::Invalidate(mPresContext, cellRect, PR_FALSE);
nsLeafBoxFrame::Invalidate(mPresContext, cellRect, mDragSession ? PR_TRUE : PR_FALSE);
break;
}
currX += currCol->GetWidth();
}
return NS_OK;
}
NS_IMETHODIMP nsOutlinerBodyFrame::InvalidatePrimaryCell(PRInt32 aIndex)
{
if (aIndex < mTopRowIndex || aIndex > mTopRowIndex + mPageCount + 1)
return NS_OK;
nscoord currX = mInnerBox.x;
nscoord yPos = mInnerBox.y+mRowHeight*(aIndex-mTopRowIndex);
for (nsOutlinerColumn* currCol = mColumns; currCol && currX < mInnerBox.x+mInnerBox.width;
currCol = currCol->GetNext()) {
if (currCol->IsPrimary()) {
nsRect cellRect(currX, yPos, currCol->GetWidth(), mRowHeight);
nsLeafBoxFrame::Invalidate(mPresContext, cellRect, mDragSession ? PR_TRUE : PR_FALSE);
break;
}
currX += currCol->GetWidth();
@ -812,7 +835,7 @@ NS_IMETHODIMP nsOutlinerBodyFrame::InvalidateRange(PRInt32 aStart, PRInt32 aEnd)
aEnd = last;
nsRect rangeRect(mInnerBox.x, mInnerBox.y+mRowHeight*(aStart-mTopRowIndex), mInnerBox.width, mRowHeight*(aEnd-aStart+1));
nsLeafBoxFrame::Invalidate(mPresContext, rangeRect, PR_FALSE);
nsLeafBoxFrame::Invalidate(mPresContext, rangeRect, mDragSession ? PR_TRUE : PR_FALSE);
return NS_OK;
}
@ -858,9 +881,16 @@ nsresult nsOutlinerBodyFrame::CheckVerticalOverflow()
event->nativeMsg = nsnull;
event->message = mVerticalOverflow ? NS_SCROLLPORT_OVERFLOW : NS_SCROLLPORT_UNDERFLOW;
nsCOMPtr<nsIPresShell> shell;
mPresContext->GetShell(getter_AddRefs(shell));
shell->PostDOMEvent(mContent, event);
if (mState & NS_FRAME_IN_REFLOW) {
nsCOMPtr<nsIPresShell> shell;
mPresContext->GetShell(getter_AddRefs(shell));
shell->PostDOMEvent(mContent, event);
}
else {
nsEventStatus status = nsEventStatus_eIgnore;
mContent->HandleDOMEvent(mPresContext, event, nsnull, NS_EVENT_FLAG_INIT, &status);
delete event;
}
}
return NS_OK;
@ -910,20 +940,16 @@ NS_IMETHODIMP nsOutlinerBodyFrame::InvalidateScrollbar()
}
//
// AdjustEventCoordsToBoxCoordSpace
//
// Takes client x/y in pixels, converts them to twips, and massages them to be
// in our coordinate system.
//
void
nsOutlinerBodyFrame :: AdjustEventCoordsToBoxCoordSpace ( PRInt32 inX, PRInt32 inY, PRInt32* outX, PRInt32* outY )
nsOutlinerBodyFrame::AdjustEventCoordsToBoxCoordSpace (PRInt32 aX, PRInt32 aY, PRInt32* aResultX, PRInt32* aResultY)
{
// Convert our x and y coords to twips.
float pixelsToTwips = 0.0;
mPresContext->GetPixelsToTwips(&pixelsToTwips);
inX = NSToIntRound(inX * pixelsToTwips);
inY = NSToIntRound(inY * pixelsToTwips);
aX = NSToIntRound(aX * pixelsToTwips);
aY = NSToIntRound(aY * pixelsToTwips);
// Get our box object.
nsCOMPtr<nsIDocument> doc;
@ -962,16 +988,15 @@ nsOutlinerBodyFrame :: AdjustEventCoordsToBoxCoordSpace ( PRInt32 inX, PRInt32 i
}
// Adjust into our coordinate space.
x = inX-x;
y = inY-y;
x = aX-x;
y = aY-y;
// Adjust y by the inner box y, so that we're in the inner box's
// coordinate space.
y += mInnerBox.y;
*outX = x;
*outY = y;
*aResultX = x;
*aResultY = y;
} // AdjustEventCoordsToBoxCoordSpace
@ -1516,6 +1541,12 @@ nsOutlinerBodyFrame::PrefillPropertyArray(PRInt32 aRowIndex, nsOutlinerColumn* a
if (mFocused)
mScratchArray->AppendElement(nsXULAtoms::focus);
// sort
PRBool sorted = PR_FALSE;
mView->IsSorted(&sorted);
if (sorted)
mScratchArray->AppendElement(nsXULAtoms::sorted);
if (aRowIndex != -1) {
nsCOMPtr<nsIOutlinerSelection> selection;
mView->GetSelection(getter_AddRefs(selection));
@ -1551,12 +1582,25 @@ nsOutlinerBodyFrame::PrefillPropertyArray(PRInt32 aRowIndex, nsOutlinerColumn* a
else {
mScratchArray->AppendElement(nsXULAtoms::leaf);
}
// drop feedback
if (mDropAllowed && mDropRow == aRowIndex) {
if (mDropOrient == nsIOutlinerView::inDropBefore)
mScratchArray->AppendElement(nsXULAtoms::dropBefore);
else if (mDropOrient == nsIOutlinerView::inDropOn)
mScratchArray->AppendElement(nsXULAtoms::drop);
else if (mDropOrient == nsIOutlinerView::inDropAfter)
mScratchArray->AppendElement(nsXULAtoms::dropAfter);
}
}
if (aCol) {
nsCOMPtr<nsIAtom> colID;
aCol->GetIDAtom(getter_AddRefs(colID));
mScratchArray->AppendElement(colID);
if (aCol->IsPrimary())
mScratchArray->AppendElement(nsXULAtoms::primary);
}
}
@ -1655,10 +1699,18 @@ nsRect nsOutlinerBodyFrame::GetImageSize(PRInt32 aRowIndex, const PRUnichar* aCo
const nsStylePosition* myPosition = (const nsStylePosition*)
aStyleContext->GetStyleData(eStyleStruct_Position);
const nsStyleList* myList = (const nsStyleList*)
aStyleContext->GetStyleData(eStyleStruct_List);
r.x += myList->mImageRegion.x;
r.y += myList->mImageRegion.y;
if (myPosition->mWidth.GetUnit() == eStyleUnit_Coord) {
PRInt32 val = myPosition->mWidth.GetCoordValue();
r.width += val;
}
else if (myList->mImageRegion.width > 0)
r.width += myList->mImageRegion.width;
else
needWidth = PR_TRUE;
@ -1666,15 +1718,19 @@ nsRect nsOutlinerBodyFrame::GetImageSize(PRInt32 aRowIndex, const PRUnichar* aCo
PRInt32 val = myPosition->mHeight.GetCoordValue();
r.height += val;
}
else if (myList->mImageRegion.height > 0)
r.height += myList->mImageRegion.height;
else
needHeight = PR_TRUE;
if (needWidth || needHeight) {
#ifdef USE_IMG2
nsCOMPtr<imgIContainer> image;
GetImage(aRowIndex, aColID, aStyleContext, getter_AddRefs(image));
// Get the natural image size.
if (image) {
// We have to load image even though we already have a size.
// Don't change this, otherwise things start to go crazy.
nsCOMPtr<imgIContainer> image;
GetImage(aRowIndex, aColID, aStyleContext, getter_AddRefs(image));
if (image) {
if (needWidth || needHeight) {
// Get the natural image size.
float p2t;
mPresContext->GetPixelsToTwips(&p2t);
@ -2375,6 +2431,134 @@ NS_IMETHODIMP nsOutlinerBodyFrame::PaintText(int aRowIndex,
textMarginData->GetMargin(textMargin);
textRect.Deflate(textMargin);
// Compute our text size.
const nsStyleFont* fontStyle = (const nsStyleFont*)textContext->GetStyleData(eStyleStruct_Font);
nsCOMPtr<nsIDeviceContext> deviceContext;
aPresContext->GetDeviceContext(getter_AddRefs(deviceContext));
nsCOMPtr<nsIFontMetrics> fontMet;
deviceContext->GetMetricsFor(fontStyle->mFont, *getter_AddRefs(fontMet));
nscoord height, baseline;
fontMet->GetHeight(height);
fontMet->GetMaxAscent(baseline);
// Center the text. XXX Obey vertical-align style prop?
if (height < textRect.height) {
textRect.y += (textRect.height - height)/2;
textRect.height = height;
}
// Set our font.
aRenderingContext.SetFont(fontMet);
nscoord width;
aRenderingContext.GetWidth(text, width);
if (width > textRect.width) {
// See if the width is even smaller than the ellipsis
// If so, clear the text completely.
nscoord ellipsisWidth;
aRenderingContext.GetWidth(ELLIPSIS, ellipsisWidth);
nscoord width = textRect.width;
if (ellipsisWidth > width)
text.SetLength(0);
else if (ellipsisWidth == width)
text.Assign(NS_LITERAL_STRING(ELLIPSIS));
else {
// We will be drawing an ellipsis, thank you very much.
// Subtract out the required width of the ellipsis.
// This is the total remaining width we have to play with.
width -= ellipsisWidth;
// Now we crop.
switch (aColumn->GetCropStyle()) {
default:
case 0: {
// Crop right.
nscoord cwidth;
nscoord twidth = 0;
int length = text.Length();
int i;
for (i = 0; i < length; ++i) {
PRUnichar ch = text[i];
aRenderingContext.GetWidth(ch,cwidth);
if (twidth + cwidth > width)
break;
twidth += cwidth;
}
text.Truncate(i);
text += NS_LITERAL_STRING(ELLIPSIS);
}
break;
case 2: {
// Crop left.
nscoord cwidth;
nscoord twidth = 0;
int length = text.Length();
int i;
for (i=length-1; i >= 0; --i) {
PRUnichar ch = text[i];
aRenderingContext.GetWidth(ch,cwidth);
if (twidth + cwidth > width)
break;
twidth += cwidth;
}
nsAutoString copy;
text.Right(copy, length-1-i);
text.Assign(NS_LITERAL_STRING(ELLIPSIS));
text += copy;
}
break;
case 1:
{
// Crop center.
nsAutoString leftStr, rightStr;
nscoord cwidth, twidth = 0;
int length = text.Length();
int rightPos = length - 1;
for (int leftPos = 0; leftPos < rightPos; ++leftPos) {
PRUnichar ch = text[leftPos];
aRenderingContext.GetWidth(ch, cwidth);
twidth += cwidth;
if (twidth > width)
break;
leftStr.Append(ch);
ch = text[rightPos];
aRenderingContext.GetWidth(ch, cwidth);
twidth += cwidth;
if (twidth > width)
break;
rightStr.Insert(ch, 0);
--rightPos;
}
text = leftStr + NS_LITERAL_STRING(ELLIPSIS) + rightStr;
}
break;
}
}
}
else {
switch (aColumn->GetTextAlignment()) {
case NS_STYLE_TEXT_ALIGN_RIGHT: {
textRect.x += textRect.width - width;
}
break;
case NS_STYLE_TEXT_ALIGN_CENTER: {
textRect.x += (textRect.width - width) / 2;
}
break;
}
}
aRenderingContext.GetWidth(text, width);
textRect.width = width;
// If the layer is the background layer, we must paint our borders and background for our
// text rect.
if (NS_FRAME_PAINT_LAYER_BACKGROUND == aWhichLayer)
@ -2384,125 +2568,28 @@ NS_IMETHODIMP nsOutlinerBodyFrame::PaintText(int aRowIndex,
// Adjust the rect for its border and padding.
AdjustForBorderPadding(textContext, textRect);
// Compute our text size.
const nsStyleFont* fontStyle = (const nsStyleFont*)textContext->GetStyleData(eStyleStruct_Font);
nsCOMPtr<nsIDeviceContext> deviceContext;
aPresContext->GetDeviceContext(getter_AddRefs(deviceContext));
nsCOMPtr<nsIFontMetrics> fontMet;
deviceContext->GetMetricsFor(fontStyle->mFont, *getter_AddRefs(fontMet));
nscoord height, baseline;
fontMet->GetHeight(height);
fontMet->GetMaxAscent(baseline);
// Center the text. XXX Obey vertical-align style prop?
if (height < textRect.height) {
textRect.y += (textRect.height - height)/2;
textRect.height = height;
}
// Set our font.
aRenderingContext.SetFont(fontMet);
nscoord width;
aRenderingContext.GetWidth(text, width);
if (width > textRect.width) {
// See if the width is even smaller than the ellipsis
// If so, clear the text completely.
nscoord ellipsisWidth;
aRenderingContext.GetWidth(ELLIPSIS, ellipsisWidth);
nscoord width = textRect.width;
if (ellipsisWidth > width)
text.SetLength(0);
else if (ellipsisWidth == width)
text.Assign(NS_LITERAL_STRING(ELLIPSIS));
else {
// We will be drawing an ellipsis, thank you very much.
// Subtract out the required width of the ellipsis.
// This is the total remaining width we have to play with.
width -= ellipsisWidth;
// Now we crop.
switch (aColumn->GetCropStyle()) {
default:
case 0: {
// Crop right.
nscoord cwidth;
nscoord twidth = 0;
int length = text.Length();
int i;
for (i = 0; i < length; ++i) {
PRUnichar ch = text[i];
aRenderingContext.GetWidth(ch,cwidth);
if (twidth + cwidth > width)
break;
twidth += cwidth;
}
text.Truncate(i);
text += NS_LITERAL_STRING(ELLIPSIS);
}
break;
case 2: {
// Crop left.
nscoord cwidth;
nscoord twidth = 0;
int length = text.Length();
int i;
for (i=length-1; i >= 0; --i) {
PRUnichar ch = text[i];
aRenderingContext.GetWidth(ch,cwidth);
if (twidth + cwidth > width)
break;
twidth += cwidth;
}
nsAutoString copy;
text.Right(copy, length-1-i);
text.Assign(NS_LITERAL_STRING(ELLIPSIS));
text += copy;
}
break;
case 1:
{
// Crop center.
nsAutoString leftStr, rightStr;
nscoord cwidth, twidth = 0;
int length = text.Length();
int rightPos = length - 1;
for (int leftPos = 0; leftPos < rightPos; ++leftPos) {
PRUnichar ch = text[leftPos];
aRenderingContext.GetWidth(ch, cwidth);
twidth += cwidth;
if (twidth > width)
break;
leftStr.Append(ch);
ch = text[rightPos];
aRenderingContext.GetWidth(ch, cwidth);
twidth += cwidth;
if (twidth > width)
break;
rightStr.Insert(ch, 0);
--rightPos;
}
text = leftStr + NS_LITERAL_STRING(ELLIPSIS) + rightStr;
}
break;
}
}
}
// Set our color.
const nsStyleColor* colorStyle = (const nsStyleColor*)textContext->GetStyleData(eStyleStruct_Color);
aRenderingContext.SetColor(colorStyle->mColor);
// Draw decorations.
const nsStyleTextReset* textStyle = (const nsStyleTextReset*)textContext->GetStyleData(eStyleStruct_TextReset);
PRUint8 decorations = textStyle->mTextDecoration;
nscoord offset;
nscoord size;
if (decorations & (NS_FONT_DECORATION_OVERLINE | NS_FONT_DECORATION_UNDERLINE)) {
fontMet->GetUnderline(offset, size);
if (decorations & NS_FONT_DECORATION_OVERLINE)
aRenderingContext.FillRect(textRect.x, textRect.y, width, size);
if (decorations & NS_FONT_DECORATION_UNDERLINE)
aRenderingContext.FillRect(textRect.x, textRect.y + baseline - offset, width, size);
}
if (decorations & NS_FONT_DECORATION_LINE_THROUGH) {
fontMet->GetStrikeout(offset, size);
aRenderingContext.FillRect(textRect.x, textRect.y + baseline - offset, width, size);
}
aRenderingContext.DrawString(text, textRect.x, textRect.y + baseline);
}
@ -2561,18 +2648,6 @@ NS_IMETHODIMP nsOutlinerBodyFrame::ScrollToRow(PRInt32 aRow)
ScrollInternal(aRow);
UpdateScrollbar();
#ifdef XP_MAC
// mac can't process the event loop during a drag, so if we're dragging,
// grab the scroll widget and make it paint synchronously. This is
// sorta slow (having to paint the entire tree), but it works.
if ( mDragSession ) {
nsCOMPtr<nsIWidget> scrollWidget;
mScrollbar->GetWindow(mPresContext, getter_AddRefs(scrollWidget));
if ( scrollWidget )
scrollWidget->Invalidate(PR_TRUE);
}
#endif
return NS_OK;
}
@ -2650,9 +2725,16 @@ nsOutlinerBodyFrame::ScrollInternal(PRInt32 aRow)
PRInt32 absDelta = delta > 0 ? delta : -delta;
if (hasBackground || absDelta*mRowHeight >= mRect.height)
Invalidate();
else if (mOutlinerWidget)
else if (mOutlinerWidget) {
mOutlinerWidget->Scroll(0, -delta*rowHeightAsPixels, nsnull);
#ifdef XP_MAC || defined(XP_MACOSX)
// mac can't process the event loop during a drag, so if we're dragging,
// update outliner widget synchronously.
if (mDragSession)
mOutlinerWidget->Update();
#endif
}
return NS_OK;
}
@ -2834,39 +2916,27 @@ NS_IMETHODIMP nsOutlinerBodyFrame::ClearStyleAndImageCaches()
#pragma mark -
#endif
//
// OnDragDrop
//
// Tell the view where the drop happened
//
NS_IMETHODIMP
nsOutlinerBodyFrame :: OnDragDrop ( nsIDOMEvent* inEvent )
nsOutlinerBodyFrame::OnDragDrop (nsIDOMEvent* aEvent)
{
mView->Drop ( mDropRow, mDropOrient );
mView->Drop (mDropRow, mDropOrient);
return NS_OK;
} // OnDragDrop
//
// OnDragExit
//
// Clear out all our tracking vars. If we were drawing feedback, undraw it
//
// Clear out all our tracking vars.
NS_IMETHODIMP
nsOutlinerBodyFrame :: OnDragExit ( nsIDOMEvent* inEvent )
nsOutlinerBodyFrame::OnDragExit(nsIDOMEvent* aEvent)
{
if ( mDropAllowed && !mAlreadyUndrewDueToScroll )
DrawDropFeedback ( mDropRow, mDropOrient, kUndrawFeedback ) ;
mDropRow = kIllegalRow;
mDropOrient = kNoOrientation;
mDropAllowed = PR_FALSE;
mAlreadyUndrewDueToScroll = PR_FALSE;
if (mDropAllowed) {
mDropAllowed = PR_FALSE;
InvalidatePrimaryCell(mDropRow);
}
else
mDropAllowed = PR_FALSE;
mDropRow = -1;
mDropOrient = -1;
mDragSession = nsnull;
mRenderingContext = nsnull;
if (mOpenTimer) {
mOpenTimer->Cancel();
@ -2875,55 +2945,43 @@ nsOutlinerBodyFrame :: OnDragExit ( nsIDOMEvent* inEvent )
}
return NS_OK;
} // OnDragExit
//
// OnDragOver
//
// The mouse is hovering over this outliner. If we determine things are different from the
// last time, undraw feedback at the old position, query the view to see if the current location is
// droppable, and then draw feedback at the new location if it is. The mouse may or may
// last time, invalidate primary cell at the old position, query the view to see if the current location is
// droppable, and then invalidate primary cell at the new location if it is. The mouse may or may
// not have changed position from the last time we were called, so optimize out a lot of
// the extra notifications by checking if anything changed first.
//
// For drop feedback we use drop, dropBefore and dropAfter property.
NS_IMETHODIMP
nsOutlinerBodyFrame :: OnDragOver ( nsIDOMEvent* inEvent )
nsOutlinerBodyFrame::OnDragOver(nsIDOMEvent* aEvent)
{
// while we're here, handle tracking of scrolling during a drag. There is a little craziness
// here as we turn off tracking of feedback during the scroll. When we first start scrolling,
// we explicitly undraw the previous feedback, then set |mAlreadyUndrewDueToScroll| to
// alert other places not to undraw again later (we're using XOR, so undrawing twice
// is bad). Below, we'll clear this member the next time we try to undraw the regular feedback.
// while we're here, handle tracking of scrolling during a drag.
PRBool scrollUp = PR_FALSE;
if ( IsInDragScrollRegion(inEvent, &scrollUp) ) {
if ( mDropAllowed && !mAlreadyUndrewDueToScroll )
DrawDropFeedback ( mDropRow, mDropOrient, kUndrawFeedback ); // undraw it at old loc, if we were drawing
mAlreadyUndrewDueToScroll = PR_TRUE;
ScrollByLines ( scrollUp ? -1 : 1);
if (IsInDragScrollRegion(aEvent, &scrollUp)) {
if (mDropAllowed) {
// invalidate primary cell at old location.
mDropAllowed = PR_FALSE;
InvalidatePrimaryCell(mDropRow);
}
ScrollByLines(scrollUp ? -1 : 1);
return NS_OK;
}
// compute the row mouse is over and the above/below/on state. Below we'll use this
// to see if anything changed.
PRInt32 newRow = kIllegalRow;
DropOrientation newOrient = kNoOrientation;
ComputeDropPosition ( inEvent, &newRow, &newOrient );
PRInt32 newRow = -1;
PRInt16 newOrient = -1;
ComputeDropPosition(aEvent, &newRow, &newOrient);
// if changed from last time, undraw it at the old location and if allowed,
// draw it at the new location. If nothing changed, just bail.
if ( newRow != mDropRow || newOrient != mDropOrient ) {
// undraw feedback at old loc. If we are coming off a scroll,
// don't undraw the old (we already did that), but reset us so that
// we're back in the normal case.
if ( !mAlreadyUndrewDueToScroll ) {
if ( mDropAllowed )
DrawDropFeedback ( mDropRow, mDropOrient, kUndrawFeedback );
// if changed from last time, invalidate primary cell at the old location and if allowed,
// invalidate primary cell at the new location. If nothing changed, just bail.
if (newRow != mDropRow || newOrient != mDropOrient) {
// Invalidate row at the old location.
if (mDropAllowed) {
mDropAllowed = PR_FALSE;
InvalidatePrimaryCell(mDropRow);
}
else
mAlreadyUndrewDueToScroll = PR_FALSE;
if (mOpenTimer && newRow != mOpenTimerRow) {
// timer is active but for a different row than the current one - kill it
@ -2936,10 +2994,8 @@ nsOutlinerBodyFrame :: OnDragOver ( nsIDOMEvent* inEvent )
// for next time.
mDropRow = newRow;
mDropOrient = newOrient;
mDropAllowed = PR_FALSE;
if (mDropRow >= 0) {
if (!mOpenTimer) {
// either there wasn't a timer running or it was just killed above.
@ -2959,14 +3015,15 @@ nsOutlinerBodyFrame :: OnDragOver ( nsIDOMEvent* inEvent )
}
PRBool canDropAtNewLocation = PR_FALSE;
if ( mDropOrient == kOnRow )
mView->CanDropOn ( mDropRow, &canDropAtNewLocation );
if (mDropOrient == nsIOutlinerView::inDropOn)
mView->CanDropOn(mDropRow, &canDropAtNewLocation);
else
mView->CanDropBeforeAfter ( mDropRow, mDropOrient == kBeforeRow ? PR_TRUE : PR_FALSE, &canDropAtNewLocation );
mView->CanDropBeforeAfter (mDropRow, mDropOrient == nsIOutlinerView::inDropBefore ? PR_TRUE : PR_FALSE, &canDropAtNewLocation);
if ( canDropAtNewLocation ) {
DrawDropFeedback ( mDropRow, mDropOrient, kDrawFeedback ); // draw it at old loc, if we are allowed
if (canDropAtNewLocation) {
// Invalidate row at the new location/
mDropAllowed = canDropAtNewLocation;
InvalidatePrimaryCell(mDropRow);
}
}
}
@ -2977,86 +3034,8 @@ nsOutlinerBodyFrame :: OnDragOver ( nsIDOMEvent* inEvent )
mDragSession->SetCanDrop(PR_TRUE);
return NS_OK;
} // OnDragOver
//
// DrawDropFeedback
//
// Takes care of actually drawing the correct feedback. |inDrawFeedback| tells us whether
// we're drawing or undrawing (removing/clearing) the feedback for the given row.
//
// XXX Need to be able to make line color respect style
//
void
nsOutlinerBodyFrame :: DrawDropFeedback ( PRInt32 inDropRow, DropOrientation inDropOrient, PRBool inDrawFeedback )
{
// call appropriate routine (insert, container, etc) based on |inDropOrient| and pass in |inDrawFeedback|
float pixelsToTwips = 0.0;
mPresContext->GetPixelsToTwips ( &pixelsToTwips );
#if NOT_YET_WORKING
// feedback will differ depending on if we're sorted or not -- leaving this around
// for later.
if ( viewSorted ) {
PRInt32 penSize = NSToIntRound(1*pixelsToTwips); // use a 1 pixel wide pen
// draw outline rectangle made of 4 rects (gfx can't just frame a rectangle). The
// rects can't overlap because we're XORing.
mRenderingContext->InvertRect ( 0, 0, mRect.width, penSize ); // top
mRenderingContext->InvertRect ( 0, penSize, penSize, mRect.height ); // left
mRenderingContext->InvertRect ( mRect.width - penSize, penSize, penSize, mRect.height ); // right
mRenderingContext->InvertRect ( penSize, mRect.height - penSize,
mRect.width - 2*penSize, penSize ); // bottom
}
#endif
nsOutlinerColumn* primaryCol = nsnull;
for (nsOutlinerColumn* currCol = mColumns; currCol; currCol = currCol->GetNext()) {
if ( currCol->IsPrimary() ) {
primaryCol = currCol;
break;
}
}
if ( !primaryCol )
return;
if ( inDropOrient == kOnRow ) {
// drawing "on" a row. Invert the image and text in the primary column.
PRInt32 x, y, width, height;
GetCoordsForCellItem ( inDropRow, primaryCol->GetID().get(), NS_LITERAL_STRING("image").get(),
&x, &y, &width, &height );
mRenderingContext->InvertRect ( NSToIntRound(x*pixelsToTwips), NSToIntRound(y*pixelsToTwips),
NSToIntRound(width*pixelsToTwips), NSToIntRound(height*pixelsToTwips) );
GetCoordsForCellItem ( inDropRow, primaryCol->GetID().get(), NS_LITERAL_STRING("text").get(),
&x, &y, &width, &height );
mRenderingContext->InvertRect ( NSToIntRound(x*pixelsToTwips), NSToIntRound(y*pixelsToTwips),
NSToIntRound(width*pixelsToTwips), NSToIntRound(height*pixelsToTwips) );
}
else {
// drawing between rows, find the X/Y to draw a 2 pixel line indented 5 pixels
// from the left of the image in the primary column.
PRInt32 whereToDrawY = mRowHeight * (inDropRow - mTopRowIndex);
if ( inDropOrient == kAfterRow )
whereToDrawY += mRowHeight;
PRInt32 whereToDrawX = 0;
PRInt32 y, width, height;
GetCoordsForCellItem ( inDropRow, primaryCol->GetID().get(), NS_LITERAL_STRING("image").get(),
&whereToDrawX, &y, &width, &height );
whereToDrawX += 5; // indent 5 pixels from left of image
mRenderingContext->InvertRect ( NSToIntRound(whereToDrawX*pixelsToTwips),
whereToDrawY, NSToIntRound(25*pixelsToTwips), NSToIntRound(2*pixelsToTwips) );
}
} // DrawDropFeedback
//
// ComputeDropPosition
//
// Given a dom event, figure out which row in the tree the mouse is over
// and if we should drop before/after/on that row. Doesn't query the content
// about if the drag is allowable, that's done elsewhere.
@ -3067,121 +3046,99 @@ nsOutlinerBodyFrame :: DrawDropFeedback ( PRInt32 inDropRow, DropOrientation inD
//
// For non-containers, if the mouse is in the top 50% of the row, the drop is
// _before_ and the bottom 50% _after_
//
void
nsOutlinerBodyFrame :: ComputeDropPosition ( nsIDOMEvent* inEvent, PRInt32* outRow, DropOrientation* outOrient )
nsOutlinerBodyFrame::ComputeDropPosition(nsIDOMEvent* aEvent, PRInt32* aRow, PRInt16* aOrient)
{
nsCOMPtr<nsIDOMMouseEvent> mouseEvent ( do_QueryInterface(inEvent) );
if ( mouseEvent ) {
nsCOMPtr<nsIDOMMouseEvent> mouseEvent (do_QueryInterface(aEvent));
if (mouseEvent) {
PRInt32 x = 0, y = 0;
mouseEvent->GetClientX(&x); mouseEvent->GetClientY(&y);
nsXPIDLString colID, child;
GetCellAt ( x, y, outRow, getter_Copies(colID), getter_Copies(child) );
if (*outRow == -1) {
*outOrient = kNoOrientation;
GetCellAt (x, y, aRow, getter_Copies(colID), getter_Copies(child));
if (*aRow == -1) {
*aOrient = -1;
return;
}
// Compute the top/bottom of the row in question. We need to convert
// our y coord to twips since |mRowHeight| is in twips.
PRInt32 yTwips, xTwips;
AdjustEventCoordsToBoxCoordSpace ( x, y, &xTwips, &yTwips );
PRInt32 rowTop = mRowHeight * (*outRow - mTopRowIndex);
PRInt32 yOffset = yTwips - rowTop;
AdjustEventCoordsToBoxCoordSpace (x, y, &xTwips, &yTwips);
PRInt32 yOffset = yTwips - mRowHeight * (*aRow - mTopRowIndex);
PRBool isContainer = PR_FALSE;
mView->IsContainer ( *outRow, &isContainer );
if ( isContainer ) {
mView->IsContainer (*aRow, &isContainer);
if (isContainer) {
// for a container, use a 25%/50%/25% breakdown
if ( yOffset < mRowHeight / 4 )
*outOrient = kBeforeRow;
else if ( yOffset > mRowHeight - (mRowHeight / 4) )
*outOrient = kAfterRow;
if (yOffset < mRowHeight / 4)
*aOrient = nsIOutlinerView::inDropBefore;
else if (yOffset > mRowHeight - (mRowHeight / 4))
*aOrient = nsIOutlinerView::inDropAfter;
else
*outOrient = kOnRow;
*aOrient = nsIOutlinerView::inDropOn;
}
else {
// for a non-container use a 50%/50% breakdown
if ( yOffset < mRowHeight / 2 )
*outOrient = kBeforeRow;
if (yOffset < mRowHeight / 2)
*aOrient = nsIOutlinerView::inDropBefore;
else
*outOrient = kAfterRow;
*aOrient = nsIOutlinerView::inDropAfter;
}
}
} // ComputeDropPosition
//
// IsInDragScrollRegion
//
// Determine if we're w/in a margin of the top/bottom of the outliner during a drag.
// This will ultimately cause us to scroll, but that's done elsewhere.
//
PRBool
nsOutlinerBodyFrame :: IsInDragScrollRegion ( nsIDOMEvent* inEvent, PRBool* outScrollUp )
nsOutlinerBodyFrame::IsInDragScrollRegion(nsIDOMEvent* aEvent, PRBool* aScrollUp)
{
PRBool isInRegion = PR_FALSE;
float pixelsToTwips = 0.0;
mPresContext->GetPixelsToTwips ( &pixelsToTwips );
const int kMarginHeight = NSToIntRound ( 12 * pixelsToTwips );
mPresContext->GetPixelsToTwips (&pixelsToTwips);
const int kMarginHeight = NSToIntRound(12 * pixelsToTwips);
nsCOMPtr<nsIDOMMouseEvent> mouseEvent ( do_QueryInterface(inEvent) );
if ( mouseEvent ) {
nsCOMPtr<nsIDOMMouseEvent> mouseEvent (do_QueryInterface(aEvent));
if (mouseEvent) {
PRInt32 x = 0, y = 0;
mouseEvent->GetClientX(&x); mouseEvent->GetClientY(&y);
PRInt32 yTwips, xTwips;
AdjustEventCoordsToBoxCoordSpace ( x, y, &xTwips, &yTwips );
AdjustEventCoordsToBoxCoordSpace (x, y, &xTwips, &yTwips);
if ( yTwips < kMarginHeight ) {
if (yTwips < kMarginHeight) {
isInRegion = PR_TRUE;
if ( outScrollUp )
*outScrollUp = PR_TRUE; // scroll up
if (aScrollUp)
*aScrollUp = PR_TRUE; // scroll up
}
else if ( yTwips > mRect.height - kMarginHeight ) {
else if (yTwips > mRect.height - kMarginHeight) {
isInRegion = PR_TRUE;
if ( outScrollUp )
*outScrollUp = PR_FALSE; // scroll down
if (aScrollUp )
*aScrollUp = PR_FALSE; // scroll down
}
}
return isInRegion;
} // IsInDragScrollRegion
//
// OnDragEnter
//
// Cache several things we'll need throughout the course of our work. These
// will all get released on a drag exit
//
NS_IMETHODIMP
nsOutlinerBodyFrame :: OnDragEnter ( nsIDOMEvent* inEvent )
nsOutlinerBodyFrame::OnDragEnter(nsIDOMEvent* aEvent)
{
// create a rendering context for our drawing needs
nsCOMPtr<nsIPresShell> presShell;
mPresContext->GetShell(getter_AddRefs(presShell));
nsCOMPtr<nsIRenderingContext> rendContext;
presShell->CreateRenderingContext ( this, getter_AddRefs(mRenderingContext) );
// cache the drag session
nsresult rv;
nsCOMPtr<nsIDragService> dragService =
do_GetService("@mozilla.org/widget/dragservice;1", &rv);
nsCOMPtr<nsIDragSession> dragSession;
dragService->GetCurrentSession(getter_AddRefs(mDragSession));
NS_ASSERTION ( mDragSession, "can't get drag session" );
NS_ASSERTION(mDragSession, "can't get drag session");
return NS_OK;
} // OnDragEnter
#ifdef XP_MAC
#pragma mark -
#endif

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

@ -184,6 +184,7 @@ public:
PRBool IsCycler() { return mIsCyclerCol; };
PRInt32 GetCropStyle() { return mCropStyle; };
PRInt32 GetTextAlignment() { return mTextAlignment; };
PRInt32 GetColIndex() { return mColIndex; };
};
@ -387,8 +388,8 @@ protected:
// Our internal scroll method, used by all the public scroll methods.
nsresult ScrollInternal(PRInt32 aRow);
// convert pixels, probably from an event, into twips in our coordinate space
void AdjustEventCoordsToBoxCoordSpace ( PRInt32 inX, PRInt32 inY, PRInt32* outX, PRInt32* outY ) ;
// Convert pixels, probably from an event, into twips in our coordinate space.
void AdjustEventCoordsToBoxCoordSpace (PRInt32 aX, PRInt32 aY, PRInt32* aResultX, PRInt32* aResultY);
// Convert a border style into line style.
nsLineStyle ConvertBorderStyleToLineStyle(PRUint8 aBorderStyle);
@ -403,6 +404,12 @@ protected:
nscoord& aCurrentSize);
nscoord CalcMaxRowWidth(nsBoxLayoutState& aState);
// Calc the row and above/below/on status given where the mouse currently is hovering.
void ComputeDropPosition(nsIDOMEvent* aEvent, PRInt32* aRow, PRInt16* aOrient);
// Calculate if we're in the region in which we want to auto-scroll the outliner.
PRBool IsInDragScrollRegion (nsIDOMEvent* aEvent, PRBool* aScrollUp);
protected: // Data Members
// Our cached pres context.
nsIPresContext* mPresContext;
@ -448,41 +455,29 @@ protected: // Data Members
// A scratch array used when looking up cached style contexts.
nsCOMPtr<nsISupportsArray> mScratchArray;
enum { kIllegalRow = -1 } ;
enum { kDrawFeedback = PR_TRUE, kUndrawFeedback = PR_FALSE } ;
enum DropOrientation { kNoOrientation, kBeforeRow = 1, kOnRow = 2, kAfterRow = 3 } ;
// draw (or undraw) feedback at the given location with the given orientation
void DrawDropFeedback ( PRInt32 inDropRow, DropOrientation inDropOrient, PRBool inDrawFeedback ) ;
// calc the row and above/below/on status given where the mouse currently is hovering
void ComputeDropPosition ( nsIDOMEvent* inEvent, PRInt32* outRow, DropOrientation* outOrient ) ;
// calculate if we're in the region in which we want to auto-scroll the outliner
PRBool IsInDragScrollRegion ( nsIDOMEvent* inEvent, PRBool* outScrollUp ) ;
PRInt32 mDropRow; // the row the mouse is hovering over during a drop
DropOrientation mDropOrient; // where we want to draw feedback (above/below/on this row) if allowed
// Whether or not we're currently focused.
PRPackedBool mFocused;
// An indicator that columns have changed and need to be rebuilt
PRPackedBool mColumnsDirty;
PRPackedBool mDropAllowed; // if the drop is actually allowed here or not. we draw if this is true
PRPackedBool mAlreadyUndrewDueToScroll; // we undraw early during auto-scroll; did we do this already?
// If the drop is actually allowed here or not.
PRPackedBool mDropAllowed;
// Do we have a fixed number of onscreen rows?
PRPackedBool mHasFixedRowCount;
PRPackedBool mVerticalOverflow;
// timer for opening spring-loaded folders
// The row the mouse is hovering over during a drop.
PRInt32 mDropRow;
// Where we want to draw feedback (above/on this row/below) if allowed.
PRInt16 mDropOrient;
nsCOMPtr<nsIDragSession> mDragSession;
// Timer for opening spring-loaded folders.
nsCOMPtr<nsITimer> mOpenTimer;
PRInt32 mOpenTimerRow;
nsCOMPtr<nsIDragSession> mDragSession;
nsCOMPtr<nsIRenderingContext> mRenderingContext;
}; // class nsOutlinerBodyFrame

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

@ -110,16 +110,18 @@ NS_IMETHODIMP nsOutlinerBoxObject::Init(nsIContent* aContent, nsIPresShell* aPre
static void FindBodyElement(nsIContent* aParent, nsIContent** aResult)
{
*aResult = nsnull;
ChildIterator iter, last;
for (ChildIterator::Init(aParent, &iter, &last); iter != last; ++iter) {
nsCOMPtr<nsIContent> content = *iter;
nsCOMPtr<nsIAtom> tag;
content->GetTag(*getter_AddRefs(tag));
if (tag.get() == nsXULAtoms::outlinerbody) {
if (tag.get() == nsXULAtoms::outlinerchildren) {
*aResult = content;
NS_ADDREF(*aResult);
break;
} else {
}
else if (tag != nsXULAtoms::templateAtom) {
FindBodyElement(content, aResult);
if (*aResult)
break;
@ -332,6 +334,14 @@ NS_IMETHODIMP nsOutlinerBoxObject::InvalidateCell(PRInt32 aRow, const PRUnichar
return NS_OK;
}
NS_IMETHODIMP nsOutlinerBoxObject::InvalidatePrimaryCell(PRInt32 aIndex)
{
nsIOutlinerBoxObject* body = GetOutlinerBody();
if (body)
return body->InvalidatePrimaryCell(aIndex);
return NS_OK;
}
NS_IMETHODIMP nsOutlinerBoxObject::InvalidateRange(PRInt32 aStart, PRInt32 aEnd)
{
nsIOutlinerBoxObject* body = GetOutlinerBody();

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

@ -43,6 +43,7 @@
#include "nsXULAtoms.h"
#include "nsLayoutAtoms.h"
#include "nsIDOMDocument.h"
#include "nsIBoxObject.h"
#include "nsOutlinerUtils.h"
#include "nsOutlinerContentView.h"
#include "nsChildIterator.h"
@ -154,7 +155,7 @@ class Row
nsOutlinerContentView::nsOutlinerContentView(void) :
mBoxObject(nsnull), mSelection(nsnull), mRoot(nsnull), mDocument(nsnull),
mHasCheckedSelect(PR_FALSE), mUpdateSelection(PR_FALSE), mIgnoreOptionSelected(PR_FALSE)
mUpdateSelection(PR_FALSE)
{
NS_INIT_ISUPPORTS();
@ -167,7 +168,7 @@ nsOutlinerContentView::nsOutlinerContentView(void) :
mAllocator.Init("nsOutlinerContentView", kBucketSizes, kNumBuckets, kInitialSize);
}
nsOutlinerContentView::~nsOutlinerContentView (void)
nsOutlinerContentView::~nsOutlinerContentView(void)
{
// Remove ourselfs from document's observers.
if (mDocument)
@ -470,7 +471,32 @@ NS_IMETHODIMP
nsOutlinerContentView::SetOutliner(nsIOutlinerBoxObject* aOutliner)
{
mBoxObject = aOutliner;
if (!mRoot) {
// Get our root element
nsCOMPtr<nsIBoxObject> boxObject = do_QueryInterface(mBoxObject);
nsCOMPtr<nsIDOMElement> element;
boxObject->GetElement(getter_AddRefs(element));
mRoot = do_QueryInterface(element);
// Add ourselfs to document's observers.
nsCOMPtr<nsIDocument> document;
mRoot->GetDocument(*getter_AddRefs(document));
if (document) {
document->AddObserver(this);
mDocument = document;
}
nsCOMPtr<nsIDOMElement> bodyElement;
mBoxObject->GetOutlinerBody(getter_AddRefs(bodyElement));
if (bodyElement) {
nsCOMPtr<nsIContent> bodyContent = do_QueryInterface(bodyElement);
PRInt32 index = 0;
Serialize(bodyContent, -1, &index, mRows);
}
}
return NS_OK;
}
@ -554,42 +580,6 @@ nsOutlinerContentView::GetRoot(nsIDOMElement** aRoot)
return NS_OK;
}
NS_IMETHODIMP
nsOutlinerContentView::SetRoot(nsIDOMElement* aRoot)
{
if (mRoot) {
// Remove ourselfs from document's observers.
if (mDocument) {
mDocument->RemoveObserver(this);
mDocument = nsnull;
}
ClearRows();
}
if (aRoot)
mRoot = do_QueryInterface(aRoot);
if (mRoot) {
// Add ourselfs to document's observers.
nsCOMPtr<nsIDocument> document;
mRoot->GetDocument(*getter_AddRefs(document));
if (document) {
document->AddObserver(this);
mDocument = document;
}
nsCOMPtr<nsIContent> child;
nsOutlinerUtils::GetImmediateChild(mRoot, nsXULAtoms::outlinerchildren, getter_AddRefs(child));
if (child) {
PRInt32 index = 0;
Serialize(child, -1, &index, mRows);
}
}
return NS_OK;
}
NS_IMETHODIMP
nsOutlinerContentView::GetItemAtIndex(PRInt32 aIndex, nsIDOMElement** _retval)
{
@ -720,8 +710,11 @@ nsOutlinerContentView::AttributeChanged(nsIDocument *aDocument,
aContent->GetTag(*getter_AddRefs(tag));
if (tag == nsXULAtoms::outlinercol) {
if (aAttribute == nsXULAtoms::properties)
mBoxObject->Invalidate();
if (aAttribute == nsXULAtoms::properties) {
nsAutoString id;
aContent->GetAttr(kNameSpaceID_None, nsHTMLAtoms::id, id);
mBoxObject->InvalidateColumn(id.get());
}
}
else if (tag == nsXULAtoms::outlineritem) {
if (aAttribute == nsXULAtoms::open) {
@ -785,14 +778,13 @@ nsOutlinerContentView::AttributeChanged(nsIDocument *aDocument,
}
}
else if (tag == nsHTMLAtoms::option) {
if (aAttribute == nsLayoutAtoms::optionSelectedPseudo && !mIgnoreOptionSelected) {
if (aAttribute == nsLayoutAtoms::optionSelectedPseudo) {
PRInt32 index = FindContent(aContent);
if (index == -1)
return NS_OK;
NS_ASSERTION(mSelection, "Need to handle optionSelected change with no OutlinerSelection");
if (mSelection)
if (index >= 0) {
NS_ASSERTION(mSelection, "Need to handle optionSelected change with no OutlinerSelection");
if (mSelection)
mSelection->ToggleSelect(index);
}
}
}
@ -823,11 +815,13 @@ nsOutlinerContentView::ContentInserted(nsIDocument *aDocument,
if (childTag == nsXULAtoms::outlineritem ||
childTag == nsXULAtoms::outlinerseparator) {
PRInt32 parentIndex = -1;
if (aContainer != mRoot) {
nsCOMPtr<nsIContent> parent;
aContainer->GetParent(*getter_AddRefs(parent));
nsCOMPtr<nsIContent> parent;
aContainer->GetParent(*getter_AddRefs(parent));
nsCOMPtr<nsIAtom> parentTag;
parent->GetTag(*getter_AddRefs(parentTag));
if (parentTag != nsXULAtoms::outliner)
parentIndex = FindContent(parent);
}
PRInt32 index = 0;
GetIndexInSubtree(aContainer, aChild, &index);
@ -1329,21 +1323,3 @@ nsOutlinerContentView::ParseProperties(nsIContent* aContent, Property** aPropert
return NS_OK;
}
void
nsOutlinerContentView::GetSelectElement()
{
nsCOMPtr<nsIContent> parent = mRoot;
nsCOMPtr<nsIAtom> tag;
nsCOMPtr<nsIContent> temp;
while (parent && NS_SUCCEEDED(parent->GetTag(*getter_AddRefs(tag)))
&& tag != nsXULAtoms::outliner && tag != nsHTMLAtoms::select) {
temp = parent;
temp->GetParent(*getter_AddRefs(parent));
}
if (parent && tag == nsHTMLAtoms::select)
mSelectElement = do_QueryInterface(parent);
}

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

@ -185,22 +185,17 @@ class nsOutlinerContentView : public nsIOutlinerView,
nsresult ParseProperties(nsIContent* aContent, Property** aProperty);
void GetSelectElement();
inline nsresult SetOptionsSelected(PRInt32 aStart, PRInt32 aEnd,
PRBool aSelect, PRBool aClear)
{
nsresult rv = NS_OK;
if (!mHasCheckedSelect)
GetSelectElement();
if (mSelectElement) {
mIgnoreOptionSelected = PR_TRUE;
rv = mSelectElement->SetOptionsSelectedByIndex(aStart, aEnd, aSelect,
aClear, PR_FALSE, nsnull);
if (mRoot) {
nsCOMPtr<nsISelectElement> selectElement = do_QueryInterface(mRoot);
if (selectElement)
rv = selectElement->SetOptionsSelectedByIndex(aStart, aEnd, aSelect,
aClear, PR_FALSE, nsnull);
}
return rv;
}
@ -208,14 +203,11 @@ class nsOutlinerContentView : public nsIOutlinerView,
nsCOMPtr<nsIOutlinerBoxObject> mBoxObject;
nsCOMPtr<nsIOutlinerSelection> mSelection;
nsCOMPtr<nsIContent> mRoot;
nsCOMPtr<nsISelectElement> mSelectElement;
nsIDocument* mDocument; // WEAK
nsFixedSizeAllocator mAllocator;
nsVoidArray mRows;
PRPackedBool mHasCheckedSelect;
PRPackedBool mUpdateSelection;
PRPackedBool mIgnoreOptionSelected;
};
#endif // nsOutlinerContentView_h__

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

@ -39,6 +39,7 @@
#include "nsCOMPtr.h"
#include "nsOutlinerSelection.h"
#include "nsIBoxObject.h"
#include "nsIOutlinerBoxObject.h"
#include "nsIOutlinerView.h"
#include "nsString.h"
@ -716,8 +717,9 @@ nsOutlinerSelection::FireOnSelectHandler()
if (mSuppressed)
return NS_OK;
nsCOMPtr<nsIBoxObject> boxObject = do_QueryInterface(mOutliner);
nsCOMPtr<nsIDOMElement> elt;
mOutliner->GetOutlinerBody(getter_AddRefs(elt));
boxObject->GetElement(getter_AddRefs(elt));
nsCOMPtr<nsIContent> content(do_QueryInterface(elt));
nsCOMPtr<nsIDocument> document;
@ -747,14 +749,13 @@ nsOutlinerSelection::FireOnSelectHandler()
PRBool nsOutlinerSelection::SingleSelection()
{
nsCOMPtr<nsIBoxObject> boxObject = do_QueryInterface(mOutliner);
nsCOMPtr<nsIDOMElement> element;
mOutliner->GetOutlinerBody(getter_AddRefs(element));
nsCOMPtr<nsIContent> content(do_QueryInterface(element));
nsCOMPtr<nsIContent> parent;
content->GetParent(*getter_AddRefs(parent));
boxObject->GetElement(getter_AddRefs(element));
nsCOMPtr<nsIContent> content = do_QueryInterface(element);
nsAutoString seltype;
parent->GetAttr(kNameSpaceID_None, nsXULAtoms::seltype, seltype);
if (seltype.EqualsIgnoreCase("single"))
content->GetAttr(kNameSpaceID_None, nsXULAtoms::seltype, seltype);
if (seltype.Equals(NS_LITERAL_STRING("single")))
return PR_TRUE;
return PR_FALSE;
}

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

@ -126,6 +126,7 @@ interface nsIOutlinerBoxObject : nsISupports
void invalidateColumn(in wstring colID);
void invalidateRow(in long index);
void invalidateCell(in long row, in wstring colID);
void invalidatePrimaryCell(in long row);
void invalidateRange(in long startIndex, in long endIndex);
void invalidateScrollbar();

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

@ -45,7 +45,7 @@ interface nsIOutlinerContentView : nsISupports
/**
* The element in the DOM which this view uses as root content.
*/
attribute nsIDOMElement root;
readonly attribute nsIDOMElement root;
/**
* Retrieve the content item associated with the specified index.

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

@ -95,24 +95,24 @@ interface nsIOutlinerView : nsISupports
* Specifies if there is currently a sort on any column. Used mostly by dragdrop
* to affect drop feedback.
*/
boolean isSorted ( ) ;
boolean isSorted();
/**
* Methods used by the drag feedback code to determine if a drag is allowable at
* the current location. To get the behavior where drops are only allowed on
* items, such as the mailNews folder pane, always return false from |canDropBeforeAfter()|.
*/
boolean canDropOn ( in long index );
boolean canDropBeforeAfter ( in long index, in boolean before );
boolean canDropOn (in long index);
boolean canDropBeforeAfter (in long index, in boolean before);
/**
* Called when the user drops something on this view. The |orientation| param
* specifies before/on/after the given |row|.
*/
const long inDropBefore = 1;
const long inDropOn = 2;
const long inDropAfter = 3;
void drop ( in long row, in long orientation ) ;
const short inDropBefore = 0;
const short inDropOn = 1;
const short inDropAfter = 2;
void drop (in long row, in long orientation);
/**
* Methods used by the outliner to draw vertical lines in the tree.

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

@ -189,6 +189,9 @@ nsOutlinerColumn::nsOutlinerColumn(nsIContent* aColElement, nsIFrame* aFrame)
nsCOMPtr<nsIStyleContext> styleContext;
aFrame->GetStyleContext(getter_AddRefs(styleContext));
const nsStyleVisibility* vis =
(const nsStyleVisibility*)styleContext->GetStyleData(eStyleStruct_Visibility);
// Fetch the crop style.
mCropStyle = 0;
nsAutoString crop;
@ -199,8 +202,6 @@ nsOutlinerColumn::nsOutlinerColumn(nsIContent* aColElement, nsIFrame* aFrame)
mCropStyle = 2;
if (mCropStyle == 0 || mCropStyle == 2) { // Left or Right
const nsStyleVisibility* vis =
(const nsStyleVisibility*)styleContext->GetStyleData(eStyleStruct_Visibility);
if (vis->mDirection == NS_STYLE_DIRECTION_RTL)
mCropStyle = 2 - mCropStyle; // Right becomes left, left becomes right.
}
@ -210,6 +211,10 @@ nsOutlinerColumn::nsOutlinerColumn(nsIContent* aColElement, nsIFrame* aFrame)
(const nsStyleText*)styleContext->GetStyleData(eStyleStruct_Text);
mTextAlignment = textStyle->mTextAlign;
if (mTextAlignment == 0 || mTextAlignment == 2) { // Left or Right
if (vis->mDirection == NS_STYLE_DIRECTION_RTL)
mTextAlignment = 2 - mTextAlignment; // Right becomes left, left becomes right.
}
// Figure out if we're the primary column (that has to have indentation
// and twisties drawn.
@ -297,9 +302,8 @@ NS_INTERFACE_MAP_END_INHERITING(nsLeafFrame)
nsOutlinerBodyFrame::nsOutlinerBodyFrame(nsIPresShell* aPresShell)
:nsLeafBoxFrame(aPresShell), mPresContext(nsnull), mOutlinerBoxObject(nsnull), mImageCache(nsnull),
mColumns(nsnull), mScrollbar(nsnull), mTopRowIndex(0), mRowHeight(0), mIndentation(0), mStringWidth(-1),
mDropRow(kIllegalRow), mDropOrient(kNoOrientation), mFocused(PR_FALSE), mColumnsDirty(PR_TRUE), mDropAllowed(PR_FALSE),
mAlreadyUndrewDueToScroll(PR_FALSE), mHasFixedRowCount(PR_FALSE), mVerticalOverflow(PR_FALSE),
mOpenTimer(nsnull), mOpenTimerRow(-1)
mFocused(PR_FALSE), mColumnsDirty(PR_TRUE), mDropAllowed(PR_FALSE), mHasFixedRowCount(PR_FALSE),
mVerticalOverflow(PR_FALSE), mDropRow(-1), mDropOrient(-1), mOpenTimer(nsnull), mOpenTimerRow(-1)
{
NS_NewISupportsArray(getter_AddRefs(mScratchArray));
}
@ -540,25 +544,25 @@ NS_IMETHODIMP nsOutlinerBodyFrame::Reflow(nsIPresContext* aPresContext,
// A content model view is always created and hooked up,
// unless there is a XULOutlinerBuilder view.
nsCOMPtr<nsIDOMXULElement> xulele = do_QueryInterface(mContent);
nsCOMPtr<nsIContent> parent;
mContent->GetParent(*getter_AddRefs(parent));
nsCOMPtr<nsIDOMXULElement> xulele = do_QueryInterface(parent);
if (xulele) {
nsCOMPtr<nsIOutlinerView> view;
// First, see if there is a XUL outliner builder
// associated with the element.
// associated with the parent element.
nsCOMPtr<nsIXULTemplateBuilder> builder;
xulele->GetBuilder(getter_AddRefs(builder));
if (builder)
view = do_QueryInterface(builder);
if (!view) {
// No outliner builder, create a outliner content view.
// No outliner builder, create an outliner content view.
nsCOMPtr<nsIOutlinerContentView> contentView;
NS_NewOutlinerContentView(getter_AddRefs(contentView));
if (contentView) {
contentView->SetRoot(xulele);
if (contentView)
view = do_QueryInterface(contentView);
}
}
// Hook up the view.
@ -639,7 +643,7 @@ NS_IMETHODIMP nsOutlinerBodyFrame::SetView(nsIOutlinerView * aView)
nsCOMPtr<nsIOutlinerSelection> sel;
mView->GetSelection(getter_AddRefs(sel));
if (!sel) {
NS_NewOutlinerSelection(this, getter_AddRefs(sel));
NS_NewOutlinerSelection(mOutlinerBoxObject, getter_AddRefs(sel));
mView->SetSelection(sel);
}
@ -742,7 +746,7 @@ NS_IMETHODIMP nsOutlinerBodyFrame::GetPageCount(PRInt32 *_retval)
NS_IMETHODIMP nsOutlinerBodyFrame::Invalidate()
{
if (!mRect.IsEmpty()) {
nsLeafBoxFrame::Invalidate(mPresContext, mRect, PR_FALSE);
nsLeafBoxFrame::Invalidate(mPresContext, mRect, mDragSession ? PR_TRUE : PR_FALSE);
}
return NS_OK;
}
@ -754,7 +758,7 @@ NS_IMETHODIMP nsOutlinerBodyFrame::InvalidateColumn(const PRUnichar *aColID)
currCol = currCol->GetNext()) {
if (currCol->GetID().Equals(aColID)) {
nsRect columnRect(currX, mInnerBox.y, currCol->GetWidth(), mInnerBox.height);
nsLeafBoxFrame::Invalidate(mPresContext, columnRect, PR_FALSE);
nsLeafBoxFrame::Invalidate(mPresContext, columnRect, mDragSession ? PR_TRUE : PR_FALSE);
break;
}
currX += currCol->GetWidth();
@ -769,9 +773,8 @@ NS_IMETHODIMP nsOutlinerBodyFrame::InvalidateRow(PRInt32 aIndex)
return NS_OK;
nsRect rowRect(mInnerBox.x, mInnerBox.y+mRowHeight*(aIndex-mTopRowIndex), mInnerBox.width, mRowHeight);
if (!rowRect.IsEmpty()) {
nsLeafBoxFrame::Invalidate(mPresContext, rowRect, PR_FALSE);
}
if (!rowRect.IsEmpty())
nsLeafBoxFrame::Invalidate(mPresContext, rowRect, mDragSession ? PR_TRUE : PR_FALSE);
return NS_OK;
}
@ -787,7 +790,27 @@ NS_IMETHODIMP nsOutlinerBodyFrame::InvalidateCell(PRInt32 aIndex, const PRUnicha
if (currCol->GetID().Equals(aColID)) {
nsRect cellRect(currX, yPos, currCol->GetWidth(), mRowHeight);
nsLeafBoxFrame::Invalidate(mPresContext, cellRect, PR_FALSE);
nsLeafBoxFrame::Invalidate(mPresContext, cellRect, mDragSession ? PR_TRUE : PR_FALSE);
break;
}
currX += currCol->GetWidth();
}
return NS_OK;
}
NS_IMETHODIMP nsOutlinerBodyFrame::InvalidatePrimaryCell(PRInt32 aIndex)
{
if (aIndex < mTopRowIndex || aIndex > mTopRowIndex + mPageCount + 1)
return NS_OK;
nscoord currX = mInnerBox.x;
nscoord yPos = mInnerBox.y+mRowHeight*(aIndex-mTopRowIndex);
for (nsOutlinerColumn* currCol = mColumns; currCol && currX < mInnerBox.x+mInnerBox.width;
currCol = currCol->GetNext()) {
if (currCol->IsPrimary()) {
nsRect cellRect(currX, yPos, currCol->GetWidth(), mRowHeight);
nsLeafBoxFrame::Invalidate(mPresContext, cellRect, mDragSession ? PR_TRUE : PR_FALSE);
break;
}
currX += currCol->GetWidth();
@ -812,7 +835,7 @@ NS_IMETHODIMP nsOutlinerBodyFrame::InvalidateRange(PRInt32 aStart, PRInt32 aEnd)
aEnd = last;
nsRect rangeRect(mInnerBox.x, mInnerBox.y+mRowHeight*(aStart-mTopRowIndex), mInnerBox.width, mRowHeight*(aEnd-aStart+1));
nsLeafBoxFrame::Invalidate(mPresContext, rangeRect, PR_FALSE);
nsLeafBoxFrame::Invalidate(mPresContext, rangeRect, mDragSession ? PR_TRUE : PR_FALSE);
return NS_OK;
}
@ -858,9 +881,16 @@ nsresult nsOutlinerBodyFrame::CheckVerticalOverflow()
event->nativeMsg = nsnull;
event->message = mVerticalOverflow ? NS_SCROLLPORT_OVERFLOW : NS_SCROLLPORT_UNDERFLOW;
nsCOMPtr<nsIPresShell> shell;
mPresContext->GetShell(getter_AddRefs(shell));
shell->PostDOMEvent(mContent, event);
if (mState & NS_FRAME_IN_REFLOW) {
nsCOMPtr<nsIPresShell> shell;
mPresContext->GetShell(getter_AddRefs(shell));
shell->PostDOMEvent(mContent, event);
}
else {
nsEventStatus status = nsEventStatus_eIgnore;
mContent->HandleDOMEvent(mPresContext, event, nsnull, NS_EVENT_FLAG_INIT, &status);
delete event;
}
}
return NS_OK;
@ -910,20 +940,16 @@ NS_IMETHODIMP nsOutlinerBodyFrame::InvalidateScrollbar()
}
//
// AdjustEventCoordsToBoxCoordSpace
//
// Takes client x/y in pixels, converts them to twips, and massages them to be
// in our coordinate system.
//
void
nsOutlinerBodyFrame :: AdjustEventCoordsToBoxCoordSpace ( PRInt32 inX, PRInt32 inY, PRInt32* outX, PRInt32* outY )
nsOutlinerBodyFrame::AdjustEventCoordsToBoxCoordSpace (PRInt32 aX, PRInt32 aY, PRInt32* aResultX, PRInt32* aResultY)
{
// Convert our x and y coords to twips.
float pixelsToTwips = 0.0;
mPresContext->GetPixelsToTwips(&pixelsToTwips);
inX = NSToIntRound(inX * pixelsToTwips);
inY = NSToIntRound(inY * pixelsToTwips);
aX = NSToIntRound(aX * pixelsToTwips);
aY = NSToIntRound(aY * pixelsToTwips);
// Get our box object.
nsCOMPtr<nsIDocument> doc;
@ -962,16 +988,15 @@ nsOutlinerBodyFrame :: AdjustEventCoordsToBoxCoordSpace ( PRInt32 inX, PRInt32 i
}
// Adjust into our coordinate space.
x = inX-x;
y = inY-y;
x = aX-x;
y = aY-y;
// Adjust y by the inner box y, so that we're in the inner box's
// coordinate space.
y += mInnerBox.y;
*outX = x;
*outY = y;
*aResultX = x;
*aResultY = y;
} // AdjustEventCoordsToBoxCoordSpace
@ -1516,6 +1541,12 @@ nsOutlinerBodyFrame::PrefillPropertyArray(PRInt32 aRowIndex, nsOutlinerColumn* a
if (mFocused)
mScratchArray->AppendElement(nsXULAtoms::focus);
// sort
PRBool sorted = PR_FALSE;
mView->IsSorted(&sorted);
if (sorted)
mScratchArray->AppendElement(nsXULAtoms::sorted);
if (aRowIndex != -1) {
nsCOMPtr<nsIOutlinerSelection> selection;
mView->GetSelection(getter_AddRefs(selection));
@ -1551,12 +1582,25 @@ nsOutlinerBodyFrame::PrefillPropertyArray(PRInt32 aRowIndex, nsOutlinerColumn* a
else {
mScratchArray->AppendElement(nsXULAtoms::leaf);
}
// drop feedback
if (mDropAllowed && mDropRow == aRowIndex) {
if (mDropOrient == nsIOutlinerView::inDropBefore)
mScratchArray->AppendElement(nsXULAtoms::dropBefore);
else if (mDropOrient == nsIOutlinerView::inDropOn)
mScratchArray->AppendElement(nsXULAtoms::drop);
else if (mDropOrient == nsIOutlinerView::inDropAfter)
mScratchArray->AppendElement(nsXULAtoms::dropAfter);
}
}
if (aCol) {
nsCOMPtr<nsIAtom> colID;
aCol->GetIDAtom(getter_AddRefs(colID));
mScratchArray->AppendElement(colID);
if (aCol->IsPrimary())
mScratchArray->AppendElement(nsXULAtoms::primary);
}
}
@ -1655,10 +1699,18 @@ nsRect nsOutlinerBodyFrame::GetImageSize(PRInt32 aRowIndex, const PRUnichar* aCo
const nsStylePosition* myPosition = (const nsStylePosition*)
aStyleContext->GetStyleData(eStyleStruct_Position);
const nsStyleList* myList = (const nsStyleList*)
aStyleContext->GetStyleData(eStyleStruct_List);
r.x += myList->mImageRegion.x;
r.y += myList->mImageRegion.y;
if (myPosition->mWidth.GetUnit() == eStyleUnit_Coord) {
PRInt32 val = myPosition->mWidth.GetCoordValue();
r.width += val;
}
else if (myList->mImageRegion.width > 0)
r.width += myList->mImageRegion.width;
else
needWidth = PR_TRUE;
@ -1666,15 +1718,19 @@ nsRect nsOutlinerBodyFrame::GetImageSize(PRInt32 aRowIndex, const PRUnichar* aCo
PRInt32 val = myPosition->mHeight.GetCoordValue();
r.height += val;
}
else if (myList->mImageRegion.height > 0)
r.height += myList->mImageRegion.height;
else
needHeight = PR_TRUE;
if (needWidth || needHeight) {
#ifdef USE_IMG2
nsCOMPtr<imgIContainer> image;
GetImage(aRowIndex, aColID, aStyleContext, getter_AddRefs(image));
// Get the natural image size.
if (image) {
// We have to load image even though we already have a size.
// Don't change this, otherwise things start to go crazy.
nsCOMPtr<imgIContainer> image;
GetImage(aRowIndex, aColID, aStyleContext, getter_AddRefs(image));
if (image) {
if (needWidth || needHeight) {
// Get the natural image size.
float p2t;
mPresContext->GetPixelsToTwips(&p2t);
@ -2375,6 +2431,134 @@ NS_IMETHODIMP nsOutlinerBodyFrame::PaintText(int aRowIndex,
textMarginData->GetMargin(textMargin);
textRect.Deflate(textMargin);
// Compute our text size.
const nsStyleFont* fontStyle = (const nsStyleFont*)textContext->GetStyleData(eStyleStruct_Font);
nsCOMPtr<nsIDeviceContext> deviceContext;
aPresContext->GetDeviceContext(getter_AddRefs(deviceContext));
nsCOMPtr<nsIFontMetrics> fontMet;
deviceContext->GetMetricsFor(fontStyle->mFont, *getter_AddRefs(fontMet));
nscoord height, baseline;
fontMet->GetHeight(height);
fontMet->GetMaxAscent(baseline);
// Center the text. XXX Obey vertical-align style prop?
if (height < textRect.height) {
textRect.y += (textRect.height - height)/2;
textRect.height = height;
}
// Set our font.
aRenderingContext.SetFont(fontMet);
nscoord width;
aRenderingContext.GetWidth(text, width);
if (width > textRect.width) {
// See if the width is even smaller than the ellipsis
// If so, clear the text completely.
nscoord ellipsisWidth;
aRenderingContext.GetWidth(ELLIPSIS, ellipsisWidth);
nscoord width = textRect.width;
if (ellipsisWidth > width)
text.SetLength(0);
else if (ellipsisWidth == width)
text.Assign(NS_LITERAL_STRING(ELLIPSIS));
else {
// We will be drawing an ellipsis, thank you very much.
// Subtract out the required width of the ellipsis.
// This is the total remaining width we have to play with.
width -= ellipsisWidth;
// Now we crop.
switch (aColumn->GetCropStyle()) {
default:
case 0: {
// Crop right.
nscoord cwidth;
nscoord twidth = 0;
int length = text.Length();
int i;
for (i = 0; i < length; ++i) {
PRUnichar ch = text[i];
aRenderingContext.GetWidth(ch,cwidth);
if (twidth + cwidth > width)
break;
twidth += cwidth;
}
text.Truncate(i);
text += NS_LITERAL_STRING(ELLIPSIS);
}
break;
case 2: {
// Crop left.
nscoord cwidth;
nscoord twidth = 0;
int length = text.Length();
int i;
for (i=length-1; i >= 0; --i) {
PRUnichar ch = text[i];
aRenderingContext.GetWidth(ch,cwidth);
if (twidth + cwidth > width)
break;
twidth += cwidth;
}
nsAutoString copy;
text.Right(copy, length-1-i);
text.Assign(NS_LITERAL_STRING(ELLIPSIS));
text += copy;
}
break;
case 1:
{
// Crop center.
nsAutoString leftStr, rightStr;
nscoord cwidth, twidth = 0;
int length = text.Length();
int rightPos = length - 1;
for (int leftPos = 0; leftPos < rightPos; ++leftPos) {
PRUnichar ch = text[leftPos];
aRenderingContext.GetWidth(ch, cwidth);
twidth += cwidth;
if (twidth > width)
break;
leftStr.Append(ch);
ch = text[rightPos];
aRenderingContext.GetWidth(ch, cwidth);
twidth += cwidth;
if (twidth > width)
break;
rightStr.Insert(ch, 0);
--rightPos;
}
text = leftStr + NS_LITERAL_STRING(ELLIPSIS) + rightStr;
}
break;
}
}
}
else {
switch (aColumn->GetTextAlignment()) {
case NS_STYLE_TEXT_ALIGN_RIGHT: {
textRect.x += textRect.width - width;
}
break;
case NS_STYLE_TEXT_ALIGN_CENTER: {
textRect.x += (textRect.width - width) / 2;
}
break;
}
}
aRenderingContext.GetWidth(text, width);
textRect.width = width;
// If the layer is the background layer, we must paint our borders and background for our
// text rect.
if (NS_FRAME_PAINT_LAYER_BACKGROUND == aWhichLayer)
@ -2384,125 +2568,28 @@ NS_IMETHODIMP nsOutlinerBodyFrame::PaintText(int aRowIndex,
// Adjust the rect for its border and padding.
AdjustForBorderPadding(textContext, textRect);
// Compute our text size.
const nsStyleFont* fontStyle = (const nsStyleFont*)textContext->GetStyleData(eStyleStruct_Font);
nsCOMPtr<nsIDeviceContext> deviceContext;
aPresContext->GetDeviceContext(getter_AddRefs(deviceContext));
nsCOMPtr<nsIFontMetrics> fontMet;
deviceContext->GetMetricsFor(fontStyle->mFont, *getter_AddRefs(fontMet));
nscoord height, baseline;
fontMet->GetHeight(height);
fontMet->GetMaxAscent(baseline);
// Center the text. XXX Obey vertical-align style prop?
if (height < textRect.height) {
textRect.y += (textRect.height - height)/2;
textRect.height = height;
}
// Set our font.
aRenderingContext.SetFont(fontMet);
nscoord width;
aRenderingContext.GetWidth(text, width);
if (width > textRect.width) {
// See if the width is even smaller than the ellipsis
// If so, clear the text completely.
nscoord ellipsisWidth;
aRenderingContext.GetWidth(ELLIPSIS, ellipsisWidth);
nscoord width = textRect.width;
if (ellipsisWidth > width)
text.SetLength(0);
else if (ellipsisWidth == width)
text.Assign(NS_LITERAL_STRING(ELLIPSIS));
else {
// We will be drawing an ellipsis, thank you very much.
// Subtract out the required width of the ellipsis.
// This is the total remaining width we have to play with.
width -= ellipsisWidth;
// Now we crop.
switch (aColumn->GetCropStyle()) {
default:
case 0: {
// Crop right.
nscoord cwidth;
nscoord twidth = 0;
int length = text.Length();
int i;
for (i = 0; i < length; ++i) {
PRUnichar ch = text[i];
aRenderingContext.GetWidth(ch,cwidth);
if (twidth + cwidth > width)
break;
twidth += cwidth;
}
text.Truncate(i);
text += NS_LITERAL_STRING(ELLIPSIS);
}
break;
case 2: {
// Crop left.
nscoord cwidth;
nscoord twidth = 0;
int length = text.Length();
int i;
for (i=length-1; i >= 0; --i) {
PRUnichar ch = text[i];
aRenderingContext.GetWidth(ch,cwidth);
if (twidth + cwidth > width)
break;
twidth += cwidth;
}
nsAutoString copy;
text.Right(copy, length-1-i);
text.Assign(NS_LITERAL_STRING(ELLIPSIS));
text += copy;
}
break;
case 1:
{
// Crop center.
nsAutoString leftStr, rightStr;
nscoord cwidth, twidth = 0;
int length = text.Length();
int rightPos = length - 1;
for (int leftPos = 0; leftPos < rightPos; ++leftPos) {
PRUnichar ch = text[leftPos];
aRenderingContext.GetWidth(ch, cwidth);
twidth += cwidth;
if (twidth > width)
break;
leftStr.Append(ch);
ch = text[rightPos];
aRenderingContext.GetWidth(ch, cwidth);
twidth += cwidth;
if (twidth > width)
break;
rightStr.Insert(ch, 0);
--rightPos;
}
text = leftStr + NS_LITERAL_STRING(ELLIPSIS) + rightStr;
}
break;
}
}
}
// Set our color.
const nsStyleColor* colorStyle = (const nsStyleColor*)textContext->GetStyleData(eStyleStruct_Color);
aRenderingContext.SetColor(colorStyle->mColor);
// Draw decorations.
const nsStyleTextReset* textStyle = (const nsStyleTextReset*)textContext->GetStyleData(eStyleStruct_TextReset);
PRUint8 decorations = textStyle->mTextDecoration;
nscoord offset;
nscoord size;
if (decorations & (NS_FONT_DECORATION_OVERLINE | NS_FONT_DECORATION_UNDERLINE)) {
fontMet->GetUnderline(offset, size);
if (decorations & NS_FONT_DECORATION_OVERLINE)
aRenderingContext.FillRect(textRect.x, textRect.y, width, size);
if (decorations & NS_FONT_DECORATION_UNDERLINE)
aRenderingContext.FillRect(textRect.x, textRect.y + baseline - offset, width, size);
}
if (decorations & NS_FONT_DECORATION_LINE_THROUGH) {
fontMet->GetStrikeout(offset, size);
aRenderingContext.FillRect(textRect.x, textRect.y + baseline - offset, width, size);
}
aRenderingContext.DrawString(text, textRect.x, textRect.y + baseline);
}
@ -2561,18 +2648,6 @@ NS_IMETHODIMP nsOutlinerBodyFrame::ScrollToRow(PRInt32 aRow)
ScrollInternal(aRow);
UpdateScrollbar();
#ifdef XP_MAC
// mac can't process the event loop during a drag, so if we're dragging,
// grab the scroll widget and make it paint synchronously. This is
// sorta slow (having to paint the entire tree), but it works.
if ( mDragSession ) {
nsCOMPtr<nsIWidget> scrollWidget;
mScrollbar->GetWindow(mPresContext, getter_AddRefs(scrollWidget));
if ( scrollWidget )
scrollWidget->Invalidate(PR_TRUE);
}
#endif
return NS_OK;
}
@ -2650,9 +2725,16 @@ nsOutlinerBodyFrame::ScrollInternal(PRInt32 aRow)
PRInt32 absDelta = delta > 0 ? delta : -delta;
if (hasBackground || absDelta*mRowHeight >= mRect.height)
Invalidate();
else if (mOutlinerWidget)
else if (mOutlinerWidget) {
mOutlinerWidget->Scroll(0, -delta*rowHeightAsPixels, nsnull);
#ifdef XP_MAC || defined(XP_MACOSX)
// mac can't process the event loop during a drag, so if we're dragging,
// update outliner widget synchronously.
if (mDragSession)
mOutlinerWidget->Update();
#endif
}
return NS_OK;
}
@ -2834,39 +2916,27 @@ NS_IMETHODIMP nsOutlinerBodyFrame::ClearStyleAndImageCaches()
#pragma mark -
#endif
//
// OnDragDrop
//
// Tell the view where the drop happened
//
NS_IMETHODIMP
nsOutlinerBodyFrame :: OnDragDrop ( nsIDOMEvent* inEvent )
nsOutlinerBodyFrame::OnDragDrop (nsIDOMEvent* aEvent)
{
mView->Drop ( mDropRow, mDropOrient );
mView->Drop (mDropRow, mDropOrient);
return NS_OK;
} // OnDragDrop
//
// OnDragExit
//
// Clear out all our tracking vars. If we were drawing feedback, undraw it
//
// Clear out all our tracking vars.
NS_IMETHODIMP
nsOutlinerBodyFrame :: OnDragExit ( nsIDOMEvent* inEvent )
nsOutlinerBodyFrame::OnDragExit(nsIDOMEvent* aEvent)
{
if ( mDropAllowed && !mAlreadyUndrewDueToScroll )
DrawDropFeedback ( mDropRow, mDropOrient, kUndrawFeedback ) ;
mDropRow = kIllegalRow;
mDropOrient = kNoOrientation;
mDropAllowed = PR_FALSE;
mAlreadyUndrewDueToScroll = PR_FALSE;
if (mDropAllowed) {
mDropAllowed = PR_FALSE;
InvalidatePrimaryCell(mDropRow);
}
else
mDropAllowed = PR_FALSE;
mDropRow = -1;
mDropOrient = -1;
mDragSession = nsnull;
mRenderingContext = nsnull;
if (mOpenTimer) {
mOpenTimer->Cancel();
@ -2875,55 +2945,43 @@ nsOutlinerBodyFrame :: OnDragExit ( nsIDOMEvent* inEvent )
}
return NS_OK;
} // OnDragExit
//
// OnDragOver
//
// The mouse is hovering over this outliner. If we determine things are different from the
// last time, undraw feedback at the old position, query the view to see if the current location is
// droppable, and then draw feedback at the new location if it is. The mouse may or may
// last time, invalidate primary cell at the old position, query the view to see if the current location is
// droppable, and then invalidate primary cell at the new location if it is. The mouse may or may
// not have changed position from the last time we were called, so optimize out a lot of
// the extra notifications by checking if anything changed first.
//
// For drop feedback we use drop, dropBefore and dropAfter property.
NS_IMETHODIMP
nsOutlinerBodyFrame :: OnDragOver ( nsIDOMEvent* inEvent )
nsOutlinerBodyFrame::OnDragOver(nsIDOMEvent* aEvent)
{
// while we're here, handle tracking of scrolling during a drag. There is a little craziness
// here as we turn off tracking of feedback during the scroll. When we first start scrolling,
// we explicitly undraw the previous feedback, then set |mAlreadyUndrewDueToScroll| to
// alert other places not to undraw again later (we're using XOR, so undrawing twice
// is bad). Below, we'll clear this member the next time we try to undraw the regular feedback.
// while we're here, handle tracking of scrolling during a drag.
PRBool scrollUp = PR_FALSE;
if ( IsInDragScrollRegion(inEvent, &scrollUp) ) {
if ( mDropAllowed && !mAlreadyUndrewDueToScroll )
DrawDropFeedback ( mDropRow, mDropOrient, kUndrawFeedback ); // undraw it at old loc, if we were drawing
mAlreadyUndrewDueToScroll = PR_TRUE;
ScrollByLines ( scrollUp ? -1 : 1);
if (IsInDragScrollRegion(aEvent, &scrollUp)) {
if (mDropAllowed) {
// invalidate primary cell at old location.
mDropAllowed = PR_FALSE;
InvalidatePrimaryCell(mDropRow);
}
ScrollByLines(scrollUp ? -1 : 1);
return NS_OK;
}
// compute the row mouse is over and the above/below/on state. Below we'll use this
// to see if anything changed.
PRInt32 newRow = kIllegalRow;
DropOrientation newOrient = kNoOrientation;
ComputeDropPosition ( inEvent, &newRow, &newOrient );
PRInt32 newRow = -1;
PRInt16 newOrient = -1;
ComputeDropPosition(aEvent, &newRow, &newOrient);
// if changed from last time, undraw it at the old location and if allowed,
// draw it at the new location. If nothing changed, just bail.
if ( newRow != mDropRow || newOrient != mDropOrient ) {
// undraw feedback at old loc. If we are coming off a scroll,
// don't undraw the old (we already did that), but reset us so that
// we're back in the normal case.
if ( !mAlreadyUndrewDueToScroll ) {
if ( mDropAllowed )
DrawDropFeedback ( mDropRow, mDropOrient, kUndrawFeedback );
// if changed from last time, invalidate primary cell at the old location and if allowed,
// invalidate primary cell at the new location. If nothing changed, just bail.
if (newRow != mDropRow || newOrient != mDropOrient) {
// Invalidate row at the old location.
if (mDropAllowed) {
mDropAllowed = PR_FALSE;
InvalidatePrimaryCell(mDropRow);
}
else
mAlreadyUndrewDueToScroll = PR_FALSE;
if (mOpenTimer && newRow != mOpenTimerRow) {
// timer is active but for a different row than the current one - kill it
@ -2936,10 +2994,8 @@ nsOutlinerBodyFrame :: OnDragOver ( nsIDOMEvent* inEvent )
// for next time.
mDropRow = newRow;
mDropOrient = newOrient;
mDropAllowed = PR_FALSE;
if (mDropRow >= 0) {
if (!mOpenTimer) {
// either there wasn't a timer running or it was just killed above.
@ -2959,14 +3015,15 @@ nsOutlinerBodyFrame :: OnDragOver ( nsIDOMEvent* inEvent )
}
PRBool canDropAtNewLocation = PR_FALSE;
if ( mDropOrient == kOnRow )
mView->CanDropOn ( mDropRow, &canDropAtNewLocation );
if (mDropOrient == nsIOutlinerView::inDropOn)
mView->CanDropOn(mDropRow, &canDropAtNewLocation);
else
mView->CanDropBeforeAfter ( mDropRow, mDropOrient == kBeforeRow ? PR_TRUE : PR_FALSE, &canDropAtNewLocation );
mView->CanDropBeforeAfter (mDropRow, mDropOrient == nsIOutlinerView::inDropBefore ? PR_TRUE : PR_FALSE, &canDropAtNewLocation);
if ( canDropAtNewLocation ) {
DrawDropFeedback ( mDropRow, mDropOrient, kDrawFeedback ); // draw it at old loc, if we are allowed
if (canDropAtNewLocation) {
// Invalidate row at the new location/
mDropAllowed = canDropAtNewLocation;
InvalidatePrimaryCell(mDropRow);
}
}
}
@ -2977,86 +3034,8 @@ nsOutlinerBodyFrame :: OnDragOver ( nsIDOMEvent* inEvent )
mDragSession->SetCanDrop(PR_TRUE);
return NS_OK;
} // OnDragOver
//
// DrawDropFeedback
//
// Takes care of actually drawing the correct feedback. |inDrawFeedback| tells us whether
// we're drawing or undrawing (removing/clearing) the feedback for the given row.
//
// XXX Need to be able to make line color respect style
//
void
nsOutlinerBodyFrame :: DrawDropFeedback ( PRInt32 inDropRow, DropOrientation inDropOrient, PRBool inDrawFeedback )
{
// call appropriate routine (insert, container, etc) based on |inDropOrient| and pass in |inDrawFeedback|
float pixelsToTwips = 0.0;
mPresContext->GetPixelsToTwips ( &pixelsToTwips );
#if NOT_YET_WORKING
// feedback will differ depending on if we're sorted or not -- leaving this around
// for later.
if ( viewSorted ) {
PRInt32 penSize = NSToIntRound(1*pixelsToTwips); // use a 1 pixel wide pen
// draw outline rectangle made of 4 rects (gfx can't just frame a rectangle). The
// rects can't overlap because we're XORing.
mRenderingContext->InvertRect ( 0, 0, mRect.width, penSize ); // top
mRenderingContext->InvertRect ( 0, penSize, penSize, mRect.height ); // left
mRenderingContext->InvertRect ( mRect.width - penSize, penSize, penSize, mRect.height ); // right
mRenderingContext->InvertRect ( penSize, mRect.height - penSize,
mRect.width - 2*penSize, penSize ); // bottom
}
#endif
nsOutlinerColumn* primaryCol = nsnull;
for (nsOutlinerColumn* currCol = mColumns; currCol; currCol = currCol->GetNext()) {
if ( currCol->IsPrimary() ) {
primaryCol = currCol;
break;
}
}
if ( !primaryCol )
return;
if ( inDropOrient == kOnRow ) {
// drawing "on" a row. Invert the image and text in the primary column.
PRInt32 x, y, width, height;
GetCoordsForCellItem ( inDropRow, primaryCol->GetID().get(), NS_LITERAL_STRING("image").get(),
&x, &y, &width, &height );
mRenderingContext->InvertRect ( NSToIntRound(x*pixelsToTwips), NSToIntRound(y*pixelsToTwips),
NSToIntRound(width*pixelsToTwips), NSToIntRound(height*pixelsToTwips) );
GetCoordsForCellItem ( inDropRow, primaryCol->GetID().get(), NS_LITERAL_STRING("text").get(),
&x, &y, &width, &height );
mRenderingContext->InvertRect ( NSToIntRound(x*pixelsToTwips), NSToIntRound(y*pixelsToTwips),
NSToIntRound(width*pixelsToTwips), NSToIntRound(height*pixelsToTwips) );
}
else {
// drawing between rows, find the X/Y to draw a 2 pixel line indented 5 pixels
// from the left of the image in the primary column.
PRInt32 whereToDrawY = mRowHeight * (inDropRow - mTopRowIndex);
if ( inDropOrient == kAfterRow )
whereToDrawY += mRowHeight;
PRInt32 whereToDrawX = 0;
PRInt32 y, width, height;
GetCoordsForCellItem ( inDropRow, primaryCol->GetID().get(), NS_LITERAL_STRING("image").get(),
&whereToDrawX, &y, &width, &height );
whereToDrawX += 5; // indent 5 pixels from left of image
mRenderingContext->InvertRect ( NSToIntRound(whereToDrawX*pixelsToTwips),
whereToDrawY, NSToIntRound(25*pixelsToTwips), NSToIntRound(2*pixelsToTwips) );
}
} // DrawDropFeedback
//
// ComputeDropPosition
//
// Given a dom event, figure out which row in the tree the mouse is over
// and if we should drop before/after/on that row. Doesn't query the content
// about if the drag is allowable, that's done elsewhere.
@ -3067,121 +3046,99 @@ nsOutlinerBodyFrame :: DrawDropFeedback ( PRInt32 inDropRow, DropOrientation inD
//
// For non-containers, if the mouse is in the top 50% of the row, the drop is
// _before_ and the bottom 50% _after_
//
void
nsOutlinerBodyFrame :: ComputeDropPosition ( nsIDOMEvent* inEvent, PRInt32* outRow, DropOrientation* outOrient )
nsOutlinerBodyFrame::ComputeDropPosition(nsIDOMEvent* aEvent, PRInt32* aRow, PRInt16* aOrient)
{
nsCOMPtr<nsIDOMMouseEvent> mouseEvent ( do_QueryInterface(inEvent) );
if ( mouseEvent ) {
nsCOMPtr<nsIDOMMouseEvent> mouseEvent (do_QueryInterface(aEvent));
if (mouseEvent) {
PRInt32 x = 0, y = 0;
mouseEvent->GetClientX(&x); mouseEvent->GetClientY(&y);
nsXPIDLString colID, child;
GetCellAt ( x, y, outRow, getter_Copies(colID), getter_Copies(child) );
if (*outRow == -1) {
*outOrient = kNoOrientation;
GetCellAt (x, y, aRow, getter_Copies(colID), getter_Copies(child));
if (*aRow == -1) {
*aOrient = -1;
return;
}
// Compute the top/bottom of the row in question. We need to convert
// our y coord to twips since |mRowHeight| is in twips.
PRInt32 yTwips, xTwips;
AdjustEventCoordsToBoxCoordSpace ( x, y, &xTwips, &yTwips );
PRInt32 rowTop = mRowHeight * (*outRow - mTopRowIndex);
PRInt32 yOffset = yTwips - rowTop;
AdjustEventCoordsToBoxCoordSpace (x, y, &xTwips, &yTwips);
PRInt32 yOffset = yTwips - mRowHeight * (*aRow - mTopRowIndex);
PRBool isContainer = PR_FALSE;
mView->IsContainer ( *outRow, &isContainer );
if ( isContainer ) {
mView->IsContainer (*aRow, &isContainer);
if (isContainer) {
// for a container, use a 25%/50%/25% breakdown
if ( yOffset < mRowHeight / 4 )
*outOrient = kBeforeRow;
else if ( yOffset > mRowHeight - (mRowHeight / 4) )
*outOrient = kAfterRow;
if (yOffset < mRowHeight / 4)
*aOrient = nsIOutlinerView::inDropBefore;
else if (yOffset > mRowHeight - (mRowHeight / 4))
*aOrient = nsIOutlinerView::inDropAfter;
else
*outOrient = kOnRow;
*aOrient = nsIOutlinerView::inDropOn;
}
else {
// for a non-container use a 50%/50% breakdown
if ( yOffset < mRowHeight / 2 )
*outOrient = kBeforeRow;
if (yOffset < mRowHeight / 2)
*aOrient = nsIOutlinerView::inDropBefore;
else
*outOrient = kAfterRow;
*aOrient = nsIOutlinerView::inDropAfter;
}
}
} // ComputeDropPosition
//
// IsInDragScrollRegion
//
// Determine if we're w/in a margin of the top/bottom of the outliner during a drag.
// This will ultimately cause us to scroll, but that's done elsewhere.
//
PRBool
nsOutlinerBodyFrame :: IsInDragScrollRegion ( nsIDOMEvent* inEvent, PRBool* outScrollUp )
nsOutlinerBodyFrame::IsInDragScrollRegion(nsIDOMEvent* aEvent, PRBool* aScrollUp)
{
PRBool isInRegion = PR_FALSE;
float pixelsToTwips = 0.0;
mPresContext->GetPixelsToTwips ( &pixelsToTwips );
const int kMarginHeight = NSToIntRound ( 12 * pixelsToTwips );
mPresContext->GetPixelsToTwips (&pixelsToTwips);
const int kMarginHeight = NSToIntRound(12 * pixelsToTwips);
nsCOMPtr<nsIDOMMouseEvent> mouseEvent ( do_QueryInterface(inEvent) );
if ( mouseEvent ) {
nsCOMPtr<nsIDOMMouseEvent> mouseEvent (do_QueryInterface(aEvent));
if (mouseEvent) {
PRInt32 x = 0, y = 0;
mouseEvent->GetClientX(&x); mouseEvent->GetClientY(&y);
PRInt32 yTwips, xTwips;
AdjustEventCoordsToBoxCoordSpace ( x, y, &xTwips, &yTwips );
AdjustEventCoordsToBoxCoordSpace (x, y, &xTwips, &yTwips);
if ( yTwips < kMarginHeight ) {
if (yTwips < kMarginHeight) {
isInRegion = PR_TRUE;
if ( outScrollUp )
*outScrollUp = PR_TRUE; // scroll up
if (aScrollUp)
*aScrollUp = PR_TRUE; // scroll up
}
else if ( yTwips > mRect.height - kMarginHeight ) {
else if (yTwips > mRect.height - kMarginHeight) {
isInRegion = PR_TRUE;
if ( outScrollUp )
*outScrollUp = PR_FALSE; // scroll down
if (aScrollUp )
*aScrollUp = PR_FALSE; // scroll down
}
}
return isInRegion;
} // IsInDragScrollRegion
//
// OnDragEnter
//
// Cache several things we'll need throughout the course of our work. These
// will all get released on a drag exit
//
NS_IMETHODIMP
nsOutlinerBodyFrame :: OnDragEnter ( nsIDOMEvent* inEvent )
nsOutlinerBodyFrame::OnDragEnter(nsIDOMEvent* aEvent)
{
// create a rendering context for our drawing needs
nsCOMPtr<nsIPresShell> presShell;
mPresContext->GetShell(getter_AddRefs(presShell));
nsCOMPtr<nsIRenderingContext> rendContext;
presShell->CreateRenderingContext ( this, getter_AddRefs(mRenderingContext) );
// cache the drag session
nsresult rv;
nsCOMPtr<nsIDragService> dragService =
do_GetService("@mozilla.org/widget/dragservice;1", &rv);
nsCOMPtr<nsIDragSession> dragSession;
dragService->GetCurrentSession(getter_AddRefs(mDragSession));
NS_ASSERTION ( mDragSession, "can't get drag session" );
NS_ASSERTION(mDragSession, "can't get drag session");
return NS_OK;
} // OnDragEnter
#ifdef XP_MAC
#pragma mark -
#endif

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

@ -184,6 +184,7 @@ public:
PRBool IsCycler() { return mIsCyclerCol; };
PRInt32 GetCropStyle() { return mCropStyle; };
PRInt32 GetTextAlignment() { return mTextAlignment; };
PRInt32 GetColIndex() { return mColIndex; };
};
@ -387,8 +388,8 @@ protected:
// Our internal scroll method, used by all the public scroll methods.
nsresult ScrollInternal(PRInt32 aRow);
// convert pixels, probably from an event, into twips in our coordinate space
void AdjustEventCoordsToBoxCoordSpace ( PRInt32 inX, PRInt32 inY, PRInt32* outX, PRInt32* outY ) ;
// Convert pixels, probably from an event, into twips in our coordinate space.
void AdjustEventCoordsToBoxCoordSpace (PRInt32 aX, PRInt32 aY, PRInt32* aResultX, PRInt32* aResultY);
// Convert a border style into line style.
nsLineStyle ConvertBorderStyleToLineStyle(PRUint8 aBorderStyle);
@ -403,6 +404,12 @@ protected:
nscoord& aCurrentSize);
nscoord CalcMaxRowWidth(nsBoxLayoutState& aState);
// Calc the row and above/below/on status given where the mouse currently is hovering.
void ComputeDropPosition(nsIDOMEvent* aEvent, PRInt32* aRow, PRInt16* aOrient);
// Calculate if we're in the region in which we want to auto-scroll the outliner.
PRBool IsInDragScrollRegion (nsIDOMEvent* aEvent, PRBool* aScrollUp);
protected: // Data Members
// Our cached pres context.
nsIPresContext* mPresContext;
@ -448,41 +455,29 @@ protected: // Data Members
// A scratch array used when looking up cached style contexts.
nsCOMPtr<nsISupportsArray> mScratchArray;
enum { kIllegalRow = -1 } ;
enum { kDrawFeedback = PR_TRUE, kUndrawFeedback = PR_FALSE } ;
enum DropOrientation { kNoOrientation, kBeforeRow = 1, kOnRow = 2, kAfterRow = 3 } ;
// draw (or undraw) feedback at the given location with the given orientation
void DrawDropFeedback ( PRInt32 inDropRow, DropOrientation inDropOrient, PRBool inDrawFeedback ) ;
// calc the row and above/below/on status given where the mouse currently is hovering
void ComputeDropPosition ( nsIDOMEvent* inEvent, PRInt32* outRow, DropOrientation* outOrient ) ;
// calculate if we're in the region in which we want to auto-scroll the outliner
PRBool IsInDragScrollRegion ( nsIDOMEvent* inEvent, PRBool* outScrollUp ) ;
PRInt32 mDropRow; // the row the mouse is hovering over during a drop
DropOrientation mDropOrient; // where we want to draw feedback (above/below/on this row) if allowed
// Whether or not we're currently focused.
PRPackedBool mFocused;
// An indicator that columns have changed and need to be rebuilt
PRPackedBool mColumnsDirty;
PRPackedBool mDropAllowed; // if the drop is actually allowed here or not. we draw if this is true
PRPackedBool mAlreadyUndrewDueToScroll; // we undraw early during auto-scroll; did we do this already?
// If the drop is actually allowed here or not.
PRPackedBool mDropAllowed;
// Do we have a fixed number of onscreen rows?
PRPackedBool mHasFixedRowCount;
PRPackedBool mVerticalOverflow;
// timer for opening spring-loaded folders
// The row the mouse is hovering over during a drop.
PRInt32 mDropRow;
// Where we want to draw feedback (above/on this row/below) if allowed.
PRInt16 mDropOrient;
nsCOMPtr<nsIDragSession> mDragSession;
// Timer for opening spring-loaded folders.
nsCOMPtr<nsITimer> mOpenTimer;
PRInt32 mOpenTimerRow;
nsCOMPtr<nsIDragSession> mDragSession;
nsCOMPtr<nsIRenderingContext> mRenderingContext;
}; // class nsOutlinerBodyFrame

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

@ -110,16 +110,18 @@ NS_IMETHODIMP nsOutlinerBoxObject::Init(nsIContent* aContent, nsIPresShell* aPre
static void FindBodyElement(nsIContent* aParent, nsIContent** aResult)
{
*aResult = nsnull;
ChildIterator iter, last;
for (ChildIterator::Init(aParent, &iter, &last); iter != last; ++iter) {
nsCOMPtr<nsIContent> content = *iter;
nsCOMPtr<nsIAtom> tag;
content->GetTag(*getter_AddRefs(tag));
if (tag.get() == nsXULAtoms::outlinerbody) {
if (tag.get() == nsXULAtoms::outlinerchildren) {
*aResult = content;
NS_ADDREF(*aResult);
break;
} else {
}
else if (tag != nsXULAtoms::templateAtom) {
FindBodyElement(content, aResult);
if (*aResult)
break;
@ -332,6 +334,14 @@ NS_IMETHODIMP nsOutlinerBoxObject::InvalidateCell(PRInt32 aRow, const PRUnichar
return NS_OK;
}
NS_IMETHODIMP nsOutlinerBoxObject::InvalidatePrimaryCell(PRInt32 aIndex)
{
nsIOutlinerBoxObject* body = GetOutlinerBody();
if (body)
return body->InvalidatePrimaryCell(aIndex);
return NS_OK;
}
NS_IMETHODIMP nsOutlinerBoxObject::InvalidateRange(PRInt32 aStart, PRInt32 aEnd)
{
nsIOutlinerBoxObject* body = GetOutlinerBody();

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

@ -43,6 +43,7 @@
#include "nsXULAtoms.h"
#include "nsLayoutAtoms.h"
#include "nsIDOMDocument.h"
#include "nsIBoxObject.h"
#include "nsOutlinerUtils.h"
#include "nsOutlinerContentView.h"
#include "nsChildIterator.h"
@ -154,7 +155,7 @@ class Row
nsOutlinerContentView::nsOutlinerContentView(void) :
mBoxObject(nsnull), mSelection(nsnull), mRoot(nsnull), mDocument(nsnull),
mHasCheckedSelect(PR_FALSE), mUpdateSelection(PR_FALSE), mIgnoreOptionSelected(PR_FALSE)
mUpdateSelection(PR_FALSE)
{
NS_INIT_ISUPPORTS();
@ -167,7 +168,7 @@ nsOutlinerContentView::nsOutlinerContentView(void) :
mAllocator.Init("nsOutlinerContentView", kBucketSizes, kNumBuckets, kInitialSize);
}
nsOutlinerContentView::~nsOutlinerContentView (void)
nsOutlinerContentView::~nsOutlinerContentView(void)
{
// Remove ourselfs from document's observers.
if (mDocument)
@ -470,7 +471,32 @@ NS_IMETHODIMP
nsOutlinerContentView::SetOutliner(nsIOutlinerBoxObject* aOutliner)
{
mBoxObject = aOutliner;
if (!mRoot) {
// Get our root element
nsCOMPtr<nsIBoxObject> boxObject = do_QueryInterface(mBoxObject);
nsCOMPtr<nsIDOMElement> element;
boxObject->GetElement(getter_AddRefs(element));
mRoot = do_QueryInterface(element);
// Add ourselfs to document's observers.
nsCOMPtr<nsIDocument> document;
mRoot->GetDocument(*getter_AddRefs(document));
if (document) {
document->AddObserver(this);
mDocument = document;
}
nsCOMPtr<nsIDOMElement> bodyElement;
mBoxObject->GetOutlinerBody(getter_AddRefs(bodyElement));
if (bodyElement) {
nsCOMPtr<nsIContent> bodyContent = do_QueryInterface(bodyElement);
PRInt32 index = 0;
Serialize(bodyContent, -1, &index, mRows);
}
}
return NS_OK;
}
@ -554,42 +580,6 @@ nsOutlinerContentView::GetRoot(nsIDOMElement** aRoot)
return NS_OK;
}
NS_IMETHODIMP
nsOutlinerContentView::SetRoot(nsIDOMElement* aRoot)
{
if (mRoot) {
// Remove ourselfs from document's observers.
if (mDocument) {
mDocument->RemoveObserver(this);
mDocument = nsnull;
}
ClearRows();
}
if (aRoot)
mRoot = do_QueryInterface(aRoot);
if (mRoot) {
// Add ourselfs to document's observers.
nsCOMPtr<nsIDocument> document;
mRoot->GetDocument(*getter_AddRefs(document));
if (document) {
document->AddObserver(this);
mDocument = document;
}
nsCOMPtr<nsIContent> child;
nsOutlinerUtils::GetImmediateChild(mRoot, nsXULAtoms::outlinerchildren, getter_AddRefs(child));
if (child) {
PRInt32 index = 0;
Serialize(child, -1, &index, mRows);
}
}
return NS_OK;
}
NS_IMETHODIMP
nsOutlinerContentView::GetItemAtIndex(PRInt32 aIndex, nsIDOMElement** _retval)
{
@ -720,8 +710,11 @@ nsOutlinerContentView::AttributeChanged(nsIDocument *aDocument,
aContent->GetTag(*getter_AddRefs(tag));
if (tag == nsXULAtoms::outlinercol) {
if (aAttribute == nsXULAtoms::properties)
mBoxObject->Invalidate();
if (aAttribute == nsXULAtoms::properties) {
nsAutoString id;
aContent->GetAttr(kNameSpaceID_None, nsHTMLAtoms::id, id);
mBoxObject->InvalidateColumn(id.get());
}
}
else if (tag == nsXULAtoms::outlineritem) {
if (aAttribute == nsXULAtoms::open) {
@ -785,14 +778,13 @@ nsOutlinerContentView::AttributeChanged(nsIDocument *aDocument,
}
}
else if (tag == nsHTMLAtoms::option) {
if (aAttribute == nsLayoutAtoms::optionSelectedPseudo && !mIgnoreOptionSelected) {
if (aAttribute == nsLayoutAtoms::optionSelectedPseudo) {
PRInt32 index = FindContent(aContent);
if (index == -1)
return NS_OK;
NS_ASSERTION(mSelection, "Need to handle optionSelected change with no OutlinerSelection");
if (mSelection)
if (index >= 0) {
NS_ASSERTION(mSelection, "Need to handle optionSelected change with no OutlinerSelection");
if (mSelection)
mSelection->ToggleSelect(index);
}
}
}
@ -823,11 +815,13 @@ nsOutlinerContentView::ContentInserted(nsIDocument *aDocument,
if (childTag == nsXULAtoms::outlineritem ||
childTag == nsXULAtoms::outlinerseparator) {
PRInt32 parentIndex = -1;
if (aContainer != mRoot) {
nsCOMPtr<nsIContent> parent;
aContainer->GetParent(*getter_AddRefs(parent));
nsCOMPtr<nsIContent> parent;
aContainer->GetParent(*getter_AddRefs(parent));
nsCOMPtr<nsIAtom> parentTag;
parent->GetTag(*getter_AddRefs(parentTag));
if (parentTag != nsXULAtoms::outliner)
parentIndex = FindContent(parent);
}
PRInt32 index = 0;
GetIndexInSubtree(aContainer, aChild, &index);
@ -1329,21 +1323,3 @@ nsOutlinerContentView::ParseProperties(nsIContent* aContent, Property** aPropert
return NS_OK;
}
void
nsOutlinerContentView::GetSelectElement()
{
nsCOMPtr<nsIContent> parent = mRoot;
nsCOMPtr<nsIAtom> tag;
nsCOMPtr<nsIContent> temp;
while (parent && NS_SUCCEEDED(parent->GetTag(*getter_AddRefs(tag)))
&& tag != nsXULAtoms::outliner && tag != nsHTMLAtoms::select) {
temp = parent;
temp->GetParent(*getter_AddRefs(parent));
}
if (parent && tag == nsHTMLAtoms::select)
mSelectElement = do_QueryInterface(parent);
}

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

@ -185,22 +185,17 @@ class nsOutlinerContentView : public nsIOutlinerView,
nsresult ParseProperties(nsIContent* aContent, Property** aProperty);
void GetSelectElement();
inline nsresult SetOptionsSelected(PRInt32 aStart, PRInt32 aEnd,
PRBool aSelect, PRBool aClear)
{
nsresult rv = NS_OK;
if (!mHasCheckedSelect)
GetSelectElement();
if (mSelectElement) {
mIgnoreOptionSelected = PR_TRUE;
rv = mSelectElement->SetOptionsSelectedByIndex(aStart, aEnd, aSelect,
aClear, PR_FALSE, nsnull);
if (mRoot) {
nsCOMPtr<nsISelectElement> selectElement = do_QueryInterface(mRoot);
if (selectElement)
rv = selectElement->SetOptionsSelectedByIndex(aStart, aEnd, aSelect,
aClear, PR_FALSE, nsnull);
}
return rv;
}
@ -208,14 +203,11 @@ class nsOutlinerContentView : public nsIOutlinerView,
nsCOMPtr<nsIOutlinerBoxObject> mBoxObject;
nsCOMPtr<nsIOutlinerSelection> mSelection;
nsCOMPtr<nsIContent> mRoot;
nsCOMPtr<nsISelectElement> mSelectElement;
nsIDocument* mDocument; // WEAK
nsFixedSizeAllocator mAllocator;
nsVoidArray mRows;
PRPackedBool mHasCheckedSelect;
PRPackedBool mUpdateSelection;
PRPackedBool mIgnoreOptionSelected;
};
#endif // nsOutlinerContentView_h__

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

@ -39,6 +39,7 @@
#include "nsCOMPtr.h"
#include "nsOutlinerSelection.h"
#include "nsIBoxObject.h"
#include "nsIOutlinerBoxObject.h"
#include "nsIOutlinerView.h"
#include "nsString.h"
@ -716,8 +717,9 @@ nsOutlinerSelection::FireOnSelectHandler()
if (mSuppressed)
return NS_OK;
nsCOMPtr<nsIBoxObject> boxObject = do_QueryInterface(mOutliner);
nsCOMPtr<nsIDOMElement> elt;
mOutliner->GetOutlinerBody(getter_AddRefs(elt));
boxObject->GetElement(getter_AddRefs(elt));
nsCOMPtr<nsIContent> content(do_QueryInterface(elt));
nsCOMPtr<nsIDocument> document;
@ -747,14 +749,13 @@ nsOutlinerSelection::FireOnSelectHandler()
PRBool nsOutlinerSelection::SingleSelection()
{
nsCOMPtr<nsIBoxObject> boxObject = do_QueryInterface(mOutliner);
nsCOMPtr<nsIDOMElement> element;
mOutliner->GetOutlinerBody(getter_AddRefs(element));
nsCOMPtr<nsIContent> content(do_QueryInterface(element));
nsCOMPtr<nsIContent> parent;
content->GetParent(*getter_AddRefs(parent));
boxObject->GetElement(getter_AddRefs(element));
nsCOMPtr<nsIContent> content = do_QueryInterface(element);
nsAutoString seltype;
parent->GetAttr(kNameSpaceID_None, nsXULAtoms::seltype, seltype);
if (seltype.EqualsIgnoreCase("single"))
content->GetAttr(kNameSpaceID_None, nsXULAtoms::seltype, seltype);
if (seltype.Equals(NS_LITERAL_STRING("single")))
return PR_TRUE;
return PR_FALSE;
}

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

@ -61,7 +61,7 @@ function AbResultsPaneOnClick(event)
}
SortAndUpdateIndicators(t.id, sortDirection);
}
else if (t.localName == "outlinerbody") {
else if (t.localName == "outlinerchildren") {
var row = new Object;
var colID = new Object;
var childElt = new Object;

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

@ -50,7 +50,8 @@
<script type="application/x-javascript" src="chrome://messenger/content/addressbook/abDragDrop.js"/>
<outliner id="abResultsOutliner" flex="1" enableColumnDrag="true" class="plain"
onclick="AbResultsPaneOnClick(event);">
onclick="AbResultsPaneOnClick(event);"
onselect="this.view.selectionChanged();">
<outlinercols id="abResultsOutlinerCols">
<!-- these column ids must match up to the mork column names, except for GeneratedName, see nsIAddrDatabase.idl -->
@ -106,9 +107,7 @@
hiddenbydefault="true"
flex="1" label="&Department.label;"/>
</outlinercols>
<outlinerbody flex="1"
onselect="this.parentNode.outlinerBoxObject.view.selectionChanged();"
ondraggesture="nsDragAndDrop.startDrag(event, abResultsPaneObserver);" />
<outlinerchildren ondraggesture="nsDragAndDrop.startDrag(event, abResultsPaneObserver);"/>
</outliner>
</overlay>

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

@ -79,7 +79,7 @@
hiddenbydefault="true"
flex="1" label="&PrimaryEmail.label;"/>
</outlinercols>
<outlinerbody flex="1" />
<outlinerchildren/>
</outliner>
</vbox>

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

@ -45,7 +45,7 @@
<!-- category tree entries for mail/news -->
<outlinerchildren id="panelChildren">
<outlineritem container="true" open="true" id="mailnews" position="3">
<outlineritem container="true" id="mailnews" position="3">
<outlinerrow>
<outlinercell url="chrome://messenger/content/pref-mailnews.xul" label="&mail.label;"/>
</outlinerrow>

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

@ -31,83 +31,81 @@
<overlay xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<outliner id="folderOutliner" class="plain" flex="1" seltype="single">
<outlinerbody flex="1"
datasources="rdf:null"
statedatasource="rdf:mailnewsfolders"
flags="dont-build-content"
ondraggesture="BeginDragFolderOutliner(event);"
onselect="FolderPaneSelectionChange();">
<template>
<rule>
<conditions>
<outlineritem uri="?container"/>
<member container="?container" child="?member" />
</conditions>
<outliner id="folderOutliner" class="plain" flex="1" seltype="single"
datasources="rdf:null"
statedatasource="rdf:mailnewsfolders"
flags="dont-build-content"
ondraggesture="BeginDragFolderOutliner(event);"
onselect="FolderPaneSelectionChange();">
<template>
<rule>
<conditions>
<outlineritem uri="?container"/>
<member container="?container" child="?member" />
</conditions>
<bindings>
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#FolderTreeName"
object="?folderTreeName" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#FolderTreeName?sort=true"
object="?folderTreeNameSort" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#FolderTreeSimpleName"
object="?folderTreeSimpleName" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#SpecialFolder"
object="?specialFolder" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#BiffState"
object="?biffState" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#IsServer"
object="?isServer" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#NewMessages"
object="?newMessages" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#HasUnreadMessages"
object="?hasUnreadMessages" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#SubfoldersHaveUnreadMessages"
object="?subfoldersHaveUnreadMessages" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#IsSecure"
object="?isSecure" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#ServerType"
object="?serverType" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#NoSelect"
object="?noSelect" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#TotalUnreadMessages"
object="?unreadCount" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#TotalMessages"
object="?totalCount" />
</bindings>
<bindings>
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#FolderTreeName"
object="?folderTreeName" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#FolderTreeName?sort=true"
object="?folderTreeNameSort" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#FolderTreeSimpleName"
object="?folderTreeSimpleName" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#SpecialFolder"
object="?specialFolder" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#BiffState"
object="?biffState" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#IsServer"
object="?isServer" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#NewMessages"
object="?newMessages" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#HasUnreadMessages"
object="?hasUnreadMessages" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#SubfoldersHaveUnreadMessages"
object="?subfoldersHaveUnreadMessages" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#IsSecure"
object="?isSecure" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#ServerType"
object="?serverType" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#NoSelect"
object="?noSelect" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#TotalUnreadMessages"
object="?unreadCount" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#TotalMessages"
object="?totalCount" />
</bindings>
<action>
<outlinerchildren>
<outlineritem uri="?member">
<outlinerrow>
<outlinercell id="folderNameCell"
label="?folderTreeName"
properties="specialFolder-?specialFolder biffState-?biffState isServer-?isServer newMessages-?newMessages hasUnreadMessages-?hasUnreadMessages subfoldersHaveUnreadMessages-?subfoldersHaveUnreadMessages isSecure-?isSecure serverType-?serverType noSelect-?noSelect"/>
<outlinercell label="?unreadCount"
properties="hasUnreadMessages-?hasUnreadMessages subfoldersHaveUnreadMessages-?subfoldersHaveUnreadMessages"/>
<outlinercell label="?totalCount"
properties="hasUnreadMessages-?hasUnreadMessages subfoldersHaveUnreadMessages-?subfoldersHaveUnreadMessages"/>
</outlinerrow>
</outlineritem>
</outlinerchildren>
</action>
</rule>
</template>
</outlinerbody>
<action>
<outlinerchildren>
<outlineritem uri="?member">
<outlinerrow>
<outlinercell id="folderNameCell"
label="?folderTreeName"
properties="specialFolder-?specialFolder biffState-?biffState isServer-?isServer newMessages-?newMessages hasUnreadMessages-?hasUnreadMessages subfoldersHaveUnreadMessages-?subfoldersHaveUnreadMessages isSecure-?isSecure serverType-?serverType noSelect-?noSelect"/>
<outlinercell label="?unreadCount"
properties="hasUnreadMessages-?hasUnreadMessages subfoldersHaveUnreadMessages-?subfoldersHaveUnreadMessages"/>
<outlinercell label="?totalCount"
properties="hasUnreadMessages-?hasUnreadMessages subfoldersHaveUnreadMessages-?subfoldersHaveUnreadMessages"/>
</outlinerrow>
</outlineritem>
</outlinerchildren>
</action>
</rule>
</template>
<outlinercols>
<outlinercol id="folderNameCol"
flex="5"

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

@ -1000,7 +1000,7 @@ function GetFolderNameFromUri(uri, outliner)
{
var folderResource = RDF.GetResource(uri);
var db = outliner.outlinerBoxObject.outlinerBody.database;
var db = outliner.database;
var nameProperty = RDF.GetResource('http://home.netscape.com/NC-rdf#Name');

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

@ -339,6 +339,9 @@ function BeginDragFolderOutliner(event)
{
debugDump("BeginDragFolderOutliner\n");
if (event.originalTarget.localName != "outlinerchildren")
return;
var folderOutliner = GetFolderOutliner();
var row = {};
var col = {};

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

@ -685,9 +685,9 @@ function OnLoadFolderPane()
database.AddDataSource(accountManagerDataSource);
database.AddDataSource(folderDataSource);
var folderOutliner = GetFolderOutliner();
folderOutliner.outlinerBoxObject.outlinerBody.setAttribute("ref", "msgaccounts:/");
folderOutliner.setAttribute("ref", "msgaccounts:/");
var folderOutlinerBuilder = folderOutliner.outlinerBoxObject.outlinerBody.builder.QueryInterface(Components.interfaces.nsIXULOutlinerBuilder);
var folderOutlinerBuilder = folderOutliner.builder.QueryInterface(Components.interfaces.nsIXULOutlinerBuilder);
folderOutlinerBuilder.addObserver(folderObserver);
folderOutliner.addEventListener("click",FolderPaneOnClick,true);
}
@ -724,7 +724,7 @@ function OnLoadThreadPane()
function GetFolderDatasource()
{
var folderOutliner = GetFolderOutliner();
return folderOutliner.outlinerBoxObject.outlinerBody.database;
return folderOutliner.database;
}
/* Functions for accessing particular parts of the window*/
@ -1140,20 +1140,20 @@ function GetDBView()
function GetFolderResource(outliner, index)
{
var outlinerBuilder = outliner.outlinerBoxObject.outlinerBody.builder.QueryInterface(Components.interfaces.nsIXULOutlinerBuilder);
var outlinerBuilder = outliner.builder.QueryInterface(Components.interfaces.nsIXULOutlinerBuilder);
return outlinerBuilder.getResourceAtIndex(index);
}
function GetFolderIndex(outliner, resource)
{
var outlinerBuilder = outliner.outlinerBoxObject.outlinerBody.builder.QueryInterface(Components.interfaces.nsIXULOutlinerBuilder);
var outlinerBuilder = outliner.builder.QueryInterface(Components.interfaces.nsIXULOutlinerBuilder);
return outlinerBuilder.getIndexOfResource(resource);
}
function GetFolderAttribute(outliner, source, attribute)
{
var property = RDF.GetResource("http://home.netscape.com/NC-rdf#" + attribute);
var target = outliner.outlinerBoxObject.outlinerBody.database.GetTarget(source, property, true);
var target = outliner.database.GetTarget(source, property, true);
if (target)
target = target.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
return target;

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

@ -51,54 +51,54 @@ Contributors:
<keyset id="keyset"/>
<description class="desc">&MsgSelectDesc.label;</description>
<outliner flex="1" id="synchronizeOutliner">
<outlinerbody flex="1" datasources="rdf:msgaccountmanager rdf:mailnewsfolders" ref="msgaccounts:/" flags="dont-build-content" onclick="onSynchronizeClick(event);">
<template>
<rule>
<conditions>
<outlineritem uri="?container"/>
<member container="?container" child="?member"/>
<triple subject="?member" predicate="http://home.netscape.com/NC-rdf#SupportsOffline" object="true"/>
</conditions>
<outliner id="synchronizeOutliner" flex="1"
datasources="rdf:msgaccountmanager rdf:mailnewsfolders" ref="msgaccounts:/" flags="dont-build-content"
onclick="onSynchronizeClick(event);">
<template>
<rule>
<conditions>
<outlineritem uri="?container"/>
<member container="?container" child="?member"/>
<triple subject="?member" predicate="http://home.netscape.com/NC-rdf#SupportsOffline" object="true"/>
</conditions>
<bindings>
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#FolderTreeName"
object="?folderTreeName" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#FolderTreeName?sort=true"
object="?folderTreeNameSort" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#SpecialFolder"
object="?specialFolder" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#IsServer"
object="?isServer" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#IsSecure"
object="?isSecure" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#ServerType"
object="?serverType" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#Synchronize"
object="?synchronize" />
</bindings>
<bindings>
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#FolderTreeName"
object="?folderTreeName" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#FolderTreeName?sort=true"
object="?folderTreeNameSort" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#SpecialFolder"
object="?specialFolder" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#IsServer"
object="?isServer" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#IsSecure"
object="?isSecure" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#ServerType"
object="?serverType" />
<binding subject="?member"
predicate="http://home.netscape.com/NC-rdf#Synchronize"
object="?synchronize" />
</bindings>
<action>
<outlinerchildren>
<outlineritem uri="?member">
<outlinerrow>
<outlinercell label="?folderTreeName"
properties="specialFolder-?specialFolder isServer-?isServer isSecure-?isSecure serverType-?serverType"/>
<outlinercell properties="synchronize-?synchronize isServer-?isServer"/>
</outlinerrow>
</outlineritem>
</outlinerchildren>
</action>
</rule>
</template>
</outlinerbody>
<action>
<outlinerchildren>
<outlineritem uri="?member">
<outlinerrow>
<outlinercell label="?folderTreeName"
properties="specialFolder-?specialFolder isServer-?isServer isSecure-?isSecure serverType-?serverType"/>
<outlinercell properties="synchronize-?synchronize isServer-?isServer"/>
</outlinerrow>
</outlineritem>
</outlinerchildren>
</action>
</rule>
</template>
<outlinercols>
<outlinercol id="folderNameCol" flex="5" persist="hidden width" label="&MsgSelectItems.label;" primary="true" />
<splitter class="tree-splitter"/>

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

@ -307,7 +307,7 @@ function SearchOnClick(event)
var t = event.originalTarget;
if (t.localName == "outlinerbody") {
if (t.localName == "outlinerchildren") {
var row = new Object;
var colID = new Object;
var childElt = new Object;

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

@ -138,7 +138,7 @@ Rights Reserved.
<splitter class="tree-splitter" />
<outlinercol id="messagesCol" label="&messagesHeader.label;" flex="1" width="0" persist="hidden width" />
</outlinercols>
<outlinerbody id="searchOutlinerBody" flex="1" />
<outlinerchildren id="searchOutlinerBody"/>
</outliner>
</hbox>
</deck>

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

@ -40,7 +40,7 @@ function ThreadPaneOnClick(event)
if (t.localName == "outlinercol") {
HandleColumnClick(t.id);
}
else if (event.detail == 2 && t.localName == "outlinerbody") {
else if (event.detail == 2 && t.localName == "outlinerchildren") {
var row = new Object;
var colID = new Object;
var childElt = new Object;

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

@ -31,7 +31,8 @@ Rights Reserved.
<script src="chrome://messenger/content/threadPane.js"/>
<outliner id="threadOutliner" flex="1" enableColumnDrag="true" class="plain"
onkeypress="ThreadPaneKeyPress(event);">
onkeypress="ThreadPaneKeyPress(event);"
onselect="this.outlinerBoxObject.view.selectionChanged();">
<outlinercols>
<outlinercol id="threadCol" display="&threadColumn.label;" class="outlinercol-image threadColumnHeader" currentView="unthreaded" cycler="true" persist="hidden ordinal" fixed="true" />
<outlinercol id="subjectCol" class="sortDirectionIndicator" persist="hidden ordinal width" flex="7" label="&subjectColumn.label;" primary="true"/>
@ -57,9 +58,7 @@ Rights Reserved.
<outlinercol id="totalCol" class="sortDirectionIndicator" persist="hidden ordinal width" flex="1" label="&totalColumn.label;"/>
<outlinercol id="locationCol" class="sortDirectionIndicator" persist="width" flex="1" hidden="true" ignoreincolumnpicker="true" label="&locationColumn.label;"/>
</outlinercols>
<outlinerbody flex="1"
onselect="this.parentNode.outlinerBoxObject.view.selectionChanged();"
ondraggesture="BeginDragThreadPane(event);"/>
<outlinerchildren ondraggesture="BeginDragThreadPane(event);"/>
</outliner>
</overlay>

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

@ -44,7 +44,7 @@
persist="hidden width ordinal" flex="1"/>
<!-- <outlinercol id="certdbkeycol" collapsed="true" flex="1"/> -->
</outlinercols>
<outlinerbody flex="1" ondblclick="viewCerts();"/>
<outlinerchildren ondblclick="viewCerts();"/>
</outliner>
<hbox>
<button id="ca_viewButton"

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

@ -34,8 +34,8 @@
<vbox id="myCerts">
<description>&certmgr.mine;</description>
<separator class="thin"/>
<outliner id="user-outliner" seltype="multiple" enableColumnDrag="true"
onselect="mine_enableButtons()" flex="1">
<outliner id="user-outliner" flex="1" enableColumnDrag="true"
onselect="mine_enableButtons()">
<outlinercols>
<outlinercol id="certcol" label="&certmgr.certname;" primary="true"
persist="hidden width ordinal" flex="1"/>
@ -59,8 +59,7 @@
persist="hidden width ordinal" flex="1"/>
<!-- <outlinercol id="certdbkeycol" collapsed="true" flex="1"/> -->
</outlinercols>
<outlinerbody flex="1" ondblclick="viewCerts();"/>
</outliner>
<outlinerchildren ondblclick="viewCerts();"/>
<hbox>
<button id="mine_viewButton" class="normal"
label="&certmgr.view.label;"

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

@ -47,8 +47,8 @@
<vbox id="othersCerts">
<description>&certmgr.others;</description>
<separator class="thin"/>
<outliner id="email-outliner" seltype="multiple"
onselect="email_enableButtons()" flex="1">
<outliner id="email-outliner" flex="1"
onselect="email_enableButtons()">
<outlinercols>
<outlinercol id="certcol" label="&certmgr.certname;" primary="true"
flex="1"/>
@ -60,7 +60,7 @@
flex="1"/>
<!-- <outlinercol id="certdbkeycol" collapsed="true" flex="1"/> -->
</outlinercols>
<outlinerbody flex="1" ondblclick="viewCerts();"/>
<outlinerchildren flex="1" ondblclick="viewCerts();"/>
</outliner>
<hbox>
<button id="email_viewButton"

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

@ -34,8 +34,8 @@
<vbox id="webCerts">
<description>&certmgr.websites;</description>
<separator class="thin"/>
<outliner id="server-outliner" seltype="multiple" enableColumnDrag="true"
onselect="websites_enableButtons()" flex="1">
<outliner id="server-outliner" flex="1" enableColumnDrag="true"
onselect="websites_enableButtons()">
<outlinercols>
<outlinercol id="certcol" label="&certmgr.certname;" primary="true"
persist="hidden width ordinal" flex="1"/>
@ -44,7 +44,7 @@
persist="hidden width ordinal" flex="1"/>
<!-- <outlinercol id="certdbkeycol" collapsed="true" flex="1"/> -->
</outlinercols>
<outlinerbody flex="1" ondblclick="viewCerts();"/>
<outlinerchildren ondblclick="viewCerts();"/>
</outliner>
<hbox>
<button id="websites_viewButton"

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

@ -38,13 +38,14 @@
</treecolgroup>
<treechildren id="chainDump"/>
</tree>
<outliner class="inset" id="prettyDumpOutliner" style="height:150px">
<outliner id="prettyDumpOutliner" class="inset" style="height:150px"
onselect="displaySelected();">
<outlinercols>
<outlinercol flex ="1" id="certDataCol" label="&certmgr.details.label;"
ignoreincolumnpicker="true" class="header" primary="true"/>
<splitter/>
</outlinercols>
<outlinerbody flex="1" onselect="displaySelected();"/>
<outlinerchildren/>
</outliner>
<label class="header" value="&certmgr.fields.label;"/>
<textbox class="inset" id="certDumpVal" multiline="true" rows="8"

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

@ -43,19 +43,19 @@
* Style rules for generic bookmarks items.
*/
outlinerbody:-moz-outliner-image(Name) {
outlinerchildren:-moz-outliner-image(Name) {
padding-right: 2px;
}
.bookmark-item, outlinerbody:-moz-outliner-image(Name) {
.bookmark-item, outlinerchildren:-moz-outliner-image(Name) {
list-style-image: url("chrome://communicator/skin/bookmarks/bookmark-item.gif");
}
.bookmark-item[container="true"], outlinerbody:-moz-outliner-image(Name, container) {
.bookmark-item[container="true"], outlinerchildren:-moz-outliner-image(Name, container) {
list-style-image: url("chrome://communicator/skin/bookmarks/bookmark-folder-closed.gif");
}
.bookmark-item[container="true"][open="true"], outlinerbody:-moz-outliner-image(Name, open) {
.bookmark-item[container="true"][open="true"], outlinerchildren:-moz-outliner-image(Name, open) {
list-style-image: url("chrome://communicator/skin/bookmarks/bookmark-folder-open.gif");
}

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

@ -40,11 +40,11 @@
/* ::::: file/directory items ::::: */
outlinerbody:-moz-outliner-image(FilenameColumn, directory) {
outlinerchildren:-moz-outliner-image(FilenameColumn, directory) {
list-style-image: url("chrome://global/skin/filepicker/dir-closed.gif");
}
outlinerbody:-moz-outliner-image(FilenameColumn, file) {
outlinerchildren:-moz-outliner-image(FilenameColumn, file) {
list-style-image: url("chrome://global/skin/filepicker/blank.gif");
}

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

@ -37,47 +37,74 @@ outliner {
-moz-border-left-colors: ThreeDShadow ThreeDDarkShadow;
background-color: #EEEEEE;
color: -moz-DialogText;
margin: 0px 4px 0px 4px;
}
/* ::::: outliner rows ::::: */
outlinerbody:-moz-outliner-row {
outlinerchildren:-moz-outliner-row {
border-top: 1px solid -moz-Field;
height: 18px;
}
outlinerbody:-moz-outliner-row(selected, focus) {
outlinerchildren:-moz-outliner-row(selected, focus) {
background-color: Highlight;
}
/* ::::: outliner cells ::::: */
outlinerbody:-moz-outliner-cell {
padding: 0px 0px 0px 2px;
outlinerchildren:-moz-outliner-cell {
padding: 0px 2px 0px 2px;
}
outlinerbody:-moz-outliner-cell-text {
outlinerchildren:-moz-outliner-cell-text {
color: inherit;
}
outlinerbody:-moz-outliner-cell-text(selected) {
outlinerchildren:-moz-outliner-cell-text(selected) {
color: -moz-DialogText;
}
outlinerbody:-moz-outliner-cell-text(selected, focus) {
outlinerchildren:-moz-outliner-cell-text(selected, focus) {
color: HighlightText;
}
outlinerbody:-moz-outliner-cell-text(primary) {
border: 2px solid transparent;
}
outlinerchildren:-moz-outliner-cell-text(primary, drop) {
background-color: Highlight;
color: HighlightText;
}
outlinerchildren:-moz-outliner-cell-text(primary, dropBefore) {
border-top: 2px solid Highlight;
}
outlinerchildren:-moz-outliner-cell-text(selected, primary, dropBefore) {
border-top: 2px solid HighlightText;
}
outlinerchildren:-moz-outliner-cell-text(primary, dropAfter) {
border-bottom: 2px solid Highlight;
}
outlinerchildren:-moz-outliner-cell-text(selected, primary, dropAfter) {
border-bottom: 2px solid HighlightText;
}
/* ::::: lines connecting cells ::::: */
outlinerbody:-moz-outliner-line {
outlinerchildren:-moz-outliner-line {
/* XXX there should be no border on Mac, but outliners currently
paint the line black by default, so I'll just leave this
for now. */
border: 1px dotted grey;
}
outlinerbody:-moz-outliner-separator {
outlinerchildren:-moz-outliner-separator {
border-top: 1px solid ThreeDShadow;
border-bottom: 1px solid ThreeDHighlight;
}
@ -147,11 +174,11 @@ outlinercol[insertbefore="true"] {
-moz-border-left-colors: ThreeDDarkShadow ThreeDShadow;
}
outlinerbody:-moz-outliner-column(insertbefore) {
outlinerchildren:-moz-outliner-column(insertbefore) {
border-left: 1px solid ThreeDShadow;
}
outlinerbody:-moz-outliner-column(insertafter) {
outlinerchildren:-moz-outliner-column(insertafter) {
border-right: 1px solid ThreeDShadow;
}
@ -177,19 +204,19 @@ outlinerbody:-moz-outliner-column(insertafter) {
/* ::::: twisty ::::: */
outlinerbody:-moz-outliner-twisty {
outlinerchildren:-moz-outliner-twisty {
-moz-appearance: treetwisty;
padding-right: 2px;
width: 10px; /* The image's width is 10 pixels */
list-style-image: url("chrome://global/skin/tree/twisty-clsd.gif");
}
outlinerbody:-moz-outliner-twisty(open) {
outlinerchildren:-moz-outliner-twisty(open) {
-moz-appearance: treetwisty;
width: 10px; /* The image's width is 10 pixels */
list-style-image: url("chrome://global/skin/tree/twisty-open.gif");
}
outlinerbody:-moz-outliner-indentation {
outlinerchildren:-moz-outliner-indentation {
width: 16px;
}

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

@ -40,11 +40,11 @@
/* ::::: file/directory items ::::: */
outlinerbody:-moz-outliner-image(FilenameColumn, directory) {
outlinerchildren:-moz-outliner-image(FilenameColumn, directory) {
list-style-image: url("chrome://global/skin/filepicker/dir-closed.gif");
}
outlinerbody:-moz-outliner-image(FilenameColumn, file) {
outlinerchildren:-moz-outliner-image(FilenameColumn, file) {
list-style-image: url("chrome://global/skin/filepicker/blank.gif");
}

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

@ -37,56 +37,83 @@ outliner {
-moz-border-left-colors: ThreeDShadow ThreeDDarkShadow;
background-color: -moz-Field;
color: -moz-FieldText;
margin: 0px 4px 0px 4px;
}
/* ::::: outliner rows ::::: */
outlinerbody:-moz-outliner-row {
outlinerchildren:-moz-outliner-row {
border: 1px solid transparent;
height: 18px;
}
outlinerbody:-moz-outliner-row(selected) {
outlinerchildren:-moz-outliner-row(selected) {
background-color: -moz-Dialog;
}
outlinerbody:-moz-outliner-row(selected, focus) {
outlinerchildren:-moz-outliner-row(selected, focus) {
background-color: Highlight;
}
outlinerbody:-moz-outliner-row(current, focus) {
outlinerchildren:-moz-outliner-row(current, focus) {
border: 1px dotted #F5DB95;
}
/* ::::: outliner cells ::::: */
outlinerbody:-moz-outliner-cell {
padding: 0px 0px 0px 2px;
outlinerchildren:-moz-outliner-cell {
padding: 0px 2px 0px 2px;
}
outlinerbody:-moz-outliner-cell-text {
outlinerchildren:-moz-outliner-cell-text {
color: inherit;
}
outlinerbody:-moz-outliner-cell-text(selected) {
outlinerchildren:-moz-outliner-cell-text(selected) {
color: -moz-DialogText;
}
outlinerbody:-moz-outliner-cell-text(selected, focus) {
outlinerchildren:-moz-outliner-cell-text(selected, focus) {
color: HighlightText;
}
outlinerbody:-moz-outliner-cell-text(primary) {
border: 2px solid transparent;
}
outlinerchildren:-moz-outliner-cell-text(primary, drop) {
background-color: Highlight;
color: HighlightText;
}
outlinerchildren:-moz-outliner-cell-text(primary, dropBefore) {
border-top: 2px solid Highlight;
}
outlinerchildren:-moz-outliner-cell-text(selected, primary, dropBefore) {
border-top: 2px solid HighlightText;
}
outlinerchildren:-moz-outliner-cell-text(primary, dropAfter) {
border-bottom: 2px solid Highlight;
}
outlinerchildren:-moz-outliner-cell-text(selected, primary, dropAfter) {
border-bottom: 2px solid HighlightText;
}
/* ::::: lines connecting cells ::::: */
outlinerbody:-moz-outliner-line {
outlinerchildren:-moz-outliner-line {
border: 1px dotted ThreeDShadow;
}
outlinerbody:-moz-outliner-line(selected, focus) {
outlinerchildren:-moz-outliner-line(selected, focus) {
border: 1px dotted HighlightText;
}
outlinerbody:-moz-outliner-separator {
outlinerchildren:-moz-outliner-separator {
border-top: 1px solid ThreeDShadow;
border-bottom: 1px solid ThreeDHighlight;
}
@ -153,11 +180,11 @@ outlinercol[insertbefore="true"] {
-moz-border-left-colors: ThreeDDarkShadow ThreeDShadow;
}
outlinerbody:-moz-outliner-column(insertbefore) {
outlinerchildren:-moz-outliner-column(insertbefore) {
border-left: 1px solid ThreeDShadow;
}
outlinerbody:-moz-outliner-column(insertafter) {
outlinerchildren:-moz-outliner-column(insertafter) {
border-right: 1px solid ThreeDShadow;
}
@ -183,17 +210,17 @@ outlinerbody:-moz-outliner-column(insertafter) {
/* ::::: twisty ::::: */
outlinerbody:-moz-outliner-twisty {
outlinerchildren:-moz-outliner-twisty {
padding-right: 2px;
width: 10px; /* The image's width is 10 pixels */
list-style-image: url("chrome://global/skin/tree/twisty-clsd.gif");
}
outlinerbody:-moz-outliner-twisty(open) {
outlinerchildren:-moz-outliner-twisty(open) {
width: 10px; /* The image's width is 10 pixels */
list-style-image: url("chrome://global/skin/tree/twisty-open.gif");
}
outlinerbody:-moz-outliner-indentation {
outlinerchildren:-moz-outliner-indentation {
width: 16px;
}

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

@ -37,12 +37,12 @@
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
outlinerbody:-moz-outliner-image(GeneratedName) {
outlinerchildren:-moz-outliner-image(GeneratedName) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/addressbook/icons/abcard.gif");
}
outlinerbody:-moz-outliner-image(GeneratedName, MailList) {
outlinerchildren:-moz-outliner-image(GeneratedName, MailList) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/addressbook/icons/ablist.gif");
}

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

@ -31,150 +31,147 @@
/* ::::: mail folder ::::: */
outlinerbody:-moz-outliner-image(folderNameCol) {
outlinerchildren:-moz-outliner-image(folderNameCol) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/folder-closed.gif");
}
outlinerbody:-moz-outliner-image(folderNameCol, newMessages-true) {
outlinerchildren:-moz-outliner-image(folderNameCol, newMessages-true) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/folder-new-closed.gif");
}
/* ..... Inbox ..... */
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Inbox) {
outlinerchildren:-moz-outliner-image(folderNameCol, specialFolder-Inbox) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/folder-inbox.gif");
}
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Inbox, newMessages-true) {
outlinerchildren:-moz-outliner-image(folderNameCol, specialFolder-Inbox, newMessages-true) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/folder-inbox-new.gif");
}
/* ..... Sent ..... */
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Sent) {
outlinerchildren:-moz-outliner-image(folderNameCol, specialFolder-Sent) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/folder-sent.gif");
}
/* ..... Unsent ..... */
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Unsent Messages) {
outlinerchildren:-moz-outliner-image(folderNameCol, specialFolder-Unsent Messages) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/folder-outbox.gif");
}
/* ..... Drafts ..... */
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Drafts) {
outlinerchildren:-moz-outliner-image(folderNameCol, specialFolder-Drafts) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/folder-draft.gif");
}
/* ..... Templates ..... */
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Templates) {
outlinerchildren:-moz-outliner-image(folderNameCol, specialFolder-Templates) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/folder-template.gif");
}
/* ..... Trash ..... */
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Trash) {
outlinerchildren:-moz-outliner-image(folderNameCol, specialFolder-Trash) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/folder-trash.gif");
}
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true) {
outlinerchildren:-moz-outliner-image(folderNameCol, isServer-true) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/server-mail.gif");
}
outlinerbody:-moz-outliner-image(folderNameCol, biffState-NewMail, isServer-true) {
outlinerchildren:-moz-outliner-image(folderNameCol, biffState-NewMail, isServer-true) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/server-mail-new.gif");
}
outlinerbody:-moz-outliner-cell-text(folderNameCol, newMessages-true),
outlinerbody:-moz-outliner-cell-text(folderNameCol, specialFolder-Inbox, newMessages-true) {
outlinerchildren:-moz-outliner-cell-text(folderNameCol, newMessages-true),
outlinerchildren:-moz-outliner-cell-text(folderNameCol, specialFolder-Inbox, newMessages-true) {
font-weight: bold;
}
/* ..... Server Folders ..... */
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true, serverType-pop3, isSecure-true) {
outlinerchildren:-moz-outliner-image(folderNameCol, isServer-true, serverType-pop3, isSecure-true) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/server-remote-lock.gif");
}
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true, serverType-imap, isSecure-true) {
outlinerchildren:-moz-outliner-image(folderNameCol, isServer-true, serverType-imap, isSecure-true) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/server-remote-lock.gif");
}
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true, serverType-none) {
outlinerchildren:-moz-outliner-image(folderNameCol, isServer-true, serverType-none) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/server-local.gif");
}
/* ..... News Folders ..... */
outlinerbody:-moz-outliner-image(folderNameCol, serverType-nntp) {
outlinerchildren:-moz-outliner-image(folderNameCol, serverType-nntp) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/folder-newsgroup.gif");
}
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true, serverType-nntp) {
outlinerchildren:-moz-outliner-image(folderNameCol, isServer-true, serverType-nntp) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/server-news.gif");
}
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true, serverType-nntp, isSecure-true) {
outlinerchildren:-moz-outliner-image(folderNameCol, isServer-true, serverType-nntp, isSecure-true) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/server-news-lock.gif");
}
/* ::::: All Servers ::::: */
outlinerbody:-moz-outliner-cell-text(closed, subfoldersHaveUnreadMessages-true)
outlinerchildren:-moz-outliner-cell-text(closed, subfoldersHaveUnreadMessages-true)
{
font-weight: bold;
}
outlinerbody:-moz-outliner-cell-text(folderNameCol, isServer-true),
outlinerbody:-moz-outliner-cell-text(hasUnreadMessages-true) {
outlinerchildren:-moz-outliner-cell-text(folderNameCol, isServer-true),
outlinerchildren:-moz-outliner-cell-text(hasUnreadMessages-true) {
font-weight: bold;
}
outlinerbody:-moz-outliner-cell-text(folderNameCol, noSelect-true) {
outlinerchildren:-moz-outliner-cell-text(folderNameCol, noSelect-true) {
color: gray;
font-style: italic;
}
#folder-panel {
min-width: 10px;
}
#folderTree {
border: none;
}
.tree-folder-checkbox {
list-style-image: none;
}
outlinerbody:-moz-outliner-image(syncCol) {
outlinerchildren:-moz-outliner-image(syncCol) {
list-style-image: url("chrome://messenger/skin/icons/dot.gif");
}
outlinerbody:-moz-outliner-image(syncCol, synchronize-true) {
outlinerchildren:-moz-outliner-image(syncCol, synchronize-true) {
list-style-image: url("chrome://messenger/skin/icons/check.gif");
}
outlinerbody:-moz-outliner-image(syncCol, isServer-true) {
outlinerchildren:-moz-outliner-image(syncCol, isServer-true) {
list-style-image: none;
}
#folderUnreadCol,
#folderTotalCol {
text-align: right;
}

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

@ -194,24 +194,24 @@
/* ::::: autocomplete icons ::::: */
outlinerbody:-moz-outliner-cell-text(default-match) {
outlinerchildren:-moz-outliner-cell-text(default-match) {
margin: 2px -3px 2px 15px;
border: none;
}
outlinerbody:-moz-outliner-image(local-abook) {
outlinerchildren:-moz-outliner-image(local-abook) {
margin: 2px -1px 2px 4px;
border: none;
list-style-image: url("chrome://messenger/skin/addressbook/icons/addrbook.gif");
}
outlinerbody:-moz-outliner-image(remote-abook) {
outlinerchildren:-moz-outliner-image(remote-abook) {
margin: 2px -3px 2px 2px;
border: none;
list-style-image: url("chrome://messenger/skin/addressbook/icons/remote-addrbook.gif");
}
outlinerbody:-moz-outliner-image(remote-err) {
outlinerchildren:-moz-outliner-image(remote-err) {
margin: 2px -3px 2px 2px;
border: none;
list-style-image: url("chrome://messenger/skin/addressbook/icons/remote-addrbook-error.gif");

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

@ -75,16 +75,16 @@
/* ::::: for search in subscribe ::::: */
outlinerbody:-moz-outliner-image(nameCol, nntp) {
outlinerchildren:-moz-outliner-image(nameCol, nntp) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/folder-newsgroup.gif");
}
outlinerbody:-moz-outliner-image(subscribedCol) {
outlinerchildren:-moz-outliner-image(subscribedCol) {
list-style-image: url("chrome://messenger/skin/icons/dot.gif");
}
outlinerbody:-moz-outliner-image(subscribedCol, subscribed) {
outlinerchildren:-moz-outliner-image(subscribedCol, subscribed) {
list-style-image: url("chrome://messenger/skin/icons/check.gif");
}

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

@ -30,18 +30,18 @@
/* ::::: thread decoration ::::: */
outlinerbody:-moz-outliner-cell-text(read) {
outlinerchildren:-moz-outliner-cell-text(read) {
font-weight: normal;
}
outlinerbody:-moz-outliner-cell-text(unread) {
outlinerchildren:-moz-outliner-cell-text(unread) {
font-weight: bold;
}
/* on a collapsed thread, if the top level message is read, but the thread has
* unread children, underline the text. 4.x mac did this, very slick
*/
outlinerbody:-moz-outliner-cell-text(container, closed, hasUnread, read) {
outlinerchildren:-moz-outliner-cell-text(container, closed, hasUnread, read) {
text-decoration: underline;
}
@ -50,27 +50,27 @@ outlinerbody:-moz-outliner-cell-text(container, closed, hasUnread, read) {
**** Priority colors currently not being used at the moment. It has been
**** disabled so as to not conflict with the labels color feature.
****
outlinerbody:-moz-outliner-cell-text(priorityCol, priority-highest) {
outlinerchildren:-moz-outliner-cell-text(priorityCol, priority-highest) {
color: red;
}
outlinerbody:-moz-outliner-cell-text(priorityCol, priority-high) {
outlinerchildren:-moz-outliner-cell-text(priorityCol, priority-high) {
color: rgb(128, 0, 0);
}
outlinerbody:-moz-outliner-cell-text(priorityCol, priority-lowest) {
outlinerchildren:-moz-outliner-cell-text(priorityCol, priority-lowest) {
color: rgb(170, 170, 170);
}
outlinerbody:-moz-outliner-cell-text(priorityCol, priority-low) {
outlinerchildren:-moz-outliner-cell-text(priorityCol, priority-low) {
color: rgb(85, 85, 85);
}
outlinerbody:-moz-outliner-cell-text(priorityCol, selected) {
outlinerchildren:-moz-outliner-cell-text(priorityCol, selected) {
color: -moz-DialogText;
}
outlinerbody:-moz-outliner-cell-text(priorityCol, selected, focus) {
outlinerchildren:-moz-outliner-cell-text(priorityCol, selected, focus) {
color: HighlightText;
}
****/
@ -93,19 +93,19 @@ outlinercol.threadColumnHeader[sortDirection="descending"] {
list-style-image: url("chrome://messenger/skin/icons/threadcol.gif");
}
outlinerbody:-moz-outliner-image(threadCol, container) {
outlinerchildren:-moz-outliner-image(threadCol, container) {
list-style-image: url("chrome://messenger/skin/icons/thread-closed.gif");
}
outlinerbody:-moz-outliner-image(threadCol, container, open) {
outlinerchildren:-moz-outliner-image(threadCol, container, open) {
list-style-image: url("chrome://messenger/skin/icons/thread-open.gif");
}
outlinerbody:-moz-outliner-image(threadCol, container, hasUnread) {
outlinerchildren:-moz-outliner-image(threadCol, container, hasUnread) {
list-style-image: url("chrome://messenger/skin/icons/thread-new-closed.gif");
}
outlinerbody:-moz-outliner-image(threadCol, container, hasUnread, open) {
outlinerchildren:-moz-outliner-image(threadCol, container, hasUnread, open) {
list-style-image: url("chrome://messenger/skin/icons/thread-new-open.gif");
}
@ -115,11 +115,11 @@ outlinercol.readColumnHeader {
list-style-image: url("chrome://messenger/skin/icons/readcol.gif");
}
outlinerbody:-moz-outliner-image(unreadButtonColHeader) {
outlinerchildren:-moz-outliner-image(unreadButtonColHeader) {
list-style-image: url("chrome://messenger/skin/icons/readmail.gif");
}
outlinerbody:-moz-outliner-image(unreadButtonColHeader, unread) {
outlinerchildren:-moz-outliner-image(unreadButtonColHeader, unread) {
list-style-image: url("chrome://messenger/skin/icons/unreadmail.gif");
}
@ -129,68 +129,74 @@ outlinercol.flagColumnHeader {
list-style-image: url("chrome://messenger/skin/icons/flagcol.gif");
}
outlinerbody:-moz-outliner-image(flaggedCol) {
outlinerchildren:-moz-outliner-image(flaggedCol) {
list-style-image: url("chrome://messenger/skin/icons/readmail.gif");
}
outlinerbody:-moz-outliner-image(flaggedCol, flagged) {
outlinerchildren:-moz-outliner-image(flaggedCol, flagged) {
list-style-image: url("chrome://messenger/skin/icons/flaggedmail.gif");
}
/* ..... subject column ..... */
outlinerbody:-moz-outliner-image(subjectCol) {
outlinerchildren:-moz-outliner-image(subjectCol) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/message-mail.gif");
}
outlinerbody:-moz-outliner-image(subjectCol, new) {
outlinerchildren:-moz-outliner-image(subjectCol, new) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/message-mail-new.gif");
}
outlinerbody:-moz-outliner-image(subjectCol, attach) {
outlinerchildren:-moz-outliner-image(subjectCol, attach) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/message-mail-attach.gif");
}
outlinerbody:-moz-outliner-image(subjectCol, imapdeleted) {
outlinerchildren:-moz-outliner-image(subjectCol, imapdeleted) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/message-mail-imapdelete.gif");
}
outlinerbody:-moz-outliner-image(subjectCol, offline) {
outlinerchildren:-moz-outliner-image(subjectCol, offline) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/message-mail-offl.gif");
}
outlinerbody:-moz-outliner-image(subjectCol, new, offline) {
outlinerchildren:-moz-outliner-image(subjectCol, new, offline) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/message-mail-new-offl.gif");
}
outlinerbody:-moz-outliner-image(subjectCol, attach, offline) {
outlinerchildren:-moz-outliner-image(subjectCol, attach, offline) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/message-mail-attach-offl.gif");
}
outlinerbody:-moz-outliner-image(subjectCol, imapdeleted, offline) {
outlinerchildren:-moz-outliner-image(subjectCol, imapdeleted, offline) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/message-mail-imapdel-offl.gif");
}
outlinerbody:-moz-outliner-image(subjectCol, news) {
outlinerchildren:-moz-outliner-image(subjectCol, news) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/message-news.gif");
}
outlinerbody:-moz-outliner-image(subjectCol, news, new) {
outlinerchildren:-moz-outliner-image(subjectCol, news, new) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/message-news-new.gif");
}
outlinerbody:-moz-outliner-image(subjectCol, news, attach) {
outlinerchildren:-moz-outliner-image(subjectCol, news, attach) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/message-news-attach.gif");
}
#sizeCol,
#unreadCol,
#totalCol {
text-align: right;
}

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

@ -53,510 +53,510 @@
color: #FF0000;
color: rgb(128, 0, 0);
*/
outlinerbody:-moz-outliner-cell-text(lc-FFFFFF) {
outlinerchildren:-moz-outliner-cell-text(lc-FFFFFF) {
color: #FFFFFF
}
outlinerbody:-moz-outliner-row(lc-FFFFFF, selected) {
outlinerchildren:-moz-outliner-row(lc-FFFFFF, selected) {
background-color: #FFFFFF;
}
outlinerbody:-moz-outliner-cell-text(lc-CCCCCC) {
outlinerchildren:-moz-outliner-cell-text(lc-CCCCCC) {
color: #CCCCCC
}
outlinerbody:-moz-outliner-row(lc-CCCCCC, selected) {
outlinerchildren:-moz-outliner-row(lc-CCCCCC, selected) {
background-color: #CCCCCC;
}
outlinerbody:-moz-outliner-cell-text(lc-C0C0C0) {
outlinerchildren:-moz-outliner-cell-text(lc-C0C0C0) {
color: #C0C0C0
}
outlinerbody:-moz-outliner-row(lc-C0C0C0, selected) {
outlinerchildren:-moz-outliner-row(lc-C0C0C0, selected) {
background-color: #C0C0C0;
}
outlinerbody:-moz-outliner-cell-text(lc-999999) {
outlinerchildren:-moz-outliner-cell-text(lc-999999) {
color: #999999
}
outlinerbody:-moz-outliner-row(lc-999999, selected) {
outlinerchildren:-moz-outliner-row(lc-999999, selected) {
background-color: #999999;
}
outlinerbody:-moz-outliner-cell-text(lc-666666) {
outlinerchildren:-moz-outliner-cell-text(lc-666666) {
color: #666666
}
outlinerbody:-moz-outliner-row(lc-666666, selected) {
outlinerchildren:-moz-outliner-row(lc-666666, selected) {
background-color: #666666;
}
outlinerbody:-moz-outliner-cell-text(lc-333333) {
outlinerchildren:-moz-outliner-cell-text(lc-333333) {
color: #333333
}
outlinerbody:-moz-outliner-row(lc-333333, selected) {
outlinerchildren:-moz-outliner-row(lc-333333, selected) {
background-color: #333333;
}
outlinerbody:-moz-outliner-cell-text(lc-000000) {
outlinerchildren:-moz-outliner-cell-text(lc-000000) {
color: #000000
}
outlinerbody:-moz-outliner-row(lc-000000, selected) {
outlinerchildren:-moz-outliner-row(lc-000000, selected) {
background-color: #000000;
}
outlinerbody:-moz-outliner-cell-text(lc-FFCCCC) {
outlinerchildren:-moz-outliner-cell-text(lc-FFCCCC) {
color: #FFCCCC
}
outlinerbody:-moz-outliner-row(lc-FFCCCC, selected) {
outlinerchildren:-moz-outliner-row(lc-FFCCCC, selected) {
background-color: #FFCCCC;
}
outlinerbody:-moz-outliner-cell-text(lc-FF6666) {
outlinerchildren:-moz-outliner-cell-text(lc-FF6666) {
color: #FF6666
}
outlinerbody:-moz-outliner-row(lc-FF6666, selected) {
outlinerchildren:-moz-outliner-row(lc-FF6666, selected) {
background-color: #FF6666;
}
outlinerbody:-moz-outliner-cell-text(lc-FF0000) {
outlinerchildren:-moz-outliner-cell-text(lc-FF0000) {
color: #FF0000
}
outlinerbody:-moz-outliner-row(lc-FF0000, selected) {
outlinerchildren:-moz-outliner-row(lc-FF0000, selected) {
background-color: #FF0000;
}
outlinerbody:-moz-outliner-cell-text(lc-CC0000) {
outlinerchildren:-moz-outliner-cell-text(lc-CC0000) {
color: #CC0000
}
outlinerbody:-moz-outliner-row(lc-CC0000, selected) {
outlinerchildren:-moz-outliner-row(lc-CC0000, selected) {
background-color: #CC0000;
}
outlinerbody:-moz-outliner-cell-text(lc-990000) {
outlinerchildren:-moz-outliner-cell-text(lc-990000) {
color: #990000
}
outlinerbody:-moz-outliner-row(lc-990000, selected) {
outlinerchildren:-moz-outliner-row(lc-990000, selected) {
background-color: #990000;
}
outlinerbody:-moz-outliner-cell-text(lc-660000) {
outlinerchildren:-moz-outliner-cell-text(lc-660000) {
color: #660000
}
outlinerbody:-moz-outliner-row(lc-660000, selected) {
outlinerchildren:-moz-outliner-row(lc-660000, selected) {
background-color: #660000;
}
outlinerbody:-moz-outliner-cell-text(lc-330000) {
outlinerchildren:-moz-outliner-cell-text(lc-330000) {
color: #330000
}
outlinerbody:-moz-outliner-row(lc-330000, selected) {
outlinerchildren:-moz-outliner-row(lc-330000, selected) {
background-color: #330000;
}
outlinerbody:-moz-outliner-cell-text(lc-FFCC99) {
outlinerchildren:-moz-outliner-cell-text(lc-FFCC99) {
color: #FFCC99
}
outlinerbody:-moz-outliner-row(lc-FFCC99, selected) {
outlinerchildren:-moz-outliner-row(lc-FFCC99, selected) {
background-color: #FFCC99;
}
outlinerbody:-moz-outliner-cell-text(lc-FF9966) {
outlinerchildren:-moz-outliner-cell-text(lc-FF9966) {
color: #FF9966
}
outlinerbody:-moz-outliner-row(lc-FF9966, selected) {
outlinerchildren:-moz-outliner-row(lc-FF9966, selected) {
background-color: #FF9966;
}
outlinerbody:-moz-outliner-cell-text(lc-FF9900) {
outlinerchildren:-moz-outliner-cell-text(lc-FF9900) {
color: #FF9900
}
outlinerbody:-moz-outliner-row(lc-FF9900, selected) {
outlinerchildren:-moz-outliner-row(lc-FF9900, selected) {
background-color: #FF9900;
}
outlinerbody:-moz-outliner-cell-text(lc-FF6600) {
outlinerchildren:-moz-outliner-cell-text(lc-FF6600) {
color: #FF6600
}
outlinerbody:-moz-outliner-row(lc-FF6600, selected) {
outlinerchildren:-moz-outliner-row(lc-FF6600, selected) {
background-color: #FF6600;
}
outlinerbody:-moz-outliner-cell-text(lc-CC6600) {
outlinerchildren:-moz-outliner-cell-text(lc-CC6600) {
color: #CC6600
}
outlinerbody:-moz-outliner-row(lc-CC6600, selected) {
outlinerchildren:-moz-outliner-row(lc-CC6600, selected) {
background-color: #CC6600;
}
outlinerbody:-moz-outliner-cell-text(lc-993300) {
outlinerchildren:-moz-outliner-cell-text(lc-993300) {
color: #993300
}
outlinerbody:-moz-outliner-row(lc-993300, selected) {
outlinerchildren:-moz-outliner-row(lc-993300, selected) {
background-color: #993300;
}
outlinerbody:-moz-outliner-cell-text(lc-663300) {
outlinerchildren:-moz-outliner-cell-text(lc-663300) {
color: #663300
}
outlinerbody:-moz-outliner-row(lc-663300, selected) {
outlinerchildren:-moz-outliner-row(lc-663300, selected) {
background-color: #663300;
}
outlinerbody:-moz-outliner-cell-text(lc-FFFF99) {
outlinerchildren:-moz-outliner-cell-text(lc-FFFF99) {
color: #FFFF99
}
outlinerbody:-moz-outliner-row(lc-FFFF99, selected) {
outlinerchildren:-moz-outliner-row(lc-FFFF99, selected) {
background-color: #FFFF99;
}
outlinerbody:-moz-outliner-cell-text(lc-FFFF66) {
outlinerchildren:-moz-outliner-cell-text(lc-FFFF66) {
color: #FFFF66
}
outlinerbody:-moz-outliner-row(lc-FFFF66, selected) {
outlinerchildren:-moz-outliner-row(lc-FFFF66, selected) {
background-color: #FFFF66;
}
outlinerbody:-moz-outliner-cell-text(lc-FFCC66) {
outlinerchildren:-moz-outliner-cell-text(lc-FFCC66) {
color: #FFCC66
}
outlinerbody:-moz-outliner-row(lc-FFCC66, selected) {
outlinerchildren:-moz-outliner-row(lc-FFCC66, selected) {
background-color: #FFCC66;
}
outlinerbody:-moz-outliner-cell-text(lc-FFCC33) {
outlinerchildren:-moz-outliner-cell-text(lc-FFCC33) {
color: #FFCC33
}
outlinerbody:-moz-outliner-row(lc-FFCC33, selected) {
outlinerchildren:-moz-outliner-row(lc-FFCC33, selected) {
background-color: #FFCC33;
}
outlinerbody:-moz-outliner-cell-text(lc-CC9933) {
outlinerchildren:-moz-outliner-cell-text(lc-CC9933) {
color: #CC9933
}
outlinerbody:-moz-outliner-row(lc-CC9933, selected) {
outlinerchildren:-moz-outliner-row(lc-CC9933, selected) {
background-color: #CC9933;
}
outlinerbody:-moz-outliner-cell-text(lc-996633) {
outlinerchildren:-moz-outliner-cell-text(lc-996633) {
color: #996633
}
outlinerbody:-moz-outliner-row(lc-996633, selected) {
outlinerchildren:-moz-outliner-row(lc-996633, selected) {
background-color: #996633;
}
outlinerbody:-moz-outliner-cell-text(lc-663333) {
outlinerchildren:-moz-outliner-cell-text(lc-663333) {
color: #663333
}
outlinerbody:-moz-outliner-row(lc-663333, selected) {
outlinerchildren:-moz-outliner-row(lc-663333, selected) {
background-color: #663333;
}
outlinerbody:-moz-outliner-cell-text(lc-FFFFCC) {
outlinerchildren:-moz-outliner-cell-text(lc-FFFFCC) {
color: #FFFFCC
}
outlinerbody:-moz-outliner-row(lc-FFFFCC, selected) {
outlinerchildren:-moz-outliner-row(lc-FFFFCC, selected) {
background-color: #FFFFCC;
}
outlinerbody:-moz-outliner-cell-text(lc-FFFF33) {
outlinerchildren:-moz-outliner-cell-text(lc-FFFF33) {
color: #FFFF33
}
outlinerbody:-moz-outliner-row(lc-FFFF33, selected) {
outlinerchildren:-moz-outliner-row(lc-FFFF33, selected) {
background-color: #FFFF33;
}
outlinerbody:-moz-outliner-cell-text(lc-FFFF00) {
outlinerchildren:-moz-outliner-cell-text(lc-FFFF00) {
color: #FFFF00
}
outlinerbody:-moz-outliner-row(lc-FFFF00, selected) {
outlinerchildren:-moz-outliner-row(lc-FFFF00, selected) {
background-color: #FFFF00;
}
outlinerbody:-moz-outliner-cell-text(lc-FFCC00) {
outlinerchildren:-moz-outliner-cell-text(lc-FFCC00) {
color: #FFCC00
}
outlinerbody:-moz-outliner-row(lc-FFCC00, selected) {
outlinerchildren:-moz-outliner-row(lc-FFCC00, selected) {
background-color: #FFCC00;
}
outlinerbody:-moz-outliner-cell-text(lc-999900) {
outlinerchildren:-moz-outliner-cell-text(lc-999900) {
color: #999900
}
outlinerbody:-moz-outliner-row(lc-999900, selected) {
outlinerchildren:-moz-outliner-row(lc-999900, selected) {
background-color: #999900;
}
outlinerbody:-moz-outliner-cell-text(lc-666600) {
outlinerchildren:-moz-outliner-cell-text(lc-666600) {
color: #666600
}
outlinerbody:-moz-outliner-row(lc-666600, selected) {
outlinerchildren:-moz-outliner-row(lc-666600, selected) {
background-color: #666600;
}
outlinerbody:-moz-outliner-cell-text(lc-333300) {
outlinerchildren:-moz-outliner-cell-text(lc-333300) {
color: #333300
}
outlinerbody:-moz-outliner-row(lc-333300, selected) {
outlinerchildren:-moz-outliner-row(lc-333300, selected) {
background-color: #333300;
}
outlinerbody:-moz-outliner-cell-text(lc-99FF99) {
outlinerchildren:-moz-outliner-cell-text(lc-99FF99) {
color: #99FF99
}
outlinerbody:-moz-outliner-row(lc-99FF99, selected) {
outlinerchildren:-moz-outliner-row(lc-99FF99, selected) {
background-color: #99FF99;
}
outlinerbody:-moz-outliner-cell-text(lc-66FF99) {
outlinerchildren:-moz-outliner-cell-text(lc-66FF99) {
color: #66FF99
}
outlinerbody:-moz-outliner-row(lc-66FF99, selected) {
outlinerchildren:-moz-outliner-row(lc-66FF99, selected) {
background-color: #66FF99;
}
outlinerbody:-moz-outliner-cell-text(lc-33FF33) {
outlinerchildren:-moz-outliner-cell-text(lc-33FF33) {
color: #33FF33
}
outlinerbody:-moz-outliner-row(lc-33FF33, selected) {
outlinerchildren:-moz-outliner-row(lc-33FF33, selected) {
background-color: #33FF33;
}
outlinerbody:-moz-outliner-cell-text(lc-33CC00) {
outlinerchildren:-moz-outliner-cell-text(lc-33CC00) {
color: #33CC00
}
outlinerbody:-moz-outliner-row(lc-33CC00, selected) {
outlinerchildren:-moz-outliner-row(lc-33CC00, selected) {
background-color: #33CC00;
}
outlinerbody:-moz-outliner-cell-text(lc-009900) {
outlinerchildren:-moz-outliner-cell-text(lc-009900) {
color: #009900
}
outlinerbody:-moz-outliner-row(lc-009900, selected) {
outlinerchildren:-moz-outliner-row(lc-009900, selected) {
background-color: #009900;
}
outlinerbody:-moz-outliner-cell-text(lc-006600) {
outlinerchildren:-moz-outliner-cell-text(lc-006600) {
color: #006600
}
outlinerbody:-moz-outliner-row(lc-006600, selected) {
outlinerchildren:-moz-outliner-row(lc-006600, selected) {
background-color: #006600;
}
outlinerbody:-moz-outliner-cell-text(lc-003300) {
outlinerchildren:-moz-outliner-cell-text(lc-003300) {
color: #003300
}
outlinerbody:-moz-outliner-row(lc-003300, selected) {
outlinerchildren:-moz-outliner-row(lc-003300, selected) {
background-color: #003300;
}
outlinerbody:-moz-outliner-cell-text(lc-99FFFF) {
outlinerchildren:-moz-outliner-cell-text(lc-99FFFF) {
color: #99FFFF
}
outlinerbody:-moz-outlinerrow(lc-99FFFF, selected) {
outlinerchildren:-moz-outlinerrow(lc-99FFFF, selected) {
background-color: #99FFFF;
}
outlinerbody:-moz-outliner-cell-text(lc-33FFFF) {
outlinerchildren:-moz-outliner-cell-text(lc-33FFFF) {
color: #33FFFF
}
outlinerbody:-moz-outliner-row(lc-33FFFF, selected) {
outlinerchildren:-moz-outliner-row(lc-33FFFF, selected) {
background-color: #33FFFF;
}
outlinerbody:-moz-outliner-cell-text(lc-66CCCC) {
outlinerchildren:-moz-outliner-cell-text(lc-66CCCC) {
color: #66CCCC
}
outlinerbody:-moz-outliner-row(lc-66CCCC, selected) {
outlinerchildren:-moz-outliner-row(lc-66CCCC, selected) {
background-color: #66CCCC;
}
outlinerbody:-moz-outliner-cell-text(lc-00CCCC) {
outlinerchildren:-moz-outliner-cell-text(lc-00CCCC) {
color: #00CCCC
}
outlinerbody:-moz-outliner-row(lc-00CCCC, selected) {
outlinerchildren:-moz-outliner-row(lc-00CCCC, selected) {
background-color: #00CCCC;
}
outlinerbody:-moz-outliner-cell-text(lc-339999) {
outlinerchildren:-moz-outliner-cell-text(lc-339999) {
color: #339999
}
outlinerbody:-moz-outliner-row(lc-339999, selected) {
outlinerchildren:-moz-outliner-row(lc-339999, selected) {
background-color: #339999;
}
outlinerbody:-moz-outliner-cell-text(lc-336666) {
outlinerchildren:-moz-outliner-cell-text(lc-336666) {
color: #336666
}
outlinerbody:-moz-outliner-row(lc-336666, selected) {
outlinerchildren:-moz-outliner-row(lc-336666, selected) {
background-color: #336666;
}
outlinerbody:-moz-outliner-cell-text(lc-003333) {
outlinerchildren:-moz-outliner-cell-text(lc-003333) {
color: #003333
}
outlinerbody:-moz-outliner-row(lc-003333, selected) {
outlinerchildren:-moz-outliner-row(lc-003333, selected) {
background-color: #003333;
}
outlinerbody:-moz-outliner-cell-text(lc-CCFFFF) {
outlinerchildren:-moz-outliner-cell-text(lc-CCFFFF) {
color: #CCFFFF
}
outlinerbody:-moz-outliner-row(lc-CCFFFF, selected) {
outlinerchildren:-moz-outliner-row(lc-CCFFFF, selected) {
background-color: #CCFFFF;
}
outlinerbody:-moz-outliner-cell-text(lc-66FFFF) {
outlinerchildren:-moz-outliner-cell-text(lc-66FFFF) {
color: #66FFFF
}
outlinerbody:-moz-outliner-row(lc-66FFFF, selected) {
outlinerchildren:-moz-outliner-row(lc-66FFFF, selected) {
background-color: #66FFFF;
}
outlinerbody:-moz-outliner-cell-text(lc-33CCFF) {
outlinerchildren:-moz-outliner-cell-text(lc-33CCFF) {
color: #33CCFF
}
outlinerbody:-moz-outliner-row(lc-33CCFF, selected) {
outlinerchildren:-moz-outliner-row(lc-33CCFF, selected) {
background-color: #33CCFF;
}
outlinerbody:-moz-outliner-cell-text(lc-3366FF) {
outlinerchildren:-moz-outliner-cell-text(lc-3366FF) {
color: #3366FF
}
outlinerbody:-moz-outliner-row(lc-3366FF, selected) {
outlinerchildren:-moz-outliner-row(lc-3366FF, selected) {
background-color: #3366FF;
}
outlinerbody:-moz-outliner-cell-text(lc-3333FF) {
outlinerchildren:-moz-outliner-cell-text(lc-3333FF) {
color: #3333FF
}
outlinerbody:-moz-outliner-row(lc-3333FF, selected) {
outlinerchildren:-moz-outliner-row(lc-3333FF, selected) {
background-color: #3333FF;
}
outlinerbody:-moz-outliner-cell-text(lc-000099) {
outlinerchildren:-moz-outliner-cell-text(lc-000099) {
color: #000099
}
outlinerbody:-moz-outliner-row(lc-000099, selected) {
outlinerchildren:-moz-outliner-row(lc-000099, selected) {
background-color: #000099;
}
outlinerbody:-moz-outliner-cell-text(lc-000066) {
outlinerchildren:-moz-outliner-cell-text(lc-000066) {
color: #000066
}
outlinerbody:-moz-outliner-row(lc-000066, selected) {
outlinerchildren:-moz-outliner-row(lc-000066, selected) {
background-color: #000066;
}
outlinerbody:-moz-outliner-cell-text(lc-CCCCFF) {
outlinerchildren:-moz-outliner-cell-text(lc-CCCCFF) {
color: #CCCCFF
}
outlinerbody:-moz-outliner-row(lc-CCCCFF, selected) {
outlinerchildren:-moz-outliner-row(lc-CCCCFF, selected) {
background-color: #CCCCFF;
}
outlinerbody:-moz-outliner-cell-text(lc-9999FF) {
outlinerchildren:-moz-outliner-cell-text(lc-9999FF) {
color: #9999FF
}
outlinerbody:-moz-outliner-row(lc-9999FF, selected) {
outlinerchildren:-moz-outliner-row(lc-9999FF, selected) {
background-color: #9999FF;
}
outlinerbody:-moz-outliner-cell-text(lc-6666CC) {
outlinerchildren:-moz-outliner-cell-text(lc-6666CC) {
color: #6666CC
}
outlinerbody:-moz-outliner-row(lc-6666CC, selected) {
outlinerchildren:-moz-outliner-row(lc-6666CC, selected) {
background-color: #6666CC;
}
outlinerbody:-moz-outliner-cell-text(lc-6633FF) {
outlinerchildren:-moz-outliner-cell-text(lc-6633FF) {
color: #6633FF
}
outlinerbody:-moz-outliner-row(lc-6633FF, selected) {
outlinerchildren:-moz-outliner-row(lc-6633FF, selected) {
background-color: #6633FF;
}
outlinerbody:-moz-outliner-cell-text(lc-6600CC) {
outlinerchildren:-moz-outliner-cell-text(lc-6600CC) {
color: #6600CC
}
outlinerbody:-moz-outliner-row(lc-6600CC, selected) {
outlinerchildren:-moz-outliner-row(lc-6600CC, selected) {
background-color: #6600CC;
}
outlinerbody:-moz-outliner-cell-text(lc-333399) {
outlinerchildren:-moz-outliner-cell-text(lc-333399) {
color: #333399
}
outlinerbody:-moz-outliner-row(lc-333399, selected) {
outlinerchildren:-moz-outliner-row(lc-333399, selected) {
background-color: #333399;
}
outlinerbody:-moz-outliner-cell-text(lc-330099) {
outlinerchildren:-moz-outliner-cell-text(lc-330099) {
color: #330099
}
outlinerbody:-moz-outliner-row(lc-330099, selected) {
outlinerchildren:-moz-outliner-row(lc-330099, selected) {
background-color: #330099;
}
outlinerbody:-moz-outliner-cell-text(lc-FFCCFF) {
outlinerchildren:-moz-outliner-cell-text(lc-FFCCFF) {
color: #FFCCFF
}
outlinerbody:-moz-outliner-row(lc-FFCCFF, selected) {
outlinerchildren:-moz-outliner-row(lc-FFCCFF, selected) {
background-color: #FFCCFF;
}
outlinerbody:-moz-outliner-cell-text(lc-FF99FF) {
outlinerchildren:-moz-outliner-cell-text(lc-FF99FF) {
color: #FF99FF
}
outlinerbody:-moz-outliner-row(lc-FF99FF, selected) {
outlinerchildren:-moz-outliner-row(lc-FF99FF, selected) {
background-color: #FF99FF;
}
outlinerbody:-moz-outliner-cell-text(lc-CC66CC) {
outlinerchildren:-moz-outliner-cell-text(lc-CC66CC) {
color: #CC66CC
}
outlinerbody:-moz-outliner-row(lc-CC66CC, selected) {
outlinerchildren:-moz-outliner-row(lc-CC66CC, selected) {
background-color: #CC66CC;
}
outlinerbody:-moz-outliner-cell-text(lc-CC33CC) {
outlinerchildren:-moz-outliner-cell-text(lc-CC33CC) {
color: #CC33CC
}
outlinerbody:-moz-outliner-row(lc-CC33CC, selected) {
outlinerchildren:-moz-outliner-row(lc-CC33CC, selected) {
background-color: #CC33CC;
}
outlinerbody:-moz-outliner-cell-text(lc-993399) {
outlinerchildren:-moz-outliner-cell-text(lc-993399) {
color: #993399
}
outlinerbody:-moz-outliner-row(lc-993399, selected) {
outlinerchildren:-moz-outliner-row(lc-993399, selected) {
background-color: #993399;
}
outlinerbody:-moz-outliner-cell-text(lc-663366) {
outlinerchildren:-moz-outliner-cell-text(lc-663366) {
color: #663366
}
outlinerbody:-moz-outliner-row(lc-663366, selected) {
outlinerchildren:-moz-outliner-row(lc-663366, selected) {
background-color: #663366;
}
outlinerbody:-moz-outliner-cell-text(lc-330033) {
outlinerchildren:-moz-outliner-cell-text(lc-330033) {
color: #330033
}
outlinerbody:-moz-outliner-row(lc-330033, selected) {
outlinerchildren:-moz-outliner-row(lc-330033, selected) {
background-color: #330033;
}
outlinerbody:-moz-outliner-cell-text(lc-white, selected) {
outlinerchildren:-moz-outliner-cell-text(lc-white, selected) {
color: #FFFFFF
}
outlinerbody:-moz-outliner-cell-text(lc-black, selected) {
outlinerchildren:-moz-outliner-cell-text(lc-black, selected) {
color: #000000
}

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

@ -46,20 +46,20 @@
/* ::::: bookmark items ::::: */
.bookmark-item,
outlinerbody:-moz-outliner-image(Name) {
outlinerchildren:-moz-outliner-image(Name) {
list-style-image: url("chrome://communicator/skin/bookmarks/bookmark-item.gif");
}
.bookmark-item[container="true"],
outlinerbody:-moz-outliner-image(Name, container) {
outlinerchildren:-moz-outliner-image(Name, container) {
list-style-image: url("chrome://communicator/skin/bookmarks/bookmark-folder-closed.gif");
}
.bookmark-item[open="true"],
outlinerbody:-moz-outliner-image(Name, open) {
outlinerchildren:-moz-outliner-image(Name, open) {
list-style-image: url("chrome://communicator/skin/bookmarks/bookmark-folder-open.gif");
}
outlinerbody:-moz-outliner-image(Name) {
outlinerchildren:-moz-outliner-image(Name) {
padding-right: 2px;
}

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

@ -54,11 +54,11 @@
/* ::::: file/directory items ::::: */
outlinerbody:-moz-outliner-image(FilenameColumn, directory) {
outlinerchildren:-moz-outliner-image(FilenameColumn, directory) {
list-style-image: url("chrome://global/skin/filepicker/dir-closed.gif");
}
outlinerbody:-moz-outliner-image(FilenameColumn, file) {
outlinerchildren:-moz-outliner-image(FilenameColumn, file) {
list-style-image: url("chrome://global/skin/filepicker/blank.gif");
}

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

@ -51,61 +51,88 @@ outliner {
-moz-border-left-colors: #BEC3D3 #5D616E;
background-color: #FFFFFF;
color: #000000;
margin: 0px 4px 0px 4px;
}
outlinerbody {
outlinerchildren {
-moz-user-select: none;
}
/* ::::: outliner rows ::::: */
outlinerbody:-moz-outliner-row {
outlinerchildren:-moz-outliner-row {
border: 1px solid transparent;
height: 18px;
}
outlinerbody:-moz-outliner-row(selected) {
outlinerchildren:-moz-outliner-row(selected) {
background-color: #C7D0D9;
}
outlinerbody:-moz-outliner-row(selected, focus) {
outlinerchildren:-moz-outliner-row(selected, focus) {
background-color: #424F63;
}
outlinerbody:-moz-outliner-row(current, focus) {
outlinerchildren:-moz-outliner-row(current, focus) {
border-top-color: #000000;
border-bottom-color: #000000;
}
/* ::::: outliner cells ::::: */
outlinerbody:-moz-outliner-cell {
padding: 0px 0px 0px 2px;
outlinerchildren:-moz-outliner-cell {
padding: 0px 2px 0px 2px;
}
outlinerbody:-moz-outliner-cell-text {
outlinerchildren:-moz-outliner-cell-text {
color: inherit;
}
outlinerbody:-moz-outliner-cell-text(selected) {
outlinerchildren:-moz-outliner-cell-text(selected) {
color: #000000;
}
outlinerbody:-moz-outliner-cell-text(selected, focus) {
outlinerchildren:-moz-outliner-cell-text(selected, focus) {
color: #FFFFFF;
}
outlinerbody:-moz-outliner-cell-text(primary) {
border: 2px solid transparent;
}
outlinerchildren:-moz-outliner-cell-text(primary, drop) {
background-color: #424F63;
color: #FFFFFF;
}
outlinerchildren:-moz-outliner-cell-text(primary, dropBefore) {
border-top: 2px solid #424F63;
}
outlinerchildren:-moz-outliner-cell-text(selected, primary, dropBefore) {
border-top: 2px solid #FFFFFF;
}
outlinerchildren:-moz-outliner-cell-text(primary, dropAfter) {
border-bottom: 2px solid #424F63;
}
outlinerchildren:-moz-outliner-cell-text(selected, primary, dropAfter) {
border-bottom: 2px solid #FFFFFF;
}
/* ::::: lines connecting cells ::::: */
outlinerbody:-moz-outliner-line {
outlinerchildren:-moz-outliner-line {
border: 1px dotted #808080;
}
outlinerbody:-moz-outliner-line(selected, focus) {
outlinerchildren:-moz-outliner-line(selected, focus) {
border: 1px dotted #FFFFFF;
}
outlinerbody:-moz-outliner-separator {
outlinerchildren:-moz-outliner-separator {
border-top: 1px solid #7A8490;
border-bottom: 1px solid #FEFEFE;
}
@ -172,11 +199,11 @@ outlinercol[insertbefore="true"] {
-moz-border-left-colors: #000000 #666666;
}
outlinerbody:-moz-outliner-column(insertbefore) {
outlinerchildren:-moz-outliner-column(insertbefore) {
border-left: 1px solid #AAAAAA;
}
outlinerbody:-moz-outliner-column(insertafter) {
outlinerchildren:-moz-outliner-column(insertafter) {
border-right: 1px solid #AAAAAA;
}
@ -202,17 +229,17 @@ outlinerbody:-moz-outliner-column(insertafter) {
/* ::::: twisty ::::: */
outlinerbody:-moz-outliner-twisty {
outlinerchildren:-moz-outliner-twisty {
padding-right: 2px;
width: 10px; /* The image's width is 10 pixels */
list-style-image: url("chrome://global/skin/tree/twisty-clsd.gif");
}
outlinerbody:-moz-outliner-twisty(open) {
outlinerchildren:-moz-outliner-twisty(open) {
width: 10px; /* The image's width is 10 pixels */
list-style-image: url("chrome://global/skin/tree/twisty-open.gif");
}
outlinerbody:-moz-outliner-indentation {
outlinerchildren:-moz-outliner-indentation {
width: 16px;
}

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

@ -37,12 +37,12 @@
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
outlinerbody:-moz-outliner-image(GeneratedName) {
outlinerchildren:-moz-outliner-image(GeneratedName) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/addressbook/icons/person.gif");
}
outlinerbody:-moz-outliner-image(GeneratedName, MailList) {
outlinerchildren:-moz-outliner-image(GeneratedName, MailList) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/addressbook/icons/list.gif");
}

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

@ -45,122 +45,122 @@
/* ::::: mail folder ::::: */
outlinerbody:-moz-outliner-image(folderNameCol) {
outlinerchildren:-moz-outliner-image(folderNameCol) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/folder-closed.gif");
}
outlinerbody:-moz-outliner-image(folderNameCol, newMessages-true) {
outlinerchildren:-moz-outliner-image(folderNameCol, newMessages-true) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/folder-new.gif");
}
/* ..... Inbox ..... */
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Inbox) {
outlinerchildren:-moz-outliner-image(folderNameCol, specialFolder-Inbox) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/folder-inbox.gif");
}
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Inbox, newMessages-true) {
outlinerchildren:-moz-outliner-image(folderNameCol, specialFolder-Inbox, newMessages-true) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/folder-inbox-new.gif");
}
/* ..... Sent ..... */
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Sent) {
outlinerchildren:-moz-outliner-image(folderNameCol, specialFolder-Sent) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/folder-sent.gif");
}
/* ..... Drafts ..... */
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Drafts) {
outlinerchildren:-moz-outliner-image(folderNameCol, specialFolder-Drafts) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/folder-draft.gif");
}
/* ..... Templates ..... */
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Templates) {
outlinerchildren:-moz-outliner-image(folderNameCol, specialFolder-Templates) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/folder-template.gif");
}
/* ..... Unsent Messages ..... */
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Unsent Messages) {
outlinerchildren:-moz-outliner-image(folderNameCol, specialFolder-Unsent Messages) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/folder-outbox.gif");
}
/* ..... Trash ..... */
outlinerbody:-moz-outliner-image(folderNameCol, specialFolder-Trash) {
outlinerchildren:-moz-outliner-image(folderNameCol, specialFolder-Trash) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/folder-trash.gif");
}
/* ..... Server Folders ..... */
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true) {
outlinerchildren:-moz-outliner-image(folderNameCol, isServer-true) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/server-mail.gif");
}
outlinerbody:-moz-outliner-image(folderNameCol, biffState-NewMail, isServer-true) {
outlinerchildren:-moz-outliner-image(folderNameCol, biffState-NewMail, isServer-true) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/server-mail-new.gif");
}
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true, serverType-pop3, isSecure-true) {
outlinerchildren:-moz-outliner-image(folderNameCol, isServer-true, serverType-pop3, isSecure-true) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/server-remote-lock.gif");
}
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true, serverType-imap, isSecure-true) {
outlinerchildren:-moz-outliner-image(folderNameCol, isServer-true, serverType-imap, isSecure-true) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/server-remote-lock.gif");
}
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true, serverType-none) {
outlinerchildren:-moz-outliner-image(folderNameCol, isServer-true, serverType-none) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/server-local.gif");
}
/* ..... News Folders ..... */
outlinerbody:-moz-outliner-image(folderNameCol, serverType-nntp) {
outlinerchildren:-moz-outliner-image(folderNameCol, serverType-nntp) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/folder-newsgroup.gif");
}
/* ..... News Servers ..... */
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true, serverType-nntp) {
outlinerchildren:-moz-outliner-image(folderNameCol, isServer-true, serverType-nntp) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/server-news.gif");
}
outlinerbody:-moz-outliner-image(folderNameCol, isServer-true, serverType-nntp, isSecure-true) {
outlinerchildren:-moz-outliner-image(folderNameCol, isServer-true, serverType-nntp, isSecure-true) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/server-news-lock.gif");
}
/* ::::: All Servers ::::: */
outlinerbody:-moz-outliner-cell-text(closed, subfoldersHaveUnreadMessages-true)
outlinerchildren:-moz-outliner-cell-text(closed, subfoldersHaveUnreadMessages-true)
{
font-weight: bold;
}
outlinerbody:-moz-outliner-cell-text(folderNameCol, isServer-true),
outlinerbody:-moz-outliner-cell-text(hasUnreadMessages-true) {
outlinerchildren:-moz-outliner-cell-text(folderNameCol, isServer-true),
outlinerchildren:-moz-outliner-cell-text(hasUnreadMessages-true) {
font-weight: bold;
}
outlinerbody:-moz-outliner-cell-text(folderNameCol, noSelect-true) {
outlinerchildren:-moz-outliner-cell-text(folderNameCol, noSelect-true) {
color: gray;
font-style: italic;
}
@ -169,17 +169,20 @@ outlinerbody:-moz-outliner-cell-text(folderNameCol, noSelect-true) {
list-style-image: none;
}
outlinerbody:-moz-outliner-image(syncCol) {
outlinerchildren:-moz-outliner-image(syncCol) {
list-style-image: url("chrome://global/skin/checkbox/cbox.gif");
}
outlinerbody:-moz-outliner-image(syncCol, synchronize-true) {
outlinerchildren:-moz-outliner-image(syncCol, synchronize-true) {
list-style-image: url("chrome://global/skin/checkbox/cbox-check.gif");
}
outlinerbody:-moz-outliner-image(syncCol, isServer-true) {
outlinerchildren:-moz-outliner-image(syncCol, isServer-true) {
list-style-image: none;
}
#folderUnreadCol,
#folderTotalCol {
text-align: right;
}

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

@ -226,24 +226,24 @@
/* ::::: autocomplete icons ::::: */
outlinerbody:-moz-outliner-cell-text(default-match) {
outlinerchildren:-moz-outliner-cell-text(default-match) {
margin: 2px -3px 2px 15px;
border: none;
}
outlinerbody:-moz-outliner-image(local-abook) {
outlinerchildren:-moz-outliner-image(local-abook) {
margin: 2px -3px 2px 4px;
border: none;
list-style-image: url("chrome://messenger/skin/addressbook/icons/myaddrbk.gif");
}
outlinerbody:-moz-outliner-image(remote-abook) {
outlinerchildren:-moz-outliner-image(remote-abook) {
margin: 2px -4px 2px 3px;
border: none;
list-style-image: url("chrome://messenger/skin/addressbook/icons/directory.gif");
}
outlinerbody:-moz-outliner-image(remote-err) {
outlinerchildren:-moz-outliner-image(remote-err) {
margin: 2px -4px 2px 3px;
border: none;
list-style-image: url("chrome://messenger/skin/addressbook/icons/directory-down.gif");

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

@ -96,16 +96,16 @@ statusbarpanel,
/* ::::: for search in subscribe ::::: */
outlinerbody:-moz-outliner-image(nameCol, nntp) {
outlinerchildren:-moz-outliner-image(nameCol, nntp) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/folder-newsgroup.gif");
}
outlinerbody:-moz-outliner-image(subscribedCol) {
outlinerchildren:-moz-outliner-image(subscribedCol) {
list-style-image: url("chrome://global/skin/checkbox/cbox.gif");
}
outlinerbody:-moz-outliner-image(subscribedCol, subscribed) {
outlinerchildren:-moz-outliner-image(subscribedCol, subscribed) {
list-style-image: url("chrome://global/skin/checkbox/cbox-check.gif");
}

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

@ -44,18 +44,18 @@
/* ::::: thread decoration ::::: */
outlinerbody:-moz-outliner-cell-text(read) {
outlinerchildren:-moz-outliner-cell-text(read) {
font-weight: normal;
}
outlinerbody:-moz-outliner-cell-text(unread) {
outlinerchildren:-moz-outliner-cell-text(unread) {
font-weight: bold;
}
/* on a collapsed thread, if the top level message is read, but the thread has
* unread children, underline the text. 4.x mac did this, very slick
*/
outlinerbody:-moz-outliner-cell-text(container, closed, hasUnread, read) {
outlinerchildren:-moz-outliner-cell-text(container, closed, hasUnread, read) {
text-decoration: underline;
}
@ -64,27 +64,27 @@ outlinerbody:-moz-outliner-cell-text(container, closed, hasUnread, read) {
**** Priority colors currently not being used at the moment. It has been
**** disabled so as to not conflict with the labels color feature.
****
outlinerbody:-moz-outliner-cell-text(priorityCol, priority-highest) {
outlinerchildren:-moz-outliner-cell-text(priorityCol, priority-highest) {
color: red;
}
outlinerbody:-moz-outliner-cell-text(priorityCol, priority-high) {
outlinerchildren:-moz-outliner-cell-text(priorityCol, priority-high) {
color: rgb(128, 0, 0);
}
outlinerbody:-moz-outliner-cell-text(priorityCol, priority-lowest) {
outlinerchildren:-moz-outliner-cell-text(priorityCol, priority-lowest) {
color: rgb(170, 170, 170);
}
outlinerbody:-moz-outliner-cell-text(priorityCol, priority-low) {
outlinerchildren:-moz-outliner-cell-text(priorityCol, priority-low) {
color: rgb(85, 85, 85);
}
outlinerbody:-moz-outliner-cell-text(priorityCol, selected, focus) {
outlinerchildren:-moz-outliner-cell-text(priorityCol, selected, focus) {
color: #000000;
}
outlinerbody:-moz-outliner-cell-text(priorityCol, selected, focus) {
outlinerchildren:-moz-outliner-cell-text(priorityCol, selected, focus) {
color: #FFFFFF;
}
****/
@ -107,19 +107,19 @@ outlinercol.threadColumnHeader[sortDirection="descending"] {
list-style-image: url("chrome://messenger/skin/icons/threadcol-threaded.gif");
}
outlinerbody:-moz-outliner-image(threadCol, container) {
outlinerchildren:-moz-outliner-image(threadCol, container) {
list-style-image: url("chrome://messenger/skin/icons/thread-closed.gif");
}
outlinerbody:-moz-outliner-image(threadCol, container, open) {
outlinerchildren:-moz-outliner-image(threadCol, container, open) {
list-style-image: url("chrome://messenger/skin/icons/thread-open.gif");
}
outlinerbody:-moz-outliner-image(threadCol, container, hasUnread) {
outlinerchildren:-moz-outliner-image(threadCol, container, hasUnread) {
list-style-image: url("chrome://messenger/skin/icons/thread-new-closed.gif");
}
outlinerbody:-moz-outliner-image(threadCol, container, hasUnread, open) {
outlinerchildren:-moz-outliner-image(threadCol, container, hasUnread, open) {
list-style-image: url("chrome://messenger/skin/icons/thread-new-open.gif");
}
@ -129,13 +129,13 @@ outlinercol.readColumnHeader {
list-style-image: url("chrome://messenger/skin/icons/readcol-unread.gif");
}
outlinerbody:-moz-outliner-image(unreadButtonColHeader) {
outlinerchildren:-moz-outliner-image(unreadButtonColHeader) {
list-style-image: url("chrome://messenger/skin/icons/readcol-read.gif");
padding-left: 0px;
padding-right: 4px;
}
outlinerbody:-moz-outliner-image(unreadButtonColHeader, unread) {
outlinerchildren:-moz-outliner-image(unreadButtonColHeader, unread) {
list-style-image: url("chrome://messenger/skin/icons/readcol-unread.gif");
}
@ -145,86 +145,90 @@ outlinercol.flagColumnHeader {
list-style-image: url("chrome://messenger/skin/icons/flagcol-flagged.gif");
}
outlinerbody:-moz-outliner-image(flaggedCol) {
outlinerchildren:-moz-outliner-image(flaggedCol) {
list-style-image: url("chrome://messenger/skin/icons/readcol-read.gif");
padding-left: 0px;
padding-right: 4px;
}
outlinerbody:-moz-outliner-image(flaggedCol, flagged) {
outlinerchildren:-moz-outliner-image(flaggedCol, flagged) {
list-style-image: url("chrome://messenger/skin/icons/flagcol-flagged.gif");
}
/* ..... subject column ..... */
outlinerbody:-moz-outliner-image(subjectCol) {
outlinerchildren:-moz-outliner-image(subjectCol) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/message-mail.gif");
}
outlinerbody:-moz-outliner-image(subjectCol, new) {
outlinerchildren:-moz-outliner-image(subjectCol, new) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/message-mail-new.gif");
}
outlinerbody:-moz-outliner-image(subjectCol, attach) {
outlinerchildren:-moz-outliner-image(subjectCol, attach) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/message-mail-attach.gif");
}
outlinerbody:-moz-outliner-image(subjectCol, imapdeleted) {
outlinerchildren:-moz-outliner-image(subjectCol, imapdeleted) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/message-mail-imapdelete.gif");
}
outlinerbody:-moz-outliner-image(subjectCol, offline) {
outlinerchildren:-moz-outliner-image(subjectCol, offline) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/message-mail-offl.gif");
}
outlinerbody:-moz-outliner-image(subjectCol, new, offline) {
outlinerchildren:-moz-outliner-image(subjectCol, new, offline) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/message-mail-new-offl.gif");
}
outlinerbody:-moz-outliner-image(subjectCol, attach, offline) {
outlinerchildren:-moz-outliner-image(subjectCol, attach, offline) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/message-mail-attach-offl.gif");
}
outlinerbody:-moz-outliner-image(subjectCol, imapdeleted, offline) {
outlinerchildren:-moz-outliner-image(subjectCol, imapdeleted, offline) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/message-mail-delete-offl.gif");
}
outlinerbody:-moz-outliner-image(subjectCol, news) {
outlinerchildren:-moz-outliner-image(subjectCol, news) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/message-news.gif");
}
outlinerbody:-moz-outliner-image(subjectCol, news, new) {
outlinerchildren:-moz-outliner-image(subjectCol, news, new) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/message-news-new.gif");
}
outlinerbody:-moz-outliner-image(subjectCol, news, attach) {
outlinerchildren:-moz-outliner-image(subjectCol, news, attach) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/message-news-attach.gif");
}
outlinerbody:-moz-outliner-image(subjectCol, news, offline) {
outlinerchildren:-moz-outliner-image(subjectCol, news, offline) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/message-news-offl.gif");
}
outlinerbody:-moz-outliner-image(subjectCol, news, new, offline) {
outlinerchildren:-moz-outliner-image(subjectCol, news, new, offline) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/message-news-new-offl.gif");
}
outlinerbody:-moz-outliner-image(subjectCol, news, attach, offline) {
outlinerchildren:-moz-outliner-image(subjectCol, news, attach, offline) {
padding-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/message-news-attach-offl.gif");
}
#sizeCol,
#unreadCol,
#totalCol {
text-align: right;
}

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

@ -53,510 +53,510 @@
color: #FF0000;
color: rgb(128, 0, 0);
*/
outlinerbody:-moz-outliner-cell-text(lc-FFFFFF) {
outlinerchildren:-moz-outliner-cell-text(lc-FFFFFF) {
color: #FFFFFF
}
outlinerbody:-moz-outliner-row(lc-FFFFFF, selected) {
outlinerchildren:-moz-outliner-row(lc-FFFFFF, selected) {
background-color: #FFFFFF;
}
outlinerbody:-moz-outliner-cell-text(lc-CCCCCC) {
outlinerchildren:-moz-outliner-cell-text(lc-CCCCCC) {
color: #CCCCCC
}
outlinerbody:-moz-outliner-row(lc-CCCCCC, selected) {
outlinerchildren:-moz-outliner-row(lc-CCCCCC, selected) {
background-color: #CCCCCC;
}
outlinerbody:-moz-outliner-cell-text(lc-C0C0C0) {
outlinerchildren:-moz-outliner-cell-text(lc-C0C0C0) {
color: #C0C0C0
}
outlinerbody:-moz-outliner-row(lc-C0C0C0, selected) {
outlinerchildren:-moz-outliner-row(lc-C0C0C0, selected) {
background-color: #C0C0C0;
}
outlinerbody:-moz-outliner-cell-text(lc-999999) {
outlinerchildren:-moz-outliner-cell-text(lc-999999) {
color: #999999
}
outlinerbody:-moz-outliner-row(lc-999999, selected) {
outlinerchildren:-moz-outliner-row(lc-999999, selected) {
background-color: #999999;
}
outlinerbody:-moz-outliner-cell-text(lc-666666) {
outlinerchildren:-moz-outliner-cell-text(lc-666666) {
color: #666666
}
outlinerbody:-moz-outliner-row(lc-666666, selected) {
outlinerchildren:-moz-outliner-row(lc-666666, selected) {
background-color: #666666;
}
outlinerbody:-moz-outliner-cell-text(lc-333333) {
outlinerchildren:-moz-outliner-cell-text(lc-333333) {
color: #333333
}
outlinerbody:-moz-outliner-row(lc-333333, selected) {
outlinerchildren:-moz-outliner-row(lc-333333, selected) {
background-color: #333333;
}
outlinerbody:-moz-outliner-cell-text(lc-000000) {
outlinerchildren:-moz-outliner-cell-text(lc-000000) {
color: #000000
}
outlinerbody:-moz-outliner-row(lc-000000, selected) {
outlinerchildren:-moz-outliner-row(lc-000000, selected) {
background-color: #000000;
}
outlinerbody:-moz-outliner-cell-text(lc-FFCCCC) {
outlinerchildren:-moz-outliner-cell-text(lc-FFCCCC) {
color: #FFCCCC
}
outlinerbody:-moz-outliner-row(lc-FFCCCC, selected) {
outlinerchildren:-moz-outliner-row(lc-FFCCCC, selected) {
background-color: #FFCCCC;
}
outlinerbody:-moz-outliner-cell-text(lc-FF6666) {
outlinerchildren:-moz-outliner-cell-text(lc-FF6666) {
color: #FF6666
}
outlinerbody:-moz-outliner-row(lc-FF6666, selected) {
outlinerchildren:-moz-outliner-row(lc-FF6666, selected) {
background-color: #FF6666;
}
outlinerbody:-moz-outliner-cell-text(lc-FF0000) {
outlinerchildren:-moz-outliner-cell-text(lc-FF0000) {
color: #FF0000
}
outlinerbody:-moz-outliner-row(lc-FF0000, selected) {
outlinerchildren:-moz-outliner-row(lc-FF0000, selected) {
background-color: #FF0000;
}
outlinerbody:-moz-outliner-cell-text(lc-CC0000) {
outlinerchildren:-moz-outliner-cell-text(lc-CC0000) {
color: #CC0000
}
outlinerbody:-moz-outliner-row(lc-CC0000, selected) {
outlinerchildren:-moz-outliner-row(lc-CC0000, selected) {
background-color: #CC0000;
}
outlinerbody:-moz-outliner-cell-text(lc-990000) {
outlinerchildren:-moz-outliner-cell-text(lc-990000) {
color: #990000
}
outlinerbody:-moz-outliner-row(lc-990000, selected) {
outlinerchildren:-moz-outliner-row(lc-990000, selected) {
background-color: #990000;
}
outlinerbody:-moz-outliner-cell-text(lc-660000) {
outlinerchildren:-moz-outliner-cell-text(lc-660000) {
color: #660000
}
outlinerbody:-moz-outliner-row(lc-660000, selected) {
outlinerchildren:-moz-outliner-row(lc-660000, selected) {
background-color: #660000;
}
outlinerbody:-moz-outliner-cell-text(lc-330000) {
outlinerchildren:-moz-outliner-cell-text(lc-330000) {
color: #330000
}
outlinerbody:-moz-outliner-row(lc-330000, selected) {
outlinerchildren:-moz-outliner-row(lc-330000, selected) {
background-color: #330000;
}
outlinerbody:-moz-outliner-cell-text(lc-FFCC99) {
outlinerchildren:-moz-outliner-cell-text(lc-FFCC99) {
color: #FFCC99
}
outlinerbody:-moz-outliner-row(lc-FFCC99, selected) {
outlinerchildren:-moz-outliner-row(lc-FFCC99, selected) {
background-color: #FFCC99;
}
outlinerbody:-moz-outliner-cell-text(lc-FF9966) {
outlinerchildren:-moz-outliner-cell-text(lc-FF9966) {
color: #FF9966
}
outlinerbody:-moz-outliner-row(lc-FF9966, selected) {
outlinerchildren:-moz-outliner-row(lc-FF9966, selected) {
background-color: #FF9966;
}
outlinerbody:-moz-outliner-cell-text(lc-FF9900) {
outlinerchildren:-moz-outliner-cell-text(lc-FF9900) {
color: #FF9900
}
outlinerbody:-moz-outliner-row(lc-FF9900, selected) {
outlinerchildren:-moz-outliner-row(lc-FF9900, selected) {
background-color: #FF9900;
}
outlinerbody:-moz-outliner-cell-text(lc-FF6600) {
outlinerchildren:-moz-outliner-cell-text(lc-FF6600) {
color: #FF6600
}
outlinerbody:-moz-outliner-row(lc-FF6600, selected) {
outlinerchildren:-moz-outliner-row(lc-FF6600, selected) {
background-color: #FF6600;
}
outlinerbody:-moz-outliner-cell-text(lc-CC6600) {
outlinerchildren:-moz-outliner-cell-text(lc-CC6600) {
color: #CC6600
}
outlinerbody:-moz-outliner-row(lc-CC6600, selected) {
outlinerchildren:-moz-outliner-row(lc-CC6600, selected) {
background-color: #CC6600;
}
outlinerbody:-moz-outliner-cell-text(lc-993300) {
outlinerchildren:-moz-outliner-cell-text(lc-993300) {
color: #993300
}
outlinerbody:-moz-outliner-row(lc-993300, selected) {
outlinerchildren:-moz-outliner-row(lc-993300, selected) {
background-color: #993300;
}
outlinerbody:-moz-outliner-cell-text(lc-663300) {
outlinerchildren:-moz-outliner-cell-text(lc-663300) {
color: #663300
}
outlinerbody:-moz-outliner-row(lc-663300, selected) {
outlinerchildren:-moz-outliner-row(lc-663300, selected) {
background-color: #663300;
}
outlinerbody:-moz-outliner-cell-text(lc-FFFF99) {
outlinerchildren:-moz-outliner-cell-text(lc-FFFF99) {
color: #FFFF99
}
outlinerbody:-moz-outliner-row(lc-FFFF99, selected) {
outlinerchildren:-moz-outliner-row(lc-FFFF99, selected) {
background-color: #FFFF99;
}
outlinerbody:-moz-outliner-cell-text(lc-FFFF66) {
outlinerchildren:-moz-outliner-cell-text(lc-FFFF66) {
color: #FFFF66
}
outlinerbody:-moz-outliner-row(lc-FFFF66, selected) {
outlinerchildren:-moz-outliner-row(lc-FFFF66, selected) {
background-color: #FFFF66;
}
outlinerbody:-moz-outliner-cell-text(lc-FFCC66) {
outlinerchildren:-moz-outliner-cell-text(lc-FFCC66) {
color: #FFCC66
}
outlinerbody:-moz-outliner-row(lc-FFCC66, selected) {
outlinerchildren:-moz-outliner-row(lc-FFCC66, selected) {
background-color: #FFCC66;
}
outlinerbody:-moz-outliner-cell-text(lc-FFCC33) {
outlinerchildren:-moz-outliner-cell-text(lc-FFCC33) {
color: #FFCC33
}
outlinerbody:-moz-outliner-row(lc-FFCC33, selected) {
outlinerchildren:-moz-outliner-row(lc-FFCC33, selected) {
background-color: #FFCC33;
}
outlinerbody:-moz-outliner-cell-text(lc-CC9933) {
outlinerchildren:-moz-outliner-cell-text(lc-CC9933) {
color: #CC9933
}
outlinerbody:-moz-outliner-row(lc-CC9933, selected) {
outlinerchildren:-moz-outliner-row(lc-CC9933, selected) {
background-color: #CC9933;
}
outlinerbody:-moz-outliner-cell-text(lc-996633) {
outlinerchildren:-moz-outliner-cell-text(lc-996633) {
color: #996633
}
outlinerbody:-moz-outliner-row(lc-996633, selected) {
outlinerchildren:-moz-outliner-row(lc-996633, selected) {
background-color: #996633;
}
outlinerbody:-moz-outliner-cell-text(lc-663333) {
outlinerchildren:-moz-outliner-cell-text(lc-663333) {
color: #663333
}
outlinerbody:-moz-outliner-row(lc-663333, selected) {
outlinerchildren:-moz-outliner-row(lc-663333, selected) {
background-color: #663333;
}
outlinerbody:-moz-outliner-cell-text(lc-FFFFCC) {
outlinerchildren:-moz-outliner-cell-text(lc-FFFFCC) {
color: #FFFFCC
}
outlinerbody:-moz-outliner-row(lc-FFFFCC, selected) {
outlinerchildren:-moz-outliner-row(lc-FFFFCC, selected) {
background-color: #FFFFCC;
}
outlinerbody:-moz-outliner-cell-text(lc-FFFF33) {
outlinerchildren:-moz-outliner-cell-text(lc-FFFF33) {
color: #FFFF33
}
outlinerbody:-moz-outliner-row(lc-FFFF33, selected) {
outlinerchildren:-moz-outliner-row(lc-FFFF33, selected) {
background-color: #FFFF33;
}
outlinerbody:-moz-outliner-cell-text(lc-FFFF00) {
outlinerchildren:-moz-outliner-cell-text(lc-FFFF00) {
color: #FFFF00
}
outlinerbody:-moz-outliner-row(lc-FFFF00, selected) {
outlinerchildren:-moz-outliner-row(lc-FFFF00, selected) {
background-color: #FFFF00;
}
outlinerbody:-moz-outliner-cell-text(lc-FFCC00) {
outlinerchildren:-moz-outliner-cell-text(lc-FFCC00) {
color: #FFCC00
}
outlinerbody:-moz-outliner-row(lc-FFCC00, selected) {
outlinerchildren:-moz-outliner-row(lc-FFCC00, selected) {
background-color: #FFCC00;
}
outlinerbody:-moz-outliner-cell-text(lc-999900) {
outlinerchildren:-moz-outliner-cell-text(lc-999900) {
color: #999900
}
outlinerbody:-moz-outliner-row(lc-999900, selected) {
outlinerchildren:-moz-outliner-row(lc-999900, selected) {
background-color: #999900;
}
outlinerbody:-moz-outliner-cell-text(lc-666600) {
outlinerchildren:-moz-outliner-cell-text(lc-666600) {
color: #666600
}
outlinerbody:-moz-outliner-row(lc-666600, selected) {
outlinerchildren:-moz-outliner-row(lc-666600, selected) {
background-color: #666600;
}
outlinerbody:-moz-outliner-cell-text(lc-333300) {
outlinerchildren:-moz-outliner-cell-text(lc-333300) {
color: #333300
}
outlinerbody:-moz-outliner-row(lc-333300, selected) {
outlinerchildren:-moz-outliner-row(lc-333300, selected) {
background-color: #333300;
}
outlinerbody:-moz-outliner-cell-text(lc-99FF99) {
outlinerchildren:-moz-outliner-cell-text(lc-99FF99) {
color: #99FF99
}
outlinerbody:-moz-outliner-row(lc-99FF99, selected) {
outlinerchildren:-moz-outliner-row(lc-99FF99, selected) {
background-color: #99FF99;
}
outlinerbody:-moz-outliner-cell-text(lc-66FF99) {
outlinerchildren:-moz-outliner-cell-text(lc-66FF99) {
color: #66FF99
}
outlinerbody:-moz-outliner-row(lc-66FF99, selected) {
outlinerchildren:-moz-outliner-row(lc-66FF99, selected) {
background-color: #66FF99;
}
outlinerbody:-moz-outliner-cell-text(lc-33FF33) {
outlinerchildren:-moz-outliner-cell-text(lc-33FF33) {
color: #33FF33
}
outlinerbody:-moz-outliner-row(lc-33FF33, selected) {
outlinerchildren:-moz-outliner-row(lc-33FF33, selected) {
background-color: #33FF33;
}
outlinerbody:-moz-outliner-cell-text(lc-33CC00) {
outlinerchildren:-moz-outliner-cell-text(lc-33CC00) {
color: #33CC00
}
outlinerbody:-moz-outliner-row(lc-33CC00, selected) {
outlinerchildren:-moz-outliner-row(lc-33CC00, selected) {
background-color: #33CC00;
}
outlinerbody:-moz-outliner-cell-text(lc-009900) {
outlinerchildren:-moz-outliner-cell-text(lc-009900) {
color: #009900
}
outlinerbody:-moz-outliner-row(lc-009900, selected) {
outlinerchildren:-moz-outliner-row(lc-009900, selected) {
background-color: #009900;
}
outlinerbody:-moz-outliner-cell-text(lc-006600) {
outlinerchildren:-moz-outliner-cell-text(lc-006600) {
color: #006600
}
outlinerbody:-moz-outliner-row(lc-006600, selected) {
outlinerchildren:-moz-outliner-row(lc-006600, selected) {
background-color: #006600;
}
outlinerbody:-moz-outliner-cell-text(lc-003300) {
outlinerchildren:-moz-outliner-cell-text(lc-003300) {
color: #003300
}
outlinerbody:-moz-outliner-row(lc-003300, selected) {
outlinerchildren:-moz-outliner-row(lc-003300, selected) {
background-color: #003300;
}
outlinerbody:-moz-outliner-cell-text(lc-99FFFF) {
outlinerchildren:-moz-outliner-cell-text(lc-99FFFF) {
color: #99FFFF
}
outlinerbody:-moz-outlinerrow(lc-99FFFF, selected) {
outlinerchildren:-moz-outlinerrow(lc-99FFFF, selected) {
background-color: #99FFFF;
}
outlinerbody:-moz-outliner-cell-text(lc-33FFFF) {
outlinerchildren:-moz-outliner-cell-text(lc-33FFFF) {
color: #33FFFF
}
outlinerbody:-moz-outliner-row(lc-33FFFF, selected) {
outlinerchildren:-moz-outliner-row(lc-33FFFF, selected) {
background-color: #33FFFF;
}
outlinerbody:-moz-outliner-cell-text(lc-66CCCC) {
outlinerchildren:-moz-outliner-cell-text(lc-66CCCC) {
color: #66CCCC
}
outlinerbody:-moz-outliner-row(lc-66CCCC, selected) {
outlinerchildren:-moz-outliner-row(lc-66CCCC, selected) {
background-color: #66CCCC;
}
outlinerbody:-moz-outliner-cell-text(lc-00CCCC) {
outlinerchildren:-moz-outliner-cell-text(lc-00CCCC) {
color: #00CCCC
}
outlinerbody:-moz-outliner-row(lc-00CCCC, selected) {
outlinerchildren:-moz-outliner-row(lc-00CCCC, selected) {
background-color: #00CCCC;
}
outlinerbody:-moz-outliner-cell-text(lc-339999) {
outlinerchildren:-moz-outliner-cell-text(lc-339999) {
color: #339999
}
outlinerbody:-moz-outliner-row(lc-339999, selected) {
outlinerchildren:-moz-outliner-row(lc-339999, selected) {
background-color: #339999;
}
outlinerbody:-moz-outliner-cell-text(lc-336666) {
outlinerchildren:-moz-outliner-cell-text(lc-336666) {
color: #336666
}
outlinerbody:-moz-outliner-row(lc-336666, selected) {
outlinerchildren:-moz-outliner-row(lc-336666, selected) {
background-color: #336666;
}
outlinerbody:-moz-outliner-cell-text(lc-003333) {
outlinerchildren:-moz-outliner-cell-text(lc-003333) {
color: #003333
}
outlinerbody:-moz-outliner-row(lc-003333, selected) {
outlinerchildren:-moz-outliner-row(lc-003333, selected) {
background-color: #003333;
}
outlinerbody:-moz-outliner-cell-text(lc-CCFFFF) {
outlinerchildren:-moz-outliner-cell-text(lc-CCFFFF) {
color: #CCFFFF
}
outlinerbody:-moz-outliner-row(lc-CCFFFF, selected) {
outlinerchildren:-moz-outliner-row(lc-CCFFFF, selected) {
background-color: #CCFFFF;
}
outlinerbody:-moz-outliner-cell-text(lc-66FFFF) {
outlinerchildren:-moz-outliner-cell-text(lc-66FFFF) {
color: #66FFFF
}
outlinerbody:-moz-outliner-row(lc-66FFFF, selected) {
outlinerchildren:-moz-outliner-row(lc-66FFFF, selected) {
background-color: #66FFFF;
}
outlinerbody:-moz-outliner-cell-text(lc-33CCFF) {
outlinerchildren:-moz-outliner-cell-text(lc-33CCFF) {
color: #33CCFF
}
outlinerbody:-moz-outliner-row(lc-33CCFF, selected) {
outlinerchildren:-moz-outliner-row(lc-33CCFF, selected) {
background-color: #33CCFF;
}
outlinerbody:-moz-outliner-cell-text(lc-3366FF) {
outlinerchildren:-moz-outliner-cell-text(lc-3366FF) {
color: #3366FF
}
outlinerbody:-moz-outliner-row(lc-3366FF, selected) {
outlinerchildren:-moz-outliner-row(lc-3366FF, selected) {
background-color: #3366FF;
}
outlinerbody:-moz-outliner-cell-text(lc-3333FF) {
outlinerchildren:-moz-outliner-cell-text(lc-3333FF) {
color: #3333FF
}
outlinerbody:-moz-outliner-row(lc-3333FF, selected) {
outlinerchildren:-moz-outliner-row(lc-3333FF, selected) {
background-color: #3333FF;
}
outlinerbody:-moz-outliner-cell-text(lc-000099) {
outlinerchildren:-moz-outliner-cell-text(lc-000099) {
color: #000099
}
outlinerbody:-moz-outliner-row(lc-000099, selected) {
outlinerchildren:-moz-outliner-row(lc-000099, selected) {
background-color: #000099;
}
outlinerbody:-moz-outliner-cell-text(lc-000066) {
outlinerchildren:-moz-outliner-cell-text(lc-000066) {
color: #000066
}
outlinerbody:-moz-outliner-row(lc-000066, selected) {
outlinerchildren:-moz-outliner-row(lc-000066, selected) {
background-color: #000066;
}
outlinerbody:-moz-outliner-cell-text(lc-CCCCFF) {
outlinerchildren:-moz-outliner-cell-text(lc-CCCCFF) {
color: #CCCCFF
}
outlinerbody:-moz-outliner-row(lc-CCCCFF, selected) {
outlinerchildren:-moz-outliner-row(lc-CCCCFF, selected) {
background-color: #CCCCFF;
}
outlinerbody:-moz-outliner-cell-text(lc-9999FF) {
outlinerchildren:-moz-outliner-cell-text(lc-9999FF) {
color: #9999FF
}
outlinerbody:-moz-outliner-row(lc-9999FF, selected) {
outlinerchildren:-moz-outliner-row(lc-9999FF, selected) {
background-color: #9999FF;
}
outlinerbody:-moz-outliner-cell-text(lc-6666CC) {
outlinerchildren:-moz-outliner-cell-text(lc-6666CC) {
color: #6666CC
}
outlinerbody:-moz-outliner-row(lc-6666CC, selected) {
outlinerchildren:-moz-outliner-row(lc-6666CC, selected) {
background-color: #6666CC;
}
outlinerbody:-moz-outliner-cell-text(lc-6633FF) {
outlinerchildren:-moz-outliner-cell-text(lc-6633FF) {
color: #6633FF
}
outlinerbody:-moz-outliner-row(lc-6633FF, selected) {
outlinerchildren:-moz-outliner-row(lc-6633FF, selected) {
background-color: #6633FF;
}
outlinerbody:-moz-outliner-cell-text(lc-6600CC) {
outlinerchildren:-moz-outliner-cell-text(lc-6600CC) {
color: #6600CC
}
outlinerbody:-moz-outliner-row(lc-6600CC, selected) {
outlinerchildren:-moz-outliner-row(lc-6600CC, selected) {
background-color: #6600CC;
}
outlinerbody:-moz-outliner-cell-text(lc-333399) {
outlinerchildren:-moz-outliner-cell-text(lc-333399) {
color: #333399
}
outlinerbody:-moz-outliner-row(lc-333399, selected) {
outlinerchildren:-moz-outliner-row(lc-333399, selected) {
background-color: #333399;
}
outlinerbody:-moz-outliner-cell-text(lc-330099) {
outlinerchildren:-moz-outliner-cell-text(lc-330099) {
color: #330099
}
outlinerbody:-moz-outliner-row(lc-330099, selected) {
outlinerchildren:-moz-outliner-row(lc-330099, selected) {
background-color: #330099;
}
outlinerbody:-moz-outliner-cell-text(lc-FFCCFF) {
outlinerchildren:-moz-outliner-cell-text(lc-FFCCFF) {
color: #FFCCFF
}
outlinerbody:-moz-outliner-row(lc-FFCCFF, selected) {
outlinerchildren:-moz-outliner-row(lc-FFCCFF, selected) {
background-color: #FFCCFF;
}
outlinerbody:-moz-outliner-cell-text(lc-FF99FF) {
outlinerchildren:-moz-outliner-cell-text(lc-FF99FF) {
color: #FF99FF
}
outlinerbody:-moz-outliner-row(lc-FF99FF, selected) {
outlinerchildren:-moz-outliner-row(lc-FF99FF, selected) {
background-color: #FF99FF;
}
outlinerbody:-moz-outliner-cell-text(lc-CC66CC) {
outlinerchildren:-moz-outliner-cell-text(lc-CC66CC) {
color: #CC66CC
}
outlinerbody:-moz-outliner-row(lc-CC66CC, selected) {
outlinerchildren:-moz-outliner-row(lc-CC66CC, selected) {
background-color: #CC66CC;
}
outlinerbody:-moz-outliner-cell-text(lc-CC33CC) {
outlinerchildren:-moz-outliner-cell-text(lc-CC33CC) {
color: #CC33CC
}
outlinerbody:-moz-outliner-row(lc-CC33CC, selected) {
outlinerchildren:-moz-outliner-row(lc-CC33CC, selected) {
background-color: #CC33CC;
}
outlinerbody:-moz-outliner-cell-text(lc-993399) {
outlinerchildren:-moz-outliner-cell-text(lc-993399) {
color: #993399
}
outlinerbody:-moz-outliner-row(lc-993399, selected) {
outlinerchildren:-moz-outliner-row(lc-993399, selected) {
background-color: #993399;
}
outlinerbody:-moz-outliner-cell-text(lc-663366) {
outlinerchildren:-moz-outliner-cell-text(lc-663366) {
color: #663366
}
outlinerbody:-moz-outliner-row(lc-663366, selected) {
outlinerchildren:-moz-outliner-row(lc-663366, selected) {
background-color: #663366;
}
outlinerbody:-moz-outliner-cell-text(lc-330033) {
outlinerchildren:-moz-outliner-cell-text(lc-330033) {
color: #330033
}
outlinerbody:-moz-outliner-row(lc-330033, selected) {
outlinerchildren:-moz-outliner-row(lc-330033, selected) {
background-color: #330033;
}
outlinerbody:-moz-outliner-cell-text(lc-white, selected) {
outlinerchildren:-moz-outliner-cell-text(lc-white, selected) {
color: #FFFFFF
}
outlinerbody:-moz-outliner-cell-text(lc-black, selected) {
outlinerchildren:-moz-outliner-cell-text(lc-black, selected) {
color: #000000
}

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

@ -56,7 +56,7 @@
<content>
<xul:outliner anonid="outliner" class="autocomplete-outliner" flex="1">
<xul:outlinercols anonid="outlinercols"/>
<xul:outlinerbody anonid="outlinerbody" class="autocomplete-outlinerbody" flex="1"/>
<xul:outlinerchildren anonid="outlinerbody" class="autocomplete-outlinerbody" flex="1"/>
</xul:outliner>
<xul:box role="search-box" class="autocomplete-search-box"/>
</content>

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

@ -1202,7 +1202,7 @@
<content>
<xul:outliner anonid="outliner" class="autocomplete-outliner" flex="1">
<xul:outlinercols anonid="outlinercols"/>
<xul:outlinerbody anonid="outlinerbody" class="autocomplete-outlinerbody" flex="1"/>
<xul:outlinerchildren anonid="outlinerbody" class="autocomplete-outlinerbody"/>
</xul:outliner>
</content>

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

@ -87,7 +87,7 @@
// We implement nsIController
this.outliner.controllers.appendController(this.controller);
var olb = document.getAnonymousElementByAttribute(this, "anonid", "bookmarks-outlinerbody");
var olb = document.getAnonymousElementByAttribute(this, "anonid", "bookmarks-outliner");
olb = olb.builder.QueryInterface(Components.interfaces.nsIXULOutlinerBuilder);
olb.addObserver(this.builderObserver);
// need to create string bundle manually instead of using <xul:stringbundle/>
@ -97,7 +97,6 @@
var stringBundleService = Components.classes["@mozilla.org/intl/stringbundle;1"].getService(Components.interfaces.nsIStringBundleService);
var bundleURL = "chrome://communicator/locale/bookmarks/bookmark.properties";
this._bundle = stringBundleService.createBundle(bundleURL, localeService.GetApplicationLocale());
setTimeout(this.refreshSort, 0, this);
]]></constructor>
<destructor><![CDATA[
this.outlinerBuilder.removeObserver(this.builderObserver);
@ -112,7 +111,7 @@
<property name="outlinerBuilder">
<getter><![CDATA[
return this.outlinerBoxObject.outlinerBody.builder.QueryInterface(Components.interfaces.nsIXULOutlinerBuilder);
return this.outliner.builder.QueryInterface(Components.interfaces.nsIXULOutlinerBuilder);
]]></getter>
</property>
@ -122,12 +121,6 @@
]]></getter>
</property>
<property name="outlinerBody">
<getter><![CDATA[
return document.getAnonymousElementByAttribute(this, "anonid", "bookmarks-outlinerbody");
]]></getter>
</property>
<property name="currentIndex">
<getter><![CDATA[
return this.outlinerBoxObject.selection.currentIndex;
@ -282,7 +275,7 @@
mOuter: this,
onDragStart: function (aEvent, aXferData, aDragAction)
{
if (this.mOuter.outlinerBody.getAttribute("sortActive") == "true")
if (this.mOuter.outliner.getAttribute("sortActive") == "true")
throw Components.results.NS_OK;
aXferData.data = new TransferDataSet();
var rangeCount = this.mOuter.outlinerBoxObject.selection.getRangeCount();
@ -550,9 +543,6 @@
<field name="builderObserver"><![CDATA[
({
mOuter: this,
inDropBefore: 1,
inDropOn: 2,
inDropAfter: 3,
canDropOn: function(index)
{
return true;
@ -672,10 +662,11 @@
if (dragSession.dragAction & kCopyAction)
rSource = BookmarksUtils.cloneFolder(rSource, rContainer, rTarget);
}
if (orientation == this.inDropBefore || orientation == this.inDropAfter) {
if (orientation == Components.interfaces.nsIOutlinerView.inDropBefore ||
orientation == Components.interfaces.nsIOutlinerView.inDropAfter) {
if (dropIx == -1) break;
RDFC.Init(kBMDS, rContainer);
RDFC.InsertElementAt(rSource, rParent ? dropIx : (orientation == this.inDropAfter ? ++dropIx : dropIx), true);
RDFC.InsertElementAt(rSource, rParent ? dropIx : (orientation == Components.interfaces.nsIOutlinerView.inDropAfter ? ++dropIx : dropIx), true);
}
else {
var cont = this.mOuter.outlinerBuilder.getResourceAtIndex(row);
@ -780,7 +771,7 @@
<!-- RDF utility functions required by base binding -->
<property name="db">
<getter><![CDATA[
return this.outlinerBody.database;
return this.outliner.database;
]]></getter>
</property>
@ -816,16 +807,6 @@
]]></body>
</method>
<method name="refreshSort">
<parameter name="aContext"/>
<body><![CDATA[
var column = document.getAnonymousElementByAttribute(aContext, "sortDirection", "*");
if (column)
aContext.outlinerBoxObject.view.cycleHeader(column.id, column);
aContext = null;
]]></body>
</method>
<method name="selectAll">
<body><![CDATA[
this.outlinerBoxObject.selection.selectAll();
@ -1660,41 +1641,39 @@
<menupopup id="bmContext"
onpopupshowing="this.parentNode.createContextMenu(event);"/>
<vbox flex="1">
<outliner flex="1" flags="dont-test-empty" anonid="bookmarks-outliner"
class="plain" enableColumnDrag="true"
onkeypress="if (event.keyCode == 13) this.parentNode.parentNode.openItem(event, true);">
<outlinerbody anonid="bookmarks-outlinerbody" datasources="rdf:bookmarks rdf:internetsearch rdf:files rdf:localsearch" flex="1" ref="NC:BookmarksRoot" flags="dont-build-content"
ondblclick="this.parentNode.parentNode.parentNode.openItem(event, false);"
ondraggesture="nsDragAndDrop.startDrag(event, this.parentNode.parentNode.parentNode.DNDObserver);"
onselect="this.parentNode.parentNode.parentNode.outlinerBoxObject.view.selectionChanged();">
<template>
<rule rdf:type="http://home.netscape.com/NC-rdf#BookmarkSeparator">
<outlinerchildren>
<outlineritem uri="rdf:*">
<outlinerrow properties="rdf:http://www.w3.org/1999/02/22-rdf-syntax-ns#type separator"/>
</outlineritem>
</outlinerchildren>
</rule>
<rule>
<outlinerchildren>
<outlineritem uri="rdf:*">
<outlinerrow properties="rdf:http://www.w3.org/1999/02/22-rdf-syntax-ns#type rdf:http://home.netscape.com/NC-rdf#loading rdf:http://home.netscape.com/WEB-rdf#status">
<outlinercell label="rdf:http://home.netscape.com/NC-rdf#Name" />
<outlinercell label="rdf:http://home.netscape.com/NC-rdf#URL" />
<outlinercell label="rdf:http://home.netscape.com/NC-rdf#ShortcutURL" />
<outlinercell label="rdf:http://home.netscape.com/NC-rdf#Description" />
<outlinercell label="rdf:http://home.netscape.com/WEB-rdf#LastVisitDate"/>
<outlinercell label="rdf:http://home.netscape.com/NC-rdf#BookmarkAddDate" />
<outlinercell label="rdf:http://home.netscape.com/NC-rdf#LastModifiedDate" />
</outlinerrow>
</outlineritem>
</outlinerchildren>
</rule>
</template>
</outlinerbody>
<outliner anonid="bookmarks-outliner" flex="1" class="plain" enableColumnDrag="true"
datasources="rdf:bookmarks rdf:internetsearch rdf:files rdf:localsearch" ref="NC:BookmarksRoot" flags="dont-build-content"
onkeypress="if (event.keyCode == 13) this.parentNode.parentNode.openItem(event, true);"
ondblclick="if (event.originalTarget.localName == 'outlinerchildren') this.parentNode.parentNode.openItem(event, false);"
ondraggesture="if (event.originalTarget.localName == 'outlinerchildren') nsDragAndDrop.startDrag(event, this.parentNode.parentNode.DNDObserver);"
onselect="this.parentNode.parentNode.view.selectionChanged();">
<template>
<rule rdf:type="http://home.netscape.com/NC-rdf#BookmarkSeparator">
<outlinerchildren>
<outlineritem uri="rdf:*">
<outlinerrow properties="rdf:http://www.w3.org/1999/02/22-rdf-syntax-ns#type separator"/>
</outlineritem>
</outlinerchildren>
</rule>
<rule>
<outlinerchildren>
<outlineritem uri="rdf:*">
<outlinerrow properties="rdf:http://www.w3.org/1999/02/22-rdf-syntax-ns#type rdf:http://home.netscape.com/NC-rdf#loading rdf:http://home.netscape.com/WEB-rdf#status">
<outlinercell label="rdf:http://home.netscape.com/NC-rdf#Name" />
<outlinercell label="rdf:http://home.netscape.com/NC-rdf#URL" />
<outlinercell label="rdf:http://home.netscape.com/NC-rdf#ShortcutURL" />
<outlinercell label="rdf:http://home.netscape.com/NC-rdf#Description" />
<outlinercell label="rdf:http://home.netscape.com/WEB-rdf#LastVisitDate"/>
<outlinercell label="rdf:http://home.netscape.com/NC-rdf#BookmarkAddDate" />
<outlinercell label="rdf:http://home.netscape.com/NC-rdf#LastModifiedDate" />
</outlinerrow>
</outlineritem>
</outlinerchildren>
</rule>
</template>
<outlinercols>
<outlinercol id="Name" label="&outlinercol.name.label;" flex="1" primary="true" class="sortDirectionIndicator" persist="width hidden sortActive sortDirection ordinal" sort="rdf:http://home.netscape.com/NC-rdf#Name"
sortActive="true" sortDirection="descending"/>
sortActive="true" sortDirection="none"/>
<splitter class="tree-splitter" />
<outlinercol id="URL" label="&outlinercol.url.label;" flex="1" class="sortDirectionIndicator" sort="rdf:http://home.netscape.com/NC-rdf#URL" persist="width hidden sortActive sortDirection ordinal" />
<splitter class="tree-splitter" />
@ -1721,34 +1700,33 @@
contextmenu="_child">
<menupopup id="bmContext"
onpopupshowing="this.parentNode.createContextMenu(event);"/>
<outliner flex="1" flags="dont-test-empty" anonid="bookmarks-outliner" enableColumnDrag="true"
onkeypress="if (event.keyCode == 13) this.parentNode.openItem(event, false);">
<outlinerbody anonid="bookmarks-outlinerbody" datasources="rdf:bookmarks rdf:internetsearch rdf:files rdf:localsearch" flex="1" ref="NC:BookmarksRoot" flags="dont-build-content"
ondraggesture="nsDragAndDrop.startDrag(event, this.parentNode.parentNode.DNDObserver);"
onclick="if (this.parentNode.parentNode.validOpenClickConditions(event)) this.parentNode.parentNode.openItem(event, false);"
onselect="this.parentNode.parentNode.outlinerBoxObject.view.selectionChanged();">
<template>
<rule rdf:type="http://home.netscape.com/NC-rdf#BookmarkSeparator">
<outlinerchildren>
<outlineritem uri="rdf:*">
<outlinerrow properties="rdf:http://www.w3.org/1999/02/22-rdf-syntax-ns#type separator" />
</outlineritem>
</outlinerchildren>
</rule>
<rule>
<outlinerchildren>
<outlineritem uri="rdf:*">
<outlinerrow properties="rdf:http://www.w3.org/1999/02/22-rdf-syntax-ns#type rdf:http://home.netscape.com/NC-rdf#loading rdf:http://home.netscape.com/WEB-rdf#status">
<outlinercell label="rdf:http://home.netscape.com/NC-rdf#Name" />
</outlinerrow>
</outlineritem>
</outlinerchildren>
</rule>
</template>
</outlinerbody>
<outliner anonid="bookmarks-outliner" flex="1" hidecolumnpicker="true"
datasources="rdf:bookmarks rdf:internetsearch rdf:files rdf:localsearch" ref="NC:BookmarksRoot" flags="dont-build-content"
onkeypress="if (event.keyCode == 13) this.parentNode.openItem(event, false);"
ondraggesture="if (event.originalTarget.localName == 'outlinerchildren') nsDragAndDrop.startDrag(event, this.parentNode.DNDObserver);"
onclick="if (this.parentNode.validOpenClickConditions(event)) this.parentNode.openItem(event, false);"
onselect="this.parentNode.outlinerBoxObject.view.selectionChanged();">
<template>
<rule rdf:type="http://home.netscape.com/NC-rdf#BookmarkSeparator">
<outlinerchildren>
<outlineritem uri="rdf:*">
<outlinerrow properties="rdf:http://www.w3.org/1999/02/22-rdf-syntax-ns#type separator" />
</outlineritem>
</outlinerchildren>
</rule>
<rule>
<outlinerchildren>
<outlineritem uri="rdf:*">
<outlinerrow properties="rdf:http://www.w3.org/1999/02/22-rdf-syntax-ns#type rdf:http://home.netscape.com/NC-rdf#loading rdf:http://home.netscape.com/WEB-rdf#status">
<outlinercell label="rdf:http://home.netscape.com/NC-rdf#Name" />
</outlinerrow>
</outlineritem>
</outlinerchildren>
</rule>
</template>
<outlinercols>
<outlinercol id="Name" label="&outlinercol.name.label;" flex="1" primary="true" class="sortDirectionIndicator" persist="width hidden sortActive sortDirection" sort="rdf:http://home.netscape.com/NC-rdf#Name"
sortActive="true" sortDirection="descending"/>
sortActive="true" sortDirection="none"/>
</outlinercols>
</outliner>
</xbl:content>
@ -1756,26 +1734,25 @@
<!-- Outliner with folders only -->
<binding id="bookmarks-outliner-folders" extends="chrome://communicator/content/bookmarks/bookmarks.xml#bookmarks-outliner">
<xbl:content xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" xmlns:xbl="http://www.mozilla.org/xbl">
<outliner flex="1" flags="dont-test-empty" anonid="bookmarks-outliner">
<outlinerbody anonid="bookmarks-outlinerbody" datasources="rdf:bookmarks rdf:internetsearch rdf:files rdf:localsearch" flex="1" ref="NC:BookmarksRoot" flags="dont-build-content"
onselect="this.parentNode.parentNode.outlinerBoxObject.view.selectionChanged();">
<template>
<rule iscontainer="true">
<outlinerchildren>
<outlineritem uri="rdf:*">
<outlinerrow properties="rdf:http://www.w3.org/1999/02/22-rdf-syntax-ns#type rdf:http://home.netscape.com/NC-rdf#loading rdf:http://home.netscape.com/WEB-rdf#status">
<outlinercell label="rdf:http://home.netscape.com/NC-rdf#Name" />
</outlinerrow>
</outlineritem>
</outlinerchildren>
</rule>
</template>
</outlinerbody>
<outliner anonid="bookmarks-outliner" flex="1" hidecolumnpicker="true"
datasources="rdf:bookmarks rdf:internetsearch rdf:files rdf:localsearch" ref="NC:BookmarksRoot" flags="dont-build-content"
onselect="this.parentNode.outlinerBoxObject.view.selectionChanged();">
<template>
<rule iscontainer="true">
<outlinerchildren>
<outlineritem uri="rdf:*">
<outlinerrow properties="rdf:http://www.w3.org/1999/02/22-rdf-syntax-ns#type rdf:http://home.netscape.com/NC-rdf#loading rdf:http://home.netscape.com/WEB-rdf#status">
<outlinercell label="rdf:http://home.netscape.com/NC-rdf#Name" />
</outlinerrow>
</outlineritem>
</outlinerchildren>
</rule>
</template>
<outlinercols>
<outlinercol id="Name" label="&outlinercol.name.label;" flex="1" primary="true"
class="sortDirectionIndicator" persist="width hidden sortActive sortDirection"
sort="rdf:http://home.netscape.com/NC-rdf#Name"
sortActive="true" sortDirection="descending"/>
sortActive="true" sortDirection="none"/>
</outlinercols>
</outliner>
</xbl:content>

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

@ -316,7 +316,7 @@ function onCancel()
function onDblClick(e) {
var t = e.originalTarget;
if (t.localName != "outlinerbody")
if (t.localName != "outlinerchildren")
return;
openSelectedFile();
@ -454,7 +454,7 @@ function onFileSelected(file) {
}
}
okButton.disabled = (textField.value != "");
okButton.disabled = (textInput.value != "");
}
function onTextFieldFocus() {

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше