cdesktopenv/cde/programs/dtprintinfo/UI/DtSetModList.C

213 lines
5.6 KiB
C

/*
* CDE - Common Desktop Environment
*
* Copyright (c) 1993-2012, The Open Group. All rights reserved.
*
* These libraries and programs are free software; you can
* redistribute them and/or modify them under the terms of the GNU
* Lesser General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* These libraries and programs are distributed in the hope that
* they will be useful, but WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with these libraries and programs; if not, write
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
* Floor, Boston, MA 02110-1301 USA
*/
/* $XConsortium: DtSetModList.C /main/2 1995/07/17 14:04:17 drk $ */
/* *
* (c) Copyright 1993, 1994 Hewlett-Packard Company *
* (c) Copyright 1993, 1994 International Business Machines Corp. *
* (c) Copyright 1993, 1994 Sun Microsystems, Inc. *
* (c) Copyright 1993, 1994 Novell, Inc. *
*/
#include "DtSetModList.h"
#include "DtMainW.h"
#include "DtWorkArea.h"
#include "Button.h"
#include "IconObj.h"
#include "LabelObj.h"
#include "Container.h"
#include "dtprintinfomsg.h"
DtSetModList::DtSetModList(AnyUI *parent,
char *name,
BaseUI *workarea,
ButtonCallback filterCB)
: Dialog(parent, name)
{
mainw = (DtMainW *) parent;
_has_been_posted = false;
_info = new LabelObj(this, MESSAGE(SelectPrintersToBeShowL));
_container = new Container(this, "FilterList", SCROLLED_VERTICAL_ROW_COLUMN,
MULTIPLE_SELECT);
_container->IconView(SMALL_ICON);
_filterCB = filterCB;
_workarea = (Container *) workarea;
Container *form = new Container(this, "Form", FORM);
_info->AttachRight();
_info->AttachLeft();
_info->AttachTop();
form->AttachBottom();
form->AttachRight();
form->AttachLeft();
_container->AttachBottom(form, 5);
_container->AttachRight();
_container->AttachLeft();
_container->AttachTop(_info);
select_all = new Button(form, MESSAGE(SelectAllL), PUSH_BUTTON, SelectAllCB,
_container);
unselect_all = new Button(form, MESSAGE(DeselectAllL), PUSH_BUTTON,
UnSelectAllCB, _container);
int i;
IconObj **objs = (IconObj **) workarea->Children();
for (i = 0; i < workarea->NumChildren(); i++)
{
if (objs[i]->UIClass() == ICON)
{
IconObj *icon = new IconObj(_container, (char *)objs[i]->Name(),
objs[i]->IconFile());
icon->ApplicationData = objs[i];
}
}
ok = new Button(this, MESSAGE(OKL), PUSH_BUTTON, OkCB, this);
apply = new Button(this, MESSAGE(ApplyL), PUSH_BUTTON, ApplyCB, this);
cancel = new Button(this, MESSAGE(CancelL), PUSH_BUTTON, CancelCB, this);
help = new Button(this, MESSAGE(HelpL), PUSH_BUTTON, HelpCB, this);
DefaultButton(ok);
CancelButton(cancel);
Reset();
}
DtSetModList::~DtSetModList()
{
// Empty
}
boolean DtSetModList::SetVisiblity(boolean flag)
{
if (_has_been_posted == false)
{
int height;
if (_container->NumChildren())
{
BaseUI **kids = _container->Children();
height = (kids[0]->Height() + 4) * _container->NumChildren();
if (height > 300)
height = 300;
}
else
height = 200;
int width = StringWidth(Name()) + 30;
if (Width() < width)
{
width -= 10;
_container->WidthHeight(width, height);
}
else
_container->Height(height);
_has_been_posted = true;
int offset = (width - (select_all->Width() + unselect_all->Width())) / 3;
select_all->AttachLeft(offset);
unselect_all->AttachRight(offset);
unselect_all->AttachLeft(NULL, 0);
}
Reset();
Dialog::SetVisiblity(flag);
return true;
}
void DtSetModList::Reset()
{
int i;
IconObj **children = (IconObj **) _container->Children();
mainw->container->BeginUpdate();
for (i = 0; i < _container->NumChildren(); i++)
{
IconObj *icon = (IconObj *)children[i]->ApplicationData;
children[i]->Selected(icon->Visible());
if (strcmp(icon->Name(), children[i]->Name()))
children[i]->Name((char *)icon->Name());
if (strcmp(icon->IconFile(), children[i]->IconFile()))
children[i]->IconFile(icon->IconFile());
}
mainw->container->EndUpdate();
}
void DtSetModList::Apply()
{
if (_filterCB)
(*_filterCB)((void *)_container);
}
void DtSetModList::OkCB(void *data)
{
DtSetModList *obj = (DtSetModList *) data;
obj->Apply();
obj->Visible(false);
}
void DtSetModList::Cancel()
{
Reset();
Visible(false);
}
void DtSetModList::CloseCB()
{
Cancel();
}
void DtSetModList::CancelCB(void *data)
{
DtSetModList *obj = (DtSetModList *) data;
obj->Cancel();
}
void DtSetModList::ApplyCB(void *data)
{
DtSetModList *obj = (DtSetModList *) data;
obj->Apply();
}
void DtSetModList::SelectAllCB(void *data)
{
Container *obj = (Container *) data;
obj->SelectAll();
}
void DtSetModList::UnSelectAllCB(void *data)
{
Container *obj = (Container *) data;
obj->SelectAll(false);
}
void DtSetModList::HelpCB(void *data)
{
DtSetModList *obj = (DtSetModList *) data;
obj->HandleHelpRequest();
}
boolean DtSetModList::HandleHelpRequest()
{
mainw->DisplayHelp("ShowPrintersDE");
return true;
}