stoped
This commit is contained in:
parent
4870c5f091
commit
7e2187d8c5
1 changed files with 66 additions and 50 deletions
|
@ -20,7 +20,7 @@
|
||||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
// DEALINGS IN THE SOFTWARE.
|
// DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
// $Id: XLayer.cc,v 1.3 2003/02/02 16:32:41 rathnor Exp $
|
// $Id: XLayer.cc,v 1.4 2003/02/03 13:45:23 fluxgen Exp $
|
||||||
|
|
||||||
#include "XLayer.hh"
|
#include "XLayer.hh"
|
||||||
#include "XLayerItem.hh"
|
#include "XLayerItem.hh"
|
||||||
|
@ -35,45 +35,42 @@ XLayer::XLayer(MultLayers &manager, int layernum):
|
||||||
}
|
}
|
||||||
|
|
||||||
XLayer::~XLayer() {
|
XLayer::~XLayer() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void XLayer::restack() {
|
void XLayer::restack() {
|
||||||
int numWindows = countWindows();
|
int num_windows = countWindows();
|
||||||
|
|
||||||
// each LayerItem can contain several windows
|
// each LayerItem can contain several windows
|
||||||
iterator it = itemList().begin();
|
iterator it = itemList().begin();
|
||||||
iterator it_end = itemList().end();
|
iterator it_end = itemList().end();
|
||||||
it = itemList().begin();
|
Window *winlist = new Window[num_windows];
|
||||||
it_end = itemList().end();
|
|
||||||
Window *winlist = new Window[numWindows];
|
|
||||||
size_t j=0;
|
size_t j=0;
|
||||||
for (size_t i=0; it != it_end; ++it, i++) {
|
for (size_t window=0; it != it_end; ++it, window++) {
|
||||||
XLayerItem::Windows::const_iterator wit = (*it)->getWindows().begin();
|
winlist[window] = (*it)->window();
|
||||||
XLayerItem::Windows::const_iterator wit_end = (*it)->getWindows().end();
|
|
||||||
for (; wit != wit_end; ++wit, j++) {
|
|
||||||
winlist[j] = (*wit);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
XRestackWindows(FbTk::App::instance()->display(), winlist, numWindows);
|
XRestackWindows(FbTk::App::instance()->display(), winlist, num_windows);
|
||||||
|
|
||||||
delete [] winlist;
|
delete [] winlist;
|
||||||
}
|
}
|
||||||
|
|
||||||
int XLayer::countWindows() {
|
int XLayer::countWindows() {
|
||||||
int numWindows = 0;
|
int num_windows = 0;
|
||||||
iterator it = itemList().begin();
|
iterator it = itemList().begin();
|
||||||
iterator it_end = itemList().end();
|
iterator it_end = itemList().end();
|
||||||
for (size_t i=0; it != it_end; ++it, i++) {
|
for (size_t i=0; it != it_end; ++it, i++) {
|
||||||
numWindows += (*it)->numWindows();
|
num_windows ++; // one window per item
|
||||||
}
|
}
|
||||||
return numWindows;
|
return num_windows;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void XLayer::stackBelowItem(XLayerItem *item, XLayerItem *above) {
|
void XLayer::stackBelowItem(XLayerItem *item, XLayerItem *above) {
|
||||||
|
//!! What????
|
||||||
|
|
||||||
// little optimisation
|
// little optimisation
|
||||||
Window *winlist;
|
/* Window *winlist;
|
||||||
size_t i, size, num = item->numWindows();
|
size_t i, size, num = item->numWindows();
|
||||||
|
|
||||||
if (!above) { // must need to go right to top
|
if (!above) { // must need to go right to top
|
||||||
|
@ -105,61 +102,70 @@ void XLayer::stackBelowItem(XLayerItem *item, XLayerItem *above) {
|
||||||
XRestackWindows(FbTk::App::instance()->display(), winlist, size);
|
XRestackWindows(FbTk::App::instance()->display(), winlist, size);
|
||||||
|
|
||||||
delete [] winlist;
|
delete [] winlist;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
XLayer::iterator XLayer::insert(XLayerItem &item, unsigned int pos) {
|
XLayer::iterator XLayer::insert(XLayerItem &item, unsigned int pos) {
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
if (pos != 0)
|
if (pos != 0)//!! Why????
|
||||||
cerr<<__FILE__<<"("<<__LINE__<<"): Insert using non-zero position not valid in XLayer"<<endl;
|
cerr<<__FILE__<<"("<<__LINE__<<"): Insert using non-zero position not valid in XLayer"<<endl;
|
||||||
#endif // DEBUG
|
#endif // DEBUG
|
||||||
|
|
||||||
itemList().push_front(&item);
|
itemList().push_front(&item);
|
||||||
item.setLayer(this);
|
|
||||||
// restack below next window up
|
// restack below next window up
|
||||||
item.setLayerIterator(itemList().begin());
|
// item.setLayerIterator(itemList().begin());
|
||||||
stackBelowItem(&item, m_manager.getLowestItemAboveLayer(m_layernum));
|
stackBelowItem(&item, m_manager.getLowestItemAboveLayer(m_layernum));
|
||||||
return itemList().begin();
|
return itemList().begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
void XLayer::remove(XLayerItem &item) {
|
void XLayer::remove(XLayerItem &item) {
|
||||||
itemList().erase(item.getLayerIterator());
|
iterator it = itemList().begin();
|
||||||
item.setLayer(0);
|
iterator it_end = itemList().end();
|
||||||
|
for (; it != it_end; ++it) {
|
||||||
|
if (*it == &item)
|
||||||
|
itemList().erase(it);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void XLayer::cycleUp() {
|
void XLayer::cycleUp() {
|
||||||
// need to find highest visible window, and move it to bottom
|
// need to find highest visible window, and move it to bottom
|
||||||
iterator it = itemList().begin();
|
iterator it = itemList().begin();
|
||||||
iterator it_end = itemList().end();
|
iterator it_end = itemList().end();
|
||||||
while (it != it_end && !(*it)->visible()) ++it;
|
while (it != it_end && !(*it)->visible())
|
||||||
|
++it;
|
||||||
|
|
||||||
// if there is something to do
|
// if there is something to do
|
||||||
if (it != it_end) {
|
if (it != it_end)
|
||||||
lower(**it);
|
lower(**it);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void XLayer::cycleDown() {
|
void XLayer::cycleDown() {
|
||||||
// need to find highest visible window, and move it to bottom
|
// need to find highest visible window, and move it to bottom
|
||||||
reverse_iterator it = itemList().rbegin();
|
reverse_iterator it = itemList().rbegin();
|
||||||
reverse_iterator it_end = itemList().rend();
|
reverse_iterator it_end = itemList().rend();
|
||||||
while (it != it_end && !(*it)->visible()) ++it;
|
while (it != it_end && !(*it)->visible())
|
||||||
|
++it;
|
||||||
|
|
||||||
// if there is something to do
|
// if there is something to do
|
||||||
if (it != it_end) {
|
if (it != it_end)
|
||||||
raise(**it);
|
raise(**it);
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void XLayer::stepUp(XLayerItem &item) {
|
void XLayer::stepUp(XLayerItem &item) {
|
||||||
// need to find next visible window upwards, and put it above that
|
// need to find next visible window upwards, and put it above that
|
||||||
|
|
||||||
if (&item == itemList().front()) return; // nothing to do
|
if (&item == itemList().front())
|
||||||
|
return; // nothing to do
|
||||||
|
|
||||||
|
//!! better stable and slow than buggy!
|
||||||
|
/*
|
||||||
// TODO: is there a better way of doing this?
|
// TODO: is there a better way of doing this?
|
||||||
iterator it = item.getLayerIterator();
|
iterator it = item.getLayerIterator();
|
||||||
it--;
|
it--;
|
||||||
while ((*it) != itemList().front() && !(*it)->visible()) --it;
|
while ((*it) != itemList().front() && !(*it)->visible())
|
||||||
|
--it;
|
||||||
|
|
||||||
if (*it == itemList().front() && !(*it)->visible()) {
|
if (*it == itemList().front() && !(*it)->visible()) {
|
||||||
// reached front item, but it wasn't visible, therefore it was already raised
|
// reached front item, but it wasn't visible, therefore it was already raised
|
||||||
|
@ -176,33 +182,36 @@ void XLayer::stepUp(XLayerItem &item) {
|
||||||
stackBelowItem(&item, *it);
|
stackBelowItem(&item, *it);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void XLayer::stepDown(XLayerItem &item) {
|
void XLayer::stepDown(XLayerItem &item) {
|
||||||
// need to find next visible window down, and put it below that
|
// need to find next visible window down, and put it below that
|
||||||
if (&item == itemList().back()) return; // nothing to do
|
if (&item == itemList().back())
|
||||||
|
return; // nothing to do
|
||||||
|
|
||||||
|
//!! better stable and slow than buggy!
|
||||||
iterator it = item.getLayerIterator();
|
/* iterator it = item.getLayerIterator();
|
||||||
it++;
|
it++;
|
||||||
iterator it_end = itemList().end();
|
iterator it_end = itemList().end();
|
||||||
while (it != it_end && !(*it)->visible()) ++it;
|
while (it != it_end && !(*it)->visible())
|
||||||
|
++it;
|
||||||
|
|
||||||
if (it != it_end) {
|
if (it != it_end)
|
||||||
stackBelowItem(&item, *it);
|
stackBelowItem(&item, *it);
|
||||||
}
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//!!
|
||||||
void XLayer::raise(XLayerItem &item) {
|
void XLayer::raise(XLayerItem &item) {
|
||||||
// assume it is already in this layer
|
// assume it is already in this layer
|
||||||
|
|
||||||
if (&item == itemList().front()) {
|
if (&item == itemList().front())
|
||||||
return; // nothing to do
|
return; // nothing to do
|
||||||
}
|
|
||||||
|
|
||||||
itemList().erase(item.getLayerIterator());
|
// itemList().erase(item.getLayerIterator());
|
||||||
itemList().push_front(&item);
|
itemList().push_front(&item);
|
||||||
item.setLayerIterator(itemList().begin());
|
// item.setLayerIterator(itemList().begin());
|
||||||
stackBelowItem(&item, m_manager.getLowestItemAboveLayer(m_layernum));
|
stackBelowItem(&item, m_manager.getLowestItemAboveLayer(m_layernum));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -212,6 +221,8 @@ void XLayer::lower(XLayerItem &item) {
|
||||||
if (&item == itemList().back())
|
if (&item == itemList().back())
|
||||||
return; // nothing to do
|
return; // nothing to do
|
||||||
|
|
||||||
|
//!! better stable and slow than buggy!
|
||||||
|
/*
|
||||||
itemList().erase(item.getLayerIterator());
|
itemList().erase(item.getLayerIterator());
|
||||||
itemList().push_back(&item);
|
itemList().push_back(&item);
|
||||||
iterator it = itemList().end();
|
iterator it = itemList().end();
|
||||||
|
@ -219,28 +230,33 @@ void XLayer::lower(XLayerItem &item) {
|
||||||
item.setLayerIterator(it);
|
item.setLayerIterator(it);
|
||||||
it--;
|
it--;
|
||||||
stackBelowItem(&item, *it); // must exist, otherwise item must == itemList().back()
|
stackBelowItem(&item, *it); // must exist, otherwise item must == itemList().back()
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
XLayerItem *XLayer::getLowestItem() {
|
XLayerItem *XLayer::getLowestItem() {
|
||||||
if (itemList().empty()) return 0;
|
if (itemList().empty())
|
||||||
else return itemList().back();
|
return 0;
|
||||||
|
else
|
||||||
|
return itemList().back();
|
||||||
}
|
}
|
||||||
|
|
||||||
XLayerItem *XLayer::getItemBelow(XLayerItem &item) {
|
XLayerItem *XLayer::getItemBelow(XLayerItem &item) {
|
||||||
iterator it = item.getLayerIterator();
|
//!! better stable and slow than buggy!
|
||||||
if (it == itemList().begin()) {
|
/* iterator it = item.getLayerIterator();
|
||||||
|
if (it == itemList().begin())
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
else
|
||||||
return *(--it);
|
return *(--it);
|
||||||
}
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
XLayerItem *XLayer::getItemAbove(XLayerItem &item) {
|
XLayerItem *XLayer::getItemAbove(XLayerItem &item) {
|
||||||
iterator it = item.getLayerIterator();
|
//!! better stable and slow than buggy!
|
||||||
|
/* iterator it = item.getLayerIterator();
|
||||||
it++;
|
it++;
|
||||||
if (it == itemList().end()) {
|
if (it == itemList().end())
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
else
|
||||||
return *it;
|
return *it;
|
||||||
}
|
*/
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue