Sliding panel / Dockable window
I am looking for sample code for implementing a sliding panel or dockable window. IntelliJ IDE has label on left "Project" which when clicked slides-in a panel (or something) which has project elements in a tree. I am looking for a similar effect for a swing based application.
I tried using scrollpane and try setting its "setDividerLocation" property incrementally but it does not give the same effect. It "jumps" the last position, no matter how much I try repainting/updateUI etc.
If you have any sample / hint for code please let me know.
Thanks
Prakash
Perhaps using a jsplitpane with continuouslayout as true might solve your problem when you are incrementing the divider location. With continuousLayout you shouldn't get the jumping effect.
JSplitPane sp = new JSplitPane();
sp.setContinuousLayout(true);
Similar Messages
-
HI,
I am trying to incoperate the "Spry Sliding" feature in my
website.But problem is coming that I have to define the height of
the container of each sliding panel(So,its not giving the
flexibilty) If I am removing the height than the all panels are
showing (So,the effect of sliding panel is lost).
So help me how to define the same feature without the
"HEIGHT".I am using the examples/demos given on the spry offical
website.
Thanks,Yes that sounds about right. As usual I am trying to figure
out ways to have a nice navigation and be able to have a good
amount of copy live on the page and keep the web pages footer
within the viewers browser window. The search continues. -
I have an issue with the buttons in the Sliding Panels Widget
after I implemented it in my page. The first time, I have to click
a button twice in order to have it working. Has someone seen this
problem before?Hi Natasa,
If you go to http://labs.adobe.com/technologies/spry/samples/slidingpanels/SlidingPanelsSampl e.html and right click on the page, a popup menu will appear. There you will see an item name 'view source'. By clicking on that item it will open a new window with the source code. Select all and copy the source code to your HTML editor on your own computer. There you can experiment with the code at hearts content.
I hope this helps.
Ben
PS. My apologies, I did not realize that this topic had already been answered.
Message was edited by: vw2ureg -
SPRY SLIDING PANELS & DW V.9 BUILD 3481
Hi Folks,
Does anyone know of a way to get rid of the DW error message
that pops up when you use
the sliding panels widget? If not, I'll submit an SR with the
DW folks...
Error message upon opening any document in the code window
that contains the standard
sliding panels widget code:
"This document contains JavaScript code for a widget that no
longer exists. If you don't remove
the code, the browser might display JavaScript errors when
loading the page.......
mentions: var sp1 = new Spry.Widget.SlidingPanels(......
- GRThis document contains JavaScript code for a widget that no
longer exists. If you don't remove
the code, the browser might display JavaScript errors when
loading the page. Would you like
Dreamweaver to find all instances of this code for you?
var sp1 = new Spry.Widget.SlidingPanels("PANELS",{
duration:850, fps: 60, defaultPanel:0 });
Yes No
Just above the end-body tag I have the script:
var Accordion1 = new Spry.Widget.Accordion("Accordion1",{
duration: 350, useFixedPanelHeights: false, defaultPanel: 0 });
The only ID I have is " <DIV id="Accordion1"
class="accordian_div Accordion">" as a container for the panels.
Should I
change an ID name or a var name ? The SlidingPanels work
fine. It's just that I'm using the "open recent files automatically
on startup" sort of option and each page displays the above
error and stops, until I reply to it, then continues to load the
next file.
- GR -
Hi,
I do not know if this is the right place. If not, please tell me where to ask.
I do not know nothing of programing and my use of a program is to "click" on shortuct. I am familiar with using Tabbed panels, Accordion and Collapsible panel.
But I would like to know how to use sliding panels. I have read a lot on this links:
http://livedocs.adobe.com/en_US/Spry/SDG/help.html?content=WS5F39D2B9-A298-472a-8E50-AC4B1 0984EFC.html
but I do not know how to start. I do not understand English very much and do not have computer knowledge.
So, is there a way for me to "click" on a widget or icon of a SPry to make sliding panels?
On this link are samples, but I realy have no idea, how to make this.
http://labs.adobe.com/technologies/spry/samples/slidingpanels/SlidingPanelsSample.html
Thank youHi Natasa,
If you go to http://labs.adobe.com/technologies/spry/samples/slidingpanels/SlidingPanelsSampl e.html and right click on the page, a popup menu will appear. There you will see an item name 'view source'. By clicking on that item it will open a new window with the source code. Select all and copy the source code to your HTML editor on your own computer. There you can experiment with the code at hearts content.
I hope this helps.
Ben
PS. My apologies, I did not realize that this topic had already been answered.
Message was edited by: vw2ureg -
Having trouble with flash and linking to Sliding panels - PLEASE help
Having trouble with Sliding panels and flash. Otherwise everything works fine but when I'm trying to implement the link
<a href="#" onclick="sp1.showPanel('panel1'); return false;">Panel1</a>
to a flash button I get confused. I have tried following
on (press) {
getURL("javascript:sp1.showPanel('panel1');");
and it did not work. What would you suggest? I am desperate. Please help me! Any suggestions are highly appreciated!!!!Thanks for your answer!
I have tried both sp1.ShowPanel('panel1'); and window.sp1.ShowPanel('panel1'); they both give blank window with [object]
I have found a solution that works in other browsers, but not in IE. Well basicly it works, but after a few clicks IE freezes.
on (press) {
getURL("javascript:sp1.showPanel('panel1'); void(0);");
Would you happen to have a solution other than that? I believe that the void(0); causes the IE to freeze. -
Horizontal Sliding Panels flicker IE
Hello
I'm using the horizontal Sliding Panel to slide some Images
and text. It works fine with Safari on Mac, but with IE and Firefox
on Windows the animation isn't very smooth (the problem concerns
only the image, the text-sliding works fine). With the vertical
Sliding Panels I don't have this problem...
Can anyone help me? Thankssolaris23 wrote:
> Hello Danilo
>
> Horizontal:
http://www.miomedia.ch/test/SprySlidingPanels.html
> Vertical:
http://www.miomedia.ch/test/SprySlidingPanels2.html
>
> Look on the image in the horizontal slide, the animation
flickers on the left
> and right image-borders.
> In the vertical slide the animation is much smoother.
This probably has to do with the rendering of the moved
elements on the page and IE redrawing portions of the images at a
time during the slide. I'd suspect that the issue actually exists
in the vertical slide as well, but is minimized due to the angled
top and bottom of the images, but that's just a suspicion, not a
known fact. It seems that if I look closely enough at the animation
in Firefox it seems to be doing something similar, but it is indeed
a good bit smoother than IE.
> I'm using transparent png images, I've also tried with
jpg, with different
> duration time, different fps... but still the same
problem....
That would have been my suggestion too. A quick local copy of
your page and it seems that making the duration 1000 milliseconds
seems to help with moving left to right, but moving right to left
still has a little bit of flicker.
I tried making the images smaller and it seemed to be
lessened, so perhaps it's IE and the larger images rendering. You
might also try making the vertical lines of the screenshot to be a
bit less vertical, or perhaps add a shadow or glow to the image to
soften the hard vertical edge.
Danilo Celic
|
http://blog.extensioneering.com/
| WebAssist Extensioneer
| Adobe Community Expert -
Sliding panels IE6/IE7 inconsistency
Hello,
I am using a customized version of the Spry "Products" demo
for our website. I have difficulties keeping the Spry sliding
panels next to the product list. In IE6 it will move below the list
when certain content is selected in the sliding panels.
http://www.isis-papyrus.com/e/pages/1/2/products.html
It happens in IE6 (Windows XP) when for example "Papyrus
Designer" is selected and the "Features" panel is displayed.
It works as advertised in IE7, Firefox, Safari and on all Mac
browsers.
Would anyone have an idea how I can prevent this from
happening?
Thank you for your help,
Oliver
PS: I enjoy working with Spry very much and appreciate all
the effort that goes into this on Adobe's side.Hi,
I have tried the page in IE7 and IE8 without any problem. I am assuming that the problem lies within the section called Otros tratamientos.
Ben -
Sliding panels from data - single panel
I would like to use the spry sliding panels from data widget
with only 1 panel at a time. The sample has two at a time.
Most of the code makes sense, but every modification I try
breaks the next/previous navigation.I modified the code from the example for you, so now it works
with just one panel visible.
Changes are:
set the width of the wigdet en
slidingpanel class to 250 instead of 500.
var numberOfPanelsPerView = 1
remove all the
spry:if="{ds_RowNumber} % 2 == 0" attributes
change
onclick="sp1.showPanel('p{prevStartIndex}') to
onclick="sp1.showPreviousPanel()
change
onclick="sp1.showPanel('p{nextStartIndex}') to
onclick="sp1.showNextPanel()
This all leads to the following code
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="
http://www.w3.org/1999/xhtml"
xmlns:spry="
http://ns.adobe.com/spry">
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=utf-8" />
<title>Sliding Panels Sample</title>
<script type="text/javascript"
src="../../widgets/slidingpanels/SprySlidingPanels.js"></script>
<script src="../../includes/xpath.js"
type="text/javascript"></script>
<script src="../../includes/SpryData.js"
type="text/javascript"></script>
<style type="text/css">
<!--
.widget {
/* width: 500px;*/
width: 250px;
height: 230px;
border: solid 1px black;
background-color: #CCCCCC;
.SlidingPanels {
/* width: 500px; */
width: 250px;
height: 230px;
overflow: visible;
position: relative;
float: left;
padding: 0px;
.SlidingPanelsContainer {
width:8000em;
height:230px;
position: absolute;
float:left;
margin: 0px;
padding: 0px;
.SlidingPanelsContent {
width: 250px;
height: 230px;
float: left;
.content {
width: 241px;
height: 200px;
float: left;
overflow: hidden;
padding: 4px;
border-right: solid 1px #999999;
.panelnav {
clear: both;
height: 42px;
.left {
text-align: left;
margin-left: 4px;
.right {
text-align: right;
margin-right: 4px;
-->
</style>
<link href="../../css/samples.css" rel="stylesheet"
type="text/css" />
<script type="text/javascript">
<!--
var ds1 = new
Spry.Data.XMLDataSet("../../demos/products/products.xml",
"/products/product");
function TruncateStrIfNeeded(str, maxChars)
// Decode our string so when we count characters, we aren't
counting
// the chars in an entity name.
str = Spry.Utils.decodeEntities(str);
if (str.length > maxChars)
str = str.substr(0, maxChars - 4) + " ...";
return Spry.Utils.encodeEntities(str);
ds1.addObserver({ onPostLoad: function() {
var numberOfPanelsPerView = 1; //was 2
var rows = ds1.getData();
var numRows = rows.length;
// Add some custom columns to our data set.
for (var i = 0; i < numRows; i++)
var row = rows
// Add a 'teaser' column which is basically the description,
// but truncated so it can fit within our panel.
row.teaser = TruncateStrIfNeeded(row.desc, 400);
// Add a 'viewStartIndex' column that indicates what view
this row
// belongs to.
row.viewNumber = Math.floor(i / numberOfPanelsPerView) + 1;
row.viewStartIndex = i - (i % numberOfPanelsPerView);
row.prevStartIndex = row.viewStartIndex -
numberOfPanelsPerView;
row.nextStartIndex = row.viewStartIndex +
numberOfPanelsPerView;
//-->
</script>
</head>
<body>
<h3>Building a Sliding Panels widget with Spry
Data</h3>
<p>This sample creates a Sliding Panels widget by using
Spry Data to build the repeating markup. In this sample the content
panels are generated dynamically and the photo in each panel comes
from Spry Data. The text is static, which is just there for
example.</p>
<p>The content panel is generated in a Spry:repeat
region. An important thing in the panel widget is that each panel
should have a unique ID. This ID is generated with a Spry data
reference. Using the same method, the Panel links are generated the
same way, using the same data values. This ensures that the panel
links and IDs match up correctly. In this sample, the visible
window is twice as wide as the content panel. This allows for 2
panels to show at once. The links, therefore, need to show only
every other panel number. This will allow the panel to move by 2
content panels each time. To do this, a spry:if is used to only
display the even number panel numbers.</p>
<p>Note: Since this sample depends on Spry Data for the
content and markup, it will not degrade when JavaScript is turned
off. This sample shows how to construct this widget with Data.
Determine if this method fits your needs with degredation and
accessibility in mind. Also, this sample is more complicated only
because we are showing 2 panels at once and there are differing
lengths of text in the panels.</p>
<p>Page: <span spry:region="ds1"
spry:repeatchildren="ds1"> <a href="#"
onclick="sp1.showPanel('p{viewStartIndex}'); return
false;">{viewNumber}</a> </span></p>
<div class="widget">
<div id="apDiv1" class="SlidingPanels"
spry:region="ds1">
<div class="SlidingPanelsContainer">
<div id="p{ds_RowNumber}" class="SlidingPanelsContent"
spry:repeat="ds1">
<div class="content"> <img
src="../../demos/products/{boximage}" width="75" height="56"
hspace="5" vspace="5" align="left" alt="Sample Images from Spry
Data." />
<p>{desc}</p>
</div>
<div class="panelnav left"><a href="#"
onclick="sp1.showPreviousPanel(); return
false;"><<
Previous</a> <a
href="#" onclick="sp1.showNextPanel(); return false;">Next
>></a></div>
</div>
</div>
<script type="text/javascript">
var sp1 = new Spry.Widget.SlidingPanels("apDiv1");
</script>
</div>
</div>
</body>
</html> -
Sliding Panels Auto Advance w/ Timer
Hi everyone. I'm looking to make my sliding panels advance
with a simple timer. I know this can be done (right?) but can't
find any way to do this. I have text content in my panels (no
images) so the posted example of a gallery doesn't help me much.
I have no problem setting up the panels as I want, I just
want to make them advance every few seconds.
Anyone please help!!
Thanks so much,
Varen SwaabInstead of creating a custom script, I decided to extend the widget it self. So everything can be controlled from the widget constructor.
Before we get started a small side note:
I would advice to put the changes in a seperate script, and not to modify the current SlidingPanels.js. This way, if you happen to update to Spry 1.7 it will not overwrite the change you made. But if you do not wish to update just paste it in the SprySlidingPanels.js (This saves a HTTP request, resulting in a slightly faster page load, maintainablity vs performance)
The changes allow you specify the following new options in the constructor:
- automatic: true / false [boolean]
turns automatic sliding panels on or off, off by default
- direction: 0 / 1 [number or Spry.forward , Spry.backward if you have SpryEffects included]
direction that panels should automaticly slide to, 1 is forward, 2 is backward
- each: 1000 [number]
time in miliseconds, note I had to name this "each" instead of duration, because duration handles the sliding panel animation duration.
Example constructor:
var sp1 = new Spry.Widget.SlidingPanels("SlidingPanels1", { automatic: false, direction: 0, each: 5000 });
It also adds 3 new methods to the sliding panel:
- .start [ sp1.start(); ]
This allows you to start the automatic sliding of the panels, this will also work, if you did not specify automatic in your constructor
- .stop [ sp1.stop(); ]
Stops automatic sliding of the panels
- .setDirection [ sp1.setDirection(1); ]
Sets a new direction for the sliding panels, requires the same values as you can specify in the sliding panels constructor
The new code:
// line 121 of SprySlidingPanels.js
Spry.Widget.SlidingPanels.prototype.attachBehaviors = function()
var ele = this.element;
if (!ele)
return;
if (this.enableKeyboardNavigation)
var focusEle = null;
var tabIndexAttr = ele.attributes.getNamedItem("tabindex");
if (tabIndexAttr || ele.nodeName.toLowerCase() == "a")
focusEle = ele;
if (focusEle)
var self = this;
Spry.Widget.SlidingPanels.addEventListener(focusEle, "focus", function(e) { return self.onFocus(e || window.event); }, false);
Spry.Widget.SlidingPanels.addEventListener(focusEle, "blur", function(e) { return self.onBlur(e || window.event); }, false);
Spry.Widget.SlidingPanels.addEventListener(focusEle, "keydown", function(e) { return self.onKeyDown(e || window.event); }, false);
if (this.currentPanel)
// Temporarily turn off animation when showing the
// initial panel.
var ea = this.enableAnimation;
this.enableAnimation = false;
this.showPanel(this.currentPanel);
this.enableAnimation = ea;
if (this.automatic){
this.start();
// These are all new methods
Spry.Widget.SlidingPanels.prototype.start = function(){
var self = this; // reference to this, so we can use it inside our function
this.automaticStarted = setInterval(function(){
var panels = self.getContentPanels(),
panelcount = panels.length,
current = self.getCurrentPanel(),
newpanel;
// locate the current panel index, and check if we need to increase or decrease the panel
for(var i = 0; i < panelcount; i++){
if(panels[i] == current){
self.direction == 1 ? (i++) : (i--);
self.showPanel( self.direction == 1 ? (i >= panels.length ? 0 : i) : (i < 0 ? panels.length -1 : i));
break; // stop looping, we already found and are displaying our new panel
}, this.each || 3000);
Spry.Widget.SlidingPanels.prototype.stop = function(){
if(this.automaticStarted && typeof this.automaticStarted == 'number'){
clearInterval(this.automaticStarted);
this.automaticStarted = null;
Spry.Widget.SlidingPanels.prototype.setDirection = function(direction){
this.direction = direction;
Hopes this helps -
Sliding panel horizontal scrollbar problem
Issue: This is about horizontal sliding panels.
I want to restrict the height on the sliding panel to say,
200px. Some of the panel content is longer than that. So I want a
scrollbar to appear vertically (overflow:auto). It does this.
However, when the panel with the scrollbar slides off to the left,
its scrollbar remains present at the leftmost part of the window...
where the new content panel is.
Is there any way to prevent this from happening, and allow
the content that needs the scrollbars to have it?
thank youHi jratlantic,
So it appears that you changed the default setting for
overflow on the .SlidingPanelsContent rule:
.SlidingPanelsContent {
width: 547px;
height: 100px;
overflow:auto;
Instead of putting it on the .SlidingPanelsContent, try
putting it on:
.SlidingPanelsCurrentPanel {
overflow:auto;
And see if that makes a difference. That will ensure that
only the panel that is currently showing, and not animating, has
scrollbars.
--== Kin ==-- -
Spry Sliding Panels - current panel height problem
Hi guys,
Ive been trying for a while to make the sliding panels widget
show each panel in its own height instead of the longest panel's height in the container.
I tried reading all the js file to play with it and find a solution but the truth is i dont know how to do what i want.
I do, however, have a list of things that i believe if implemented should work,
could you guys help me do these fixes on the js? ( the one you think will work )
1. edit so that: Panels dont have any height ( or panel content display none ) if it isnt current panel. If current panel is "id:1" the assume class 1 style properties. As soon as it looses focus/"currentpanel" class it looses its class 1 properties. And the new current panel ("id:2") assumes its own class 2 properties. And so on.
2. edit so that: PanelContainer ( the one that holds all the panels ) displays none BUT the current panel. So all panels could be display none unless they assume the "currentpanel" class and so they change to display. Maybe this way the container assumes only the height of the displayed panel and looses it once its no longer displayed assuming the next displayed one.
3. edit so that: Panel container checks for current panel's height and assumes that height instantly ( there is still a panel inside the container that would be longer than the current panel, maybe with overflow hidden this isnt a problem )
Please, if you can make the change in the js, i would appreciate greatly appreciate it. There is nothing in the entire web in to fixing this.
This is the SprySlidingPanels.js:
// SprySlidingPanels.js - version 0.5 - Spry Pre-Release 1.6
// Copyright (c) 2006. Adobe Systems Incorporated.
// All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
// * Neither the name of Adobe Systems Incorporated nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
var Spry;
if (!Spry) Spry = {};
if (!Spry.Widget) Spry.Widget = {};
Spry.Widget.SlidingPanels = function(element, opts)
this.element = this.getElement(element);
this.enableAnimation = true;
this.currentPanel = null;
this.enableKeyboardNavigation = true;
this.hasFocus = false;
this.previousPanelKeyCode = Spry.Widget.SlidingPanels.KEY_LEFT;
this.nextPanelKeyCode = Spry.Widget.SlidingPanels.KEY_RIGHT;
this.currentPanelClass = "SlidingPanelsCurrentPanel";
this.focusedClass = "SlidingPanelsFocused";
this.animatingClass = "SlidingPanelsAnimating";
Spry.Widget.SlidingPanels.setOptions(this, opts);
if (this.element)
this.element.style.overflow = "hidden";
// Developers can specify the default panel as an index,
// id or an actual element node. Make sure to normalize
// it into an element node because that is what we expect
// internally.
if (this.defaultPanel)
if (typeof this.defaultPanel == "number")
this.currentPanel = this.getContentPanels()[this.defaultPanel];
else
this.currentPanel = this.getElement(this.defaultPanel);
// If we still don't have a current panel, use the first one!
if (!this.currentPanel)
this.currentPanel = this.getContentPanels()[0];
// Since we rely on the positioning information of the
// panels, we need to wait for the onload event to fire before
// we can attempt to show the initial panel. Once the onload
// fires, we know that all CSS files have loaded. This is
// especially important for Safari.
if (Spry.Widget.SlidingPanels.onloadDidFire)
this.attachBehaviors();
else
Spry.Widget.SlidingPanels.loadQueue.push(this);
Spry.Widget.SlidingPanels.prototype.onFocus = function(e)
this.hasFocus = true;
this.addClassName(this.element, this.focusedClass);
return false;
Spry.Widget.SlidingPanels.prototype.onBlur = function(e)
this.hasFocus = false;
this.removeClassName(this.element, this.focusedClass);
return false;
Spry.Widget.SlidingPanels.KEY_LEFT = 37;
Spry.Widget.SlidingPanels.KEY_UP = 38;
Spry.Widget.SlidingPanels.KEY_RIGHT = 39;
Spry.Widget.SlidingPanels.KEY_DOWN = 40;
Spry.Widget.SlidingPanels.prototype.onKeyDown = function(e)
var key = e.keyCode;
if (!this.hasFocus || (key != this.previousPanelKeyCode && key != this.nextPanelKeyCode))
return true;
if (key == this.nextPanelKeyCode)
this.showNextPanel();
else /* if (key == this.previousPanelKeyCode) */
this.showPreviousPanel();
if (e.preventDefault) e.preventDefault();
else e.returnValue = false;
if (e.stopPropagation) e.stopPropagation();
else e.cancelBubble = true;
return false;
Spry.Widget.SlidingPanels.prototype.attachBehaviors = function()
var ele = this.element;
if (!ele)
return;
if (this.enableKeyboardNavigation)
var focusEle = null;
var tabIndexAttr = ele.attributes.getNamedItem("tabindex");
if (tabIndexAttr || ele.nodeName.toLowerCase() == "a")
focusEle = ele;
if (focusEle)
var self = this;
Spry.Widget.SlidingPanels.addEventListener(focusEle, "focus", function(e) { return self.onFocus(e || window.event); }, false);
Spry.Widget.SlidingPanels.addEventListener(focusEle, "blur", function(e) { return self.onBlur(e || window.event); }, false);
Spry.Widget.SlidingPanels.addEventListener(focusEle, "keydown", function(e) { return self.onKeyDown(e || window.event); }, false);
if (this.currentPanel)
// Temporarily turn off animation when showing the
// initial panel.
var ea = this.enableAnimation;
this.enableAnimation = false;
this.showPanel(this.currentPanel);
this.enableAnimation = ea;
Spry.Widget.SlidingPanels.prototype.getElement = function(ele)
if (ele && typeof ele == "string")
return document.getElementById(ele);
return ele;
Spry.Widget.SlidingPanels.prototype.addClassName = function(ele, className)
if (!ele || !className || (ele.className && ele.className.search(new RegExp("\\b" + className + "\\b")) != -1))
return;
ele.className += (ele.className ? " " : "") + className;
Spry.Widget.SlidingPanels.prototype.removeClassName = function(ele, className)
if (!ele || !className || (ele.className && ele.className.search(new RegExp("\\b" + className + "\\b")) == -1))
return;
ele.className = ele.className.replace(new RegExp("\\s*\\b" + className + "\\b", "g"), "");
Spry.Widget.SlidingPanels.setOptions = function(obj, optionsObj, ignoreUndefinedProps)
if (!optionsObj)
return;
for (var optionName in optionsObj)
if (ignoreUndefinedProps && optionsObj[optionName] == undefined)
continue;
obj[optionName] = optionsObj[optionName];
Spry.Widget.SlidingPanels.prototype.getElementChildren = function(element)
var children = [];
var child = element.firstChild;
while (child)
if (child.nodeType == 1 /* Node.ELEMENT_NODE */)
children.push(child);
child = child.nextSibling;
return children;
Spry.Widget.SlidingPanels.prototype.getCurrentPanel = function()
return this.currentPanel;
Spry.Widget.SlidingPanels.prototype.getContentGroup = function()
return this.getElementChildren(this.element)[0];
Spry.Widget.SlidingPanels.prototype.getContentPanels = function()
return this.getElementChildren(this.getContentGroup());
Spry.Widget.SlidingPanels.prototype.getContentPanelsCount = function()
return this.getContentPanels().length;
Spry.Widget.SlidingPanels.onloadDidFire = false;
Spry.Widget.SlidingPanels.loadQueue = [];
Spry.Widget.SlidingPanels.addLoadListener = function(handler)
if (typeof window.addEventListener != 'undefined')
window.addEventListener('load', handler, false);
else if (typeof document.addEventListener != 'undefined')
document.addEventListener('load', handler, false);
else if (typeof window.attachEvent != 'undefined')
window.attachEvent('onload', handler);
Spry.Widget.SlidingPanels.processLoadQueue = function(handler)
Spry.Widget.SlidingPanels.onloadDidFire = true;
var q = Spry.Widget.SlidingPanels.loadQueue;
var qlen = q.length;
for (var i = 0; i < qlen; i++)
q[i].attachBehaviors();
Spry.Widget.SlidingPanels.addLoadListener(Spry.Widget.SlidingPanels.pr ocessLoadQueue);
Spry.Widget.SlidingPanels.addEventListener = function(element, eventType, handler, capture)
try
if (element.addEventListener)
element.addEventListener(eventType, handler, capture);
else if (element.attachEvent)
element.attachEvent("on" + eventType, handler);
catch (e) {}
Spry.Widget.SlidingPanels.prototype.getContentPanelIndex = function(ele)
if (ele)
ele = this.getElement(ele);
var panels = this.getContentPanels();
var numPanels = panels.length;
for (var i = 0; i < numPanels; i++)
if (panels[i] == ele)
return i;
return -1;
Spry.Widget.SlidingPanels.prototype.showPanel = function(elementOrIndex)
var pIndex = -1;
if (typeof elementOrIndex == "number")
pIndex = elementOrIndex;
else // Must be the element for the content panel.
pIndex = this.getContentPanelIndex(elementOrIndex);
var numPanels = this.getContentPanelsCount();
if (numPanels > 0)
pIndex = (pIndex >= numPanels) ? numPanels - 1 : pIndex;
else
pIndex = 0;
var panel = this.getContentPanels()[pIndex];
var contentGroup = this.getContentGroup();
if (panel && contentGroup)
if (this.currentPanel)
this.removeClassName(this.currentPanel, this.currentPanelClass);
this.currentPanel = panel;
var nx = -panel.offsetLeft;
var ny = -panel.offsetTop;
if (this.enableAnimation)
if (this.animator)
this.animator.stop();
var cx = contentGroup.offsetLeft;
var cy = contentGroup.offsetTop;
if (cx != nx || cy != ny)
var self = this;
this.addClassName(this.element, this.animatingClass);
this.animator = new Spry.Widget.SlidingPanels.PanelAnimator(contentGroup, cx, cy, nx, ny, { duration: this.duration, fps: this.fps, transition: this.transition, finish: function()
self.removeClassName(self.element, self.animatingClass);
self.addClassName(panel, self.currentPanelClass);
this.animator.start();
else
contentGroup.style.left = nx + "px";
contentGroup.style.top = ny + "px";
this.addClassName(panel, this.currentPanelClass);
return panel;
Spry.Widget.SlidingPanels.prototype.showFirstPanel = function()
return this.showPanel(0);
Spry.Widget.SlidingPanels.prototype.showLastPanel = function()
return this.showPanel(this.getContentPanels().length - 1);
Spry.Widget.SlidingPanels.prototype.showPreviousPanel = function()
return this.showPanel(this.getContentPanelIndex(this.currentPanel) - 1);
Spry.Widget.SlidingPanels.prototype.showNextPanel = function()
return this.showPanel(this.getContentPanelIndex(this.currentPanel) + 1);
Spry.Widget.SlidingPanels.PanelAnimator = function(ele, curX, curY, dstX, dstY, opts)
this.element = ele;
this.curX = curX;
this.curY = curY;
this.dstX = dstX;
this.dstY = dstY;
this.fps = 60;
this.duration = 500;
this.transition = Spry.Widget.SlidingPanels.PanelAnimator.defaultTransition;
this.startTime = 0;
this.timerID = 0;
this.finish = null;
var self = this;
this.intervalFunc = function() { self.step(); };
Spry.Widget.SlidingPanels.setOptions(this, opts, true);
this.interval = 1000/this.fps;
Spry.Widget.SlidingPanels.PanelAnimator.defaultTransition = function(time, begin, finish, duration) { time /= duration; return begin + ((2 - time) * time * finish); };
Spry.Widget.SlidingPanels.PanelAnimator.prototype.start = function()
this.stop();
this.startTime = (new Date()).getTime();
this.timerID = setTimeout(this.intervalFunc, this.interval);
Spry.Widget.SlidingPanels.PanelAnimator.prototype.stop = function()
if (this.timerID)
clearTimeout(this.timerID);
this.timerID = 0;
Spry.Widget.SlidingPanels.PanelAnimator.prototype.step = function()
var elapsedTime = (new Date()).getTime() - this.startTime;
var done = elapsedTime >= this.duration;
var x, y;
if (done)
x = this.curX = this.dstX;
y = this.curY = this.dstY;
else
x = this.transition(elapsedTime, this.curX, this.dstX - this.curX, this.duration);
y = this.transition(elapsedTime, this.curY, this.dstY - this.curY, this.duration);
this.element.style.left = x + "px";
this.element.style.top = y + "px";
if (!done)
this.timerID = setTimeout(this.intervalFunc, this.interval);
else if (this.finish)
this.finish();Add a valid Document Type Declaration on your page. (DTD) and it should work smoothly.. You could have found this out if you would just validate your page. validator.w3.org.
-
Spry Sliding Panels - Panel Height Problem
Hi guys,
Ive been trying for a while to make the sliding panels widget
show each panel in its own height instead of the longest panel's height in the container.
I tried reading all the js file to play with it and find a solution but the truth is i dont know how to do what i want.
I do, however, have a list of things that i believe if implemented should work,
could you guys help me do these fixes on the js? ( the one you think will work )
1. edit so that: Panels dont have any height ( or panel content display none ) if it isnt current panel. If current panel is "id:1" the assume class 1 style properties. As soon as it looses focus/"currentpanel" class it looses its class 1 properties. And the new current panel ("id:2") assumes its own class 2 properties. And so on.
2. edit so that: PanelContainer ( the one that holds all the panels ) displays none BUT the current panel. So all panels could be display none unless they assume the "currentpanel" class and so they change to display. Maybe this way the container assumes only the height of the displayed panel and looses it once its no longer displayed assuming the next displayed one.
3. edit so that: Panel container checks for current panel's height and assumes that height instantly ( there is still a panel inside the container that would be longer than the current panel, maybe with overflow hidden this isnt a problem )
Please, if you can make the change in the js, i would appreciate greatly appreciate it. There is nothing in the entire web in to fixing this.
This is the SprySlidingPanels.js:
// SprySlidingPanels.js - version 0.5 - Spry Pre-Release 1.6
// Copyright (c) 2006. Adobe Systems Incorporated.
// All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
// * Neither the name of Adobe Systems Incorporated nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
var Spry;
if (!Spry) Spry = {};
if (!Spry.Widget) Spry.Widget = {};
Spry.Widget.SlidingPanels = function(element, opts)
this.element = this.getElement(element);
this.enableAnimation = true;
this.currentPanel = null;
this.enableKeyboardNavigation = true;
this.hasFocus = false;
this.previousPanelKeyCode = Spry.Widget.SlidingPanels.KEY_LEFT;
this.nextPanelKeyCode = Spry.Widget.SlidingPanels.KEY_RIGHT;
this.currentPanelClass = "SlidingPanelsCurrentPanel";
this.focusedClass = "SlidingPanelsFocused";
this.animatingClass = "SlidingPanelsAnimating";
Spry.Widget.SlidingPanels.setOptions(this, opts);
if (this.element)
this.element.style.overflow = "hidden";
// Developers can specify the default panel as an index,
// id or an actual element node. Make sure to normalize
// it into an element node because that is what we expect
// internally.
if (this.defaultPanel)
if (typeof this.defaultPanel == "number")
this.currentPanel = this.getContentPanels()[this.defaultPanel];
else
this.currentPanel = this.getElement(this.defaultPanel);
// If we still don't have a current panel, use the first one!
if (!this.currentPanel)
this.currentPanel = this.getContentPanels()[0];
// Since we rely on the positioning information of the
// panels, we need to wait for the onload event to fire before
// we can attempt to show the initial panel. Once the onload
// fires, we know that all CSS files have loaded. This is
// especially important for Safari.
if (Spry.Widget.SlidingPanels.onloadDidFire)
this.attachBehaviors();
else
Spry.Widget.SlidingPanels.loadQueue.push(this);
Spry.Widget.SlidingPanels.prototype.onFocus = function(e)
this.hasFocus = true;
this.addClassName(this.element, this.focusedClass);
return false;
Spry.Widget.SlidingPanels.prototype.onBlur = function(e)
this.hasFocus = false;
this.removeClassName(this.element, this.focusedClass);
return false;
Spry.Widget.SlidingPanels.KEY_LEFT = 37;
Spry.Widget.SlidingPanels.KEY_UP = 38;
Spry.Widget.SlidingPanels.KEY_RIGHT = 39;
Spry.Widget.SlidingPanels.KEY_DOWN = 40;
Spry.Widget.SlidingPanels.prototype.onKeyDown = function(e)
var key = e.keyCode;
if (!this.hasFocus || (key != this.previousPanelKeyCode && key != this.nextPanelKeyCode))
return true;
if (key == this.nextPanelKeyCode)
this.showNextPanel();
else /* if (key == this.previousPanelKeyCode) */
this.showPreviousPanel();
if (e.preventDefault) e.preventDefault();
else e.returnValue = false;
if (e.stopPropagation) e.stopPropagation();
else e.cancelBubble = true;
return false;
Spry.Widget.SlidingPanels.prototype.attachBehaviors = function()
var ele = this.element;
if (!ele)
return;
if (this.enableKeyboardNavigation)
var focusEle = null;
var tabIndexAttr = ele.attributes.getNamedItem("tabindex");
if (tabIndexAttr || ele.nodeName.toLowerCase() == "a")
focusEle = ele;
if (focusEle)
var self = this;
Spry.Widget.SlidingPanels.addEventListener(focusEle, "focus", function(e) { return self.onFocus(e || window.event); }, false);
Spry.Widget.SlidingPanels.addEventListener(focusEle, "blur", function(e) { return self.onBlur(e || window.event); }, false);
Spry.Widget.SlidingPanels.addEventListener(focusEle, "keydown", function(e) { return self.onKeyDown(e || window.event); }, false);
if (this.currentPanel)
// Temporarily turn off animation when showing the
// initial panel.
var ea = this.enableAnimation;
this.enableAnimation = false;
this.showPanel(this.currentPanel);
this.enableAnimation = ea;
Spry.Widget.SlidingPanels.prototype.getElement = function(ele)
if (ele && typeof ele == "string")
return document.getElementById(ele);
return ele;
Spry.Widget.SlidingPanels.prototype.addClassName = function(ele, className)
if (!ele || !className || (ele.className && ele.className.search(new RegExp("\\b" + className + "\\b")) != -1))
return;
ele.className += (ele.className ? " " : "") + className;
Spry.Widget.SlidingPanels.prototype.removeClassName = function(ele, className)
if (!ele || !className || (ele.className && ele.className.search(new RegExp("\\b" + className + "\\b")) == -1))
return;
ele.className = ele.className.replace(new RegExp("\\s*\\b" + className + "\\b", "g"), "");
Spry.Widget.SlidingPanels.setOptions = function(obj, optionsObj, ignoreUndefinedProps)
if (!optionsObj)
return;
for (var optionName in optionsObj)
if (ignoreUndefinedProps && optionsObj[optionName] == undefined)
continue;
obj[optionName] = optionsObj[optionName];
Spry.Widget.SlidingPanels.prototype.getElementChildren = function(element)
var children = [];
var child = element.firstChild;
while (child)
if (child.nodeType == 1 /* Node.ELEMENT_NODE */)
children.push(child);
child = child.nextSibling;
return children;
Spry.Widget.SlidingPanels.prototype.getCurrentPanel = function()
return this.currentPanel;
Spry.Widget.SlidingPanels.prototype.getContentGroup = function()
return this.getElementChildren(this.element)[0];
Spry.Widget.SlidingPanels.prototype.getContentPanels = function()
return this.getElementChildren(this.getContentGroup());
Spry.Widget.SlidingPanels.prototype.getContentPanelsCount = function()
return this.getContentPanels().length;
Spry.Widget.SlidingPanels.onloadDidFire = false;
Spry.Widget.SlidingPanels.loadQueue = [];
Spry.Widget.SlidingPanels.addLoadListener = function(handler)
if (typeof window.addEventListener != 'undefined')
window.addEventListener('load', handler, false);
else if (typeof document.addEventListener != 'undefined')
document.addEventListener('load', handler, false);
else if (typeof window.attachEvent != 'undefined')
window.attachEvent('onload', handler);
Spry.Widget.SlidingPanels.processLoadQueue = function(handler)
Spry.Widget.SlidingPanels.onloadDidFire = true;
var q = Spry.Widget.SlidingPanels.loadQueue;
var qlen = q.length;
for (var i = 0; i < qlen; i++)
q[i].attachBehaviors();
Spry.Widget.SlidingPanels.addLoadListener(Spry.Widget.SlidingPanels.pr ocessLoadQueue);
Spry.Widget.SlidingPanels.addEventListener = function(element, eventType, handler, capture)
try
if (element.addEventListener)
element.addEventListener(eventType, handler, capture);
else if (element.attachEvent)
element.attachEvent("on" + eventType, handler);
catch (e) {}
Spry.Widget.SlidingPanels.prototype.getContentPanelIndex = function(ele)
if (ele)
ele = this.getElement(ele);
var panels = this.getContentPanels();
var numPanels = panels.length;
for (var i = 0; i < numPanels; i++)
if (panels[i] == ele)
return i;
return -1;
Spry.Widget.SlidingPanels.prototype.showPanel = function(elementOrIndex)
var pIndex = -1;
if (typeof elementOrIndex == "number")
pIndex = elementOrIndex;
else // Must be the element for the content panel.
pIndex = this.getContentPanelIndex(elementOrIndex);
var numPanels = this.getContentPanelsCount();
if (numPanels > 0)
pIndex = (pIndex >= numPanels) ? numPanels - 1 : pIndex;
else
pIndex = 0;
var panel = this.getContentPanels()[pIndex];
var contentGroup = this.getContentGroup();
if (panel && contentGroup)
if (this.currentPanel)
this.removeClassName(this.currentPanel, this.currentPanelClass);
this.currentPanel = panel;
var nx = -panel.offsetLeft;
var ny = -panel.offsetTop;
if (this.enableAnimation)
if (this.animator)
this.animator.stop();
var cx = contentGroup.offsetLeft;
var cy = contentGroup.offsetTop;
if (cx != nx || cy != ny)
var self = this;
this.addClassName(this.element, this.animatingClass);
this.animator = new Spry.Widget.SlidingPanels.PanelAnimator(contentGroup, cx, cy, nx, ny, { duration: this.duration, fps: this.fps, transition: this.transition, finish: function()
self.removeClassName(self.element, self.animatingClass);
self.addClassName(panel, self.currentPanelClass);
this.animator.start();
else
contentGroup.style.left = nx + "px";
contentGroup.style.top = ny + "px";
this.addClassName(panel, this.currentPanelClass);
return panel;
Spry.Widget.SlidingPanels.prototype.showFirstPanel = function()
return this.showPanel(0);
Spry.Widget.SlidingPanels.prototype.showLastPanel = function()
return this.showPanel(this.getContentPanels().length - 1);
Spry.Widget.SlidingPanels.prototype.showPreviousPanel = function()
return this.showPanel(this.getContentPanelIndex(this.currentPanel) - 1);
Spry.Widget.SlidingPanels.prototype.showNextPanel = function()
return this.showPanel(this.getContentPanelIndex(this.currentPanel) + 1);
Spry.Widget.SlidingPanels.PanelAnimator = function(ele, curX, curY, dstX, dstY, opts)
this.element = ele;
this.curX = curX;
this.curY = curY;
this.dstX = dstX;
this.dstY = dstY;
this.fps = 60;
this.duration = 500;
this.transition = Spry.Widget.SlidingPanels.PanelAnimator.defaultTransition;
this.startTime = 0;
this.timerID = 0;
this.finish = null;
var self = this;
this.intervalFunc = function() { self.step(); };
Spry.Widget.SlidingPanels.setOptions(this, opts, true);
this.interval = 1000/this.fps;
Spry.Widget.SlidingPanels.PanelAnimator.defaultTransition = function(time, begin, finish, duration) { time /= duration; return begin + ((2 - time) * time * finish); };
Spry.Widget.SlidingPanels.PanelAnimator.prototype.start = function()
this.stop();
this.startTime = (new Date()).getTime();
this.timerID = setTimeout(this.intervalFunc, this.interval);
Spry.Widget.SlidingPanels.PanelAnimator.prototype.stop = function()
if (this.timerID)
clearTimeout(this.timerID);
this.timerID = 0;
Spry.Widget.SlidingPanels.PanelAnimator.prototype.step = function()
var elapsedTime = (new Date()).getTime() - this.startTime;
var done = elapsedTime >= this.duration;
var x, y;
if (done)
x = this.curX = this.dstX;
y = this.curY = this.dstY;
else
x = this.transition(elapsedTime, this.curX, this.dstX - this.curX, this.duration);
y = this.transition(elapsedTime, this.curY, this.dstY - this.curY, this.duration);
this.element.style.left = x + "px";
this.element.style.top = y + "px";
if (!done)
this.timerID = setTimeout(this.intervalFunc, this.interval);
else if (this.finish)
this.finish();And on a side note, if it's just IE6 where the problem arises, should I care???
Have a look here http://www.w3counter.com/globalstats.php
Gramps -
No Control Panel? Windows 8.1
Hey,
I just upgraded to windows 8.1 pro 64bit but i don't get the option to install the control panel.
Sound card: PCI Express X-Fi Titanium Fatal1ty Pro Series
I installed these drivers:
Creative Sound Blaster X-Fi Titanium stuurprogramma (for windows 8.1)
Creative ALchemy 1.45.01
On windows 7 64bit i didn't have this problem.
I just had to install this driver:
Creative Sound Blaster X-Fi Titanium stuurprogramma 2.17.0008
And during the installation i got the option to install like 8 different programs to install for my soundcard including the Control Panel wich i pretty much only care about
For the windows 8.1 driver i got the option to only install 3 programs in installed them all but no control panel.
driver.jpg
I dont understand this, did they not make a control panel for windows 8.1?
Thanks allot!Originally Posted by dylan1990
Hey,
I just upgraded to windows 8.1 pro 64bit but i don't get the option to install the control panel.
Sound card: PCI Express X-Fi Titanium Fatal1ty Pro Series
I installed these drivers:
Creative Sound Blaster X-Fi Titanium stuurprogramma (for windows 8.1)
Creative ALchemy 1.45.01
On windows 7 64bit i didn't have this problem.
I just had to install this driver:
Creative Sound Blaster X-Fi Titanium stuurprogramma 2.17.0008
And during the installation i got the option to install like 8 different programs to install for my soundcard including the Control Panel wich i pretty much only care about
For the windows 8.1 driver i got the option to only install 3 programs in installed them all but no control panel.
driver.jpg
I dont understand this, did they not make a control panel for windows 8.1?
Thanks allot!
Hi dylan1990,
You may want to reinstall the drivers again. From the details section, it did mention that the driver includes Creative Audio Control Panel in Win 8.1.
Hope the suggestion works for you. -
Is it possible to get one sliding panel to automatically display a web site?
I have a slinding panel widget with 6 content panes. One of the tabs is named "Online Help'. I would like the content pane for that tab to automattically display a form that is on a website.
The 'onclick' that is associated with the "Online Help" tab is calling the sliding panel number. If I repace it with an http address, the other panels continue to display but, that panel displays blank.
I have tried a CSS style tag for the panel that includes the http url in a background attribute. That is not working either.
I made a stab at spry:detailregion, but I don't know if a url can be a prameter in that element.
Does anyone have ideas on what I can try?
Thanks,
meileendoughertyWell, a url can be the contents of a data cell, but it will only give you a link, not the other website.
Although iframes are often considered tricky, I have not had bad luck with them. Put an iframe in your content cell, and use your other website as the source. You will have to give the iframe dimensions, or it will default to 'pretty small'.
Beth
Maybe you are looking for
-
Problem with output invoice SD
Hi developers, I have a problem when I must print an invoice because appairs the message' Not message available for the output'. In VV32 the condition is OK and also the customizing is OK. If open the invoice and in the header save the message of out
-
I have a topic at link: http://social.msdn.microsoft.com/Forums/en-US/7b74fd63-1d0d-449e-9f31-83b707683053/finding-microsoft-document-about-globe-contact-in-outlook-address-book?forum=outlookdev&prof=required Please see the post first. I dot not make
-
How can a star based slideshow be split into two using metadata?
I created a slideshow based on a five star sort. It is too long so I want to split it into two, one for Australia and the other for Polynesia.. Images are are titled under Australia and Polynesia in the metadata. how can I use the metadata headings
-
My '3D-mode' as well as some 'workspaces' like 'Analysis' dissapeared since I opened Photoshop the last time. Now I can not work with 3D-layers for example. Does anybody know, how I could switch it on again?
-
A couple of weeks ago I uninstalled Quicktime from my laptop, by simply dragging it from my Applications folder to the Trash. I didn't delete any other files, and I left Appcleaner out of it b/c I knew I would be downloading it again. I went to Apple